CUSTOM MENU SYSTEM
Salut,
Pour mon premier cours je vais vous apprendre à faire un custom menu system en Ruby/RGSS (en script en fait ^^'), le but est que vous appreniez quelques commande de Ruby et que vous utilisiez le moins d'event possible, pour éviter le plus de lag possible
Alors, je vous propose de commencer de suite =D Pour ce cour, nous allons en fait analyser certaines commandes du script de base Scene_title.
Pour mieux comprendre nous allons effacer le contenu du script Scene_title.
Ensuite vous allez collez ce bout de code, qui est indispensable au bon fonctionnement du script:
- Code:
-
#==============================================================================
# Scene_Title
#------------------------------------------------------------------------------
# Fait par {Votre Pseudo}
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Chargement des fichiers
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
$data_actors = load_data("Data/Actors.rxdata") Les lignes de ce types sont là pour charger les différents fichiers.
$data_actor est ce que l'on appelle un variable locale, j'vous dis ça juste pour la culture nous n'en auront pas besoin pour ce tuto
Remarque: Ce petit bout de code est en fait le début du script d'origine que vous venez d'effacer ^^
Vous allez me dire, "c'est bien tout ça, mais quand est-ce qu'on commence ?". Je pense qu'il est primordiale que je vous explique tout ce que je peux pour que vous puissiez savoir à quoi vous pouvez (ou ne pas) toucher dans un script
Bon on va bientôt commencer, encore un petit bout de code et on entre dans le scriptage pur.
- Code:
-
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
Ces deux lignes sont juste là pour qu'il y ait un fond dans votre écran titre, sans cela il le fond serai tout noir, vous pourrez essayer de l'enlevé à la fin du script. Ces deux lignes là aussi sont dans le script original.
Libre à vous de l'insérer ou pas dans le script final
Vous allez donc pouvoir scripter maintenant en suivant mes instructions.
Donc, maintenant, on va s'intéresser aux différents choix que le joueur aura sur l'écran titre, les plus courants sont: "Nouvelle Partie", "Charger" et "Quittez le jeu".
Ce qui nous fait trois possibilités, mais sachez que vous pouvez en mettre autant que vous voulez, pour les bonus ou les crédits, je vous expliquerai plus tard comment on fait pour rediriger les choix vers d'autres script ^^
Donc, pour insérer les choix, il nous suffit d'insérer ceci à la suite de ce que vous avez déjà inséré:
- Code:
-
s1 = "Le nom de votre choix"
s2= "Le nom de votre choix"
s3= "le nom de votre choix"
s4= "le nom de votre choix"
etc….. (Je pense que vous avez compris le principe ^^)
Ensuite, on va insérer la fenêtre de choix, mais on ne veux pas la voir (En fait, techniquement on pourrait ne pas la mettre mais il faudrait faire appelle à des variables d'instances et vous apprendriez moins de choses, donc au final on la met quand même, ne vous inquiétez pas, le résultat est le même
).
Pour ceci, on ajoute la ligne:
- Code:
-
@command_window = Window_Command.new(192, [s1, s2,s3])
Dans les crochets, vous mettez autant de "s" que vous en avez mis en haut !
Exemple: Si on met 4 choix:
- Code:
-
s1 = "Le nom de votre choix"
s2= "Le nom de votre choix"
s3= "le nom de votre choix"
s4= "le nom de votre choix"
Alors la ligne serait:
- Code:
-
@command_window = Window_Command.new(192, [s1, s2,s3,s4])
Après cette ligne, on ajoute les commande qui servent à régler l'opacité, ainsi que la position x (horizontale) et la position y (verticale) du cadre.
Remarque: Pour me souvenir à quoi correspond "x" et "y", je me réfère au repère (orthonormé), vue à partir de la 3eme avec x qui correspond à l'axe horizontal (axe des abscisses) et y qui correspond à l'axe vertical (axe des ordonnées), vous pouvez en faire de même si vous le voulez, surtout que ça vous évitera de confondre vos axes en physique si vous faite des études dans la section scientifique ;-)
Assez de blabla, voici le code ;-)
- Code:
-
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
Le but du jeu, comme je vous l'ai dit plus haut, est de ne plus voir ce fameux cadre, voila pourquoi j'ai mis des chiffres très grand pour les positions x et y, et que je n'ai pas mis d'opacité
Bon, puisque vous avez été sages, je vous mets le code que vous devriez avoir si vous avez bien suivis ce que j'ai dit (et si vous n'avez pas tout compris ^^').
- Code:
-
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Données
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Commandes
s1 = "Nouvelle Partie"
s2 = "Charger"
s3 = "Quitter"
@command_window = Window_Command.new(192, [s1, s2,s3])
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
Remarque: Les lignes commençant pas des "#" sont des lignes de commentaire, c'est-à-dire que rpg maker n'y pas attention pendant qu'il lit le script, vous pouvez donc marquer ce que vous voulez dans ce lignes (éviter de marqué des choses méchantes sur les admin, vous pourriez avoir des problèmes >.<) et vous pouvez en mettre autant que vous voulez.
Je vous recommande d'ailleurs, d'en abuser et de mettre le plus de commentaire, et de conseil pour que votre script soit lisible par les autres, et pour puissiez vous y retrouvé vous-même
Vous n'êtes pas obliger de les mettre, pour ce script, même si je vous le conseil.
Ne chercher pas à voir le résultat, le script n'est pas complet donc vous tomberez sur une erreur !
Maintenant que les commandes sont rentré nous allons, indiquer les images que nous utiliseront pour les différents choix (Nouvelle partie, Charger, Quitter).
Pour cela, on commence par insérer la ligne suivante:
- Code:
-
@np = Sprite.new
Vous vous demandé pourquoi il y a plein de ligne avec des "@".
Tous simplement parce que ce sont des variables d'instance. Elles seront donc accessibles tout au long de la vie de notre objet, et de n'importe quel endroit de notre objet.
En gros, cela nous permettra de les utilisés tout au long de ce script
Et j'ai mis np pour nouvelle partie mais vous pouvez mettre le nom que vous voulez ^^
- Code:
-
@np.bitmap = RPG::Cache.picture("Nom de votre image")
Cette ligne nous permet d'attribuer l'image à la variable d'instance en indiquant sont emplacement et son nom.
"picture" indique l'emplacement, (donc dans le dossier picture, vous l'aurez deviné)
Et entre guillemet il vous suffit de mettre le nom de votre image.
Et pour finir vous mettez la position de l'image…Et oui nos fameux x et y reviennent
- Code:
-
@np.x =0
@np.y = 0
: _La valeur maximal de x est 640
_La valeur maximal de y est 480
Si vous dépasser ces valeurs, vos images sortirons de l'écran et vous ne les verrez pas.
Et bien voila, nous avons créé le choix Nouvelle partie.
Et il faudra le faire autant de fois que vous avez créé de choix.
Je vous le fait pour le choix "Charger".
- Code:
-
@cp = Sprite.new
@cp.bitmap = RPG::Cache.picture("Charger")
@cp.x = 400
@cp.y = 200
Maintenant à vous de le faire pour le troisième choix: "Quitter"
C'est en forgeant que l'on devient forgerons
Mais ne vous inquiétez pas je vous montre ce que j'ai fait en exemple pour ceux qui sont perdu.
- Code:
-
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Données
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Commandes
s1 = "Nouvelle Partie"
s2 = "Charger"
s3 = "Quitter"
@command_window = Window_Command.new(192, [s1, s2,s3])
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
#Mise en place des images
@np = Sprite.new
@np.bitmap = RPG::Cache.picture("1")
@np.x = 200
@np.y = 300
@cp = Sprite.new
@cp.bitmap = RPG::Cache.picture("2")
@cp.x = 400
@cp.y = 200
@qp = Sprite.new
@qp.bitmap = RPG::Cache.picture("3")
@qp.x = 0
@qp.y = 0
Vous ne pouvez toujours pas voir le résultat, mais si vous obtenez à peu près ceci, vous êtes sur la bonne voie ^^
Bon là on va faire un bloc de copier coller, car ça ne touche pas la partie graphique et c'est déjà présent dans le script original, et je vous ai mis des commentaires dans le code
- Code:
-
# @continue_enabled true, false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
@continue_enabled = true
end
end
# continue
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# BGM Son
$game_system.bgm_play($data_system.title_bgm)
# Fin BGS et ME Fin du son
Audio.me_stop
Audio.bgs_stop
# Transition 1
Graphics.transition
loop do
# update images
Graphics.update
Input.update
update
if $scene != self
break
end
end
# Transitions 2
Graphics.freeze
Maintenant on va faire en sorte que les images soient effacer une fois que l'écran titre est passé.
Pour cela on utilise la commande ".dispose" comme ceci:
- Code:
-
@command_window.dispose
@np.dispose
Et on rajoute pour chaque choix, pour obtenir:
- Code:
-
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
end
Et voila, nous avons terminé la partie initialisation =D
A là fin de cette partie, vous devriez obtenir quelque chose de ce genre:
- Code:
-
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Données
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Commandes
s1 = "Nouvelle Partie"
s2 = "Charger"
s3 = "Quitter"
@command_window = Window_Command.new(192, [s1, s2,s3])
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
#Mise en place des images
@np = Sprite.new
@np.bitmap = RPG::Cache.picture("1")
@np.x = 200
@np.y = 300
@cp = Sprite.new
@cp.bitmap = RPG::Cache.picture("2")
@cp.x = 400
@cp.y = 200
@qp = Sprite.new
@qp.bitmap = RPG::Cache.picture("3")
@qp.x = 0
@qp.y = 0
# @continue_enabled true, false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
@continue_enabled = true
end
end
# continue
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# BGM Son
$game_system.bgm_play($data_system.title_bgm)
# Fin BGS et ME Fin du son
Audio.me_stop
Audio.bgs_stop
# Transition 1
Graphics.transition
loop do
# update images
Graphics.update
Input.update
update
if $scene != self
break
end
end
# Transitions 2
Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
end
Bon et bien, ce n'est pas mal tout ça, si vous y êtes arrivé vous pouvez être fière de vous =D
Sinon, persistez et vous y arriverez ^^
Et si je vous dis que nous avons fait le plus dur et le plus long ?
Ah je savais que ça vous plairait.
Maintenant on va y allez à coup de copier collez, et je commenterai les commandes
Vous coller ceci à la suite de ce que nous avons déjà fait ^^
- Code:
-
#--------------------------------------------------------------------------
# Update
#--------------------------------------------------------------------------
def update
# Rafraichissement
@command_window.update
@np.update
@cp.update
@qp.update
update_command
De la même manière que l'on a utilisé la commande dispose, nous allons utiliser la commande update.
Elle fonctionne de la même manière comme vous pouvez le constater ;-)
Pareil vous en mettez autant qu'il y a de choix au départ.
Ensuite, nous allons indiquer à RPG Maker XP à quelles commandes correspondent tout ces choix.
Pour cela nous utilisons les conditions "if" et "when":
# Touche action
if Input.trigger?(Input::C)
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
end
end
Le "0" correspond au premier choix, le 1 au second etc…
Vous mettez autant de "when" qu'il y a de choix.
Remarque: Pour un éventuel quatrième choix, il faudrait faire appelle à la commande du script que vous utiliseriez.
Voila pour la partie 2, c'était plutôt rapide ^^
Pour les 3 parties suivantes nous allons faire un gros copié collé sans nous attarder puisque ce n'est pas important dans notre customisation.
- Code:
-
#--------------------------------------------------------------------------
# Définition des commandes - Commencer -
#--------------------------------------------------------------------------
def command_new_game
# Nouveau jeu
$game_system.se_play($data_system.decision_se)
# Fin BGM
Audio.bgm_stop
Graphics.frame_count = 0
# Données
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
# Début du jeu
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# Définition des commandes - Continue -
#--------------------------------------------------------------------------
def command_continue
# Continue
unless @continue_enabled
# SE
$game_system.se_play($data_system.buzzer_se)
return
end
# SE
$game_system.se_play($data_system.decision_se)
# Chargement
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# Définition des commandes - Quitter -
#--------------------------------------------------------------------------
def command_shutdown
# Fin
$game_system.se_play($data_system.decision_se)
# BGM、BGS、ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
$scene = nil
end
Il doit y avoir autant de partie que de choix !
Si par exemple vous ne mettez pas la possibilité de quitter, alors supprimer la 3eme partie !
Bon bah ce n'était pas trop dur ^^
Voici un récapitulatif de ce que vous avez obtenu (à quelque exceptions)
- Code:
-
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Données
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Commandes
s1 = "Nouvelle Partie"
s2 = "Charger"
s3 = "Quitter"
@command_window = Window_Command.new(192, [s1, s2,s3])
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
#Mise en place des images
@np = Sprite.new
@np.bitmap = RPG::Cache.picture("1")
@np.x = 200
@np.y = 300
@cp = Sprite.new
@cp.bitmap = RPG::Cache.picture("2")
@cp.x = 400
@cp.y = 200
@qp = Sprite.new
@qp.bitmap = RPG::Cache.picture("3")
@qp.x = 0
@qp.y = 0
# @continue_enabled true, false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
@continue_enabled = true
end
end
# continue
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# BGM Son
$game_system.bgm_play($data_system.title_bgm)
# Fin BGS et ME Fin du son
Audio.me_stop
Audio.bgs_stop
# Transition 1
Graphics.transition
loop do
# update images
Graphics.update
Input.update
update
if $scene != self
break
end
end
# Transitions 2
Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
# Rafraichissement
@command_window.update
@np.update
@cp.update
@qp.update
update_command
# Appuis C
if Input.trigger?(Input::C)
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Commencer -
#--------------------------------------------------------------------------
def command_new_game
# Nouveau jeu
$game_system.se_play($data_system.decision_se)
# Fin BGM
Audio.bgm_stop
Graphics.frame_count = 0
# Données
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
# Début du jeu
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Continue -
#--------------------------------------------------------------------------
def command_continue
# Continue
unless @continue_enabled
# SE
$game_system.se_play($data_system.buzzer_se)
return
end
# SE
$game_system.se_play($data_system.decision_se)
# Chargement
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Quitter -
#--------------------------------------------------------------------------
def command_shutdown
# Fin
$game_system.se_play($data_system.decision_se)
# BGM、BGS、ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
$scene = nil
end
Bon maintenant nous allons passez à une partie importante car c'est ce qui va permettre de personnalisé vraiment le script ^^
On va définir ce qu'il se passe quand l'on se trouve sur Nouveau jeu, charger etc….
Et pour cela nous allons utiliser l'opacité des images.
Je vais vous montrez pour le choix "0" (Donc ici, Nouvelle partie):
- Code:
-
def update_command
case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100
Les valeurs de l'opacité doivent être comprises entre 0 et 255, 0 pour invisible et 255 pour opaque.
Ici j'ai mis 255 pour np, et 100 pour le reste, histoire de mettre Nouvelle Partie en valeur ^^
Mais on aurait bien pu mettre 0 pour le reste pour ne plus rien voir.
Si on à un second choix, on ajoute :
- Code:
-
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100
Je vous laisse faire pour le troisième choix si vous en avez mis un
A la fin vous devriez obtenir quelque chose de ce genre:
- Code:
-
#--------------------------------------------------------------------------
# Opacité, visibilité etc....
#--------------------------------------------------------------------------
def update_command
case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100
when 2
@np.opacity = 100
@cp.opacity = 100
@qp.opacity = 255
end
end
Remarque: Les end sont la pour "terminer" le "def" et le "case", je n'en dit pas plus mais si vous voulez en savoir plus, je pense faire des cours de Ruby/RGSS
Et pour finir, on va collez ça et vous pourrez admirer le résultat:
- Code:
-
#--------------------------------------------------------------------------
# Fin
#--------------------------------------------------------------------------
def battle_test
# Test
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_battle_test_members
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# SE
$game_system.se_play($data_system.battle_start_se)
# BGM
$game_system.bgm_play($game_system.battle_bgm)
# Combat
$scene = Scene_Battle.new
end
end
Voila, le cours touche à sa fin, je vous donne les images pour essayer, mais après vous pouvez les faires vous-même avec des effets diverses
Ah et le code que j'ai obtenu pour comparer:
- Code:
-
#==============================================================================
# Scene_Title by Paran0iaK
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# Initialisation
#--------------------------------------------------------------------------
def main
if $BTEST
battle_test
return
end
# Données
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
$game_system = Game_System.new
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Commandes
s1 = "Nouvelle Partie"
s2 = "Charger"
s3 = "Quitter"
@command_window = Window_Command.new(192, [s1, s2,s3])
@command_window.back_opacity = 0
@command_window.x = 999
@command_window.y = 999
#Mise en place des images
@np = Sprite.new
@np.bitmap = RPG::Cache.picture("1")
@np.x = 0
@np.y = 350
@cp = Sprite.new
@cp.bitmap = RPG::Cache.picture("2")
@cp.x = 0
@cp.y = 380
@qp = Sprite.new
@qp.bitmap = RPG::Cache.picture("3")
@qp.x = 0
@qp.y =410
# @continue_enabled true, false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Sauvegarde#{i+1}.rxdata")
@continue_enabled = true
end
end
# continue
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# BGM Son
$game_system.bgm_play($data_system.title_bgm)
# Fin BGS et ME Fin du son
Audio.me_stop
Audio.bgs_stop
# Transition 1
Graphics.transition
loop do
# update images
Graphics.update
Input.update
update
if $scene != self
break
end
end
# Transitions 2
Graphics.freeze
@command_window.dispose
@np.dispose
@cp.dispose
@qp.dispose
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
# Rafraichissement
@command_window.update
@np.update
@cp.update
@qp.update
update_command
# Appuis C
if Input.trigger?(Input::C)
case @command_window.index
when 0
command_new_game
when 1
command_continue
when 2
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Commencer -
#--------------------------------------------------------------------------
def command_new_game
# Nouveau jeu
$game_system.se_play($data_system.decision_se)
# Fin BGM
Audio.bgm_stop
Graphics.frame_count = 0
# Données
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_map.autoplay
$game_map.update
# Début du jeu
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Continue -
#--------------------------------------------------------------------------
def command_continue
# Continue
unless @continue_enabled
# SE
$game_system.se_play($data_system.buzzer_se)
return
end
# SE
$game_system.se_play($data_system.decision_se)
# Chargement
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# ● Définition des commandes - Quitter -
#--------------------------------------------------------------------------
def command_shutdown
# Fin
$game_system.se_play($data_system.decision_se)
# BGM、BGS、ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
$scene = nil
end
#--------------------------------------------------------------------------
# Opacité, visibilité etc....
#--------------------------------------------------------------------------
def update_command
case @command_window.index
when 0
@np.opacity = 255
@cp.opacity = 100
@qp.opacity = 100
when 1
@np.opacity = 100
@cp.opacity = 255
@qp.opacity = 100
when 2
@np.opacity = 100
@cp.opacity = 100
@qp.opacity = 255
end
end
#--------------------------------------------------------------------------
# Fin
#--------------------------------------------------------------------------
def battle_test
# Test
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
Graphics.frame_count = 0
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_party.setup_battle_test_members
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# SE
$game_system.se_play($data_system.battle_start_se)
# BGM
$game_system.bgm_play($game_system.battle_bgm)
# Combat
$scene = Scene_Battle.new
end
end
Voila, s'en est terminer de ce premier cour, vous pouvez être fière de vous car pour la pluparts d'entre vous, ce sera votre premier script qui porte votre nom =O.
Pour toute question, suggestion, remarque etc… poster à la suite et je vous répondrai ^^
Et poster moi vos créations à la suite, ça fait toujours plaisir de voir ce que vous avez réussi à faire =D
Je tiens aussi à vous dire que mes cours seront mis régulièrement à jour avec de nouvelles possibilités de customisations
Je compte faire un prochain tuto pour faire un Custom Menu System, alors restez à la page.
Cordialement,
Paran0iaK, Tueur à Gage de Zarok.