Jump to content

Recommended Posts

Pets and Summons v1.1a
By Vlue


Introduction
This script allows you to create skills that temporarily add actors into the party. These actors (or pets, summons, whatever) will last until the end of the battle, unless they die first... or their turn timer runs up (optional). Summoned pets will be at the same level as the actor who used the skill, with options to adjust level for specific skills. Yay notetags!

Features
- Summon actors into battle
- Summoned actors last for duration of battle or until dead or by timer, whichever comes first
- Different skills can summon same actor at different levels

How to Use
Plug and play, set up notetags as needed.

Script
Pastebanana as usual, compatibility mode is for use with scripts that display actor sprites:
Stand Alone: http://pastebin.com/zuGyMX7z
Compatibility: http://pastebin.com/ef084qjG

FAQ
Q. But, what if I don't want to summon pets...
A. Then don't use this script.

Credit and Thanks
- By Vlue
- Free to use in any project (commercial or otherwise) with credit given

Author's Notes
Pets and totems and beasts, oh my! Edited by Vlue

Share this post


Link to post
Share on other sites

Greetings,  i was wondering if this is usable with any side view combat systems ? , i have tested it with yanflys battle engine and a few others as well and as of now none of them work , it always crashes the game as soon s a actor is summoned ,or when the summoned actors turn is about to start it crashes , am i dong something wrong or is it just not compatible ? 

 

-Cazziuz

Edited by cazziuz

Share this post


Link to post
Share on other sites

It should work, I've tested it with a few. Have you tried it with this script below the others? or above? I can't remember which one it had to be...

Share this post


Link to post
Share on other sites

@Vlue 

 

yeah i have tried it both above and below all the other scripts , and when i try it with the Mog Hunter scripts in conjunction with the ATB that they have in their master demo it wont even start a battle process before crashing , also i downloaded your script compilation from your steam page , and after looking at your script and the way it works there , It doesn't allow for a visual reference or battler of any type , even after setting one on the summoned actor in the data base , all it does is show up on the window that has the character names during battle. Mabye I am doing something wrong ? any help in this matter would be amazing , cause this script is so easy to use as far as setting up goes ,and if it would have a visual battler that appears when the actor is summoned it would be perfect for the game i am working on ,thanks in advance for any and all help in this matter .

 

-Cazziuz

Share this post


Link to post
Share on other sites

Yah, the older versions wouldn't show, it's a newer feature. (I should update the compilation).

Are you using the latest version as well? (1.4d)

And if still nothing, if you link the scripts that aren't working, I can take a look.

Share this post


Link to post
Share on other sites

Yeah im using the newer version now , thank you for pointing that out , but now when i try to use with Battle Engine Symphony it summons the visual , but for some reason , neither the visual or the actor is able to be seen unless they are attacking ? maybe im just not doing something right ? and i know its this script causing the visual issues , because after i test it i then remove it an the battlers are easily visible ,both while they are attacking and just in line waiting to be given commands. also the summoned creature , is there a way to set where it goes to in the line up ? it looks as if the summoned creature is in the same spot as the actor who summons it ? I know im asking a bunch of question and i apologize ,but this script is amazing and will be perfect for my project( a trading card game) and i cant  thank you enough for releasing it to the public to use.

 

 

**EDIT**

after i posted this i went and switched the summon script out in your compilation for the newer one  and i got a error here is a screen shot of the error  :

summon_error.png
 
Edited by cazziuz

Share this post


Link to post
Share on other sites

Hey, I'm a scripting/programming/coding-in-general moron and I was trying to figure out how to make this work.  I failed.

 

I copypasted your script into a new Insert, where the Script Editor says to put things.  I have no other outside scripts...and that's about where I started needing help.  Would you be so kind as to walk a noob through the basic process?

 

Thanks in advance!

Share this post


Link to post
Share on other sites

in the data base , under the skills tab  ,make a new skill named pretty much anything you want ( i used Summon) in the new skills not tag box use this :

 <SUMMON actor_id, timer, level_bonus (optional)>  the break down on that is  actor_id  is the data base id number of the actor you are trying to summon, ie Eric is actor id 1 , the timer part is just what it says ( i don't use the timer so i am not certain what it count down as , probably rounds though) and the last part of it is a number equal to the  number of levels higher than you that the summon will be summoned at (again i don't use this feature so i cant really tell you much about it )

 

so to summon Eric the note-tag should ready like this :

<SUMMON 1, 0, 3>      this means actor 1 (Eric) is summoned till he dies or battle is over and is 3 levels higher than you 

 

after you make the skill go to the actors tab of the database and add the skill to who ever is going to use it (actor tab--->features--->skill tab--->add skill-->drop down menu--->select skill)

 

then depending on how you set up the skill it should work .

 

hope this helps 

 

-Cazziuz

Edited by cazziuz

Share this post


Link to post
Share on other sites

Yeah im using the newer version now , thank you for pointing that out , but now when i try to use with Battle Engine Symphony it summons the visual , but for some reason , neither the visual or the actor is able to be seen unless they are attacking ? maybe im just not doing something right ? and i know its this script causing the visual issues , because after i test it i then remove it an the battlers are easily visible ,both while they are attacking and just in line waiting to be given commands. also the summoned creature , is there a way to set where it goes to in the line up ? it looks as if the summoned creature is in the same spot as the actor who summons it ? I know im asking a bunch of question and i apologize ,but this script is amazing and will be perfect for my project( a trading card game) and i cant  thank you enough for releasing it to the public to use.

 

 

**EDIT**

after i posted this i went and switched the summon script out in your compilation for the newer one  and i got a error here is a screen shot of the error  :

summon_error.png

If you link the Symphony script thingy in question, I can take a look. And nothing wrong with asking a bunch of questions!

Share this post


Link to post
Share on other sites

Here is a link to the Battle Engine Symphony :

 

https://github.com/suppayami/rmvxa-collection/blob/master/battle-symphony/battle-symphony-116c.rb

 

and here is the actual script **warning** it is kinda long 

 

 

 

#==============================================================================
#
# â–¼ Yami Engine Symphony - Battle Symphony
# -- Version: 1.16c (2014.03.24)
# -- Level: Easy, Normal, Hard, Very Hard
# -- Requires: n/a
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YES-BattleSymphony"] = true

#==============================================================================
# â–¼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2014.03.24 - Release Build 1.16c.
# 2014.02.26 - Release Build 1.16b.
# 2014.01.20 - Release Build 1.16.
# 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],
} # 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 and 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"],
["IMMORTAL", ["TARGETS", "FALSE"]],
] # Do not remove this.
ITEM_FINISH =[
["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.

#==========================================================================
# Substitute Action
# -------------------------------------------------------------------------
# This is the substitute action. This action will be played when a battler
# performs substitute.
#==========================================================================
SUBSTITUTE_ACTION = [
["TELEPORT SUBSTITUTE SUBJECT", ["TARGET", "BODY", "WAIT"]],
] # Do not remove this.

SUBSTITUTE_END_ACTION = [
["TELEPORT SUBSTITUTE SUBJECT", ["ORIGIN", "WAIT"]],
] # 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
#==============================================================================
#==============================================================================
# â–  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 /(?:SUBSTITUTE SUBJECT)/i
result = [@substitute_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 /(?:SUBSTITUTE SUBJECT)/i
result = [@substitute_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
#--- substitute ---
substitutes = []
targets.each { |target|
substitutes.push(target.friends_unit.substitute_battler)
}
substitutes = substitutes.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
#--- substitute flag ---
if substitutes
substitutes.each { |substitute|
next unless substitute
substitute.result.clear_bes_flag
array.each {|value| str = "substitute.result.set_#{value}"; eval(str)}
}
end
#---
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
@substitute_subject.result.clear_change_target if @substitute_subject
}
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
pose_key = @action_values[1].downcase.to_sym
end
#---
return if !$imported["BattleSymphony-HB"] && !$imported["BattleSymphony-CBS"]
#---
targets.each { |target|
next unless target.exist?
next if !target.use_hb? && !target.use_cbs?
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: use_8d?
#--------------------------------------------------------------------------
def use_8d?
false
end

#--------------------------------------------------------------------------
# new method: use_hb?
#--------------------------------------------------------------------------
def use_hb?
false
end

#--------------------------------------------------------------------------
# new method: use_cbs?
#--------------------------------------------------------------------------
def use_cbs?
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: dispose
#--------------------------------------------------------------------------
alias bes_dispose dispose
def dispose
bes_dispose
dispose_shadow
end

#--------------------------------------------------------------------------
# new method: dispose_shadow
#--------------------------------------------------------------------------
def dispose_shadow
@charset_shadow.dispose if @charset_shadow
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?
@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 !@battler.reverse_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[i]
if party_member != sprite.battler
sprite.battler = $game_party.battle_members[i]
#---
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 = -@battler.sprite.height
@offset_x = -@battler.sprite.width / 2
when :hand1
self.ox = 24
self.oy = 24
@attach_y = -@battler.sprite.height/3
@attach_x = -@battler.sprite.width/5
when :hand2
self.ox = 24
self.oy = 24
@attach_y = -@battler.sprite.height/3
@attach_x = @battler.sprite.width/5
when :middle
self.ox = 12
self.oy = 12
@offset_y = -@battler.sprite.height/2
when :top
self.ox = 12
self.oy = 24
@offset_y = -@battler.sprite.height
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[] = (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[]**2)
b = (@parabola[:y1]-@parabola[:y0]-a*(@parabola[]**2))/@parabola[]
@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 = -@battler.sprite.height/3
@attach_x = -@battler.sprite.width/5
when :hand2
self.ox = mirror ? 0 : 24
self.oy = 24
@attach_y = -@battler.sprite.height/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 < 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[] = (@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[]**2)
b = (@parabola[:y1]-@parabola[:y0]-a*(@parabola[]**2))/@parabola[]
@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

#--------------------------------------------------------------------------
# alias method: apply_substitute
#--------------------------------------------------------------------------
alias bes_apply_substitute apply_substitute
def apply_substitute(target, item)
substitute = bes_apply_substitute(target, item)
if target != substitute
@substitute_subject = substitute
end
return substitute
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
;>

 

 

 

Share this post


Link to post
Share on other sites

Using just Battle Symphony and Pet Summons, I have none of the errors or graphical problems you are having.

It could be another script causing problems then, also make sure that Pets and Summons is below Battle Symphony.

Share this post


Link to post
Share on other sites

Thanks for taking a look , i also have nothing but the two scripts , and the pet script is below the combat engine. so i have no ideal as to what the issue may be , but if it willhelp here are some screens :

 

 

actor_there_while_attacking.png

actor there while attacking
after_summon.png
being attacked after summon
attacking_after_summon.png
dog attaking
battle2.png
combat starts 
battle_start.png
first glimps of nothing there 
dog_images.png
dogs character graphics
Script_set_up.png
only those two scripts
summon_skill.png
main actor with summon skill
victory.png

Victory 
image posting

 

 

as you can see in the images the actor images are not there in combat unless they are attacking ? and for me this only happnes when i have this script in the game , if i take it out then the battle engine works fine,but if i take it out i wont be able make my game hte way i want,lol , perhaps you can suggest a visual combat system that works better with your script? also the error i screen shotted earlier was from you script compilation , all i did was change the pet script that was in there , for the new one.

 

again sorry for all the questions , and thank you for your time and help in this .

 

-Cazziuz

Edited by cazziuz

Share this post


Link to post
Share on other sites

I'm also trying to get this to work using the Symphony Battle System, if its not too much trouble, could we get a list of compatible battle systems that this will work for?

 

 

 

 

Respectfully,

Koshinto

Share this post


Link to post
Share on other sites

Using just Symphony and Pets, it works just fine for me.

I'd need to know what other scripts you are using that's interfering. Add-ons for symphony maybe, etc.

Share this post


Link to post
Share on other sites

Using just Symphony and Pets, it works just fine for me.

I'd need to know what other scripts you are using that's interfering. Add-ons for symphony maybe, etc.

Right now I'm just using the Symphony Battle System and your Summons and Pets script. Opened up a new project to start from scratch and try it out, so there are no other addons. Not even for Symphony, the only two things I added was the battle system (with no addons) and the pet summon. It could just be though, I'm really new to all of this. I created my new skill: Summoning, added it to the character and tagged it <SUMMON  2, 0, 1>

 

My main character Eric is invisible, but when I use the skill he reappears while the animation goes off, but then nothing else happens. I'll tinker around some more as I'm sure its something I'm doing wrong. It hasn't crashed on me yet, just invisible character with no actor being summoned when the skill goes off. Thanks for the reply.

 

 

 

Respectfully,

Koshinto

Share this post


Link to post
Share on other sites

No, I found it. (Finally)

There's a compatibility version of this script linked now in the OP up there, use that version instead to fix invisible sprites.

Share this post


Link to post
Share on other sites

No, I found it. (Finally)

There's a compatibility version of this script linked now in the OP up there, use that version instead to fix invisible sprites.

Awesome! Thanks, I'll try it out right now. Thanks for the hasty reply, hope I didn't take up too much of your time.

 

 

Respectfully,

Koshinto

Share this post


Link to post
Share on other sites

Been searching fr a summon script..

Thank you Vlue..

Will test out soon..

Share this post


Link to post
Share on other sites

First,this is a sweet script.

Secondly, is there a way to set where the summoned pet goes?

As it is its summoned right beside the actor who summoned it.

I saw while I was reading the thread that someone had asked something about it ,but i didn't see a response?

Edited by Argotz

Share this post


Link to post
Share on other sites

First,this is a sweet script.

Secondly, is there a way to set where the summoned pet goes?

As it is its summoned right beside the actor who summoned it.

I saw while I was reading the thread that someone had asked something about it ,but i didn't see a response?

Yeah, ran into another issue, I'm tinkering with the script to see if I can't fix it. I'll list the issues below.

 

1. When summoning, I get duplicates of my party. Example. Eric summons Natasia, for a few seconds, I'll see 2 Erics and 2 Natasia. The duplicated pair will disappear after a few seconds and I'm able to continue the fight just fine.

 

2. The summoned actor will move and attack when Eric (the main character) moves or attacks. Example. Eric attacks and Natasia moves along with him (stuck at the hip style) She doesn't attack, but is more or less dragged along while Eric attacks. If Eric gets hit and takes damage, the summoned actor will have the "taken damage" animation, even the attack was a single target hit to Eric.

 

Anyone run into the same problems?

 

 

Respectfully,

Koshinto

Share this post


Link to post
Share on other sites

Yes I did but my game does freeze completly^^

 

 

18531594lb.jpg

 

 

I am using VE Animated Battle

 

(I am trying out a few things and yeah^^ Screw up as much as possible ;) )

 

Doesn´t really matter what who or with which party I summon something it will stick the last actor (If I only have one it will stick to him and there would be two from them... but the game does freeze with a 100% Chance with my current settings... well maybe I screwed smth up like I seem to do with the Loop Animation but I don`t think so... I assigned a charset and stuff so yeah..^^)

The summoning time doesn`t matter as well how it seems^^

 

And I tried both scripts as well and it`s located below Animated Battle and no change at all^^

Nah it just doesn`t work completly... doesn´t matter which one... If you summon something it crashes but if you have it in your script list (doesn`t matter were) the character will face "downside"(hope that`s the right word... uh he will look "south" down smth like that)  after the second round^^

Edited by Thereisnoname

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
Top ArrowTop Arrow Highlighted