#============================================================================== # ** Game_Interpreter #------------------------------------------------------------------------------ # An interpreter for executing event commands. This class is used within the # Game_Map, Game_Troop, and Game_Event classes. #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # * Object Initialization # depth : nest depth # main : main flag #-------------------------------------------------------------------------- def initialize(depth = 0, main = false) @depth = depth @main = main if @depth > 100 print("Common event call has exceeded maximum limit.") exit end clear end #-------------------------------------------------------------------------- # * Clear #-------------------------------------------------------------------------- def clear @map_id = 0 # Map ID when starting up @original_event_id = 0 # Event ID when starting up @event_id = 0 # Event ID @list = nil # Execution content @index = 0 # Index @message_waiting = false # Waiting for message to end @moving_character = nil # Moving character @wait_count = 0 # Wait count @child_interpreter = nil # Child interpreter @branch = {} # Branch data end #-------------------------------------------------------------------------- # * Event Setup # list : list of event commands # event_id : event ID #-------------------------------------------------------------------------- def setup(list, event_id = 0) clear # Clear internal interpreter state @map_id = $game_map.map_id # Memorize map ID @original_event_id = event_id # Memorize event ID @event_id = event_id # Memorize event ID @list = list # Memorize execution contents @index = 0 # Initialize index cancel_menu_call # Cancel menu call end #-------------------------------------------------------------------------- # * Cancel Menu Call # Handles the situation when a player is moving and the cancel button # is pushed, starting an event in the state where a menu call was # reserved. #-------------------------------------------------------------------------- def cancel_menu_call if @main and $game_temp.next_scene == "menu" and $game_temp.menu_beep $game_temp.next_scene = nil $game_temp.menu_beep = false end end #-------------------------------------------------------------------------- # * Determine if Running #-------------------------------------------------------------------------- def running? return @list != nil end #-------------------------------------------------------------------------- # * Starting Event Setup #-------------------------------------------------------------------------- def setup_starting_event if $game_map.need_refresh # If necessary, refresh the map $game_map.refresh end if $game_temp.common_event_id > 0 # Common event call reserved? setup($data_common_events[$game_temp.common_event_id].list) $game_temp.common_event_id = 0 return end for event in $game_map.events.values # Map event if event.starting # If a starting event is found event.clear_starting # Clear starting flag setup(event.list, event.id) # Set up event return end end for event in $data_common_events.compact # Common event if event.trigger == 1 and # If autorun and $game_switches[event.switch_id] == true # condition switch is ON setup(event.list) # Set up event return end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update loop do if $game_map.map_id != @map_id # Map is different? @event_id = 0 # Make event ID 0 end if @child_interpreter != nil # If child interpreter exists @child_interpreter.update # Update child interpreter if @child_interpreter.running? # If running return # Return else # After execution has finished @child_interpreter = nil # Erase child interpreter end end if @message_waiting # Waiting for message finish return end if @moving_character != nil # Waiting for move to finish if @moving_character.move_route_forcing return end @moving_character = nil end if @wait_count > 0 # Waiting @wait_count -= 1 return end if $game_troop.forcing_battler != nil # Forcing battle action return end if $game_temp.next_scene != nil # Opening screens return end if @list == nil # If content list is empty setup_starting_event if @main # Set up starting event return if @list == nil # Nothing was set up end return if execute_command == false # Execute event command @index += 1 # Advance index end end #-------------------------------------------------------------------------- # * Actor iterator (ID) # param : If 1 or more, ID. If 0, all #-------------------------------------------------------------------------- def iterate_actor_id(param) if param == 0 # All for actor in $game_party.members do yield actor end else # One actor = $game_actors[param] yield actor unless actor == nil end end #-------------------------------------------------------------------------- # * Actor iterator (index) # param : If 0 or more, index. If -1, all. #-------------------------------------------------------------------------- def iterate_actor_index(param) if param == -1 # All for actor in $game_party.members do yield actor end else # One actor = $game_party.members[param] yield actor unless actor == nil end end #-------------------------------------------------------------------------- # * Enemy iterator (index) # param : If 0 or more, index. If -1, all. #-------------------------------------------------------------------------- def iterate_enemy_index(param) if param == -1 # All for enemy in $game_troop.members do yield enemy end else # One enemy = $game_troop.members[param] yield enemy unless enemy == nil end end #-------------------------------------------------------------------------- # * Battler iterator (for entire troop, entire party) # param1 : If 0, enemy. If 1, actor. # param : If 0 or more, index. If -1, all. #-------------------------------------------------------------------------- def iterate_battler(param1, param2) if $game_temp.in_battle if param1 == 0 # Enemy iterate_enemy_index(param2) do |enemy| yield enemy end else # Actor iterate_actor_index(param2) do |enemy| yield enemy end end end end #-------------------------------------------------------------------------- # * Get Screen Command Target #-------------------------------------------------------------------------- def screen if $game_temp.in_battle return $game_troop.screen else return $game_map.screen end end #-------------------------------------------------------------------------- # * Event Command Execution #-------------------------------------------------------------------------- def execute_command if @index >= @list.size-1 command_end return true else @params = @list[@index].parameters @indent = @list[@index].indent case @list[@index].code when 101 # Show Text return command_101 when 102 # Show Choices return command_102 when 402 # When [**] return command_402 when 403 # When Cancel return command_403 when 103 # Input Number return command_103 when 111 # Conditional Branch return command_111 when 411 # Else return command_411 when 112 # Loop return command_112 when 413 # Repeat Above return command_413 when 113 # Break Loop return command_113 when 115 # Exit Event Processing return command_115 when 117 # Call Common Event return command_117 when 118 # Label return command_118 when 119 # Jump to Label return command_119 when 121 # Control Switches return command_121 when 122 # Control Variables return command_122 when 123 # Control Self Switch return command_123 when 124 # Control Timer return command_124 when 125 # Change Gold return command_125 when 126 # Change Items return command_126 when 127 # Change Weapons return command_127 when 128 # Change Armor return command_128 when 129 # Change Party Member return command_129 when 132 # Change Battle BGM return command_132 when 133 # Change Battle End ME return command_133 when 134 # Change Save Access return command_134 when 135 # Change Menu Access return command_135 when 136 # Change Encounter return command_136 when 201 # Transfer Player return command_201 when 202 # Set Vehicle Location return command_202 when 203 # Set Event Location return command_203 when 204 # Scroll Map return command_204 when 205 # Set Move Route return command_205 when 206 # Get on/off Vehicle return command_206 when 211 # Change Transparency return command_211 when 212 # Show Animation return command_212 when 213 # Show Balloon Icon return command_213 when 214 # Erase Event return command_214 when 221 # Fadeout Screen return command_221 when 222 # Fadein Screen return command_222 when 223 # Tint Screen return command_223 when 224 # Flash Screen return command_224 when 225 # Shake Screen return command_225 when 230 # Wait return command_230 when 231 # Show Picture return command_231 when 232 # Move Picture return command_232 when 233 # Rotate Picture return command_233 when 234 # Tint Picture return command_234 when 235 # Erase picture return command_235 when 236 # Set Weather Effects return command_236 when 241 # Play BGM return command_241 when 242 # Fadeout BGM return command_242 when 245 # Play BGS return command_245 when 246 # Fadeout BGS return command_246 when 249 # Play ME return command_249 when 250 # Play SE return command_250 when 251 # Stop SE return command_251 when 301 # Battle Processing return command_301 when 601 # If Win return command_601 when 602 # If Escape return command_602 when 603 # If Lose return command_603 when 302 # Shop Processing return command_302 when 303 # Name Input Processing return command_303 when 311 # Change HP return command_311 when 312 # Change MP return command_312 when 313 # Change State return command_313 when 314 # Recover All return command_314 when 315 # Change EXP return command_315 when 316 # Change Level return command_316 when 317 # Change Parameters return command_317 when 318 # Change Skills return command_318 when 319 # Change Equipment return command_319 when 320 # Change Name return command_320 when 321 # Change Class return command_321 when 322 # Change Actor Graphic return command_322 when 323 # Change Vehicle Graphic return command_323 when 331 # Change Enemy HP return command_331 when 332 # Change Enemy MP return command_332 when 333 # Change Enemy State return command_333 when 334 # Enemy Recover All return command_334 when 335 # Enemy Appear return command_335 when 336 # Enemy Transform return command_336 when 337 # Show Battle Animation return command_337 when 339 # Force Action return command_339 when 340 # Abort Battle return command_340 when 351 # Open Menu Screen return command_351 when 352 # Open Save Screen return command_352 when 353 # Game Over return command_353 when 354 # Return to Title Screen return command_354 when 355 # Script return command_355 else # Other return true end end end #-------------------------------------------------------------------------- # * End Event #-------------------------------------------------------------------------- def command_end @list = nil # Clear execution content list if @main and @event_id > 0 # If main map event $game_map.events[@event_id].unlock # Clear event lock end end #-------------------------------------------------------------------------- # * Command Skip #-------------------------------------------------------------------------- def command_skip while @list[@index+1].indent > @indent # Next indent is deeper @index += 1 # Advance index end end #-------------------------------------------------------------------------- # * Get Character # param : if -1, player. If 0, this event. Otherwise, event ID. #-------------------------------------------------------------------------- def get_character(param) case param when -1 # Player return $game_player when 0 # This event events = $game_map.events return events == nil ? nil : events[@event_id] else # Particular event events = $game_map.events return events == nil ? nil : events[param] end end #-------------------------------------------------------------------------- # * Calculate Operated Value # operation : operation (0: increase, 1: decrease) # operand_type : operand type (0: invariable 1: variable) # operand : operand (number or variable ID) #-------------------------------------------------------------------------- def operate_value(operation, operand_type, operand) if operand_type == 0 value = operand else value = $game_variables[operand] end if operation == 1 value = -value end return value end #-------------------------------------------------------------------------- # * Show Text #-------------------------------------------------------------------------- def command_101 unless $game_message.busy $game_message.face_name = @params[0] $game_message.face_index = @params[1] $game_message.background = @params[2] $game_message.position = @params[3] @index += 1 while @list[@index].code == 401 # Text data $game_message.texts.push(@list[@index].parameters[0]) @index += 1 end if @list[@index].code == 102 # Show choices setup_choices(@list[@index].parameters) elsif @list[@index].code == 103 # Number input processing setup_num_input(@list[@index].parameters) end set_message_waiting # Set to message wait state end return false end #-------------------------------------------------------------------------- # * Set message wait flag and callback #-------------------------------------------------------------------------- def set_message_waiting @message_waiting = true $game_message.main_proc = Proc.new { @message_waiting = false } end #-------------------------------------------------------------------------- # * Show Choices #-------------------------------------------------------------------------- def command_102 unless $game_message.busy setup_choices(@params) # Setup set_message_waiting # Set to message wait state end return false end #-------------------------------------------------------------------------- # * Setup Choices #-------------------------------------------------------------------------- def setup_choices(params) if $game_message.texts.size <= 4 - params[0].size $game_message.choice_start = $game_message.texts.size $game_message.choice_max = params[0].size for s in params[0] $game_message.texts.push(s) end $game_message.choice_cancel_type = params[1] $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n } @index += 1 end end #-------------------------------------------------------------------------- # * When [**] #-------------------------------------------------------------------------- def command_402 if @branch[@indent] == @params[0] # If matching choice @branch.delete(@indent) # Erase branching data return true # Continue else # If doesn't match condition return command_skip # Command skip end end #-------------------------------------------------------------------------- # * When Cancel #-------------------------------------------------------------------------- def command_403 if @branch[@indent] == 4 # If canceling choice @branch.delete(@indent) # Erase branching data return true # Continue else # If doesn't match condition return command_skip # Command skip end end #-------------------------------------------------------------------------- # * Input Number #-------------------------------------------------------------------------- def command_103 unless $game_message.busy setup_num_input(@params) # Setup set_message_waiting # Set to message wait state end return false end #-------------------------------------------------------------------------- # * Number Input Setup #-------------------------------------------------------------------------- def setup_num_input(params) if $game_message.texts.size < 4 $game_message.num_input_variable_id = params[0] $game_message.num_input_digits_max = params[1] @index += 1 end end #-------------------------------------------------------------------------- # * Conditional Branch #-------------------------------------------------------------------------- def command_111 result = false case @params[0] when 0 # Switch result = ($game_switches[@params[1]] == (@params[2] == 0)) when 1 # Variable value1 = $game_variables[@params[1]] if @params[2] == 0 value2 = @params[3] else value2 = $game_variables[@params[3]] end case @params[4] when 0 # value1 is equal to value2 result = (value1 == value2) when 1 # value1 is greater than or equal to value2 result = (value1 >= value2) when 2 # value1 is less than or equal to value2 result = (value1 <= value2) when 3 # value1 is greater than value2 result = (value1 > value2) when 4 # value1 is less than value2 result = (value1 < value2) when 5 # value1 is not equal to value2 result = (value1 != value2) end when 2 # Self switch if @original_event_id > 0 key = [@map_id, @original_event_id, @params[1]] if @params[2] == 0 result = ($game_self_switches[key] == true) else result = ($game_self_switches[key] != true) end end when 3 # Timer if $game_system.timer_working sec = $game_system.timer / Graphics.frame_rate if @params[2] == 0 result = (sec >= @params[1]) else result = (sec <= @params[1]) end end when 4 # Actor actor = $game_actors[@params[1]] if actor != nil case @params[2] when 0 # in party result = ($game_party.members.include?(actor)) when 1 # name result = (actor.name == @params[3]) when 2 # skill result = (actor.skill_learn?($data_skills[@params[3]])) when 3 # weapon result = (actor.weapons.include?($data_weapons[@params[3]])) when 4 # armor result = (actor.armors.include?($data_armors[@params[3]])) when 5 # state result = (actor.state?(@params[3])) end end when 5 # Enemy enemy = $game_troop.members[@params[1]] if enemy != nil case @params[2] when 0 # appear result = (enemy.exist?) when 1 # state result = (enemy.state?(@params[3])) end end when 6 # Character character = get_character(@params[1]) if character != nil result = (character.direction == @params[2]) end when 7 # Gold if @params[2] == 0 result = ($game_party.gold >= @params[1]) else result = ($game_party.gold <= @params[1]) end when 8 # Item result = $game_party.has_item?($data_items[@params[1]]) when 9 # Weapon result = $game_party.has_item?($data_weapons[@params[1]], @params[2]) when 10 # Armor result = $game_party.has_item?($data_armors[@params[1]], @params[2]) when 11 # Button result = Input.press?(@params[1]) when 12 # Script result = eval(@params[1]) when 13 # Vehicle result = ($game_player.vehicle_type == @params[1]) end @branch[@indent] = result # Store determination results in hash if @branch[@indent] == true @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # * Else #-------------------------------------------------------------------------- def command_411 if @branch[@indent] == false @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # * Loop #-------------------------------------------------------------------------- def command_112 return true end #-------------------------------------------------------------------------- # * Repeat Above #-------------------------------------------------------------------------- def command_413 begin @index -= 1 end until @list[@index].indent == @indent return true end #-------------------------------------------------------------------------- # * Break Loop #-------------------------------------------------------------------------- def command_113 loop do @index += 1 if @index >= @list.size-1 return true end if @list[@index].code == 413 and # Command [Repeat Above] @list[@index].indent < @indent # Indent is shallow return true end end end #-------------------------------------------------------------------------- # * Exit Event Processing #-------------------------------------------------------------------------- def command_115 command_end return true end #-------------------------------------------------------------------------- # * Call Common Event #-------------------------------------------------------------------------- def command_117 common_event = $data_common_events[@params[0]] if common_event != nil @child_interpreter = Game_Interpreter.new(@depth + 1) @child_interpreter.setup(common_event.list, @event_id) end return true end #-------------------------------------------------------------------------- # * Label #-------------------------------------------------------------------------- def command_118 return true end #-------------------------------------------------------------------------- # * Jump to Label #-------------------------------------------------------------------------- def command_119 label_name = @params[0] for i in 0...@list.size if @list[i].code == 118 and @list[i].parameters[0] == label_name @index = i return true end end return true end #-------------------------------------------------------------------------- # * Control Switches #-------------------------------------------------------------------------- def command_121 for i in @params[0] .. @params[1] # Batch control $game_switches[i] = (@params[2] == 0) end $game_map.need_refresh = true return true end #-------------------------------------------------------------------------- # * Control Variables #-------------------------------------------------------------------------- def command_122 value = 0 case @params[3] # Operand when 0 # Constant value = @params[4] when 1 # Variable value = $game_variables[@params[4]] when 2 # Random value = @params[4] + rand(@params[5] - @params[4] + 1) when 3 # Item value = $game_party.item_number($data_items[@params[4]]) when 4 # Actor actor = $game_actors[@params[4]] if actor != nil case @params[5] when 0 # Level value = actor.level when 1 # Experience value = actor.exp when 2 # HP value = actor.hp when 3 # MP value = actor.mp when 4 # Maximum HP value = actor.maxhp when 5 # Maximum MP value = actor.maxmp when 6 # Attack value = actor.atk when 7 # Defense value = actor.def when 8 # Spirit value = actor.spi when 9 # Agility value = actor.agi end end when 5 # Enemy enemy = $game_troop.members[@params[4]] if enemy != nil case @params[5] when 0 # HP value = enemy.hp when 1 # MP value = enemy.mp when 2 # Maximum HP value = enemy.maxhp when 3 # Maximum MP value = enemy.maxmp when 4 # Attack value = enemy.atk when 5 # Defense value = enemy.def when 6 # Spirit value = enemy.spi when 7 # Agility value = enemy.agi end end when 6 # Character character = get_character(@params[4]) if character != nil case @params[5] when 0 # x-coordinate value = character.x when 1 # y-coordinate value = character.y when 2 # direction value = character.direction when 3 # screen x-coordinate value = character.screen_x when 4 # screen y-coordinate value = character.screen_y end end when 7 # Other case @params[4] when 0 # map ID value = $game_map.map_id when 1 # number of party members value = $game_party.members.size when 2 # gold value = $game_party.gold when 3 # steps value = $game_party.steps when 4 # play time value = Graphics.frame_count / Graphics.frame_rate when 5 # timer value = $game_system.timer / Graphics.frame_rate when 6 # save count value = $game_system.save_count end end for i in @params[0] .. @params[1] # Batch control case @params[2] # Operation when 0 # Set $game_variables[i] = value when 1 # Add $game_variables[i] += value when 2 # Sub $game_variables[i] -= value when 3 # Mul $game_variables[i] *= value when 4 # Div $game_variables[i] /= value if value != 0 when 5 # Mod $game_variables[i] %= value if value != 0 end if $game_variables[i] > 99999999 # Maximum limit check $game_variables[i] = 99999999 end if $game_variables[i] < -99999999 # Minimum limit check $game_variables[i] = -99999999 end end $game_map.need_refresh = true return true end #-------------------------------------------------------------------------- # * Control Self Switch #-------------------------------------------------------------------------- def command_123 if @original_event_id > 0 key = [@map_id, @original_event_id, @params[0]] $game_self_switches[key] = (@params[1] == 0) end $game_map.need_refresh = true return true end #-------------------------------------------------------------------------- # * Control Timer #-------------------------------------------------------------------------- def command_124 if @params[0] == 0 # Start $game_system.timer = @params[1] * Graphics.frame_rate $game_system.timer_working = true end if @params[0] == 1 # Stop $game_system.timer_working = false end return true end #-------------------------------------------------------------------------- # * Change Gold #-------------------------------------------------------------------------- def command_125 value = operate_value(@params[0], @params[1], @params[2]) $game_party.gain_gold(value) return true end #-------------------------------------------------------------------------- # * Change Items #-------------------------------------------------------------------------- def command_126 value = operate_value(@params[1], @params[2], @params[3]) $game_party.gain_item($data_items[@params[0]], value) $game_map.need_refresh = true return true end #-------------------------------------------------------------------------- # * Change Weapons #-------------------------------------------------------------------------- def command_127 value = operate_value(@params[1], @params[2], @params[3]) $game_party.gain_item($data_weapons[@params[0]], value, @params[4]) return true end #-------------------------------------------------------------------------- # * Change Armor #-------------------------------------------------------------------------- def command_128 value = operate_value(@params[1], @params[2], @params[3]) $game_party.gain_item($data_armors[@params[0]], value, @params[4]) return true end #-------------------------------------------------------------------------- # * Change Party Member #-------------------------------------------------------------------------- def command_129 actor = $game_actors[@params[0]] if actor != nil if @params[1] == 0 # Add if @params[2] == 1 # Initialize $game_actors[@params[0]].setup(@params[0]) end $game_party.add_actor(@params[0]) else # Remove $game_party.remove_actor(@params[0]) end $game_map.need_refresh = true end return true end #-------------------------------------------------------------------------- # * Change Battle BGM #-------------------------------------------------------------------------- def command_132 $game_system.battle_bgm = @params[0] return true end #-------------------------------------------------------------------------- # * Change Battle End ME #-------------------------------------------------------------------------- def command_133 $game_system.battle_end_me = @params[0] return true end #-------------------------------------------------------------------------- # * Change Save Access #-------------------------------------------------------------------------- def command_134 $game_system.save_disabled = (@params[0] == 0) return true end #-------------------------------------------------------------------------- # * Change Menu Access #-------------------------------------------------------------------------- def command_135 $game_system.menu_disabled = (@params[0] == 0) return true end #-------------------------------------------------------------------------- # * Change Encounter #-------------------------------------------------------------------------- def command_136 $game_system.encounter_disabled = (@params[0] == 0) $game_player.make_encounter_count return true end #-------------------------------------------------------------------------- # * Transfer Player #-------------------------------------------------------------------------- def command_201 return true if $game_temp.in_battle if $game_player.transfer? or # Transferring Player $game_message.visible # Displaying a message return false end if @params[0] == 0 # Direct designation map_id = @params[1] x = @params[2] y = @params[3] direction = @params[4] else # Designation with variables map_id = $game_variables[@params[1]] x = $game_variables[@params[2]] y = $game_variables[@params[3]] direction = @params[4] end $game_player.reserve_transfer(map_id, x, y, direction) @index += 1 return false end #-------------------------------------------------------------------------- # * Set Vehicle Location #-------------------------------------------------------------------------- def command_202 if @params[1] == 0 # Direct designation map_id = @params[2] x = @params[3] y = @params[4] else # Designation with variables map_id = $game_variables[@params[2]] x = $game_variables[@params[3]] y = $game_variables[@params[4]] end if @params[0] == 0 # Boat $game_map.boat.set_location(map_id, x, y) elsif @params[0] == 1 # Ship $game_map.ship.set_location(map_id, x, y) else # Airship $game_map.airship.set_location(map_id, x, y) end return true end #-------------------------------------------------------------------------- # * Set Event Location #-------------------------------------------------------------------------- def command_203 character = get_character(@params[0]) if character != nil if @params[1] == 0 # Direct designation character.moveto(@params[2], @params[3]) elsif @params[1] == 1 # Designation with variables new_x = $game_variables[@params[2]] new_y = $game_variables[@params[3]] character.moveto(new_x, new_y) else # Exchange with another event old_x = character.x old_y = character.y character2 = get_character(@params[2]) if character2 != nil character.moveto(character2.x, character2.y) character2.moveto(old_x, old_y) end end case @params[4] # Direction when 8 # Up character.turn_up when 6 # Right character.turn_right when 2 # Down character.turn_down when 4 # Left character.turn_left end end return true end #-------------------------------------------------------------------------- # * Scroll Map #-------------------------------------------------------------------------- def command_204 return true if $game_temp.in_battle return false if $game_map.scrolling? $game_map.start_scroll(@params[0], @params[1], @params[2]) return true end #-------------------------------------------------------------------------- # * Set Move Route #-------------------------------------------------------------------------- def command_205 if $game_map.need_refresh $game_map.refresh end character = get_character(@params[0]) if character != nil character.force_move_route(@params[1]) @moving_character = character if @params[1].wait end return true end #-------------------------------------------------------------------------- # * Get on/off Vehicle #-------------------------------------------------------------------------- def command_206 $game_player.get_on_off_vehicle return true end #-------------------------------------------------------------------------- # * Change Transparency #-------------------------------------------------------------------------- def command_211 $game_player.transparent = (@params[0] == 0) return true end #-------------------------------------------------------------------------- # * Show Animation #-------------------------------------------------------------------------- def command_212 character = get_character(@params[0]) if character != nil character.animation_id = @params[1] end return true end #-------------------------------------------------------------------------- # * Show Balloon Icon #-------------------------------------------------------------------------- def command_213 character = get_character(@params[0]) if character != nil character.balloon_id = @params[1] end return true end #-------------------------------------------------------------------------- # * Erase Event #-------------------------------------------------------------------------- def command_214 if @event_id > 0 $game_map.events[@event_id].erase end @index += 1 return false end #-------------------------------------------------------------------------- # * Fadeout Screen #-------------------------------------------------------------------------- def command_221 if $game_message.visible return false else screen.start_fadeout(30) @wait_count = 30 return true end end #-------------------------------------------------------------------------- # * Fadein Screen #-------------------------------------------------------------------------- def command_222 if $game_message.visible return false else screen.start_fadein(30) @wait_count = 30 return true end end #-------------------------------------------------------------------------- # * Tint Screen #-------------------------------------------------------------------------- def command_223 screen.start_tone_change(@params[0], @params[1]) @wait_count = @params[1] if @params[2] return true end #-------------------------------------------------------------------------- # * Screen Flash #-------------------------------------------------------------------------- def command_224 screen.start_flash(@params[0], @params[1]) @wait_count = @params[1] if @params[2] return true end #-------------------------------------------------------------------------- # * Screen Shake #-------------------------------------------------------------------------- def command_225 screen.start_shake(@params[0], @params[1], @params[2]) @wait_count = @params[2] if @params[3] return true end #-------------------------------------------------------------------------- # * Wait #-------------------------------------------------------------------------- def command_230 @wait_count = @params[0] return true end #-------------------------------------------------------------------------- # * Show Picture #-------------------------------------------------------------------------- def command_231 if @params[3] == 0 # Direct designation x = @params[4] y = @params[5] else # Designation with variables x = $game_variables[@params[4]] y = $game_variables[@params[5]] end screen.pictures[@params[0]].show(@params[1], @params[2], x, y, @params[6], @params[7], @params[8], @params[9]) return true end #-------------------------------------------------------------------------- # * Move Picture #-------------------------------------------------------------------------- def command_232 if @params[3] == 0 # Direct designation x = @params[4] y = @params[5] else # Designation with variables x = $game_variables[@params[4]] y = $game_variables[@params[5]] end screen.pictures[@params[0]].move(@params[2], x, y, @params[6], @params[7], @params[8], @params[9], @params[10]) @wait_count = @params[10] if @params[11] return true end #-------------------------------------------------------------------------- # * Rotate Picture #-------------------------------------------------------------------------- def command_233 screen.pictures[@params[0]].rotate(@params[1]) return true end #-------------------------------------------------------------------------- # * Tint Picture #-------------------------------------------------------------------------- def command_234 screen.pictures[@params[0]].start_tone_change(@params[1], @params[2]) @wait_count = @params[2] if @params[3] return true end #-------------------------------------------------------------------------- # * Erase Picture #-------------------------------------------------------------------------- def command_235 screen.pictures[@params[0]].erase return true end #-------------------------------------------------------------------------- # * Set Weather Effects #-------------------------------------------------------------------------- def command_236 return true if $game_temp.in_battle screen.weather(@params[0], @params[1], @params[2]) @wait_count = @params[2] if @params[3] return true end #-------------------------------------------------------------------------- # * Play BGM #-------------------------------------------------------------------------- def command_241 @params[0].play return true end #-------------------------------------------------------------------------- # * Fadeout BGM #-------------------------------------------------------------------------- def command_242 RPG::BGM.fade(@params[0] * 1000) return true end #-------------------------------------------------------------------------- # * Play BGS #-------------------------------------------------------------------------- def command_245 @params[0].play return true end #-------------------------------------------------------------------------- # * Fadeout BGS #-------------------------------------------------------------------------- def command_246 RPG::BGS.fade(@params[0] * 1000) return true end #-------------------------------------------------------------------------- # * Play ME #-------------------------------------------------------------------------- def command_249 @params[0].play return true end #-------------------------------------------------------------------------- # * Play SE #-------------------------------------------------------------------------- def command_250 @params[0].play return true end #-------------------------------------------------------------------------- # * Stop SE #-------------------------------------------------------------------------- def command_251 RPG::SE.stop return true end #-------------------------------------------------------------------------- # * Battle Processing #-------------------------------------------------------------------------- def command_301 return true if $game_temp.in_battle if @params[0] == 0 # Direct designation troop_id = @params[1] else # Designation with variables troop_id = $game_variables[@params[1]] end if $data_troops[troop_id] != nil $game_troop.setup(troop_id) $game_troop.can_escape = @params[2] $game_troop.can_lose = @params[3] $game_temp.battle_proc = Proc.new { |n| @branch[@indent] = n } $game_temp.next_scene = "battle" end @index += 1 return false end #-------------------------------------------------------------------------- # * If Win #-------------------------------------------------------------------------- def command_601 if @branch[@indent] == 0 @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # * If Escape #-------------------------------------------------------------------------- def command_602 if @branch[@indent] == 1 @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # * If Lose #-------------------------------------------------------------------------- def command_603 if @branch[@indent] == 2 @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # * Shop Processing #-------------------------------------------------------------------------- def command_302 $game_temp.next_scene = "shop" $game_temp.shop_goods = [@params] $game_temp.shop_purchase_only = @params[2] loop do @index += 1 if @list[@index].code == 605 # Shop second line or after $game_temp.shop_goods.push(@list[@index].parameters) else return false end end end #-------------------------------------------------------------------------- # * Name Input Processing #-------------------------------------------------------------------------- def command_303 if $data_actors[@params[0]] != nil $game_temp.next_scene = "name" $game_temp.name_actor_id = @params[0] $game_temp.name_max_char = @params[1] end @index += 1 return false end #-------------------------------------------------------------------------- # * Change HP #-------------------------------------------------------------------------- def command_311 value = operate_value(@params[1], @params[2], @params[3]) iterate_actor_id(@params[0]) do |actor| next if actor.dead? if @params[4] == false and actor.hp + value <= 0 actor.hp = 1 # If incapacitation is not allowed, make 1 else actor.hp += value end actor.perform_collapse end if $game_party.all_dead? $game_temp.next_scene = "gameover" end return true end #-------------------------------------------------------------------------- # * Change MP #-------------------------------------------------------------------------- def command_312 value = operate_value(@params[1], @params[2], @params[3]) iterate_actor_id(@params[0]) do |actor| actor.mp += value end return true end #-------------------------------------------------------------------------- # * Change State #-------------------------------------------------------------------------- def command_313 iterate_actor_id(@params[0]) do |actor| if @params[1] == 0 actor.add_state(@params[2]) actor.perform_collapse else actor.remove_state(@params[2]) end end return true end #-------------------------------------------------------------------------- # * Recover All #-------------------------------------------------------------------------- def command_314 iterate_actor_id(@params[0]) do |actor| actor.recover_all end return true end #-------------------------------------------------------------------------- # * Change EXP #-------------------------------------------------------------------------- def command_315 value = operate_value(@params[1], @params[2], @params[3]) iterate_actor_id(@params[0]) do |actor| actor.change_exp(actor.exp + value, @params[4]) end return true end #-------------------------------------------------------------------------- # * Change Level #-------------------------------------------------------------------------- def command_316 value = operate_value(@params[1], @params[2], @params[3]) iterate_actor_id(@params[0]) do |actor| actor.change_level(actor.level + value, @params[4]) end return true end #-------------------------------------------------------------------------- # * Change Parameters #-------------------------------------------------------------------------- def command_317 value = operate_value(@params[2], @params[3], @params[4]) actor = $game_actors[@params[0]] if actor != nil case @params[1] when 0 # Maximum HP actor.maxhp += value when 1 # Maximum MP actor.maxmp += value when 2 # Attack actor.atk += value when 3 # Defense actor.def += value when 4 # Spirit actor.spi += value when 5 # Agility actor.agi += value end end return true end #-------------------------------------------------------------------------- # * Change Skills #-------------------------------------------------------------------------- def command_318 actor = $game_actors[@params[0]] if actor != nil if @params[1] == 0 actor.learn_skill(@params[2]) else actor.forget_skill(@params[2]) end end return true end #-------------------------------------------------------------------------- # * Change Equipment #-------------------------------------------------------------------------- def command_319 actor = $game_actors[@params[0]] if actor != nil actor.change_equip_by_id(@params[1], @params[2]) end return true end #-------------------------------------------------------------------------- # * Change Name #-------------------------------------------------------------------------- def command_320 actor = $game_actors[@params[0]] if actor != nil actor.name = @params[1] end return true end #-------------------------------------------------------------------------- # * Change Class #-------------------------------------------------------------------------- def command_321 actor = $game_actors[@params[0]] if actor != nil and $data_classes[@params[1]] != nil actor.class_id = @params[1] end return true end #-------------------------------------------------------------------------- # * Change Actor Graphic #-------------------------------------------------------------------------- def command_322 actor = $game_actors[@params[0]] if actor != nil actor.set_graphic(@params[1], @params[2], @params[3], @params[4]) end $game_player.refresh return true end #-------------------------------------------------------------------------- # * Change Vehicle Graphic #-------------------------------------------------------------------------- def command_323 if @params[0] == 0 # Boat $game_map.boat.set_graphic(@params[1], @params[2]) elsif @params[0] == 1 # Ship $game_map.ship.set_graphic(@params[1], @params[2]) else # Airship $game_map.airship.set_graphic(@params[1], @params[2]) end return true end #-------------------------------------------------------------------------- # * Change Enemy HP #-------------------------------------------------------------------------- def command_331 value = operate_value(@params[1], @params[2], @params[3]) iterate_enemy_index(@params[0]) do |enemy| if enemy.hp > 0 if @params[4] == false and enemy.hp + value <= 0 enemy.hp = 1 # If incapacitation is not allowed, make 1 else enemy.hp += value end enemy.perform_collapse end end return true end #-------------------------------------------------------------------------- # * Change Enemy MP #-------------------------------------------------------------------------- def command_332 value = operate_value(@params[1], @params[2], @params[3]) iterate_enemy_index(@params[0]) do |enemy| enemy.mp += value end return true end #-------------------------------------------------------------------------- # * Change Enemy State #-------------------------------------------------------------------------- def command_333 iterate_enemy_index(@params[0]) do |enemy| if @params[2] == 1 # If change of incapacitation enemy.immortal = false # Clear immortal flag end if @params[1] == 0 enemy.add_state(@params[2]) enemy.perform_collapse else enemy.remove_state(@params[2]) end end return true end #-------------------------------------------------------------------------- # * Enemy Recover All #-------------------------------------------------------------------------- def command_334 iterate_enemy_index(@params[0]) do |enemy| enemy.recover_all end return true end #-------------------------------------------------------------------------- # * Enemy Appear #-------------------------------------------------------------------------- def command_335 enemy = $game_troop.members[@params[0]] if enemy != nil and enemy.hidden enemy.hidden = false $game_troop.make_unique_names end return true end #-------------------------------------------------------------------------- # * Enemy Transform #-------------------------------------------------------------------------- def command_336 enemy = $game_troop.members[@params[0]] if enemy != nil enemy.transform(@params[1]) $game_troop.make_unique_names end return true end #-------------------------------------------------------------------------- # * Show Battle Animation #-------------------------------------------------------------------------- def command_337 iterate_battler(0, @params[0]) do |battler| next unless battler.exist? battler.animation_id = @params[1] end return true end #-------------------------------------------------------------------------- # * Force Action #-------------------------------------------------------------------------- def command_339 iterate_battler(@params[0], @params[1]) do |battler| next unless battler.exist? battler.action.kind = @params[2] if battler.action.kind == 0 battler.action.basic = @params[3] else battler.action.skill_id = @params[3] end if @params[4] == -2 # Last target battler.action.decide_last_target elsif @params[4] == -1 # Random battler.action.decide_random_target elsif @params[4] >= 0 # Index designation battler.action.target_index = @params[4] end battler.action.forcing = true $game_troop.forcing_battler = battler @index += 1 return false end return true end #-------------------------------------------------------------------------- # * Abort Battle #-------------------------------------------------------------------------- def command_340 $game_temp.next_scene = "map" @index += 1 return false end #-------------------------------------------------------------------------- # * Open Menu Screen #-------------------------------------------------------------------------- def command_351 $game_temp.next_scene = "menu" $game_temp.menu_beep = false @index += 1 return false end #-------------------------------------------------------------------------- # * Open Save Screen #-------------------------------------------------------------------------- def command_352 $game_temp.next_scene = "save" @index += 1 return false end #-------------------------------------------------------------------------- # * Game Over #-------------------------------------------------------------------------- def command_353 $game_temp.next_scene = "gameover" return false end #-------------------------------------------------------------------------- # * Return to Title Screen #-------------------------------------------------------------------------- def command_354 $game_temp.next_scene = "title" return false end #-------------------------------------------------------------------------- # * Script #-------------------------------------------------------------------------- def command_355 script = @list[@index].parameters[0] + "\n" loop do if @list[@index+1].code == 655 # Second line of script and after script += @list[@index+1].parameters[0] + "\n" else break end @index += 1 end eval(script) return true end end