| 赞 | 0  | 
 
| VIP | 0 | 
 
| 好人卡 | 0 | 
 
| 积分 | 6 | 
 
| 经验 | 3202 | 
 
| 最后登录 | 2021-1-7 | 
 
| 在线时间 | 181 小时 | 
 
 
 
 
 
Lv2.观梦者 
	- 梦石
 - 0 
 
        - 星屑
 - 617 
 
        - 在线时间
 - 181 小时
 
        - 注册时间
 - 2010-10-23
 
        - 帖子
 - 13
 
 
 
 | 
	
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员  
 
x
 
好像是因为同时使用了Yanfly Engine Ace - Ace Battle Engine v1.22  
和 @希忆 大神的 技能加点|被动技能|状态等级|属性强化|暴击伤害 脚本。在战斗时敌方攻击或使用技能时会触发错误。。 
虽然猜测可能是和两个脚本中的make_damage_value有关,但是基本上是脚本盲所以来这里请教一下各位先辈… 
错误截图: 
 
 
 
||游戏系统类         |脚本如下: 
#encoding:utf-8 
#=========================================================================== 
#          RMVA 豪华型技能加点|技能被动效果:        v1.05 
#                       By希忆 66rpg.com 
#                                                 转载或修改请保留此类信息 
#=========================================================================== 
# 在游戏系统类的实现 
# 
# 完工了,大概 
#=========================================================================== 
#角色类,新增一堆方法。 
class Game_Actor < Game_Battler 
   
  #初始化角色 
  #@skill_level:存放技能等级数据的哈希表,技能id=>技能等级 
  #@sp:剩余技能点 
  alias setup_201410131453 setup 
  def setup(actor_id) 
    @skill_level=Hash.new(0) 
    setup_201410131453(actor_id) 
    @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP 
    auto_skill_levelup if self.class.auto_sp 
  end 
   
  #读取技能点的方法,如果是自动升级技能的职业,则没必要有技能点 
  def sp 
    return 0 if self.class.auto_sp 
    @sp 
  end 
   
  #读取技能基础等级, 
  #锁定技能等级优先度最高, 
  #链接技能等级次之,这个我好像在计算技能最终等级的方法里面又来了一遍。 
  #主要是技能基础等级是升级技能的窗口看到的等级,最终等级是使用技能的窗口。 
  def skill_basic_level(skill_id) 
    return 0 if skill_id == 0 
    lock = $data_skills[skill_id].lock_level 
    return lock if lock != 0 
    lnk = $data_skills[skill_id].link_skill 
    return skill_basic_level(lnk) if lnk != 0 
    @skill_level[skill_id] 
  end 
   
  #获取装备增加技能的等级之和 
  def skill_plus_level(skill_id) 
    self.equips.compact.inject(0){|skl,eqp| skl+eqp.add_skill(skill_id)} 
  end 
   
  #读取技能最终等级,如果技能基础等级为零,则不加装备提升直接等于零。 
  #最后返回基础等级+装备附加与技能最大等级中的小值 
  def skill_level(skill_id) 
    return 0 if skill_id == 0 
    lock = $data_skills[skill_id].lock_level 
    return lock if lock != 0 
    lnk = $data_skills[skill_id].link_skill 
    return skill_level(lnk) if lnk != 0 
    return 0 unless @skills.include?(skill_id) 
    return 0 if skill_basic_level(skill_id) == 0 
    [skill_basic_level(skill_id) + skill_plus_level(skill_id) ,\ 
    $data_skills[skill_id].max_level].min 
  end 
   
  #升一级技能技能能升级就升级,返回成功,否则返回失败 
  def level_up_skill(skill_id) 
    skl = $data_skills[skill_id] 
    if skill_can_levelup?(skl) 
      @sp -= skl.sp_cost 
      @skill_level[skill_id] += 1  
      return true 
    else 
      return false 
    end 
  end 
   
  #初始化角色时初始化技能的方法, 
  #这里是不管默认的技能设定直接加载能学到的所有技能,也就是职业列表下的那些。 
  def init_skills 
    @skills = [] 
    self.class.learnings.each do |learning| 
      @skills.push(learning.skill_id) 
    end 
    @skills.sort! 
  end 
   
  #主要用在技能列表的窗口里的。确保只有技能等级为1级及以上的技能才能显示。 
  def has_skill?(skill) 
    skills.include?(skill) && skill_basic_level(skill.id) > 0  
  end 
   
  #判断是否学习了技能,同样要确保只有技能等级为1级及以上的技能才能显示。 
  #和上面的区别是上面的可以有装备附带,状态附带的技能等级不为0的技能 
  #这里只能是职业列表下“领悟”的技能,装备状态附带的都不算 
  def skill_learn?(skill) 
    skill.is_a?(RPG::Skill) && @skills.include?(skill.id) && skill_basic_level(skill.id) > 0  
  end 
   
  #判断前置技能是否都满足 
  def skill_former_match?(skill) 
    skill.former.each do |former| 
      return false unless skill_basic_level(former[0]) >= former[1] 
    end 
    true 
  end 
   
  #判断技能是否已经学到精通了、 
  def skill_max_learn?(skill) 
    skill_basic_level(skill.id) == skill.max_learn 
  end 
   
  #计算学习下一等级的技能所需要的人物等级 
  #如果精通了return false【感觉好像有点奇葩。。。】 
  def skill_next_level(skill) 
    return false if skill_max_learn?(skill) 
    skill.learn_level[0] + skill_basic_level(skill.id) * skill.learn_level[1] 
  end 
   
  #技能能否升级?首先看是否锁定,是否链接,是否精通, 
  #再看等级是否符合学习下一级,sp是否足够,前置技能是否满足要求。 
  def skill_can_levelup?(skill) 
    return false if skill.lock_level != 0 
    return false if skill.link_skill != 0 
    return false if skill_max_learn?(skill) 
    @level >= skill_next_level(skill) && @sp >= skill.sp_cost && skill_former_match?(skill) 
  end 
   
  #好像没什么用处。。。当初修改的用意是直接设置技能等级,后来觉得不好控制。。。 
  #反正就放着吧,不去管它好了 
  def learn_skill(skill_id,sk_level=0) 
    unless skill_learn?($data_skills[skill_id]) 
      @skills.push(skill_id) 
      @skills.sort! 
      @skill_level[skill_id]=sk_level unless @skill_level.has_key?(skill_id) 
    end 
  end 
   
  #自动升级技能。 
  def auto_skill_levelup 
    @skills.each do |skill| 
      skl=$data_skills[skill] 
      if self.class.auto_sp 
        while skill_next_level(skl) && skill_next_level(skl) <= @level do 
          @skill_level[skill] += 1 
        end 
      elsif skl.auto_levelup 
        while level_up_skill(skill) do  
        end 
      end 
    end 
  end 
   
  #升级时发生的事情,等级+1,sp增加,如果是自动升级技能的职业则自动升级技能 
  def level_up 
    @level += 1 
    @sp += SkillLevel::LEVELUPSP 
    auto_skill_levelup 
  end 
   
  #被动技能提升的基础属性(加法叠加的部分) 
  #SkillLevel.formula:带入公式计算。 
  def skill_plus(param_id) 
    skills.inject(0) do |plu,skl|  
      plu + SkillLevel.formula(self.skill_level(skl.id),skl.param_add(param_id)) 
    end 
  end 
   
  #被动技能提升的基础属性倍率(乘法叠加) 
  def skill_rate(param_id) 
    skills.inject(1.00) do |plu,skl|  
      plu * SkillLevel.formula(self.skill_level(skl.id),skl.param_rate(param_id)) 
    end 
  end 
   
  #被动技能影响的属性抗性(乘法叠加) 
  def skill_element_rate(element_id) 
    skills.inject(1.00) do |plu,skl|  
      plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_rate(element_id)) 
    end 
  end 
   
  #状态提升的基础属性(加法叠加的部分) 
  def state_param_plus(param_id) 
    states.inject(0) do |plu,sta| 
      plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id)) 
    end 
  end 
  #状态提升的基础属性倍率(乘法叠加) 
  def state_param_rate(param_id) 
    states.inject(1.00) do |plu,sta| 
      plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id)) 
    end 
  end 
  #状态额外影响的属性抗性(乘法叠加) 
  def state_element_rate(element_id) 
    states.inject(1.00) do |plu,sta|  
      plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id)) 
    end 
  end 
   
  #基础属性的计算,添加了被动技能的提升,按默认的先加后乘 
  def param(param_id) 
    value = param_base(param_id) + param_plus(param_id) +  
            skill_plus(param_id) + state_param_plus(param_id) 
    value *= param_rate(param_id) * param_buff_rate(param_id) *  
             skill_rate(param_id) * state_param_rate(param_id) 
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i 
  end 
   
  #状态影响的附加属性xparam 
  def state_xparam(xparam_id) 
    states.inject(0.0) do |plu,sta| 
      plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id)) 
    end 
  end 
  #附加属性xparam的计算,命中暴击什么的,迭代加算。 
  def xparam(xparam_id) 
    state_xparam(xparam_id) + @skills.inject(super(xparam_id)) do |plu,skl| 
      plu + SkillLevel.formula(self.skill_level(skl),$data_skills[skl].xparam(xparam_id)) 
    end 
  end 
   
  #状态影响特殊属性sparam的计算 
  def state_sparam(sparam_id) 
    states.inject(1.0) do |plu,sta| 
      plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id)) 
    end 
  end 
  #特殊属性sparam的计算,经验值比率什么的,迭代连乘计算。 
  def sparam(sparam_id) 
    state_sparam(sparam_id)*skills.inject(super(sparam_id)) do |plu,skl|  
      plu * SkillLevel.formula(self.skill_level(skl.id),skl.sparam(sparam_id)) 
    end 
  end 
   
  #技能消耗mp由于技能等级修正的倍率, 
  #反正就是到SkillLevel.formula找对应编号的公式。 
  def skill_mp_rate(skill) 
    SkillLevel.formula(skill_level(skill.id),skill.mp_type) 
  end 
   
  #计算最终技能消耗mp的量 
  def skill_mp_cost(skill) 
    (skill.mp_cost * mcr * skill_mp_rate(skill)).to_i 
  end 
   
  #计算暴击伤害倍率super:Game_Battler中的critical_rate,返回1.5 
  #人物提升,职业提升,被动技能修正和装备提升 
  def critical_rate 
    v = super 
    v *= (1.0 + self.actor.critical_rate/100.0) 
    v *= (1.0 + self.class.critical_rate/100.0) 
    v *= skills.inject(1.00) do |plu,skl|  
      plu * SkillLevel.formula(self.skill_level(skl.id),skl.critical_rate) 
    end 
    v*equips.compact.inject(1.00){ |rat,equip| rat*(1.00+equip.critical_rate/100.0) } 
  end 
   
  #属性伤害修正。 
  def element_rate(element_id) 
    super(element_id) * skill_element_rate(element_id) * state_element_rate(element_id)  
  end 
   
  #被动技能影响的属性强化效果。 
  def skill_element_damage(element_id) 
    skills.inject(1.00) do |plu,skl|  
      plu * SkillLevel.formula(self.skill_level(skl.id),skl.element_damage(element_id)) 
    end 
  end 
   
  def state_element_damage(element_id) 
    states.inject(1.00) do |plu,sta|  
      plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id)) 
    end 
  end 
   
  #基础属性强化,角色备注和职业备注修正。 
  def basic_element_damage(element_id) 
    (1.0 + self.actor.element_damage(element_id)/100.0) *  
    (1.0 + self.class.element_damage(element_id)/100.0) 
  end 
   
  #计算最终属性强化基础技能装备迭代连乘 
  def element_damage(element_id) 
    basic_element_damage(element_id) * 
    equips.compact.inject(skill_element_damage(element_id)) do |rat,equip|  
      rat*(1.00+equip.element_damage(element_id)/100.0)  
    end 
  end 
 
  #受到hp伤害转移给mp的比例,遍历计算并返回最大值 
  def damage_convert  
    skl = skills.collect{|sk| sk = SkillLevel.formula(self.skill_level(sk.id),sk.damage_convert)} 
    sta = states.collect{|st| st = SkillLevel.formula(@state_level[st.id],st.damage_convert)} 
    (skl+sta).max 
  end 
   
  #洗技能了, 
  alias item_apply_201411181846 item_apply 
  def item_apply(user, item) 
    item_apply_201411181846(user, item) 
    if item.is_a?(RPG::Item) and item.id == SkillLevel::RESETITEM 
      if self.reset_skill 
        self.hp = [self.hp,self.mhp].min 
        self.mp = [self.mp,self.mmp].min 
      end 
    end 
  end 
   
  #洗技能的方法 
  def reset_skill 
    return false if self.class.auto_sp 
    @sp = (@level-1) * SkillLevel::LEVELUPSP + SkillLevel::INITIALSP 
    @skills.each  { |skill| @skill_level[skill]=0 } 
    return true 
  end 
   
end 
 
#有关洗点水的使用判断,想和上面洗点放在一起。于是没有放进场景相关。 
class Scene_ItemBase < Scene_MenuBase 
  def item_usable? 
    if item.id == SkillLevel::RESETITEM 
      return false if item_target_actors[0].class.auto_sp 
      return true 
    end 
    user.usable?(item) && item_effects_valid? 
  end 
end 
 
class Game_Enemy 
  #敌人属性强化 
  def element_damage(id) 
    1.0 + self.enemy.element_damage(id)/100.0 
  end 
  #敌人暴击倍率 super:Game_Battler定义的critical_rate,返回1.5 
  def critical_rate 
    super * (1+self.enemy.element_damage/100.0) 
  end 
  #敌人的技能等级,要么锁定,要么1 
  def skill_level(skill_id) 
    lock = $data_skills[skill_id].lock_level if $data_skills[skill_id] 
    return lock if lock != 0 
    return 1 
  end 
    #状态提升的基础属性(加法叠加的部分) 
  def state_param_plus(param_id) 
    states.inject(0) do |plu,sta| 
      plu + SkillLevel.formula(@state_level[sta.id],sta.param_add(param_id)) 
    end 
  end 
  #状态提升的基础属性倍率(乘法叠加) 
  def state_param_rate(param_id) 
    states.inject(1.00) do |plu,sta| 
      plu * SkillLevel.formula(@state_level[sta.id],sta.param_rate(param_id)) 
    end 
  end 
  #状态额外影响的属性抗性(乘法叠加) 
  def state_element_rate(element_id) 
    states.inject(1.00) do |plu,sta|  
      plu * SkillLevel.formula(@state_level[sta.id],sta.element_rate(element_id)) 
    end 
  end 
   
  #基础属性的计算,添加了被动技能的提升,按默认的先加后乘 
  def param(param_id) 
    value = param_base(param_id) + param_plus(param_id) +  
            state_param_plus(param_id) 
    value *= param_rate(param_id) * param_buff_rate(param_id) *  
             state_param_rate(param_id) 
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i 
  end 
   
  #状态影响的附加属性xparam 
  def state_xparam(xparam_id) 
    states.inject(0.0) do |plu,sta| 
      plu + SkillLevel.formula(@state_level[sta.id],sta.xparam(xparam_id)) 
    end 
  end 
  #附加属性xparam的计算,命中暴击什么的,迭代加算。 
  def xparam(xparam_id) 
    state_xparam(xparam_id) + super(xparam_id) 
  end 
   
  #状态影响特殊属性sparam的计算 
  def state_sparam(sparam_id) 
    states.inject(1.0) do |plu,sta| 
      plu * SkillLevel.formula(@state_level[sta.id],sta.sparam(sparam_id)) 
    end 
  end 
  #特殊属性sparam的计算,经验值比率什么的,迭代连乘计算。 
  def sparam(sparam_id) 
    super(sparam_id)*state_sparam(sparam_id) 
  end 
  def state_element_damage(element_id) 
    states.inject(1.00) do |plu,sta|  
      plu * SkillLevel.formula(@state_level[sta.id],sta.element_damage(element_id)) 
    end 
  end 
  def element_rate(element_id) 
    super(element_id) * state_element_rate(element_id)  
  end 
end 
 
 
 
class Game_Battler < Game_BattlerBase 
   
  #attr_reader :state_level 
  #@state_level 保存状态等级的数组 
  alias initialize_201410131453 initialize 
  def initialize 
    initialize_201410131453 
    @state_level = Hash.new(0) 
  end 
   
  #属性修正的计算,将使用者属性强化也计算在内的 
  def item_element_rate(user, item) 
    if item.damage.element_id < 0 
      user.atk_elements.empty? ? 1.0 : elements_max_rate(user) 
    else 
      element_rate(item.damage.element_id)*user.element_damage(item.damage.element_id) 
    end 
  end 
   
  #将使用者属性强化也计算在内的最有效属性。 
  def elements_max_rate(user) 
    user.atk_elements.inject([0.0]) {|r, i| r.push(element_rate(i)*user.element_damage(i)) }.max 
  end 
   
  def damage_convert #受到hp伤害转移给mp的比例 
    0 
  end 
   
  #计算伤害,SkillLevel.formula找公式算修正。 
  def make_damage_value(user, item) 
    value = item.damage.eval(user, self, $game_variables) 
    if item.is_a?(RPG::Skill) 
      value *= SkillLevel.formula(user.skill_level(item.id),item.damage_increase_type) 
    end 
     
    value *= item_element_rate(user, item) 
    value *= pdr if item.physical? 
    value *= mdr if item.magical? 
    value *= rec if item.damage.recover? 
    value = apply_critical(value,user) if @result.critical 
    value = apply_variance(value, item.damage.variance) 
    value = apply_guard(value) 
     
    if value > 0 && damage_convert > 0 
      valmp = [(value*damage_convert).to_i,self.mp].min 
      self.mp -= valmp 
      value -= valmp 
    end 
    @result.make_damage(value.to_i, item) 
  end 
   
  #计算暴击修正,添加了参数user 
  def apply_critical(value,user) 
    value * user.critical_rate 
  end 
   
  #基础暴击修正 
  def critical_rate 
    1.5 
  end 
   
  #状态附加,添加参数user,写的有点奇怪。如果有明确的user, 
  #就提取技能等级user.skill_level($data_states[state_id].link_skill) 
  #然后按SkillLevel.formula公式算得到附加概率,如果随机数比概率大(算是失败) 
  #就直接返回,再下去按部就班如果没有状态就附加新状态,如果有明确的user, 
  #状态的等级就等于之前提取的技能等级,否则为1。 
  def add_state(state_id,user = nil) 
    if state_addable?(state_id) 
      if user != nil 
        lv = user.skill_level($data_states[state_id].link_skill) 
      else 
        lv = 1 
      end 
      return if rand > SkillLevel.formula(lv,$data_states[state_id].chance) 
      add_new_state(state_id) unless state?(state_id) 
      if user != nil 
        @state_level[state_id] = lv 
      else 
        @state_level[state_id] = 1 
      end 
      reset_state_counts(state_id) 
      @result.added_states.push(state_id).uniq! 
    end 
  end 
   
  def item_effect_add_state_attack(user, item, effect) 
    user.atk_states.each do |state_id| 
      chance = effect.value1 
      chance *= state_rate(state_id) 
      chance *= user.atk_states_rate(state_id) 
      chance *= luk_effect_rate(user) 
      if rand < chance 
        add_state(state_id,user) 
        @result.success = true 
      end 
    end 
  end 
 
  def item_effect_add_state_normal(user, item, effect) 
    chance = effect.value1 
    chance *= state_rate(effect.data_id) if opposite?(user) 
    chance *= luk_effect_rate(user)      if opposite?(user) 
    if rand < chance 
      add_state(effect.data_id,user) 
      @result.success = true 
    end 
  end 
   
end  
 
Ace Battle Engine v1.22脚本如下: 
#============================================================================== 
#  
# �� Yanfly Engine Ace - Ace Battle Engine v1.22 
# -- Last Updated: 2012.03.04 
# -- Level: Normal, Hard 
# -- Requires: n/a 
#  
#============================================================================== 
 
$imported = {} if $imported.nil? 
$imported["YEA-BattleEngine"] = true 
 
#============================================================================== 
# �� Updates 
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
# 2012.03.04 - Bug fixed: Input crash bug. 
# 2012.02.13 - Bug fixed: Odd Victory game crash fixed. 
# 2012.02.12 - Bug fixed: Displayed damage in combat log is correct now. 
# 2012.01.29 - Visual Changes: Buff stacks now show one popup upon one skill. 
# 2012.01.24 - Compatibility Update: Enemy Levels 
# 2012.01.18 - Bug Fixed: Help Window clears text upon selecting nil items. 
# 2012.01.11 - Added <one animation> tag for multi-hit skills to play an 
#              animation only once. 
#            - Reduced lag from battle system constantly recreating bitmaps. 
# 2012.01.10 - Compatibility Update: Battle System FTB 
# 2012.01.09 - Anticrash methods implemented. 
#            - Damage Popups are now separate for damage formulas and recovery. 
# 2012.01.05 - Bug fixed: Game no longer crashes with escape skills/items. 
# 2012.01.02 - Compatibility Update: Target Manager 
#            - Added Option: AUTO_FAST 
#            - Random hits now show animations individually. 
# 2011.12.30 - Compatibility Update: Enemy Levels 
#            - Added Option to center the actors in the HUD. 
# 2011.12.27 - Bug fixed: TP Damage skills and items no longer crash game. 
#            - Default battle system bug fixes are now included from YEA's Ace 
#              Core Engine. 
#            - Groundwork is also made to support future battle system types. 
#            - Multi-hit actions no longer linger when a target dies during the 
#              middle of one of the hits. 
#            - Compatibility Update: Lunatic Objects v1.02 
# 2011.12.26 - Bug fixed: Multi-hit popups occured even after an enemy's dead. 
# 2011.12.22 - Bug fixed: Elemental Resistance popup didn't show. 
# 2011.12.20 - Bug fixed: Death state popups against immortal states. 
#            - Bug fixed: During State popup fix. 
#            - Added HIDE_POPUP_SWITCH. 
# 2011.12.17 - Compatibiilty Update: Cast Animations 
# 2011.12.15 - Compatibility Update: Battle Command List 
# 2011.12.14 - Compatibility Update: Lunatic Objects 
# 2011.12.13 - Compatibility Update: Command Party 
# 2011.12.12 - Bug fixed: Turn stalling if no inputable members. 
# 2011.12.10 - Compatibility update for Automatic Party HUD. 
#            - Popup graphical bug fixed. 
#            - Bug fixed: Didn't wait for boss dead animations. 
#            - Bug fixed: Surprise attacks that froze the game. 
#            - Bug fixed: Popups didn't show for straight recovery effects. 
# 2011.12.08 - Finished Script. 
# 2011.12.04 - Started Script. 
#  
#============================================================================== 
# �� Introduction 
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
# Ace Battle Engine works as a foundation for future battle engine add-ons. It 
# allows for easier management of the battle engine without adding too many 
# features, allowing users to customize what they want as they see fit. While 
# the Ace Battle Engine isn't an entirely new engine, it gives users control 
# that RPG Maker VX Ace didn't originally give them. 
#  
# Furthermore, this script provides some new features. They are as follows: 
#  
# ----------------------------------------------------------------------------- 
# Animation Fixes 
# ----------------------------------------------------------------------------- 
# Though the Yanfly Engine Ace - Ace Core Engine script contains these fixes, 
# these fixes are included in this script as well to ensure it's working for 
# the battle script in the event someone chooses not to work with the Ace Core 
# Engine script. The animation fixes prevent excessive animation overlaying 
# (and making the screen look really ugly) and prevents animation clashing 
# between two dual wielding normal attack animations. 
#  
# ----------------------------------------------------------------------------- 
# Enemy Animations 
# ----------------------------------------------------------------------------- 
# Enemies now show battle animations when they deliver attacks and skills 
# against the player's party. Before in RPG Maker VX Ace, it was nothing more 
# than just sound effects and the screen shaking. Now, animations play where 
# the status window is and relative to the position of each party member. 
#  
# ----------------------------------------------------------------------------- 
# Left/Right Command Selection 
# ----------------------------------------------------------------------------- 
# While choosing actions, the player can press Left or Right to move freely 
# between (alive) actors to change their skills. Players no longer have to 
# cancel all the way back to change one person's skill and reselect everything. 
# On that note, there is now the option that when a battle starts or at the 
# end of a turn, players will start immediately at command selection rather 
# than needing to select "Fight" in the Party Command Window. 
#  
# ----------------------------------------------------------------------------- 
# Popups 
# ----------------------------------------------------------------------------- 
# Dealing damage, inflicting states, adding buffs, landing critical hits, 
# striking weaknesses, missing attacks, you name it, there's probably a popup 
# for it. Popups deliver information to the player in a quick or orderly 
# fashion without requiring the player to read lines of text. 
#  
# ----------------------------------------------------------------------------- 
# Targeting Window 
# ----------------------------------------------------------------------------- 
# When targeting enemies, the window is no longer displayed. Instead, the 
# targeted enemies are highlighted and their names are shown at the top of the 
# screen in a help window. Another thing that's changed is when skills that 
# target multiple targets are selected, there is a confirmation step that the 
# player must take before continuing. In this confirmation step, all of the 
# multiple targets are selected and in the help window would display the scope 
# of the skill (such as "All Foes" or "Random Foes"). RPG Maker VX Ace skipped 
# this step by default. 
#  
# ----------------------------------------------------------------------------- 
# Toggling On and Off Special Effects and Text 
# ----------------------------------------------------------------------------- 
# Not everybody likes having the screen shake or the enemies blink when they 
# take damage. These effects can now be toggled on and off. Certain text can 
# also be toggled on and off from appearing. A lot of the displayed text has 
# been rendered redundant through the use of popups. 
#  
# ----------------------------------------------------------------------------- 
# Visual Battle Status Window 
# ----------------------------------------------------------------------------- 
# Rather than just having rows of names with HP and MP bars next to them, the 
# Battle Status Window now displays actors' faces and their gauges aligned at 
# the bottom. More status effects can be shown in addition to showing more 
# members on screen at once. The Battle Status Window is also optimized to 
# refresh less (thus, removing potential lag from the system). 
#  
# ----------------------------------------------------------------------------- 
# Window Position Changes 
# ----------------------------------------------------------------------------- 
# Windows such as the Skill Window and Item Window have been rearranged to 
# always provide the player a clear view of the battlefield rather than opening 
# up and covering everything. As such, the window positions are placed at the 
# bottom of the screen and are repositioned. 
#  
#============================================================================== 
# �� 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. 
#  
# ----------------------------------------------------------------------------- 
# Skill Notetags - These notetags go in the skills notebox in the database. 
# ----------------------------------------------------------------------------- 
# <one animation> 
# Causes the action to display the action animation only once, even if it's a 
# multi-hit action. This is used primarily for non-all scope targeting. 
#  
# ----------------------------------------------------------------------------- 
# Item Notetags - These notetags go in the items notebox in the database. 
# ----------------------------------------------------------------------------- 
# <one animation> 
# Causes the action to display the action animation only once, even if it's a 
# multi-hit action. This is used primarily for non-all scope targeting. 
#  
# ----------------------------------------------------------------------------- 
# Enemy Notetags - These notetags go in the enemy notebox in the database. 
# ----------------------------------------------------------------------------- 
# <atk ani 1: x> 
# <atk ani 2: x> 
# Changes the normal attack animation of the particular enemy to animation x. 
# Attack animation 1 is the first one that plays. If there's a second animation 
# then the second one will play after in mirrored form. 
#  
# ----------------------------------------------------------------------------- 
# State Notetags - These notetags go in the state notebox in the database. 
# ----------------------------------------------------------------------------- 
# <popup add: string> 
# <popup rem: string> 
# <popup dur: string> 
# Status effects now create popups whenever they're inflicted. However, if you 
# don't like that a certain status effect uses a particular colour setting, 
# change "string" to one of the rulesets below to cause that popup to use a 
# different ruleset. 
#  
# <popup hide add> 
# <popup hide rem> 
# <popup hide dur> 
# Not everybody wants status effects to show popups when inflicted. When this 
# is the case, insert the respective tag to hide popups from appearing when the 
# state is added, removed, or during the stand-by phases. 
#  
# ----------------------------------------------------------------------------- 
# Debug Tools - These tools only work during Test Play. 
# ----------------------------------------------------------------------------- 
# - F5 Key - 
# Recovers all actors. Restores their HP and MP to max. Does not affect TP. 
# All states and buffs are removed whether they are positive or negative. 
#  
# - F6 Key - 
# Sets all actors to have 1 HP, 0 MP, and 0 TP. States are unaffected. 
#  
# - F7 Key - 
# Sets all actors to have max TP. Everything else is unaffected. 
#  
# - F8 Key - 
# Kills all enemies in battle. Ends the battle quickly. 
#  
#============================================================================== 
# �� 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 BATTLE 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - General Battle Settings - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # These settings are adjusted for the overall battle system. These are 
    # various miscellaneous options to adjust. Each of the settings below will 
    # explain what they do. Change default enemy battle animations here, too. 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    BLINK_EFFECTS      = false  # Blink sprite when damaged? 
    FLASH_WHITE_EFFECT = true   # Flash enemy white when it starts an attack. 
    SCREEN_SHAKE       = true  # Shake screen in battle? 
    SKIP_PARTY_COMMAND = true   # Skips the Fight/Escape menu. 
    AUTO_FAST          = true   # Causes message windows to not wait. 
    ENEMY_ATK_ANI      = 36     # Sets default attack animation for enemies. 
     
    # If this switch is ON, popups will be hidden. If OFF, the popups will be 
    # shown. If you do not wish to use this switch, set it to 0. 
    HIDE_POPUP_SWITCH  = 0 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - Battle Status Window - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # This sets the default battle system your game will use. If your game 
    # doesn't have any other battle systems installed, it will use :dtb. 
    #  
    # Battle System        Requirement 
    #   :dtb               - Default Turn Battle. Default system. 
    #   :ftb               - YEA Battle System Add-On: Free Turn Battle 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    DEFAULT_BATTLE_SYSTEM = :dtb     # Default battle system set. 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - Battle Status Window - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # Here, you can adjust the settings for the battle status window. The 
    # battle status window, by default, will show the actor's face, HP, MP, TP 
    # (if viable), and any inflicted status effects. 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    BATTLESTATUS_NAME_FONT_SIZE = 20    # Font size used for name. 
    BATTLESTATUS_TEXT_FONT_SIZE = 16    # Font size used for HP, MP, TP. 
    BATTLESTATUS_NO_ACTION_ICON = 185   # No action icon. 
    BATTLESTATUS_HPGAUGE_Y_PLUS = 11    # Y Location buffer used for HP gauge. 
    BATTLESTATUS_CENTER_FACES   = false # Center faces for the Battle Status. 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - Help Window Text - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # When selecting a target to attack, this is the text that will be shown 
    # in place of a target's name for special cases. These special cases are 
    # for selections that were originally non-targetable battle scopes. 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    HELP_TEXT_ALL_FOES        = "All Foes" 
    HELP_TEXT_ONE_RANDOM_FOE  = "One Random Foe" 
    HELP_TEXT_MANY_RANDOM_FOE = "%d Random Foes" 
    HELP_TEXT_ALL_ALLIES      = "All Allies" 
    HELP_TEXT_ALL_DEAD_ALLIES = "All Dead Allies" 
    HELP_TEXT_ONE_RANDOM_ALLY = "One Random Ally" 
    HELP_TEXT_RANDOM_ALLIES   = "%d Random Allies" 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - Popup Settings - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # These settings will adjust the popups that appear in battle. Popups 
    # deliver information to your player as battlers deal damage, inflict 
    # status effects, and more. 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    ENABLE_POPUPS  = true     # Set this to false if you wish to disable them. 
    FLASH_CRITICAL = true     # Sets critical hits to flash. 
     
    # This hash adjusts the popup settings that will govern how popups appear. 
    # Adjust them accordingly. 
    POPUP_SETTINGS ={ 
      :offset     => -24,         # Height offset of a popup. 
      :fade       => 12,          # Fade rate for each popup. 
      :full       => 60,          # Frames before a popup fades. 
      :hp_dmg     => "-%s ",      # SprintF for HP damage. 
      :hp_heal    => "+%s ",      # SprintF for HP healing. 
      :mp_dmg     => "-%s MP",    # SprintF for MP damage. 
      :mp_heal    => "+%s MP",    # SprintF for MP healing. 
      :tp_dmg     => "-%s TP",    # SprintF for MP damage. 
      :tp_heal    => "+%s TP",    # SprintF for MP healing. 
      :drained    => "DRAIN",     # Text display for draining HP/MP. 
      :critical   => "CRITICAL!", # Text display for critical hit. 
      :missed     => "MISS",      # Text display for missed attack. 
      :evaded     => "EVADE!",    # Text display for evaded attack. 
      :blocked    => "BLOCK!", 
      :nulled     => "NO EFFECT",      # Text display for nulled attack. 
      :failed     => "FAILED",    # Text display for a failed attack. 
      :add_state  => "+%s",      # SprintF for added states. 
      :rem_state  => "-%s",      # SprintF for removed states. 
      :dur_state  => "%s",        # SprintF for during states. 
      :ele_rates  => true,        # This will display elemental affinities. 
      :ele_wait   => 20,          # This is how many frames will wait. 
      :weakpoint  => "WEAKPOINT", # Appears if foe is weak to element. 
      :resistant  => "RESIST",    # Appears if foe is resistant to element. 
      :immune     => "IMMUNE",    # Appears if foe is immune to element. 
      :absorbed   => "ABSORB",    # Appears if foe can absorb the element. 
      :add_buff   => "%s�{",      # Appears when a positive buff is applied. 
      :add_debuff => "%s�|",      # Appears when a negative buff is applied. 
    } # Do not remove this. 
     
    # This is the default font used for the popups. Adjust them accordingly 
    # or even add new ones. 
    DEFAULT = ["VL Gothic", "Verdana", "Arial", "Courier"] 
     
    # The following are the various rules that govern the individual popup 
    # types that will appear. Adjust them accordingly. Here is a list of what 
    # each category does. 
    #   Zoom1    The zoom the popup starts at. Values over 2.0 may cause lag. 
    #   Zoom2    The zoom the popup goes to. Values over 2.0 may cause lag. 
    #   Sz       The font size used for the popup text. 
    #   Bold     Applying bold for the popup text. 
    #   Italic   Applying italic for the popup text. 
    #   Red      The red value of the popup text. 
    #   Grn      The green value of the popup text. 
    #   Blu      The blue value of the popup text. 
    #   Font     The font used for the popup text. 
    POPUP_RULES ={ 
      # Type     => [ Zoom1, Zoom2, Sz, Bold, Italic, Red, Grn, Blu, Font] 
      "DEFAULT"  => [   2.0,   1.0, 24, true,  false, 255, 255, 255, DEFAULT], 
      "CRITICAL" => [   2.0,   1.0, 24, true,  false, 255,  80,  80, DEFAULT],  
      "HP_DMG"   => [   2.0,   1.0, 36, true,  false, 255, 255, 255, DEFAULT],  
      "HP_HEAL"  => [   2.0,   1.0, 36, true,  false, 130, 250, 130, DEFAULT],  
      "MP_DMG"   => [   2.0,   1.0, 36, true,  false, 220, 180, 255, DEFAULT],  
      "MP_HEAL"  => [   2.0,   1.0, 36, true,  false, 160, 230, 255, DEFAULT],  
      "TP_DMG"   => [   2.0,   1.0, 36, true,  false, 242, 108,  78, DEFAULT],  
      "TP_HEAL"  => [   2.0,   1.0, 36, true,  false, 251, 175,  92, DEFAULT],  
      "ADDSTATE" => [   2.0,   1.0, 24, true,  false, 240, 100, 100, DEFAULT],  
      "REMSTATE" => [   2.0,   1.0, 24, true,  false, 125, 170, 225, DEFAULT],  
      "DURSTATE" => [   2.0,   1.0, 24, true,  false, 255, 240, 150, DEFAULT],  
      "DRAIN"    => [   2.0,   1.0, 36, true,  false, 250, 190, 255, DEFAULT],  
      "POSITIVE" => [   2.0,   1.0, 24, true,  false, 110, 210, 245, DEFAULT],  
      "NEGATIVE" => [   2.0,   1.0, 24, true,  false, 245, 155, 195, DEFAULT],  
      "WEAK_ELE" => [   0.5,   1.0, 24, true,  false, 240, 110,  80, DEFAULT],  
      "IMMU_ELE" => [   0.5,   1.0, 24, true,  false, 185, 235, 255, DEFAULT],  
      "REST_ELE" => [   0.5,   1.0, 24, true,  false, 145, 230, 180, DEFAULT],  
      "ABSB_ELE" => [   0.5,   1.0, 24, true,  false, 250, 190, 255, DEFAULT],  
      "BUFF"     => [   2.0,   1.0, 24, true,  false, 255, 240, 100, DEFAULT],  
      "DEBUFF"   => [   2.0,   1.0, 24, true,  false, 160, 130, 200, DEFAULT],  
    } # Do not remove this. 
     
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # - Streamlined Messages - 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    # Want to remove some of those annoying messages that appear all the time? 
    # Now you can! Select which messages you want to enable or disable. Some of 
    # these messages will be rendered useless due to popups. 
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 
    MSG_ENEMY_APPEARS  = false  # Message when enemy appears start of battle. 
    MSG_CURRENT_STATE  = false  # Show which states has affected battler. 
    MSG_CURRENT_ACTION = true   # Show the current action of the battler. 
    MSG_COUNTERATTACK  = true   # Show the message for a counterattack. 
    MSG_REFLECT_MAGIC  = true   # Show message for reflecting magic attacks. 
    MSG_SUBSTITUTE_HIT = true   # Show message for ally taking another's hit. 
    MSG_FAILURE_HIT    = false  # Show effect failed against target. 
    MSG_CRITICAL_HIT   = false  # Show attack was a critical hit. 
    MSG_HIT_MISSED     = false  # Show attack missed the target. 
    MSG_EVASION        = false  # Show attack was evaded by the target. 
    MSG_HP_DAMAGE      = false  # Show HP damage to target. 
    MSG_MP_DAMAGE      = false  # Show MP damage to target. 
    MSG_TP_DAMAGE      = false  # Show TP damage to target. 
    MSG_ADDED_STATES   = false  # Show target's added states. 
    MSG_REMOVED_STATES = false  # Show target's removed states. 
    MSG_CHANGED_BUFFS  = false  # Show target's changed buffs. 
     
  end # BATTLE 
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 ENEMY 
     
    ATK_ANI1 = /<(?:ATK_ANI_1|atk ani 1):[ ]*(\d+)>/i 
    ATK_ANI2 = /<(?:ATK_ANI_2|atk ani 2):[ ]*(\d+)>/i 
     
  end # ENEMY 
  module USABLEITEM 
     
    ONE_ANIMATION = /<(?:ONE_ANIMATION|one animation)>/i 
     
  end # USABLEITEM 
  module STATE 
     
    POPUP_ADD = /<(?:POPUP_ADD_RULE|popup add rule|popup add):[ ](.*)>/i 
    POPUP_REM = /<(?:POPUP_REM_RULE|popup rem rule|popup rem):[ ](.*)>/i 
    POPUP_DUR = /<(?:POPUP_DUR_RULE|popup dur rule|popup dur):[ ](.*)>/i 
     
    HIDE_ADD  = /<(?:POPUP_HIDE_ADD|popup hide add|hide add)>/i 
    HIDE_REM  = /<(?:POPUP_HIDE_REM|popup hide rem|hide rem)>/i 
    HIDE_DUR  = /<(?:POPUP_HIDE_DUR|popup hide dur|hide dur)>/i 
     
  end # STATE 
  end # REGEXP 
end # YEA 
 
#============================================================================== 
# �� Switch 
#============================================================================== 
 
module Switch 
   
  #-------------------------------------------------------------------------- 
  # self.hide_popups 
  #-------------------------------------------------------------------------- 
  def self.hide_popups 
    return false if YEA::BATTLE::HIDE_POPUP_SWITCH <= 0 
    return $game_switches[YEA::BATTLE::HIDE_POPUP_SWITCH] 
  end 
   
end # Switch 
 
#============================================================================== 
# �� Colour 
#============================================================================== 
 
module Colour 
   
  #-------------------------------------------------------------------------- 
  # self.text_colour 
  #-------------------------------------------------------------------------- 
  def self.text_colour(index) 
    windowskin = Cache.system("Window") 
    x = 64 + (index % 8) * 8 
    y = 96 + (index / 8) * 8 
    return windowskin.get_pixel(x, y) 
  end 
   
end # Colour 
 
#============================================================================== 
# �� Icon 
#============================================================================== 
 
module Icon 
   
  #-------------------------------------------------------------------------- 
  # self.no_action 
  #-------------------------------------------------------------------------- 
  def self.no_action; return YEA::BATTLE::BATTLESTATUS_NO_ACTION_ICON; end 
     
end # Icon 
 
#============================================================================== 
# �� Numeric 
#============================================================================== 
 
class Numeric 
   
  #-------------------------------------------------------------------------- 
  # new method: group_digits 
  #-------------------------------------------------------------------------- 
  unless $imported["YEA-CoreEngine"] 
  def group; return self.to_s; end 
  end # $imported["YEA-CoreEngine"] 
     
end # Numeric 
 
#============================================================================== 
# �� DataManager 
#============================================================================== 
 
module DataManager 
   
  #-------------------------------------------------------------------------- 
  # alias method: load_database 
  #-------------------------------------------------------------------------- 
  class <<self; alias load_database_abe load_database; end 
  def self.load_database 
    load_database_abe 
    load_notetags_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: load_notetags_abe 
  #-------------------------------------------------------------------------- 
  def self.load_notetags_abe 
    groups = [$data_enemies, $data_states, $data_skills, $data_items] 
    for group in groups 
      for obj in group 
        next if obj.nil? 
        obj.load_notetags_abe 
      end 
    end 
  end 
   
end # DataManager 
 
#============================================================================== 
# �� RPG::UsableItem 
#============================================================================== 
 
class RPG::UsableItem < RPG::BaseItem 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :one_animation 
   
  #-------------------------------------------------------------------------- 
  # common cache: load_notetags_abe 
  #-------------------------------------------------------------------------- 
  def load_notetags_abe 
    @one_animation = false 
    #--- 
    self.note.split(/[\r\n]+/).each { |line| 
      case line 
      #--- 
      when YEA::REGEXP::USABLEITEM::ONE_ANIMATION 
        @one_animation = true 
      end 
    } # self.note.split 
    #--- 
  end 
   
end # RPG::UsableItem 
 
#============================================================================== 
# �� RPG::Enemy 
#============================================================================== 
 
class RPG::Enemy < RPG::BaseItem 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :atk_animation_id1 
  attr_accessor :atk_animation_id2 
   
  #-------------------------------------------------------------------------- 
  # common cache: load_notetags_abe 
  #-------------------------------------------------------------------------- 
  def load_notetags_abe 
    @atk_animation_id1 = YEA::BATTLE::ENEMY_ATK_ANI 
    @atk_animation_id2 = 0 
    #--- 
    self.note.split(/[\r\n]+/).each { |line| 
      case line 
      #--- 
      when YEA::REGEXP::ENEMY::ATK_ANI1 
        @atk_animation_id1 = $1.to_i 
      when YEA::REGEXP::ENEMY::ATK_ANI2 
        @atk_animation_id2 = $1.to_i 
      end 
    } # self.note.split 
    #--- 
  end 
   
end # RPG::Enemy 
 
#============================================================================== 
# �� RPG::Enemy 
#============================================================================== 
 
class RPG::State < RPG::BaseItem 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :popup_rules 
   
  #-------------------------------------------------------------------------- 
  # common cache: load_notetags_abe 
  #-------------------------------------------------------------------------- 
  def load_notetags_abe 
    @popup_rules = {  
      :add_state => "ADDSTATE",  
      :rem_state => "REMSTATE",  
      :dur_state => nil 
    } # Do not remove this. 
    #--- 
    self.note.split(/[\r\n]+/).each { |line| 
      case line 
      #--- 
      when YEA::REGEXP::STATE::POPUP_ADD 
        @popup_rules[:add_state] = $1.upcase.to_s 
      when YEA::REGEXP::STATE::POPUP_REM 
        @popup_rules[:rem_state] = $1.upcase.to_s 
      when YEA::REGEXP::STATE::POPUP_DUR 
        @popup_rules[:dur_state] = $1.upcase.to_s 
      when YEA::REGEXP::STATE::HIDE_ADD 
        @popup_rules[:add_state] = nil 
      when YEA::REGEXP::STATE::HIDE_REM 
        @popup_rules[:rem_state] = nil 
      when YEA::REGEXP::STATE::HIDE_DUR 
        @popup_rules[:dur_state] = nil 
      end 
    } # self.note.split 
    #--- 
  end 
   
end # RPG::State 
 
#============================================================================== 
# �� BattleManager 
#============================================================================== 
 
module BattleManager 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: self.battle_start 
  #-------------------------------------------------------------------------- 
  def self.battle_start 
    $game_system.battle_count += 1 
    $game_party.on_battle_start 
    $game_troop.on_battle_start 
    return unless YEA::BATTLE::MSG_ENEMY_APPEARS 
    $game_troop.enemy_names.each do |name| 
      $game_message.add(sprintf(Vocab::Emerge, name)) 
    end 
    if @preemptive 
      $game_message.add(sprintf(Vocab::Preemptive, $game_party.name)) 
    elsif @surprise 
      $game_message.add(sprintf(Vocab::Surprise, $game_party.name)) 
    end 
    wait_for_message 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: make_action_orders 
  #-------------------------------------------------------------------------- 
  def self.make_action_orders 
    make_dtb_action_orders if btype?(:dtb) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_dtb_action_orders 
  #-------------------------------------------------------------------------- 
  def self.make_dtb_action_orders 
    @action_battlers = [] 
    @action_battlers += $game_party.members unless @surprise 
    @action_battlers += $game_troop.members unless @preemptive 
    @action_battlers.each {|battler| battler.make_speed } 
    @action_battlers.sort! {|a,b| b.speed - a.speed } 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: turn_start 
  #-------------------------------------------------------------------------- 
  def self.turn_start 
    @phase = :turn 
    clear_actor 
    $game_troop.increase_turn 
    @performed_battlers = [] 
    make_action_orders 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: next_subject 
  #-------------------------------------------------------------------------- 
  def self.next_subject 
    @performed_battlers = [] if @performed_battlers.nil? 
    loop do 
      @action_battlers -= @performed_battlers 
      battler = @action_battlers.shift 
      return nil unless battler 
      next unless battler.index && battler.alive? 
      @performed_battlers.push(battler) 
      return battler 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: force_action 
  #-------------------------------------------------------------------------- 
  def self.force_action(battler) 
    @action_forced = [] if @action_forced == nil 
    @action_forced.push(battler) 
    return unless Switch.forced_action_remove 
    @action_battlers.delete(battler) 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: action_forced? 
  #-------------------------------------------------------------------------- 
  def self.action_forced? 
    @action_forced != nil 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: action_forced_battler 
  #-------------------------------------------------------------------------- 
  def self.action_forced_battler 
    @action_forced.shift 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: clear_action_force 
  #-------------------------------------------------------------------------- 
  def self.clear_action_force 
    return if @action_forced.nil? 
    @action_forced = nil if @action_forced.empty? 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: self.init_battle_type 
  #-------------------------------------------------------------------------- 
  def self.init_battle_type 
    set_btype($game_system.battle_system) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: self.set_btype 
  #-------------------------------------------------------------------------- 
  def self.set_btype(btype = :dtb) 
    @battle_type = btype 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: self.btype? 
  #-------------------------------------------------------------------------- 
  def self.btype?(btype) 
    return @battle_type == btype 
  end 
   
end # BattleManager 
 
#============================================================================== 
# �� Game_System 
#============================================================================== 
 
class Game_System 
   
  #-------------------------------------------------------------------------- 
  # new method: battle_system 
  #-------------------------------------------------------------------------- 
  def battle_system 
    if @battle_system.nil? 
      return battle_system_corrected(YEA::BATTLE::DEFAULT_BATTLE_SYSTEM) 
    else 
      return battle_system_corrected(@battle_system) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: set_battle_system 
  #-------------------------------------------------------------------------- 
  def set_battle_system(type) 
    case type 
    when :dtb; @battle_system = :dtb 
    when :ftb; @battle_system = $imported["YEA-BattleSystem-FTB"] ? :ftb : :dtb 
    else;      @battle_system = :dtb 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: battle_system_corrected 
  #-------------------------------------------------------------------------- 
  def battle_system_corrected(type) 
    case type 
    when :dtb; return :dtb 
    when :ftb; return $imported["YEA-BattleSystem-FTB"] ? :ftb : :dtb 
    else;      return :dtb 
    end 
  end 
   
end # Game_System 
 
#============================================================================== 
# �� Sprite_Base 
#============================================================================== 
 
class Sprite_Base < Sprite 
   
  #-------------------------------------------------------------------------- 
  # new method: start_pseudo_animation 
  #-------------------------------------------------------------------------- 
  unless $imported["YEA-CoreEngine"] 
  def start_pseudo_animation(animation, mirror = false) 
    dispose_animation 
    @animation = animation 
    return if @animation.nil? 
    @ani_mirror = mirror 
    set_animation_rate 
    @ani_duration = @animation.frame_max * @ani_rate + 1 
    @ani_sprites = [] 
  end 
  end # $imported["YEA-CoreEngine"] 
   
end # Sprite_Base 
 
#============================================================================== 
# �� Sprite_Battler 
#============================================================================== 
 
class Sprite_Battler < Sprite_Base 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :effect_type 
  attr_accessor :battler_visible 
  attr_accessor :popups 
   
  #-------------------------------------------------------------------------- 
  # alias method: initialize 
  #-------------------------------------------------------------------------- 
  alias sprite_battler_initialize_abe initialize 
  def initialize(viewport, battler = nil) 
    sprite_battler_initialize_abe(viewport, battler) 
    @popups = [] 
    @popup_flags = [] 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: update_bitmap 
  #-------------------------------------------------------------------------- 
  alias sprite_battler_update_bitmap_abe update_bitmap 
  def update_bitmap 
    return if @battler.actor? && @battler.battler_name == "" 
    sprite_battler_update_bitmap_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: setup_new_animation 
  #-------------------------------------------------------------------------- 
  unless $imported["YEA-CoreEngine"] 
  alias sprite_battler_setup_new_animation_abe setup_new_animation 
  def setup_new_animation 
    sprite_battler_setup_new_animation_abe 
    return if @battler.pseudo_ani_id <= 0 
    animation = $data_animations[@battler.pseudo_ani_id] 
    mirror = @battler.animation_mirror 
    start_pseudo_animation(animation, mirror) 
    @battler.pseudo_ani_id = 0 
  end 
  end # $imported["YEA-CoreEngine"] 
   
  #-------------------------------------------------------------------------- 
  # alias method: setup_new_effect 
  #-------------------------------------------------------------------------- 
  alias sprite_battler_setup_new_effect_abe setup_new_effect 
  def setup_new_effect 
    sprite_battler_setup_new_effect_abe 
    setup_popups 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: setup_popups 
  #-------------------------------------------------------------------------- 
  def setup_popups 
    return unless @battler.use_sprite? 
    @battler.popups = [] if @battler.popups.nil? 
    return if @battler.popups == [] 
    array = @battler.popups.shift 
    create_new_popup(array[0], array[1], array[2]) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: create_new_popup 
  #-------------------------------------------------------------------------- 
  def create_new_popup(value, rules, flags) 
    return if @battler == nil 
    return if flags & @popup_flags != [] 
    array = YEA::BATTLE::POPUP_RULES[rules] 
    for popup in @popups 
      popup.y -= 24 
    end 
    return unless SceneManager.scene.is_a?(Scene_Battle) 
    return if SceneManager.scene.spriteset.nil? 
    view = SceneManager.scene.spriteset.viewportPopups 
    new_popup = Sprite_Popup.new(view, @battler, value, rules, flags) 
    @popups.push(new_popup) 
    @popup_flags.push("weakness") if flags.include?("weakness") 
    @popup_flags.push("resistant") if flags.include?("resistant") 
    @popup_flags.push("immune") if flags.include?("immune") 
    @popup_flags.push("absorbed") if flags.include?("absorbed") 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: update_effect 
  #-------------------------------------------------------------------------- 
  alias sprite_battler_update_effect_abe update_effect 
  def update_effect 
    sprite_battler_update_effect_abe 
    update_popups 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: update_popups 
  #-------------------------------------------------------------------------- 
  def update_popups 
    for popup in @popups 
      popup.update 
      next unless popup.opacity <= 0 
      popup.bitmap.dispose 
      popup.dispose 
      @popups.delete(popup) 
      popup = nil 
    end 
    @popup_flags = [] if @popups == [] && @popup_flags != [] 
    return unless SceneManager.scene_is?(Scene_Battle) 
    if @current_active_battler != SceneManager.scene.subject 
      @current_active_battler = SceneManager.scene.subject 
      @popup_flags = [] 
    end 
  end 
   
end # Sprite_Battler 
 
#============================================================================== 
# �� Sprite_Popup 
#============================================================================== 
 
class Sprite_Popup < Sprite_Base 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :flags 
   
  #-------------------------------------------------------------------------- 
  # initialize 
  #-------------------------------------------------------------------------- 
  def initialize(viewport, battler, value, rules, flags) 
    super(viewport) 
    @value = value 
    @rules = rules 
    @rules = "DEFAULT" unless YEA::BATTLE::POPUP_RULES.include?(@rules) 
    @fade = YEA::BATTLE::POPUP_SETTINGS[:fade] 
    @full = YEA::BATTLE::POPUP_SETTINGS[:full] 
    @flags = flags 
    @battler = battler 
    create_popup_bitmap 
  end 
   
  #-------------------------------------------------------------------------- 
  # create_popup_bitmap 
  #-------------------------------------------------------------------------- 
  def create_popup_bitmap 
    rules_array = YEA::BATTLE::POPUP_RULES[@rules] 
    bw = Graphics.width 
    bw += 48 if @flags.include?("state") 
    bh = Font.default_size * 3 
    bitmap = Bitmap.new(bw, bh) 
    bitmap.font.name = rules_array[8] 
    size = @flags.include?("critical") ? rules_array[2] * 1.2 : rules_array[2] 
    bitmap.font.size = size 
    bitmap.font.bold = rules_array[3] 
    bitmap.font.italic = rules_array[4] 
    if flags.include?("critical") 
      crit = YEA::BATTLE::POPUP_RULES["CRITICAL"] 
      bitmap.font.out_color.set(crit[5], crit[6], crit[7], 255) 
    else 
      bitmap.font.out_color.set(0, 0, 0, 255) 
    end 
    dx = 0; dy = 0; dw = 0 
    dx += 24 if @flags.include?("state") 
    dw += 24 if @flags.include?("state") 
    if @flags.include?("state") || @flags.include?("buff") 
      c_width = bitmap.text_size(@value).width 
      icon_bitmap = $game_temp.iconset 
      icon_index = flag_state_icon 
      rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24) 
      bitmap.blt(dx+(bw-c_width)/2-36, (bh - 24)/2, icon_bitmap, rect, 255) 
    end 
    bitmap.font.color.set(rules_array[5], rules_array[6], rules_array[7]) 
    bitmap.draw_text(dx, dy, bw-dw, bh, @value, 1) 
    self.bitmap = bitmap 
    self.x = @battler.screen_x 
    self.x += rand(4) - rand(4) if @battler.sprite.popups.size >= 1 
    self.x -= SceneManager.scene.spriteset.viewport1.ox 
    self.y = @battler.screen_y - @battler.sprite.oy/2 
    self.y -= @battler.sprite.oy/2 if @battler.actor? 
    self.y -= SceneManager.scene.spriteset.viewport1.oy 
    self.ox = bw/2; self.oy = bh/2 
    self.zoom_x = self.zoom_y = rules_array[0] 
    if @flags.include?("no zoom") 
      self.zoom_x = self.zoom_y = rules_array[1] 
    end 
    @target_zoom = rules_array[1] 
    @zoom_direction = (self.zoom_x > @target_zoom) ? "down" : "up" 
    self.z = 500 
  end 
   
  #-------------------------------------------------------------------------- 
  # update 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    #--- 
    if @flags.include?("critical") && YEA::BATTLE::FLASH_CRITICAL 
      @hue_duration = 2 if @hue_duration == nil || @hue_duration == 0 
      @hue_duration -= 1 
      self.bitmap.hue_change(15) if @hue_duration <= 0 
    end 
    #--- 
    if @zoom_direction == "up" 
      self.zoom_x = [self.zoom_x + 0.075, @target_zoom].min 
      self.zoom_y = [self.zoom_y + 0.075, @target_zoom].min 
    else 
      self.zoom_x = [self.zoom_x - 0.075, @target_zoom].max 
      self.zoom_y = [self.zoom_y - 0.075, @target_zoom].max 
    end 
    #--- 
    @full -= 1 
    return if @full > 0 
    self.y -= 1 
    self.opacity -= @fade 
  end 
   
  #-------------------------------------------------------------------------- 
  # flag_state_icon 
  #-------------------------------------------------------------------------- 
  def flag_state_icon 
    for item in @flags; return item if item.is_a?(Integer); end 
    return 0 
  end 
   
end # Sprite_Popup 
 
#============================================================================== 
# �� Spriteset_Battle 
#============================================================================== 
 
class Spriteset_Battle 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :actor_sprites 
  attr_accessor :enemy_sprites 
  attr_accessor :viewport1 
  attr_accessor :viewportPopups 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_viewports 
  #-------------------------------------------------------------------------- 
  alias spriteset_battle_create_viewports_abe create_viewports 
  def create_viewports 
    spriteset_battle_create_viewports_abe 
    @viewportPopups = Viewport.new 
    @viewportPopups.z = 200 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: dispose_viewports 
  #-------------------------------------------------------------------------- 
  alias spriteset_battle_dispose_viewports_abe dispose_viewports 
  def dispose_viewports 
    spriteset_battle_dispose_viewports_abe 
    @viewportPopups.dispose 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: update_viewports 
  #-------------------------------------------------------------------------- 
  alias spriteset_battle_update_viewports_abe update_viewports 
  def update_viewports 
    spriteset_battle_update_viewports_abe 
    @viewportPopups.update 
  end 
   
end # Spriteset_Battle 
 
#============================================================================== 
# �� Game_Temp 
#============================================================================== 
 
class Game_Temp 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :battle_aid 
  attr_accessor :evaluating 
  attr_accessor :iconset 
   
  #-------------------------------------------------------------------------- 
  # alias method: initialize 
  #-------------------------------------------------------------------------- 
  alias game_temp_initialize_abe initialize 
  def initialize 
    game_temp_initialize_abe 
    @iconset = Cache.system("Iconset") 
  end 
   
end # Game_Temp 
 
#============================================================================== 
# �� Game_Action 
#============================================================================== 
 
class Game_Action 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: speed 
  #-------------------------------------------------------------------------- 
  def speed 
    speed = subject.agi 
    speed += item.speed if item 
    speed += subject.atk_speed if attack? 
    return speed 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: evaluate_item_with_target 
  #-------------------------------------------------------------------------- 
  alias evaluate_item_with_target_abe evaluate_item_with_target 
  def evaluate_item_with_target(target) 
    $game_temp.evaluating = true 
    result = evaluate_item_with_target_abe(target) 
    $game_temp.evaluating = false 
    return result 
  end 
   
end # Game_Action 
 
#============================================================================== 
# �� Game_ActionResult 
#============================================================================== 
 
class Game_ActionResult 
   
  #-------------------------------------------------------------------------- 
  # alias method: clear 
  #-------------------------------------------------------------------------- 
  alias game_actionresult_clear_abe clear 
  def clear 
    game_actionresult_clear_abe 
    clear_stored_damage 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: clear_stored_damage 
  #-------------------------------------------------------------------------- 
  def clear_stored_damage 
    @stored_hp_damage = 0 
    @stored_mp_damage = 0 
    @stored_tp_damage = 0 
    @stored_hp_drain = 0 
    @stored_mp_drain = 0 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: store_damage 
  #-------------------------------------------------------------------------- 
  def store_damage 
    @stored_hp_damage += @hp_damage 
    @stored_mp_damage += @mp_damage 
    @stored_tp_damage += @tp_damage 
    @stored_hp_drain += @hp_drain 
    @stored_mp_drain += @mp_drain 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: restore_damage 
  #-------------------------------------------------------------------------- 
  def restore_damage 
    @hp_damage = @stored_hp_damage 
    @mp_damage = @stored_mp_damage 
    @tp_damage = @stored_tp_damage 
    @hp_drain = @stored_hp_drain 
    @mp_drain = @stored_mp_drain 
    clear_stored_damage 
  end 
   
end # Game_ActionResult 
 
#============================================================================== 
# �� Game_BattlerBase 
#============================================================================== 
 
class Game_BattlerBase 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :popups 
   
  #-------------------------------------------------------------------------- 
  # new method: create_popup 
  #-------------------------------------------------------------------------- 
  def create_popup(value, rules = "DEFAULT", flags = []) 
    return unless SceneManager.scene_is?(Scene_Battle) 
    return unless YEA::BATTLE::ENABLE_POPUPS 
    return if Switch.hide_popups 
    @popups = [] if @popups.nil? 
    @popups.push([value, rules, flags]) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_damage_popups 
  #-------------------------------------------------------------------------- 
  def make_damage_popups(user) 
    if @result.hp_drain != 0 
      text = YEA::BATTLE::POPUP_SETTINGS[:drained] 
      rules = "DRAIN" 
      user.create_popup(text, rules) 
      setting = :hp_dmg  if @result.hp_drain < 0 
      setting = :hp_heal if @result.hp_drain > 0 
      rules = "HP_DMG"   if @result.hp_drain < 0 
      rules = "HP_HEAL"  if @result.hp_drain > 0 
      value = @result.hp_drain.abs 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group) 
      user.create_popup(text, rules) 
    end 
    if @result.mp_drain != 0 
      text = YEA::BATTLE::POPUP_SETTINGS[:drained] 
      rules = "DRAIN" 
      user.create_popup(text, rules) 
      setting = :mp_dmg  if @result.mp_drain < 0 
      setting = :mp_heal if @result.mp_drain > 0 
      rules = "HP_DMG"   if @result.mp_drain < 0 
      rules = "HP_HEAL"  if @result.mp_drain > 0 
      value = @result.mp_drain.abs 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group) 
      user.create_popup(text, rules) 
    end 
    #--- 
    flags = [] 
    flags.push("critical") if @result.critical 
    if @result.hp_damage != 0 
      setting = :hp_dmg  if @result.hp_damage > 0 
      setting = :hp_heal if @result.hp_damage < 0 
      rules = "HP_DMG"   if @result.hp_damage > 0 
      rules = "HP_HEAL"  if @result.hp_damage < 0 
      value = @result.hp_damage.abs 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group) 
      create_popup(text, rules, flags) 
    end 
    if @result.mp_damage != 0 
      setting = :mp_dmg  if @result.mp_damage > 0 
      setting = :mp_heal if @result.mp_damage < 0 
      rules = "MP_DMG"   if @result.mp_damage > 0 
      rules = "MP_HEAL"  if @result.mp_damage < 0 
      value = @result.mp_damage.abs 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group) 
      create_popup(text, rules, flags) 
    end 
    if @result.tp_damage != 0 
      setting = :tp_dmg  if @result.tp_damage > 0 
      setting = :tp_heal if @result.tp_damage < 0 
      rules = "TP_DMG"   if @result.tp_damage > 0 
      rules = "TP_HEAL"  if @result.tp_damage < 0 
      value = @result.tp_damage.abs 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group) 
      create_popup(text, rules) 
    end 
    @result.store_damage 
    @result.clear_damage_values 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: erase_state 
  #-------------------------------------------------------------------------- 
  alias game_battlerbase_erase_state_abe erase_state 
  def erase_state(state_id) 
    make_state_popup(state_id, :rem_state) if @states.include?(state_id) 
    game_battlerbase_erase_state_abe(state_id) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_during_state_popup 
  #-------------------------------------------------------------------------- 
  def make_during_state_popup 
    state_id = most_important_state_id 
    return if state_id == 0 
    make_state_popup(state_id, :dur_state) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: most_important_state_id 
  #-------------------------------------------------------------------------- 
  def most_important_state_id 
    states.each {|state| return state.id unless state.message3.empty? } 
    return 0 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_state_popup 
  #-------------------------------------------------------------------------- 
  def make_state_popup(state_id, type) 
    state = $data_states[state_id] 
    return if state.icon_index == 0 
    rules = state.popup_rules[type] 
    return if rules.nil? 
    text = sprintf(YEA::BATTLE::POPUP_SETTINGS[type], state.name) 
    flags = ["state", state.icon_index] 
    create_popup(text, rules, flags) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_miss_popups 
  #-------------------------------------------------------------------------- 
  def make_miss_popups(user, item) 
    return if dead? 
    if @result.missed 
      text = YEA::BATTLE::POPUP_SETTINGS[:missed] 
      rules = "DEFAULT" 
      create_popup(text, rules) 
    end 
    if @result.evaded 
  
        text = YEA::BATTLE::POPUP_SETTINGS[:evaded] 
   
      rules = "DEFAULT" 
      create_popup(text, rules) 
    end 
    if @result.hit? && [email protected] 
      text = YEA::BATTLE::POPUP_SETTINGS[:failed] 
      rules = "DEFAULT" 
      create_popup(text, rules) 
    end 
    if @result.hit? && item.damage.to_hp? 
      if @result.hp_damage == 0 && @result.hp_damage == 0 
        text = YEA::BATTLE::POPUP_SETTINGS[:nulled] 
        rules = "DEFAULT" 
        create_popup(text, rules) 
      end 
    end 
  end 
   
#~   def shield? 
#~     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end 
#~     return false 
#~   end 
#~    
  #-------------------------------------------------------------------------- 
  # new method: make_rate_popup 
  #-------------------------------------------------------------------------- 
  def make_rate_popup(rate) 
    return if rate == 1.0 
    flags = [] 
    if rate > 1.0 
      text = YEA::BATTLE::POPUP_SETTINGS[:weakpoint] 
      rules = "WEAK_ELE" 
      flags.push("weakness") 
    elsif rate == 0.0 
      text = YEA::BATTLE::POPUP_SETTINGS[:immune] 
      rules = "IMMU_ELE" 
      flags.push("immune") 
    elsif rate < 0.0 
      text = YEA::BATTLE::POPUP_SETTINGS[:absorbed] 
      rules = "ABSB_ELE" 
      flags.push("absorbed") 
    else 
      text = YEA::BATTLE::POPUP_SETTINGS[:resistant] 
      rules = "REST_ELE" 
      flags.push("resistant") 
    end 
    create_popup(text, rules, flags) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: make_buff_popup 
  #-------------------------------------------------------------------------- 
  def make_buff_popup(param_id, positive = true) 
    return unless SceneManager.scene_is?(Scene_Battle) 
    return unless alive? 
    name = Vocab::param(param_id) 
    if positive 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[:add_buff], name) 
      rules = "BUFF" 
      buff_level = 1 
    else 
      text = sprintf(YEA::BATTLE::POPUP_SETTINGS[:add_debuff], name) 
      rules = "DEBUFF" 
      buff_level = -1 
    end 
    icon = buff_icon_index(buff_level, param_id) 
    flags = ["buff", icon] 
    return if @popups.include?([text, rules, flags]) 
    create_popup(text, rules, flags) 
  end 
   
end # Game_BattlerBase 
 
#============================================================================== 
# �� Game_Battler 
#============================================================================== 
 
class Game_Battler < Game_BattlerBase 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :pseudo_ani_id 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_battle_end 
  #-------------------------------------------------------------------------- 
  alias game_battler_on_battle_end_abe on_battle_end 
  def on_battle_end 
    game_battler_on_battle_end_abe 
    @popups = [] 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: clear_sprite_effects 
  #-------------------------------------------------------------------------- 
  alias game_battler_clear_sprite_effects_abe clear_sprite_effects 
  def clear_sprite_effects 
    game_battler_clear_sprite_effects_abe 
    @pseudo_ani_id = 0 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: item_apply 
  #-------------------------------------------------------------------------- 
  alias game_battler_item_apply_abe item_apply 
  def item_apply(user, item) 
    game_battler_item_apply_abe(user, item) 
    make_miss_popups(user, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: make_damage_value 
  #-------------------------------------------------------------------------- 
  alias game_battler_make_damage_value_abe make_damage_value 
  def make_damage_value(user, item) 
    game_battler_make_damage_value_abe(user, item) 
    rate = item_element_rate(user, item) 
    make_rate_popup(rate) unless $game_temp.evaluating 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: execute_damage 
  #-------------------------------------------------------------------------- 
  alias game_battler_execute_damage_abe execute_damage 
  def execute_damage(user) 
    game_battler_execute_damage_abe(user) 
    make_damage_popups(user) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: item_effect_recover_hp 
  #-------------------------------------------------------------------------- 
  alias game_battler_item_effect_recover_hp_abe item_effect_recover_hp 
  def item_effect_recover_hp(user, item, effect) 
    game_battler_item_effect_recover_hp_abe(user, item, effect) 
    make_damage_popups(user) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: item_effect_recover_mp 
  #-------------------------------------------------------------------------- 
  alias game_battler_item_effect_recover_mp_abe item_effect_recover_mp 
  def item_effect_recover_mp(user, item, effect) 
    game_battler_item_effect_recover_mp_abe(user, item, effect) 
    make_damage_popups(user) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: item_effect_gain_tp 
  #-------------------------------------------------------------------------- 
  alias game_battler_item_effect_gain_tp_abe item_effect_gain_tp 
  def item_effect_gain_tp(user, item, effect) 
    game_battler_item_effect_gain_tp_abe(user, item, effect) 
    make_damage_popups(user) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: item_user_effect 
  #-------------------------------------------------------------------------- 
  alias game_battler_item_user_effect_abe item_user_effect 
  def item_user_effect(user, item) 
    game_battler_item_user_effect_abe(user, item) 
    @result.restore_damage 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: add_new_state 
  #-------------------------------------------------------------------------- 
  alias game_battler_add_new_state_abe add_new_state 
  def add_new_state(state_id) 
    game_battler_add_new_state_abe(state_id) 
    make_state_popup(state_id, :add_state) if @states.include?(state_id) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: add_buff 
  #-------------------------------------------------------------------------- 
  alias game_battler_add_buff_abe add_buff 
  def add_buff(param_id, turns) 
    make_buff_popup(param_id, true) 
    game_battler_add_buff_abe(param_id, turns) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: add_debuff 
  #-------------------------------------------------------------------------- 
  alias game_battler_add_debuff_abe add_debuff 
  def add_debuff(param_id, turns) 
    make_buff_popup(param_id, false) 
    game_battler_add_debuff_abe(param_id, turns) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: regenerate_all 
  #-------------------------------------------------------------------------- 
  alias game_battler_regenerate_all_abe regenerate_all 
  def regenerate_all 
    game_battler_regenerate_all_abe 
    return unless alive? 
    make_damage_popups(self) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: can_collapse? 
  #-------------------------------------------------------------------------- 
  def can_collapse? 
    return false unless dead? 
    unless actor? 
      return false unless sprite.battler_visible 
      array = [:collapse, :boss_collapse, :instant_collapse] 
      return false if array.include?(sprite.effect_type) 
    end 
    return true 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_mp? 
  #-------------------------------------------------------------------------- 
  def draw_mp?; return true; end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_tp? 
  #-------------------------------------------------------------------------- 
  def draw_tp? 
    return $data_system.opt_display_tp 
  end 
   
end # Game_Battler 
 
#============================================================================== 
# �� Game_Actor 
#============================================================================== 
 
class Game_Actor < Game_Battler 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: perform_damage_effect 
  #-------------------------------------------------------------------------- 
  def perform_damage_effect 
    $game_troop.screen.start_shake(5, 5, 10) if YEA::BATTLE::SCREEN_SHAKE 
    @sprite_effect_type = :blink if YEA::BATTLE::BLINK_EFFECTS 
    Sound.play_actor_damage 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: use_sprite? 
  #-------------------------------------------------------------------------- 
  def use_sprite?; return true; end 
     
  #-------------------------------------------------------------------------- 
  # new method: screen_x 
  #-------------------------------------------------------------------------- 
  def screen_x 
    return 0 unless SceneManager.scene_is?(Scene_Battle) 
    status_window = SceneManager.scene.status_window 
    return 0 if status_window.nil? 
    item_rect_width = (status_window.width-24) / $game_party.max_battle_members 
    ext = SceneManager.scene.info_viewport.ox 
    rect = SceneManager.scene.status_window.item_rect(self.index) 
    constant = 128 + 12 
    return constant + rect.x + item_rect_width / 2 - ext 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: screen_y 
  #-------------------------------------------------------------------------- 
  def screen_y 
    return Graphics.height - 120 unless SceneManager.scene_is?(Scene_Battle) 
    return Graphics.height - 120 if SceneManager.scene.status_window.nil? 
    return Graphics.height - (SceneManager.scene.status_window.height * 7/8) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: screen_z 
  #-------------------------------------------------------------------------- 
  def screen_z; return 100; end 
   
  #-------------------------------------------------------------------------- 
  # new method: sprite 
  #-------------------------------------------------------------------------- 
  def sprite 
    index = $game_party.battle_members.index(self) 
    return SceneManager.scene.spriteset.actor_sprites[index] 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_mp? 
  #-------------------------------------------------------------------------- 
  def draw_mp? 
    return true unless draw_tp? 
    for skill in skills 
      next unless added_skill_types.include?(skill.stype_id) 
      return true if skill.mp_cost > 0 
    end 
    return false 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_tp? 
  #-------------------------------------------------------------------------- 
  def draw_tp? 
    return false unless $data_system.opt_display_tp 
    for skill in skills 
      next unless added_skill_types.include?(skill.stype_id) 
      return true if skill.tp_cost > 0 
    end 
    return false 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: input 
  #-------------------------------------------------------------------------- 
  alias game_actor_input_abe input 
  def input 
    if @actions.nil? 
      make_actions 
      @action_input_index = 0 
    end 
    if @actions[@action_input_index].nil? 
      @actions[@action_input_index] = Game_Action.new(self) 
    end 
    return game_actor_input_abe 
  end 
   
end # Game_Actor 
 
#============================================================================== 
# �� Game_Enemy 
#============================================================================== 
 
class Game_Enemy < Game_Battler 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: perform_damage_effect 
  #-------------------------------------------------------------------------- 
  def perform_damage_effect 
    @sprite_effect_type = :blink if YEA::BATTLE::BLINK_EFFECTS 
    Sound.play_enemy_damage 
  end 
   
  #-------------------------------------------------------------------------- 
  # new methods: attack_animation_id 
  #-------------------------------------------------------------------------- 
  def atk_animation_id1; return enemy.atk_animation_id1; end 
  def atk_animation_id2; return enemy.atk_animation_id2; end 
   
  #-------------------------------------------------------------------------- 
  # new method: sprite 
  #-------------------------------------------------------------------------- 
  def sprite 
    return SceneManager.scene.spriteset.enemy_sprites.reverse[self.index] 
  end 
   
end # Game_Enemy 
 
#============================================================================== 
# �� Game_Unit 
#============================================================================== 
 
class Game_Unit 
   
  #-------------------------------------------------------------------------- 
  # alias method: make_actions 
  #-------------------------------------------------------------------------- 
  alias game_unit_make_actions_abe make_actions 
  def make_actions 
    game_unit_make_actions_abe 
    refresh_autobattler_status_window 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: refresh_autobattler_status_window 
  #-------------------------------------------------------------------------- 
  def refresh_autobattler_status_window 
    return unless SceneManager.scene_is?(Scene_Battle) 
    return unless self.is_a?(Game_Party) 
    SceneManager.scene.refresh_autobattler_status_window 
  end 
   
end # Game_Unit 
 
#============================================================================== 
# �� Window_PartyCommand 
#============================================================================== 
 
class Window_PartyCommand < Window_Command 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: process_handling 
  #-------------------------------------------------------------------------- 
  def process_handling 
    return unless open? && active 
    return process_dir6 if Input.repeat?(:RIGHT) 
    return super 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: process_dir6 
  #-------------------------------------------------------------------------- 
  def process_dir6 
    Sound.play_cursor 
    Input.update 
    deactivate 
    call_handler(:dir6) 
  end 
   
end # Window_PartyCommand 
 
#============================================================================== 
# �� Window_ActorCommand 
#============================================================================== 
 
class Window_ActorCommand < Window_Command 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: process_handling 
  #-------------------------------------------------------------------------- 
  def process_handling 
    return unless open? && active 
    return process_dir4 if Input.repeat?(:LEFT) 
    return process_dir6 if Input.repeat?(:RIGHT) 
    return super 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: process_dir4 
  #-------------------------------------------------------------------------- 
  def process_dir4 
    Sound.play_cursor 
    Input.update 
    deactivate 
    call_handler(:cancel) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: process_dir6 
  #-------------------------------------------------------------------------- 
  def process_dir6 
    Sound.play_cursor 
    Input.update 
    deactivate 
    call_handler(:dir6) 
  end 
   
end # Window_ActorCommand 
 
#============================================================================== 
# �� Window_BattleStatus 
#============================================================================== 
 
class Window_BattleStatus < Window_Selectable 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: initialize 
  #-------------------------------------------------------------------------- 
  def initialize 
    super(0, 0, window_width, window_height) 
    self.openness = 0 
    @party = $game_party.battle_members.clone 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: col_max 
  #-------------------------------------------------------------------------- 
  def col_max; return $game_party.max_battle_members; end 
   
  #-------------------------------------------------------------------------- 
  # new method: battle_members 
  #-------------------------------------------------------------------------- 
  def battle_members; return $game_party.battle_members; end 
   
  #-------------------------------------------------------------------------- 
  # new method: actor 
  #-------------------------------------------------------------------------- 
  def actor; return battle_members[@index]; end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: update 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    return if @party == $game_party.battle_members 
    @party = $game_party.battle_members.clone 
    refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: draw_item 
  #-------------------------------------------------------------------------- 
#~   def draw_item(index) 
#~     return if index.nil? 
#~     clear_item(index) 
#~     actor = battle_members[index] 
#~     rect = item_rect(index) 
#~     return if actor.nil? 
#~     draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?) 
#~     draw_actor_name(actor, rect.x, rect.y, rect.width-8) 
#~     draw_actor_action(actor, rect.x, rect.y) 
#~     draw_actor_icons(actor, rect.x, line_height*1, rect.width) 
#~     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS 
#~     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE 
#~     draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4) 
#~     if draw_tp?(actor) && draw_mp?(actor) 
#~       dw = rect.width/2-2 
#~       dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE 
#~       draw_actor_tp(actor, rect.x+2, line_height*3, dw) 
#~       dw = rect.width - rect.width/2 - 2 
#~       draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw) 
#~     elsif draw_tp?(actor) && !draw_mp?(actor) 
#~       draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4) 
#~     else 
#~       draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4) 
#~     end 
#~   end 
#~    
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: item_rect 
#~   #-------------------------------------------------------------------------- 
#~   def item_rect(index) 
#~     rect = Rect.new 
#~     rect.width = contents.width / $game_party.max_battle_members 
#~     rect.height = contents.height 
#~     rect.x = index * rect.width 
#~     if YEA::BATTLE::BATTLESTATUS_CENTER_FACES 
#~       rect.x += (contents.width - $game_party.members.size * rect.width) / 2 
#~     end 
#~     rect.y = 0 
#~     return rect 
#~   end 
#~    
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: draw_face 
#~   #-------------------------------------------------------------------------- 
#~   def draw_face(face_name, face_index, dx, dy, enabled = true) 
#~     bitmap = Cache.face(face_name) 
#~     fx = [(96 - item_rect(0).width + 1) / 2, 0].max 
#~     fy = face_index / 4 * 96 + 2 
#~     fw = [item_rect(0).width - 4, 92].min 
#~     rect = Rect.new(fx, fy, fw, 92) 
#~     rect = Rect.new(face_index % 4 * 96 + fx, fy, fw, 92) 
#~     contents.blt(dx, dy, bitmap, rect, enabled ? 255 : translucent_alpha) 
#~     bitmap.dispose 
#~   end 
#~    
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: draw_actor_name 
#~   #-------------------------------------------------------------------------- 
#~   def draw_actor_name(actor, dx, dy, dw = 112) 
#~     reset_font_settings 
#~     contents.font.size = YEA::BATTLE::BATTLESTATUS_NAME_FONT_SIZE 
#~     change_color(hp_color(actor)) 
#~     draw_text(dx+24, dy, dw-24, line_height, actor.name) 
#~   end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_actor_action 
  #-------------------------------------------------------------------------- 
  def draw_actor_action(actor, dx, dy) 
    draw_icon(action_icon(actor), dx, dy) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: action_icon 
  #-------------------------------------------------------------------------- 
  def action_icon(actor) 
    return Icon.no_action if actor.current_action.nil? 
    return Icon.no_action if actor.current_action.item.nil? 
    return actor.current_action.item.icon_index 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_tp? 
  #-------------------------------------------------------------------------- 
  def draw_tp?(actor) 
    return actor.draw_tp? 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: draw_mp? 
  #-------------------------------------------------------------------------- 
  def draw_mp?(actor) 
    return actor.draw_mp? 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: draw_current_and_max_values 
  #-------------------------------------------------------------------------- 
#~   def draw_current_and_max_values(dx, dy, dw, current, max, color1, color2) 
#~     change_color(color1) 
#~     draw_text(dx, dy, dw, line_height, current.group, 2) 
#~   end 
#~    
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: draw_actor_hp 
#~   #-------------------------------------------------------------------------- 
#~   def draw_actor_hp(actor, dx, dy, width = 124) 
#~     draw_gauge(dx, dy, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2) 
#~     change_color(system_color) 
#~     cy = (Font.default_size - contents.font.size) / 2 + 1 
#~     draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a) 
#~     draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp, 
#~       hp_color(actor), normal_color) 
#~     end 
#~      
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: draw_actor_mp 
#~   #-------------------------------------------------------------------------- 
#~   def draw_actor_mp(actor, dx, dy, width = 124) 
#~     draw_gauge(dx, dy, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2) 
#~     change_color(system_color) 
#~     cy = (Font.default_size - contents.font.size) / 2 + 1 
#~     draw_text(dx+2, dy+cy, 30, line_height, Vocab::mp_a) 
#~     draw_current_and_max_values(dx, dy+cy, width, actor.mp, actor.mmp, 
#~       mp_color(actor), normal_color) 
#~     end 
#~      
#~   #-------------------------------------------------------------------------- 
#~   # overwrite method: draw_actor_tp 
#~   #-------------------------------------------------------------------------- 
#~   def draw_actor_tp(actor, dx, dy, width = 124) 
#~     draw_gauge(dx, dy, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2) 
#~     change_color(system_color) 
#~     cy = (Font.default_size - contents.font.size) / 2 + 1 
#~     draw_text(dx+2, dy+cy, 30, line_height, Vocab::tp_a) 
#~     change_color(tp_color(actor)) 
#~     draw_text(dx + width - 42, dy+cy, 42, line_height, actor.tp.to_i, 2) 
#~   end 
   
end # Window_BattleStatus 
 
#============================================================================== 
# �� Window_BattleActor 
#============================================================================== 
 
class Window_BattleActor < Window_BattleStatus 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: show 
  #-------------------------------------------------------------------------- 
  def show 
    create_flags 
    super 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: create_flags 
  #-------------------------------------------------------------------------- 
  def create_flags 
    set_select_flag(:any) 
    select(0) 
    return if $game_temp.battle_aid.nil? 
    if $game_temp.battle_aid.need_selection? 
      select(0) 
      set_select_flag(:dead) if $game_temp.battle_aid.for_dead_friend? 
    elsif $game_temp.battle_aid.for_user? 
      battler = BattleManager.actor 
      id = battler.nil? ? 0 : $game_party.battle_members.index(battler) 
      select(id) 
      set_select_flag(:user) 
    elsif $game_temp.battle_aid.for_all? 
      select(0) 
      set_select_flag(:all) 
      set_select_flag(:all_dead) if $game_temp.battle_aid.for_dead_friend? 
    elsif $game_temp.battle_aid.for_random? 
      select(0) 
      set_select_flag(:random) if $game_temp.battle_aid.for_random? 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: set_flag 
  #-------------------------------------------------------------------------- 
  def set_select_flag(flag) 
    @select_flag = flag 
    case @select_flag 
    when :all, :all_dead, :random 
      @cursor_all = true 
    else 
      @cursor_all = false 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: update_cursor 
  #-------------------------------------------------------------------------- 
  def update_cursor 
    if @cursor_all 
      cursor_rect.set(0, 0, contents.width, contents.height) 
      self.top_row = 0 
    elsif @index < 0 
      cursor_rect.empty 
    else 
      ensure_cursor_visible 
      cursor_rect.set(item_rect(@index)) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: cursor_movable? 
  #-------------------------------------------------------------------------- 
  def cursor_movable? 
    return false if @select_flag == :user 
    return super 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: current_item_enabled? 
  #-------------------------------------------------------------------------- 
  def current_item_enabled? 
    return true if $game_temp.battle_aid.nil? 
    if $game_temp.battle_aid.need_selection? 
      member = $game_party.battle_members[@index] 
      return member.dead? if $game_temp.battle_aid.for_dead_friend? 
    elsif $game_temp.battle_aid.for_dead_friend? 
      for member in $game_party.battle_members 
        return true if member.dead? 
      end 
      return false 
    end 
    return true 
  end 
   
end # Window_BattleActor 
 
#============================================================================== 
# �� Window_BattleStatusAid 
#============================================================================== 
 
class Window_BattleStatusAid < Window_BattleStatus 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :status_window 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: initialize 
  #-------------------------------------------------------------------------- 
  def initialize 
    super 
    self.visible = false 
    self.openness = 255 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: window_width 
  #-------------------------------------------------------------------------- 
  def window_width; return 128; end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: show 
  #-------------------------------------------------------------------------- 
  def show 
    super 
    refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: refresh 
  #-------------------------------------------------------------------------- 
  def refresh 
    contents.clear 
    return if @status_window.nil? 
    draw_item(@status_window.index) 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: item_rect 
  #-------------------------------------------------------------------------- 
  def item_rect(index) 
    return Rect.new(0, 0, contents.width, contents.height) 
  end 
   
end # Window_BattleStatusAid 
 
#============================================================================== 
# �� Window_BattleEnemy 
#============================================================================== 
 
class Window_BattleEnemy < Window_Selectable 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: initialize 
  #-------------------------------------------------------------------------- 
  def initialize(info_viewport) 
    super(0, Graphics.height, window_width, fitting_height(1)) 
    refresh 
    self.visible = false 
    @info_viewport = info_viewport 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: col_max 
  #-------------------------------------------------------------------------- 
  def col_max; return item_max; end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: show 
  #-------------------------------------------------------------------------- 
  def show 
    create_flags 
    super 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: create_flags 
  #-------------------------------------------------------------------------- 
  def create_flags 
    set_select_flag(:any) 
    select(0) 
    return if $game_temp.battle_aid.nil? 
    if $game_temp.battle_aid.need_selection? 
      select(0) 
    elsif $game_temp.battle_aid.for_all? 
      select(0) 
      set_select_flag(:all) 
    elsif $game_temp.battle_aid.for_random? 
      select(0) 
      set_select_flag(:random) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: set_flag 
  #-------------------------------------------------------------------------- 
  def set_select_flag(flag) 
    @select_flag = flag 
    case @select_flag 
    when :all, :random 
      @cursor_all = true 
    else 
      @cursor_all = false 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: select_all? 
  #-------------------------------------------------------------------------- 
  def select_all? 
    return true if @select_flag == :all 
    return true if @select_flag == :random 
    return false 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: update_cursor 
  #-------------------------------------------------------------------------- 
  def update_cursor 
    if @cursor_all 
      cursor_rect.set(0, 0, contents.width, contents.height) 
      self.top_row = 0 
    elsif @index < 0 
      cursor_rect.empty 
    else 
      ensure_cursor_visible 
      cursor_rect.set(item_rect(@index)) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: cursor_movable? 
  #-------------------------------------------------------------------------- 
  def cursor_movable? 
    return false if @select_flag == :user 
    return super 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: current_item_enabled? 
  #-------------------------------------------------------------------------- 
  def current_item_enabled? 
    return true if $game_temp.battle_aid.nil? 
    if $game_temp.battle_aid.need_selection? 
      member = $game_party.battle_members[@index] 
      return member.dead? if $game_temp.battle_aid.for_dead_friend? 
    elsif $game_temp.battle_aid.for_dead_friend? 
      for member in $game_party.battle_members 
        return true if member.dead? 
      end 
      return false 
    end 
    return true 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: enemy 
  #-------------------------------------------------------------------------- 
  def enemy; @data[index]; end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: refresh 
  #-------------------------------------------------------------------------- 
  def refresh 
    make_item_list 
    create_contents 
    draw_all_items 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: make_item_list 
  #-------------------------------------------------------------------------- 
  def make_item_list 
    @data = $game_troop.alive_members 
    @data.sort! { |a,b| a.screen_x <=> b.screen_x } 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: draw_item 
  #-------------------------------------------------------------------------- 
  def draw_item(index); return; end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: update 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    return unless active 
    enemy.sprite_effect_type = :whiten 
    return unless select_all? 
    for enemy in $game_troop.alive_members 
      enemy.sprite_effect_type = :whiten 
    end 
  end 
   
end # Window_BattleEnemy 
 
#============================================================================== 
# �� Window_BattleHelp 
#============================================================================== 
 
class Window_BattleHelp < Window_Help 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :actor_window 
  attr_accessor :enemy_window 
   
  #-------------------------------------------------------------------------- 
  # update 
  #-------------------------------------------------------------------------- 
  def update 
    super 
    if !self.visible and @text != "" 
      @text = "" 
      return refresh 
    end 
    update_battler_name 
  end 
   
  #-------------------------------------------------------------------------- 
  # update_battler_name 
  #-------------------------------------------------------------------------- 
  def update_battler_name 
    return unless @actor_window.active || @enemy_window.active 
    if @actor_window.active 
      battler = $game_party.battle_members[@actor_window.index] 
    elsif @enemy_window.active 
      battler = @enemy_window.enemy 
    end 
    if special_display? 
      refresh_special_case(battler) 
    else 
      refresh_battler_name(battler) if battler_name(battler) != @text 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # battler_name 
  #-------------------------------------------------------------------------- 
  def battler_name(battler) 
    text = battler.name.clone 
    return text 
  end 
   
  #-------------------------------------------------------------------------- 
  # refresh_battler_name 
  #-------------------------------------------------------------------------- 
  def refresh_battler_name(battler) 
    contents.clear 
    reset_font_settings 
    change_color(normal_color) 
    @text = battler_name(battler) 
    icons = battler.state_icons + battler.buff_icons 
    dy = icons.size <= 0 ? line_height / 2 : 0 
    draw_text(0, dy, contents.width, line_height, @text, 1) 
    dx = (contents.width - (icons.size * 24)) / 2 
    draw_actor_icons(battler, dx, line_height, contents.width) 
  end 
   
  #-------------------------------------------------------------------------- 
  # special_display? 
  #-------------------------------------------------------------------------- 
  def special_display? 
    return false if $game_temp.battle_aid.nil? 
    return false if $game_temp.battle_aid.for_user? 
    return !$game_temp.battle_aid.need_selection? 
  end 
   
  #-------------------------------------------------------------------------- 
  # refresh_special_case 
  #-------------------------------------------------------------------------- 
  def refresh_special_case(battler) 
    if $game_temp.battle_aid.for_opponent? 
      if $game_temp.battle_aid.for_all? 
        text = YEA::BATTLE::HELP_TEXT_ALL_FOES 
      else 
        case $game_temp.battle_aid.number_of_targets 
        when 1 
          text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_FOE 
        else 
          number = $game_temp.battle_aid.number_of_targets 
          text = sprintf(YEA::BATTLE::HELP_TEXT_MANY_RANDOM_FOE, number) 
        end 
      end 
    else # $game_temp.battle_aid.for_friend? 
      if $game_temp.battle_aid.for_dead_friend? 
        text = YEA::BATTLE::HELP_TEXT_ALL_DEAD_ALLIES 
      elsif $game_temp.battle_aid.for_random? 
        case $game_temp.battle_aid.number_of_targets 
        when 1 
          text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_ALLY 
        else 
          number = $game_temp.battle_aid.number_of_targets 
          text = sprintf(YEA::BATTLE::HELP_TEXT_RANDOM_ALLIES, number) 
        end 
      else 
        text = YEA::BATTLE::HELP_TEXT_ALL_ALLIES 
      end 
    end 
    return if text == @text 
    @text = text 
    contents.clear 
    reset_font_settings 
    draw_text(0, 0, contents.width, line_height*2, @text, 1) 
  end 
   
end # Window_BattleHelp 
 
#============================================================================== 
# �� Window_BattleLog 
#============================================================================== 
 
class Window_BattleLog < Window_Selectable 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_current_state 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_current_state_abe display_current_state 
  def display_current_state(subject) 
    subject.make_during_state_popup 
    return unless YEA::BATTLE::MSG_CURRENT_STATE 
    window_battlelog_display_current_state_abe(subject) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_use_item 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_use_item_abe display_use_item 
  def display_use_item(subject, item) 
    return unless YEA::BATTLE::MSG_CURRENT_ACTION 
    window_battlelog_display_use_item_abe(subject, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_counter 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_counter_abe display_counter 
  def display_counter(target, item) 
    if YEA::BATTLE::MSG_COUNTERATTACK 
      window_battlelog_display_counter_abe(target, item) 
    else 
      Sound.play_evasion 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_reflection 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_reflection_abe display_reflection 
  def display_reflection(target, item) 
    if YEA::BATTLE::MSG_REFLECT_MAGIC 
      window_battlelog_display_reflection_abe(target, item) 
    else 
      Sound.play_reflection 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_substitute 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_substitute_abe display_substitute 
  def display_substitute(substitute, target) 
    return unless YEA::BATTLE::MSG_SUBSTITUTE_HIT 
    window_battlelog_display_substitute_abe(substitute, target) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_failure 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_failure_abe display_failure 
  def display_failure(target, item) 
    return unless YEA::BATTLE::MSG_FAILURE_HIT 
    window_battlelog_display_failure_abe(target, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_critical 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_critical_abe display_critical 
  def display_critical(target, item) 
    return unless YEA::BATTLE::MSG_CRITICAL_HIT 
    window_battlelog_display_critical_abe(target, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_miss 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_miss_abe display_miss 
  def display_miss(target, item) 
    return unless YEA::BATTLE::MSG_HIT_MISSED 
    window_battlelog_display_miss_abe(target, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_evasion 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_evasion_abe display_evasion 
  def display_evasion(target, item) 
    if YEA::BATTLE::MSG_EVASION 
      window_battlelog_display_evasion_abe(target, item) 
    else 
      if !item || item.physical? 
        Sound.play_evasion 
      else 
        Sound.play_magic_evasion 
      end 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: display_hp_damage 
  #-------------------------------------------------------------------------- 
  def display_hp_damage(target, item) 
    return if target.result.hp_damage == 0 && item && !item.damage.to_hp? 
    if target.result.hp_damage > 0 && target.result.hp_drain == 0 
      target.perform_damage_effect 
    end 
    Sound.play_recovery if target.result.hp_damage < 0 
    return unless YEA::BATTLE::MSG_HP_DAMAGE 
    add_text(target.result.hp_damage_text) 
    wait 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: display_mp_damage 
  #-------------------------------------------------------------------------- 
  def display_mp_damage(target, item) 
    return if target.dead? || target.result.mp_damage == 0 
    Sound.play_recovery if target.result.mp_damage < 0 
    return unless YEA::BATTLE::MSG_MP_DAMAGE 
    add_text(target.result.mp_damage_text) 
    wait 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: display_tp_damage 
  #-------------------------------------------------------------------------- 
  def display_tp_damage(target, item) 
    return if target.dead? || target.result.tp_damage == 0 
    Sound.play_recovery if target.result.tp_damage < 0 
    return unless YEA::BATTLE::MSG_TP_DAMAGE 
    add_text(target.result.tp_damage_text) 
    wait 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_added_states 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_added_states_abe display_added_states 
  def display_added_states(target) 
    return unless YEA::BATTLE::MSG_ADDED_STATES 
    window_battlelog_display_added_states_abe(target) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_removed_states 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_removed_states_abe display_removed_states 
  def display_removed_states(target) 
    return unless YEA::BATTLE::MSG_REMOVED_STATES 
    window_battlelog_display_removed_states_abe(target) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: display_changed_buffs 
  #-------------------------------------------------------------------------- 
  alias window_battlelog_display_changed_buffs_abe display_changed_buffs 
  def display_changed_buffs(target) 
    return unless YEA::BATTLE::MSG_CHANGED_BUFFS 
    window_battlelog_display_changed_buffs_abe(target) 
  end 
   
end # Window_BattleLog 
 
#============================================================================== 
# �� Window_SkillList 
#============================================================================== 
 
class Window_SkillList < Window_Selectable 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: spacing 
  #-------------------------------------------------------------------------- 
  def spacing 
    return 8 if $game_party.in_battle 
    return super 
  end 
   
end # Window_SkillList 
 
#============================================================================== 
# �� Window_ItemList 
#============================================================================== 
 
class Window_ItemList < Window_Selectable 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: spacing 
  #-------------------------------------------------------------------------- 
  def spacing 
    return 8 if $game_party.in_battle 
    return super 
  end 
   
end # Window_ItemList 
 
#============================================================================== 
# �� Scene_Battle 
#============================================================================== 
 
class Scene_Battle < Scene_Base 
   
  #-------------------------------------------------------------------------- 
  # public instance variables 
  #-------------------------------------------------------------------------- 
  attr_accessor :enemy_window 
  attr_accessor :info_viewport 
  attr_accessor :spriteset 
  attr_accessor :status_window 
  attr_accessor :status_aid_window 
  attr_accessor :subject 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_spriteset 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_spriteset_abe create_spriteset 
  def create_spriteset 
    BattleManager.init_battle_type 
    scene_battle_create_spriteset_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: update_basic 
  #-------------------------------------------------------------------------- 
  alias scene_battle_update_basic_abe update_basic 
  def update_basic 
    scene_battle_update_basic_abe 
    update_debug 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: update_debug 
  #-------------------------------------------------------------------------- 
  def update_debug 
    return unless $TEST || $BTEST 
    debug_heal_party if Input.trigger?(:F5) 
    debug_damage_party if Input.trigger?(:F6) 
    debug_fill_tp if Input.trigger?(:F7) 
    debug_kill_all if Input.trigger?(:F8) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: debug_heal_party 
  #-------------------------------------------------------------------------- 
  def debug_heal_party 
    Sound.play_recovery 
    for member in $game_party.battle_members 
      member.recover_all 
    end 
    @status_window.refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: debug_damage_party 
  #-------------------------------------------------------------------------- 
  def debug_damage_party 
    Sound.play_actor_damage 
    for member in $game_party.alive_members 
      member.hp = 1 
      member.mp = 0 
      member.tp = 0 
    end 
    @status_window.refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: debug_fill_tp 
  #-------------------------------------------------------------------------- 
  def debug_fill_tp 
    Sound.play_recovery 
    for member in $game_party.alive_members 
      member.tp = member.max_tp 
    end 
    @status_window.refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: debug_kill_all 
  #-------------------------------------------------------------------------- 
  def debug_kill_all 
    for enemy in $game_troop.alive_members 
      enemy.hp = 0 
      enemy.perform_collapse_effect 
    end 
    BattleManager.judge_win_loss 
    @log_window.wait 
    @log_window.wait_for_effect 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_all_windows 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_all_windows_abe create_all_windows 
  def create_all_windows 
    scene_battle_create_all_windows_abe 
    create_battle_status_aid_window 
    set_help_window 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_info_viewport 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_info_viewport_abe create_info_viewport 
  def create_info_viewport 
    scene_battle_create_info_viewport_abe 
    @status_window.refresh 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: create_battle_status_aid_window 
  #-------------------------------------------------------------------------- 
  def create_battle_status_aid_window 
    @status_aid_window = Window_BattleStatusAid.new 
    @status_aid_window.status_window = @status_window 
    @status_aid_window.width = 130 
    @status_aid_window.x = Graphics.width - @status_aid_window.width 
    @status_aid_window.y = Graphics.height - @status_aid_window.height 
 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: create_help_window 
  #-------------------------------------------------------------------------- 
  def create_help_window 
    @help_window = Window_BattleHelp.new 
    @help_window.hide 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: set_help_window 
  #-------------------------------------------------------------------------- 
  def set_help_window 
    @help_window.actor_window = @actor_window 
    @help_window.enemy_window = @enemy_window 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_party_command_window 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_party_command_window_abe create_party_command_window 
  def create_party_command_window 
    scene_battle_create_party_command_window_abe 
    @party_command_window.set_handler(:dir6, method(:command_fight)) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_actor_command_window 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_actor_command_window_abe create_actor_command_window 
  def create_actor_command_window 
    scene_battle_create_actor_command_window_abe 
    @actor_command_window.set_handler(:dir4, method(:prior_command)) 
    @actor_command_window.set_handler(:dir6, method(:next_command)) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_skill_window 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_skill_window_abe create_skill_window 
  def create_skill_window 
    scene_battle_create_skill_window_abe 
    @skill_window.height = @info_viewport.rect.height 
    @skill_window.width = Graphics.width - @actor_command_window.width 
    @skill_window.y = Graphics.height - @skill_window.height 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: create_item_window 
  #-------------------------------------------------------------------------- 
  alias scene_battle_create_item_window_abe create_item_window 
  def create_item_window 
    scene_battle_create_item_window_abe 
    @item_window.height = @skill_window.height 
    @item_window.width = @skill_window.width 
    @item_window.y = Graphics.height - @item_window.height 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: show_fast? 
  #-------------------------------------------------------------------------- 
  alias scene_battle_show_fast_abe show_fast? 
  def show_fast? 
    return true if YEA::BATTLE::AUTO_FAST 
    return scene_battle_show_fast_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: next_command 
  #-------------------------------------------------------------------------- 
  alias scene_battle_next_command_abe next_command 
  def next_command 
    @status_window.show 
    redraw_current_status 
    @actor_command_window.show 
    @status_aid_window.hide 
    scene_battle_next_command_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: prior_command 
  #-------------------------------------------------------------------------- 
  alias scene_battle_prior_command_abe prior_command 
  def prior_command 
    redraw_current_status 
    scene_battle_prior_command_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: redraw_current_status 
  #-------------------------------------------------------------------------- 
  def redraw_current_status 
    return if @status_window.index < 0 
    @status_window.draw_item(@status_window.index) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: command_attack 
  #-------------------------------------------------------------------------- 
  alias scene_battle_command_attack_abe command_attack 
  def command_attack 
    $game_temp.battle_aid = $data_skills[BattleManager.actor.attack_skill_id] 
    scene_battle_command_attack_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: command_skill 
  #-------------------------------------------------------------------------- 
  alias scene_battle_command_skill_abe command_skill 
  def command_skill 
    scene_battle_command_skill_abe 
    @status_window.hide 
    @actor_command_window.hide 
    @status_aid_window.show 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: command_item 
  #-------------------------------------------------------------------------- 
  alias scene_battle_command_item_abe command_item 
  def command_item 
    scene_battle_command_item_abe 
    @status_window.hide 
    @actor_command_window.hide 
    @status_aid_window.show 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: on_skill_ok 
  #-------------------------------------------------------------------------- 
  def on_skill_ok 
    @skill = @skill_window.item 
    $game_temp.battle_aid = @skill 
    BattleManager.actor.input.set_skill(@skill.id) 
    BattleManager.actor.last_skill.object = @skill 
    if @skill.for_opponent? 
      select_enemy_selection 
    elsif @skill.for_friend? 
      select_actor_selection 
    else 
      @skill_window.hide 
      next_command 
      $game_temp.battle_aid = nil 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_skill_cancel 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_skill_cancel_abe on_skill_cancel 
  def on_skill_cancel 
    scene_battle_on_skill_cancel_abe 
    @status_window.show 
    @actor_command_window.show 
    @status_aid_window.hide 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: on_item_ok 
  #-------------------------------------------------------------------------- 
  def on_item_ok 
    @item = @item_window.item 
    $game_temp.battle_aid = @item 
    BattleManager.actor.input.set_item(@item.id) 
    if @item.for_opponent? 
      select_enemy_selection 
    elsif @item.for_friend? 
      select_actor_selection 
    else 
      @item_window.hide 
      next_command 
      $game_temp.battle_aid = nil 
    end 
    $game_party.last_item.object = @item 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_item_cancel 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_item_cancel_abe on_item_cancel 
  def on_item_cancel 
    scene_battle_on_item_cancel_abe 
    @status_window.show 
    @actor_command_window.show 
    @status_aid_window.hide 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: select_actor_selection 
  #-------------------------------------------------------------------------- 
  alias scene_battle_select_actor_selection_abe select_actor_selection 
  def select_actor_selection 
    @status_aid_window.refresh 
    scene_battle_select_actor_selection_abe 
    @status_window.hide 
    @skill_window.hide 
    @item_window.hide 
    @help_window.show 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_actor_ok 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_actor_ok_abe on_actor_ok 
  def on_actor_ok 
    $game_temp.battle_aid = nil 
    scene_battle_on_actor_ok_abe 
    @status_window.show 
    if $imported["YEA-BattleCommandList"] && !@confirm_command_window.nil? 
      @actor_command_window.visible = !@confirm_command_window.visible 
    else 
      @actor_command_window.show 
    end 
    @status_aid_window.hide 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_actor_cancel 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_actor_cancel_abe on_actor_cancel 
  def on_actor_cancel 
    BattleManager.actor.input.clear 
    @status_aid_window.refresh 
    $game_temp.battle_aid = nil 
    scene_battle_on_actor_cancel_abe 
    case @actor_command_window.current_symbol 
    when :skill 
      @skill_window.show 
    when :item 
      @item_window.show 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: select_enemy_selection 
  #-------------------------------------------------------------------------- 
  alias scene_battle_select_enemy_selection_abe select_enemy_selection 
  def select_enemy_selection 
    @status_aid_window.refresh 
    scene_battle_select_enemy_selection_abe 
    @help_window.show 
  end 
  #-------------------------------------------------------------------------- 
  # alias method: on_enemy_ok 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_enemy_ok_abe on_enemy_ok 
  def on_enemy_ok 
    $game_temp.battle_aid = nil 
    scene_battle_on_enemy_ok_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: on_enemy_cancel 
  #-------------------------------------------------------------------------- 
  alias scene_battle_on_enemy_cancel_abe on_enemy_cancel 
  def on_enemy_cancel 
    BattleManager.actor.input.clear 
    @status_aid_window.refresh 
    $game_temp.battle_aid = nil 
    scene_battle_on_enemy_cancel_abe 
    if @skill_window.visible || @item_window.visible 
      @help_window.show 
    else 
      @help_window.hide 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: battle_start 
  #-------------------------------------------------------------------------- 
  alias scene_battle_battle_start_abe battle_start 
  def battle_start 
    scene_battle_battle_start_abe 
    return unless YEA::BATTLE::SKIP_PARTY_COMMAND 
    @party_command_window.deactivate 
    if BattleManager.input_start 
      command_fight  
    else 
      turn_start 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: turn_end 
  #-------------------------------------------------------------------------- 
  def turn_end 
    all_battle_members.each do |battler| 
      battler.on_turn_end 
      status_redraw_target(battler) 
      @log_window.display_auto_affected_status(battler) 
      @log_window.wait_and_clear 
    end 
    update_party_cooldowns if $imported["YEA-CommandParty"] 
    BattleManager.turn_end 
    process_event 
    start_party_command_selection 
    return if end_battle_conditions? 
    return unless YEA::BATTLE::SKIP_PARTY_COMMAND 
    if BattleManager.input_start 
      @party_command_window.deactivate 
      command_fight 
    else 
      @party_command_window.deactivate 
      turn_start 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: end_battle_conditions? 
  #-------------------------------------------------------------------------- 
  def end_battle_conditions? 
    return true if $game_party.members.empty? 
    return true if $game_party.all_dead? 
    return true if $game_troop.all_dead? 
    return true if BattleManager.aborting? 
    return false 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: execute_action 
  #-------------------------------------------------------------------------- 
  def execute_action 
    @subject.sprite_effect_type = :whiten if YEA::BATTLE::FLASH_WHITE_EFFECT 
    use_item 
    @log_window.wait_and_clear 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: apply_item_effects 
  #-------------------------------------------------------------------------- 
  def apply_item_effects(target, item) 
    if $imported["YEA-LunaticObjects"] 
      lunatic_object_effect(:prepare, item, @subject, target) 
    end 
    target.item_apply(@subject, item) 
    status_redraw_target(@subject) 
    status_redraw_target(target) unless target == @subject 
    @log_window.display_action_results(target, item) 
    if $imported["YEA-LunaticObjects"] 
      lunatic_object_effect(:during, item, @subject, target) 
    end 
    perform_collapse_check(target) 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwite method: invoke_counter_attack 
  #-------------------------------------------------------------------------- 
  def invoke_counter_attack(target, item) 
    @log_window.display_counter(target, item) 
    attack_skill = $data_skills[target.attack_skill_id] 
    @subject.item_apply(target, attack_skill) 
    status_redraw_target(@subject) 
    status_redraw_target(target) unless target == @subject 
    @log_window.display_action_results(@subject, attack_skill) 
    perform_collapse_check(target) 
    perform_collapse_check(@subject) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: perform_collapse_check 
  #-------------------------------------------------------------------------- 
  def perform_collapse_check(target) 
    return if YEA::BATTLE::MSG_ADDED_STATES 
    target.perform_collapse_effect if target.can_collapse? 
    @log_window.wait 
    @log_window.wait_for_effect 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: show_attack_animation 
  #-------------------------------------------------------------------------- 
  def show_attack_animation(targets) 
    show_normal_animation(targets, @subject.atk_animation_id1, false) 
    wait_for_animation 
    show_normal_animation(targets, @subject.atk_animation_id2, true) 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: show_normal_animation 
  #-------------------------------------------------------------------------- 
  def show_normal_animation(targets, animation_id, mirror = false) 
    animation = $data_animations[animation_id] 
    return if animation.nil? 
    ani_check = false 
    targets.each do |target| 
      if ani_check && target.animation_id <= 0 
        target.pseudo_ani_id = animation_id 
      else 
        target.animation_id = animation_id 
      end 
      target.animation_mirror = mirror 
      ani_check = true if animation.to_screen? 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: process_action_end 
  #-------------------------------------------------------------------------- 
  def process_action_end 
    @subject.on_action_end 
    status_redraw_target(@subject) 
    @log_window.display_auto_affected_status(@subject) 
    @log_window.wait_and_clear 
    @log_window.display_current_state(@subject) 
    @log_window.wait_and_clear 
    BattleManager.judge_win_loss 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: use_item 
  #-------------------------------------------------------------------------- 
  def use_item 
    item = @subject.current_action.item 
    @log_window.display_use_item(@subject, item) 
    @subject.use_item(item) 
    status_redraw_target(@subject) 
    if $imported["YEA-LunaticObjects"] 
      lunatic_object_effect(:before, item, @subject, @subject) 
    end 
    process_casting_animation if $imported["YEA-CastAnimations"] 
    targets = @subject.current_action.make_targets.compact rescue [] 
    show_animation(targets, item.animation_id) if show_all_animation?(item) 
    targets.each {|target|  
      if $imported["YEA-TargetManager"] 
        target = alive_random_target(target, item) if item.for_random? 
      end 
      item.repeats.times { invoke_item(target, item) } } 
    if $imported["YEA-LunaticObjects"] 
      lunatic_object_effect(:after, item, @subject, @subject) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: invoke_item 
  #-------------------------------------------------------------------------- 
  alias scene_battle_invoke_item_abe invoke_item 
  def invoke_item(target, item) 
    show_animation([target], item.animation_id) if separate_ani?(target, item) 
    if target.dead? != item.for_dead_friend? 
      @subject.last_target_index = target.index 
      return 
    end 
    scene_battle_invoke_item_abe(target, item) 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: show_all_animation? 
  #-------------------------------------------------------------------------- 
  def show_all_animation?(item) 
    return true if item.one_animation 
    return false if $data_animations[item.animation_id].nil? 
    return false unless $data_animations[item.animation_id].to_screen? 
    return true 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: separate_ani? 
  #-------------------------------------------------------------------------- 
  def separate_ani?(target, item) 
    return false if item.one_animation 
    return false if $data_animations[item.animation_id].nil? 
    return false if $data_animations[item.animation_id].to_screen? 
    return target.dead? == item.for_dead_friend? 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: status_redraw_target 
  #-------------------------------------------------------------------------- 
  def status_redraw_target(target) 
    return unless target.actor? 
    @status_window.draw_item($game_party.battle_members.index(target)) 
  end 
   
  #-------------------------------------------------------------------------- 
  # alias method: start_party_command_selection 
  #-------------------------------------------------------------------------- 
  alias start_party_command_selection_abe start_party_command_selection 
  def start_party_command_selection 
    @status_window.refresh unless scene_changing? 
    start_party_command_selection_abe 
  end 
   
  #-------------------------------------------------------------------------- 
  # overwrite method: refresh_status 
  #-------------------------------------------------------------------------- 
  def refresh_status; return; end 
   
  #-------------------------------------------------------------------------- 
  # new method: refresh_autobattler_status_window 
  #-------------------------------------------------------------------------- 
  def refresh_autobattler_status_window 
    for member in $game_party.battle_members 
      next unless member.auto_battle? 
      @status_window.draw_item(member.index) 
    end 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: hide_extra_gauges 
  #-------------------------------------------------------------------------- 
  def hide_extra_gauges 
    # Made for compatibility 
  end 
   
  #-------------------------------------------------------------------------- 
  # new method: show_extra_gauges 
  #-------------------------------------------------------------------------- 
  def show_extra_gauges 
    # Made for compatibility 
  end 
   
end # Scene_Battle 
 
#============================================================================== 
#  
# �� End of File 
#  
#==============================================================================  
 
请问各位先辈了。应该是这两个的冲突吧…如果不是的话真是十分抱歉。  |   
 
 
 
 |