Bonjour à tous et bonjour à toutes.
Alors aujourd'hui j'ai décidé de vous faire part de mes connaissances (très faibles ^^) sur des modifications mineures du menu, mais qui peuvent être utiles.
Sommaire :1. Modification des choix : objets, compétences, équiper, etc...
2. Suppression des fenêtres
3. Modification des valeurs x, y, largeur et hauteur
4. Modification de l'opacité, et un petit ajout
5. Exercice avec la Scene_End (pour quitter)
I Modification des choix : objets, compétences, équiper, etc...Prenons le script du menu :
- Code:
-
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs menu screen processing.
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# * Object Initialization
# menu_index : command cursor's initial position
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Make command window
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Statut"
s5 = "Sauvegarder"
s6 = "Quitter le jeu"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
# If number of party members is 0
if $game_party.actors.size == 0
# Disable items, skills, equipment, and status
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
# If save is forbidden
if $game_system.save_disabled
# Disable save
@command_window.disable_item(4)
end
# Make play time window
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
# Make steps window
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# Make gold window
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# Make status window
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# Execute transition
Graphics.transition
# Main loop
loop do
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
# Abort loop if screen is changed
if $scene != self
break
end
end
# Prepare for transition
Graphics.freeze
# Dispose of windows
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
# If command window is active: call update_command
if @command_window.active
update_command
return
end
# If status window is active: call update_status
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when command window is active)
#--------------------------------------------------------------------------
def update_command
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to map screen
$scene = Scene_Map.new
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If command other than save or end game, and party members = 0
if $game_party.actors.size == 0 and @command_window.index < 4
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Branch by command window cursor position
case @command_window.index
when 0 # item
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to item screen
$scene = Scene_Item.new
when 1 # skill
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # save
# If saving is forbidden
if $game_system.save_disabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to save screen
$scene = Scene_Save.new
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when status window is active)
#--------------------------------------------------------------------------
def update_status
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Make command window active
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 1 # skill
# If this actor's action limit is 2 or more
if $game_party.actors[@status_window.index].restriction >= 2
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to skill screen
$scene = Scene_Skill.new(@status_window.index)
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to equipment screen
$scene = Scene_Equip.new(@status_window.index)
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to status screen
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
On va s'intéresser aux lignes 20 à 26.
On a ligne 20 à 25 :
- Code:
-
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Statut"
s5 = "Sauvegarder"
s6 = "Quitter le jeu"
C'est le nom des commandes. On va dire qu'on veut créer une commande Quêtes (waouh le super exemple ^^)
On rajoute un s7, après le s6 et on écrit :
- Code:
-
s7 = Quêtes
Ce qui nous donne :
- Code:
-
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Statut"
s5 = "Sauvegarder"
s6 = "Quitter le jeu"
s7 = "Quêtes"
Mais ce n'est pas fini, ligne 26 il y a :
- Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
Et ça s'arrête à s6. Mais vu qu'on a ajouté une commande il faut aussi la rajouter ici :
- Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
Une foix créée il faut que quand on clique dessus ça nous envoie à la scene quete.
Ca se passe ligne 124 à 167 :
- Code:
-
case @command_window.index
when 0 # item
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to item screen
$scene = Scene_Item.new
when 1 # skill
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Make status window active
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # save
# If saving is forbidden
if $game_system.save_disabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to save screen
$scene = Scene_Save.new
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_End.new
end
On a toutes les commandes (item, skill, etc...) et on doit rajouter la nôtre. Donc en dessous de $scene = Scene_End.new on rajoute ceci :
- Code:
-
when 6 # quest
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_Quete.new
$scene = Scene_Quete.new : on nous envoie à la scene. Elle peut s'appeler autrement que Scene_Quete. C'est en fonction de la scene à laquelle vous renvoyez. Le nom de la scene est écrite. Dans le when 5 c'était Scene_End. Si tu renvoies à une scene il faut écrire :
- Code:
-
$scene = Le_nom_de_ta_scene.new
Si on aurait voulu retirer une commande, j'aurais enlever le s6 (par exemple) ligne 25, ainsi que le s6 ligne 27. Ce qui aurait donner:
- Code:
-
def main
# Make command window
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Statut"
s5 = "Sauvegarder"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
Et j'aurais supprimer :
- Code:
-
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_End.new
Voilà pour les commandes, normalement maintenant, si tu cliques sur "Quêtes" ça va te renvoyer à la Scene_Quete (ou pas ^^ tout dépend si tu as un script avec le nom de Scene_Quete)
/!\ Remarque : Vous avez dû voir qu'il n'y a que 6 when pour 7 commandes.
C'est car :
commande 1 = when 0
commande 2 = when 1
etc...
II Suppression des fenêtresBon maintenant que vous avez fait le grand 1 vous devez avoir ceci :
- Spoiler:
Ce n'est pas beau, vous aimeriez bien que ça ne se chevauche pas. Pour cela il faudrait enlever la fenêtre du temps, mais comment faire ?
Ligne 42 à 57 :
- Code:
-
# Make play time window
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
# Make steps window
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# Make gold window
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# Make status window
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
Ce sont toutes les fenêtres actives (il y en a une avant qui est @command_window pour les commandes) Et donc on veut supprimer le temps. On regarde dans les noms et on voit :
- Code:
-
@playtime_window = Window_PlayTime.new
Parfait, on enlève ça et c'est bon ? Et bien non il faut aussi enlever les commandes qui suivent, donc on enlève :
- Code:
-
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
Et ce n'est pas fini, plus loin, ligne 76 à 80, il faut aussi enlever la commande correspondante, soit @playtime_window.dispose. Même chose ligne 87 à 91.
Une fois toutes enlevées on obtient ça :
- Spoiler:
Et voilà nickel.
III Modification des valeurs x, y, largeur et hauteurC'est bien mais pas tout à fait ce que l'on souhaite. On voudrait avoir la fenêtre d'or avant celle des pas. On va donc dans le script ligne 43 à 49 :
- Code:
-
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# Make gold window
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
On a vu qu'on pouvait les supprimer, maintenant on va les modifier.
1. x et yx = axe horizontal (on ne s'en servira pas mais ça marche pareil que y)
y = axe vertical
On remarque qu'on n'a pas la hauteur et la largeur, c'est car elles sont définies dans la class Window (ici Window_Steps et Window_Gold), j'y reviendrai après.
Donc on va modifier la valeur y pour avoir l'argent au dessus des pas.
Il faut donc @gold_window.y > @steps_window.y
Après plusieurs tests, je trouve les valeurs pour modifier :
- Code:
-
@gold_window.y = 320
- Code:
-
@steps_window.y = 384
Ce qui donne :
- Spoiler:
Et je vais modifer la place y des commandes en ajoutant cette ligne:
- Code:
-
@command_window.y = 20
En dessous de :
- Code:
-
@command_window.index = @menu_index
Comme ceci :
- Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
@command_window.y = 30
Ce qui donne :
- Spoiler:
2. hauteur et largeurC'est une fenêtre comme Window_Gold, il faut aller dans le script Window_Gold et modifier ces 2 valeurs ligne 12 :
- Code:
-
super(0, 0, 160, 64)
160 = largeur et 64 = hauteur
Et ce sera pareil pour les autres fenêtres (Window_MenuStatus, Window_Skill, etc...)
Maintenant passons à l'étape suivante.
/!\ Remarque : x = axe horizontal
y = axe vertical
IV Modification de l'opacité, et un petit ajoutC'est bien comme ça mais le fond noir ne me plait pas. Je vais d'abord modifier l'opacité de toutes les fenêtres pour qu'elles ne soient plus opaques.
On modifie l'opacité des commandes, donc en dessous de :
- Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
@command_window.y = 30
On rajoute @command_window.back_opacity = 150
255 = opaque, 0 = transparent, à vous de régler après.
Ce qui donne :
- Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
@command_window.y = 30
@command_window.back_opacity = 150
Pareil pour la fenêtre de l'argent :
- Code:
-
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 320
@gold_window.back_opacity = 150
Des pas :
- Code:
-
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 384
@steps_window.back_opacity = 150
Et des héros :
- Code:
-
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
@status_window.back_opacity = 150
Ce qui donne :
- Spoiler:
Ca ne change pas grand chose. Donc on va mettre un fond, deux choix :
1. La carte en fondEn dessous de def main on rajoute
- Code:
-
@spriteset = Spriteset_Map.new
Il ne faut pas oublier de rajouter sous la ligne 83:
- Code:
-
@spriteset.dispose
et sous la ligne 93
- Code:
-
@spriteset.update
Ce qui donne :
- Spoiler:
Ca ressemble enfin à quelque chose de bien.
2. Une image en fondAu lieu de mettre :
- Code:
-
@spriteset = Spriteset_Map.new
On met :
- Code:
-
@spriteset = Spriteset.new
@spriteset.bitmap = RPG::Cache.picture("nom de l'image")
Remplacer "nom de l'image" par le nom de votre image de le dossier picture (il faut garder les "")
Ce qui peut donner :
- Code:
-
def main
@spriteset = Sprite.new
@spriteset.bitmap = RPG::Cache.picture("fond menu")
Auquel cas, dans le dossier picture il y aura une image nommée fond menu.
Et bien sûr il ne faut pas oublier de rajouter sous la ligne 83:
- Code:
-
@spriteset.dispose
et sous la ligne 93
- Code:
-
@spriteset.update
Ce qui donne :
- Spoiler:
Voilà enfin ce que je voulais ^^
V Exercice avec la Scene_EndMaintenant vous allez pouvoir voir si vous saurez refaire ce que je vous ais appris avec une autre scene.
Prenez la Scene_End :
- Spoiler:
Elle est pauvre et moche. Et bien vous allez essayer de la faire comme moi :
- Spoiler:
Prenez n'importe quelle image de fond.
Voilà voilà. C'était mon premier tuto, soyez indulgent.
Si je n'ai pas été clair dites le moi. Si vous avez des questions dites les moi aussi.
Merci de bien vouloir commenter pour me dire si ça a été utile, comment je peux l'améliorer.
A plus, et j'espère que ce tuto sera utile