- #============================================================================== 
- #  
- # �� Yanfly Engine Ace - State Animations v1.01 
- # -- Last Updated: 2014.03.22 
- # -- Level: Normal   在状态栏里备注显示的动画:   <state ani: X> 
- # -- Requires: n/a 
- # -- Special Thanks:  
- #    SoulPour777 for the Bug Fix for V1.01 
- #============================================================================== 
-   
- $imported = {} if $imported.nil? 
- $imported["YEA-StateAnimations"] = true 
-   
- #============================================================================== 
- # �� Updates 
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
- # 2014.03.22 - Some of the animations have been using the same reference count, 
- #              which results to cancelling the animation. 
- # 2011.12.23 - Started Script and Finished. 
- #  
- #============================================================================== 
- # �� Introduction 
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
- # A missing feature from RPG Maker XP. Status effects had animations replaying 
- # on them constantly to indicate that a user was affected by a state. Only the 
- # state with the highest priority and possesses an animation will be played. 
- #  
- #============================================================================== 
- # �� Instructions 
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
- # To install this script, open up your script editor and copy/paste this script 
- # to an open slot below �� Materials/�f�� but above �� Main. Remember to save. 
- #  
- # ----------------------------------------------------------------------------- 
- # State Notetags - These notetags go in the states notebox in the database. 
- # ----------------------------------------------------------------------------- 
- #  
- # Causes the status effect to play battle animation x repeatedly on the battler 
- # if the battler is affected by this state and if this state is the highest 
- # priority state with an animation. 
- #  
- #============================================================================== 
- # �� Compatibility 
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
- # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that 
- # it will run with RPG Maker VX without adjusting. 
- #  
- #============================================================================== 
-   
- module YEA 
-   module STATE_ANIMATION 
-   
-     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
-     # - Adjust the state animation settings here. - 
-     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
-     # These settings decide whether or not state animations will cause the 
-     # screen to flash, play sound effects, and what kinds of zoom levels will 
-     # be used on actors affected by states with animations. 
-     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
-     PLAY_SOUND = true      # 播放状态动画的声音? 
-     PLAY_FLASH = false      # 使用屏幕闪光的状态动画? 
-   
-     PLAY_ACTOR = false      # 在角色上播放动画? 
-     ACTOR_ZOOM = 0.25       #0.25  角色动画缩放水平 
-   
-   end # STATE_ANIMATION 
- end # YEA 
-   
- #============================================================================== 
- # �� Editting anything past this point may potentially result in causing 
- # computer damage, incontinence, explosion of user's head, coma, death, and/or 
- # halitosis so edit at your own risk. 
- #============================================================================== 
-   
- module YEA 
-   module REGEXP 
-   module STATE 
-   
-     STATEANI = /<(?:STATE_ANIMATION|state ani|animation|ani):[ ](\d+)>/i 
-   
-   end # STATE 
-   end # REGEXP 
- end # YEA 
-   
- #============================================================================== 
- # �� DataManager 
- #============================================================================== 
-   
- module DataManager 
-   
-   #-------------------------------------------------------------------------- 
-   # alias method: load_database 
-   #-------------------------------------------------------------------------- 
-   class <<self; alias load_database_sani load_database; end 
-     def self.load_database 
-       load_database_sani 
-       load_notetags_sani 
-     end 
-   
-   #-------------------------------------------------------------------------- 
-   # new method: load_notetags_sani 
-   #-------------------------------------------------------------------------- 
-   def self.load_notetags_sani 
-     for state in $data_states 
-       next if state.nil? 
-       state.load_notetags_sani 
-       end 
-      end 
-     end  
-     # DataManager 
-   
-   #-------------------------------------------------------------------------- 
-   # # �� RPG::State 
-   #-------------------------------------------------------------------------- 
-   
-   class RPG::State < RPG::BaseItem 
-   
-   #-------------------------------------------------------------------------- 
-   # public instance variables 
-   #-------------------------------------------------------------------------- 
-   attr_accessor :state_animation 
-   
-   def load_notetags_sani 
-     @state_animation = 0 
-     #--- 
-         self.note.split(/[\r\n]+/).each { |line| 
-         case line 
-         #--- 
-   
-         when YEA::REGEXP::STATE::STATEANI 
-           @state_animation = $1.to_i 
-         end 
-         } # self.note.split 
-         #--- 
-   
-       end 
-   
-     end # RPG::State 
-   
-   
- #============================================================================== 
- #�� Sprite_Battler 
- #============================================================================== 
-   
- class Sprite_Battler < Sprite_Base 
-   
-   #-------------------------------------------------------------------------- 
-   # class variables 
-   #-------------------------------------------------------------------------- 
-   @@state_ani_checker = [] 
-   @@state_ani_spr_checker = [] 
-   @@_reference_count = {} 
-   
-   #-------------------------------------------------------------------------- 
-   # alias method: initialize 
-   #-------------------------------------------------------------------------- 
-   alias sprite_battler_initialize_sani initialize 
-   def initialize(viewport, battler = nil) 
-     sprite_battler_initialize_sani(viewport, battler) 
-     @state_ani_duration = 0 
-   end 
-   
-   #-------------------------------------------------------------------------- 
-   # alias method: dispose 
-   #-------------------------------------------------------------------------- 
-   alias sprite_battler_dispose_sani dispose 
-   def dispose 
-     dispose_state_animation 
-     sprite_battler_dispose_sani 
-   end 
- #============================================================================== 
- #  
- # alias method: setup_new_effect  
- #============================================================================== 
- alias sprite_battler_setup_new_effect_sani setup_new_effect 
- def setup_new_effect 
-   sprite_battler_setup_new_effect_sani 
-   setup_state_ani_effect 
- end 
-   
- #===== 
- # new method: setup_state_ani_effect 
- #===== 
- def setup_state_ani_effect 
-   return if @battler.state_animation_id.nil? 
-   if @battler.state_animation_id == 0 
-     dispose_state_animation 
-   else 
-     animation = $data_animations[@battler.state_animation_id] 
-     start_state_animation(animation) 
-     end 
-   end 
-   
-   #-------------------------------------------------------------------------- 
-   # alias method: update 
-   #-------------------------- 
-    alias sprite_battler_update_sani update 
-    def update 
-      sprite_battler_update_sani 
-      update_state_animations 
-    end 
-   
-    #======= 
-    # new method: update_state_animations 
-    #=============== 
-    def update_state_animations 
-      update_state_animation 
-      @@state_ani_checker.clear 
-      @@state_ani_spr_checker.clear 
-    end 
-   
-    #--------------------- 
-    #new method: state_animation? 
-    #---------------------- 
-    def state_animation? 
-      return !@state_animation.nil? 
-    end 
-   
-    #------------------ 
-    # new method: start_state_animation 
-    #--------------------- 
-    def start_state_animation(animation, mirror = true) 
-      return if !@state_animation.nil? && @state_animation.id == animation.id 
-      dispose_state_animation 
-      @state_animation = animation 
-      return if @state_animation.nil? 
-      @state_ani_mirror = mirror 
-      set_animation_rate 
-      @state_ani_duration = @state_animation.frame_max * @ani_rate + 1 
-      load_state_animation_bitmap 
-      make_state_animation_sprites 
-      set_state_animation_origin 
-      end 
-   
-   #---------------------------  
-  # new method: load_state_animation_bitmap  
-    #------------------------ 
-    def load_state_animation_bitmap 
-      animation1_name = @state_animation.animation1_name 
-      animation1_hue = @state_animation.animation1_hue 
-      animation2_name = @state_animation.animation2_name 
-      animation2_hue = @state_animation.animation2_hue 
-      @state_ani_bitmap1 = Cache.animation(animation1_name, animation1_hue) 
-      @state_ani_bitmap2 = Cache.animation(animation2_name, animation2_hue) 
-      if @@_reference_count.include?(@state_ani_bitmap1) 
-        @@_reference_count[@state_ani_bitmap1] += 1 
-      else 
-        @@_reference_count[@state_ani_bitmap1] = 1 
-      end 
-      if @@_reference_count.include?(@ani_bitmap2) 
-        @@_reference_count[@state_ani_bitmap2] += 1 
-      else 
-        @@_reference_count[@state_ani_bitmap2] = 1 
-      end 
-      Graphics.frame_reset 
-      end 
-   
-  #-------------------   
-  # new method: make_state_animation_sprites   
-  #----------------------   
-    def make_state_animation_sprites 
-      @state_ani_sprites = [] 
-      if @use_sprite && !@@state_ani_spr_checker.include?(@state_animation) 
-        16.times do 
-          sprite = ::Sprite.new(viewport) 
-          sprite.visible = true 
-          @state_ani_sprites.push(sprite) 
-        end 
-        if @state_animation.position == 3 
-          @@state_ani_spr_checker.push(@animation) 
-        end 
-      end 
-      @state_ani_duplicated = @@state_ani_checker.include?(@state_animation) 
-      if !@state_ani_duplicated && @state_animation.position == 3 
-        @@state_ani_checker.push(@state_animation) 
-      end 
-      end 
-   
-    #----------------- 
-    # new method: set_state_animation_origin 
-    #------------------- 
-   def set_state_animation_origin 
-     if @state_animation.position == 3 
-     if viewport == nil 
-       @state_ani_ox = Graphics.width / 2 
-       @state_ani_oy = Graphics.height / 2 
-     else 
-       @state_ani_ox = viewport.rect.width / 2 
-       @state_ani_oy = viewport.rect.height / 2 
-     end 
-   else 
-     @state_ani_ox = x - ox + width / 2 
-     @state_ani_oy = y - oy + height / 2 
-     if @state_animation.position == 0 
-       @state_ani_oy -= height / 2 
-     elsif @state_animation.position == 2 
-       @state_ani_oy += height / 2 
-     end 
-   end 
-   end 
-   
-    #-------------- 
-    # new method: dispose_state_animation 
-    #------------- 
-    def dispose_state_animation 
-      if @state_ani_bitmap1 
-        @@_reference_count[@state_ani_bitmap1] -= 1 
-        if @@_reference_count[@state_ani_bitmap1] == 0 
-          @state_ani_bitmap1.dispose 
-        end 
-      end 
-      if @state_ani_bitmap2 
-        @@_reference_count[@state_ani_bitmap2] -= 1 
-        if @@_reference_count[@state_ani_bitmap2] == 0 
-          @state_ani_bitmap2.dispose 
-        end 
-      end 
-      if @state_ani_sprites 
-        @state_ani_sprites.each {|sprite| sprite.dispose } 
-        @state_ani_sprites = nil 
-        @state_animation = nil 
-      end 
-      @state_ani_bitmap1 = nil 
-      @state_ani_bitmap2 = nil 
-      end 
-   
-    #-------------- 
-      # new method: update_state_animation 
-    #--------------   
-    def update_state_animation 
-      return unless state_animation? 
-      @state_ani_duration -= 1 
-      if @state_ani_duration % @ani_rate == 0 
-        if @state_ani_duration > 0 
-          @state_frame_index = @state_animation.frame_max 
-          change = (@state_ani_duration + @ani_rate - 1) / @ani_rate 
-          @state_frame_index -= change 
-          @state_animation.timings.each do |timing| 
-            next unless timing.frame == @state_frame_index 
-            state_animation_process_timing(timing) 
-          end 
-        else 
-          @state_ani_duration = @state_animation.frame_max * @ani_rate + 1 
-        end 
-      end 
-      return if @state_frame_index.nil? 
-      state_animation_set_sprites(@state_animation.frames[@state_frame_index]) 
-      set_state_animation_origin 
-    end   
-   
-    #~~~~~~~~~~~~~~~~ 
-    # new method: end_state_animation 
-    #~~~~~~~~~~~~~~~~ 
-    def end_state_animation 
-      dispose_state_animation 
-      end 
-   
-      #~~~~~~~~~~~~ 
-    # new method: state_animation_set_sprites 
-    #~~~~~~~~~~~~~~~~~~ 
-    def state_animation_set_sprites(frame) 
-      return if @state_animation.nil? 
-      return if frame.nil? 
-      cell_data = frame.cell_data 
-      @state_ani_sprites.each_with_index do |sprite, i| 
-        next unless sprite 
-        pattern = cell_data[i, 0] 
-        if !pattern || pattern < 0 
-          sprite.visible = true 
-          next 
-        end 
-        sprite.bitmap = pattern < 100 ? @state_ani_bitmap1 : @state_ani_bitmap2 
-        sprite.visible = true 
-        sprite.src_rect.set(pattern % 5 * 192, 
-        pattern % 100 / 5 * 192, 192, 192) 
-        if @state_ani_mirror 
-          sprite.x = @state_ani_ox - cell_data[i, 1] 
-          sprite.y = @state_ani_oy + cell_data[i, 2] 
-          sprite.angle = (360 - cell_data[i, 4]) 
-          sprite.mirror = (cell_data[i, 5] == 0) 
-        else 
-          sprite.x = @state_ani_ox + cell_data[i, 1] 
-          sprite.y = @state_ani_oy + cell_data[i, 2] 
-          sprite.angle = cell_data[i, 4] 
-          sprite.mirror = (cell_data[i, 5] == 1) 
-        end 
-        sprite.z = self.z + 250 + i 
-        sprite.ox = 96 
-        sprite.oy = 96 
-        sprite.zoom_x = cell_data[i, 3] / 100.0 
-        sprite.zoom_y = cell_data[i, 3] / 100.0 
-        if @battler.actor? 
-          zoom = YEA::STATE_ANIMATION::ACTOR_ZOOM 
-          sprite.zoom_x *= zoom 
-          sprite.zoom_y *= zoom 
-        end 
-        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0 
-        sprite.blend_type = cell_data[i, 7] 
-      end 
-      end 
-   
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~    
- # new method: state_animation_process_timing    
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~    
-  def state_animation_process_timing(timing) 
-    timing.se.play if YEA::STATE_ANIMATION::PLAY_SOUND 
-    case timing.flash_scope 
-    when 1 
-      self.flash(timing.flash_color, timing.flash_duration * @ani_rate) 
-      when 2 
-        return unless YEA::STATE_ANIMATION::PLAY_FLASH 
-        if viewport && !@state_ani_duplicated 
-          flash_amount = timing.flash_duration * @ani_rate 
-          viewport.flash(timing.flash_color, flash_amount) 
-        end 
-        when 3 
-          self.flash(nil, timing.flash_duration * @ani_rate) 
-        end 
-      end 
-   
-      end # Sprite_Battler   
-   
- # ~~~~~~~~~~   
- # �� Game_BattlerBase    
- # ~~~~~~~~~~   
-   
-   class Game_BattlerBase    
-   
-  #   
-  # public instance variables   
-  #   
-    attr_accessor :state_animation_id 
-   
-  #   
-    # alias method: refresh 
-  #   
-    alias game_battlerbase_refresh_sani refresh 
-    def refresh 
-      game_battlerbase_refresh_sani 
-      reload_state_animation 
-      end   
-   
-  #     
-  # new method: reload_state_animation     
-  # 
-  def reload_state_animation 
-    @state_animation_id = 0 
-    return if actor? && !YEA::STATE_ANIMATION::PLAY_ACTOR 
-    for state in states 
-      next unless state.state_animation > 0 
-      @state_animation_id = state.state_animation 
-      break 
-    end 
-  end 
-   
-  end # Game_BattlerBase 
-   
-   
-  # 
-  # �� End of File 
-  # 
-  # 
-  #