[XP] Blizz-ABS

Started by Blizzard, January 09, 2008, 08:21:56 am

Previous topic - Next topic

Blizzard

He already did, I made this compatiblity code based on what he posted before.

@diablosbud: I'm lost. Line 113 of the original script doesn't have anything to do with that error. -_- How about you put a demo together with all your scripts and send it to me. It's easier to work with an actual game than out of my head.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

diablosbud

Well I got all of the demo prepared, and compiled into a RAR file, and posted it up on megaupload. It has a map with approximately 6 enemies, a shapeshift skill, and a deshapeshift skills. It's prettu simple, here is the download link: http://www.megaupload.com/?d=PP9AGXYN.

Blizzard

I hate megaupload because I always have to run Internet Exploiter to be able to download. >_>
I'll take a look at it as soon as I can.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

diablosbud

Sorry it's the only good uploader I know (not really that good). I like download.com the most but don't know how to upload there :-\.

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Caro Ru Lushe

Uguuu~

I feel impatient waiting for a new update of this Aweome ABS ;=;

Juan

Quote from: Dark Angel Sion on June 10, 2008, 05:09:18 pm
Uguuu~

I feel impatient waiting for a new update of this Aweome ABS ;=;

Well the update should be well worth it consedering the fact that it will have the AI for allies. And a few other things.
Offtopic:
You might want edit your sig it should be
[img]http://img408.imageshack.us/img408/4238/ubd1834up2ii0.png[/img]

you forgot the [img] in your sig. Just letting you know.
Dropbox Who need luck when you can make your own.
3ds Friend code: ShowHide
 4468 1422  6617

Blizzard

1.99 will have quite some major updates, but not the ally AI yet. But this will come soon enough. ;) I have exams the next two weeks and then the semester is over. You know what that means. :naughty:
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Caro Ru Lushe

Quote from: Blizzard on June 11, 2008, 06:32:59 am
1.99 will have quite some major updates, but not the ally AI yet. But this will come soon enough. ;) I have exams the next two weeks and then the semester is over. You know what that means. :naughty:


=> Blizz will break loose!!!!!!! PARTY!!!!! X3

Blizzard

Actually this is no change of the current situation. xD i.e. I'm going out tomorrow again with that 36-year old chick. xD
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

ramonbastos

Hey Blizz, remember me? i asked u to put "random animations" at the atacks..
is it coming at 1.99?

Blizzard

Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

ramonbastos


diablosbud

Blizzard would it be possible to have an animation play on any enemies', and actors' death? That way I could do something like in Diablo II when the blood splatter comes out on death (also comes with hit, but that doesn't matter, I could do that with animation normally). Also could I have it where the enemy on death, changes the event sprite, and doesn't delete the event until you leave the map? That way I could have corpses on my enemies' deaths. Also this event sprite could it be event/monster specific, that way I don't have a huge beast's corpse be for a small demon? Could you please help me with these, they are not needed for my game, only for realiscism? Just remember you can say no to this request if you'd like.

Blizzard

Something like a corpse system was already requested earlier in this thread. I will include this feature in either 1.99 or 2.0 (most probably the latter xD).
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

diablosbud

Alright, thanks Blizzard, that would be realistic too seeing your enemy's dead body. Standing over it laughing at it, lol.

Hovart

Is there a Multi Drop script in Blizz ABS ? To make monsters droping more items at the same time ? Or it will be one ?

Blizzard

Multi-Drop from Tons of Add-ons is supported by Blizz-ABS.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

Hovart

Great Thank Youuuuu =)

legacyblade

Hey Blizz, one addon I'd really love to see for blizz ABS, even if by means of a new tons of addons version, would be a script that handled battle cries. For each actor and enemy, you can define a list of battle sounds for each action (spell cast, hit, critical, regular attack) that it will randomly cycle through. The only script I can find is by DerVVulfman, but its an addon for the regular battle system, so it would require some modification to work with blizz ABS. I think a script similar to the following would make a great addition to the power of the script, plus it would make everything sound more interesting while you play.



#==============================================================================
# ** Dalissa's Battle Cry
#    by DerVVulfman
#    Version 3.4-b (Game_System instance version)
#    02-03-2007
#    Full SDK 2.3 Compatible (Does not need or require SDK 2.3)
#------------------------------------------------------------------------------
#
#  INTRODUCTION:
#
#  This add-on system allows you to pre-program additional vocal cues for your
#  battlers so they can play these additional vocals during battle events.  It
#  can perform battle cries for heroes and enemies, for regular attacks or for
#  skill events.
#
#  This script was a request by a couple of friends.   Both wanted a system to
#  enhance their combat systems  and personalize  their battles  with an audio
#  system not dependant on the "battle animation" built into RMXP.   Now, with
#  this script, you can set each battler to scream out their 'battle cry' when
#  they perform their battle action.
#
#
#------------------------------------------------------------------------------
#
#  THE CONFIGURATION SECTION:
#
#  This version uses instance values stored within the $game_system class.  As
#  such, it has two bonuses:   reduced memory requirements  and a smaller RMXP
#  script.  This version is smaller than the one that uses ($)Global values.
#
#  However,  calling the values 'in-game' from map events or in-script requires
#  you to call the $game_system class to perform any changes:
#
#  EX:
#  @>script: $game_system.actor_cry_attack = {1 >= "Charge",
#   :      :    2 => "Yarrrr", 7 => "HieeeYah", 8 => "Haa" }
#
#  Not much except the string is a little longer as it requres the $game_system
#  prefix at the start of each value.
#
#  Also as stated,  the values are stored  withing the $game_system class.   As
#  such, the configuration system  of this script is located around line 238 of
#  this script, and not at the top.
#
#------------------------------------------------------------------------------
#
#  SETTING THE BATTLECRIES:
#
#  First off,  let me point out  that this system  plays audio clips  that are
#  kept in either your project's or the RTP's Audio\SE directory.  These clips
#  may be of any file format goverened by RMXP, and as such, no file extension
#  will be necessary when actually setting up your battlecry system.
#
#  In this script's  "CONFIGURATION"  system,  you will see two sets of hashes,
#  one set for the actor battlers  and the other for the enemy battlers.   Each
#  set has eight identical hashes:  Attack, Skill, Skill_I, Item, Item_I, Block
#  Escape and Defeat.
#
#  Under most circumstances,  you merely need to enter  the ID number of a bat-
#  tler and the audio clip  it will perform...  or a group  of battlers  as the
#  below syntax shows:
#
#  $hash = { battler id => "audioclip", battler id => "audioclip", .... }
#
#
#  *** Please see the Audio Clip section (below) regarding files and pitch. ***
#
#
#  A few hashes are designed for items and skills,  allowing you to set a range
#  of audio effects for each battler.  Each battler can now have multiple audio
#  clips, one for each skill and/or item used.  The syntax for these few hashes
#  is similar in nature:
#
#  hash = { battler id => { id => "audioclip", id => "audioclip",... },... }
#
#  A few more hashes are designed to give a range of random sound effects.
#  These are designed in the following fashion:
#
#  hash = { battler id => [ "audioclip", "audioclip",...],... }
#
#  And a few actually combine the two, individual skills/items 'and' random
#  audio clips...  though that may seem excessive???
#
#  hash = {battler => (id => ["audio",...], id=>["audio",... ],... },... }
#
#  If, for example,  you want a 'ghost'  battler to moan when it is performing
#  an attack (assuming it's enemy #1 in your RTP), you would add the following:
#
#     $game_system.enemy_cry_attack = {1 => "GhostMoan01"}
#
#  ... assuming you have an audio file named  "GhostMoan01"  in your project's
#  Audio\SE directory  or in your RTP directory.   Again,  please note that no
#  file extension is needed or required. 
#
#  And, if you were to set TWO sets of battlecries  (one for a ghost & one for
#  a zombie),  you'd enter them in the following manner  (again,  assuming the
#  RTP monsters are being used):
#
#     $game_system.enemy_cry_attack = {1 => "GhostMoan01", 9 => "ZombieGroan04"}
#
#  As you can see, you can skip between battlers when setting audio clips. And
#  while it is preferred to enter them in the id number order, it isn't neces-
#  sary.
#
# (NOTE:  Enemies normally cannot use items, so unless an additional script has
#         been added that permits item usage for enemies,  the item hashes will
#         be useless.)
#
#  To prevent monotony, there is an additional value that is in the system be-
#  low the two sets of hashes.  This value, 'occur_cry_chance', determines the
#  chance of an audio clip to be played.   A value of 100 equals a 100% chance
#  of the file to be played, while a 25 gives the system a 1 in 4 chance of it
#  being played.
#
#------------------------------------------------------------------------------
#
#  AUDIO CLIPS:
#
#  It's not enough that this system  allows you to play  pre-programmed Sounds
#  for your battlers,  but you can even determine if the effect played is of a
#  non-standard pitch.
#
#  What does this mean?
#
#  You can use the same audio file in your project for different battlers, and
#  make them sound different  just by changing the pitch setting being used by
#  that clip.  Valid pitch ranges from 50 to 150 (aka 50% to 150% of normal).
#
#  Setting a 'audioclip' can now be performed  by entering the filename alone,
#  which automatically sets the pitch to 100 (the default).   Or you can enter
#  an array that combines both the filename and pitch. 
#
#  Example:
#    @actor_cry_attack        = { 1 => "Test1", 2 => ["Test2", 120],... }
#
#  This example sets the 1st battler to use a file called 'Test1' and uses the
#  default pitch level.  The 2nd battler uses a file called 'Test2' and is set
#  to 120%
#
#------------------------------------------------------------------------------
#
#  COMPATIBILITY:
#
#  This script was designed around the basic DBS system.   I can confirm it's
#  functionality with the RTAB system,  as well as ParaDog's CTB v 2.58,  the
#  newest CTB by XRXS (version 65a).
#
#  It is NOT compatible with Ccoa's CTB v 3.04 script and it is unknown as to
#  the compatability to KGC's Active Count Battle system.
#
#  This audio system will not work, and is not compatible with Cybersam's Ani-
#  mation system.
#
#------------------------------------------------------------------------------
#
#  KNOWN ISSUES:
#
#  As this system retrieves the action states of the battlers:  Attack, Skill,
#  Item...  and from nothing else,  then this system begins to play the battle
#  cries from the  very moment  these states are triggered.   The only battler
#  overlay system  (Front-View system to a Side-View System)  that this script
#  works with is the new incarnation of Minkoff's Animated Battlers - Enhanced
#  (version 4.7 or higher) as a trigger system has been recently added to that
#  script.
#
#  Earlier versions of Animated Battlers will not play the audio clips for the
#  battlers... if any are still around.
#
#------------------------------------------------------------------------------
#
#  JUST IN CASE:
#
#  By default, the battlecry system will merely NOT play any sound effect if a
#  given battler has no related audio clip.  The system will even skip search-
#  ing through the system  if a hash is empty.   This is  designed  to prevent
#  avoidable errors  as well  as to play  only the proper clip  for the proper
#  battler.
#
#  Also, with a little assistance from Me? and Mr.Mo,  I was able to create an
#  Error-Check routine that 'ensures' that no error  in this system will cause
#  the system to crash.
#
#  For example, if you enter into a hash of audio clips in the system,  a piece
#  that doesn't exist (either in the project or the RTP file), then this script
#  will merely skip playing this audio file to prevent errors.
#
#------------------------------------------------------------------------------
#
#  THANKS:
#
#  Thanks to  Mimi-Chan  and  ~AtlasWing~  for requesting  this script,  and to
#  grimreaper1357 for noticing a 'bug',  though it wasn't the error  he thought
#  it was.  uzumakishade, for 'forcing my hand' to add weapon hashes.   He also
#  suggested the inclusion of 'random' sets for each audio type.  I went so far
#  as to  expand and allow  each skill,  item  & etc to have multiple  'random'
#  Clips. And thanks to Grimreaper1357 for suggesting 'struck' audio clips, and
#  to joooda for suggesting  'critical hit'  audio clips.   Thanks also goes to
#  Nico_14_Ian and vpcdmd for finding a mistake with random-individual cries...
#  fixed now.   To pierce carradine I thank  for finding an annoying glitch for
#  collapse effects that only  used the last battler's collapse effect, and for
#  finding the 'miss' damage glitch that prevented the same effect from working.
#  And to ElMaligno for noticing that default 'field' actions  (Items, Skills &
#  Attack commands... map event routines) didn't properly work,  and for disco-
#  vering a glich when 'healing' items/spells were used on the map.  Fixed.
#
#==============================================================================



#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of
#  this class.
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :default_ase
  attr_accessor :default_ese
  attr_accessor :actor_cry_attack
  attr_accessor :actor_cry_attack_r
  attr_accessor :actor_cry_attack_i
  attr_accessor :actor_cry_attack_r_i
  attr_accessor :actor_cry_skill
  attr_accessor :actor_cry_skill_r
  attr_accessor :actor_cry_skill_i
  attr_accessor :actor_cry_skill_r_i
  attr_accessor :actor_cry_item
  attr_accessor :actor_cry_item_r
  attr_accessor :actor_cry_item_i
  attr_accessor :actor_cry_item_r_i
  attr_accessor :actor_cry_block
  attr_accessor :actor_cry_block_r
  attr_accessor :actor_cry_escape
  attr_accessor :actor_cry_escape_r
  attr_accessor :actor_cry_struck
  attr_accessor :actor_cry_struck_r
  attr_accessor :actor_cry_critical
  attr_accessor :actor_cry_critical_r
  attr_accessor :actor_cry_defeat
  attr_accessor :actor_cry_defeat_r
  attr_accessor :enemy_cry_attack
  attr_accessor :enemy_cry_attack_r
  attr_accessor :enemy_cry_attack_i
  attr_accessor :enemy_cry_attack_r_i
  attr_accessor :enemy_cry_skill
  attr_accessor :enemy_cry_skill_r
  attr_accessor :enemy_cry_skill_i
  attr_accessor :enemy_cry_skill_r_i
  attr_accessor :enemy_cry_item
  attr_accessor :enemy_cry_item_r
  attr_accessor :enemy_cry_item_i
  attr_accessor :enemy_cry_item_r_i
  attr_accessor :enemy_cry_block
  attr_accessor :enemy_cry_block_r
  attr_accessor :enemy_cry_escape
  attr_accessor :enemy_cry_escape_r
  attr_accessor :enemy_cry_struck
  attr_accessor :enemy_cry_struck_r
  attr_accessor :enemy_cry_critical
  attr_accessor :enemy_cry_critical_r
  attr_accessor :enemy_cry_defeat
  attr_accessor :enemy_cry_defeat_r
  attr_accessor :occur_cry_chance
  attr_accessor :anim_cry_detect
  attr_accessor :rtab_cry_detect

  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias dbc_init initialize
  def initialize
    # Perform the original call
    dbc_init
   
   #========================================================================
   #  **  C  O  N  F  I  G  U  R  A  T  I  O  N      S  Y  S  T  E  M  **  #
   #========================================================================
    # Hero battle cries
    @actor_cry_attack       = {}
      @actor_cry_attack_r   = {}
      @actor_cry_attack_i   = {}
      @actor_cry_attack_r_i = {}
    @actor_cry_skill        = {}
      @actor_cry_skill_r    = {}
      @actor_cry_skill_i    = {}
      @actor_cry_skill_r_i  = {}
    @actor_cry_item         = {}
      @actor_cry_item_r     = {}
      @actor_cry_item_i     = {}
      @actor_cry_item_r_i   = {}
    @actor_cry_block        = {}
      @actor_cry_block_r    = {}
    @actor_cry_escape       = {}
      @actor_cry_escape_r   = {}
    @actor_cry_struck       = {}
      @actor_cry_struck_r   = {}
    @actor_cry_critical     = {}
      @actor_cry_critical_r = {}
    @actor_cry_defeat       = {}
      @actor_cry_defeat_r   = {}
     
    # Enemy battle cries
    @enemy_cry_attack       = {}
      @enemy_cry_attack_r   = { 6 => ["Mimi-01", "Mimi-03", "Mimi-07", "eya"] }
      @enemy_cry_attack_i   = {}
      @enemy_cry_attack_r_i = {}
    @enemy_cry_skill        = { 6 => "Mimi-08" }
      @enemy_cry_skill_r    = {}
      @enemy_cry_skill_i    = {}
      @enemy_cry_skill_r_i  = {}
    @enemy_cry_item         = {}
      @enemy_cry_item_r     = {}
      @enemy_cry_item_i     = {}
      @enemy_cry_item_r_i   = {}
    @enemy_cry_block        = {}
      @enemy_cry_block_r    = {}
    @enemy_cry_escape       = {}
      @enemy_cry_escape_r   = {}
    @enemy_cry_struck       = {}
      @enemy_cry_struck_r   = { 6 => ["Mimi-02", "Mimi-05"] }
    @enemy_cry_critical     = { 6 => "Mimi-04" }
      @enemy_cry_critical_r = {}
    @enemy_cry_defeat       = { 6 =>"Mimi-06" }
      @enemy_cry_defeat_r   = {}
   
    # Chance of occuring
    @occur_cry_chance   = 100
   
    # Final - Arrays for collapse system
    @default_ase = []
    @default_ese = []   

  end 
end



#==============================================================================
# ** Dalissa's Collapse
#------------------------------------------------------------------------------
#  This module performs routines for choosing the collapse SE played during combat.
#==============================================================================

module Dalissa_Collapse
  #--------------------------------------------------------------------------
  # * Collapse Changing Call
  #--------------------------------------------------------------------------   
  def call_collapse_change
    # Create temporary hash and array
    bcry_temp       = {}
    battlecollapse  = []
    battlecharge    = []
    # Retrieve Cry Based on Battler
    if self.is_a?(Game_Enemy)
      battlecollapse = $game_system.default_ese
      battlecollapse = $game_system.enemy_cry_defeat[self.id] if $game_system.enemy_cry_defeat.include?(self.id)
      bcry_temp      = $game_system.enemy_cry_defeat_r[self.id] if $game_system.enemy_cry_defeat_r.include?(self.id)
      bcry_rand      = rand(bcry_temp.size) if bcry_temp != nil
      battlecollapse = bcry_temp[bcry_rand] if bcry_temp[bcry_rand] != nil
    else
      battlecollapse = $game_system.default_ase
      battlecollapse = $game_system.actor_cry_defeat[self.id] if $game_system.actor_cry_defeat.include?(self.id)
      bcry_temp      = $game_system.actor_cry_defeat_r[self.id] if $game_system.actor_cry_defeat_r.include?(self.id)
      bcry_rand      = rand(bcry_temp.size) if bcry_temp != nil
      battlecollapse = bcry_temp[bcry_rand] if bcry_temp[bcry_rand] != nil
    end
    # Set with default pitch if converted string
    if battlecollapse.is_a?(Array)
      battlecharge = battlecollapse
    else
      battlecharge = [battlecollapse, 100]
    end   
    # Reset to nil if empty
    battlecharge = nil if battlecharge[0] == []   
    # If the battle cry isn't nil
    if battlecharge != nil
      begin
        @trd = RPG::AudioFile.new(battlecharge[0])
        Audio.se_play("Audio/SE/" + @trd.name, 0, battlecharge[1])
        # Sound file is true
      rescue Errno::ENOENT
        # Sound file is invalid (restore default)
        battlecharge = nil
      end
      # Set the cry
      if battlecharge != nil
        # Branch based on battler type
        if self.is_a?(Game_Enemy)
          $data_system.enemy_collapse_se.name   = battlecharge[0]
          $data_system.enemy_collapse_se.pitch  = battlecharge[1]
        else
          $data_system.actor_collapse_se.name   = battlecharge[0]
          $data_system.actor_collapse_se.pitch  = battlecharge[1]
        end
      # Else reset the default 
      else
        # Branch based on battler type
        if self.is_a?(Game_Enemy)
          $data_system.enemy_collapse_se.name   = $game_system.default_ese[0]
          $data_system.enemy_collapse_se.pitch  = $game_system.default_ese[1]
        else
          $data_system.actor_collapse_se.name   = $game_system.default_ase[0]
          $data_system.actor_collapse_se.pitch  = $game_system.default_ase[1]
        end       
      end
    end
  end
end



#==============================================================================
# ** Dalissa's Cry
#------------------------------------------------------------------------------
#  This module performs routines for playing the selected battlecry itself
#==============================================================================

module Dalissa_Cry
  #--------------------------------------------------------------------------
  # * Play the Cry
  #--------------------------------------------------------------------------
  def play_cry(battlecry)
    # Error checking.  Makes sure that even the default sound file is available.
    # If it is missing, then the system will set the battle cry to >none<.
    #
    # If the chance of the battle cry is true
    if rand(100) <= $game_system.occur_cry_chance
      # If the battle cry isn't nil
      if battlecry != nil
        # Separate file and pitch values
        battlefile  = battlecry[0]
        battlepitch = battlecry[1]
        begin
          @trd = RPG::AudioFile.new(battlefile)
          Audio.se_play("Audio/SE/" + @trd.name, 0, battlepitch)
          # Sound file is true
        rescue Errno::ENOENT
          # Sound file is invalid (restore default)
          battlecry = nil
        end
        # Play the cry
        if battlecry != nil
          Audio.se_play("Audio/SE/" + @trd.name, 80, battlepitch)
        end
      end
    end
  end 
end



#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. It's used as a superclass for the Game_Actor
#  and Game_Enemy classes.
#==============================================================================

class Game_Battler
  include Dalissa_Collapse
  include Dalissa_Cry
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #-------------------------------------------------------------------------- 
  attr_accessor :dbc_b_dmg
  #--------------------------------------------------------------------------
  # * Applying Normal Attack Effects
  #     attacker : battler
  #--------------------------------------------------------------------------
  alias dbc_ae attack_effect
  def attack_effect(attacker)
    # Setup return value
    result = false
    # Perform the Original call
    result = dbc_ae(attacker)
    # If in battle
    if $game_temp.in_battle     
      # Obtain pre-damaged HP
      cry_dmg = self.hp
      # Obtain damage applied
      $game_system.rtab_cry_detect ? self_dmg = self.damage[attacker] : self_dmg = self.damage
      # Calculate current HP (for Collapse Changing Call)
      cry_dmg -= self_dmg  if self_dmg.to_i != 0
      # The Included module (Collapse Changing Call)
      call_collapse_change if cry_dmg <= 0
    end
    # Return with result
    return result
  end
  #--------------------------------------------------------------------------
  # * Apply Skill Effects
  #     user  : the one using skills (battler)
  #     skill : skill
  #--------------------------------------------------------------------------
  alias dbc_se skill_effect
  def skill_effect(user, skill)
    # Setup return value
    result = false
    # Perform the Original call
    result = dbc_se(user, skill)
    # If in battle
    if $game_temp.in_battle
      # Obtain pre-damaged HP
      cry_dmg = self.hp
      # Obtain damage applied
      $game_system.rtab_cry_detect ? self_dmg = self.damage[user] : self_dmg = self.damage
      # Calculate current HP (for Collapse Changing Call)
      cry_dmg -= self_dmg  if self_dmg.to_i != 0
      # The Included module (Collapse Changing Call)
      call_collapse_change if cry_dmg <= 0
    end
    # Return with result
    return result
  end
  #--------------------------------------------------------------------------
  # * Application of Item Effects
  #     item : item
  #--------------------------------------------------------------------------
  alias dbc_ie item_effect
  def item_effect(item, battler = @active_battler)
    # Setup return value
    result = false
    # Perform the Original call 
    $game_system.rtab_cry_detect ? result = dbc_ie(item, battler) : result = dbc_ie(item)
    # If in battle
    if $game_temp.in_battle
      # Obtain pre-damaged HP
      cry_dmg = self.hp
      # Obtain damage applied
      $game_system.rtab_cry_detect ? self_dmg = self.damage[battler] : self_dmg = self.damage
      # Calculate current HP (for Collapse Changing Call)
      cry_dmg -= self_dmg  if self_dmg.to_i != 0
      # The Included module (Collapse Changing Call)
      call_collapse_change if cry_dmg <= 0
    end
    # Return with result
    return result
  end
end



#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  include Dalissa_Collapse
  include Dalissa_Cry
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  alias dbc_main main
  def main
    # Store original 'collapse' SE
    $game_system.default_ase  = [ $data_system.actor_collapse_se.name,
                                  $data_system.actor_collapse_se.pitch ]
    $game_system.default_ese  = [ $data_system.enemy_collapse_se.name,
                                  $data_system.enemy_collapse_se.pitch ]
    # Perform the original call
    dbc_main
    # Restore original 'collapse' SE
    $data_system.actor_collapse_se.name   = $game_system.default_ase[0]
    $data_system.actor_collapse_se.pitch  = $game_system.default_ase[1]
    $data_system.enemy_collapse_se.name   = $game_system.default_ese[0]
    $data_system.enemy_collapse_se.pitch  = $game_system.default_ese[1]
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 2 : start action)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_scream update_phase4_step2
  def update_phase4_step2(battler = @active_battler)
    # Do not perform here if Animated Battlers is detected
  unless $game_system.anim_cry_detect == true
      # Obtain & Play Battle Cries
      perform_cry(battler)
    end 
    # Perform original routine
    if $game_system.rtab_cry_detect == true
      update_phase4_step2_scream(battler)
    else
      update_phase4_step2_scream
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 3 : animation for action performer)
  #-------------------------------------------------------------------------- 
  alias dbc_update_phase4_step3 update_phase4_step3
  def update_phase4_step3(battler = @active_battler)
    # Perform original routine
    if $game_system.rtab_cry_detect == true
      dbc_update_phase4_step3(battler)
    else
      dbc_update_phase4_step3
    end
    # Only perform if using Animated Battlers
    if $game_system.anim_cry_detect == true
      if $battle_charge == true
        # Obtain & Play Battle Cries
        perform_cry(battler)
        # Reset Flag
        $battle_charge = false
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 3 : animation for action performer)
  #-------------------------------------------------------------------------- 
  alias dbc_up4s4 update_phase4_step4
  def update_phase4_step4(battler = @active_battler)
    # Loop through all targetted battlers
    for target in ($game_system.rtab_cry_detect ? battler.target : @target_battlers)
      # Calculate for successful hit
      dbc_damage = ($game_system.rtab_cry_detect ? target.damage[battler] : target.damage)
      dbc_critical = ($game_system.rtab_cry_detect ? target.critical[battler] : target.critical)
      # If damage DID occur
      if dbc_damage.is_a?(Numeric) and dbc_damage > 0
        bcry_temp = {}
        battlecry = nil
        # Obtain Battle Cries for Enemies
        if target.is_a?(Game_Enemy)
          battlecry = choosecry2(target.id, $game_system.enemy_cry_struck, $game_system.enemy_cry_struck_r)
          if dbc_critical
            battlecry = choosecry2(target.id, $game_system.enemy_cry_critical, $game_system.enemy_cry_critical_r)
          end
        else
          battlecry = choosecry2(target.id, $game_system.actor_cry_struck, $game_system.actor_cry_struck_r)
          if dbc_critical
            battlecry = choosecry2(target.id, $game_system.actor_cry_critical, $game_system.actor_cry_critical_r)
          end
        end
        # Perform the cry
        play_cry(battlecry)
        # Erase Battle Cry
        battlecry = nil
      end
    end
    # Perform the original call
    if $game_system.rtab_cry_detect
      dbc_up4s4(battler)
    else
      dbc_up4s4
    end
  end 
  #--------------------------------------------------------------------------
  # * Retrieve & Perform the Cry
  #--------------------------------------------------------------------------
  def perform_cry(battler)
    # Re-Set Battle Cry to empty
    battlecry = nil
    # Create temporary hash
    bcry_temp = {}
    # Obtain Battle Cries for Enemies
    if battler.is_a?(Game_Enemy)
      # Branch according to each action
      case battler.current_action.kind
      when 0  # basic
        battlecry = choosecry(battler.id, $game_system.enemy_cry_attack, $game_system.enemy_cry_attack_i, $game_system.enemy_cry_attack_r, $game_system.enemy_cry_attack_r_i, battler.weapon_id)
        # If blocking
        if battler.current_action.basic == 1
          battlecry = choosecry2(battler.id, $game_system.enemy_cry_block, $game_system.enemy_cry_block_r)
        end
        # If escaping
        if battler.current_action.basic == 2
          battlecry = choosecry2(battler.id, $game_system.enemy_cry_escape, $game_system.enemy_cry_escape_r)
        end
        # If resting
        if battler.current_action.basic == 3
          battlecry = nil
        end
      when 1  # skill
        battlecry = choosecry(battler.id, $game_system.enemy_cry_skill, $game_system.enemy_cry_skill_i, $game_system.enemy_cry_skill_r, $game_system.enemy_cry_skill_r_i, battler.current_action.skill_id)
      when 2  # item
        battlecry = choosecry(battler.id, $game_system.enemy_cry_item, $game_system.enemy_cry_item_i, $game_system.enemy_cry_item_r, $game_system.enemy_cry_item_r_i, battler.current_action.item_id)
      end
    # otherwise, Obtain Battle Cries for Actors
    else
      # Branch according to each action
      case battler.current_action.kind
      when 0  # basic
        battlecry = choosecry(battler.id, $game_system.actor_cry_attack, $game_system.actor_cry_attack_i, $game_system.actor_cry_attack_r, $game_system.actor_cry_attack_r_i, battler.weapon_id)
        # If blocking
        if battler.current_action.basic == 1
          battlecry = choosecry2(battler.id, $game_system.actor_cry_block, $game_system.actor_cry_block_r)
        end
        # If escaping
        if battler.current_action.basic == 2
          battlecry = choosecry2(battler.id, $game_system.actor_cry_escape, $game_system.actor_cry_escape_r)
          end
        # If resting
        if battler.current_action.basic == 3
          battlecry = nil
        end
      when 1  # skill
        battlecry = choosecry(battler.id, $game_system.actor_cry_skill, $game_system.actor_cry_skill_i, $game_system.actor_cry_skill_r, $game_system.actor_cry_skill_r_i, battler.current_action.skill_id)
      when 2  # item
        battlecry = choosecry(battler.id, $game_system.actor_cry_item, $game_system.actor_cry_item_i, $game_system.actor_cry_item_r, $game_system.actor_cry_item_r_i, battler.current_action.item_id)
      end
    end
    # Perform the cry
    play_cry(battlecry)
    # Erase Battle Cry
    battlecry = nil
  end
  #--------------------------------------------------------------------------
  # * Choose the cry
  #--------------------------------------------------------------------------
  def choosecry(dbc_battler, dbc_main, dbc_i, dbc_r, dbc_r_i, dbc_id)
    # Create empty hash for substitutions
    dbc_temp  = {}
    dbc_temp2 = {}
    dbc_cry   = []
    dbc_cry2  = []
    # Set basic cry
    dbc_cry     = dbc_main[dbc_battler]   if dbc_main.include?(dbc_battler)
    # Fill temp value & obtain battlecry (Individual)
    dbc_temp    =   dbc_i[dbc_battler]    if dbc_i.include?(dbc_battler)
    dbc_cry     =   dbc_temp[dbc_id]      if dbc_temp[dbc_id]     != nil
    # Fill temp value & obtain battlecry (Random)
    dbc_temp    =   nil # Empty the temp value
    dbc_temp    =   dbc_r[dbc_battler]    if dbc_r.include?(dbc_battler)
    if dbc_temp !=  nil
      dbc_rand  =   rand(dbc_temp.size)
      dbc_cry   =   dbc_temp[dbc_rand]    if dbc_temp[dbc_rand]   != nil
    end
    # Fill temp value & obtain battlecry (Individual Randoms)
    dbc_temp = nil    # Empty the temp value
    dbc_temp    =   dbc_r_i[dbc_battler]  if dbc_r_i.include?(dbc_battler)
    if dbc_temp !=  nil
      dbc_temp2 =   dbc_temp[dbc_id]      if dbc_temp[dbc_id]     != nil
      dbc_rand  =   rand(dbc_temp2.size)  if dbc_temp2            != nil
      dbc_cry   =   dbc_temp2[dbc_rand]   if dbc_temp2[dbc_rand]  != nil
    end
    # Reset to nil if empty
    dbc_cry = nil if dbc_cry == []
    # Return if nil
    return if dbc_cry == nil
    # Return with default pitch if converted string
    unless dbc_cry.is_a?(Array)
      dbc_cry2 = [dbc_cry, 100]
      return dbc_cry2
    end
    # Return the cry
    return dbc_cry
  end 
  #--------------------------------------------------------------------------
  # * Choose the cry (smaller version)
  #--------------------------------------------------------------------------
  def choosecry2(dbc_battler, dbc_main, dbc_r)
    # Create empty hash for substitutions
    dbc_temp = {}
    dbc_cry   = []
    dbc_cry2  = []
    # Set basic cry
    dbc_cry     = dbc_main[dbc_battler] if dbc_main.include?(dbc_battler)
    # Fill temp value & obtain battlecry (Random)
    dbc_temp    = dbc_r[dbc_battler]    if dbc_r.include?(dbc_battler)
    dbc_rand    = rand(dbc_temp.size)   if dbc_temp != nil
    dbc_cry     = dbc_temp[dbc_rand]    if dbc_temp[dbc_rand] != nil
    # Reset to nil if empty
    dbc_cry = nil if dbc_cry == []
    # Return if nil
    return if dbc_cry == nil
    # Return with default pitch if converted string
    unless dbc_cry.is_a?(Array)
      dbc_cry2 = [dbc_cry, 100]
      return dbc_cry2
    end
    # Return the cry
    return dbc_cry
  end
end



#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within
#  the Scene_Battle class.
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  # Special note:  When the normal method for detecting RTAB fails, I do this
  alias bcry_initialize initialize
  def initialize
    # Perform the original routine
    bcry_initialize
    # If RTAB's 'zoom' feature is present
    if @real_zoom != nil
      # Set the RTAB detector to 'true'
      $game_system.rtab_cry_detect = true
    end
  end
end



#==============================================================================
# ** Sprite_Battler
#------------------------------------------------------------------------------
#  This sprite is used to display the battler.  It observes the Game_Character
#  class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias bcry_initialize initialize
  def initialize(viewport, battler = nil)
    # Perform the original routine
    bcry_initialize(viewport,battler)
    # If Animated Battler's 'battler offset' feature is present
    if @battler_offset != nil
      # Set the Animated Battlers detector to 'true'
      $game_system.anim_cry_detect = true
    end
  end
end