Change skill animation and element depend on weapon elemental

● ARCHIVED · READ-ONLY
Started by Kuro Neko 14 posts View original ↗
  1. Is there a way to change skill's animation depend on weapon's element? Example: I have skill 20, which have skill animation is 1 (non-elemental). And, when i equipped the actor with weapon a with fire element. Well, i set the weapon animation is animation 2 (fire hit). But, the normal attack gonna be fire hit, but that skill will only a non-elemental hit animation and also will only have the default's element. So, i want that skill 20 will also change skill animation to 2 and skill element to fire when the fire weapon is equipped, and will be back to non-element when a non-element equipped, too.
  2. Something you can do easily is to make it so the skill displays the weapon's animation rather than the same animation every time it's used.  I'm assuming your weapon is set to "Fire Hit" for its normal attack animation.  What you can do is set the skill's animation to "Normal Attack" which is located at the top of the drop-down list, before the numbered animations.  This will change the skill's animation to whatever your equipped weapon is set to.  Thus, it will show a fire hit for a fire-based weapon, a regular hit for a non-elemental weapon, etc, depending on that weapon's actual settings. 
  3. Cutie Mark Keldeo said:
    Something you can do easily is to make it so the skill displays the weapon's animation rather than the same animation every time it's used.  I'm assuming your weapon is set to "Fire Hit" for its normal attack animation.  What you can do is set the skill's animation to "Normal Attack" which is located at the top of the drop-down list, before the numbered animations.  This will change the skill's animation to whatever your equipped weapon is set to.  Thus, it will show a fire hit for a fire-based weapon, a regular hit for a non-elemental weapon, etc, depending on that weapon's actual settings. 
    But, this is just an example -_-

    I mean, if that skill 20 have animation that will slash many times, but the normal attack will only attack one time, so it won't be as i want.
  4. This is a bit more complicated than I initially thought.  So basically, you want a separate animation for each element that the skill could take on, but not the same as the normal attack (in other words it can be any animation potentially).  Admittedly this is probably beyond my skill level, but I'll give it a shot.  If anyone with some coding experience is reading this, I'm thinking of a conditional ("if" branch) that displays different animations for this skill depending on the equipped weapon's element.  I can already sense compatibility issues with multiple elements, but we'll see how this goes. 
  5. Cutie Mark Keldeo said:
    This is a bit more complicated than I initially thought.  So basically, you want a separate animation for each element that the skill could take on, but not the same as the normal attack (in other words it can be any animation potentially).  Admittedly this is probably beyond my skill level, but I'll give it a shot.  If anyone with some coding experience is reading this, I'm thinking of a conditional ("if" branch) that displays different animations for this skill depending on the equipped weapon's element.  I can already sense compatibility issues with multiple elements, but we'll see how this goes. 
    Thank you so much  :D
  6. Well,maybe you can use Victor Sant basic attack replace...

    Excuse me for my bad English.
  7. Megablackdragon31 said:
    Well,maybe you can use Victor Sant basic attack replace...

    Excuse me for my bad English.
    Can you give me a link of that script?
  8. Oops! I`m sorry,here you go:

    http://victorscripts.wordpress.com/rpg-maker-vx-ace/gameplay-scripts/custom-basic-actions/

    Sadly that link is broken temporally (thanks to dropbox) but i got a backup of the script,just remember to put basic module above custom basic actions.

    Victor Sant Basic Module

    Spoiler
    #==============================================================================
    # ** Victor Engine - Basic Module
    #------------------------------------------------------------------------------
    # Author : Victor Sant
    #
    # Version History:
    #  v 1.00 - 2011.12.19 > First release
    #  v 1.01 - 2011.12.21 > Added Event Troop notes
    #  v 1.02 - 2011.12.22 > Added character frames value
    #  v 1.03 - 2011.12.30 > Added Actor and Enemy notes
    #  v 1.04 - 2012.01.01 > Added party average level and map actors
    #  v 1.05 - 2012.01.04 > Compatibility with Characters Scripts
    #  v 1.06 - 2012.01.07 > Compatibility with Fog and Light Effect
    #                      > Added new Sprite Character functions
    #  v 1.07 - 2012.01.11 > Compatibility with Control Text and Codes
    #  v 1.08 - 2012.01.13 > Compatibility with Trait Control
    #  v 1.09 - 2012.01.15 > Fixed the Regular Expressions problem with "" and “”
    #  v 1.10 - 2012.01.18 > Compatibility with Automatic Battlers
    #  v 1.11 - 2012.01.26 > Compatibility with Followers Options
    #                        Compatibility with Animated Battle beta
    #  v 1.12 - 2012.02.08 > Compatibility with Animated Battle
    #  v 1.13 - 2012.02.18 > Fix for non RTP dependant encrypted projects
    #  v 1.14 - 2012.03.11 > Better version handling and required messages
    #  v 1.15 - 2012.03.11 > Added level variable for enemies (to avoid crashes)
    #  v 1.16 - 2012.03.21 > Compatibility with Follower Control
    #  v 1.17 - 2012.03.22 > Compatibility with Follower Control new method
    #  v 1.18 - 2012.03.22 > Added Battler Types tag support
    #  v 1.19 - 2012.05.20 > Compatibility with Map Turn Battle
    #  v 1.20 - 2012.05.21 > Fix for older RMVXa versions
    #  v 1.21 - 2012.05.29 > Compatibility with Pixel Movement
    #  v 1.22 - 2012.07.02 > Compatibility with Terrain States
    #  v 1.23 - 2012.07.03 > Fix for Pixel Movement
    #  v 1.24 - 2012.07.17 > Compatibility with Critical Hit Effects
    #  v 1.25 - 2012.07.24 > Compatibility with Moving Plaforms
    #  v 1.26 - 2012.07.30 > Compatibility with Automatic Battlers
    #  v 1.27 - 2012.08.01 > Compatibility with Custom Slip Effect
    #  v 1.28 - 2012.08.01 > Compatibility with Custom Slip Effect v 1.01
    #  v 1.29 - 2012.11.03 > Fixed returning value division by 0 error.
    #  v 1.30 - 2012.12.13 > Compatibility with State Graphics
    #  v 1.31 - 2012.12.16 > Compatibility with Active Time Battle
    #  v 1.32 - 2012.12.24 > Compatibility with Active Time Battle v 1.01
    #  v 1.33 - 2012.12.30 > Compatibility with Leap Attack
    #  v 1.34 - 2013.01.07 > Compatibility with Critical Hit Effects v 1.01
    #  v 1.35 - 2013.02.13 > Compatibility with Cooperation Skills
    #------------------------------------------------------------------------------
    #   This is the basic script for the system from Victory Engine and is
    # required to use the scripts from the engine. This script offer some new
    # functions to be used within many scripts of the engine.
    #------------------------------------------------------------------------------
    # Compatibility
    #   Required for the Victor Engine
    #
    # * Overwrite methods
    #   class << Cache
    #     def self.character(filename)
    #
    #   class Sprite_Character < Sprite_Base
    #     def set_character_bitmap
    #
    #   class Game_Battler < Game_BattlerBase
    #     def item_effect_recover_hp(user, item, effect)
    #     def item_effect_recover_mp(user, item, effect)
    #     def item_effect_gain_tp
    #
    # * Alias methods
    #   class Game_Interpreter
    #     def command_108
    #
    #   class Window_Base < Window
    #     def convert_escape_characters(text)
    #
    #------------------------------------------------------------------------------
    # Instructions:
    #  To instal the script, open you script editor and paste this script on
    #  a new section bellow the Materials section.
    #
    #------------------------------------------------------------------------------
    # New functions
    #
    # * Random number between two vales
    #   rand_between(min, max)
    #    min : min value
    #    max : max value
    #   Can be called from any class, this method return an random value between
    #   two specific numbers
    #
    # * Random array value
    #   <Array>.random
    #   <Array>.random!
    #   Returns a random object from the array, the method .random! is destructive,
    #   removing the value returned from the array.
    #
    # * Sum of the numeric values of a array
    #   <Array>.sum
    #   Returns the sum of all numeric values
    #
    # * Average of all numeric values from the array
    #   <Array>.average(float = false)
    #    float : float flag
    #   Returns the average of all numeric values, if floa is true, the value
    #   returned is a float, otherwise it's a integer.
    #
    # * Note for events
    #   <Event>.note
    #   By default, events doesn't have note boxes. This command allows to use
    #   comments as note boxes, following the same format as the ones on the
    #   database. Returns all comments on the active page of the event.
    #
    # * Comment calls
    #   <Event>.comment_call
    #   Another function for comment boxes, by default, they have absolutely no
    #   effect in game when called. But this method allows to make the comment
    #   box to behave like an script call, but with the versatility of the
    #   note boxes. Remember that the commands will only take effect if there
    #   is scripts to respond to the comment code.
    #
    #==============================================================================

    #==============================================================================
    # ** Victor Engine
    #------------------------------------------------------------------------------
    #   Setting module for the Victor Engine
    #==============================================================================

    module Victor_Engine
      #--------------------------------------------------------------------------
      # * New method: required_script
      #--------------------------------------------------------------------------
      def self.required_script(name, req, version, type = 0)
        if type != :bellow && (!$imported[req] || $imported[req] < version)
          msg = "The script '%s' requires the script\n"
          case type
          when :above
            msg += "'%s' v%s or higher above it to work properly\n"
          else
            msg += "'%s' v%s or higher to work properly\n"
          end
          msg += "Go to http://victorscripts.wordpress.com/ to download this script."
          self.exit_message(msg, name, req, version)
        elsif type == :bellow && $imported[req]
          msg =  "The script '%s' requires the script\n"
          msg += "'%s' to be put bellow it\n"
          msg += "move the scripts to the proper position"
          self.exit_message(msg, name, req, version)
        end
      end
      #--------------------------------------------------------------------------
      # * New method: exit_message
      #--------------------------------------------------------------------------
      def self.exit_message(message, name, req, version)
        name = self.script_name(name)
        req  = self.script_name(req)
        msgbox(sprintf(message, name, req, version))
        exit
      end
      #--------------------------------------------------------------------------
      # * New method: script_name
      #--------------------------------------------------------------------------
      def self.script_name(name, ext = "VE")
        name = name.to_s.gsub("_", " ").upcase.split
        name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
        name.join(" ")
      end
    end

    $imported ||= {}
    $imported[:ve_basic_module] = 1.35

    #==============================================================================
    # ** Object
    #------------------------------------------------------------------------------
    #  This class is the superclass of all other classes.
    #==============================================================================

    class Object
      #--------------------------------------------------------------------------
      # * Include setting module
      #--------------------------------------------------------------------------
      include Victor_Engine
      #-------------------------------------------------------------------------
      # * New method: rand_between
      #-------------------------------------------------------------------------
      def rand_between(min, max)
        min + rand(max - min + 1)
      end
      #--------------------------------------------------------------------------
      # * New method: numeric?
      #--------------------------------------------------------------------------
      def numeric?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: string?
      #--------------------------------------------------------------------------
      def string?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: array?
      #--------------------------------------------------------------------------
      def array?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: float?
      #--------------------------------------------------------------------------
      def float?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: symbol?
      #--------------------------------------------------------------------------
      def symbol?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: item?
      #--------------------------------------------------------------------------
      def item?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: skill?
      #--------------------------------------------------------------------------
      def skill?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: file_exist?
      #--------------------------------------------------------------------------
      def file_exist?(path, filename)
        $file_list ||= {}
        $file_list[path + filename] ||= file_test(path, filename)
        $file_list[path + filename]
      end
      #--------------------------------------------------------------------------
      # * New method: get_file_list
      #--------------------------------------------------------------------------
      def file_test(path, filename)
        bitmap = Cache.load_bitmap(path, filename) rescue nil
        bitmap ? true : false
      end
      #--------------------------------------------------------------------------
      # * New method: character_exist?
      #--------------------------------------------------------------------------
      def character_exist?(filename)
        file_exist?("Graphics/Characters/", filename)
      end
      #--------------------------------------------------------------------------
      # * New method: battler_exist?
      #--------------------------------------------------------------------------
      def battler_exist?(filename)
        file_exist?("Graphics/Battlers/", filename)
      end
      #--------------------------------------------------------------------------
      # * New method: face_exist?
      #--------------------------------------------------------------------------
      def face_exist?(filename)
        file_exist?("Graphics/Faces/", filename)
      end
      #--------------------------------------------------------------------------
      # * New method: get_filename
      #--------------------------------------------------------------------------
      def get_filename
        "[\"'“‘]([^\"'”‘”’]+)[\"'”’]"
      end
      #--------------------------------------------------------------------------
      # * New method: get_all_values
      #--------------------------------------------------------------------------
      def get_all_values(value1, value2 = nil)
        value2 = value1 unless value2
        /<#{value1}>((?:[^<]|<[^\/])*)<\/#{value2}>/im
      end
      #--------------------------------------------------------------------------
      # * New method: make_symbol
      #--------------------------------------------------------------------------
      def make_symbol(string)
        string.downcase.gsub(" ", "_").to_sym
      end
      #--------------------------------------------------------------------------
      # * New method: make_string
      #--------------------------------------------------------------------------
      def make_string(symbol)
        symbol.to_s.gsub("_", " ").upcase
      end
      #--------------------------------------------------------------------------
      # * New method: returning_value
      #--------------------------------------------------------------------------
      def returning_value(i, x)
        y = [x * 2, 1].max
        i % y  >= x ? (x * 2) - i % y : i % y
      end
      #--------------------------------------------------------------------------
      # New method: in_rect?
      #--------------------------------------------------------------------------
      def in_rect?(w, h, x1, y1, x2, y2, fx = 0)
        aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
        bx > ax - aw && bx < ax + aw && by > ay - ah && by < ay + ah
      end
      #--------------------------------------------------------------------------
      # New method: in_radius?
      #--------------------------------------------------------------------------
      def in_radius?(w, h, x1, y1, x2, y2, fx = 0)
        aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)
        ((bx - ax) ** 2 / aw ** 2) + ((by - ay) ** 2 / ah ** 2) <= 1
      end
      #--------------------------------------------------------------------------
      # New method: setup_area
      #--------------------------------------------------------------------------
      def setup_area(w, h, x1, y1, x2, y2, fx)
        aw = w
        ah = h * aw
        ax = x1
        ay = y1
        bx = x2
        by = y2
        bx += fx / 4 if ax > bx
        bx -= fx / 4 if ax < bx
        [aw, ah, ax, ay, bx, by]
      end
      #--------------------------------------------------------------------------
      # * New method: get_param_id
      #--------------------------------------------------------------------------
      def get_param_id(text)
        case text.upcase
        when "MAXHP", "HP" then 0
        when "MAXMP", "MP" then 1
        when "ATK" then 2
        when "DEF" then 3
        when "MAT" then 4
        when "MDF" then 5
        when "AGI" then 6
        when "LUK" then 7
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_param_text
      #--------------------------------------------------------------------------
      def get_param_text(id)
        case id
        when 0 then "HP"
        when 1 then "MP"
        when 2 then "ATK"
        when 3 then "DEF"
        when 4 then "MAT"
        when 5 then "MDF"
        when 6 then "AGI"
        when 7 then "LUK"
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_xparam_id
      #--------------------------------------------------------------------------
      def get_xparam_id(text)
        case text.upcase
        when "HIT" then 0
        when "EVA" then 1
        when "CRI" then 2
        when "CEV" then 3
        when "MEV" then 4
        when "MRF" then 5
        when "CNT" then 6
        when "HRG" then 7
        when "MRG" then 8
        when "TRG" then 9
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_xparam_text
      #--------------------------------------------------------------------------
      def get_xparam_text(id)
        case id
        when 0 then "HIT"
        when 1 then "EVA"
        when 2 then "CRI"
        when 3 then "CEV"
        when 4 then "MEV"
        when 5 then "MRF"
        when 6 then "CNT"
        when 7 then "HRG"
        when 8 then "MRG"
        when 9 then "TRG"
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_sparam_id
      #--------------------------------------------------------------------------
      def get_sparam_id(text)
        case text.upcase
        when "TGR" then 0
        when "GRD" then 1
        when "REC" then 2
        when "PHA" then 3
        when "MCR" then 4
        when "TCR" then 5
        when "PDR" then 6
        when "MDR" then 7
        when "FDR" then 8
        when "EXR" then 9
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_sparam_text
      #--------------------------------------------------------------------------
      def get_sparam_text(id)
        case id
        when 0 then "TGR"
        when 1 then "GRD"
        when 2 then "REC"
        when 3 then "PHA"
        when 4 then "MCR"
        when 5 then "TCR"
        when 6 then "PDR"
        when 7 then "MDR"
        when 8 then "FDR"
        when 9 then "EXR"
        end
      end
      #--------------------------------------------------------------------------
      # * New method: get_cond
      #--------------------------------------------------------------------------
      def get_cond(text)
        case text.upcase
        when "HIGHER"    then ">"
        when "LOWER"     then "<"
        when "EQUAL"     then "=="
        when "DIFFERENT" then "!="
        else "!="
        end
      end
    end

    #==============================================================================
    # ** String
    #------------------------------------------------------------------------------
    #  The string class. Can handle character sequences of arbitrary lengths.
    #==============================================================================

    class String
      #--------------------------------------------------------------------------
      # * New method: string?
      #--------------------------------------------------------------------------
      def string?
        return true
      end
    end

    #==============================================================================
    # ** String
    #------------------------------------------------------------------------------
    #  The class that represents symbols.
    #==============================================================================

    class Symbol
      #--------------------------------------------------------------------------
      # * New method: symbol?
      #--------------------------------------------------------------------------
      def symbol?
        return true
      end
    end

    #==============================================================================
    # ** Numeric
    #------------------------------------------------------------------------------
    #  This is the abstract class for numbers.
    #==============================================================================

    class Numeric
      #--------------------------------------------------------------------------
      # * New method: numeric?
      #--------------------------------------------------------------------------
      def numeric?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: ceil?
      #--------------------------------------------------------------------------
      def ceil?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: to_ceil
      #--------------------------------------------------------------------------
      def to_ceil
        self > 0 ? self.abs.ceil : -self.abs.ceil
      end
    end

    #==============================================================================
    # ** Float
    #------------------------------------------------------------------------------
    #  This is the abstract class for the floating point values.
    #==============================================================================

    class Float
      #--------------------------------------------------------------------------
      # * New method: float?
      #--------------------------------------------------------------------------
      def float?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: ceil?
      #--------------------------------------------------------------------------
      def ceil?
        self != self.ceil
      end
    end

    #==============================================================================
    # ** Array     
    #------------------------------------------------------------------------------
    #  This class store arbitrary Ruby objects.
    #==============================================================================

    class Array
      #--------------------------------------------------------------------------
      # * New method: array?
      #--------------------------------------------------------------------------
      def array?
        return true
      end
      #-------------------------------------------------------------------------
      # * New method: random
      #-------------------------------------------------------------------------
      def random
        self[rand(size)]
      end
      #-------------------------------------------------------------------------
      # * New method: random!
      #-------------------------------------------------------------------------
      def random!
        self.delete_at(rand(size))
      end
      #---------------------------------------------------------------------------
      # * New method: sum
      #---------------------------------------------------------------------------
      def sum
        self.inject(0) {|r, n| r += (n.numeric? ? n : 0)}
      end
      #---------------------------------------------------------------------------
      # * New method: average
      #---------------------------------------------------------------------------
      def average(float = false)
        self.sum / [(float ? size.to_f : size.to_i), 1].max
      end
      #---------------------------------------------------------------------------
      # * New method: next_item
      #---------------------------------------------------------------------------
      def next_item
        item = self.shift
        self.push(item)
        item
      end
      #---------------------------------------------------------------------------
      # * New method: previous_item
      #---------------------------------------------------------------------------
      def previous_item
        item = self.pop
        self.unshift(item)
        item
      end
    end

    #==============================================================================
    # ** RPG::Troop::page
    #------------------------------------------------------------------------------
    #  This is the data class for battle events (pages).
    #==============================================================================

    class RPG::Troop::page
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        return "" if !@list || @list.size <= 0
        comment_list = []
        @list.each do |item|
          next unless item && (item.code == 108 || item.code == 408)
          comment_list.push(item.parameters[0])
        end
        comment_list.join("\r\n")
      end
    end

    #==============================================================================
    # ** RPG::UsableItem
    #------------------------------------------------------------------------------
    #  This is the superclass for skills and items.
    #==============================================================================

    class RPG::UsableItem < RPG::BaseItem
      #--------------------------------------------------------------------------
      # * New method: for_all_targets?
      #--------------------------------------------------------------------------
      def for_all_targets?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: element_set
      #--------------------------------------------------------------------------
      def element_set
        [damage.element_id]
      end
    end

    #==============================================================================
    # ** RPG::Skill
    #------------------------------------------------------------------------------
    #  This is the data class for skills.
    #==============================================================================

    class RPG::Skill < RPG::UsableItem
      #--------------------------------------------------------------------------
      # * New method: item?
      #--------------------------------------------------------------------------
      def item?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: skill?
      #--------------------------------------------------------------------------
      def skill?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: type_set
      #--------------------------------------------------------------------------
      def type_set
        [stype_id]
      end  
    end

    #==============================================================================
    # ** RPG::Item
    #------------------------------------------------------------------------------
    #  This is the data class for items.
    #==============================================================================

    class RPG::Item < RPG::UsableItem
      #--------------------------------------------------------------------------
      # * New method: item?
      #--------------------------------------------------------------------------
      def item?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: skill?
      #--------------------------------------------------------------------------
      def skill?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: type_set
      #--------------------------------------------------------------------------
      def type_set
        [itype_id]
      end
    end

    #==============================================================================
    # ** Cache
    #------------------------------------------------------------------------------
    #  This module loads each of graphics, creates a Bitmap object, and retains it.
    # To speed up load times and conserve memory, this module holds the created
    # Bitmap object in the internal hash, allowing the program to return
    # preexisting objects when the same bitmap is requested again.
    #==============================================================================

    class << Cache
      #--------------------------------------------------------------------------
      # * Overwrite method: character
      #--------------------------------------------------------------------------
      def character(filename, hue = 0)
        load_bitmap("Graphics/Characters/", filename, hue)
      end
      #--------------------------------------------------------------------------
      # * New method: cache
      #--------------------------------------------------------------------------
      def cache
        @cache
      end
    end

    #==============================================================================
    # ** BattleManager
    #------------------------------------------------------------------------------
    #  This module handles the battle processing
    #==============================================================================

    class << BattleManager
      #--------------------------------------------------------------------------
      # * New method: all_battle_members
      #--------------------------------------------------------------------------
      def all_battle_members
        $game_party.members + $game_troop.members
      end
      #--------------------------------------------------------------------------
      # * New method: all_dead_members
      #--------------------------------------------------------------------------
      def all_dead_members
        $game_party.dead_members + $game_troop.dead_members
      end
      #--------------------------------------------------------------------------
      # * New method: all_movable_members
      #--------------------------------------------------------------------------
      def all_movable_members
        $game_party.movable_members + $game_troop.movable_members
      end
    end

    #==============================================================================
    # ** Game_BattlerBase
    #------------------------------------------------------------------------------
    #  This class handles battlers. It's used as a superclass of the Game_Battler
    # classes.
    #==============================================================================

    class Game_BattlerBase
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader   :buffs
      #--------------------------------------------------------------------------
      # * New method: get_param
      #--------------------------------------------------------------------------
      def get_param(text)
        case text.upcase
        when "MAXHP" then self.mhp
        when "MAXMP" then self.mmp
        when "MAXTP" then self.max_tp
        else eval("self.#{text.downcase}")
        end
      end
      #--------------------------------------------------------------------------
      # * New method: type
      #--------------------------------------------------------------------------
      def type
        list = []
        get_all_notes.scan(/<BATTLER TYPE: ((?:\w+ *,? *)+)>/i) do
          $1.scan(/(\d+)/i) { list.push(make_symbol($1)) }
        end
        list.uniq
      end
      #--------------------------------------------------------------------------
      # * New method: danger?
      #--------------------------------------------------------------------------
      def danger?
        hp < mhp * 25 / 100
      end
      #--------------------------------------------------------------------------
      # * New method: sprite
      #--------------------------------------------------------------------------
      def sprite
        valid = SceneManager.scene_is?(Scene_Battle) && SceneManager.scene.spriteset
        valid ? SceneManager.scene.spriteset.sprite(self) : nil
      end
      #--------------------------------------------------------------------------
      # * New method: element_set
      #--------------------------------------------------------------------------
      def element_set(item)
        element_set  = item.element_set
        element_set += atk_elements if item.damage.element_id < 0
        element_set.delete(0)
        element_set.compact
      end
      #--------------------------------------------------------------------------
      # * New method: add_state_normal
      #--------------------------------------------------------------------------
      def add_state_normal(state_id, rate = 1, user = self)
        chance  = rate
        chance *= state_rate(state_id)
        chance *= luk_effect_rate(user)
        add_state(state_id) if rand < chance
      end
      #--------------------------------------------------------------------------
      # * New method: damaged?
      #--------------------------------------------------------------------------
      def damaged?
        @result.hp_damage != 0 || @result.mp_damage != 0 || @result.tp_damage != 0
      end
      #--------------------------------------------------------------------------
      # * New method: mtp
      #--------------------------------------------------------------------------
      def mtp
        return 100
      end
    end

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

    class Game_Battler < Game_BattlerBase
      #--------------------------------------------------------------------------
      # * Overwrite method: item_effect_recover_hp
      #--------------------------------------------------------------------------
      def item_effect_recover_hp(user, item, effect)
        value = item_value_recover_hp(user, item, effect).to_i
        @result.hp_damage -= value
        @result.success    = true
        self.hp += value
      end
      #--------------------------------------------------------------------------
      # * Overwrite method: item_effect_recover_mp
      #--------------------------------------------------------------------------
      def item_effect_recover_mp(user, item, effect)
        value = item_value_recover_mp(user, item, effect).to_i
        @result.mp_damage -= value
        @result.success    = true if value != 0
        self.mp += value
      end
      #--------------------------------------------------------------------------
      # * Overwrite method: item_effect_gain_tp
      #--------------------------------------------------------------------------
      def item_effect_gain_tp(user, item, effect)
        value    = item_value_recover_tp(user, item, effect)
        self.tp += value
      end
      #--------------------------------------------------------------------------
      # * New method: item_value_recover_hp
      #--------------------------------------------------------------------------
      def item_value_recover_hp(user, item, effect)
        value  = (mhp * effect.value1 + effect.value2) * rec
        value *= user.pha if item.is_a?(RPG::Item)
        value
      end
      #--------------------------------------------------------------------------
      # * New method: item_value_recover_mp
      #--------------------------------------------------------------------------
      def item_value_recover_mp(user, item, effect)
        value  = (mmp * effect.value1 + effect.value2) * rec
        value *= user.pha if item.is_a?(RPG::Item)
        value
      end
      #--------------------------------------------------------------------------
      # * New method: item_value_recover_tp
      #--------------------------------------------------------------------------
      def item_value_recover_tp(user, item, effect)
        effect.value1.to_i
      end
      #--------------------------------------------------------------------------
      # * New method: cri_rate
      #--------------------------------------------------------------------------
      def cri_rate(user, item)
        user.cri
      end
      #--------------------------------------------------------------------------
      # * New method: cri_eva
      #--------------------------------------------------------------------------
      def cri_eva(user, item)
        cev
      end
      #--------------------------------------------------------------------------
      # * New method: setup_critical
      #--------------------------------------------------------------------------
      def setup_critical(user, item)
        cri_rate(user, item) * (1 - cri_eva(user, item))
      end
    end

    #==============================================================================
    # ** Game_Enemy
    #------------------------------------------------------------------------------
    #  This class handles enemy characters. It's used within the Game_Troop class
    # ($game_troop).
    #==============================================================================

    class Game_Enemy < Game_Battler
      #--------------------------------------------------------------------------
      # * New method: id
      #--------------------------------------------------------------------------
      def id
        @enemy_id
      end
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        enemy ? enemy.note : ""
      end
      #--------------------------------------------------------------------------
      # * New method: get_all_notes
      #--------------------------------------------------------------------------
      def get_all_notes(*args)
        notes  = ""
        notes += note if !args.include?:)self)
        states.compact.each {|state| notes += state.note } if !args.include?:)state)
        notes
      end
      #--------------------------------------------------------------------------
      # * New method: get_all_objects
      #--------------------------------------------------------------------------
      def get_all_objects(*args)
        result = []
        result += [self] if !args.include?:)self)
        result += states.compact if !args.include?:)state)
        result
      end
      #--------------------------------------------------------------------------
      # * New method: level
      #--------------------------------------------------------------------------
      def level
        return 1
      end
      #--------------------------------------------------------------------------
      # * New method: skill_learn?
      #--------------------------------------------------------------------------
      def skill_learn?(skill)
        skill.skill? && skills.include?(skill)
      end
      #--------------------------------------------------------------------------
      # * New method: skills
      #--------------------------------------------------------------------------
      def skills
        (enemy_actions | added_skills).sort.collect {|id| $data_skills[id] }
      end
      #--------------------------------------------------------------------------
      # * New method: enemy_actions
      #--------------------------------------------------------------------------
      def enemy_actions
        enemy.actions.collect {|action| action.skill_id }
      end
    end

    #==============================================================================
    # ** Game_Actor
    #------------------------------------------------------------------------------
    #  This class handles actors. It's used within the Game_Actors class
    # ($game_actors) and referenced by the Game_Party class ($game_party).
    #==============================================================================

    class Game_Actor < Game_Battler
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        actor ? actor.note : ""
      end
      #--------------------------------------------------------------------------
      # * New method: hue
      #--------------------------------------------------------------------------
      def hue
        @hue ? @hue : 0
      end
      #--------------------------------------------------------------------------
      # * New method: get_all_notes
      #--------------------------------------------------------------------------
      def get_all_notes(*args)
        notes = ""
        notes += note if !args.include?:)self)
        notes += self.class.note if !args.include?:)class)
        equips.compact.each {|equip| notes += equip.note } if !args.include?:)equip)
        states.compact.each {|state| notes += state.note } if !args.include?:)state)
        notes
      end
      #--------------------------------------------------------------------------
      # * New method: get_all_objects
      #--------------------------------------------------------------------------
      def get_all_objects(*args)
        result = []
        result += [self] if !args.include?:)self)
        result += [self.class]   if !args.include?:)class)
        result += equips.compact if !args.include?:)equip)
        result += states.compact if !args.include?:)state)
        result
      end
      #--------------------------------------------------------------------------
      # * New method: in_active_party?
      #--------------------------------------------------------------------------
      def in_active_party?
        $game_party.battle_members.include?(self)
      end
      #--------------------------------------------------------------------------
      # * New method: in_reserve_party?
      #--------------------------------------------------------------------------
      def in_reserve_party?
        $game_party.reserve_members.include?(self)
      end
      #--------------------------------------------------------------------------
      # * New method: in_party?
      #--------------------------------------------------------------------------
      def in_party?
        $game_party.all_members.include?(self)
      end
      #--------------------------------------------------------------------------
      # * New method: map_animation
      #--------------------------------------------------------------------------
      def map_animation(id)
        $game_map.actors.each do |member|
          member.animation_id = id if member.actor == self
        end
      end
      #--------------------------------------------------------------------------
      # * New method: on_damage_floor
      #--------------------------------------------------------------------------
      def on_damage_floor?
        $game_player.on_damage_floor?
      end
    end

    #==============================================================================
    # ** Game_Unit
    #------------------------------------------------------------------------------
    #  This class handles units. It's used as a superclass of the Game_Party and
    # Game_Troop classes.
    #==============================================================================

    class Game_Unit
      #--------------------------------------------------------------------------
      # * New method: refresh
      #--------------------------------------------------------------------------
      def refresh
        members.each {|member| member.refresh }
      end
    end

    #==============================================================================
    # ** Game_Party
    #------------------------------------------------------------------------------
    #  This class handles the party. It includes information on amount of gold
    # and items. The instance of this class is referenced by $game_party.
    #==============================================================================

    class Game_Party < Game_Unit
      #--------------------------------------------------------------------------
      # * New method: average_level
      #--------------------------------------------------------------------------
      def average_level
        battle_members.collect {|actor| actor.level }.average
      end
      #--------------------------------------------------------------------------
      # * New method: reserve_members
      #--------------------------------------------------------------------------
      def reserve_members
        all_members - battle_members
      end
    end

    #==============================================================================
    # ** Game_Map
    #------------------------------------------------------------------------------
    #  This class handles maps. It includes scrolling and passage determination
    # functions. The instance of this class is referenced by $game_map.
    #==============================================================================

    class Game_Map
      #--------------------------------------------------------------------------
      # * New method: event_list
      #--------------------------------------------------------------------------
      def event_list
        events.values
      end
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        @map ? @map.note : ""
      end
      #--------------------------------------------------------------------------
      # * New method: vehicles
      #--------------------------------------------------------------------------
      def vehicles
        @vehicles
      end
      #--------------------------------------------------------------------------
      # * New method: map_events
      #--------------------------------------------------------------------------
      def map_events
        @map.events
      end
      #--------------------------------------------------------------------------
      # * New method: actors
      #--------------------------------------------------------------------------
      def actors
        [$game_player] + $game_player.followers.visible_followers
      end
    end

    #==============================================================================
    # ** Game_CharacterBase
    #------------------------------------------------------------------------------
    #  This class deals with characters. Common to all characters, stores basic
    # data, such as coordinates and graphics. It's used as a superclass of the
    # Game_Character class.
    #==============================================================================

    class Game_CharacterBase
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_accessor :move_speed
      attr_accessor :move_frequency
      #--------------------------------------------------------------------------
      # * New method: player?
      #--------------------------------------------------------------------------
      def player?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: event?
      #--------------------------------------------------------------------------
      def event?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: follower?
      #--------------------------------------------------------------------------
      def follower?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: vehicle?
      #--------------------------------------------------------------------------
      def vehicle?
        return false
      end
      #--------------------------------------------------------------------------
      # * New method: frames
      #--------------------------------------------------------------------------
      def frames
        return 3
      end
      #--------------------------------------------------------------------------
      # * New method: hue
      #--------------------------------------------------------------------------
      def hue
        @hue ? @hue : 0
      end
    end

    #==============================================================================
    # ** Game_Character
    #------------------------------------------------------------------------------
    #  This class deals with characters. It's used as a superclass of the
    # Game_Player and Game_Event classes.
    #==============================================================================

    class Game_Character < Game_CharacterBase
      #--------------------------------------------------------------------------
      # * New method: move_toward_position
      #--------------------------------------------------------------------------
      def move_toward_position(x, y)
        sx = distance_x_from(x)
        sy = distance_y_from(y)
        if sx.abs > sy.abs
          move_straight(sx > 0 ? 4 : 6)
          move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0
        elsif sy != 0
          move_straight(sy > 0 ? 8 : 2)
          move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0
        end
      end
      #--------------------------------------------------------------------------
      # * New method: move_toward_position
      #--------------------------------------------------------------------------
      def turn_toward_position(x, y)
        sx = distance_x_from(x)
        sy = distance_y_from(y)
        if sx.abs > sy.abs
          set_direction(sx > 0 ? 4 : 6)
        elsif sy != 0
          set_direction(sy > 0 ? 8 : 2)
        end
      end
    end

    #==============================================================================
    # ** Game_Player
    #------------------------------------------------------------------------------
    #  This class handles the player.
    # The instance of this class is referenced by $game_map.
    #==============================================================================

    class Game_Player < Game_Character
      #--------------------------------------------------------------------------
      # * New method: player?
      #--------------------------------------------------------------------------
      def player?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: perform_transfer
      #--------------------------------------------------------------------------
      def new_map_id
        @new_map_id
      end
      #--------------------------------------------------------------------------
      # * New method: hue
      #--------------------------------------------------------------------------
      def hue
        actor ? actor.hue : 0
      end
    end

    #==============================================================================
    # ** Game_Follower
    #------------------------------------------------------------------------------
    #  This class handles the followers. Followers are the actors of the party
    # that follows the leader in a line. It's used within the Game_Followers class.
    #==============================================================================

    class Game_Follower < Game_Character
      #--------------------------------------------------------------------------
      # * New method: follower?
      #--------------------------------------------------------------------------
      def follower?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: index
      #--------------------------------------------------------------------------
      def index
        @member_index
      end
      #--------------------------------------------------------------------------
      # * New method: gathering?
      #--------------------------------------------------------------------------
      def gathering?
        $game_player.followers.gathering? && !gather?
      end
    end

    #==============================================================================
    # ** Game_Followers
    #------------------------------------------------------------------------------
    #  This class handles the followers. It's a wrapper for the built-in class
    # "Array." It's used within the Game_Player class.
    #==============================================================================

    class Game_Followers
      #--------------------------------------------------------------------------
      # * New method: get_actor
      #--------------------------------------------------------------------------
      def get_actor(id)
        list = [$game_player] + visible_followers
        list.select {|follower| follower.actor && follower.actor.id == id }.first
      end
      #--------------------------------------------------------------------------
      # * Method fix: visble_folloers
      #--------------------------------------------------------------------------
      unless method_defined?:)visible_followers)
        def visible_followers; visible_folloers; end
      end
    end

    #==============================================================================
    # ** Game_Vehicle
    #------------------------------------------------------------------------------
    #  This class handles vehicles. It's used within the Game_Map class. If there
    # are no vehicles on the current map, the coordinates is set to (-1,-1).
    #==============================================================================

    class Game_Vehicle < Game_Character
      #--------------------------------------------------------------------------
      # * New method: vehicle?
      #--------------------------------------------------------------------------
      def vehicle?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: map_id
      #--------------------------------------------------------------------------
      def map_id
        @map_id
      end
      #--------------------------------------------------------------------------
      # * New method: type
      #--------------------------------------------------------------------------
      def type
        @type
      end
      #--------------------------------------------------------------------------
      # * New method: aerial?
      #--------------------------------------------------------------------------
      def aerial?
        type == :airship
      end
      #--------------------------------------------------------------------------
      # * New method: above?
      #--------------------------------------------------------------------------
      def above?
        aerial?
      end
    end

    #==============================================================================
    # ** Game_Event
    #------------------------------------------------------------------------------
    #  This class deals with events. It handles functions including event page
    # switching via condition determinants, and running parallel process events.
    # It's used within the Game_Map class.
    #==============================================================================

    class Game_Event < Game_Character
      #--------------------------------------------------------------------------
      # * New method: name
      #--------------------------------------------------------------------------
      def name
        @event.name
      end
      #--------------------------------------------------------------------------
      # * New method: event?
      #--------------------------------------------------------------------------
      def event?
        return true
      end
      #--------------------------------------------------------------------------
      # * New method: erased?
      #--------------------------------------------------------------------------
      def erased?
        @erased
      end
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        return ""     if !@page || !@page.list || @page.list.size <= 0
        return @notes if @notes && @page.list == @note_page
        @note_page = @page.list.dup
        comment_list = []
        @page.list.each do |item|
          next unless item && (item.code == 108 || item.code == 408)
          comment_list.push(item.parameters[0])
        end
        @notes = comment_list.join("\r\n")
        @notes
      end  
    end

    #==============================================================================
    # ** Game_Interpreter
    #------------------------------------------------------------------------------
    #  An interpreter for executing event commands. This class is used within the
    # Game_Map, Game_Troop, and Game_Event classes.
    #==============================================================================

    class Game_Interpreter
      #--------------------------------------------------------------------------
      # * Alias method: command_108
      #--------------------------------------------------------------------------
      alias :command_108_ve_basic_module :command_108
      def command_108
        command_108_ve_basic_module
        comment_call
      end
      #--------------------------------------------------------------------------
      # * New method: comment_call
      #--------------------------------------------------------------------------
      def comment_call
      end
      #--------------------------------------------------------------------------
      # * New method: note
      #--------------------------------------------------------------------------
      def note
        @comments ? @comments.join("\r\n") : ""
      end
    end

    #==============================================================================
    # ** Game_Animation
    #------------------------------------------------------------------------------
    #  Classe that handles Animation data
    #==============================================================================

    class Game_Animation
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_accessor :ox
      attr_accessor :oy
      attr_accessor :rate
      attr_accessor :zoom
      attr_accessor :loop
      attr_accessor :type
      attr_accessor :map_x
      attr_accessor :map_y
      attr_accessor :mirror
      attr_accessor :follow
      attr_accessor :height
      attr_accessor :bitmap1
      attr_accessor :bitmap2
      attr_accessor :sprites
      attr_accessor :duration
      attr_accessor :direction
      attr_accessor :duplicated
      #--------------------------------------------------------------------------
      # * New method: initialize
      #--------------------------------------------------------------------------
      def initialize(animation, mirror, user = nil)
        @animation = animation
        @rate      = animation.name =~ /<RATE: ([+-]?\d+)>/i ? [$1.to_i, 1].max : 4
        @zoom      = animation.name =~ /<ZOOM: (\d+)%?>/i ? $1.to_i / 100.0 : 1.0
        @follow    = animation.name =~ /<FOLLOW>/i ? true : false
        @mirror    = mirror
        @duration  = frame_max * @rate
        @direction = user.anim_direction if user
        @sprites   = []
        bellow     = animation.name =~ /<BELLOW>/i
        above      = animation.name =~ /<ABOVE>/i
        @height    = bellow ? -1 : above ? 300 : 1
      end
      #--------------------------------------------------------------------------
      # * New method: data
      #--------------------------------------------------------------------------  
      def data
        @animation
      end
      #--------------------------------------------------------------------------
      # * New method: id
      #--------------------------------------------------------------------------  
      def id
        @animation.id
      end
      #--------------------------------------------------------------------------
      # * New method: name
      #--------------------------------------------------------------------------  
      def name
        @animation.name
      end
      #--------------------------------------------------------------------------
      # * New method: frame_max
      #--------------------------------------------------------------------------
      def frame_max
        @animation.frame_max
      end
      #--------------------------------------------------------------------------
      # * New method: position
      #--------------------------------------------------------------------------
      def position
        @animation.position
      end
      #--------------------------------------------------------------------------
      # * New method: animation1_name
      #--------------------------------------------------------------------------
      def animation1_name
        @animation.animation1_name
      end
      #--------------------------------------------------------------------------
      # * New method: animation2_name
      #--------------------------------------------------------------------------
      def animation2_name
        @animation.animation2_name
      end
      #--------------------------------------------------------------------------
      # * New method: animation1_hue
      #--------------------------------------------------------------------------
      def animation1_hue
        @animation.animation1_hue
      end
      #--------------------------------------------------------------------------
      # * New method: animation2_hue
      #--------------------------------------------------------------------------
      def animation2_hue
        @animation.animation2_hue
      end
      #--------------------------------------------------------------------------
      # * New method: frames
      #--------------------------------------------------------------------------
      def frames
        @animation.frames
      end
      #--------------------------------------------------------------------------
      # * New method: timings
      #--------------------------------------------------------------------------
      def timings
        @animation.timings
      end
    end

    #==============================================================================
    # ** Sprite_Character
    #------------------------------------------------------------------------------
    #  This sprite is used to display characters. It observes a instance of the
    # Game_Character class and automatically changes sprite conditions.
    #==============================================================================

    class Sprite_Character < Sprite_Base
      #--------------------------------------------------------------------------
      # * Overwrite method: set_character_bitmap
      #--------------------------------------------------------------------------
      def set_character_bitmap
        update_character_info
        set_bitmap
        set_bitmap_position
      end
      #--------------------------------------------------------------------------
      # * New method: center_y
      #--------------------------------------------------------------------------
      def actor?
        @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)
      end
      #--------------------------------------------------------------------------
      # * New method: center_y
      #--------------------------------------------------------------------------
      def actor
        actor? ? @character.actor : nil
      end
      #--------------------------------------------------------------------------
      # * New method: update_character_info
      #--------------------------------------------------------------------------
      def update_character_info
      end
      #--------------------------------------------------------------------------
      # * New method: hue
      #--------------------------------------------------------------------------
      def hue
        @character.hue
      end
      #--------------------------------------------------------------------------
      # * New method: set_bitmap
      #--------------------------------------------------------------------------
      def set_bitmap
        self.bitmap = Cache.character(set_bitmap_name, hue)
      end
      #--------------------------------------------------------------------------
      # * New method: set_bitmap_name
      #--------------------------------------------------------------------------
      def set_bitmap_name
        @character_name
      end
      #--------------------------------------------------------------------------
      # * New method: set_bitmap_position
      #--------------------------------------------------------------------------
      def set_bitmap_position
        sign = get_sign
        if sign && sign.include?('$')
          @cw = bitmap.width / @character.frames
          @ch = bitmap.height / 4
        else
          @cw = bitmap.width / (@character.frames * 4)
          @ch = bitmap.height / 8
        end
        self.ox = @cw / 2
        self.oy = @ch
      end
      #--------------------------------------------------------------------------
      # * New method: get_sign
      #--------------------------------------------------------------------------
      def get_sign
        @character_name[/^[\!\$]./]
      end
    end

    #==============================================================================
    # ** Sprite_Battler
    #------------------------------------------------------------------------------
    #  This sprite is used to display battlers. It observes a instance of the
    # Game_Battler class and automatically changes sprite conditions.
    #==============================================================================

    class Sprite_Battler < Sprite_Base
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_accessor :dmg_mirror
      #--------------------------------------------------------------------------
      # * New method: center_x
      #--------------------------------------------------------------------------
      def center_x
        self.ox
      end
      #--------------------------------------------------------------------------
      # * New method: center_y
      #--------------------------------------------------------------------------
      def center_y
        self.oy / 2
      end
    end

    #==============================================================================
    # ** Spriteset_Battle
    #------------------------------------------------------------------------------
    #  This class brings together battle screen sprites. It's used within the
    # Scene_Battle class.
    #==============================================================================

    class Spriteset_Battle
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader   :viewport1
      #--------------------------------------------------------------------------
      # * New method: sprite
      #--------------------------------------------------------------------------
      def sprite(subject)
        battler_sprites.compact.select {|sprite| sprite.battler == subject }.first
      end
    end

    #==============================================================================
    # ** Window_Base
    #------------------------------------------------------------------------------
    #  This is a superclass of all windows in the game.
    #==============================================================================

    class Window_Base < Window
      #--------------------------------------------------------------------------
      # * Alias method: convert_escape_characters
      #--------------------------------------------------------------------------
      alias :convert_escape_ve_basic_module :convert_escape_characters
      def convert_escape_characters(text)
        result = text.to_s.clone
        result = text_replace(result)
        result = convert_escape_ve_basic_module(text)
        result
      end
      #--------------------------------------------------------------------------
      # * New method: text_replace
      #--------------------------------------------------------------------------
      def text_replace(result)
        result.gsub!(/\r/) { "" }
        result.gsub!(/\\/) { "\e" }
        result
      end
    end

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

    class Scene_Battle < Scene_Base
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader   :subject
      attr_reader   :spriteset
    end

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

    class Scene_Map < Scene_Base
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader   :spriteset
    end
    Custom Basic Actions:

    Spoiler
    #==============================================================================
    # ** Victor Engine - Custom Basic Actions
    #------------------------------------------------------------------------------
    # Author : Victor Sant
    #
    # Version History:
    #  v 1.00 - 2012.01.10 > First relase
    #------------------------------------------------------------------------------
    #  This script allows to change the basic actions of the actor: Attack and
    # Defend, based on the actor, class, weapons, armors or states.
    #------------------------------------------------------------------------------
    # Compatibility
    #   Requires the script 'Victor Engine - Basic Module'
    #
    # * Overwrite methods (Default)
    #   class Game_Player < Game_Character
    #     def attack_skill_id
    #     def guard_skill_id
    #
    #   class Scene_Battle < Scene_Base
    #     def command_attack
    #
    # * Alias methods (Default)
    #   class Scene_Battle < Scene_Base
    #     def on_actor_cancel
    #
    #------------------------------------------------------------------------------
    # Actor, Classes, States, Weapons and Armors note tags:
    #   Tags to be used on Actor, Classes, States, Weapons and Armors note boxes.
    #
    #  <custom attack: x>
    #  <custom attack: x, y>
    #   Set a specifc skill to be used during normal attacks.
    #     x : Skill ID
    #     y : priority, opitional.
    #
    #  <custom guard: x>
    #  <custom guard: x, y>
    #   Set a specifc skill to be used during guards.
    #     x : Skill ID
    #     y : priority, opitional.
    #
    #------------------------------------------------------------------------------
    # Instructions:
    #  To instal the script, open you script editor and paste this script on
    #  a new section on bellow the Materials section. This script must also
    #  be bellow the script 'Victor Engine - Basic'
    #
    #------------------------------------------------------------------------------
    # Additional instructions:
    #  
    #  The priority defines wich skill will be used, if the actor shares have
    #  more than one skill available. By default, the priority is set by the skill
    #  ID (higher ID, higher priority)
    #
    #  The skill cost and restriction still valid, so if the skill used as attack
    #  have any cost it will be spent, and the attack won't be usable if the skill
    #  isn't usable.
    #
    #==============================================================================

    #==============================================================================
    # ** Victor Engine
    #------------------------------------------------------------------------------
    #   Setting module for the Victor Engine
    #==============================================================================

    module Victor_Engine
      #--------------------------------------------------------------------------
      # * Set the ID of the default normal attack skill
      #--------------------------------------------------------------------------
      VE_DEFAULT_ATTACK_SKILL_ID = 1
      #--------------------------------------------------------------------------
      # * Set the ID of the default guard skill
      #--------------------------------------------------------------------------
      VE_DEFAULT_GUARD_SKILL_ID = 2
      #--------------------------------------------------------------------------
      # * required
      #   This method checks for the existance of the basic module and other
      #   VE scripts required for this script to work, don't edit this
      #--------------------------------------------------------------------------
      def self.required(name, req, version, type = nil)
        if !$imported[:ve_basic_module]
          msg = "The script '%s' requires the script\n"
          msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
          msg += "Go to http://victorscripts.wordpress.com/ to download this script."
          msgbox(sprintf(msg, self.script_name(name), version))
          exit
        else
          self.required_script(name, req, version, type)
        end
      end
      #--------------------------------------------------------------------------
      # * script_name
      #   Get the script name base on the imported value, don't edit this
      #--------------------------------------------------------------------------
      def self.script_name(name, ext = "VE")
        name = name.to_s.gsub("_", " ").upcase.split
        name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
        name.join(" ")
      end
    end

    $imported ||= {}
    $imported[:ve_custom_basic_actions] = 1.00
    Victor_Engine.required:)ve_custom_basic_actions, :ve_basic_module, 1.00, :above)
    Victor_Engine.required:)ve_custom_basic_actions, :ve_target_arrow, 1.00, :bellow)

    #==============================================================================
    # ** Game_Actor
    #------------------------------------------------------------------------------
    #  This class handles actors. It's used within the Game_Actors class
    # ($game_actors) and referenced by the Game_Party class ($game_party).
    #==============================================================================

    class Game_Actor < Game_Battler
      #--------------------------------------------------------------------------
      # * Overwrite method: attack_skill_id
      #--------------------------------------------------------------------------
      def attack_skill_id
        set_action_skill_id("ATTACK")
      end
      #--------------------------------------------------------------------------
      # * Overwrite method: guard_skill_id
      #--------------------------------------------------------------------------
      def guard_skill_id
        set_action_skill_id("GUARD")
      end
      #--------------------------------------------------------------------------
      # * New method: set_action_skill_id
      #--------------------------------------------------------------------------
      def set_action_skill_id(type)
        basic_action_id = get_basic_skill_id(type)
        return basic_action_id if basic_action_id
        return VE_DEFAULT_ATTACK_SKILL_ID if type == "ATTACK"
        return VE_DEFAULT_GUARD_SKILL_ID  if type == "GUARD"
      end
      #--------------------------------------------------------------------------
      # * New method: get_basic_skill_id
      #--------------------------------------------------------------------------
      def get_basic_skill_id(type)
        attacks = []
        attacks += get_attaks_list(type, states.compact)
        attacks += get_attaks_list(type, weapons.compact)
        attacks += get_attaks_list(type, [self.class])
        attacks += get_attaks_list(type, [self])
        attacks += get_attaks_list(type, armors.compact)
        attacks.sort! {|a, b| b[:id] <=> a[:id]}
        attacks.sort! {|a, b| b[:prior] <=> a[:prior]}
        attacks.first ? attacks.first[:id] : nil
      end
      #--------------------------------------------------------------------------
      # * New method: get_attaks_list
      #--------------------------------------------------------------------------
      def get_attaks_list(type, list)
        attacks = []
        regexp  = /<CUSTOM #{type}: (\d+)(?: *, *(\d+))?>/i
        list.each do |obj|
          next unless obj.note =~ regexp
          attacks.push({id: $1.to_i, prior: $2 ? $2.to_i : 0})
        end
        attacks
      end
    end

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

    class Scene_Battle < Scene_Base
      #--------------------------------------------------------------------------
      # * Overwrite method: command_attack
      #--------------------------------------------------------------------------
      def command_attack
        BattleManager.actor.input.set_attack
        skill = $data_skills[battleManager.actor.attack_skill_id]
        if !skill.need_selection?
          next_command
        elsif skill.for_opponent?
          select_enemy_selection
        else
          select_actor_selection
        end
      end
      #--------------------------------------------------------------------------
      # * Alias method: on_actor_cancel
      #--------------------------------------------------------------------------
      alias :on_actor_cancel_ve_custom_basic_actions :on_actor_cancel
      def on_actor_cancel
        on_actor_cancel_ve_custom_basic_actions
        case @actor_command_window.current_symbol
        when :attack
          @actor_command_window.activate
        end
      end
    end
  9. Megablackdragon31 said:
    Oops! I`m sorry,here you go:

    http://victorscripts.wordpress.com/rpg-maker-vx-ace/gameplay-scripts/custom-basic-actions/

    Sadly that link is broken temporally (thanks to dropbox) but i got a backup of the script,just remember to put basic module above custom basic actions.

    Victor Sant Basic Module

    Spoiler
    #==============================================================================# ** Victor Engine - Basic Module

    #------------------------------------------------------------------------------

    # Author : Victor Sant

    #

    # Version History:

    #  v 1.00 - 2011.12.19 > First release

    #  v 1.01 - 2011.12.21 > Added Event Troop notes

    #  v 1.02 - 2011.12.22 > Added character frames value

    #  v 1.03 - 2011.12.30 > Added Actor and Enemy notes

    #  v 1.04 - 2012.01.01 > Added party average level and map actors

    #  v 1.05 - 2012.01.04 > Compatibility with Characters Scripts

    #  v 1.06 - 2012.01.07 > Compatibility with Fog and Light Effect

    #                      > Added new Sprite Character functions

    #  v 1.07 - 2012.01.11 > Compatibility with Control Text and Codes

    #  v 1.08 - 2012.01.13 > Compatibility with Trait Control

    #  v 1.09 - 2012.01.15 > Fixed the Regular Expressions problem with "" and “”

    #  v 1.10 - 2012.01.18 > Compatibility with Automatic Battlers

    #  v 1.11 - 2012.01.26 > Compatibility with Followers Options

    #                        Compatibility with Animated Battle beta

    #  v 1.12 - 2012.02.08 > Compatibility with Animated Battle

    #  v 1.13 - 2012.02.18 > Fix for non RTP dependant encrypted projects

    #  v 1.14 - 2012.03.11 > Better version handling and required messages

    #  v 1.15 - 2012.03.11 > Added level variable for enemies (to avoid crashes)

    #  v 1.16 - 2012.03.21 > Compatibility with Follower Control

    #  v 1.17 - 2012.03.22 > Compatibility with Follower Control new method

    #  v 1.18 - 2012.03.22 > Added Battler Types tag support

    #  v 1.19 - 2012.05.20 > Compatibility with Map Turn Battle

    #  v 1.20 - 2012.05.21 > Fix for older RMVXa versions

    #  v 1.21 - 2012.05.29 > Compatibility with Pixel Movement

    #  v 1.22 - 2012.07.02 > Compatibility with Terrain States

    #  v 1.23 - 2012.07.03 > Fix for Pixel Movement

    #  v 1.24 - 2012.07.17 > Compatibility with Critical Hit Effects

    #  v 1.25 - 2012.07.24 > Compatibility with Moving Plaforms

    #  v 1.26 - 2012.07.30 > Compatibility with Automatic Battlers

    #  v 1.27 - 2012.08.01 > Compatibility with Custom Slip Effect

    #  v 1.28 - 2012.08.01 > Compatibility with Custom Slip Effect v 1.01

    #  v 1.29 - 2012.11.03 > Fixed returning value division by 0 error.

    #  v 1.30 - 2012.12.13 > Compatibility with State Graphics

    #  v 1.31 - 2012.12.16 > Compatibility with Active Time Battle

    #  v 1.32 - 2012.12.24 > Compatibility with Active Time Battle v 1.01

    #  v 1.33 - 2012.12.30 > Compatibility with Leap Attack

    #  v 1.34 - 2013.01.07 > Compatibility with Critical Hit Effects v 1.01

    #  v 1.35 - 2013.02.13 > Compatibility with Cooperation Skills

    #------------------------------------------------------------------------------

    #   This is the basic script for the system from Victory Engine and is

    # required to use the scripts from the engine. This script offer some new

    # functions to be used within many scripts of the engine.

    #------------------------------------------------------------------------------

    # Compatibility

    #   Required for the Victor Engine

    #

    # * Overwrite methods

    #   class << Cache

    #     def self.character(filename)

    #

    #   class Sprite_Character < Sprite_Base

    #     def set_character_bitmap

    #

    #   class Game_Battler < Game_BattlerBase

    #     def item_effect_recover_hp(user, item, effect)

    #     def item_effect_recover_mp(user, item, effect)

    #     def item_effect_gain_tp

    #

    # * Alias methods

    #   class Game_Interpreter

    #     def command_108

    #

    #   class Window_Base < Window

    #     def convert_escape_characters(text)

    #

    #------------------------------------------------------------------------------

    # Instructions:

    #  To instal the script, open you script editor and paste this script on

    #  a new section bellow the Materials section.

    #

    #------------------------------------------------------------------------------

    # New functions

    #

    # * Random number between two vales

    #   rand_between(min, max)

    #    min : min value

    #    max : max value

    #   Can be called from any class, this method return an random value between

    #   two specific numbers

    #

    # * Random array value

    #   <Array>.random

    #   <Array>.random!

    #   Returns a random object from the array, the method .random! is destructive,

    #   removing the value returned from the array.

    #

    # * Sum of the numeric values of a array

    #   <Array>.sum

    #   Returns the sum of all numeric values

    #

    # * Average of all numeric values from the array

    #   <Array>.average(float = false)

    #    float : float flag

    #   Returns the average of all numeric values, if floa is true, the value

    #   returned is a float, otherwise it's a integer.

    #

    # * Note for events

    #   <Event>.note

    #   By default, events doesn't have note boxes. This command allows to use

    #   comments as note boxes, following the same format as the ones on the

    #   database. Returns all comments on the active page of the event.

    #

    # * Comment calls

    #   <Event>.comment_call

    #   Another function for comment boxes, by default, they have absolutely no

    #   effect in game when called. But this method allows to make the comment

    #   box to behave like an script call, but with the versatility of the

    #   note boxes. Remember that the commands will only take effect if there

    #   is scripts to respond to the comment code.

    #

    #==============================================================================

    #==============================================================================

    # ** Victor Engine

    #------------------------------------------------------------------------------

    #   Setting module for the Victor Engine

    #==============================================================================

    module Victor_Engine

      #--------------------------------------------------------------------------

      # * New method: required_script

      #--------------------------------------------------------------------------

      def self.required_script(name, req, version, type = 0)

        if type != :bellow && (!$imported[req] || $imported[req] < version)

          msg = "The script '%s' requires the script\n"

          case type

          when :above

            msg += "'%s' v%s or higher above it to work properly\n"

          else

            msg += "'%s' v%s or higher to work properly\n"

          end

          msg += "Go to http://victorscripts.wordpress.com/ to download this script."

          self.exit_message(msg, name, req, version)

        elsif type == :bellow && $imported[req]

          msg =  "The script '%s' requires the script\n"

          msg += "'%s' to be put bellow it\n"

          msg += "move the scripts to the proper position"

          self.exit_message(msg, name, req, version)

        end

      end

      #--------------------------------------------------------------------------

      # * New method: exit_message

      #--------------------------------------------------------------------------

      def self.exit_message(message, name, req, version)

        name = self.script_name(name)

        req  = self.script_name(req)

        msgbox(sprintf(message, name, req, version))

        exit

      end

      #--------------------------------------------------------------------------

      # * New method: script_name

      #--------------------------------------------------------------------------

      def self.script_name(name, ext = "VE")

        name = name.to_s.gsub("_", " ").upcase.split

        name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }

        name.join(" ")

      end

    end

    $imported ||= {}

    $imported[:ve_basic_module] = 1.35

    #==============================================================================

    # ** Object

    #------------------------------------------------------------------------------

    #  This class is the superclass of all other classes.

    #==============================================================================

    class Object

      #--------------------------------------------------------------------------

      # * Include setting module

      #--------------------------------------------------------------------------

      include Victor_Engine

      #-------------------------------------------------------------------------

      # * New method: rand_between

      #-------------------------------------------------------------------------

      def rand_between(min, max)

        min + rand(max - min + 1)

      end

      #--------------------------------------------------------------------------

      # * New method: numeric?

      #--------------------------------------------------------------------------

      def numeric?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: string?

      #--------------------------------------------------------------------------

      def string?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: array?

      #--------------------------------------------------------------------------

      def array?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: float?

      #--------------------------------------------------------------------------

      def float?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: symbol?

      #--------------------------------------------------------------------------

      def symbol?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: item?

      #--------------------------------------------------------------------------

      def item?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: skill?

      #--------------------------------------------------------------------------

      def skill?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: file_exist?

      #--------------------------------------------------------------------------

      def file_exist?(path, filename)

        $file_list ||= {}

        $file_list[path + filename] ||= file_test(path, filename)

        $file_list[path + filename]

      end

      #--------------------------------------------------------------------------

      # * New method: get_file_list

      #--------------------------------------------------------------------------

      def file_test(path, filename)

        bitmap = Cache.load_bitmap(path, filename) rescue nil

        bitmap ? true : false

      end

      #--------------------------------------------------------------------------

      # * New method: character_exist?

      #--------------------------------------------------------------------------

      def character_exist?(filename)

        file_exist?("Graphics/Characters/", filename)

      end

      #--------------------------------------------------------------------------

      # * New method: battler_exist?

      #--------------------------------------------------------------------------

      def battler_exist?(filename)

        file_exist?("Graphics/Battlers/", filename)

      end

      #--------------------------------------------------------------------------

      # * New method: face_exist?

      #--------------------------------------------------------------------------

      def face_exist?(filename)

        file_exist?("Graphics/Faces/", filename)

      end

      #--------------------------------------------------------------------------

      # * New method: get_filename

      #--------------------------------------------------------------------------

      def get_filename

        "[\"'“‘]([^\"'”‘”’]+)[\"'”’]"

      end

      #--------------------------------------------------------------------------

      # * New method: get_all_values

      #--------------------------------------------------------------------------

      def get_all_values(value1, value2 = nil)

        value2 = value1 unless value2

        /<#{value1}>((?:[^<]|<[^\/])*)<\/#{value2}>/im

      end

      #--------------------------------------------------------------------------

      # * New method: make_symbol

      #--------------------------------------------------------------------------

      def make_symbol(string)

        string.downcase.gsub(" ", "_").to_sym

      end

      #--------------------------------------------------------------------------

      # * New method: make_string

      #--------------------------------------------------------------------------

      def make_string(symbol)

        symbol.to_s.gsub("_", " ").upcase

      end

      #--------------------------------------------------------------------------

      # * New method: returning_value

      #--------------------------------------------------------------------------

      def returning_value(i, x)

        y = [x * 2, 1].max

        i % y  >= x ? (x * 2) - i % y : i % y

      end

      #--------------------------------------------------------------------------

      # New method: in_rect?

      #--------------------------------------------------------------------------

      def in_rect?(w, h, x1, y1, x2, y2, fx = 0)

        aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)

        bx > ax - aw && bx < ax + aw && by > ay - ah && by < ay + ah

      end

      #--------------------------------------------------------------------------

      # New method: in_radius?

      #--------------------------------------------------------------------------

      def in_radius?(w, h, x1, y1, x2, y2, fx = 0)

        aw, ah, ax, ay, bx, by = setup_area(w, h, x1, y1, x2, y2, fx)

        ((bx - ax) ** 2 / aw ** 2) + ((by - ay) ** 2 / ah ** 2) <= 1

      end

      #--------------------------------------------------------------------------

      # New method: setup_area

      #--------------------------------------------------------------------------

      def setup_area(w, h, x1, y1, x2, y2, fx)

        aw = w

        ah = h * aw

        ax = x1

        ay = y1

        bx = x2

        by = y2

        bx += fx / 4 if ax > bx

        bx -= fx / 4 if ax < bx

        [aw, ah, ax, ay, bx, by]

      end

      #--------------------------------------------------------------------------

      # * New method: get_param_id

      #--------------------------------------------------------------------------

      def get_param_id(text)

        case text.upcase

        when "MAXHP", "HP" then 0

        when "MAXMP", "MP" then 1

        when "ATK" then 2

        when "DEF" then 3

        when "MAT" then 4

        when "MDF" then 5

        when "AGI" then 6

        when "LUK" then 7

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_param_text

      #--------------------------------------------------------------------------

      def get_param_text(id)

        case id

        when 0 then "HP"

        when 1 then "MP"

        when 2 then "ATK"

        when 3 then "DEF"

        when 4 then "MAT"

        when 5 then "MDF"

        when 6 then "AGI"

        when 7 then "LUK"

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_xparam_id

      #--------------------------------------------------------------------------

      def get_xparam_id(text)

        case text.upcase

        when "HIT" then 0

        when "EVA" then 1

        when "CRI" then 2

        when "CEV" then 3

        when "MEV" then 4

        when "MRF" then 5

        when "CNT" then 6

        when "HRG" then 7

        when "MRG" then 8

        when "TRG" then 9

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_xparam_text

      #--------------------------------------------------------------------------

      def get_xparam_text(id)

        case id

        when 0 then "HIT"

        when 1 then "EVA"

        when 2 then "CRI"

        when 3 then "CEV"

        when 4 then "MEV"

        when 5 then "MRF"

        when 6 then "CNT"

        when 7 then "HRG"

        when 8 then "MRG"

        when 9 then "TRG"

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_sparam_id

      #--------------------------------------------------------------------------

      def get_sparam_id(text)

        case text.upcase

        when "TGR" then 0

        when "GRD" then 1

        when "REC" then 2

        when "PHA" then 3

        when "MCR" then 4

        when "TCR" then 5

        when "PDR" then 6

        when "MDR" then 7

        when "FDR" then 8

        when "EXR" then 9

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_sparam_text

      #--------------------------------------------------------------------------

      def get_sparam_text(id)

        case id

        when 0 then "TGR"

        when 1 then "GRD"

        when 2 then "REC"

        when 3 then "PHA"

        when 4 then "MCR"

        when 5 then "TCR"

        when 6 then "PDR"

        when 7 then "MDR"

        when 8 then "FDR"

        when 9 then "EXR"

        end

      end

      #--------------------------------------------------------------------------

      # * New method: get_cond

      #--------------------------------------------------------------------------

      def get_cond(text)

        case text.upcase

        when "HIGHER"    then ">"

        when "LOWER"     then "<"

        when "EQUAL"     then "=="

        when "DIFFERENT" then "!="

        else "!="

        end

      end

    end

    #==============================================================================

    # ** String

    #------------------------------------------------------------------------------

    #  The string class. Can handle character sequences of arbitrary lengths.

    #==============================================================================

    class String

      #--------------------------------------------------------------------------

      # * New method: string?

      #--------------------------------------------------------------------------

      def string?

        return true

      end

    end

    #==============================================================================

    # ** String

    #------------------------------------------------------------------------------

    #  The class that represents symbols.

    #==============================================================================

    class Symbol

      #--------------------------------------------------------------------------

      # * New method: symbol?

      #--------------------------------------------------------------------------

      def symbol?

        return true

      end

    end

    #==============================================================================

    # ** Numeric

    #------------------------------------------------------------------------------

    #  This is the abstract class for numbers.

    #==============================================================================

    class Numeric

      #--------------------------------------------------------------------------

      # * New method: numeric?

      #--------------------------------------------------------------------------

      def numeric?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: ceil?

      #--------------------------------------------------------------------------

      def ceil?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: to_ceil

      #--------------------------------------------------------------------------

      def to_ceil

        self > 0 ? self.abs.ceil : -self.abs.ceil

      end

    end

    #==============================================================================

    # ** Float

    #------------------------------------------------------------------------------

    #  This is the abstract class for the floating point values.

    #==============================================================================

    class Float

      #--------------------------------------------------------------------------

      # * New method: float?

      #--------------------------------------------------------------------------

      def float?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: ceil?

      #--------------------------------------------------------------------------

      def ceil?

        self != self.ceil

      end

    end

    #==============================================================================

    # ** Array     

    #------------------------------------------------------------------------------

    #  This class store arbitrary Ruby objects.

    #==============================================================================

    class Array

      #--------------------------------------------------------------------------

      # * New method: array?

      #--------------------------------------------------------------------------

      def array?

        return true

      end

      #-------------------------------------------------------------------------

      # * New method: random

      #-------------------------------------------------------------------------

      def random

        self[rand(size)]

      end

      #-------------------------------------------------------------------------

      # * New method: random!

      #-------------------------------------------------------------------------

      def random!

        self.delete_at(rand(size))

      end

      #---------------------------------------------------------------------------

      # * New method: sum

      #---------------------------------------------------------------------------

      def sum

        self.inject(0) {|r, n| r += (n.numeric? ? n : 0)}

      end

      #---------------------------------------------------------------------------

      # * New method: average

      #---------------------------------------------------------------------------

      def average(float = false)

        self.sum / [(float ? size.to_f : size.to_i), 1].max

      end

      #---------------------------------------------------------------------------

      # * New method: next_item

      #---------------------------------------------------------------------------

      def next_item

        item = self.shift

        self.push(item)

        item

      end

      #---------------------------------------------------------------------------

      # * New method: previous_item

      #---------------------------------------------------------------------------

      def previous_item

        item = self.pop

        self.unshift(item)

        item

      end

    end

    #==============================================================================

    # ** RPG::Troop::page

    #------------------------------------------------------------------------------

    #  This is the data class for battle events (pages).

    #==============================================================================

    class RPG::Troop::page

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        return "" if !@list || @list.size <= 0

        comment_list = []

        @list.each do |item|

          next unless item && (item.code == 108 || item.code == 408)

          comment_list.push(item.parameters[0])

        end

        comment_list.join("\r\n")

      end

    end

    #==============================================================================

    # ** RPG::UsableItem

    #------------------------------------------------------------------------------

    #  This is the superclass for skills and items.

    #==============================================================================

    class RPG::UsableItem < RPG::BaseItem

      #--------------------------------------------------------------------------

      # * New method: for_all_targets?

      #--------------------------------------------------------------------------

      def for_all_targets?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: element_set

      #--------------------------------------------------------------------------

      def element_set

        [damage.element_id]

      end

    end

    #==============================================================================

    # ** RPG::Skill

    #------------------------------------------------------------------------------

    #  This is the data class for skills.

    #==============================================================================

    class RPG::Skill < RPG::UsableItem

      #--------------------------------------------------------------------------

      # * New method: item?

      #--------------------------------------------------------------------------

      def item?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: skill?

      #--------------------------------------------------------------------------

      def skill?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: type_set

      #--------------------------------------------------------------------------

      def type_set

        [stype_id]

      end  

    end

    #==============================================================================

    # ** RPG::Item

    #------------------------------------------------------------------------------

    #  This is the data class for items.

    #==============================================================================

    class RPG::Item < RPG::UsableItem

      #--------------------------------------------------------------------------

      # * New method: item?

      #--------------------------------------------------------------------------

      def item?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: skill?

      #--------------------------------------------------------------------------

      def skill?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: type_set

      #--------------------------------------------------------------------------

      def type_set

        [itype_id]

      end

    end

    #==============================================================================

    # ** Cache

    #------------------------------------------------------------------------------

    #  This module loads each of graphics, creates a Bitmap object, and retains it.

    # To speed up load times and conserve memory, this module holds the created

    # Bitmap object in the internal hash, allowing the program to return

    # preexisting objects when the same bitmap is requested again.

    #==============================================================================

    class << Cache

      #--------------------------------------------------------------------------

      # * Overwrite method: character

      #--------------------------------------------------------------------------

      def character(filename, hue = 0)

        load_bitmap("Graphics/Characters/", filename, hue)

      end

      #--------------------------------------------------------------------------

      # * New method: cache

      #--------------------------------------------------------------------------

      def cache

        @cache

      end

    end

    #==============================================================================

    # ** BattleManager

    #------------------------------------------------------------------------------

    #  This module handles the battle processing

    #==============================================================================

    class << BattleManager

      #--------------------------------------------------------------------------

      # * New method: all_battle_members

      #--------------------------------------------------------------------------

      def all_battle_members

        $game_party.members + $game_troop.members

      end

      #--------------------------------------------------------------------------

      # * New method: all_dead_members

      #--------------------------------------------------------------------------

      def all_dead_members

        $game_party.dead_members + $game_troop.dead_members

      end

      #--------------------------------------------------------------------------

      # * New method: all_movable_members

      #--------------------------------------------------------------------------

      def all_movable_members

        $game_party.movable_members + $game_troop.movable_members

      end

    end

    #==============================================================================

    # ** Game_BattlerBase

    #------------------------------------------------------------------------------

    #  This class handles battlers. It's used as a superclass of the Game_Battler

    # classes.

    #==============================================================================

    class Game_BattlerBase

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_reader   :buffs

      #--------------------------------------------------------------------------

      # * New method: get_param

      #--------------------------------------------------------------------------

      def get_param(text)

        case text.upcase

        when "MAXHP" then self.mhp

        when "MAXMP" then self.mmp

        when "MAXTP" then self.max_tp

        else eval("self.#{text.downcase}")

        end

      end

      #--------------------------------------------------------------------------

      # * New method: type

      #--------------------------------------------------------------------------

      def type

        list = []

        get_all_notes.scan(/<BATTLER TYPE: ((?:\w+ *,? *)+)>/i) do

          $1.scan(/(\d+)/i) { list.push(make_symbol($1)) }

        end

        list.uniq

      end

      #--------------------------------------------------------------------------

      # * New method: danger?

      #--------------------------------------------------------------------------

      def danger?

        hp < mhp * 25 / 100

      end

      #--------------------------------------------------------------------------

      # * New method: sprite

      #--------------------------------------------------------------------------

      def sprite

        valid = SceneManager.scene_is?(Scene_Battle) && SceneManager.scene.spriteset

        valid ? SceneManager.scene.spriteset.sprite(self) : nil

      end

      #--------------------------------------------------------------------------

      # * New method: element_set

      #--------------------------------------------------------------------------

      def element_set(item)

        element_set  = item.element_set

        element_set += atk_elements if item.damage.element_id < 0

        element_set.delete(0)

        element_set.compact

      end

      #--------------------------------------------------------------------------

      # * New method: add_state_normal

      #--------------------------------------------------------------------------

      def add_state_normal(state_id, rate = 1, user = self)

        chance  = rate

        chance *= state_rate(state_id)

        chance *= luk_effect_rate(user)

        add_state(state_id) if rand < chance

      end

      #--------------------------------------------------------------------------

      # * New method: damaged?

      #--------------------------------------------------------------------------

      def damaged?

        @result.hp_damage != 0 || @result.mp_damage != 0 || @result.tp_damage != 0

      end

      #--------------------------------------------------------------------------

      # * New method: mtp

      #--------------------------------------------------------------------------

      def mtp

        return 100

      end

    end

    #==============================================================================

    # ** Game_Battler

    #------------------------------------------------------------------------------

    #  This class deals with battlers. It's used as a superclass of the Game_Actor

    # and Game_Enemy classes.

    #==============================================================================

    class Game_Battler < Game_BattlerBase

      #--------------------------------------------------------------------------

      # * Overwrite method: item_effect_recover_hp

      #--------------------------------------------------------------------------

      def item_effect_recover_hp(user, item, effect)

        value = item_value_recover_hp(user, item, effect).to_i

        @result.hp_damage -= value

        @result.success    = true

        self.hp += value

      end

      #--------------------------------------------------------------------------

      # * Overwrite method: item_effect_recover_mp

      #--------------------------------------------------------------------------

      def item_effect_recover_mp(user, item, effect)

        value = item_value_recover_mp(user, item, effect).to_i

        @result.mp_damage -= value

        @result.success    = true if value != 0

        self.mp += value

      end

      #--------------------------------------------------------------------------

      # * Overwrite method: item_effect_gain_tp

      #--------------------------------------------------------------------------

      def item_effect_gain_tp(user, item, effect)

        value    = item_value_recover_tp(user, item, effect)

        self.tp += value

      end

      #--------------------------------------------------------------------------

      # * New method: item_value_recover_hp

      #--------------------------------------------------------------------------

      def item_value_recover_hp(user, item, effect)

        value  = (mhp * effect.value1 + effect.value2) * rec

        value *= user.pha if item.is_a?(RPG::Item)

        value

      end

      #--------------------------------------------------------------------------

      # * New method: item_value_recover_mp

      #--------------------------------------------------------------------------

      def item_value_recover_mp(user, item, effect)

        value  = (mmp * effect.value1 + effect.value2) * rec

        value *= user.pha if item.is_a?(RPG::Item)

        value

      end

      #--------------------------------------------------------------------------

      # * New method: item_value_recover_tp

      #--------------------------------------------------------------------------

      def item_value_recover_tp(user, item, effect)

        effect.value1.to_i

      end

      #--------------------------------------------------------------------------

      # * New method: cri_rate

      #--------------------------------------------------------------------------

      def cri_rate(user, item)

        user.cri

      end

      #--------------------------------------------------------------------------

      # * New method: cri_eva

      #--------------------------------------------------------------------------

      def cri_eva(user, item)

        cev

      end

      #--------------------------------------------------------------------------

      # * New method: setup_critical

      #--------------------------------------------------------------------------

      def setup_critical(user, item)

        cri_rate(user, item) * (1 - cri_eva(user, item))

      end

    end

    #==============================================================================

    # ** Game_Enemy

    #------------------------------------------------------------------------------

    #  This class handles enemy characters. It's used within the Game_Troop class

    # ($game_troop).

    #==============================================================================

    class Game_Enemy < Game_Battler

      #--------------------------------------------------------------------------

      # * New method: id

      #--------------------------------------------------------------------------

      def id

        @enemy_id

      end

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        enemy ? enemy.note : ""

      end

      #--------------------------------------------------------------------------

      # * New method: get_all_notes

      #--------------------------------------------------------------------------

      def get_all_notes(*args)

        notes  = ""

        notes += note if !args.include?:)self)

        states.compact.each {|state| notes += state.note } if !args.include?:)state)

        notes

      end

      #--------------------------------------------------------------------------

      # * New method: get_all_objects

      #--------------------------------------------------------------------------

      def get_all_objects(*args)

        result = []

        result += [self] if !args.include?:)self)

        result += states.compact if !args.include?:)state)

        result

      end

      #--------------------------------------------------------------------------

      # * New method: level

      #--------------------------------------------------------------------------

      def level

        return 1

      end

      #--------------------------------------------------------------------------

      # * New method: skill_learn?

      #--------------------------------------------------------------------------

      def skill_learn?(skill)

        skill.skill? && skills.include?(skill)

      end

      #--------------------------------------------------------------------------

      # * New method: skills

      #--------------------------------------------------------------------------

      def skills

        (enemy_actions | added_skills).sort.collect {|id| $data_skills[id] }

      end

      #--------------------------------------------------------------------------

      # * New method: enemy_actions

      #--------------------------------------------------------------------------

      def enemy_actions

        enemy.actions.collect {|action| action.skill_id }

      end

    end

    #==============================================================================

    # ** Game_Actor

    #------------------------------------------------------------------------------

    #  This class handles actors. It's used within the Game_Actors class

    # ($game_actors) and referenced by the Game_Party class ($game_party).

    #==============================================================================

    class Game_Actor < Game_Battler

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        actor ? actor.note : ""

      end

      #--------------------------------------------------------------------------

      # * New method: hue

      #--------------------------------------------------------------------------

      def hue

        @hue ? @hue : 0

      end

      #--------------------------------------------------------------------------

      # * New method: get_all_notes

      #--------------------------------------------------------------------------

      def get_all_notes(*args)

        notes = ""

        notes += note if !args.include?:)self)

        notes += self.class.note if !args.include?:)class)

        equips.compact.each {|equip| notes += equip.note } if !args.include?:)equip)

        states.compact.each {|state| notes += state.note } if !args.include?:)state)

        notes

      end

      #--------------------------------------------------------------------------

      # * New method: get_all_objects

      #--------------------------------------------------------------------------

      def get_all_objects(*args)

        result = []

        result += [self] if !args.include?:)self)

        result += [self.class]   if !args.include?:)class)

        result += equips.compact if !args.include?:)equip)

        result += states.compact if !args.include?:)state)

        result

      end

      #--------------------------------------------------------------------------

      # * New method: in_active_party?

      #--------------------------------------------------------------------------

      def in_active_party?

        $game_party.battle_members.include?(self)

      end

      #--------------------------------------------------------------------------

      # * New method: in_reserve_party?

      #--------------------------------------------------------------------------

      def in_reserve_party?

        $game_party.reserve_members.include?(self)

      end

      #--------------------------------------------------------------------------

      # * New method: in_party?

      #--------------------------------------------------------------------------

      def in_party?

        $game_party.all_members.include?(self)

      end

      #--------------------------------------------------------------------------

      # * New method: map_animation

      #--------------------------------------------------------------------------

      def map_animation(id)

        $game_map.actors.each do |member|

          member.animation_id = id if member.actor == self

        end

      end

      #--------------------------------------------------------------------------

      # * New method: on_damage_floor

      #--------------------------------------------------------------------------

      def on_damage_floor?

        $game_player.on_damage_floor?

      end

    end

    #==============================================================================

    # ** Game_Unit

    #------------------------------------------------------------------------------

    #  This class handles units. It's used as a superclass of the Game_Party and

    # Game_Troop classes.

    #==============================================================================

    class Game_Unit

      #--------------------------------------------------------------------------

      # * New method: refresh

      #--------------------------------------------------------------------------

      def refresh

        members.each {|member| member.refresh }

      end

    end

    #==============================================================================

    # ** Game_Party

    #------------------------------------------------------------------------------

    #  This class handles the party. It includes information on amount of gold

    # and items. The instance of this class is referenced by $game_party.

    #==============================================================================

    class Game_Party < Game_Unit

      #--------------------------------------------------------------------------

      # * New method: average_level

      #--------------------------------------------------------------------------

      def average_level

        battle_members.collect {|actor| actor.level }.average

      end

      #--------------------------------------------------------------------------

      # * New method: reserve_members

      #--------------------------------------------------------------------------

      def reserve_members

        all_members - battle_members

      end

    end

    #==============================================================================

    # ** Game_Map

    #------------------------------------------------------------------------------

    #  This class handles maps. It includes scrolling and passage determination

    # functions. The instance of this class is referenced by $game_map.

    #==============================================================================

    class Game_Map

      #--------------------------------------------------------------------------

      # * New method: event_list

      #--------------------------------------------------------------------------

      def event_list

        events.values

      end

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        @map ? @map.note : ""

      end

      #--------------------------------------------------------------------------

      # * New method: vehicles

      #--------------------------------------------------------------------------

      def vehicles

        @vehicles

      end

      #--------------------------------------------------------------------------

      # * New method: map_events

      #--------------------------------------------------------------------------

      def map_events

        @map.events

      end

      #--------------------------------------------------------------------------

      # * New method: actors

      #--------------------------------------------------------------------------

      def actors

        [$game_player] + $game_player.followers.visible_followers

      end

    end

    #==============================================================================

    # ** Game_CharacterBase

    #------------------------------------------------------------------------------

    #  This class deals with characters. Common to all characters, stores basic

    # data, such as coordinates and graphics. It's used as a superclass of the

    # Game_Character class.

    #==============================================================================

    class Game_CharacterBase

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_accessor :move_speed

      attr_accessor :move_frequency

      #--------------------------------------------------------------------------

      # * New method: player?

      #--------------------------------------------------------------------------

      def player?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: event?

      #--------------------------------------------------------------------------

      def event?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: follower?

      #--------------------------------------------------------------------------

      def follower?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: vehicle?

      #--------------------------------------------------------------------------

      def vehicle?

        return false

      end

      #--------------------------------------------------------------------------

      # * New method: frames

      #--------------------------------------------------------------------------

      def frames

        return 3

      end

      #--------------------------------------------------------------------------

      # * New method: hue

      #--------------------------------------------------------------------------

      def hue

        @hue ? @hue : 0

      end

    end

    #==============================================================================

    # ** Game_Character

    #------------------------------------------------------------------------------

    #  This class deals with characters. It's used as a superclass of the

    # Game_Player and Game_Event classes.

    #==============================================================================

    class Game_Character < Game_CharacterBase

      #--------------------------------------------------------------------------

      # * New method: move_toward_position

      #--------------------------------------------------------------------------

      def move_toward_position(x, y)

        sx = distance_x_from(x)

        sy = distance_y_from(y)

        if sx.abs > sy.abs

          move_straight(sx > 0 ? 4 : 6)

          move_straight(sy > 0 ? 8 : 2) if !@move_succeed && sy != 0

        elsif sy != 0

          move_straight(sy > 0 ? 8 : 2)

          move_straight(sx > 0 ? 4 : 6) if !@move_succeed && sx != 0

        end

      end

      #--------------------------------------------------------------------------

      # * New method: move_toward_position

      #--------------------------------------------------------------------------

      def turn_toward_position(x, y)

        sx = distance_x_from(x)

        sy = distance_y_from(y)

        if sx.abs > sy.abs

          set_direction(sx > 0 ? 4 : 6)

        elsif sy != 0

          set_direction(sy > 0 ? 8 : 2)

        end

      end

    end

    #==============================================================================

    # ** Game_Player

    #------------------------------------------------------------------------------

    #  This class handles the player.

    # The instance of this class is referenced by $game_map.

    #==============================================================================

    class Game_Player < Game_Character

      #--------------------------------------------------------------------------

      # * New method: player?

      #--------------------------------------------------------------------------

      def player?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: perform_transfer

      #--------------------------------------------------------------------------

      def new_map_id

        @new_map_id

      end

      #--------------------------------------------------------------------------

      # * New method: hue

      #--------------------------------------------------------------------------

      def hue

        actor ? actor.hue : 0

      end

    end

    #==============================================================================

    # ** Game_Follower

    #------------------------------------------------------------------------------

    #  This class handles the followers. Followers are the actors of the party

    # that follows the leader in a line. It's used within the Game_Followers class.

    #==============================================================================

    class Game_Follower < Game_Character

      #--------------------------------------------------------------------------

      # * New method: follower?

      #--------------------------------------------------------------------------

      def follower?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: index

      #--------------------------------------------------------------------------

      def index

        @member_index

      end

      #--------------------------------------------------------------------------

      # * New method: gathering?

      #--------------------------------------------------------------------------

      def gathering?

        $game_player.followers.gathering? && !gather?

      end

    end

    #==============================================================================

    # ** Game_Followers

    #------------------------------------------------------------------------------

    #  This class handles the followers. It's a wrapper for the built-in class

    # "Array." It's used within the Game_Player class.

    #==============================================================================

    class Game_Followers

      #--------------------------------------------------------------------------

      # * New method: get_actor

      #--------------------------------------------------------------------------

      def get_actor(id)

        list = [$game_player] + visible_followers

        list.select {|follower| follower.actor && follower.actor.id == id }.first

      end

      #--------------------------------------------------------------------------

      # * Method fix: visble_folloers

      #--------------------------------------------------------------------------

      unless method_defined?:)visible_followers)

        def visible_followers; visible_folloers; end

      end

    end

    #==============================================================================

    # ** Game_Vehicle

    #------------------------------------------------------------------------------

    #  This class handles vehicles. It's used within the Game_Map class. If there

    # are no vehicles on the current map, the coordinates is set to (-1,-1).

    #==============================================================================

    class Game_Vehicle < Game_Character

      #--------------------------------------------------------------------------

      # * New method: vehicle?

      #--------------------------------------------------------------------------

      def vehicle?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: map_id

      #--------------------------------------------------------------------------

      def map_id

        @map_id

      end

      #--------------------------------------------------------------------------

      # * New method: type

      #--------------------------------------------------------------------------

      def type

        @type

      end

      #--------------------------------------------------------------------------

      # * New method: aerial?

      #--------------------------------------------------------------------------

      def aerial?

        type == :airship

      end

      #--------------------------------------------------------------------------

      # * New method: above?

      #--------------------------------------------------------------------------

      def above?

        aerial?

      end

    end

    #==============================================================================

    # ** Game_Event

    #------------------------------------------------------------------------------

    #  This class deals with events. It handles functions including event page

    # switching via condition determinants, and running parallel process events.

    # It's used within the Game_Map class.

    #==============================================================================

    class Game_Event < Game_Character

      #--------------------------------------------------------------------------

      # * New method: name

      #--------------------------------------------------------------------------

      def name

        @event.name

      end

      #--------------------------------------------------------------------------

      # * New method: event?

      #--------------------------------------------------------------------------

      def event?

        return true

      end

      #--------------------------------------------------------------------------

      # * New method: erased?

      #--------------------------------------------------------------------------

      def erased?

        @erased

      end

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        return ""     if !@page || !@page.list || @page.list.size <= 0

        return @notes if @notes && @page.list == @note_page

        @note_page = @page.list.dup

        comment_list = []

        @page.list.each do |item|

          next unless item && (item.code == 108 || item.code == 408)

          comment_list.push(item.parameters[0])

        end

        @notes = comment_list.join("\r\n")

        @notes

      end  

    end

    #==============================================================================

    # ** Game_Interpreter

    #------------------------------------------------------------------------------

    #  An interpreter for executing event commands. This class is used within the

    # Game_Map, Game_Troop, and Game_Event classes.

    #==============================================================================

    class Game_Interpreter

      #--------------------------------------------------------------------------

      # * Alias method: command_108

      #--------------------------------------------------------------------------

      alias :command_108_ve_basic_module :command_108

      def command_108

        command_108_ve_basic_module

        comment_call

      end

      #--------------------------------------------------------------------------

      # * New method: comment_call

      #--------------------------------------------------------------------------

      def comment_call

      end

      #--------------------------------------------------------------------------

      # * New method: note

      #--------------------------------------------------------------------------

      def note

        @comments ? @comments.join("\r\n") : ""

      end

    end

    #==============================================================================

    # ** Game_Animation

    #------------------------------------------------------------------------------

    #  Classe that handles Animation data

    #==============================================================================

    class Game_Animation

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_accessor :ox

      attr_accessor :oy

      attr_accessor :rate

      attr_accessor :zoom

      attr_accessor :loop

      attr_accessor :type

      attr_accessor :map_x

      attr_accessor :map_y

      attr_accessor :mirror

      attr_accessor :follow

      attr_accessor :height

      attr_accessor :bitmap1

      attr_accessor :bitmap2

      attr_accessor :sprites

      attr_accessor :duration

      attr_accessor :direction

      attr_accessor :duplicated

      #--------------------------------------------------------------------------

      # * New method: initialize

      #--------------------------------------------------------------------------

      def initialize(animation, mirror, user = nil)

        @animation = animation

        @rate      = animation.name =~ /<RATE: ([+-]?\d+)>/i ? [$1.to_i, 1].max : 4

        @zoom      = animation.name =~ /<ZOOM: (\d+)%?>/i ? $1.to_i / 100.0 : 1.0

        @follow    = animation.name =~ /<FOLLOW>/i ? true : false

        @mirror    = mirror

        @duration  = frame_max * @rate

        @direction = user.anim_direction if user

        @sprites   = []

        bellow     = animation.name =~ /<BELLOW>/i

        above      = animation.name =~ /<ABOVE>/i

        @height    = bellow ? -1 : above ? 300 : 1

      end

      #--------------------------------------------------------------------------

      # * New method: data

      #--------------------------------------------------------------------------  

      def data

        @animation

      end

      #--------------------------------------------------------------------------

      # * New method: id

      #--------------------------------------------------------------------------  

      def id

        @animation.id

      end

      #--------------------------------------------------------------------------

      # * New method: name

      #--------------------------------------------------------------------------  

      def name

        @animation.name

      end

      #--------------------------------------------------------------------------

      # * New method: frame_max

      #--------------------------------------------------------------------------

      def frame_max

        @animation.frame_max

      end

      #--------------------------------------------------------------------------

      # * New method: position

      #--------------------------------------------------------------------------

      def position

        @animation.position

      end

      #--------------------------------------------------------------------------

      # * New method: animation1_name

      #--------------------------------------------------------------------------

      def animation1_name

        @animation.animation1_name

      end

      #--------------------------------------------------------------------------

      # * New method: animation2_name

      #--------------------------------------------------------------------------

      def animation2_name

        @animation.animation2_name

      end

      #--------------------------------------------------------------------------

      # * New method: animation1_hue

      #--------------------------------------------------------------------------

      def animation1_hue

        @animation.animation1_hue

      end

      #--------------------------------------------------------------------------

      # * New method: animation2_hue

      #--------------------------------------------------------------------------

      def animation2_hue

        @animation.animation2_hue

      end

      #--------------------------------------------------------------------------

      # * New method: frames

      #--------------------------------------------------------------------------

      def frames

        @animation.frames

      end

      #--------------------------------------------------------------------------

      # * New method: timings

      #--------------------------------------------------------------------------

      def timings

        @animation.timings

      end

    end

    #==============================================================================

    # ** Sprite_Character

    #------------------------------------------------------------------------------

    #  This sprite is used to display characters. It observes a instance of the

    # Game_Character class and automatically changes sprite conditions.

    #==============================================================================

    class Sprite_Character < Sprite_Base

      #--------------------------------------------------------------------------

      # * Overwrite method: set_character_bitmap

      #--------------------------------------------------------------------------

      def set_character_bitmap

        update_character_info

        set_bitmap

        set_bitmap_position

      end

      #--------------------------------------------------------------------------

      # * New method: center_y

      #--------------------------------------------------------------------------

      def actor?

        @character.is_a?(Game_Player) || @character.is_a?(Game_Follower)

      end

      #--------------------------------------------------------------------------

      # * New method: center_y

      #--------------------------------------------------------------------------

      def actor

        actor? ? @character.actor : nil

      end

      #--------------------------------------------------------------------------

      # * New method: update_character_info

      #--------------------------------------------------------------------------

      def update_character_info

      end

      #--------------------------------------------------------------------------

      # * New method: hue

      #--------------------------------------------------------------------------

      def hue

        @character.hue

      end

      #--------------------------------------------------------------------------

      # * New method: set_bitmap

      #--------------------------------------------------------------------------

      def set_bitmap

        self.bitmap = Cache.character(set_bitmap_name, hue)

      end

      #--------------------------------------------------------------------------

      # * New method: set_bitmap_name

      #--------------------------------------------------------------------------

      def set_bitmap_name

        @character_name

      end

      #--------------------------------------------------------------------------

      # * New method: set_bitmap_position

      #--------------------------------------------------------------------------

      def set_bitmap_position

        sign = get_sign

        if sign && sign.include?('$')

          @cw = bitmap.width / @character.frames

          @ch = bitmap.height / 4

        else

          @cw = bitmap.width / (@character.frames * 4)

          @ch = bitmap.height / 8

        end

        self.ox = @cw / 2

        self.oy = @ch

      end

      #--------------------------------------------------------------------------

      # * New method: get_sign

      #--------------------------------------------------------------------------

      def get_sign

        @character_name[/^[\!\$]./]

      end

    end

    #==============================================================================

    # ** Sprite_Battler

    #------------------------------------------------------------------------------

    #  This sprite is used to display battlers. It observes a instance of the

    # Game_Battler class and automatically changes sprite conditions.

    #==============================================================================

    class Sprite_Battler < Sprite_Base

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_accessor :dmg_mirror

      #--------------------------------------------------------------------------

      # * New method: center_x

      #--------------------------------------------------------------------------

      def center_x

        self.ox

      end

      #--------------------------------------------------------------------------

      # * New method: center_y

      #--------------------------------------------------------------------------

      def center_y

        self.oy / 2

      end

    end

    #==============================================================================

    # ** Spriteset_Battle

    #------------------------------------------------------------------------------

    #  This class brings together battle screen sprites. It's used within the

    # Scene_Battle class.

    #==============================================================================

    class Spriteset_Battle

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_reader   :viewport1

      #--------------------------------------------------------------------------

      # * New method: sprite

      #--------------------------------------------------------------------------

      def sprite(subject)

        battler_sprites.compact.select {|sprite| sprite.battler == subject }.first

      end

    end

    #==============================================================================

    # ** Window_Base

    #------------------------------------------------------------------------------

    #  This is a superclass of all windows in the game.

    #==============================================================================

    class Window_Base < Window

      #--------------------------------------------------------------------------

      # * Alias method: convert_escape_characters

      #--------------------------------------------------------------------------

      alias :convert_escape_ve_basic_module :convert_escape_characters

      def convert_escape_characters(text)

        result = text.to_s.clone

        result = text_replace(result)

        result = convert_escape_ve_basic_module(text)

        result

      end

      #--------------------------------------------------------------------------

      # * New method: text_replace

      #--------------------------------------------------------------------------

      def text_replace(result)

        result.gsub!(/\r/) { "" }

        result.gsub!(/\\/) { "\e" }

        result

      end

    end

    #==============================================================================

    # ** Scene_Battle

    #------------------------------------------------------------------------------

    #  This class performs battle screen processing.

    #==============================================================================

    class Scene_Battle < Scene_Base

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_reader   :subject

      attr_reader   :spriteset

    end

    #==============================================================================

    # ** Scene_Battle

    #------------------------------------------------------------------------------

    #  This class performs map screen processing.

    #==============================================================================

    class Scene_Map < Scene_Base

      #--------------------------------------------------------------------------

      # * Public Instance Variables

      #--------------------------------------------------------------------------

      attr_reader   :spriteset

    end
    Spoiler
    Custom Basic Actions:

    #==============================================================================# ** Victor Engine - Custom Basic Actions

    #------------------------------------------------------------------------------

    # Author : Victor Sant

    #

    # Version History:

    #  v 1.00 - 2012.01.10 > First relase

    #------------------------------------------------------------------------------

    #  This script allows to change the basic actions of the actor: Attack and

    # Defend, based on the actor, class, weapons, armors or states.

    #------------------------------------------------------------------------------

    # Compatibility

    #   Requires the script 'Victor Engine - Basic Module'

    #

    # * Overwrite methods (Default)

    #   class Game_Player < Game_Character

    #     def attack_skill_id

    #     def guard_skill_id

    #

    #   class Scene_Battle < Scene_Base

    #     def command_attack

    #

    # * Alias methods (Default)

    #   class Scene_Battle < Scene_Base

    #     def on_actor_cancel

    #

    #------------------------------------------------------------------------------

    # Actor, Classes, States, Weapons and Armors note tags:

    #   Tags to be used on Actor, Classes, States, Weapons and Armors note boxes.

    #

    #  <custom attack: x>

    #  <custom attack: x, y>

    #   Set a specifc skill to be used during normal attacks.

    #     x : Skill ID

    #     y : priority, opitional.

    #

    #  <custom guard: x>

    #  <custom guard: x, y>

    #   Set a specifc skill to be used during guards.

    #     x : Skill ID

    #     y : priority, opitional.

    #

    #------------------------------------------------------------------------------

    # Instructions:

    #  To instal the script, open you script editor and paste this script on

    #  a new section on bellow the Materials section. This script must also

    #  be bellow the script 'Victor Engine - Basic'

    #

    #------------------------------------------------------------------------------

    # Additional instructions:

    #  

    #  The priority defines wich skill will be used, if the actor shares have

    #  more than one skill available. By default, the priority is set by the skill

    #  ID (higher ID, higher priority)

    #

    #  The skill cost and restriction still valid, so if the skill used as attack

    #  have any cost it will be spent, and the attack won't be usable if the skill

    #  isn't usable.

    #

    #==============================================================================

    #==============================================================================

    # ** Victor Engine

    #------------------------------------------------------------------------------

    #   Setting module for the Victor Engine

    #==============================================================================

    module Victor_Engine

      #--------------------------------------------------------------------------

      # * Set the ID of the default normal attack skill

      #--------------------------------------------------------------------------

      VE_DEFAULT_ATTACK_SKILL_ID = 1

      #--------------------------------------------------------------------------

      # * Set the ID of the default guard skill

      #--------------------------------------------------------------------------

      VE_DEFAULT_GUARD_SKILL_ID = 2

      #--------------------------------------------------------------------------

      # * required

      #   This method checks for the existance of the basic module and other

      #   VE scripts required for this script to work, don't edit this

      #--------------------------------------------------------------------------

      def self.required(name, req, version, type = nil)

        if !$imported[:ve_basic_module]

          msg = "The script '%s' requires the script\n"

          msg += "'VE - Basic Module' v%s or higher above it to work properly\n"

          msg += "Go to http://victorscripts.wordpress.com/ to download this script."

          msgbox(sprintf(msg, self.script_name(name), version))

          exit

        else

          self.required_script(name, req, version, type)

        end

      end

      #--------------------------------------------------------------------------

      # * script_name

      #   Get the script name base on the imported value, don't edit this

      #--------------------------------------------------------------------------

      def self.script_name(name, ext = "VE")

        name = name.to_s.gsub("_", " ").upcase.split

        name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }

        name.join(" ")

      end

    end

    $imported ||= {}

    $imported[:ve_custom_basic_actions] = 1.00

    Victor_Engine.required:)ve_custom_basic_actions, :ve_basic_module, 1.00, :above)

    Victor_Engine.required:)ve_custom_basic_actions, :ve_target_arrow, 1.00, :bellow)

    #==============================================================================

    # ** Game_Actor

    #------------------------------------------------------------------------------

    #  This class handles actors. It's used within the Game_Actors class

    # ($game_actors) and referenced by the Game_Party class ($game_party).

    #==============================================================================

    class Game_Actor < Game_Battler

      #--------------------------------------------------------------------------

      # * Overwrite method: attack_skill_id

      #--------------------------------------------------------------------------

      def attack_skill_id

        set_action_skill_id("ATTACK")

      end

      #--------------------------------------------------------------------------

      # * Overwrite method: guard_skill_id

      #--------------------------------------------------------------------------

      def guard_skill_id

        set_action_skill_id("GUARD")

      end

      #--------------------------------------------------------------------------

      # * New method: set_action_skill_id

      #--------------------------------------------------------------------------

      def set_action_skill_id(type)

        basic_action_id = get_basic_skill_id(type)

        return basic_action_id if basic_action_id

        return VE_DEFAULT_ATTACK_SKILL_ID if type == "ATTACK"

        return VE_DEFAULT_GUARD_SKILL_ID  if type == "GUARD"

      end

      #--------------------------------------------------------------------------

      # * New method: get_basic_skill_id

      #--------------------------------------------------------------------------

      def get_basic_skill_id(type)

        attacks = []

        attacks += get_attaks_list(type, states.compact)

        attacks += get_attaks_list(type, weapons.compact)

        attacks += get_attaks_list(type, [self.class])

        attacks += get_attaks_list(type, [self])

        attacks += get_attaks_list(type, armors.compact)

        attacks.sort! {|a, b| b[:id] <=> a[:id]}

        attacks.sort! {|a, b| b[:prior] <=> a[:prior]}

        attacks.first ? attacks.first[:id] : nil

      end

      #--------------------------------------------------------------------------

      # * New method: get_attaks_list

      #--------------------------------------------------------------------------

      def get_attaks_list(type, list)

        attacks = []

        regexp  = /<CUSTOM #{type}: (\d+)(?: *, *(\d+))?>/i

        list.each do |obj|

          next unless obj.note =~ regexp

          attacks.push({id: $1.to_i, prior: $2 ? $2.to_i : 0})

        end

        attacks

      end

    end

    #==============================================================================

    # ** Scene_Battle

    #------------------------------------------------------------------------------

    #  This class performs battle screen processing.

    #==============================================================================

    class Scene_Battle < Scene_Base

      #--------------------------------------------------------------------------

      # * Overwrite method: command_attack

      #--------------------------------------------------------------------------

      def command_attack

        BattleManager.actor.input.set_attack

        skill = $data_skills[battleManager.actor.attack_skill_id]

        if !skill.need_selection?

          next_command

        elsif skill.for_opponent?

          select_enemy_selection

        else

          select_actor_selection

        end

      end

      #--------------------------------------------------------------------------

      # * Alias method: on_actor_cancel

      #--------------------------------------------------------------------------

      alias :on_actor_cancel_ve_custom_basic_actions :on_actor_cancel

      def on_actor_cancel

        on_actor_cancel_ve_custom_basic_actions

        case @actor_command_window.current_symbol

        when :attack

          @actor_command_window.activate

        end

      end

    end
    Huhm... Sorry, it's not what i'm looking for. Because it only replace attack and guard, but what i want to replace is skill. And, the one i want to replace is only animation, not the skill. Because my game is gonna long, and 999 slot skill in database maybe not enough. So, i don't want to waste slots for every replacement of skills.
  10. bump
  11. bump
  12. bump
  13. thechancellor said:
    I asked for this a while back. Tsukihime pulled through. http://www.himeworks.com/2014/03/23/dynamic-weapon-animations/
    Huhm... This should give a good use for this, though it's not what i really looking for :D But anyway, thank you.

    Well, 'cause i'm using MOG's active chain. For example, after i use a skill which animation is a slash from the left, this will chain to a skill which animation is a slash from the right. And, if i equipped a weapon with fire element, those skill will change to animation fire slash from the left and fire slash from the right to the other. So, with that DWA of hime, the two skill will have a same animation of weapon :D