| 
 
| 赞 | 9 |  
| VIP | 0 |  
| 好人卡 | 3 |  
| 积分 | 45 |  
| 经验 | 57973 |  
| 最后登录 | 2025-8-27 |  
| 在线时间 | 1060 小时 |  
 Lv3.寻梦者 
	梦石0 星屑4531 在线时间1060 小时注册时间2013-3-28帖子390 
 | 
| 
#==============================================================================
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  #
 # ▼ Yami Engine Symphony - Battle Symphony
 # -- Version: 1.15 (2013.03.04)
 # -- Level: Easy, Normal, Hard, Very Hard
 # -- Requires: n/a
 #
 #==============================================================================
 
 $imported = {} if $imported.nil?
 $imported["YES-BattleSymphony"] = true
 
 #==============================================================================
 # ▼ Updates
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # 2013.03.04 - Release Build 1.15.
 # 2013.02.07 - Release Build 1.14.
 # 2013.02.01 - Release Build 1.13.
 # 2013.01.12 - Release Build 1.12.
 # 2013.01.09 - Release Build 1.11.
 # 2013.01.03 - Release Build 1.10.
 # 2012.11.29 - Release Build 1.09.
 # 2012.11.29 - Release Build 1.08.
 # 2012.11.28 - Release Build 1.07.
 # 2012.11.25 - Release Build 1.06.
 # 2012.11.24 - Release Build 1.05.
 # 2012.11.16 - Release Build 1.04.
 # 2012.11.15 - Release Build 1.03.
 # 2012.11.12 - Release Build 1.02.
 # 2012.11.08 - Release Build 1.01.
 # 2012.10.20 - Finished Script.
 # 2012.07.01 - Started Script.
 #
 #==============================================================================
 # ▼ Introduction
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # Core Engine of Symphony. This script provides a complicated visual battle
 # which can be customized and many add-on awaited in the future.
 # -----------------------------------------------------------------------------
 # There are 8 Sections of Script:
 #
 # Section I. Basic Settings (S-01)
 # Section II. Default Actions (S-02)
 # Section III. AutoSymphony (S-03)
 # Section IV. Default Symphony Tags (S-04)
 # Section V. Imports Symphony Tags (S-05)
 # Section VI. Sprites Initialization (S-06)
 # Section VII. Icons Sprites Initialization (S-07)
 # Section VIII. Core Script (S-08)
 #
 # You can search these sections by the code next to them (S-xx).
 #
 #==============================================================================
 # ▼ Compatibility
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
 # it will run with RPG Maker VX without adjusting.
 #
 # To make this script work correctly with YEA - Battle Engine Ace, you have to
 # put this script under YEA - Battle Engine Ace.
 #
 #==============================================================================
 # ▼ Credits
 # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # Symphony Tags: Yanfly (From his Melody Tags).
 # Inspired: Yanfly, Nessiah, EvilEagles.
 # Testers: Many Guys in RPG Maker Community.
 # Many Descriptions: Yanfly (From his Yanfly Engine Melody)
 #
 #==============================================================================
 
 #==============================================================================
 # Section I. Basic Settings (S-01)
 # -----------------------------------------------------------------------------
 # These are all basic requirements for running Battle Engine Symphony.
 # Please pay attention to those settings before you touch and read next
 # sections and add-ons.
 #==============================================================================
 module SYMPHONY
 module View
 # Set this to false to set Battle View to Empty.
 # All Sprites of actors as well as Icon (Weapon, Item...) will be hide.
 # All other Symphony Tags are still available.
 EMPTY_VIEW = false
 
 # Set Party default Direction. For Number of Direction, check NumPad on the
 # Keyboard. Troop Direction will be opposited with Party Direction.
 PARTY_DIRECTION = 4
 
 # Set Party default Location. If You have more than 4 Actors in Battle, You
 # have to add more index in the hash below.
 # For example: If you have 5 Actors, You will have to add default Location
 # for 5th Actor by adding: 4 => [Location X, Location Y],
 # (Don't forget the comma at the end of each line)
 ACTORS_POSITION = { # Begin.
 0 =>  [480, 224],
 1 =>  [428, 244],
 2 =>  [472, 264],
 3 =>  [422, 284],
 3 =>  [452, 304],
 } # End.
 end # View
 module Visual
 # Set this to false to disable Weapon Icon creating for non-charset Battlers.
 # Recommend not to enable this, unless You use a Battler which doesn't show
 # its own weapon in the Battler-set.
 WEAPON_ICON_NON_CHARSET = false
 
 # Set this to true to disable auto Move Posing. When set this to false,
 # You can let the actor to change to any pose while moving.
 DISABLE_AUTO_MOVE_POSE = true
 
 # Set this to true to enable shadow beneath battler.
 BATTLER_SHADOW = true
 
 # Enemies default attack animation ID.
 # First Attack Animation and Second Attack Animation can be defined by
 # notetags <atk ani 1: x> and <atk ani 2: x> respectively.
 ENEMY_ATTACK_ANIMATION = 1
 end # Visual
 module Fixes
 # Set this to false to disable auto turn-off the immortal flag. Many people
 # forgot to turn-off immortal flag in an actions sequence, so the targets
 # remain alive even their HP reach zero.
 # Auto Turn-off Immortal will be push to Finish Actions.
 AUTO_IMMORTAL_OFF = true
 end # Fixes
 end # SYMPHONY
 
 #==============================================================================
 # Section II. Default Actions (S-02)
 # -----------------------------------------------------------------------------
 # These are all Default Actions of Symphony. There are Magic Action,
 # Physical Action, Item Action and some Misc Actions. If You are really
 # good at Symphony Tags and want to customize all of these actions, please
 # pay attention here.
 # Note: You can use Symphony Tags in each skills so You don't have to check
 # this if these actions settings are good for You.
 #==============================================================================
 module SYMPHONY
 module DEFAULT_ACTIONS
 
 #==========================================================================
 # Default Magic Actions
 # -------------------------------------------------------------------------
 # These are the default magic actions for all Magic Skills as well as Certain
 # hit Skills. Battlers will play these actions when use a Magic/Certain Hit
 # Skill unless You customize it with Symphony Tags.
 #==========================================================================
 MAGIC_SETUP =[
 ["MESSAGE"],
 ["MOVE USER", ["FORWARD", "WAIT"]],
 ["POSE", ["USER", "CAST"]],
 ["STANCE", ["USER", "CAST"]],
 ] # Do not remove this.
 MAGIC_WHOLE =[
 ["IMMORTAL", ["TARGETS", "TRUE"]],
 ["AUTO SYMPHONY", ["SKILL FULL"]],
 ] # Do not remove this.
 MAGIC_TARGET =[
 ] # Do not remove this.
 MAGIC_FOLLOW =[
 ["WAIT FOR MOVE"],
 ] # Do not remove this.
 MAGIC_FINISH =[
 ["IMMORTAL", ["TARGETS", "FALSE"]],
 ["AUTO SYMPHONY", ["RETURN ORIGIN"]],
 ["WAIT FOR MOVE"],
 ["WAIT", ["12", "SKIP"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Default Physical Actions
 # -------------------------------------------------------------------------
 # These are the default physical actions for all Physical Skills as well as
 # Normal Attack. Battlers will play these actions when use a Physical
 # Skill unless You customize it with Symphony Tags.
 #==========================================================================
 PHYSICAL_SETUP =[
 ["MESSAGE"],
 ["MOVE USER", ["FORWARD", "WAIT"]],
 ] # Do not remove this.
 PHYSICAL_WHOLE =[
 ] # Do not remove this.
 PHYSICAL_TARGET =[
 ["IMMORTAL", ["TARGETS", "TRUE"]],
 ["POSE", ["USER", "FORWARD"]],
 ["STANCE", ["USER", "FORWARD"]],
 ["MOVE USER", ["TARGET", "BODY", "WAIT"]],
 ["AUTO SYMPHONY", ["SINGLE SWING"]],
 ["AUTO SYMPHONY", ["SKILL FULL", "unless attack"]],
 ["AUTO SYMPHONY", ["ATTACK FULL", "if attack"]],
 ] # Do not remove this.
 PHYSICAL_FOLLOW =[
 ["WAIT FOR MOVE"],
 ] # Do not remove this.
 PHYSICAL_FINISH =[
 ["IMMORTAL", ["TARGETS", "FALSE"]],
 ["ICON DELETE", ["USER", "WEAPON"]],
 ["AUTO SYMPHONY", ["RETURN ORIGIN"]],
 ["WAIT FOR MOVE"],
 ["WAIT", ["12", "SKIP"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Default Item Actions
 # -------------------------------------------------------------------------
 # These are the default item actions for all Items. Battlers will play these
 # actions when use an Item unless You customize it with Symphony Tags.
 #==========================================================================
 ITEM_SETUP =[
 ["MESSAGE"],
 ["MOVE USER", ["FORWARD", "WAIT"]],
 ["AUTO SYMPHONY", ["ITEM FLOAT"]],
 ] # Do not remove this.
 ITEM_WHOLE =[
 ["IMMORTAL", ["TARGETS", "TRUE"]],
 ["AUTO SYMPHONY", ["ITEM FULL"]],
 ] # Do not remove this.
 ITEM_TARGET =[
 ] # Do not remove this.
 ITEM_FOLLOW =[
 ["WAIT FOR MOVE"],
 ] # Do not remove this.
 ITEM_FINISH =[
 ["IMMORTAL", ["TARGETS", "FALSE"]],
 ["AUTO SYMPHONY", ["RETURN ORIGIN"]],
 ["WAIT FOR MOVE"],
 ["WAIT", ["12", "SKIP"]],
 ] # Do not remove this.
 #==========================================================================
 # Critical Action
 # -------------------------------------------------------------------------
 # This is the critical action. This action will be played when a battler
 # scores a critical hit.
 #==========================================================================
 CRITICAL_ACTIONS =[
 ["SCREEN", ["FLASH", "30", "255", "255", "255"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Miss Action
 # -------------------------------------------------------------------------
 # This is the miss action. This action will be played when a battler attacks
 # miss.
 #==========================================================================
 MISS_ACTIONS =[
 ["POSE", ["TARGET", "EVADE"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Evade Action
 # -------------------------------------------------------------------------
 # This is the evade action. This action will be played when a battler evades.
 #==========================================================================
 EVADE_ACTIONS =[
 ["POSE", ["TARGET", "EVADE"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Fail Action
 # -------------------------------------------------------------------------
 # This is the fail action. This action will be played when a battler fails
 # on casting skill.
 #==========================================================================
 FAIL_ACTIONS =[
 
 ] # Do not remove this.
 
 #==========================================================================
 # Damaged Action
 # -------------------------------------------------------------------------
 # This is the damaged action. This action will be played when a battler is
 # damaged.
 #==========================================================================
 DAMAGED_ACTION = [
 ["POSE", ["TARGET", "DAMAGE"]],
 ["STANCE", ["TARGET", "STRUCK"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Counter Action
 # -------------------------------------------------------------------------
 # This is the counter action. This action will be played when a battler
 # counters an attack.
 #==========================================================================
 COUNTER_ACTION = [
 ["MOVE COUNTER SUBJECT", ["FORWARD", "WAIT"]],
 ["AUTO SYMPHONY", ["SINGLE SWING COUNTER"]],
 ["AUTO SYMPHONY", ["SKILL FULL COUNTER"]],
 ["ICON DELETE", ["COUNTER SUBJECT", "WEAPON"]],
 ["POSE", ["COUNTER SUBJECT", "BREAK"]],
 ["STANCE", ["COUNTER SUBJECT", "BREAK"]],
 ] # Do not remove this.
 
 #==========================================================================
 # Reflect Action
 # -------------------------------------------------------------------------
 # This is the reflect action. This action will be played when a battler
 # reflects a magic.
 #==========================================================================
 REFLECT_ACTION = [
 ["MOVE REFLECT SUBJECT", ["FORWARD", "WAIT"]],
 ["POSE", ["REFLECT SUBJECT", "CAST"]],
 ["STANCE", ["REFLECT SUBJECT", "CAST"]],
 ["AUTO SYMPHONY", ["SKILL FULL COUNTER"]],
 ["POSE", ["REFLECT SUBJECT", "BREAK"]],
 ["STANCE", ["REFLECT SUBJECT", "BREAK"]],
 ] # Do not remove this.
 
 end # DEFAULT_ACTIONS
 end # SYMPHONY
 
 #==============================================================================
 # Section III. AutoSymphony (S-03)
 # -----------------------------------------------------------------------------
 # These are all Settings of AutoSymphony. You can make a sequence of Actions
 # and Symphony Tags and reuse it with a single tag: AutoSymphony.
 #==============================================================================
 module SYMPHONY
 AUTO_SYMPHONY = { # Start
 # "Key" => [Symphony Sequence],
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: return origin
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This AutoSymphony returns the active battler and all of its targets back
 # to their original locations. Used often at the end of a skill, item,
 # or any other action sequence.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "RETURN ORIGIN" => [
 ["STANCE", ["USER", "ORIGIN"]],
 ["MOVE USER", ["ORIGIN", "WAIT"]],
 ["POSE", ["USER", "BREAK"]],
 ["MOVE EVERYTHING", ["ORIGIN"]],
 ], # end RETURN ORIGIN
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: single swing
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This causes the active battler to perform a single-handed weapon swing
 # downwards.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "SINGLE SWING" => [
 ["ICON CREATE", ["USER", "WEAPON"]],
 ["ICON", ["USER", "WEAPON", "SWING"]],
 ["POSE", ["USER", "2H SWING"]],
 ["STANCE", ["USER", "ATTACK"]],
 ], # end SINGLE SWING
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: single swing counter
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This causes the countering battler to perform a single-handed weapon
 # swing downwards.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "SINGLE SWING COUNTER" => [
 ["ICON CREATE", ["COUNTER SUBJECT", "WEAPON"]],
 ["ICON", ["COUNTER SUBJECT", "WEAPON", "SWING"]],
 ["POSE", ["COUNTER SUBJECT", "2H SWING"]],
 ["STANCE", ["USER", "ATTACK"]],
 ], # end SINGLE SWING COUNTER
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: item float
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This causes the active battler to enter a "Cast" stance to make the
 # active battler appear to throw the item upward. The icon of the item
 # is then created and floats upward.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "ITEM FLOAT" => [
 ["POSE", ["USER", "CAST"]],
 ["STANCE", ["USER", "ITEM"]],
 ["ICON CREATE", ["USER", "ITEM"]],
 ["ICON", ["USER", "ITEM", "FLOAT", "WAIT"]],
 ], # end ITEM FLOAT
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: attack full
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This triggers the full course for an attack effect. Attack's animation
 # plays and waits until it ends. The damage, status changes, and anything
 # else the attack may do to the target. Once the attack effect is over,
 # the target is sent sliding backwards a little bit.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "ATTACK FULL" => [
 ["ATTACK EFFECT", ["COUNTER CHECK"]],
 ["ATTACK ANIMATION", ["WAIT"]],
 ["ATTACK EFFECT", ["WHOLE"]],
 ["MOVE TARGETS", ["BACKWARD"]],
 ], # end ATTACK FULL
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: skill full
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This trigger the full course for a skill's effect. The skill animation
 # plays and waits to the end. The damage, status changes, and anything
 # else the skill may do to the target. Once the skill effect is over, the
 # target is sent sliding backwards a little bit.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "SKILL FULL" => [
 ["SKILL EFFECT", ["COUNTER CHECK"]],
 ["SKILL EFFECT", ["REFLECT CHECK"]],
 ["SKILL ANIMATION", ["WAIT"]],
 ["SKILL EFFECT", ["WHOLE"]],
 ["MOVE TARGETS", ["BACKWARD", "unless skill.for_friend?"]],
 ], # end SKILL FULL
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: skill full counter
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This trigger the full course for a skill's effect. The skill animation
 # plays and waits to the end. The damage, status changes, and anything
 # else the skill may do to the target. Once the skill effect is over, the
 # target is sent sliding backwards a little bit.
 # This trigger is used in countering/reflecting skill.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "SKILL FULL COUNTER" => [
 ["ATTACK ANIMATION", ["TARGETS", "WAIT", "if attack"]],
 ["SKILL ANIMATION", ["TARGETS", "WAIT", "unless attack"]],
 ["SKILL EFFECT", ["WHOLE"]],
 ["MOVE TARGETS", ["BACKWARD", "unless skill.for_friend?"]],
 ], # end SKILL FULL COUNTER
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 # autosymphony: item full
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This triggers the full course for an item's effect. The item animation
 # plays and waits to the end. The damage, status changes, and anything
 # else the item may do to the target. Once the skill effect is over, the
 # target is sent sliding backwards a little bit.
 # --- WARNING --- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is a default-used AutoSymphony. Do not remove this.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 "ITEM FULL" => [
 ["SKILL EFFECT", ["COUNTER CHECK"]],
 ["SKILL EFFECT", ["REFLECT CHECK", "unless skill.for_all?"]],
 ["SKILL ANIMATION", ["WAIT"]],
 ["ICON", ["USER", "ITEM", "FADE OUT", "WAIT"]],
 ["ICON DELETE", ["USER", "ITEM"]],
 ["SKILL EFFECT", ["WHOLE"]],
 ["MOVE TARGETS", ["BACKWARD", "unless item.for_friend?"]],
 ], # end ITEM FULL
 
 } # Do not remove this.
 end # SYMPHONY
 
 #==============================================================================
 # Section IV. Default Symphony Tags (S-04)
 # -----------------------------------------------------------------------------
 # These are all Default Symphony Tags. They define actions that will be played
 # when the tags are called. All these tags are optimized for the best
 # performance through testings.
 # -----------------------------------------------------------------------------
 # Do not edit anything below here unless You have read carefully the Tutorial
 # at Creating and Editing Symphony Tags.
 #==============================================================================
 #==============================================================================
 # ■ Scene_Battle - Defines Tags Names
 #==============================================================================
 class Scene_Battle < Scene_Base
 
 #--------------------------------------------------------------------------
 # new method: perform_actions_list
 #--------------------------------------------------------------------------
 def perform_actions_list(actions, targets)
 #--- Create Formers ---
 former_action = @action
 former_values = (@action_values != nil) ? @action_values.clone : nil
 former_targets = (@action_targets != nil) ? @action_targets.clone : nil
 former_item = (@scene_item != nil) ? @scene_item.clone : nil
 #--- Create Current ---
 @action_targets = targets
 actions.each { |action|
 @action = action[0].upcase; @action_values = action[1]
 @action_values.each { |s| s.upcase! if s.is_a?(String) } if @action_values
 break unless SceneManager.scene_is?(Scene_Battle)
 break if @subject && @subject.dead?
 next unless action_condition_met
 case @action.upcase
 
 when /ANIMATION[ ](\d+)|SKILL ANIMATION|ATTACK ANIMATION|ANIMATION/i
 action_animation
 
 when /ATTACK EFFECT|SKILL EFFECT/i
 action_skill_effect
 
 when /AUTO SYMPHONY|AUTOSYMPHONY/i
 action_autosymphony
 
 when /ICON CREATE|CREATE ICON/i
 action_create_icon
 
 when /ICON DELETE|DELETE ICON/i
 action_delete_icon
 
 when "ICON", "ICON EFFECT"
 action_icon_effect
 
 when /ICON THROW[ ](.*)/i
 action_icon_throw
 
 when /IF[ ](.+)/i
 action_condition
 
 when /JUMP[ ](.*)/i
 action_move
 
 when /MESSAGE/i
 action_message
 
 when /MOVE[ ](.*)/i
 action_move
 
 when /IMMORTAL/i
 action_immortal
 
 when /POSE/i
 action_pose
 
 when /STANCE/i
 action_stance
 
 when /UNLESS[ ](.+)/i
 action_condition
 
 when /TELEPORT[ ](.*)/i
 action_move
 
 when "WAIT", "WAIT SKIP", "WAIT FOR ANIMATION", "WAIT FOR MOVE",
 "WAIT FOR MOVEMENT", "ANI WAIT"
 action_wait
 
 else
 imported_symphony
 end
 }
 #--- Release Formers ---
 @action = former_action
 @action_values = former_values
 @action_targets = former_targets
 @scene_item = former_item
 end
 
 end # Scene_Battle
 #==============================================================================
 # ■ Scene_Battle - Defines Tags Actions
 #==============================================================================
 class Scene_Battle < Scene_Base
 
 #--------------------------------------------------------------------------
 # new method: action_condition_met
 #--------------------------------------------------------------------------
 def action_condition_met
 target = @action_targets[0]
 targets = @action_targets
 user = @subject
 skill = item = @scene_item
 attack = false
 if @counter_subject || (user.current_action && user.current_action.attack?)
 attack = true
 end
 weapons = user.weapons if user.actor?
 @action_condition ||= []
 @action_condition.pop if @action.upcase == "END"
 if @action_condition.size > 0
 @action_condition.each { |action_condition|
 action_condition =~ /(IF|UNLESS)[ ](.+)/i
 condition_type = $1.upcase
 condition_value = $2.downcase
 #---
 if condition_type == "IF"
 return false unless eval(condition_value)
 elsif condition_type == "UNLESS"
 return false if eval(condition_value)
 end
 }
 end
 if @action_values
 @action_values.each { |value|
 case value
 when /IF[ ](.*)/i
 eval("return false unless " + $1.to_s.downcase)
 when /UNLESS[ ](.*)/i
 eval("return false if " + $1.to_s.downcase)
 end
 }
 end
 return true
 end
 
 #--------------------------------------------------------------------------
 # new method: get_action_mains
 #--------------------------------------------------------------------------
 def get_action_mains
 result = []
 case @action.upcase
 when /(?:USER)/i
 result.push(@subject) if @subject
 when /(?:TARGET|TARGETS)/i
 result = @action_targets
 when /(?:COUNTER SUBJECT)/i
 result = [@counter_subject]
 when /(?:REFLECT SUBJECT)/i
 result = [@reflect_subject]
 when /(?:ACTORS|PARTY|ACTORS LIVING)/i
 result = $game_party.alive_members
 when /(?:ALL ACTORS|ACTORS ALL)/i
 result = $game_party.battle_members
 when /(?:ACTORS NOT USER|PARTY NOT USER)/i
 result = $game_party.alive_members
 result.delete(@subject) if @subject
 when /(?:ENEMIES|TROOP|ENEMIES LIVING)/i
 result = $game_troop.alive_members
 when /(?:ALL ENEMIES|ENEMIES ALL)/i
 result = $game_troop.battle_members
 when /(?:ENEMIES NOT USER|ENEMIES NOT USER)/i
 result = $game_troop.alive_members
 result.delete(@subject) if @subject
 when /ACTOR[ ](\d+)/i
 result.push($game_party.battle_members[$1.to_i])
 when /ENEMY[ ](\d+)/i
 result.push($game_troop.battle_members[$1.to_i])
 when /(?:EVERYTHING|EVERYBODY)/i
 result = $game_party.alive_members + $game_troop.alive_members
 when /(?:EVERYTHING NOT USER|EVERYBODY NOT USER)/i
 result = $game_party.alive_members + $game_troop.alive_members
 result.delete(@subject) if @subject
 when /(?:ALLIES|FRIENDS)/i
 result = @subject.friends_unit.alive_members if @subject
 when /(?:OPPONENTS|RIVALS)/i
 result = @subject.opponents_unit.alive_members if @subject
 when /(?:FRIENDS NOT USER)/i
 if @subject
 result = @subject.friends_unit.alive_members
 result.delete(@subject)
 end
 when /(?:FOCUS)/i
 result = @action_targets
 result.push(@subject) if @subject
 when /(?:NOT FOCUS|NON FOCUS)/i
 result = $game_party.alive_members + $game_troop.alive_members
 result -= @action_targets
 result.delete(@subject) if @subject
 else;
 end
 return result.compact
 end
 
 #--------------------------------------------------------------------------
 # new method: get_action_targets
 #--------------------------------------------------------------------------
 def get_action_targets
 result = []
 @action_values.reverse.each { |value|
 next if value.nil?
 case value.upcase
 when /(?:USER)/i
 result.push(@subject) if @subject
 when /(?:TARGET|TARGETS)/i
 result = @action_targets
 when /(?:COUNTER SUBJECT)/i
 result = [@counter_subject]
 when /(?:REFLECT SUBJECT)/i
 result = [@reflect_subject]
 when /(?:ACTORS|PARTY|ACTORS LIVING)/i
 result = $game_party.alive_members
 when /(?:ALL ACTORS|ACTORS ALL)/i
 result = $game_party.battle_members
 when /(?:ACTORS NOT USER|PARTY NOT USER)/i
 result = $game_party.alive_members
 result.delete(@subject) if @subject
 when /(?:ENEMIES|TROOP|ENEMIES LIVING)/i
 result = $game_troop.alive_members
 when /(?:ALL ENEMIES|ENEMIES ALL)/i
 result = $game_troop.battle_members
 when /(?:ENEMIES NOT USER|ENEMIES NOT USER)/i
 result = $game_troop.alive_members
 result.delete(@subject) if @subject
 when /ACTOR[ ](\d+)/i
 result.push($game_party.battle_members[$1.to_i])
 when /ENEMY[ ](\d+)/i
 result.push($game_troop.battle_members[$1.to_i])
 when /(?:EVERYTHING|EVERYBODY)/i
 result = $game_party.alive_members + $game_troop.alive_members
 when /(?:EVERYTHING NOT USER|EVERYBODY NOT USER)/i
 result = $game_party.alive_members + $game_troop.alive_members
 result.delete(@subject) if @subject
 when /(?:ALLIES|FRIENDS)/i
 result = @subject.friends_unit.alive_members if @subject
 when /(?:OPPONENTS|RIVALS)/i
 result = @subject.opponents_unit.alive_members if @subject
 when /(?:FRIENDS NOT USER)/i
 if @subject
 result = @subject.friends_unit.alive_members
 result.delete(@subject)
 end
 when /(?:NOT FOCUS|NON FOCUS)/i
 result = $game_party.alive_members + $game_troop.alive_members
 result -= @action_targets
 result.delete(@subject)
 when /(?:FOCUS)/i
 result = @action_targets
 result.push(@subject) if @subject
 else;
 end
 }
 return result.compact
 end
 
 #--------------------------------------------------------------------------
 # new method: action_animation
 #--------------------------------------------------------------------------
 def action_animation
 targets = get_action_targets
 targets = @action_targets if ["SKILL ANIMATION", "ATTACK ANIMATION"].include?(@action.upcase)
 return if targets.size == 0
 #---
 case @action.upcase
 when /ANIMATION[ ](\d+)/i
 animation_id = [$1.to_i]
 when "SKILL ANIMATION", "ANIMATION"
 return unless @subject.current_action.item
 animation_id = [@subject.current_action.item.animation_id]
 when "ATTACK ANIMATION"
 animation_id = [@subject.atk_animation_id1]
 animation_id = [@subject.atk_animation_id2] if @subject.atk_animation_id2 > 0 && @action_values[1].to_i == 2
 when "LAST ANIMATION"
 animation_id = [@last_animation_id]
 end
 mirror = true if @action_values.include?("MIRROR")
 #---
 animation_id = [@subject.atk_animation_id1] if animation_id == [-1]
 #---
 ani_count = 0
 animation_id.each { |id|
 wait_for_animation if ani_count > 0
 mirror = !mirror if ani_count > 0
 animation = $data_animations[id]
 #---
 return unless animation
 if animation.to_screen?; targets[0].animation_id = id; end
 if !animation.to_screen?
 targets.each {|target| target.animation_id = id}
 end
 targets.each {|target| target.animation_mirror = mirror}
 ani_count += 1
 }
 @last_animation_id = animation_id[0]
 return unless @action_values.include?("WAIT")
 wait_for_animation
 end
 
 #--------------------------------------------------------------------------
 # new method: action_skill_effect
 #--------------------------------------------------------------------------
 def action_skill_effect
 return unless @subject
 return unless @subject.alive?
 return unless @subject.current_action.item
 targets = @action_targets.uniq
 item = @subject.current_action.item
 #---
 if @action_values.include?("CLEAR")
 targets.each { |target| target.result.set_calc; target.result.clear }
 return
 end
 #---
 if @action_values.include?("COUNTER CHECK")
 targets.each { |target| target.result.set_counter }
 return
 elsif @action_values.include?("REFLECT CHECK")
 targets.each { |target| target.result.set_reflection }
 return
 end
 #---
 array = []
 array.push("calc") if @action_values.include?("CALC")
 array = ["perfect"] if @action_values.include?("PERFECT")
 @action_values.each {|value| array.push(value.downcase) unless ["PERFECT", "CALC"].include?(value)}
 array = ["calc", "dmg", "effect"] if @action_values.include?("WHOLE") || @action_values.size == 0
 #---
 targets.each {|target|
 target.result.clear_bes_flag
 array.each {|value| str = "target.result.set_#{value}"; eval(str)}
 item.repeats.times { invoke_item(target, item) }
 target.result.clear_change_target
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_autosymphony
 #--------------------------------------------------------------------------
 def action_autosymphony
 key = @action_values[0].to_s.upcase
 return unless SYMPHONY::AUTO_SYMPHONY.include?(key)
 actions_list = SYMPHONY::AUTO_SYMPHONY[key]
 perform_actions_list(actions_list, @action_targets)
 end
 
 #--------------------------------------------------------------------------
 # new method: action_create_icon
 #--------------------------------------------------------------------------
 def action_create_icon
 targets = get_action_targets
 return if targets.size == 0
 return if SYMPHONY::View::EMPTY_VIEW
 #---
 case @action_values[1]
 when "WEAPON", "WEAPON1"
 symbol = :weapon1
 attachment = :hand1
 when "WEAPON2"
 symbol = :weapon2
 attachment = :hand2
 when "SHIELD"
 symbol = :shield
 attachment = :shield
 when "ITEM"
 symbol = :item
 attachment = :middle
 else
 symbol = @action_values[1]
 attachment = :middle
 end
 #---
 case @action_values[2]
 when "HAND", "HAND1"
 attachment = :hand1
 when "HAND2", "SHIELD"
 attachment = :hand2
 when "ITEM"
 attachment = :item
 when "MIDDLE", "BODY"
 attachment = :middle
 when "TOP", "HEAD"
 attachment = :top
 when "BOTTOM", "FEET", "BASE"
 attachment = :base
 end
 #---
 targets.each { |target|
 next if target.sprite.nil?
 next if !target.use_charset? && !SYMPHONY::Visual::WEAPON_ICON_NON_CHARSET && [:weapon1, :weapon2].include?(symbol)
 target.create_icon(symbol, @action_values[3].to_i)
 next if target.icons[symbol].nil?
 target.icons[symbol].set_origin(attachment)
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_delete_icon
 #--------------------------------------------------------------------------
 def action_delete_icon
 targets = get_action_targets
 return if targets.size == 0
 #---
 case @action_values[1]
 when "WEAPON", "WEAPON1"
 symbol = :weapon1
 when "WEAPON2"
 symbol = :weapon2
 when "SHIELD"
 symbol = :shield
 when "ITEM"
 symbol = :item
 else
 symbol = @action_values[1]
 end
 #---
 targets.each { |target| target.delete_icon(symbol) }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_icon_effect
 #--------------------------------------------------------------------------
 def action_icon_effect
 targets = get_action_targets
 return if targets.size == 0
 #---
 case @action_values[1]
 when "WEAPON", "WEAPON1"
 symbol = :weapon1
 when "WEAPON2"
 symbol = :weapon2
 when "SHIELD"
 symbol = :shield
 when "ITEM"
 symbol = :item
 else
 symbol = @action_values[1]
 end
 #---
 targets.each { |target|
 icon = target.icons[symbol]
 next if icon.nil?
 total_frames = 8
 case @action_values[2]
 when "ANGLE"
 angle = @action_values[3].to_i
 icon.set_angle(angle)
 when "ROTATE", "REROTATE"
 angle = @action_values[3].to_i
 angle = -angle if @action_values[2] == "REROTATE"
 total_frames = @action_values[4].to_i
 total_frames = 8 if total_frames == 0
 icon.create_angle(angle, total_frames)
 when /ANIMATION[ ](\d+)/i
 animation = $1.to_i
 if $data_animations[animation].nil?; return; end
 total_frames = $data_animations[animation].frame_max
 total_frames *= 4 unless $imported["YEA-CoreEngine"]
 total_frames *= YEA::CORE::ANIMATION_RATE if $imported["YEA-CoreEngine"]
 icon.start_animation($data_animations[animation])
 when /MOVE_X[ ](\d+)/i
 move_x = $1.to_i
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 icon.create_movement(move_x, icon.y, total_frames)
 when /MOVE_Y[ ](\d+)/i
 move_y = $1.to_i
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 icon.create_movement(icon.x, move_y, total_frames)
 when /CUR_X[ ]([\-]?\d+)/i
 move_x = icon.x + $1.to_i
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 icon.create_movement(move_x, icon.y, total_frames)
 when /CUR_Y[ ]([\-]?\d+)/i
 move_y = icon.y + $1.to_i
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 icon.create_movement(icon.x, move_y, total_frames)
 when "FADE IN"
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 rate = Integer(256.0/total_frames)
 icon.set_fade(rate)
 when "FADE OUT"
 total_frames = @action_values[3].to_i
 total_frames = 8 if total_frames == 0
 rate = Integer(256.0/total_frames)
 icon.set_fade(-rate)
 when "FLOAT"
 total_frames = @action_values[3].to_i
 total_frames = 24 if total_frames == 0
 icon.create_move_direction(8, total_frames, total_frames)
 when "SWING"
 total_frames = 10
 icon.set_angle(0)
 icon.create_angle(90, total_frames)
 when "UPSWING"
 total_frames = 10
 icon.set_angle(90)
 icon.create_angle(0, total_frames)
 when "STAB", "THRUST"
 total_frames = 8
 direction = Direction.direction(target.pose)
 direction = Direction.opposite(direction) if target.sprite.mirror
 case direction
 when 8
 icon_direction = 8
 icon.set_angle(-45)
 when 4
 icon_direction = 4
 icon.set_angle(45)
 when 6
 icon_direction = 6
 icon.set_angle(-135)
 when 2
 icon_direction = 2
 icon.set_angle(135)
 end
 icon.create_move_direction(Direction.opposite(icon_direction), 40, 1)
 icon.update
 icon.create_move_direction(icon_direction, 32, total_frames)
 when "CLAW"
 total_frames = 8
 direction = Direction.direction(target.pose)
 direction = Direction.opposite(direction) if target.sprite.mirror
 case direction
 when 8
 icon_direction = 7
 back_direction = 3
 when 4
 icon_direction = 1
 back_direction = 9
 when 6
 icon_direction = 3
 back_direction = 7
 when 2
 icon_direction = 9
 back_direction = 1
 end
 icon.create_move_direction(back_direction, 32, 1)
 icon.update
 icon.create_move_direction(icon_direction, 52, total_frames)
 end
 #---
 if @action_values.include?("WAIT")
 update_basic while icon.effecting?
 end
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_icon_throw
 #--------------------------------------------------------------------------
 def action_icon_throw
 mains = get_action_mains
 targets = get_action_targets
 return if mains.size == 0
 #---
 case @action_values[1]
 when "WEAPON", "WEAPON1"
 symbol = :weapon1
 when "WEAPON2"
 symbol = :weapon2
 when "SHIELD"
 symbol = :shield
 when "ITEM"
 symbol = :item
 else
 symbol = @action_values[1]
 end
 #---
 mains.each { |main|
 icon = main.icons[symbol]
 next if icon.nil?
 total_frames = @action_values[3].to_i
 total_frames = 12 if total_frames <= 0
 arc = @action_values[2].to_f
 #---
 targets.each { |target|
 move_x = target.screen_x
 move_y = target.screen_y - target.sprite.height / 2
 icon.create_movement(move_x, move_y, total_frames)
 icon.create_arc(arc)
 if @action_values.include?("WAIT")
 update_basic while icon.effecting?
 end
 }
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_condition
 #--------------------------------------------------------------------------
 def action_condition
 @action_condition ||= []
 @action_condition.push(@action.dup)
 end
 
 #--------------------------------------------------------------------------
 # new method: action_message
 #--------------------------------------------------------------------------
 def action_message
 user = @subject
 return unless user
 item = @subject.current_action.item
 return unless item
 @log_window.display_use_item(@subject, item)
 end
 
 #--------------------------------------------------------------------------
 # new method: action_move
 #--------------------------------------------------------------------------
 def action_move
 movers = get_action_mains
 return unless movers.size > 0
 return if SYMPHONY::View::EMPTY_VIEW
 #--- Get Location ---
 case @action_values[0]
 #---
 when "FORWARD", "BACKWARD"
 distance = @action_values[1].to_i
 distance = @action_values[0] == "FORWARD" ? 16 : 8 if distance <= 0
 frames = @action_values[2].to_i
 frames = 8 if frames <= 0
 movers.each { |mover|
 next unless mover.exist?
 direction = mover.direction
 destination_x = mover.screen_x
 destination_y = mover.screen_y
 case direction
 when 1; move_x = distance / -2; move_y = distance /  2
 when 2; move_x = distance *  0; move_y = distance *  1
 when 3; move_x = distance / -2; move_y = distance /  2
 when 4; move_x = distance * -1; move_y = distance *  0
 when 6; move_x = distance *  1; move_y = distance *  0
 when 7; move_x = distance / -2; move_y = distance / -2
 when 8; move_x = distance *  0; move_y = distance * -1
 when 9; move_x = distance /  2; move_y = distance / -2
 else; return
 end
 destination_x += @action_values[0] == "FORWARD" ? move_x : - move_x
 destination_y += @action_values[0] == "FORWARD" ? move_y : - move_y
 mover.face_coordinate(destination_x, destination_y) unless @action_values[0] == "BACKWARD"
 mover.create_movement(destination_x, destination_y, frames)
 case @action.upcase
 when /JUMP[ ](.*)/i
 arc_scan = $1.scan(/(?:ARC)[ ](\d+)/i)
 arc = $1.to_i
 mover.create_jump(arc)
 end
 }
 #---
 when "ORIGIN", "RETURN"
 frames = @action_values[1].to_i
 frames = 20 if frames <= 0
 movers.each { |mover|
 next unless mover.exist?
 destination_x = mover.origin_x
 destination_y = mover.origin_y
 next if destination_x == mover.screen_x && destination_y == mover.screen_y
 if @action_values[0] == "ORIGIN"
 mover.face_coordinate(destination_x, destination_y)
 end
 mover.create_movement(destination_x, destination_y, frames)
 case @action.upcase
 when /JUMP[ ](.*)/i
 arc_scan = $1.scan(/(?:ARC)[ ](\d+)/i)
 arc = $1.to_i
 mover.create_jump(arc)
 end
 }
 #---
 when "TARGET", "TARGETS", "USER"
 frames = @action_values[2].to_i
 frames = 20 if frames <= 0
 #---
 case @action_values[0]
 when "USER"
 targets = [@subject]
 when "TARGET", "TARGETS"
 targets = @action_targets
 end
 #---
 destination_x = destination_y = 0
 case @action_values[1]
 when "BASE", "FOOT", "FEET"
 targets.each { |target|
 destination_x += target.screen_x; destination_y += target.screen_y
 side_l = target.screen_x - target.sprite.width/2
 side_r = target.screen_x + target.sprite.width/2
 side_u = target.screen_y - target.sprite.height
 side_d = target.screen_y
 movers.each { |mover|
 next unless mover.exist?
 if side_l > mover.origin_x
 destination_x -= target.sprite.width/2
 destination_x -= mover.sprite.width/2
 elsif side_r < mover.origin_x
 destination_x += target.sprite.width/2
 destination_x += mover.sprite.width/2
 elsif side_u > mover.origin_y - mover.sprite.height
 destination_y -= target.sprite.height
 elsif side_d < mover.origin_y - mover.sprite.height
 destination_y += mover.sprite.height
 end
 }
 }
 #---
 when "BODY", "MIDDLE", "MID"
 targets.each { |target|
 destination_x += target.screen_x
 destination_y += target.screen_y - target.sprite.height / 2
 side_l = target.screen_x - target.sprite.width/2
 side_r = target.screen_x + target.sprite.width/2
 side_u = target.screen_y - target.sprite.height
 side_d = target.screen_y
 movers.each { |mover|
 next unless mover.exist?
 if side_l > mover.origin_x
 destination_x -= target.sprite.width/2
 destination_x -= mover.sprite.width/2
 elsif side_r < mover.origin_x
 destination_x += target.sprite.width/2
 destination_x += mover.sprite.width/2
 elsif side_u > mover.origin_y - mover.sprite.height
 destination_y -= target.sprite.height
 elsif side_d < mover.origin_y - mover.sprite.height
 destination_y += mover.sprite.height
 end
 destination_y += mover.sprite.height
 destination_y -= mover.sprite.height/2
 if $imported["BattleSymphony-8D"] && $imported["BattleSymphony-HB"]
 destination_y += mover.sprite.height if mover.use_8d? && target.use_hb?
 destination_y -= mover.sprite.height/4 if mover.use_hb? && target.use_8d?
 end
 }
 }
 #---
 when "CENTER"
 targets.each { |target|
 destination_x += target.screen_x
 destination_y += target.screen_y - target.sprite.height/2
 }
 #---
 when "HEAD", "TOP"
 targets.each { |target|
 destination_x += target.screen_x
 destination_y += target.screen_y - target.sprite.height
 side_l = target.screen_x - target.sprite.width/2
 side_r = target.screen_x + target.sprite.width/2
 side_u = target.screen_y - target.sprite.height
 side_d = target.screen_y
 movers.each { |mover|
 next unless mover.exist?
 if side_l > mover.origin_x
 destination_x -= target.sprite.width/2
 destination_x -= mover.sprite.width/2
 elsif side_r < mover.origin_x
 destination_x += target.sprite.width/2
 destination_x += mover.sprite.width/2
 elsif side_u > mover.origin_y - mover.sprite.height
 destination_y -= target.sprite.height
 elsif side_d < mover.origin_y - mover.sprite.height
 destination_y += mover.sprite.height
 end
 destination_y += mover.sprite.height
 destination_y -= mover.sprite.height/2
 if $imported["BattleSymphony-8D"] && $imported["BattleSymphony-HB"]
 destination_y += mover.sprite.height if mover.use_8d? && target.use_hb?
 destination_y -= mover.sprite.height/4 if mover.use_hb? && target.use_8d?
 end
 }
 }
 #---
 when "BACK"
 targets.each { |target|
 destination_x += target.screen_x
 destination_y += target.screen_y - target.sprite.height
 side_l = target.screen_x - target.sprite.width/2
 side_r = target.screen_x + target.sprite.width/2
 side_u = target.screen_y - target.sprite.height
 side_d = target.screen_y
 movers.each { |mover|
 next unless mover.exist?
 if side_l > mover.origin_x
 destination_x += target.sprite.width/2
 destination_x += mover.sprite.width/2
 elsif side_r < mover.origin_x
 destination_x -= target.sprite.width/2
 destination_x -= mover.sprite.width/2
 elsif side_u > mover.origin_y - mover.sprite.height
 destination_y -= target.sprite.height
 elsif side_d < mover.origin_y - mover.sprite.height
 destination_y += mover.sprite.height
 end
 destination_y += mover.sprite.height
 destination_y -= mover.sprite.height/2
 if $imported["BattleSymphony-8D"] && $imported["BattleSymphony-HB"]
 destination_y += mover.sprite.height if mover.use_8d? && target.use_hb?
 destination_y -= mover.sprite.height/4 if mover.use_hb? && target.use_8d?
 end
 }
 }
 #---
 else
 targets.each { |target|
 destination_x += target.screen_x
 destination_y += target.screen_y
 }
 end
 #---
 destination_x /= targets.size
 destination_y /= targets.size
 movers.each { |mover|
 next unless mover.exist?
 next if mover.screen_x == destination_x && mover.screen_y == destination_y
 case @action.upcase
 when /MOVE[ ](.*)/i
 mover.face_coordinate(destination_x, destination_y)
 mover.create_movement(destination_x, destination_y, frames)
 when /TELEPORT[ ](.*)/i
 mover.screen_x = destination_x
 mover.screen_y = destination_y
 when /JUMP[ ](.*)/i
 arc_scan = $1.scan(/(?:ARC)[ ](\d+)/i)
 arc = $1.to_i
 mover.face_coordinate(destination_x, destination_y)
 mover.create_movement(destination_x, destination_y, frames)
 mover.create_jump(arc)
 end
 }
 #---
 end
 #---
 return unless @action_values.include?("WAIT")
 wait_for_move
 end
 
 #--------------------------------------------------------------------------
 # new method: action_immortal
 #--------------------------------------------------------------------------
 def action_immortal
 targets = get_action_targets
 return unless targets.size > 0
 targets.each { |target|
 next unless target.alive?
 case @action_values[1].upcase
 when "TRUE", "ON", "ENABLE"
 target.immortal = true
 when "OFF", "FALSE", "DISABLE"
 target.immortal = false
 target.refresh
 perform_collapse_check(target)
 end
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_pose
 #--------------------------------------------------------------------------
 def action_pose
 targets = get_action_targets
 return unless targets.size > 0
 #---
 case @action_values[1]
 when "BREAK", "CANCEL", "RESET", "NORMAL"
 targets.each { |target| target.break_pose }
 return
 when "IDLE", "READY"
 pose_key = :ready
 when "DAMAGE", "DMG"
 pose_key = :damage
 when "PIYORI", "CRITICAL", "DAZED", "DAZE", "DIZZY"
 pose_key = :critical
 when "MARCH", "FORWARD"
 pose_key = :marching
 when "VICTORY", "POSE"
 pose_key = :victory
 when "EVADE", "DODGE"
 pose_key = :dodge
 when "DOWN", "DOWNED", "FALLEN"
 pose_key = :fallen
 when "2H", "2H SWING"
 pose_key = :swing2h
 when "1H", "1H SWING"
 pose_key = :swing1h
 when "2H REVERSE", "2H SWING REVERSE"
 pose_key = :r2hswing
 reverse_pose = true
 when "1H REVERSE", "1H SWING REVERSE"
 pose_key = :r1hswing
 reverse_pose = true
 when "CAST", "INVOKE", "ITEM", "MAGIC"
 pose_key = :cast
 when "CHANT", "CHANNEL", "CHARGE"
 pose_key = :channeling
 else; return
 end
 #---
 return unless $imported["BattleSymphony-8D"]
 #---
 targets.each { |target|
 next unless target.exist?
 next unless target.use_8d?
 target.pose = pose_key
 target.force_pose = true
 target.reverse_pose = reverse_pose
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: action_stance
 #--------------------------------------------------------------------------
 def action_stance
 targets = get_action_targets
 return unless targets.size > 0
 #---
 case @action_values[1]
 when "BREAK", "CANCEL", "RESET", "NORMAL"
 targets.each { |target| target.break_pose }
 return
 when "IDLE", "READY"
 pose_key = :idle
 when "DAMAGE", "DMG", "STRUCK"
 pose_key = :struck
 when "PIYORI", "CRITICAL", "DAZED", "DAZE", "DIZZY", "WOOZY"
 pose_key = :woozy
 when "VICTORY"
 pose_key = :victory
 when "EVADE", "DODGE", "DEFEND"
 pose_key = :defend
 when "DOWN", "DOWNED", "FALLEN", "DEAD"
 pose_key = :dead
 when "SWING", "ATTACK", "SLASH"
 pose_key = :attack
 when "CAST", "INVOKE", "MAGIC"
 pose_key = :magic
 when "ITEM"
 pose_key = :item
 when "SKILL", "PHYSICAL"
 pose_key = :skill
 when "FORWARD", "MOVE", "TARGET"
 pose_key = :advance
 when "ORIGIN", "BACK", "RETREAT"
 pose_key = :retreat
 else; return
 end
 #---
 return unless $imported["BattleSymphony-HB"]
 #---
 targets.each { |target|
 next unless target.exist?
 next unless target.use_hb?
 target.pose = pose_key
 target.force_pose = true
 }
 end
 
 #--------------------------------------------------------------------------
 # action_wait
 #--------------------------------------------------------------------------
 def action_wait
 case @action
 when "WAIT FOR ANIMATION"
 wait_for_animation
 return
 when "WAIT FOR MOVE", "WAIT FOR MOVEMENT"
 wait_for_move
 return
 end
 frames = @action_values[0].to_i
 frames *= $imported["YEA-CoreEngine"] ? YEA::CORE::ANIMATION_RATE : 4 if @action == "ANI WAIT"
 skip = @action_values.include?("SKIP")
 skip = true if @action == "WAIT SKIP"
 skip ? wait(frames) : abs_wait(frames)
 end
 
 end # Scene_Battle
 
 #==============================================================================
 # Section V. Imports Symphony Tags (S-05)
 # -----------------------------------------------------------------------------
 # This section is the field for You to create your own Symphony Tags. Please
 # read carefully the Tutorial at Creating Symphony Tags before touching this.
 #==============================================================================
 #==============================================================================
 # ■ Scene_Battle - Imported Symphony Configuration
 #==============================================================================
 class Scene_Battle < Scene_Base
 
 #--------------------------------------------------------------------------
 # new method: imported_symphony
 #--------------------------------------------------------------------------
 def imported_symphony
 case @action.upcase
 
 #--- Start Importing ---
 
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 # sample symphony
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 # This is the most basic sample, it will put a line which contains
 # action name and action values in Console.
 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 when /SAMPLE SYMPHONY/i
 action_sample_symphony
 
 #--- End Importing ---
 else
 if SYMPHONY::AUTO_SYMPHONY.include?(@action.upcase)
 @action_values = [@action.upcase]
 @action = "AUTO SYMPHONY"
 action_autosymphony
 end
 end
 end
 
 end # Scene_Battle
 #==============================================================================
 # ■ Scene_Battle - Imported Symphony Actions
 #==============================================================================
 class Scene_Battle < Scene_Base
 
 #--------------------------------------------------------------------------
 # new method: action_sample_symphony
 #--------------------------------------------------------------------------
 def action_sample_symphony
 str = "#{@action.upcase}: "
 @action_values.each {|value| str += "#{value} "}
 puts str
 end
 
 end # Scene_Battle
 
 #==============================================================================
 # Section VI. Sprites Initialization (S-06)
 # -----------------------------------------------------------------------------
 # This section is the first section of core script. It will Initializes and
 # Creates Sprites for all Battlers and Maintains them.
 # -----------------------------------------------------------------------------
 # Do not touch below script unless You know what You do and How it works.
 #==============================================================================
 #==============================================================================
 # ■ Game_Battler
 #==============================================================================
 
 class Game_Battler < Game_BattlerBase
 
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :origin_x
 attr_accessor :origin_y
 attr_accessor :screen_x
 attr_accessor :screen_y
 attr_accessor :pose
 attr_accessor :immortal
 attr_accessor :icons
 attr_accessor :direction
 attr_accessor :force_pose
 attr_accessor :reverse_pose
 
 #--------------------------------------------------------------------------
 # alias method: initialize
 #--------------------------------------------------------------------------
 alias bes_initialize initialize
 def initialize
 bes_initialize
 @screen_x = 0
 @screen_y = 0
 #---
 @move_x_rate = 0
 @move_y_rate = 0
 #---
 @immortal = false
 #---
 @icons = {}
 @force_pose = false
 @reverse_pose = false
 #---
 @hp = 1 # Fix Change Party in Battle.
 #---
 @arc = 0
 @parabola = {}
 @f = 0
 @arc_y = 0
 end
 
 #--------------------------------------------------------------------------
 # new method: use_charset?
 #--------------------------------------------------------------------------
 def use_charset?
 return false
 end
 
 #--------------------------------------------------------------------------
 # new method: emptyview?
 #--------------------------------------------------------------------------
 def emptyview?
 return SYMPHONY::View::EMPTY_VIEW
 end
 
 #--------------------------------------------------------------------------
 # new method: battler
 #--------------------------------------------------------------------------
 def battler
 self.actor? ? self.actor : self.enemy
 end
 
 #--------------------------------------------------------------------------
 # new method: use_custom_charset?
 #--------------------------------------------------------------------------
 def use_custom_charset?
 if $imported["BattleSymphony-8D"]; return true if use_8d?; end
 if $imported["BattleSymphony-HB"]; return true if use_hb?; end
 return false
 end
 
 #--------------------------------------------------------------------------
 # new method: screen_z
 #--------------------------------------------------------------------------
 def screen_z
 return 100
 end
 
 #--------------------------------------------------------------------------
 # alias method: on_battle_start
 #--------------------------------------------------------------------------
 alias bes_on_battle_start on_battle_start
 def on_battle_start
 reset_position
 #---
 bes_on_battle_start
 #---
 return if self.actor? && !$game_party.battle_members.include?(self)
 set_default_position
 end
 
 #--------------------------------------------------------------------------
 # new method: set_default_position
 #--------------------------------------------------------------------------
 def set_default_position
 @move_rate_x = 0
 @move_rate_y = 0
 #---
 @destination_x = self.screen_x
 @destination_y = self.screen_y
 end
 
 #--------------------------------------------------------------------------
 # new method: correct_origin_position
 #--------------------------------------------------------------------------
 def correct_origin_position
 # Compatible
 end
 
 #--------------------------------------------------------------------------
 # new method: reset_position
 #--------------------------------------------------------------------------
 def reset_position
 break_pose
 end
 
 #--------------------------------------------------------------------------
 # new method: break_pose
 #--------------------------------------------------------------------------
 def break_pose
 @direction = SYMPHONY::View::PARTY_DIRECTION
 @direction = Direction.opposite(@direction) if self.enemy?
 #---
 @pose = Direction.pose(@direction)
 #---
 @force_pose = false
 @reverse_pose = false
 end
 
 #--------------------------------------------------------------------------
 # new method: pose=
 #--------------------------------------------------------------------------
 def pose=(pose)
 @pose = pose
 return if self.actor? && !$game_party.battle_members.include?(self)
 self.sprite.correct_change_pose if SceneManager.scene.spriteset
 end
 
 #--------------------------------------------------------------------------
 # new method: can_collapse?
 #--------------------------------------------------------------------------
 def can_collapse?
 return false unless dead?
 unless actor?
 return false unless sprite.battler_visible
 array = [:collapse, :boss_collapse, :instant_collapse]
 return false if array.include?(sprite.effect_type)
 end
 return true
 end
 
 #--------------------------------------------------------------------------
 # new method: weapons
 #--------------------------------------------------------------------------
 def weapons
 return []
 end
 
 #--------------------------------------------------------------------------
 # new method: equips
 #--------------------------------------------------------------------------
 def equips
 return []
 end
 
 #--------------------------------------------------------------------------
 # alias method: add_state
 #--------------------------------------------------------------------------
 alias bes_add_state add_state
 def add_state(state_id)
 bes_add_state(state_id)
 #--- Fix Death pose ---
 return unless SceneManager.scene_is?(Scene_Battle)
 break_pose if state_id == death_state_id
 end
 
 end # Game_Battler
 
 #==============================================================================
 # ■ Game_Actor
 #==============================================================================
 
 class Game_Actor < Game_Battler
 
 #--------------------------------------------------------------------------
 # overwrite method: use_sprite?
 #--------------------------------------------------------------------------
 def use_sprite?
 return true
 end
 
 #--------------------------------------------------------------------------
 # new method: use_charset?
 #--------------------------------------------------------------------------
 def use_charset?
 return true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_default_position
 #--------------------------------------------------------------------------
 def set_default_position
 super
 return if @origin_x && @origin_y
 return unless $game_party.battle_members.include?(self)
 @origin_x = @screen_x = @destination_x = SYMPHONY::View::ACTORS_POSITION[index][0]
 @origin_y = @screen_y = @destination_y = SYMPHONY::View::ACTORS_POSITION[index][1]
 return unless emptyview?
 @origin_x = @screen_x = @destination_x = self.screen_x
 @origin_y = @screen_y = @destination_y = self.screen_y
 end
 
 #--------------------------------------------------------------------------
 # new method: reset_position
 #--------------------------------------------------------------------------
 def reset_position
 super
 @origin_x = @origin_y = nil
 end
 
 #--------------------------------------------------------------------------
 # alias method: screen_x
 #--------------------------------------------------------------------------
 alias bes_screen_x screen_x
 def screen_x
 emptyview? ? bes_screen_x : @screen_x
 end
 
 #--------------------------------------------------------------------------
 # alias method: screen_y
 #--------------------------------------------------------------------------
 alias bes_screen_y screen_y
 def screen_y
 emptyview? ? bes_screen_y : @screen_y
 end
 
 #--------------------------------------------------------------------------
 # new method: correct_origin_position
 #--------------------------------------------------------------------------
 def correct_origin_position
 return if @origin_x && @origin_y
 @origin_x = @screen_x = SYMPHONY::View::ACTORS_POSITION[index][0]
 @origin_y = @screen_y = SYMPHONY::View::ACTORS_POSITION[index][1]
 return unless emptyview?
 @origin_x = @screen_x = @destination_x = self.screen_x
 @origin_y = @screen_y = @destination_y = self.screen_y
 end
 
 #--------------------------------------------------------------------------
 # new method: sprite
 #--------------------------------------------------------------------------
 def sprite
 index = $game_party.battle_members.index(self)
 return nil unless index
 return nil unless SceneManager.scene_is?(Scene_Battle)
 return SceneManager.scene.spriteset.actor_sprites[index]
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: perform_collapse_effect
 #--------------------------------------------------------------------------
 def perform_collapse_effect
 if $game_party.in_battle
 @sprite_effect_type = :collapse unless self.use_custom_charset?
 Sound.play_actor_collapse
 end
 end
 
 end # Game_Actor
 
 #==============================================================================
 # ■ Game_Enemy
 #==============================================================================
 
 class Game_Enemy < Game_Battler
 
 #--------------------------------------------------------------------------
 # new method: correct_origin_position
 #--------------------------------------------------------------------------
 def correct_origin_position
 @origin_x ||= @screen_x
 @origin_y ||= @screen_y
 end
 
 #--------------------------------------------------------------------------
 # new method: use_charset?
 #--------------------------------------------------------------------------
 def use_charset?
 return super
 end
 
 #--------------------------------------------------------------------------
 # new method: sprite
 #--------------------------------------------------------------------------
 def sprite
 return nil unless SceneManager.scene_is?(Scene_Battle)
 return SceneManager.scene.spriteset.enemy_sprites.reverse[self.index]
 end
 
 #--------------------------------------------------------------------------
 # new method: atk_animation_id1
 #--------------------------------------------------------------------------
 def atk_animation_id1
 return enemy.atk_animation_id1
 end
 
 #--------------------------------------------------------------------------
 # new method: atk_animation_id2
 #--------------------------------------------------------------------------
 def atk_animation_id2
 return enemy.atk_animation_id2
 end
 
 end # Game_Enemy
 
 #==============================================================================
 # ■ Sprite_Battler
 #==============================================================================
 
 class Sprite_Battler < Sprite_Base
 
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :effect_type
 attr_accessor :battler_visible
 
 #--------------------------------------------------------------------------
 # new method: pose
 #--------------------------------------------------------------------------
 alias bes_initialize initialize
 def initialize(viewport, battler = nil)
 bes_initialize(viewport, battler)
 correct_change_pose if @battler
 #---
 self.visible = false if SYMPHONY::View::EMPTY_VIEW && (@battler.nil? || @battler.actor?)
 #---
 return if SYMPHONY::View::EMPTY_VIEW
 #---
 return unless SYMPHONY::Visual::BATTLER_SHADOW
 #---
 @charset_shadow = Sprite.new(viewport)
 @charset_shadow.bitmap = Cache.system("Shadow")
 @charset_shadow.ox = @charset_shadow.width / 2
 @charset_shadow.oy = @charset_shadow.height
 end
 
 #--------------------------------------------------------------------------
 # new method: pose
 #--------------------------------------------------------------------------
 def pose
 @battler.pose
 end
 
 #--------------------------------------------------------------------------
 # alias method: update
 #--------------------------------------------------------------------------
 alias bes_update update
 def update
 bes_update
 #---
 return if SYMPHONY::View::EMPTY_VIEW
 #---
 return unless SYMPHONY::Visual::BATTLER_SHADOW
 #---
 @charset_shadow.opacity = self.opacity
 @charset_shadow.visible = self.visible
 @charset_shadow.x = self.x + (self.mirror ? 0 : - 2)
 @charset_shadow.y = self.y + 2
 @charset_shadow.z = self.z - 1
 #---
 @charset_shadow.opacity = 0 if @battler.nil?
 end
 
 #--------------------------------------------------------------------------
 # alias method: update_bitmap
 #--------------------------------------------------------------------------
 alias bes_update_bitmap update_bitmap
 def update_bitmap
 correct_change_pose if @timer.nil?
 @battler.use_charset? ? update_charset : bes_update_bitmap
 end
 
 #--------------------------------------------------------------------------
 # alias method: update_origin
 #--------------------------------------------------------------------------
 alias bes_update_origin update_origin
 def update_origin
 @battler.update_visual
 @battler.use_charset? ? update_charset_origin : bes_update_origin
 end
 
 #--------------------------------------------------------------------------
 # new method: update_charset
 #--------------------------------------------------------------------------
 def update_charset
 @battler.set_default_position unless pose
 #---
 update_charset_bitmap
 update_src_rect
 end
 
 #--------------------------------------------------------------------------
 # new method: correct_change_pose
 #--------------------------------------------------------------------------
 def correct_change_pose
 @pattern = 1
 @timer = 15
 @back_step = false
 @last_pose = pose
 end
 
 #--------------------------------------------------------------------------
 # new method: update_charset_origin
 #--------------------------------------------------------------------------
 def update_charset_origin
 if bitmap
 self.ox = @cw / 2
 self.oy = @ch
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: graphic_changed?
 #--------------------------------------------------------------------------
 def graphic_changed?
 self.bitmap.nil? || @character_name != @battler.character_name ||
 @character_index != @battler.character_index
 end
 
 #--------------------------------------------------------------------------
 # new method: set_character_bitmap
 #--------------------------------------------------------------------------
 def set_character_bitmap
 self.bitmap = Cache.character(@character_name)
 sign = @character_name[/^[\!\$]./]
 if sign && sign.include?('$')
 @cw = bitmap.width / 3
 @ch = bitmap.height / 4
 else
 @cw = bitmap.width / 12
 @ch = bitmap.height / 8
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: update_charset_bitmap
 #--------------------------------------------------------------------------
 def update_charset_bitmap
 if graphic_changed?
 @character_name = @battler.character_name
 @character_index = @battler.character_index
 set_character_bitmap
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: update_src_rect
 #--------------------------------------------------------------------------
 def update_src_rect
 @timer -= 1
 if @battler.force_pose
 array = []
 array = Direction.index_8d(pose) if $imported["BattleSymphony-8D"] && @battler.use_8d?
 if [email protected]_pose && @pattern < 2 && @timer <= 0
 @pattern += 1
 @timer = array[2].nil? ? 15 : array[2]
 elsif @battler.reverse_pose && @pattern > 0 && @timer <= 0
 @pattern -= 1
 @timer = array[2].nil? ? 15 : array[2]
 end
 else
 #--- Quick Fix
 @pattern = 2 if @pattern > 2
 @pattern = 0 if @pattern < 0
 #--- End
 if @timer <= 0
 @pattern += @back_step ? -1 : 1
 @back_step = true if @pattern >= 2
 @back_step = false if @pattern <= 0
 @timer = 15
 end
 end
 #---
 @battler.break_pose unless pose
 direction = Direction.direction(pose)
 character_index = @character_index
 #---
 if $imported["BattleSymphony-8D"] && @battler.use_8d?
 array = Direction.index_8d(pose)
 character_index = array[0]
 direction = array[1]
 end
 sx = (character_index % 4 * 3 + @pattern) * @cw
 sy = (character_index / 4 * 4 + (direction - 2) / 2) * @ch
 self.src_rect.set(sx, sy, @cw, @ch)
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: revert_to_normal
 #--------------------------------------------------------------------------
 def revert_to_normal
 self.blend_type = 0
 self.color.set(0, 0, 0, 0)
 self.opacity = 255
 end
 
 #--------------------------------------------------------------------------
 # alias method: animation_set_sprites
 # Make Animation Opacity independent of Sprite Opacity
 #--------------------------------------------------------------------------
 alias bes_animation_set_sprites animation_set_sprites
 def animation_set_sprites(frame)
 bes_animation_set_sprites(frame)
 cell_data = frame.cell_data
 @ani_sprites.each_with_index do |sprite, i|
 next unless sprite
 pattern = cell_data[i, 0]
 if !pattern || pattern < 0
 sprite.visible = false
 next
 end
 sprite.opacity = cell_data[i, 6]
 end
 end
 
 end # Sprite_Battler
 
 #==============================================================================
 # ■ Spriteset_Battle
 #==============================================================================
 
 class Spriteset_Battle
 
 #--------------------------------------------------------------------------
 # public instance variables
 #--------------------------------------------------------------------------
 attr_accessor :actor_sprites
 attr_accessor :enemy_sprites
 
 #--------------------------------------------------------------------------
 # overwrite method: create_actors
 # Fixed Large Party.
 #--------------------------------------------------------------------------
 def create_actors
 max_members = $game_party.max_battle_members
 @actor_sprites = Array.new(max_members) { Sprite_Battler.new(@viewport1) }
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: update_actors
 # Fixed Change Party.
 #--------------------------------------------------------------------------
 def update_actors
 @actor_sprites.each_with_index do |sprite, i|
 party_member = $game_party.battle_members
 if party_member != sprite.battler
 sprite.battler = $game_party.battle_members
 #---
 if party_member
 party_member.reset_position
 party_member.correct_origin_position
 party_member.break_pose if party_member.dead?
 end
 sprite.init_visibility if sprite.battler && !sprite.battler.use_custom_charset?
 end
 sprite.update
 end
 end
 
 end # Spriteset_Battle
 
 #==============================================================================
 # Section VII. Icons Sprites Initialization (S-07)
 # -----------------------------------------------------------------------------
 # This section is the second section of core script. It will Initializes and
 # Creates Sprites for all Object like Weapons, Items and Maintains them.
 # -----------------------------------------------------------------------------
 # Do not touch below script unless You know what You do and How it works.
 #==============================================================================
 #==============================================================================
 # ■ Sprite_Object
 #==============================================================================
 
 class Sprite_Object < Sprite_Base
 
 #--------------------------------------------------------------------------
 # initialize
 #--------------------------------------------------------------------------
 def initialize(viewport = nil)
 super(viewport)
 #---
 @dest_angle = 0
 @dest_x = 0
 @dest_y = 0
 #---
 @angle_rate = 0
 @move_x_rate = 0
 @move_y_rate = 0
 @fade_rate = 0
 #---
 @arc = 0
 @parabola = {}
 @f = 0
 @arc_y = 0
 #---
 @battler = nil
 @offset_x = 0
 @offset_y = 0
 @offset_z = 0
 @attach_x = 0
 @attach_y = 0
 @attachment = :middle
 end
 
 #--------------------------------------------------------------------------
 # set_battler
 #--------------------------------------------------------------------------
 def set_battler(battler = nil)
 @battler = battler
 update
 end
 
 #--------------------------------------------------------------------------
 # set_position
 #--------------------------------------------------------------------------
 def set_position(x, y)
 @dest_x = self.x = x
 @dest_y = self.y = y
 end
 
 #--------------------------------------------------------------------------
 # set_angle
 #--------------------------------------------------------------------------
 def set_angle(angle)
 @dest_angle = self.angle = angle
 @dest_angle = self.angle = -angle if mirror_battler?
 end
 
 #--------------------------------------------------------------------------
 # set_icon
 #--------------------------------------------------------------------------
 def set_icon(index)
 return if index <= 0
 bitmap = Cache.system("Iconset")
 self.bitmap ||= bitmap
 self.src_rect.set(index % 16 * 24, index / 16 * 24, 24, 24)
 self.ox = self.oy = 12
 end
 
 #--------------------------------------------------------------------------
 # set_origin
 #--------------------------------------------------------------------------
 def set_origin(type)
 @offset_z = 2
 @attachment = type
 case type
 when :item
 self.ox = 12
 self.oy = 12
 @offset_y = [email protected]
 @offset_x = [email protected] / 2
 when :hand1
 self.ox = 24
 self.oy = 24
 @attach_y = [email protected]/3
 @attach_x = [email protected]/5
 when :hand2
 self.ox = 24
 self.oy = 24
 @attach_y = [email protected]/3
 @attach_x = @battler.sprite.width/5
 when :middle
 self.ox = 12
 self.oy = 12
 @offset_y = [email protected]/2
 when :top
 self.ox = 12
 self.oy = 24
 @offset_y = [email protected]
 when :base
 self.ox = 12
 self.oy = 24
 end
 self.y = @battler.screen_y + @attach_y + @offset_y + @arc_y
 end
 
 #--------------------------------------------------------------------------
 # set_fade
 #--------------------------------------------------------------------------
 def set_fade(rate)
 @fade_rate = rate
 end
 
 #--------------------------------------------------------------------------
 # create_angle
 #--------------------------------------------------------------------------
 def create_angle(angle, frames = 8)
 return if angle == self.angle
 @dest_angle = angle
 @dest_angle = - @dest_angle if mirror_battler?
 frames = [frames, 1].max
 @angle_rate = [(self.angle - @dest_angle).abs / frames, 2].max
 end
 
 #--------------------------------------------------------------------------
 # create_arc
 #--------------------------------------------------------------------------
 def create_arc(arc)
 @arc = arc
 @parabola[:x] = 0
 @parabola[:y0] = 0
 @parabola[:y1] = @dest_y - self.y
 @parabola[:h]  = - (@parabola[:y0] + @arc * 5)
 @parabola[:d]  = (self.x - @dest_x).abs
 end
 
 #--------------------------------------------------------------------------
 # create_movement
 #--------------------------------------------------------------------------
 def create_movement(destination_x, destination_y, frames = 12)
 return if self.x == destination_x && self.y == destination_y
 @arc = 0
 @dest_x = destination_x
 @dest_y = destination_y
 frames = [frames, 1].max
 @f = frames.to_f / 2
 @move_x_rate = [(self.x - @dest_x).abs / frames, 2].max
 @move_y_rate = [(self.y - @dest_y).abs / frames, 2].max
 end
 
 #--------------------------------------------------------------------------
 # create_move_direction
 #--------------------------------------------------------------------------
 def create_move_direction(direction, distance, frames = 12)
 case direction
 when 1; move_x = distance / -2; move_y = distance /  2
 when 2; move_x = distance *  0; move_y = distance *  1
 when 3; move_x = distance / -2; move_y = distance /  2
 when 4; move_x = distance * -1; move_y = distance *  0
 when 6; move_x = distance *  1; move_y = distance *  0
 when 7; move_x = distance / -2; move_y = distance / -2
 when 8; move_x = distance *  0; move_y = distance * -1
 when 9; move_x = distance /  2; move_y = distance / -2
 else; return
 end
 #---
 move_x += self.x
 move_y += self.y
 #---
 create_movement(move_x, move_y, frames)
 end
 
 #--------------------------------------------------------------------------
 # update
 #--------------------------------------------------------------------------
 def update
 super
 update_angle
 @arc == 0 ? update_movement : update_arc
 update_position
 update_opacity
 end
 
 #--------------------------------------------------------------------------
 # update_angle
 #--------------------------------------------------------------------------
 def update_angle
 return if @angle_rate == 0
 @angle_rate = 0 if self.angle == @dest_angle
 value = [(self.angle - @dest_angle).abs, @angle_rate].min
 self.angle += (@dest_angle > self.angle) ? value : -value
 end
 
 #--------------------------------------------------------------------------
 # update_arc
 #--------------------------------------------------------------------------
 def update_arc
 return unless [@move_x_rate, @move_y_rate].any? { |x| x != 0 }
 #---
 value = [(self.x - @dest_x).abs, @move_x_rate].min
 @offset_x += (@dest_x > self.x) ? value : -value
 @parabola[:x] += value
 #---
 if @dest_x == self.x
 self.y = @dest_y
 else
 a = (2*(@parabola[:y0]+@parabola[:y1])-4*@parabola[:h])/(@parabola[:d]**2)
 b = (@parabola[:y1]-@parabola[:y0]-a*(@parabola[:d]**2))/@parabola[:d]
 @arc_y = a * @parabola[:x] * @parabola[:x] + b * @parabola[:x] + @parabola[:y0]
 end
 #---
 @move_x_rate = 0 if self.x == @dest_x
 @move_y_rate = 0 if self.y == @dest_y
 end
 
 #--------------------------------------------------------------------------
 # update_movement
 #--------------------------------------------------------------------------
 def update_movement
 return unless [@move_x_rate, @move_y_rate].any? { |x| x != 0 }
 @move_x_rate = 0 if self.x == @dest_x
 @move_y_rate = 0 if self.y == @dest_y
 value = [(self.x - @dest_x).abs, @move_x_rate].min
 @offset_x += (@dest_x > self.x) ? value : -value
 value = [(self.y - @dest_y).abs, @move_y_rate].min
 @offset_y += (@dest_y > self.y) ? value : -value
 end
 
 #--------------------------------------------------------------------------
 # update_position
 #--------------------------------------------------------------------------
 def update_position
 if @battler != nil
 self.mirror = mirror_battler?
 update_attachment(self.mirror)
 attach_x = self.mirror ? -@attach_x : @attach_x
 self.x = @battler.screen_x + attach_x + @offset_x
 self.y = @battler.screen_y + @attach_y + @offset_y + @arc_y
 self.z = @battler.screen_z + @offset_z
 else
 self.x = @offset_x
 self.y = @offset_y
 self.z = @offset_z
 end
 end
 
 #--------------------------------------------------------------------------
 # update_attachment
 #--------------------------------------------------------------------------
 def update_attachment(mirror = false)
 case @attachment
 when :hand1
 self.ox = mirror ? 0 : 24
 self.oy = 24
 @attach_y = [email protected]/3
 @attach_x = [email protected]/5
 when :hand2
 self.ox = mirror ? 0 : 24
 self.oy = 24
 @attach_y = [email protected]/3
 @attach_x = @battler.sprite.width/5
 else
 @attach_x = 0
 @attach_y = 0
 end
 end
 
 #--------------------------------------------------------------------------
 # update_attachment
 #--------------------------------------------------------------------------
 def update_opacity
 self.opacity += @fade_rate
 end
 
 #--------------------------------------------------------------------------
 # mirror_battler?
 #--------------------------------------------------------------------------
 def mirror_battler?
 return false if @battler.sprite == nil
 direction = Direction.direction(@battler.pose)
 return true if [9, 6, 3].include?(direction)
 return true if @battler.sprite.mirror
 return false
 end
 
 #--------------------------------------------------------------------------
 # effecting?
 #--------------------------------------------------------------------------
 def effecting?
 [@angle_rate,@move_y_rate,@move_x_rate,@fade_rate].any? { |x| x > 0 }
 end
 
 end # Sprite_Object
 
 #==============================================================================
 # Section VIII. Core Script (S-08)
 # -----------------------------------------------------------------------------
 # This section is the most important section of Core SCript. It will Initialize
 # Database as well as Symphony Tags and put them in actions.
 # -----------------------------------------------------------------------------
 # Do not touch below script unless You know what You do and How it works.
 #==============================================================================
 #==============================================================================
 # ■ Regular Expression
 #==============================================================================
 
 module REGEXP
 module SYMPHONY
 SETUP_ANI_ON   = /<(?:SETUP_ACTION|setup action|setup)>/i
 SETUP_ANI_OFF  = /<\/(?:SETUP_ACTION|setup action|setup)>/i
 WHOLE_ANI_ON   = /<(?:WHOLE_ACTION|whole action|whole)>/i
 WHOLE_ANI_OFF  = /<\/(?:WHOLE_ACTION|whole action|whole)>/i
 TARGET_ANI_ON  = /<(?:TARGET_ACTION|target action|target)>/i
 TARGET_ANI_OFF = /<\/(?:TARGET_ACTION|target action|target)>/i
 FOLLOW_ANI_ON  = /<(?:FOLLOW_ACTION|follow action|follow)>/i
 FOLLOW_ANI_OFF = /<\/(?:FOLLOW_ACTION|follow action|follow)>/i
 FINISH_ANI_ON  = /<(?:FINISH_ACTION|finish action|finish)>/i
 FINISH_ANI_OFF = /<\/(?:FINISH_ACTION|finish action|finish)>/i
 
 SYMPHONY_TAG_NONE = /[ ]*(.*)/i
 SYMPHONY_TAG_VALUES = /[ ]*(.*):[ ]*(.*)/i
 
 ATK_ANI1 = /<(?:ATK_ANI_1|atk ani 1):[ ]*(\d+)>/i
 ATK_ANI2 = /<(?:ATK_ANI_2|atk ani 2):[ ]*(\d+)>/i
 
 end
 end
 
 # Scan values: /\w+[\s*\w+]*/i
 
 #==============================================================================
 # ■ DataManager
 #==============================================================================
 
 module DataManager
 
 #--------------------------------------------------------------------------
 # alias method: load_database
 #--------------------------------------------------------------------------
 class <<self; alias load_database_bes load_database; end
 def self.load_database
 load_database_bes
 load_notetags_bes
 end
 
 #--------------------------------------------------------------------------
 # new method: load_notetags_bes
 #--------------------------------------------------------------------------
 def self.load_notetags_bes
 groups = [$data_skills, $data_items, $data_weapons, $data_enemies]
 groups.each { |group|
 group.each { |obj|
 next if obj.nil?
 obj.battle_symphony_initialize
 }
 }
 end
 
 end # DataManager
 
 #==============================================================================
 # ■ RPG::BaseItem
 #==============================================================================
 
 class RPG::BaseItem
 
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_accessor :setup_actions_list
 attr_accessor :whole_actions_list
 attr_accessor :target_actions_list
 attr_accessor :follow_actions_list
 attr_accessor :finish_actions_list
 attr_accessor :atk_animation_id1
 attr_accessor :atk_animation_id2
 
 #--------------------------------------------------------------------------
 # new method: battle_symphony_initialize
 #--------------------------------------------------------------------------
 def battle_symphony_initialize
 create_default_animation
 create_default_symphony
 create_tags_symphony
 end
 
 #--------------------------------------------------------------------------
 # new method: create_default_animation
 #--------------------------------------------------------------------------
 def create_default_animation
 @atk_animation_id1 = SYMPHONY::Visual::ENEMY_ATTACK_ANIMATION
 @atk_animation_id2 = 0
 self.note.split(/[\r\n]+/).each { |line|
 case line
 when REGEXP::SYMPHONY::ATK_ANI1
 @atk_animation_id1 = $1.to_i
 when REGEXP::SYMPHONY::ATK_ANI2
 @atk_animation_id2 = $1.to_i
 end
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: create_default_symphony
 #--------------------------------------------------------------------------
 def create_default_symphony
 @setup_actions_list = []; @finish_actions_list = []
 @whole_actions_list = []; @target_actions_list = []
 @follow_actions_list = []
 #---
 if self.is_a?(RPG::Skill) and !self.physical?
 @setup_actions_list = SYMPHONY::DEFAULT_ACTIONS::MAGIC_SETUP
 @whole_actions_list = SYMPHONY::DEFAULT_ACTIONS::MAGIC_WHOLE
 @target_actions_list = SYMPHONY::DEFAULT_ACTIONS::MAGIC_TARGET
 @follow_actions_list = SYMPHONY::DEFAULT_ACTIONS::MAGIC_FOLLOW
 @finish_actions_list = SYMPHONY::DEFAULT_ACTIONS::MAGIC_FINISH
 return
 elsif self.is_a?(RPG::Skill) and self.physical?
 @setup_actions_list = SYMPHONY::DEFAULT_ACTIONS::PHYSICAL_SETUP
 @whole_actions_list = SYMPHONY::DEFAULT_ACTIONS::PHYSICAL_WHOLE
 @target_actions_list = SYMPHONY::DEFAULT_ACTIONS::PHYSICAL_TARGET
 @follow_actions_list = SYMPHONY::DEFAULT_ACTIONS::PHYSICAL_FOLLOW
 @finish_actions_list = SYMPHONY::DEFAULT_ACTIONS::PHYSICAL_FINISH
 return
 elsif self.is_a?(RPG::Item)
 @setup_actions_list = SYMPHONY::DEFAULT_ACTIONS::ITEM_SETUP
 @whole_actions_list = SYMPHONY::DEFAULT_ACTIONS::ITEM_WHOLE
 @target_actions_list = SYMPHONY::DEFAULT_ACTIONS::ITEM_TARGET
 @follow_actions_list = SYMPHONY::DEFAULT_ACTIONS::ITEM_FOLLOW
 @finish_actions_list = SYMPHONY::DEFAULT_ACTIONS::ITEM_FINISH
 return
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: create_tags_symphony
 #--------------------------------------------------------------------------
 def create_tags_symphony
 self.note.split(/[\r\n]+/).each { |line|
 case line
 when REGEXP::SYMPHONY::SETUP_ANI_ON
 @symphony_tag = true
 @setup_actions_list = []
 @setup_action_flag = true
 when REGEXP::SYMPHONY::SETUP_ANI_OFF
 @symphony_tag = false
 @setup_action_flag = false
 when REGEXP::SYMPHONY::WHOLE_ANI_ON
 @symphony_tag = true
 @whole_actions_list = []
 @whole_action_flag = true
 when REGEXP::SYMPHONY::WHOLE_ANI_OFF
 @symphony_tag = false
 @whole_action_flag = false
 when REGEXP::SYMPHONY::TARGET_ANI_ON
 @symphony_tag = true
 @target_actions_list = []
 @target_action_flag = true
 when REGEXP::SYMPHONY::TARGET_ANI_OFF
 @symphony_tag = false
 @target_action_flag = false
 when REGEXP::SYMPHONY::FOLLOW_ANI_ON
 @symphony_tag = true
 @follow_actions_list = []
 @follow_action_flag = true
 when REGEXP::SYMPHONY::FOLLOW_ANI_OFF
 @symphony_tag = false
 @follow_action_flag = false
 when REGEXP::SYMPHONY::FINISH_ANI_ON
 @symphony_tag = true
 @finish_actions_list = []
 @finish_action_flag = true
 when REGEXP::SYMPHONY::FINISH_ANI_OFF
 @symphony_tag = false
 @finish_action_flag = false
 #---
 else
 next unless @symphony_tag
 case line
 when REGEXP::SYMPHONY::SYMPHONY_TAG_VALUES
 action = $1
 value = $2.scan(/[^, ]+[^,]*/i)
 when REGEXP::SYMPHONY::SYMPHONY_TAG_NONE
 action = $1
 value = [nil]
 else; next
 end
 array = [action, value]
 if @setup_action_flag
 @setup_actions_list.push(array)
 elsif @whole_action_flag
 @whole_actions_list.push(array)
 elsif @target_action_flag
 @target_actions_list.push(array)
 elsif @follow_action_flag
 @follow_actions_list.push(array)
 elsif @finish_action_flag
 @finish_actions_list.push(array)
 end
 end
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: valid_actions?
 #--------------------------------------------------------------------------
 def valid_actions?(phase)
 case phase
 when :setup
 return @setup_actions_list.size > 0
 when :whole
 return @whole_actions_list.size > 0
 when :target
 return @target_actions_list.size > 0
 when :follow
 return @follow_actions_list.size > 0
 when :finish
 return @finish_actions_list.size > 0
 end
 end
 
 end # RPG::BaseItem
 
 #==============================================================================
 # ■ Direction
 #==============================================================================
 
 module Direction
 
 #--------------------------------------------------------------------------
 # self.pose
 #--------------------------------------------------------------------------
 def self.pose(direction)
 case direction
 when 4; return :left
 when 6; return :right
 when 8; return :up
 when 2; return :down
 when 7; return :left
 when 1; return :left
 when 9; return :right
 when 3; return :right
 end
 end
 
 #--------------------------------------------------------------------------
 # self.non8d_pose
 #--------------------------------------------------------------------------
 def self.non8d_pose(pose)
 case pose
 when :down_l; return :left
 when :down_r; return :right
 when :up_l; return :left
 when :up_r; return :right
 end
 end
 
 #--------------------------------------------------------------------------
 # self.pose
 #--------------------------------------------------------------------------
 def self.direction(pose)
 case pose
 when :left; return 4
 when :right; return 6
 when :up; return 8
 when :down; return 2
 end
 end
 
 #--------------------------------------------------------------------------
 # self.opposite
 #--------------------------------------------------------------------------
 def self.opposite(direction)
 case direction
 when 1; return 9
 when 2; return 8
 when 3; return 7
 when 4; return 6
 when 6; return 4
 when 7; return 3
 when 8; return 2
 when 9; return 1
 else; return direction
 end
 end
 
 #--------------------------------------------------------------------------
 # self.face_coordinate
 #--------------------------------------------------------------------------
 def self.face_coordinate(screen_x, screen_y, destination_x, destination_y)
 x1 = Integer(screen_x)
 x2 = Integer(destination_x)
 y1 = Graphics.height - Integer(screen_y)
 y2 = Graphics.height - Integer(destination_y)
 return if x1 == x2 and y1 == y2
 #---
 angle = Integer(Math.atan2((y2-y1),(x2-x1)) * 1800 / Math::PI)
 if (0..225) === angle or (-225..0) === angle
 direction = 6
 elsif (226..675) === angle
 direction = 9
 elsif (676..1125) === angle
 direction = 8
 elsif (1126..1575) === angle
 direction = 7
 elsif (1576..1800) === angle or (-1800..-1576) === angle
 direction = 4
 elsif (-1575..-1126) === angle
 direction = 1
 elsif (-1125..-676) === angle
 direction = 2
 elsif (-675..-226) === angle
 direction = 3
 end
 return direction
 end
 
 end # Direction
 
 #==============================================================================
 # ■ Game_ActionResult
 #==============================================================================
 
 class Game_ActionResult
 
 #--------------------------------------------------------------------------
 # alias method: clear_hit_flags
 #--------------------------------------------------------------------------
 alias bes_clear_hit_flags clear_hit_flags
 def clear_hit_flags
 return unless @calc
 bes_clear_hit_flags
 @temp_missed = @temp_evaded = @temp_critical = nil
 end
 
 #--------------------------------------------------------------------------
 # new method: clear_bes_flag
 #--------------------------------------------------------------------------
 def clear_bes_flag
 @perfect_hit = false
 @calc = false
 @dmg = false
 @effect = false
 end
 
 #--------------------------------------------------------------------------
 # new method: clear_change_target
 #--------------------------------------------------------------------------
 def clear_change_target
 @check_counter = false
 @check_reflection = false
 end
 
 #--------------------------------------------------------------------------
 # new method: set_perfect
 #--------------------------------------------------------------------------
 def set_perfect
 @perfect_hit = true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_calc
 #--------------------------------------------------------------------------
 def set_calc
 @calc = true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_dmg
 #--------------------------------------------------------------------------
 def set_dmg
 @dmg = true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_effect
 #--------------------------------------------------------------------------
 def set_effect
 @effect = true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_counter
 #--------------------------------------------------------------------------
 def set_counter
 @check_counter = true
 end
 
 #--------------------------------------------------------------------------
 # new method: set_reflection
 #--------------------------------------------------------------------------
 def set_reflection
 @check_reflection = true
 end
 
 #--------------------------------------------------------------------------
 # new method: used=
 #--------------------------------------------------------------------------
 def evaded=(flag)
 @evaded = @temp_evaded.nil? ? flag : @temp_evaded
 end
 
 #--------------------------------------------------------------------------
 # new method: used=
 #--------------------------------------------------------------------------
 def critical=(flag)
 @critical = @temp_critical.nil? ? flag : @temp_critical
 end
 
 #--------------------------------------------------------------------------
 # new method: used=
 #--------------------------------------------------------------------------
 def misssed=(flag)
 @missed = @temp_missed.nil? ? flag : @temp_missed
 end
 
 #--------------------------------------------------------------------------
 # alias method: hit?
 #--------------------------------------------------------------------------
 alias bes_hit? hit?
 def hit?
 bes_hit? || (@used && @perfect_hit)
 end
 
 #--------------------------------------------------------------------------
 # new method: dmg?
 #--------------------------------------------------------------------------
 def dmg?
 @dmg || !SceneManager.scene_is?(Scene_Battle)
 end
 
 #--------------------------------------------------------------------------
 # new method: effect?
 #--------------------------------------------------------------------------
 def effect?
 @effect || !SceneManager.scene_is?(Scene_Battle)
 end
 
 #--------------------------------------------------------------------------
 # new method: has_damage?
 #--------------------------------------------------------------------------
 def has_damage?
 [@hp_damage, @mp_damage, @tp_damage].any? { |x| x > 0 }
 end
 
 #--------------------------------------------------------------------------
 # new method: check_counter?
 #--------------------------------------------------------------------------
 def check_counter?
 @check_counter
 end
 
 #--------------------------------------------------------------------------
 # new method: check_reflection?
 #--------------------------------------------------------------------------
 def check_reflection?
 @check_reflection
 end
 
 end # Game_ActionResult
 
 #==============================================================================
 # ■ Game_Battler
 #==============================================================================
 
 class Game_Battler < Game_BattlerBase
 
 #--------------------------------------------------------------------------
 # new method: backup_actions
 #--------------------------------------------------------------------------
 def backup_actions
 @backup_actions = @actions.dup if @actions
 end
 
 #--------------------------------------------------------------------------
 # new method: restore_actions
 #--------------------------------------------------------------------------
 def restore_actions
 @actions = @backup_actions.dup if @backup_actions
 @backup_actions.clear
 @backup_actions = nil
 end
 
 #--------------------------------------------------------------------------
 # alias method: item_cnt
 #--------------------------------------------------------------------------
 alias bes_item_cnt item_cnt
 def item_cnt(user, item)
 return 0 unless @result.check_counter?
 return bes_item_cnt(user, item)
 end
 
 #--------------------------------------------------------------------------
 # alias method: item_mrf
 #--------------------------------------------------------------------------
 alias bes_item_mrf item_mrf
 def item_mrf(user, item)
 return 0 unless @result.check_reflection?
 return 0 if @magic_reflection
 return bes_item_mrf(user, item)
 end
 
 #--------------------------------------------------------------------------
 # alias method: state_resist_set
 #--------------------------------------------------------------------------
 alias bes_state_resist_set state_resist_set
 def state_resist_set
 result = bes_state_resist_set
 result += [death_state_id] if @immortal
 result
 end
 
 #--------------------------------------------------------------------------
 # alias method: execute_damage
 #--------------------------------------------------------------------------
 alias bes_execute_damage execute_damage
 def execute_damage(user)
 return unless @result.dmg?
 bes_execute_damage(user)
 end
 
 #--------------------------------------------------------------------------
 # alias method: make_damage_value
 #--------------------------------------------------------------------------
 alias bes_make_damage_value make_damage_value
 def make_damage_value(user, item)
 return unless @result.dmg?
 bes_make_damage_value(user, item)
 end
 
 #--------------------------------------------------------------------------
 # alias method: item_effect_apply
 #--------------------------------------------------------------------------
 alias bes_item_effect_apply item_effect_apply
 def item_effect_apply(user, item, effect)
 return unless @result.effect?
 bes_item_effect_apply(user, item, effect)
 end
 
 #--------------------------------------------------------------------------
 # alias method: item_user_effect
 #--------------------------------------------------------------------------
 alias bes_item_user_effect item_user_effect
 def item_user_effect(user, item)
 return unless @result.effect?
 bes_item_user_effect(user, item)
 end
 
 #--------------------------------------------------------------------------
 # alias method: make_miss_popups
 #--------------------------------------------------------------------------
 if $imported["YEA-BattleEngine"]
 alias bes_make_miss_popups make_miss_popups
 def make_miss_popups(user, item)
 @result.restore_damage unless @result.effect?
 bes_make_miss_popups(user, item)
 unless @result.effect?
 @result.store_damage
 @result.clear_damage_values
 end
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: face_coordinate
 #--------------------------------------------------------------------------
 def face_coordinate(destination_x, destination_y)
 direction = Direction.face_coordinate(self.screen_x, self.screen_y, destination_x, destination_y)
 #direction = Direction.opposite(direction) if self.sprite.mirror
 @direction = direction
 return if $imported["BattleSymphony-HB"] && self.use_hb?
 return if SYMPHONY::Visual::DISABLE_AUTO_MOVE_POSE && self.use_custom_charset?
 @pose = Direction.pose(direction)
 end
 
 #--------------------------------------------------------------------------
 # new method: create_movement
 #--------------------------------------------------------------------------
 def create_movement(destination_x, destination_y, frames = 12)
 return if @screen_x == destination_x && @screen_y == destination_y
 @destination_x = destination_x
 @destination_y = destination_y
 frames = [frames, 1].max
 @f = frames.to_f / 2
 @move_x_rate = [(@screen_x - @destination_x).abs / frames, 2].max
 @move_y_rate = [(@screen_y - @destination_y).abs / frames, 2].max
 end
 
 #--------------------------------------------------------------------------
 # new method: create_jump
 #--------------------------------------------------------------------------
 def create_jump(arc)
 @arc = arc
 @parabola[:x] = 0
 @parabola[:y0] = 0
 @parabola[:y1] = @destination_y - @screen_y
 @parabola[:h]  = - (@parabola[:y0] + @arc * 5)
 @parabola[:d]  = (@screen_x - @destination_x).abs
 end
 
 #--------------------------------------------------------------------------
 # new method: create_icon
 #--------------------------------------------------------------------------
 def create_icon(symbol, icon_id = 0)
 delete_icon(symbol)
 #---
 icon = Sprite_Object.new(self.sprite.viewport)
 case symbol
 when :weapon1
 object = self.weapons[0]
 icon_id = object.nil? ? nil : object.icon_index
 when :weapon2
 object = dual_wield? ? self.weapons[1] : nil
 icon_id = object.nil? ? nil : object.icon_index
 when :shield
 object = dual_wield? ? nil : self.equips[1]
 icon_id = object.nil? ? nil : object.icon_index
 when :item
 object = self.current_action.item
 icon_id = object.nil? ? nil : object.icon_index
 else; end
 return if icon_id.nil? || icon_id <= 0
 icon.set_icon(icon_id)
 icon.set_battler(self)
 #---
 @icons[symbol] = icon
 end
 
 #--------------------------------------------------------------------------
 # new method: delete_icon
 #--------------------------------------------------------------------------
 def delete_icon(symbol)
 return unless @icons[symbol]
 @icons[symbol].dispose
 @icons.delete(symbol)
 end
 
 #--------------------------------------------------------------------------
 # new method: clear_icons
 #--------------------------------------------------------------------------
 def clear_icons
 @icons.each { |key, value|
 value.dispose
 @icons.delete(key)
 }
 end
 
 #--------------------------------------------------------------------------
 # new method: update_movement
 #--------------------------------------------------------------------------
 def update_movement
 return unless self.is_moving?
 @move_x_rate = 0 if @screen_x == @destination_x || @move_x_rate.nil?
 @move_y_rate = 0 if @screen_y == @destination_y || @move_y_rate.nil?
 value = [(@screen_x - @destination_x).abs, @move_x_rate].min
 @screen_x += (@destination_x > @screen_x) ? value : -value
 value = [(@screen_y - @destination_y).abs, @move_y_rate].min
 @screen_y += (@destination_y > @screen_y) ? value : -value
 end
 
 #--------------------------------------------------------------------------
 # new method: update_jump
 #--------------------------------------------------------------------------
 def update_jump
 return unless self.is_moving?
 #---
 value = [(@screen_x - @destination_x).abs, @move_x_rate].min
 @screen_x += (@destination_x > @screen_x) ? value : -value
 @parabola[:x] += value
 @screen_y -= @arc_y
 #---
 if @destination_x == @screen_x
 @screen_y = @destination_y
 @arc_y = 0
 @arc = 0
 else
 a = (2.0*(@parabola[:y0]+@parabola[:y1])-4*@parabola[:h])/(@parabola[:d]**2)
 b = (@parabola[:y1]-@parabola[:y0]-a*(@parabola[:d]**2))/@parabola[:d]
 @arc_y = a * @parabola[:x] * @parabola[:x] + b * @parabola[:x] + @parabola[:y0]
 end
 #---
 @screen_y += @arc_y
 @move_x_rate = 0 if @screen_x == @destination_x
 @move_y_rate = 0 if @screen_y == @destination_y
 end
 
 #--------------------------------------------------------------------------
 # new method: update_icons
 #--------------------------------------------------------------------------
 def update_icons
 @icons ||= {}
 @icons.each_value { |value| value.update }
 end
 
 #--------------------------------------------------------------------------
 # new method: update_visual
 #--------------------------------------------------------------------------
 def update_visual
 return unless SceneManager.scene_is?(Scene_Battle)
 return unless SceneManager.scene.spriteset
 correct_origin_position
 #---
 @arc == 0 ? update_movement : update_jump
 update_icons
 end
 
 #--------------------------------------------------------------------------
 # new method: is_moving?
 #--------------------------------------------------------------------------
 def is_moving?
 [@move_x_rate, @move_y_rate].any? { |x| x != 0 }
 end
 
 #--------------------------------------------------------------------------
 # new method: is_moving?
 #--------------------------------------------------------------------------
 def dual_attack?
 self.actor? && self.current_action.attack? && self.dual_wield? && self.weapons.size > 1
 end
 
 end # Game_Battler
 
 #==============================================================================
 # ■ Sprite_Battler
 #==============================================================================
 
 class Sprite_Battler < Sprite_Base
 
 #--------------------------------------------------------------------------
 # new method: is_moving?
 #--------------------------------------------------------------------------
 def is_moving?
 return unless @battler
 @battler.is_moving?
 end
 
 end # Sprite_Battler
 
 #==============================================================================
 # ■ Spriteset_Battle
 #==============================================================================
 
 class Spriteset_Battle
 
 #--------------------------------------------------------------------------
 # new method: is_moving?
 #--------------------------------------------------------------------------
 def is_moving?
 self.battler_sprites.any? { |sprite| sprite.is_moving? }
 end
 
 end # Spriteset_Battle
 
 #==============================================================================
 # ■ Window_BattleLog
 #==============================================================================
 
 class Window_BattleLog < Window_Selectable
 
 
 
 end # Window_BattleLog
 
 #==============================================================================
 # ■ Scene_Battle
 #==============================================================================
 
 class Scene_Battle < Scene_Base
 
 #--------------------------------------------------------------------------
 # overwrite method: use_item
 #--------------------------------------------------------------------------
 def use_item
 @scene_item = item = @subject.current_action.item
 targets = @subject.current_action.make_targets.compact
 #---
 attack = @subject.current_action.attack?
 weapon = @subject.weapons[0]
 w_action = attack && weapon
 #---
 targets = targets * 2 if attack && @subject.dual_attack?
 #--- Setup Actions ---
 actions_list = item.setup_actions_list
 actions_list = weapon.setup_actions_list if w_action && weapon.valid_actions?(:setup)
 perform_actions_list(actions_list, targets)
 #--- Item Costs ---
 @subject.use_item(item)
 refresh_status
 #--- YEA - Cast Animation
 process_casting_animation if $imported["YEA-CastAnimations"]
 #--- YEA - Lunatic Object
 if $imported["YEA-LunaticObjects"]
 lunatic_object_effect(:before, item, @subject, @subject)
 end
 #--- Whole Actions ---
 actions_list = item.whole_actions_list
 actions_list = weapon.whole_actions_list if w_action && weapon.valid_actions?(:whole)
 perform_actions_list(actions_list, targets)
 #--- Target Actions ---
 actions_list = item.target_actions_list
 actions_list = weapon.target_actions_list if w_action && weapon.valid_actions?(:target)
 targets.each { |target|
 next if target.dead?
 perform_actions_list(actions_list, [target])
 }
 #--- Follow Actions ---
 actions_list = item.follow_actions_list
 actions_list = weapon.follow_actions_list if w_action && weapon.valid_actions?(:follow)
 perform_actions_list(actions_list, targets)
 #--- Finish Actions ---
 actions_list = item.finish_actions_list
 actions_list = weapon.finish_actions_list if w_action && weapon.valid_actions?(:finish)
 immortal_flag = ["IMMORTAL", ["TARGETS", "FALSE"]]
 if !actions_list.include?(immortal_flag)
 if SYMPHONY::Fixes::AUTO_IMMORTAL_OFF
 actions_list = [immortal_flag] + actions_list
 end
 end
 perform_actions_list(actions_list, targets)
 #--- YEA - Lunatic Object
 if $imported["YEA-LunaticObjects"]
 lunatic_object_effect(:after, item, @subject, @subject)
 end
 targets.each { |target|
 next unless target.actor?
 @status_window.draw_item(target.index)
 }
 end
 
 #--------------------------------------------------------------------------
 # alias method: invoke_item
 #--------------------------------------------------------------------------
 alias bes_invoke_item invoke_item
 def invoke_item(target, item)
 if $imported["YEA-TargetManager"]
 target = alive_random_target(target, item) if item.for_random?
 end
 bes_invoke_item(target, item)
 #--- Critical Actions ---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::CRITICAL_ACTIONS
 perform_actions_list(actions_list, [target]) if target.result.critical
 #--- Miss Actions ---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::MISS_ACTIONS
 perform_actions_list(actions_list, [target]) if target.result.missed
 #--- Evade Actions ---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::EVADE_ACTIONS
 perform_actions_list(actions_list, [target]) if target.result.evaded
 #--- Fail Actions ---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::FAIL_ACTIONS
 perform_actions_list(actions_list, [target]) if !target.result.success
 #--- Damaged Actions
 actions_list = SYMPHONY::DEFAULT_ACTIONS::DAMAGED_ACTION
 perform_actions_list(actions_list, [target]) if target.result.has_damage?
 end
 
 #--------------------------------------------------------------------------
 # alias method: execute_action
 #--------------------------------------------------------------------------
 alias bes_execute_action execute_action
 def execute_action
 bes_execute_action
 #--- Reset Flags ---
 ($game_party.battle_members + $game_troop.members).each { |battler|
 battler.result.set_calc; battler.result.clear
 battler.clear_icons
 battler.set_default_position
 battler.break_pose
 }
 $game_troop.screen.clear_bes_ve if $imported["BattleSymphony-VisualEffect"]
 @status_window.draw_item(@status_window.index)
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: invoke_counter_attack
 #--------------------------------------------------------------------------
 def invoke_counter_attack(target, item)
 @log_window.display_counter(target, item)
 last_subject = @subject
 @counter_subject = target
 @subject = target
 #---
 @subject.backup_actions
 #---
 @subject.make_actions
 @subject.current_action.set_attack
 #---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::COUNTER_ACTION
 perform_actions_list(actions_list, [last_subject])
 #---
 @subject.clear_actions
 @subject = last_subject
 #---
 @counter_subject.restore_actions
 #---
 @counter_subject = nil
 @log_window.display_action_results(@subject, item)
 refresh_status
 perform_collapse_check(@subject)
 perform_collapse_check(target)
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: invoke_magic_reflection
 #--------------------------------------------------------------------------
 def invoke_magic_reflection(target, item)
 @subject.magic_reflection = true
 @log_window.display_reflection(target, item)
 last_subject = @subject
 @reflect_subject = target
 @subject = target
 #---
 @subject.backup_actions
 #---
 @subject.make_actions
 if item.is_a?(RPG::Skill); @subject.current_action.set_skill(item.id)
 else; @subject.current_action.set_item(item.id); end
 #---
 actions_list = SYMPHONY::DEFAULT_ACTIONS::REFLECT_ACTION
 perform_actions_list(actions_list, [last_subject])
 #---
 @subject.clear_actions
 @subject = last_subject
 #---
 @reflect_subject.restore_actions
 #---
 @reflect_subject = nil
 @log_window.display_action_results(@subject, item)
 refresh_status
 perform_collapse_check(@subject)
 perform_collapse_check(target)
 @subject.magic_reflection = false
 end
 
 #--------------------------------------------------------------------------
 # new method: wait_for_move
 #--------------------------------------------------------------------------
 def wait_for_move
 update_for_wait
 update_for_wait while @spriteset.is_moving?
 end
 
 #--------------------------------------------------------------------------
 # new method: spriteset
 #--------------------------------------------------------------------------
 def spriteset
 @spriteset
 end
 
 #--------------------------------------------------------------------------
 # compatible overwrite method: separate_ani?
 #--------------------------------------------------------------------------
 if $imported["YEA-BattleEngine"]
 def separate_ani?(target, item)
 return false
 end
 end
 
 #--------------------------------------------------------------------------
 # new method: perform_collapse_check
 #--------------------------------------------------------------------------
 def perform_collapse_check(target)
 target.perform_collapse_effect if target.can_collapse?
 @log_window.wait_for_effect
 end
 
 #--------------------------------------------------------------------------
 # overwrite method: create_log_window
 #--------------------------------------------------------------------------
 #~   def create_log_window
 #~     @log_window = Window_BattleLog.new
 #~   end
 
 end # Scene_Battle
 
 #===============================================================================
 #
 # END OF FILE
 #
 #===============================================================================
 | 
 |