查看: 907|回复: 0

[已经过期] ATB脚本二次行动的问题

[复制链接]
梦石
0
星屑
536
在线时间
69 小时
注册时间
2016-5-5
回帖
16
发表于 2018-2-25 23:40:12 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我用了ATB系统的一个脚本发现

在主角可二次行动的条件下 分别使用对敌方和对我方(攻击或物品)

最后都会变成对敌方使用(或我方)

举个例
在同一回合我能做两次行动
我先攻击敌方再给自己吃药
最后卻变成 我攻击到敌方了  但敌方吃到药....

可否解答下 附上脚本

[pre lang="ruby"]#==============================================================================
# +++ MOG - Battler Motion (v3.6) +++
#==============================================================================
# By Moghunter
# https://atelierrgss.wordpress.com/
#==============================================================================
# Adiciona efeitos de animações nos sprites dos battlers.
# ● Animação inicial (entrada)de batalha.
# ● Animação de espera.
# ● Animação de ação.
# ● Animação de dano.
# ● Animação de colapso.
#==============================================================================

#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v3.6 - Melhoria na compatibilidade com MOG Battle Camera.
# v3.5 - Possibilidade de desabilitar o efeito "blinking"
#      - Melhoria no tempo de execução do efeito slice
# v3.4 - Adição da função SLICE.
#==============================================================================

$imported = {} if $imported.nil?
$imported[:mog_battler_motion] = true

#==============================================================================
# ● CONFIGURAÇÃO
#==============================================================================
# ■ Animação inicial de entrada ao começar a batalha.
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Appear = X>
#
# X = 0
# Battler desliza horizontalmente.
#
# X = 1
# Battler desliza verticalmente.
#
# X = 2
# Battler rola (Cambalhota O_o) pela tela.
#
# X = 3
# Zoom IN
#
# X = 4
# Zoom Out
#
# X = 5
# Efeito de emergir do solo.
#
#==============================================================================
# ■ Animações dos battlers em modo espera.
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Standby = X>
#
# X = 0
# Ativa o efeito do battler respirando.
#
# X = 1
# Ativa o efeito do battler levitando.
#
# X = 2
# Ativa o efeito do battler movimentando para os lados.
#
#==============================================================================
# ■ Animações dos battlers em modo de ação.
#==============================================================================
# Coloque as seguintes Tags na caixa de notas de itens ou habilidades.
#
# <Motion Action = X>
#
# X = 0
# Ativa o efeito de ação de zoom.
#
# X = 1
# Ativa o efeito de ação de pular.
#
# X = 2
# Ativa o efeito de girar para a esquerda.
#
# X = 3
# Ativa o efeito de girar para a direita.
#
# X = 4
# Ativa o efeito de tremer.
#
# X = 5
# Ativa o efeito de ação frontal.
#
# X = 6
# Ativa o efeito de dar um passo para esquerda.
#
# X = 7
# Ativa o efeito de de dar um passo para direita.
#
#==============================================================================
# ■ Animações dos battlers em Colapso.
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Collapse = X>
#
# X = 0
# Ativa colapso na vertical.
#
# X = 1
# Ativa o colapso na horizontal.
#
# X = 2
# Ativa o colapso em Zoom OUT.
#
# X = 3
# Ativa o colapso em Zoom IN.
#
# X = 4
# Ativa o colapso em Zoom IN e Zoom OUT.
#
# X = 5
# Ativa o colapso em Modo Boss.
#
# X = 6
# Não ativa colapso.(Do nothing)
#
# X = 7
# Ativa o collapse em Slice.
#
#==============================================================================
# ■ Forçar o collapso Slice
#==============================================================================
# Coloque a Tag abaixo na caixa de notas da habilidade.
#
# <Slice>
#
#==============================================================================
# ■ Ativar animação de dano em condições maléficas.
#==============================================================================
# Coloque a seguinte Tag na caixa de notas de condições para ativar o efeito
# de dano.
#
# <Bad State>
#
#==============================================================================
# ■ Definir uma posição específica do battler inimigo
#==============================================================================
# Para definir uma posição do inimigo na tela use a Tag abaixo na caixa
# dos inimigos
#
# <Screen X Y = 150 - 400>
#
#==============================================================================
module MOG_BATTLER_MOTION

  #============================================================================
  #Ativar o efeito no aliados.
  #============================================================================
  ENABLE_ACTOR_MOTION = true
  
  #============================================================================
  #Ativar o efeito nos inimigos
  #============================================================================
  ENABLE_ENEMY_MOTION = true
  
  #============================================================================
  #Definição da velocidade do efeito de respirar.
  #============================================================================
  BREATH_EFFECT_SPEED = 4  #Default 1
  
  #============================================================================
  #Definição do limite de zoom do efeito de respirar.
  #============================================================================
  BREATH_EFFECT_RANGE = [0.98, 1.00] #Default [0.92, 1.00]
  
  #============================================================================
  # Ativar a função mirror dependendo do lado do oponente.
  #============================================================================
  BATTLER_MIRROR_DIRECTION = true
  
  #============================================================================
  # Ativar o efeito Blink ao receber dano.
  #============================================================================
  ENABLE_DAMAGE_BLINK_EFFECT = false
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :battler_in_motion
  attr_accessor :bact_wait_d
  attr_accessor :bact_phase
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_battler_motion_initialize initialize
  def initialize
      @battler_in_motion = false ; @bact_wait_d = 0 ; @bact_phase = [0,0]
      mog_battler_motion_initialize
  end  
  
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
   attr_accessor :motion_start
   attr_accessor :motion_stand
   attr_accessor :motion_action
   attr_accessor :motion_damage
   attr_accessor :motion_collapse
   attr_accessor :motion_slice
   attr_accessor :motion_move
   attr_accessor :motion_org_pos
   attr_accessor :motion_bms
   attr_accessor :bact_action
   attr_accessor :bact_skill
   attr_accessor :primary_target
   
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
   alias mog_motion_animation_initialize initialize
   def initialize
       mog_motion_animation_initialize
       @motion_start = -1
       @motion_stand = [-1,0]
       @motion_action = [-1,0]
       @motion_collapse = [99,0]
       @motion_damage = [0,0]
       @motion_move = [false,0,0]
       @motion_org_pos = [0,0]
       @motion_bms = [0,false]
       @motion_slice = [false,0,0]
       bact_action_clear
   end     

  #--------------------------------------------------------------------------
  # ● Bact Action Clear
  #--------------------------------------------------------------------------      
  def bact_action_clear
      @bact_action = [false,0,0] ; @bact_skill = nil
  end   

  #--------------------------------------------------------------------------
  # ● Added New State
  #--------------------------------------------------------------------------  
  alias mog_motion_animation_add_new_state add_new_state
  def add_new_state(state_id)
      mog_motion_animation_add_new_state(state_id)
      self.motion_damage[0] = 1 if $data_states[state_id].note =~ /<Bad State>/
  end   

  #--------------------------------------------------------------------------
  # ● Move To
  #--------------------------------------------------------------------------  
  def move_to(x,y)
      return if self.dead?
      @motion_move = [true,x,y]
  end
  
  #--------------------------------------------------------------------------
  # ● Set Original Position
  #--------------------------------------------------------------------------  
  def set_org_pos
      scx = self.screen_x rescue 0
      scy = self.screen_y rescue 0   
      @motion_opos = [scx,scy]
  end
  
  #--------------------------------------------------------------------------
  # ● Return Org
  #--------------------------------------------------------------------------  
  def return_org
      return if self.dead?
      @motion_move = [true,@motion_opos[0],@motion_opos[1]]   
  end
   
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------  
  alias mog_bactmotion_item_apply item_apply
  def item_apply(user, item)
      return if self.motion_slice[0]
      mog_bactmotion_item_apply(user, item)
      unless self.is_a?(Game_Actor)
         self.motion_collapse[0] = 7 if self.dead? and item.note =~ /<Slice>/
      end
  end
  
end

#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
   
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_motion_animation_enemy_initialize initialize
  def initialize(index, enemy_id)
      mog_motion_animation_enemy_initialize(index, enemy_id)
      setup_motion_animation(enemy_id)
  end
  
  #--------------------------------------------------------------------------
  # ● Setup Motion Animation
  #--------------------------------------------------------------------------  
  def setup_motion_animation(enemy_id)
      self.motion_stand[0] = $1.to_i if  enemy.note =~ /<Motion Standby = (\d+)>/i
      self.motion_collapse[0] = $1.to_i if  enemy.note =~ /<Motion Collapse = (\d+)>/i
      self.motion_start =  $1.to_i if  enemy.note =~ /<Motion Appear = (\d+)>/i
  end
end

#==============================================================================
# ■ Game Actor
#==============================================================================
class Game_Actor < Game_Battler

  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------
  alias mog_motion_animation_actor_setup setup
  def setup(actor_id)
      mog_motion_animation_actor_setup(actor_id)
      self.motion_stand[0] = $1.to_i if  actor.note =~ /<Motion Standby = (\d+)>/i
      self.motion_collapse[0] = $1.to_i if  actor.note =~ /<Motion Collapse = (\d+)>/i      
      self.motion_start =  $1.to_i if  actor.note =~ /<Motion Appear = (\d+)>/i  
  end

end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # ● Execute Damage
  #--------------------------------------------------------------------------  
  alias mog_battler_motion_execute_damage execute_damage
  def execute_damage(user)
      mog_battler_motion_execute_damage(user)
      self.motion_damage[0] = 1 if @result.hp_damage > 0
  end
  
end

#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  alias mog_battler_motion_update update
  def update
      $game_temp.battler_in_motion = false
      mog_battler_motion_update
  end
  
  #--------------------------------------------------------------------------
  # * Animation?
  #--------------------------------------------------------------------------
  alias mog_battler_motion_animation? animation?
  def animation?
      return true if $game_temp.battler_in_motion
      mog_battler_motion_animation?
  end
  #--------------------------------------------------------------------------
  # * Effect?
  #--------------------------------------------------------------------------
  alias mog_battler_motion_effect? effect?
  def effect?
      return true if $game_temp.battler_in_motion
      mog_battler_motion_effect?
  end
  
end


#==============================================================================
#==============================================================================
# ● INITIAL ●
#==============================================================================
#==============================================================================

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base

  #--------------------------------------------------------------------------
  # ● Update Bitmap
  #--------------------------------------------------------------------------   
  alias mog_bactmotion_update_bitmap update_bitmap
  def update_bitmap
      return if @battler.motion_slice[0]
      mog_bactmotion_update_bitmap
  end   
      
  #--------------------------------------------------------------------------
  # ● Can Update Motion?
  #--------------------------------------------------------------------------   
  def can_update_motion?
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------  
  alias mog_motion_animation_update_position update_position
  def update_position
      active_battler_motion      
      if @battler_motion_active
         update_motion_animation
         self.z = @battler.screen_z rescue nil
         self.z += 20 if @battler.bact_data[1] != nil and !@battler.bact_data[6]
         return
      end      
      mog_motion_animation_update_position
      self.z += 20 if @battler.bact_data[1] != nil and !@battler.bact_data[6]
  end  
  
  #--------------------------------------------------------------------------
  # ● Active Battler Motion
  #--------------------------------------------------------------------------   
  def active_battler_motion
      return if @motion_initial_base != nil or bitmap == nil
      return if @battler == nil
      return if !@battler.exist?
      @motion_initial_base = true
      @battler_motion_active = true if can_update_battler_motion?
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Update Battler Motion
  #--------------------------------------------------------------------------      
  def can_update_battler_motion?
      return false if @battler.is_a?(Game_Actor)
      return false if @battler == nil
      return false if @battler.dead?
      return false if !@battler.use_sprite?
      return false if @battler.screen_x == nil
      return false if @battler.is_a?(Game_Actor) and !MOG_BATTLER_MOTION::ENABLE_ACTOR_MOTION
      return false if @battler.is_a?(Game_Enemy) and !MOG_BATTLER_MOTION::ENABLE_ENEMY_MOTION
      return false if $imported[:mog_sprite_actor] and @battler.is_a?(Game_Actor)
      return true
  end
   
  #--------------------------------------------------------------------------
  # ● Update Motion Animation
  #--------------------------------------------------------------------------   
  def update_motion_animation
      setup_initial_motion
      execute_start_animation
      return if @wait_motion_start
      if can_execute_collapse?
         execute_motion_collapse
      else
         if can_update_motion?
            execute_motion_move_to if can_update_move_to?
            execute_motion_damage
            execute_motion_idle if can_update_idle?
            execute_motion_action if can_update_action?
         end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Setup Initial Motion
  #--------------------------------------------------------------------------      
  def setup_initial_motion
      return if @motion_initial != nil
      @motion_initial = true
      @collapse_done = false
      @motion_speed = 0
      @start_speed = [0,0]      
      @battler.motion_collapse[1] = 0
      self.x = @battler.screen_x rescue 0
      self.y = @battler.screen_y rescue 0
      self.z = @battler.screen_z rescue 100
      @battler.motion_bms = [0,false]
      @battler.set_org_pos      
      setup_motion_stand
      @original_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,255]
      setup_motion_start
      setup_motion_damage            
      setup_motion_action
  end  

  #--------------------------------------------------------------------------
  # ● Return Set
  #--------------------------------------------------------------------------         
  def return_set(value)
      self.x = value[0]
      self.y = value[1]
      self.zoom_x = value[2]
      self.zoom_y = value[3]
      self.mirror = value[4]
      self.angle = value[5]
      self.opacity = value[6]      
  end  

  #--------------------------------------------------------------------------
  # ● setup_motion_start
  #--------------------------------------------------------------------------            
  def setup_motion_start
      @wait_motion_start = true
      @scr_rect_speed = 1      
      case @battler.motion_start
         when 0  
            self.x = 0 - (self.bitmap.width + rand(100))
         when 1
            self.y = 0 - (self.bitmap.height + rand(100))
         when 2   
            self.angle = 360
            self.x = 0 - self.bitmap.width
         when 3   
            self.zoom_x = 1.5 + (rand(10) / 100.0)
            self.zoom_y = self.zoom_x
            self.opacity = 0
         when 4
            self.zoom_x = 0.2 + (rand(10) / 100.0)
            self.zoom_y = self.zoom_x
            self.opacity = 0
         when 5   
            self.src_rect.y = -self.bitmap.height
            @scr_rect_speed = self.bitmap.height / 40
            @scr_rect_speed = 1 if @scr_rect_speed <= 0
         else   
           @wait_motion_start = false
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Start Animation
  #--------------------------------------------------------------------------         
  def execute_start_animation
      return if !@wait_motion_start
      $game_temp.battler_in_motion = true
      s_x = 1 + ((self.x - @original_set[0]).abs / (20 + @start_speed[0]))
      s_y = 1 + ((self.y - @original_set[1]).abs / (20 + @start_speed[1]))      
      if self.x < @original_set[0]
         self.x += s_x
         self.x = @original_set[0] if self.x >= @original_set[0]
      elsif self.x > @original_set[0]
         self.x -= s_x
         self.x = @original_set[0] if self.x <= @original_set[0]
      end
      if self.y < @original_set[1]
         self.y += s_y
         self.y = @original_set[1] if self.y > @original_set[1]
      elsif self.y > @original_set[1]
         self.y -= s_y
         self.y = @original_set[1] if self.y < @original_set[1]
      end
      if self.zoom_x != @original_set[2]
         if self.zoom_x > @original_set[2]
            self.zoom_x -= 0.01
            self.zoom_x = @original_set[2] if self.zoom_x < @original_set[2]
         elsif self.zoom_x < @original_set[2]
            self.zoom_x += 0.01
            self.zoom_x = @original_set[2] if self.zoom_x > @original_set[2]
         end         
      end  
      if self.zoom_y != @original_set[3]
         if self.zoom_y > @original_set[3]
            self.zoom_y -= 0.01
            self.zoom_y = @original_set[3] if self.zoom_y < @original_set[3]
         elsif self.zoom_y < @original_set[3]
            self.zoom_y += 0.01
            self.zoom_y = @original_set[3] if self.zoom_y > @original_set[3]
         end         
      end        
      self.opacity += 10
      if self.angle > 0
         self.angle -= 5
         self.angle = @original_set[5] if self.angle < @original_set[5]
      end
      if self.src_rect.y != 0
         self.src_rect.y += @scr_rect_speed
         self.src_rect.y = 0 if self.src_rect.y > 0
      end
      if sprite_original_set?  
         @wait_motion_start = false
         @battler.motion_bms[1] = true
         self.src_rect.y = 0
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Sprite original Set?
  #--------------------------------------------------------------------------         
  def sprite_original_set?
      return false if self.x != @original_set[0]
      return false if self.y != @original_set[1]   
      return false if self.zoom_x != @original_set[2]
      return false if self.zoom_y != @original_set[3]        
      return false if self.mirror != @original_set[4]
      return false if self.angle != @original_set[5]
      return false if self.opacity != @original_set[6]     
      return false if self.src_rect.y != 0      
      return true
  end  
   
end

#==============================================================================
#==============================================================================
# ● MOVE TO ●
#==============================================================================
#==============================================================================

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  
  #--------------------------------------------------------------------------
  # ● Can Update Move_to
  #--------------------------------------------------------------------------   
  def can_update_move_to?
      return false if !@battler.motion_move[0]
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Motion Move_to
  #--------------------------------------------------------------------------        
  def execute_motion_move_to      
      $game_temp.battler_in_motion = true
      execute_motion_mv(0,self.x,@battler.motion_move[1])
      execute_motion_mv(1,self.y,@battler.motion_move[2])
      mv_clear
  end
   
  #--------------------------------------------------------------------------
  # ● MV Clear
  #--------------------------------------------------------------------------      
  def mv_clear
      return if self.x != @battler.motion_move[1]
      return if self.y != @battler.motion_move[2]
      @battler.motion_move[0] = false
  end
      
  #--------------------------------------------------------------------------
  # ● Execute Motion Mv
  #--------------------------------------------------------------------------      
  def execute_motion_mv(type,cp,np)
      sp = 2 + ((cp - np).abs / 20)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
  end   
  
end

#==============================================================================
#==============================================================================
# ● DAMAGE ●
#==============================================================================
#==============================================================================

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base

  #--------------------------------------------------------------------------
  # ● Can Update Damage
  #--------------------------------------------------------------------------   
  def can_update_damage?
      return false if @battler.motion_damage[1] == 0
      return false if @battler.motion_move[0]
      return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp[0] > 0
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Setup Initial Motion
  #--------------------------------------------------------------------------        
  def execute_motion_damage
      damage_refresh
      update_motion_damage if can_update_damage?
  end

  #--------------------------------------------------------------------------
  # ● Setup Motion Damage
  #--------------------------------------------------------------------------        
  def setup_motion_damage     
      @battler.motion_damage = [0,0]
      @damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  end  
  
  #--------------------------------------------------------------------------
  # ● Damage Refresh
  #--------------------------------------------------------------------------         
  def damage_refresh
      return if @battler.motion_damage[0] == 0
      if @battler.motion_damage[1] == 0
         @damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
      end
      @battler.motion_damage[0] = 0
      @battler.motion_damage[1] = 45
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Damage
  #--------------------------------------------------------------------------            
  def update_motion_damage
      return if @damage_pre_set.nil?
      self.x = @damage_pre_set[0] + rand(@battler.motion_damage[1])
      @battler.motion_damage[1] -= 1
      if @battler.motion_damage[1] == 0
         if $imported[:mog_battle_hud_ex] != nil and @battler.is_a?(Game_Actor)
            return_set(@original_set)
         else  
            return_set(@damage_pre_set)
         end   
      end  
  end
   
end

#==============================================================================
#==============================================================================
# ● IDLE ●
#==============================================================================
#==============================================================================


#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  
  #--------------------------------------------------------------------------
  # ● Can Update idle
  #--------------------------------------------------------------------------   
  def can_update_idle?
      return false if @old_motion_action != -1
      return false if @battler.motion_damage[1] > 0
      return false if @battler.motion_move[0]
      return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp[0] > 0
      return true
  end      

  #--------------------------------------------------------------------------
  # ● Setup Motion Stand
  #--------------------------------------------------------------------------        
  def setup_motion_stand
      @breath_range = [MOG_BATTLER_MOTION::BREATH_EFFECT_RANGE[0],
                       MOG_BATTLER_MOTION::BREATH_EFFECT_RANGE[1],0,
                       MOG_BATTLER_MOTION::BREATH_EFFECT_SPEED]
      @float_range = [@battler.screen_y - 10, @battler.screen_y + 10]
      @side_range = [@battler.screen_x - 10, @battler.screen_x + 10]
      @battler.motion_stand[1] = 0
      case @battler.motion_stand[0]
         when 0
             self.zoom_y = @breath_range[0] + (rand(10) / 100.0)
             @battler.motion_stand[1] = rand(2)
         when 1
             self.y += 10 - rand(20)
             @battler.motion_stand[1] = rand(2)
         when 2
             self.x += 10 - rand(20)
             @battler.motion_stand[1] = rand(2)            
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Motion Animation
  #--------------------------------------------------------------------------        
  def execute_motion_idle
      case @battler.motion_stand[0]
         when 0
             update_motion_breath
         when 1  
             update_motion_float
         when 2
             update_motion_side
      end        
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Motion Breath
  #--------------------------------------------------------------------------         
  def update_motion_breath  
      @breath_range[2] += 1
      return if @breath_range[2] < @breath_range[3]
      @breath_range[2] = 0
      case @battler.motion_stand[1]
         when 0
           self.zoom_y -= 0.002
           if self.zoom_y <= @breath_range[0]
              @battler.motion_stand[1] = 1
              self.zoom_y = @breath_range[0]
           end   
         when 1  
           self.zoom_y += 0.002
           if self.zoom_y >= @breath_range[1]
              @battler.motion_stand[1] = 0
              self.zoom_y = @breath_range[1]
           end   
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Motion Float
  #--------------------------------------------------------------------------         
  def update_motion_float
      @motion_speed += 1
      return if @motion_speed < 5
      @motion_speed = 0
      case @battler.motion_stand[1]
           when 0
                self.y -= 1
                @battler.motion_bms[0] -= 1
                if self.y < @float_range[0]
                   self.y = @float_range[0]
                   @battler.motion_bms[0] += 1
                   @battler.motion_stand[1] = 1
                end   
           when 1  
                self.y += 1
                @battler.motion_bms[0] += 1
                if self.y > @float_range[1]
                   self.y = @float_range[1]
                   @battler.motion_bms[0] -= 1
                   @battler.motion_stand[1] = 0
                end                  
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Motion Side
  #--------------------------------------------------------------------------         
  def update_motion_side
      @motion_speed += 1
      return if @motion_speed < 5
      @motion_speed = 0
      case @battler.motion_stand[1]
           when 0
                self.x -= 1
                if self.x < @side_range[0]
                   self.x = @side_range[0]
                   @battler.motion_stand[1] = 1
                end   
           when 1  
                self.x += 1
                if self.x > @side_range[1]
                   self.x = @side_range[1]
                   @battler.motion_stand[1] = 0
                end                  
      end
  end     
  
end

#==============================================================================
#==============================================================================
# ● ACTION ●
#==============================================================================
#==============================================================================

#==============================================================================
# ■ Game Action
#==============================================================================
class Game_Action
  
  #--------------------------------------------------------------------------
  # ● Prepare
  #--------------------------------------------------------------------------                  
  alias mog_motion_action_prepare prepare
  def prepare
      mog_motion_action_prepare   
      set_motion_action
  end
   
  #--------------------------------------------------------------------------
  # ● Set Motion Action
  #--------------------------------------------------------------------------                    
  def set_motion_action
      return if @item.object == nil or subject == nil
      subject.motion_action[0] = $1.to_i if @item.object.note =~ /<Motion Action = (\d+)>/i
  end
  
end

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  
  #--------------------------------------------------------------------------
  # ● Can Update Action
  #--------------------------------------------------------------------------   
  def can_update_action?
      return false if @battler.motion_damage[1] > 0
      return false if @battler.motion_move[0]
      return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp[0] > 0
      return true
  end      
  
  #--------------------------------------------------------------------------
  # ● Setup Motion Action
  #--------------------------------------------------------------------------        
  def setup_motion_action
      @battler.motion_action = [-1,0]
      @old_motion_action = @battler.motion_action[0]
      @pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  end

  #--------------------------------------------------------------------------
  # ● Refresh Action
  #--------------------------------------------------------------------------         
  def refresh_action
      return if @old_motion_action == @battler.motion_action[0]
      if @old_motion_action == -1
         @pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
      end
      @battler.motion_action[1] = 0  
      return_set(@pre_set)
      @old_motion_action = @battler.motion_action[0]
      self.src_rect.y =  0
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Motion Action
  #--------------------------------------------------------------------------            
  def execute_motion_action
      refresh_action
      update_motion_action
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Motion Action
  #--------------------------------------------------------------------------              
  def update_motion_action
      return if @battler.motion_action[0] == -1
      $game_temp.battler_in_motion = true
      @battler.motion_action[1] += 1
      case @battler.motion_action[0]
           when -2
              end_action
           when 0
              update_motion_zoom
           when 1
              update_motion_jump
           when 2  
              update_motion_round_right
           when 3
              update_motion_round_left
           when 4
              update_motion_shake
           when 5
              update_motion_front
           when 6   
              update_motion_step_left
           when 7
              update_motion_step_right              
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Step Left
  #--------------------------------------------------------------------------                  
  def update_motion_step_left
      case @battler.motion_action[1]
           when 1..20
                self.x -= 2
           when 21..40  
                self.x += 2           
           else
           end_action
      end   
   
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Motion Step Right
  #--------------------------------------------------------------------------                  
  def update_motion_step_right
      case @battler.motion_action[1]
           when 1..20
                self.x += 2
           when 21..40  
                self.x -= 2           
           else
        end_action   
      end   
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Motion Shake
  #--------------------------------------------------------------------------               
  def update_motion_shake      
      self.x = @pre_set[0] + rand(@battler.motion_action[1]) if can_update_motion_shake?
      end_action if @battler.motion_action[1] > 40
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Update Motion Shake?
  #--------------------------------------------------------------------------                  
  def can_update_motion_shake?
      if $imported[:mog_battle_hud_ex] !=nil
         return false if @battler.is_a?(Game_Actor)
      end
      return true  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Motion Zoom
  #--------------------------------------------------------------------------               
  def update_motion_zoom
      case @battler.motion_action[1]
        when 1..20
           self.zoom_x += 0.01
           self.zoom_y += 0.01
        when 21..40
           self.zoom_x -= 0.01
           self.zoom_y -= 0.01         
        else  
        end_action   
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Jump
  #--------------------------------------------------------------------------                  
  def update_motion_jump
      case @battler.motion_action[1]
        when 1..20
            self.y -= 9
            self.zoom_x += 0.01
            self.zoom_y += 0.01
            self.mirror = true
            self.angle += 9
        when 21..40
            self.y += 9
            self.zoom_x -= 0.01
            self.zoom_y -= 0.01            
            self.mirror = false
            self.angle += 9
        else  
        self.angle = 0
        end_action   
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Front
  #--------------------------------------------------------------------------                  
  def update_motion_front
      case @battler.motion_action[1]
        when 1..20
            self.y += 3
            self.zoom_x += 0.02
            self.zoom_y += 0.02
        when 21..40
            self.y -= 3
            self.zoom_x -= 0.02
            self.zoom_y -= 0.02            
        else  
        end_action   
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Round Left
  #--------------------------------------------------------------------------                    
  def update_motion_round_left
      case @battler.motion_action[1]
        when 1..15
            self.y += 3
            self.x -= 3
            self.mirror = false
        when 16..30
            self.x += 6
            self.mirror = true
        when 31..45
            self.y -= 3
            self.x -= 3
            self.mirror = false
        else  
        end_action  
      end        
  end
  
  #--------------------------------------------------------------------------
  # ● Update Motion Round Right
  #--------------------------------------------------------------------------                    
  def update_motion_round_right
      case @battler.motion_action[1]
        when 1..15
            self.y += 3
            self.x += 3
            self.mirror = true
        when 16..30
            self.x -= 6
             self.mirror = false
        when 31..45
            self.y -= 3
            self.x += 3
            self.mirror = true
        else  
        end_action   
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● End Action
  #--------------------------------------------------------------------------                     
  def end_action
      if $imported[:mog_battle_hud_ex] != nil and @battler.is_a?(Game_Actor)
         return_set(@original_set)
      else  
         return_set(@pre_set)  
      end
      @battler.motion_action = [-1,0]
  end  
  
end

#==============================================================================
#==============================================================================
# ● COLLAPSE ●
#==============================================================================
#==============================================================================

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base

  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------   
  alias mog_bact_motion_dispose dispose
  def dispose   
      @pre_image.dispose rescue nil if !@pre_image.nil?
      mog_bact_motion_dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Update Action
  #--------------------------------------------------------------------------   
  def can_update_collapse?
      return true
  end      
  
  #--------------------------------------------------------------------------
  # ● Update Blink
  #--------------------------------------------------------------------------      
  alias mog_motion_animation_update_blink update_blink
  def update_blink
      return if @battler.dead? or !MOG_BATTLER_MOTION::ENABLE_DAMAGE_BLINK_EFFECT
      mog_motion_animation_update_blink
  end
  
  #--------------------------------------------------------------------------
  # ● Update Collapse
  #--------------------------------------------------------------------------
  def update_collapse
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Motion Collapse
  #--------------------------------------------------------------------------   
  def execute_motion_collapse
      collapse_end if self.opacity == 0
      @battler.motion_collapse[1] += 1      
      case @battler.motion_collapse[0]
           when 0;     update_collapse_vertical
           when 1;     update_collapse_horizontal
           when 2;     update_collapse_zoom_out
           when 3;     update_collapse_zoom_in
           when 4;     update_collapse_zoom_in_out
           when 5;     update_collapse_boss_2
           when 6;     update_collpase_do_nothing
           when 7;     update_collpase_slice
           else ;      update_collapse_normal
      end
        
  end
   
  #--------------------------------------------------------------------------
  # ● Can Execute Collapse
  #--------------------------------------------------------------------------      
  def can_execute_collapse?
      return false if !@battler.dead?
      return false if @collapse_done
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Vertical
  #--------------------------------------------------------------------------        
  def update_collapse_vertical
      self.zoom_y += 0.1
      self.zoom_x -= 0.02         
      self.opacity -= 3   
  end
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Horizontal
  #--------------------------------------------------------------------------         
  def update_collapse_horizontal
      self.zoom_x += 0.1
      self.zoom_y -= 0.02      
      self.opacity -= 3      
  end
     
  #--------------------------------------------------------------------------
  # ● Update Collapse Zoom Out
  #--------------------------------------------------------------------------            
  def update_collapse_zoom_out     
      self.zoom_x += 0.02
      self.zoom_y += 0.02     
      self.opacity -= 4   
  end
      
  #--------------------------------------------------------------------------
  # ● Update Collapse Zoom IN
  #--------------------------------------------------------------------------              
  def update_collapse_zoom_in
      self.zoom_x -= 0.01
      self.zoom_y -= 0.01      
      self.opacity -= 4            
  end
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Zoom IN OUT
  #--------------------------------------------------------------------------               
  def update_collapse_zoom_in_out
      case @battler.motion_collapse[1]
           when 0..30
                self.zoom_x += 0.1
                self.zoom_y -= 0.02
                self.opacity -= 2
           else  
                self.zoom_y += 0.5
                self.zoom_x -= 0.2
                self.opacity -= 10
      end      
  end
     
  #--------------------------------------------------------------------------
  # ● Update Collapse Boss 2
  #--------------------------------------------------------------------------                  
  def update_collapse_boss_2
      self.x = @original_set[0] + rand(10)
      self.src_rect.y -= 1
      self.opacity = 0 if self.src_rect.y < -self.bitmap.height
  end
      
  #--------------------------------------------------------------------------
  # ● Update Collapse do nothing
  #--------------------------------------------------------------------------                    
  def update_collpase_do_nothing
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Collpase Slice
  #--------------------------------------------------------------------------      
  def update_collpase_slice   
      return if !self.visible
      if !@battler.motion_slice[0] ; @battler.motion_slice[0] = true
          @pre_image = self.bitmap
          @cw_2s = @pre_image.width ; @ch_2s = @pre_image.height
          self.bitmap = Bitmap.new(@pre_image.width * 2,@pre_image.height)
          self.ox = self.bitmap.width / 2
      end
      @battler.motion_slice[1] += 1
      @battler.motion_slice[2] += 1
      if @battler.motion_slice[2] < 60 and @battler.motion_slice[2] < @cw_2s / 2
         self.bitmap.clear
         scr_rect_1 = Rect.new(0,0,@cw_2s,@ch_2s / 2)
         self.bitmap.blt((@cw_2s / 2) - @battler.motion_slice[1],0,@pre_image,scr_rect_1)
         scr_rect_2 = Rect.new(0,@ch_2s / 2,@cw_2s,@ch_2s / 2)
         self.bitmap.blt((@cw_2s / 2) + @battler.motion_slice[1],@ch_2s / 2,@pre_image,scr_rect_2)   
      else
         self.opacity -= 3
         if self.opacity == 0 ; self.visible = false ; collapse_end ; end
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Normal
  #--------------------------------------------------------------------------                    
  def update_collapse_normal
      self.opacity -= 3
      self.blend_type = 1
  end  
  
  #--------------------------------------------------------------------------
  # ● Collapse End
  #--------------------------------------------------------------------------      
  def collapse_end
      return if @battler.motion_slice[0]
      @collapse_done = true
      return_set(@original_set)
      self.src_rect.y = -self.bitmap.height unless @battler.motion_collapse[0] == 6
      if @battler.is_a?(Game_Enemy) and @battler.dead?
         self.visible = false ; self.opacity = 0
      end   
  end  

  #--------------------------------------------------------------------------
  # ● Revert to Normal
  #--------------------------------------------------------------------------        
  alias mog_battler_motion_revert_to_normal revert_to_normal
  def revert_to_normal
      return if @battler.motion_slice[0]
      if @collapse_done
         @collapse_done = false
         return_set(@original_set)
      end
      mog_battler_motion_revert_to_normal
  end  
  
end

#===============================================================================
# ■ Game Battler
#===============================================================================
class Game_Battler < Game_BattlerBase
  
  attr_accessor :bact_data
  attr_accessor :bact_sprite
  attr_accessor :pre_target
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_bact_data_motion_initialize initialize
  def initialize
      bact_clear
      mog_bact_data_motion_initialize
  end
  
  #--------------------------------------------------------------------------
  # ● Bact Clear
  #--------------------------------------------------------------------------      
  def bact_clear
      @bact_data = [0,nil,nil,nil,false,false,0,0] ; @pre_target = nil  
  end
  
end

#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias mog_bact_motion_initialize initialize
  def initialize(viewport, battler = nil)
      @jump_count = 0 ; @jump_peak = 0 ; @move_wait_d = 0 ; @battler_dir = [false,0]
      mog_bact_motion_initialize(viewport, battler)
      if @battler.is_a?(Game_Enemy) and @battler.enemy.note =~ /<Screen X Y = \s*(\-*\d+)\s* - \s*(\-*\d+)\s*>/
         @battler.screen_x = $1.to_i ; @battler.screen_y = $2.to_i
      end        
  end   
      
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------  
  alias mog_bact_motion_update_position update_position
  def update_position     
      if battler_in_motion? ; battler_in_motion ; return ; end
      if escape_phase? ; update_escape_phase ; return ; end
      mog_bact_motion_update_position   
  end
  
  #--------------------------------------------------------------------------
  # ● Battler In Motion
  #--------------------------------------------------------------------------      
  def battler_in_motion?
      return false if @battler == nil
      return false if @battler.bact_data[0] == 0
      return false if $imported[:mog_animation_plus] and $game_temp.ani_plus_wait
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Escape Phase
  #--------------------------------------------------------------------------  
  def escape_phase?
      return false if !$imported[:mog_sprite_actor]
      return false if !MOG_SPRITE_ACTOR::ESCAPE_ANIMATION
      return false if @battler == nil
      return false if @battler.is_a?(Game_Enemy)
      return false if @battler.dead?
      return false if $game_temp.bact_phase[0] != 1
      return true
  end  

  #--------------------------------------------------------------------------
  # ● Battler In Motion
  #--------------------------------------------------------------------------      
  def battler_in_motion
      old_x = self.x ; old_y = self.y
      np = [@battler.bact_data[1],@battler.bact_data[2]]
      set_move_duration(np) if @battler.bact_data[5]
      update_jump(np)
      if @pre_set != nil and @battler.is_a?(Game_Enemy) and @battler.bact_data[0] == 2
         self.zoom_x -= 0.01 if self.zoom_x > @pre_set[2]
         self.zoom_y -= 0.01 if self.zoom_y > @pre_set[3]   
      end   
      if @move_wait_d == 0
         end_bact_move(np) if self.x == np[0] and self.y == np[1]
         if $imported[:mog_sprite_actor] and !@battler.dead?
            @battler.step_animation if @battler.bact_data[6] if (old_x != self.x) or (old_y != self.y)
            @battler.bact_sprite[3] = 2 if @wp_index > 0
         end
      end
      self.z = @battler.screen_z
      self.z += 20 if !@battler.bact_data[6]
      update_in_motion_end
  end

  #--------------------------------------------------------------------------
  # ● Update In Motion End
  #--------------------------------------------------------------------------      
  def update_in_motion_end
      return if @move_wait_d == 0
      @move_wait_d -= 1
      return if @move_wait_d > 0
      @battler.bact_data[0] = 0      
  end
  
  #--------------------------------------------------------------------------
  # ● End Bact Move
  #--------------------------------------------------------------------------      
  def end_bact_move(np)   
      self.angle = 0 unless @battler.dead?
      @battler.screen_x = np[0] ; @battler.screen_y = np[1]
      if @battler.motion_damage[1] > 0
         @battler.motion_damage = [0,0] ; update_motion_damage               
      end  
      if @pre_set != nil
         @pre_set[0] = self.x ; @pre_set[1] = self.y
         end_action if @battler.bact_data[0] == 2
         self.angle = 0
      end   
      @move_wait_d = (@battler.bact_data[6] or @battler.bact_data[0] == 2) ? 10 : 1
      @battler.bact_sprite[3] = 0 if $imported[:mog_sprite_actor]
      if @battler.bact_data[0] == 1
         @battler.bact_action[0] = true
      elsif @battler.bact_data[0] == 2
         @battler.bact_action_clear
         self.mirror = @battler_dir[0]
         @battler.bact_sprite[0] = @battler_dir[1]
         @battler_dir = [false,4]
         @battler.bact_sprite_need_refresh = true if @battler.is_a?(Game_Actor)
      end         
  end
        
  #--------------------------------------------------------------------------
  # ● Set Move Duration
  #--------------------------------------------------------------------------      
  def set_move_duration(np)      
      set_bact_angle_m      
      self.mirror = false if @battler.bact_data[0] == 2
      if @battler.motion_damage[1] > 0
         @battler.motion_damage = [0,0] ; update_motion_damage   
      end
      @battler.motion_damage = [0,0]
      @battler.bact_data[5] = false
      x_plus = (self.x - np[0]).abs ; y_plus = (self.y - np[1]).abs
      p = 0
      p = @battler.is_a?(Game_Actor) ? 500 : 0 if $imported[:mog_sprite_actor]
      e = @battler.bact_data[6] ? 200 + p : 5
      distance = Math.sqrt(x_plus + y_plus + e).round
      @jump_peak = (distance * 80 / 100).truncate
      @jump_count = @jump_peak * 2
      if @pre_set != nil
         @pre_set[0] = self.x ; @pre_set[1] = self.y ; @pre_set[4] = self.mirror
      end   
      @battler.bact_sprite[3] = 2 if $imported[:mog_sprite_actor]  
      @battler.bact_action_clear if @battler.bact_data[0] == 2
      @move_wait_d = 0
      @wp_index = 0 if @battler.bact_data[0] == 1      
  end
  
  #--------------------------------------------------------------------------
  # ● Set Bact Angle M
  #--------------------------------------------------------------------------      
  def set_bact_angle_m
      @battler_dir = [self.mirror,@battler.bact_sprite[0]] if @battler.bact_data[0] == 1  
      return if @battler.bact_data[6] and [2,4].include?(@battler.bact_sprite[5])
      if @battler.bact_data[7] >= 0 ; else
         self.angle = @battler.bact_data[0] == 2 ? 350 : 5
         self.mirror = true if @battler.is_a?(Game_Enemy) and MOG_BATTLER_MOTION::BATTLER_MIRROR_DIRECTION
         @battler.bact_sprite[0] = 4 unless [2,8].include?( @battler.bact_sprite[0])
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Jump
  #--------------------------------------------------------------------------      
  def update_jump(np)
      return if $game_temp.bc_target_dmg[1] > 0
      @jump_count -= 1 if @jump_count > 0
      self.x = (self.x * @jump_count + np[0]) / (@jump_count + 1.0)
      self.y = ((self.y * @jump_count + np[1]) / (@jump_count + 1.0)) - jump_height
  end
  
  #--------------------------------------------------------------------------
  # ● Jump Height
  #--------------------------------------------------------------------------      
  def jump_height
      return 0 if @battler.bact_data[6]
      return (@jump_peak * @jump_peak - (@jump_count - @jump_peak).abs ** 2) / 40
  end
  

  #--------------------------------------------------------------------------
  # ● Can Update Battler Motion
  #--------------------------------------------------------------------------      
  alias mog_bact_can_update_battler_motion? can_update_battler_motion?
  def can_update_battler_motion?
      return false if @battler.bact_data[0] != 0
      mog_bact_can_update_battler_motion?
  end
   
  #--------------------------------------------------------------------------
  # ● Can Update idle
  #--------------------------------------------------------------------------   
  alias mog_bact_can_update_idle? can_update_idle?
  def can_update_idle?
      return false if @battler.bact_data[1] != nil
      mog_bact_can_update_idle?
  end   

end  

#===============================================================================
# ■ Scene Battle
#===============================================================================
class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● Execute Action
  #--------------------------------------------------------------------------      
  alias mog_bact_execute_action execute_action
  def execute_action
      @cp_members = []
      if @subject != nil
         @subject.bact_action_clear
         item = @subject.current_action.item rescue nil
         @subject.bact_skill = item if item != nil
         if $imported[:mog_atb_system] and execute_cooperation_skill?
            @cp_members = current_cp_members
            for battler in @cp_members
                battler.bact_skill = item if item != nil
           end
         end         
      end
      execute_bact_move if execute_bact_move?
      if $imported[:mog_sprite_actor] and $imported[:mog_animation_plus]
         $game_temp.ani_plus_wait = false  ; execute_cast_animation
      end
      mog_bact_execute_action
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Bact Move
  #--------------------------------------------------------------------------      
  def execute_bact_move?
      item = @subject.current_action.item rescue nil
      return false if item == nil
      return false if item.is_a?(RPG::Skill) and @subject.is_a?(Game_Actor) and item.id == @subject.guard_skill_id
      targets = @subject.current_action.make_targets.compact rescue nil
      @subject.pre_target = targets
      for battler in @cp_members ; battler.pre_target = targets ; end      
      scy = @subject.screen_x rescue nil ; scx = targets[0].screen_x rescue nil
      return false if scx == nil or scy == nil
      return false if $imported[:mog_battle_hud_ex] and SceneManager.face_battler?
      return false if @act_enabled != nil
      return true
  end

  #--------------------------------------------------------------------------
  # ● Long Range?
  #--------------------------------------------------------------------------      
  def long_range?(item)
      return false if item == nil
      if @subject.is_a?(Game_Actor) and item.is_a?(RPG::Skill) and
         item.id == @subject.attack_skill_id and  @subject.equips[0] != nil
      return true if @subject.equips[0].note =~ /<Icon Angle = (\d+)>/i
      end  
      return false if item.note =~ /<Move to Target>/
      return false if item.note =~ /<Move to Target x\s*(\-*\d+)\s* y\s*(\-*\d+)\s*>/
      return true if [2,8,10].include?(item.scope)      
      return true
  end

  #--------------------------------------------------------------------------
  # ● Set BC Skill Type
  #--------------------------------------------------------------------------   
  def set_bc_skill_type
      item = @subject.current_action.item rescue nil
      return if item == nil
      return if item.is_a?(RPG::Skill) and item.stype_id != 1
      return if item.is_a?(RPG::Item) and item.itype_id != 1
      targets = @subject.current_action.make_targets.compact
      set_battle_camera_animation(targets, item.animation_id)
  end
  #--------------------------------------------------------------------------
  # ● Execute Bact Move
  #--------------------------------------------------------------------------      
  def execute_bact_move
      return if @subject.bact_skill == nil
      @act_enabled = true
      item = @subject.bact_skill
      if $imported[:mog_sprite_actor] and @subject.is_a?(Game_Actor) and long_range?(item)
          execute_bact_move_sprite_actor
      else   
         unless @subject.is_a?(Game_Enemy) and long_range?(item)
         targets = @subject.current_action.make_targets.compact
         targets[0] = @subject.primary_target if !@subject.primary_target.nil?
         exy = [0,0]
         if item.note =~ /<Move to Target x\s*(\-*\d+)\s* y\s*(\-*\d+)\s*>/
            exy = [$1.to_i,$2.to_i]
         end
         @subject.bact_data = [1,targets[0].screen_x + exy[0],targets[0].screen_y + exy[1],@subject.screen_x,@subject.screen_y,0,0,0]
         @subject.bact_data[5] = true
         @subject.bact_data[6] = false
         @subject.bact_data[7] = targets[0].screen_x - @subject.screen_x
         if @cp_members != nil
         for battler in @cp_members            
             battler.bact_data = [1,targets[0].screen_x,targets[0].screen_y,battler.screen_x,battler.screen_y,0,0,0]
             battler.bact_data[5] = true
             battler.bact_data[6] = false
             battler.bact_data[7] = targets[0].screen_x - battler.screen_x
          end         
          end
          execute_action_bact
         end
      end      
  end   
  
  #--------------------------------------------------------------------------
  # ● Execute Bact Move Sprite Actor
  #--------------------------------------------------------------------------      
  def execute_bact_move_sprite_actor
      ns = $imported[:mog_sprite_actor] ? $game_party.battlers_m_steps : 32
      if @subject.is_a?(Game_Enemy)
         targets = @subject.pre_target rescue nil
         targets = @subject.current_action.make_targets.compact if targets == nil
         if [2,8].include?($game_party.battle_members[0].bact_sprite[0])
            if targets[0].screen_y >= @subject.screen_y ; @subject.bact_sprite[0] = 2; end
            if targets[0].screen_y < @subject.screen_y ; @subject.bact_sprite[0] = 8; end
         else  
            if targets[0].screen_x >= @subject.screen_x ; @subject.bact_sprite[0] = 6; end
            if targets[0].screen_x < @subject.screen_x ; @subject.bact_sprite[0] = 4; end
         end
      end
      case @subject.bact_sprite[0]
           when 2 ; x = @subject.screen_x ; y = @subject.screen_y + ns
           when 4 ; x = @subject.screen_x - ns ; y = @subject.screen_y            
           when 6 ; x = @subject.screen_x + ns ; y = @subject.screen_y            
           when 8 ; x = @subject.screen_x ; y = @subject.screen_y - ns
      end      
      @subject.bact_data = [1,x,y,@subject.screen_x,@subject.screen_y,0,0,0,0]
      @subject.bact_data[5] = true ; @subject.bact_data[6] = true  
      for battler in @cp_members
          case battler.bact_sprite[0]
               when 2 ; x = battler.screen_x ; y = battler.screen_y + ns
               when 4 ; x = battler.screen_x - ns ; y = battler.screen_y            
               when 6 ; x = battler.screen_x + ns ; y = battler.screen_y            
               when 8 ; x = battler.screen_x ; y = battler.screen_y - ns
          end         
          battler.bact_data = [1,x,y,battler.screen_x,battler.screen_y,0,0,0,0]
          battler.bact_data[5] = true
          battler.bact_data[6] = true   
      end
      execute_action_bact  
  end
         
  #--------------------------------------------------------------------------
  # ● Process Action End
  #--------------------------------------------------------------------------      
  alias mog_bact_f_use_item use_item
  def use_item
      mog_bact_f_use_item
      motion_move_to_origin if @act_enabled
  end
  
  #--------------------------------------------------------------------------
  # ● Process Turn End
  #--------------------------------------------------------------------------      
  alias mog_bact_f_turn_end turn_end
  def turn_end
      motion_move_to_origin if @act_enabled
      mog_bact_f_turn_end
  end
  
  #--------------------------------------------------------------------------
  # ● Motion Move to Origin
  #--------------------------------------------------------------------------      
  def motion_move_to_origin
      if $imported[:mog_battle_camera]         
         $game_temp.bc_in_action[3] = false
         $game_temp.bc_in_turn = false ; clear_target_camera
      end
      process_wait_end
      process_bact_end if @subject.bact_data[1] != nil
      @subject.bact_action_clear
      @subject.pre_target = nil
      if @cp_members != nil
      for battler in @cp_members
          battler.bact_action_clear
          battler.pre_target = nil
      end
      end
      @act_enabled = nil  
  end
      
  #--------------------------------------------------------------------------
  # ● Turn End
  #--------------------------------------------------------------------------
  alias mog_bact_turn_end turn_end
  def turn_end
      @subject.return_to_orign if @subject.is_a?(Game_Actor) and $imported[:mog_sprite_actor]
      if @cp_members != nil
      for battler in @cp_members
          battler.return_to_orign if $imported[:mog_sprite_actor]
      end
      end      
      mog_bact_turn_end
  end
  
  #--------------------------------------------------------------------------
  # ● Process Wait End
  #--------------------------------------------------------------------------      
  def process_wait_end
      return if $game_temp.bact_wait_d == 0
      loop do ; update_basic ; $game_temp.bact_wait_d -= 1 ; break if $game_temp.bact_wait_d == 0
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Process Bact End
  #--------------------------------------------------------------------------      
  def process_bact_end      
      $game_temp.bc_in_action[6] = false if $imported[:mog_battle_camera]
      @subject.bact_data[0] = 2
      @subject.bact_data[1] = @subject.bact_data[3]
      @subject.bact_data[2] = @subject.bact_data[4]
      @subject.bact_data[5] = true
      @subject.wp_animation = [false,false] if $imported[:mog_sprite_actor]
      if @cp_members != nil
      for battler in @cp_members
          battler.bact_data[0] = 2
          battler.bact_data[1] = battler.bact_data[3]
          battler.bact_data[2] = battler.bact_data[4]
          battler.bact_data[5] = true
          battler..wp_animation = [false,false] if $imported[:mog_sprite_actor]
          battler.bact_sprite_need_refresh = true
      end      
      end
      execute_action_bact unless @subject.is_a?(Game_Actor) and $game_party.all_dead?
      @subject.bact_clear
      if @cp_members != nil
      for battler in @cp_members ; battler.bact_clear ; end
      end
  end     
      
  #--------------------------------------------------------------------------
  # ● Execute Action Bact
  #--------------------------------------------------------------------------      
  def execute_action_bact
      return if @subject == nil      
      loop do ; update_basic ; break if @subject.bact_data[0] == 0 ; end
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Cooperation Skill?
  #--------------------------------------------------------------------------  
  def execute_cooperation_skill?
      return false if !@subject.is_a?(Game_Actor)
      item = @subject.bact_skill rescue nil
      return false if item == nil
      return false if !BattleManager.cskill_usable?(item.id,@subject.id)
      return true
  end  

  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------  
  alias mog_bact2_use_item use_item
  def use_item
      if $imported[:mog_sprite_actor]
      target = @subject.pre_target[0] rescue nil
      if target != nil and target.dead?
         if @subject.is_a?(Game_Actor) ; return unless target.is_a?(Game_Actor)
         else ; return unless target.is_a?(Game_Enemy)
         end   
      end
      end
      mog_bact2_use_item
      @subject.wp_animation = [false,false] if $imported[:mog_sprite_actor]
  end  
  
end

#===============================================================================
# ■ Game Action
#===============================================================================
class Game_Action

  #--------------------------------------------------------------------------
  # ● Clear
  #--------------------------------------------------------------------------
  alias mog_bact_clear clear
  def clear
      @subject.pre_target = nil rescue nil
      mog_bact_clear
  end  
   
  #--------------------------------------------------------------------------
  # ● Make Targets
  #--------------------------------------------------------------------------
  alias mog_bact_make_targets make_targets
  def make_targets
      return @subject.pre_target if @subject != nil and @subject.pre_target != nil
      mog_bact_make_targets
  end

end[/pre]
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部