mkxp/scripts/Interpreter 7.rb

283 lines
8.6 KiB
Ruby

#==============================================================================
# ** Interpreter (part 7)
#------------------------------------------------------------------------------
# This interpreter runs event commands. This class is used within the
# Game_System class and the Game_Event class.
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# * Change Enemy HP
#--------------------------------------------------------------------------
def command_331
# Get operate value
value = operate_value(@parameters[1], @parameters[2], @parameters[3])
# Process with iterator
iterate_enemy(@parameters[0]) do |enemy|
# If HP is not 0
if enemy.hp > 0
# Change HP (if death is not permitted then change HP to 1)
if @parameters[4] == false and enemy.hp + value <= 0
enemy.hp = 1
else
enemy.hp += value
end
end
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Change Enemy SP
#--------------------------------------------------------------------------
def command_332
# Get operate value
value = operate_value(@parameters[1], @parameters[2], @parameters[3])
# Process with iterator
iterate_enemy(@parameters[0]) do |enemy|
# Change SP
enemy.sp += value
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Change Enemy State
#--------------------------------------------------------------------------
def command_333
# Process with iterator
iterate_enemy(@parameters[0]) do |enemy|
# If [regard HP 0] state option is valid
if $data_states[@parameters[2]].zero_hp
# Clear immortal flag
enemy.immortal = false
end
# Change
if @parameters[1] == 0
enemy.add_state(@parameters[2])
else
enemy.remove_state(@parameters[2])
end
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Enemy Recover All
#--------------------------------------------------------------------------
def command_334
# Process with iterator
iterate_enemy(@parameters[0]) do |enemy|
# Recover all
enemy.recover_all
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Enemy Appearance
#--------------------------------------------------------------------------
def command_335
# Get enemy
enemy = $game_troop.enemies[@parameters[0]]
# Clear hidden flag
if enemy != nil
enemy.hidden = false
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Enemy Transform
#--------------------------------------------------------------------------
def command_336
# Get enemy
enemy = $game_troop.enemies[@parameters[0]]
# Transform processing
if enemy != nil
enemy.transform(@parameters[1])
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Show Battle Animation
#--------------------------------------------------------------------------
def command_337
# Process with iterator
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# If battler exists
if battler.exist?
# Set animation ID
battler.animation_id = @parameters[2]
end
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Deal Damage
#--------------------------------------------------------------------------
def command_338
# Get operate value
value = operate_value(0, @parameters[2], @parameters[3])
# Process with iterator
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# If battler exists
if battler.exist?
# Change HP
battler.hp -= value
# If in battle
if $game_temp.in_battle
# Set damage
battler.damage = value
battler.damage_pop = true
end
end
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Force Action
#--------------------------------------------------------------------------
def command_339
# Ignore if not in battle
unless $game_temp.in_battle
return true
end
# Ignore if number of turns = 0
if $game_temp.battle_turn == 0
return true
end
# Process with iterator (For convenience, this process won't be repeated)
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# If battler exists
if battler.exist?
# Set action
battler.current_action.kind = @parameters[2]
if battler.current_action.kind == 0
battler.current_action.basic = @parameters[3]
else
battler.current_action.skill_id = @parameters[3]
end
# Set action target
if @parameters[4] == -2
if battler.is_a?(Game_Enemy)
battler.current_action.decide_last_target_for_enemy
else
battler.current_action.decide_last_target_for_actor
end
elsif @parameters[4] == -1
if battler.is_a?(Game_Enemy)
battler.current_action.decide_random_target_for_enemy
else
battler.current_action.decide_random_target_for_actor
end
elsif @parameters[4] >= 0
battler.current_action.target_index = @parameters[4]
end
# Set force flag
battler.current_action.forcing = true
# If action is valid and [run now]
if battler.current_action.valid? and @parameters[5] == 1
# Set battler being forced into action
$game_temp.forcing_battler = battler
# Advance index
@index += 1
# End
return false
end
end
end
# Continue
return true
end
#--------------------------------------------------------------------------
# * Abort Battle
#--------------------------------------------------------------------------
def command_340
# Set battle abort flag
$game_temp.battle_abort = true
# Advance index
@index += 1
# End
return false
end
#--------------------------------------------------------------------------
# * Call Menu Screen
#--------------------------------------------------------------------------
def command_351
# Set battle abort flag
$game_temp.battle_abort = true
# Set menu calling flag
$game_temp.menu_calling = true
# Advance index
@index += 1
# End
return false
end
#--------------------------------------------------------------------------
# * Call Save Screen
#--------------------------------------------------------------------------
def command_352
# Set battle abort flag
$game_temp.battle_abort = true
# Set save calling flag
$game_temp.save_calling = true
# Advance index
@index += 1
# End
return false
end
#--------------------------------------------------------------------------
# * Game Over
#--------------------------------------------------------------------------
def command_353
# Set game over flag
$game_temp.gameover = true
# End
return false
end
#--------------------------------------------------------------------------
# * Return to Title Screen
#--------------------------------------------------------------------------
def command_354
# Set return to title screen flag
$game_temp.to_title = true
# End
return false
end
#--------------------------------------------------------------------------
# * Script
#--------------------------------------------------------------------------
def command_355
# Set first line to script
script = @list[@index].parameters[0] + "\n"
# Loop
loop do
# If next event command is second line of script or after
if @list[@index+1].code == 655
# Add second line or after to script
script += @list[@index+1].parameters[0] + "\n"
# If event command is not second line or after
else
# Abort loop
break
end
# Advance index
@index += 1
end
# Evaluation
#result = eval(script)
# If return value is false
#if result == false
# # End
# return false
#end
# Continue
eval(script)
return true
end
end