Create Your Own Menu (part5)
Engine : RPG Maker VX Ace
Click here for part 1
Click here for part 2
Click here for part 3
Click here for part 4
An easy way to set what will happens when a command is activated is with a command handler that RGSS3 provided. This can only be applied to Window_Selectable, which is the superclass of our commands window. Insert this code in def create_window_menu_list under @menulist_window = Window_MenuList.new
The syntax is:
Q. Why are these :equip, :status and :formation use the same method which is :command_personal?
A. Becase those commands need actor selection.
6b. Setting up command_item
Because we want the item command to call Scene_Item scene, we can just add this code to command_item method
6c. Setting up command_personal
This method is basically for activating actor selection. When the actor is selected, the actual method will be called depending on command symbol. First we need a flag variable to indicate whether actor selection is active or not.
Add this code in Scene_Menu start method, under super
And then for the command_personal method
You might've noticed that there's a new method which is update_status_window_selection that doesn't exist yet. Add this for updating actor status windows based on @actor_index variable.
In the Scene_Menu update method, add these codes
And this
Now when you select command that use command_personal method, it'll look like this
Complete script for this tutorial part
Click here for part 1
Click here for part 2
Click here for part 3
Click here for part 4
6. Assigning the Commands
6a. Set commands handlerAn easy way to set what will happens when a command is activated is with a command handler that RGSS3 provided. This can only be applied to Window_Selectable, which is the superclass of our commands window. Insert this code in def create_window_menu_list under @menulist_window = Window_MenuList.new
#window handler is basically assigning a method to the input symbol or #command symbol. When we select or press a symbol, the method will be called #window.set_handler(symbol, method) @menulist_window.set_handler(:item, method(:command_item)) @menulist_window.set_handler(:skill, method(:command_personal)) @menulist_window.set_handler(:equip, method(:command_personal)) @menulist_window.set_handler(:status, method(:command_personal)) @menulist_window.set_handler(:formation, method(:command_formation)) @menulist_window.set_handler(:crafting, method(:command_crafting)) @menulist_window.set_handler(:save, method(:command_save)) @menulist_window.set_handler(:game_end, method(:command_game_end)) #return_scene method is from Scene_Base superclass. What this method #do is basically return to the previous scene. @menulist_window.set_handler(:cancel, method(:return_scene))
The syntax is:
- set_handler(command symbol, executed method)
Q. Why are these :equip, :status and :formation use the same method which is :command_personal?
A. Becase those commands need actor selection.
def command_item end def command_personal end def command_skill end def command_equip end def command_status end def command_formation end def command_crafting end def command_end end
6b. Setting up command_item
Because we want the item command to call Scene_Item scene, we can just add this code to command_item method
def command_item #Go to Scene_Item SceneManager.call(Scene_Item) end
6c. Setting up command_personal
This method is basically for activating actor selection. When the actor is selected, the actual method will be called depending on command symbol. First we need a flag variable to indicate whether actor selection is active or not.
Add this code in Scene_Menu start method, under super
#Initialize actor selection flag. @actor_selection = false
And then for the command_personal method
def command_personal #Set actor selection flag to true. @actor_selection = true #Variable for storing actor selection index. @actor_index = 0 #Update status windows, activate or deactivate the windows depending on #@actor_index update_status_window_selection end
You might've noticed that there's a new method which is update_status_window_selection that doesn't exist yet. Add this for updating actor status windows based on @actor_index variable.
def update_status_window_selection #loop through @actor_status_windows, getting the individual window #and its index. @actor_status_windows.each_with_index do |window, i| #window will be activated if its index is the same as #@actor_index variable if i == @actor_index window.activate #Select the first window item, causing the window cursor to appear. window.select(0) else window.deactivate #Deselect all window items, causing the window cursor to disappear. window.unselect end end end
In the Scene_Menu update method, add these codes
#Update status windows, activate or deactivate the windows depending on #@actor_index. Only when @actor_selection is true. update_actor_selection if @actor_selection #Because these status windows are inside an array, we have to update it #manually. update_actor_status_windows
And this
def update_actor_selection #Store the current actor index in temporary variable temp_index = @actor_index #If left key is pressed if Input.repeat?(:LEFT) #Decrease the actor index @actor_index -= 1 #If the actor index is less than 0, wrap it to the highest index. @actor_index = @actor_status_windows.size - 1 if @actor_index < 0 end #If right key is pressed if Input.repeat?(:RIGHT) #Increase the actor index @actor_index += 1 #If the actor index is higher than the highest index, wrap it to 0. @actor_index = 0 if @actor_index > @actor_status_windows.size - 1 end #If the previous stored index is not the same as the current actor index if temp_index != @actor_index #Play cursor sound Sound.play_cursor #Update actor status windows update_status_window_selection end #If confirmation key is pressed if Input.trigger?(:C) #Update Input so that the trigger flag is set back to false. Input.update #Play confirmation sound Sound.play_ok #Set menu actor to currently selected actor. $game_party.menu_actor = $game_party.members[@actor_index] #Depending on the menulist current symbol, execute these codes. case @menulist_window.current_symbol when :skill command_skill when :equip command_equip when :status command_status end end if Input.trigger?(:B) #Update Input so that the trigger flag is set back to false. Input.update #Play cancel sound Sound.play_cancel #Set actor index to -1, causing all status windows deactivated. @actor_index = -1 update_status_window_selection #Set actor selection to false @actor_selection = false #Activate menu command window @menulist_window.activate end end
def update_actor_status_windows #Because these status windows are inside an array, we have to update it #manually. @actor_status_windows.each do |window| window.update end end
Now when you select command that use command_personal method, it'll look like this
Complete script for this tutorial part
Great work ^^
ReplyDelete