$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: 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
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_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_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
#==============================================================================
# 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
#==============================================================================
#--------------------------------------------------------------------------
# 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: 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
#--------------------------------------------------------------------------
# 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
@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
#--------------------------------------------------------------------------
# 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_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: 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: 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
#--------------------------------------------------------------------------
# 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
#--------------------------------------------------------------------------
# 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
#==============================================================================
#--------------------------------------------------------------------------
# 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
#==============================================================================
#--------------------------------------------------------------------------
# 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
#--------------------------------------------------------------------------
# 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_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
#--------------------------------------------------------------------------
# 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
#--------------------------------------------------------------------------
# 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: 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
#===============================================================================
#
# END OF FILE
#
#===============================================================================