设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2309|回复: 2
打印 上一主题 下一主题

[已经解决] ATB战斗系统脚本的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
155
在线时间
32 小时
注册时间
2015-4-24
帖子
23
跳转到指定楼层
1
发表于 2017-6-10 18:36:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 水晶飞风 于 2017-6-10 18:36 编辑

首先这个是一个兼容 Yanfly Engine Ace - Ace Battle Engine v1.22 ATB战斗系统

一个问题脚本,作者在做这个脚本时没考虑到一下事情

1.角色通过怪物的攻击触发了物理反击
2.物理反击将怪物致死了。

在经过这些事情后会弹出这个窗口

脚本 "ATB战斗系统" 第462行: 发生 NoMethodError。
undefined method 'stamina_cost' for Nil:Class

已近单独拿出来测试过应该不是脚本冲突问题(单独是指,这个脚本外加 yanfly的战斗引擎)
拜托各位了_(:зゝ∠)_


这个是出现问题的部分

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● New Method on_turn_end
  3.   #--------------------------------------------------------------------------
  4.   def stamina_loss
  5.     if self.actor?
  6.       @stamina -= input.stamina_cost
  7.     else
  8. #这里是报错的部分
  9.       @stamina -= @actions[0].stamina_cost
  10.     end
  11.     BattleManager.add_action
  12.   end
  13. end



这个是整个脚本

RUBY 代码复制
  1. =begin
  2. YanFly Compatible Customisable ATB/Stamina Based Battle System Script
  3. by Fomar0153
  4. Version 1.2
  5. ----------------------
  6. Notes
  7. ----------------------
  8. Requires Yanfly Engine Ace - Ace Battle Engine
  9. Customises the battle system to be similar to
  10. ATB or Stamina based battle systems.
  11. ----------------------
  12. Instructions
  13. ----------------------
  14. Edit variables in CBS to suit your needs.
  15. The guard status should be set to 2~2 turns.
  16. ----------------------
  17. Change Log
  18. ----------------------
  19. 1.0 -> 1.1 Added CTB related options
  20.            Added the ability to pass a turn
  21.            Added options for turn functionality to be based on time
  22.            or number of actions
  23.            Added the ability to change the bar colours based on states
  24. 1.1 -> 1.2 Fixed a bug when escaping using CTB mode
  25. ----------------------
  26. Known bugs
  27. ----------------------
  28. None
  29. =end
  30.  
  31. $imported = {} if $imported.nil?
  32. $imported["Fomar0153-CBS"] = true
  33.  
  34. module CBS
  35.  
  36.   MAX_STAMINA = 1000
  37.   RESET_STAMINA = true
  38.  
  39.   # If ATB is set to false then the bars won't appear and
  40.   # the pauses where the bars would be filling up are removed
  41.   # effectively turning this into a CTB system
  42.   ATB = true
  43.   SAMINA_GAUGE_NAME = "ATB"
  44.   ENABLE_PASSING = true
  45.   PASSING_COST = 200
  46.  
  47.   # If TURN_LENGTH is set to 0 then a turn length will be
  48.   # decided on number of actions
  49.   # TURN_LENGTH is number of seconds per turn
  50.   TURN_LENGTH = 4
  51.  
  52.   ESCAPE_COST = 500
  53.   # If reset stamina is set to true then all characters
  54.   # will start with a random amount of stamina capped at
  55.   # the percentage you set.
  56.   # If reset stamina is set to false then this just
  57.   # affects enemies.
  58.   STAMINA_START_PERCENT = 20
  59.  
  60.   # Default skill cost
  61.   # If you want to customise skill costs do it like this
  62.   # SKILL_COST[skill_id] = cost
  63.   SKILL_COST = []
  64.   SKILL_COST[0] = 1000
  65.   # Attack
  66.   SKILL_COST[1] = 500
  67.   # Guard
  68.   SKILL_COST[2] = 500
  69.   SKILL_COST[80] = 500
  70.   SKILL_COST[82] = 0
  71.   ITEM_COST = 1000
  72.  
  73.   #---------速度惩罚状态!
  74.   # If you prefer to have states handle agility buffs then set STATES_HANDLE_AGI to true
  75.   STATES_HANDLE_AGI = false
  76.   # In the following section mult means the amount you multiply stamina gains by
  77.   # if STATES_HANDLE_AGI is set to true then it is only used to determine bar color
  78.   # with debuffs taking precedence over buffs
  79.   STAMINA_STATES = []
  80.     # Default colour
  81.   STAMINA_STATES[0] = [1,31,32]
  82.   # in the form
  83.   # STAMINA_STATES[STATE_ID] = [MULT,FILL_COLOUR,EMPTY_COLOR]
  84.   # e.g. Haste
  85.   STAMINA_STATES[17] = [1.9,4,32]
  86.   STAMINA_STATES[17] = [2.5,4,32]
  87.   # e.g. Stop  
  88.   #STAMINA_STATES[11] = [0,8,32]
  89.   # e.g. Slow  
  90.   #STAMINA_STATES[12] = [0.5,8,32]
  91.  
  92. #--------------------------------------------------------------------------
  93.   # ● New Method stamina_gain
  94.   #--------------------------------------------------------------------------
  95.   def self.stamina_gain(battler)
  96.     return ((2 + [0, battler.agi / 10].max) * self.stamina_mult(battler)).to_i
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● New Method stamina_gain
  100.   #--------------------------------------------------------------------------
  101.   def self.stamina_mult(battler)
  102.     return 1 if STATES_HANDLE_AGI
  103.     mult = STAMINA_STATES[0][0]
  104.     for state in battler.states
  105.       unless STAMINA_STATES[state.id].nil?
  106.         mult *= STAMINA_STATES[state.id][0]
  107.       end
  108.     end
  109.     return mult
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● New Method stamina_gain
  113.   #--------------------------------------------------------------------------
  114.   def self.stamina_colors(battler)
  115.     colors = STAMINA_STATES[0]
  116.     for state in battler.states
  117.       unless STAMINA_STATES[state.id].nil?
  118.         if STAMINA_STATES[state.id][0] < colors[0] or colors[0] == 1
  119.           colors = STAMINA_STATES[state.id]
  120.         end
  121.       end
  122.     end
  123.     return colors
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● New Method stamina_start
  127.   #--------------------------------------------------------------------------
  128.   def self.stamina_start(battler)
  129.     battler.stamina = rand(MAX_STAMINA * STAMINA_START_PERCENT / 100)
  130.   end
  131. end
  132.  
  133. class Game_BattlerBase
  134.   #--------------------------------------------------------------------------
  135.   # ● New attr_accessor
  136.   #--------------------------------------------------------------------------
  137.   attr_accessor :stamina
  138.   #--------------------------------------------------------------------------
  139.   # ● Aliases initialize
  140.   #--------------------------------------------------------------------------
  141.   alias yf_fomar_cbs_initialize initialize
  142.   def initialize
  143.     yf_fomar_cbs_initialize
  144.     @stamina = 0
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● New Method stamina_rate
  148.   #--------------------------------------------------------------------------
  149.   def stamina_rate
  150.     @stamina.to_f / CBS::MAX_STAMINA
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● New Method stamina_rate
  154.   #--------------------------------------------------------------------------
  155.   def stamina_gain
  156.     return if not movable?
  157.     @stamina = [CBS::MAX_STAMINA, @stamina + CBS.stamina_gain(self)].min
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● New Method stamina_color
  161.   #--------------------------------------------------------------------------
  162.   def stamina_color
  163.     for state in @states
  164.       unless CBS::STAMINA_STATES[state].nil?
  165.         return STAMINA_STATES[state]
  166.       end
  167.     end
  168.     return STAMINA_STATES[0]
  169.   end
  170. end
  171.  
  172. class Scene_Battle < Scene_Base
  173.   #--------------------------------------------------------------------------
  174.   # ● Rewrote update
  175.   #--------------------------------------------------------------------------
  176.   def update
  177.     super
  178.     if (CBS::ENABLE_PASSING and @actor_command_window.active) and Input.press?(:A)
  179.       command_pass
  180.     end
  181.     if BattleManager.in_turn? and !inputting?
  182.       while @subject.nil? and !CBS::ATB
  183.         process_stamina
  184.       end
  185.       if CBS::ATB
  186.         process_stamina
  187.       end
  188.       process_event
  189.       process_action
  190.     end
  191.     BattleManager.judge_win_loss
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● Rewrote Method update_info_viewport
  195.   #--------------------------------------------------------------------------
  196.   def update_info_viewport
  197.     move_info_viewport(0)   if @party_command_window.active
  198.     move_info_viewport(128) if @actor_command_window.active
  199.     move_info_viewport(64)  if BattleManager.in_turn? and !inputting?
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● New Method inputting?
  203.   #--------------------------------------------------------------------------
  204.   def inputting?
  205.     return @actor_command_window.active || @skill_window.active ||
  206.       @item_window.active || @actor_window.active || @enemy_window.active
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● New Method process_stamina
  210.   #--------------------------------------------------------------------------
  211.   def process_stamina
  212.     @actor_command_window.close
  213.     return if @subject
  214.     BattleManager.advance_turn
  215.     all_battle_members.each do |battler|
  216.       battler.stamina_gain
  217.     end
  218.     @status_window.refresh_stamina
  219.     if @status_window.close?
  220.       @status_window.open
  221.      end
  222.     if BattleManager.escaping?
  223.       $game_party.battle_members.each do |battler|
  224.         if battler.stamina < CBS::MAX_STAMINA
  225.           $game_troop.members.each do |enemy|
  226.             if enemy.stamina == CBS::MAX_STAMINA
  227.               enemy.make_actions
  228.               @subject = enemy
  229.             end
  230.           end
  231.           return
  232.         end
  233.       end
  234.       unless BattleManager.process_escape
  235.         $game_party.battle_members.each do |actor|
  236.           actor.stamina -= CBS::ESCAPE_COST
  237.         end
  238.         BattleManager.set_escaping(false) unless CBS::ATB
  239.       end
  240.     end
  241.     all_battle_members.each do |battler|
  242.       if battler.stamina == CBS::MAX_STAMINA
  243.         battler.make_actions
  244.         @subject = battler
  245.         if @subject.inputable? and battler.is_a?(Game_Actor)
  246.           @actor_command_window.setup(@subject)
  247.           @status_window.index = @subject.index
  248.           BattleManager.set_actor(battler)
  249.         end
  250.         return
  251.       end
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● Rewrote start_party_command_selection Yanfly version
  256.   #--------------------------------------------------------------------------
  257.   def start_party_command_selection
  258.     unless scene_changing?
  259.       refresh_status
  260.       @status_window.unselect
  261.       @status_window.open
  262.       if BattleManager.input_start
  263.         @actor_command_window.close
  264.         @party_command_window.setup
  265.       else
  266.         @party_command_window.deactivate
  267.         turn_start
  268.       end
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● Rewrote start_actor_command_selection
  273.   #--------------------------------------------------------------------------
  274.   def start_actor_command_selection
  275.     @party_command_window.close
  276.     BattleManager.set_escaping(false)
  277.     turn_start
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● Rewrote prior_command Yanfly version
  281.   #--------------------------------------------------------------------------
  282.   def prior_command
  283.     redraw_current_status
  284.     start_party_command_selection
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● Rewrote process_action
  288.   #--------------------------------------------------------------------------
  289.   def process_action
  290.     return if scene_changing?
  291.     if !@subject || !@subject.current_action
  292.       @subject = BattleManager.next_subject
  293.     end
  294.     if Input.trigger?(:B) and (@subject == nil)
  295.       start_party_command_selection
  296.     end
  297.     return unless @subject
  298.     if @subject.current_action
  299.       @subject.current_action.prepare
  300.       if @subject.current_action.valid?
  301.         @status_window.open
  302.         execute_action
  303.       end
  304.       @subject.remove_current_action
  305.       refresh_status
  306.       @log_window.display_auto_affected_status(@subject)
  307.       @log_window.wait_and_clear
  308.     end
  309.     process_action_end unless @subject.current_action
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● Aliases use_item
  313.   #--------------------------------------------------------------------------
  314.   alias cbs_use_item use_item
  315.   def use_item
  316.     cbs_use_item
  317.     @subject.stamina_loss
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● Rewrote turn_end
  321.   #--------------------------------------------------------------------------
  322.   def turn_end
  323.     all_battle_members.each do |battler|
  324.       battler.on_turn_end
  325.       refresh_status
  326.       @log_window.display_auto_affected_status(battler)
  327.       @log_window.wait_and_clear
  328.     end
  329.     #BattleManager.turn_end
  330.     #process_event
  331.     #start_party_command_selection
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ● Rewrote command_fight
  335.   #--------------------------------------------------------------------------
  336.   def command_fight
  337.     BattleManager.next_command
  338.     start_actor_command_selection
  339.   end
  340.   #--------------------------------------------------------------------------
  341.   # ● Rewrote command_escape
  342.   #--------------------------------------------------------------------------
  343.   def command_escape
  344.     @party_command_window.close
  345.     BattleManager.set_escaping(true)
  346.     turn_start
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● New method command_pass
  350.   #--------------------------------------------------------------------------
  351.   def command_pass
  352.     BattleManager.actor.stamina -= CBS::PASSING_COST
  353.     BattleManager.clear_actor
  354.     @subject = nil
  355.     turn_start
  356.     @actor_command_window.active = false
  357.     @actor_command_window.close
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● Destroyed next_command
  361.   #--------------------------------------------------------------------------
  362.   def next_command
  363.     @status_window.show
  364.     @actor_command_window.show
  365.     @status_aid_window.hide
  366.   end
  367. end
  368.  
  369.  
  370.  
  371.  
  372. module BattleManager
  373.   #--------------------------------------------------------------------------
  374.   # ● Rewrote setup
  375.   #--------------------------------------------------------------------------
  376.   def self.setup(troop_id, can_escape = true, can_lose = false)
  377.     init_members
  378.     $game_troop.setup(troop_id)
  379.     @can_escape = can_escape
  380.     @can_lose = can_lose
  381.     make_escape_ratio
  382.     @escaping = false
  383.     @turn_counter = 0
  384.     @actions_per_turn = $game_party.members.size + $game_troop.members.size
  385.     ($game_party.members + $game_troop.members).each do |battler|
  386.       if battler.is_a?(Game_Enemy) or CBS::RESET_STAMINA
  387.         CBS.stamina_start(battler)
  388.       end
  389.     end
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● New Method set_escaping
  393.   #--------------------------------------------------------------------------
  394.   def self.set_escaping(escaping)
  395.     @escaping = escaping
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● New Method escaping?
  399.   #--------------------------------------------------------------------------
  400.   def self.escaping?
  401.     return @escaping
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● Rewrote turn_start Yanfly version
  405.   #--------------------------------------------------------------------------
  406.   def self.turn_start
  407.     @phase = :turn
  408.     clear_actor
  409.     $game_troop.increase_turn if $game_troop.turn_count == 0
  410.     @performed_battlers = []
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● New Method set_actor
  414.   #--------------------------------------------------------------------------
  415.   def self.set_actor(actor)
  416.     @actor_index = actor.index
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● New Increase action counter
  420.   #--------------------------------------------------------------------------
  421.   def self.add_action
  422.     return if @actions_per_turn.nil?
  423.     @turn_counter += 1
  424.     if @turn_counter == @actions_per_turn and CBS::TURN_LENGTH == 0
  425.       $game_troop.increase_turn
  426.       SceneManager.scene.turn_end
  427.       @turn_counter = 0
  428.     end
  429.   end
  430.   #--------------------------------------------------------------------------
  431.   # ● New Method advance_turn
  432.   #--------------------------------------------------------------------------
  433.   def self.advance_turn
  434.     return if CBS::TURN_LENGTH == 0
  435.     @turn_counter += 1
  436.     if @turn_counter == 60 * CBS::TURN_LENGTH
  437.       $game_troop.increase_turn
  438.       SceneManager.scene.turn_end
  439.       @turn_counter = 0
  440.     end
  441.   end
  442. end
  443.  
  444. class Game_Battler < Game_BattlerBase
  445.   #--------------------------------------------------------------------------
  446.   # ● Rewrote on_turn_end
  447.   #--------------------------------------------------------------------------
  448.   def on_turn_end
  449.     @result.clear
  450.     regenerate_all
  451.     update_state_turns
  452.     update_buff_turns
  453.     remove_states_auto(2)
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● New Method on_turn_end
  457.   #--------------------------------------------------------------------------
  458.   def stamina_loss
  459.     if self.actor?
  460.       @stamina -= input.stamina_cost
  461.     else
  462.       @stamina -= @actions[0].stamina_cost
  463.     end
  464.     BattleManager.add_action
  465.   end
  466. end
  467.  
  468. class Game_Actor < Game_Battler
  469.   #--------------------------------------------------------------------------
  470.   # ● Rewrote input
  471.   #--------------------------------------------------------------------------
  472.   def input
  473.     if @actions[@action_input_index] == nil
  474.       @actions[@action_input_index] = Game_Action.new(self)
  475.     end
  476.     return @actions[@action_input_index]
  477.   end
  478. end
  479.  
  480. class Game_Action
  481.   #--------------------------------------------------------------------------
  482.   # ● New Method stamina_cost
  483.   #--------------------------------------------------------------------------
  484.   def stamina_cost
  485.     if @item.is_skill?
  486.       return CBS::SKILL_COST[item.id] if CBS::SKILL_COST[item.id]
  487.       return CBS::SKILL_COST[0]
  488.     end
  489.     return CBS::ITEM_COST if @item.is_item?
  490.     return CBS::MAX_STAMINA
  491.   end
  492. end
  493.  
  494. class Window_BattleStatus < Window_Selectable
  495.   #--------------------------------------------------------------------------
  496.   # Aliases method: draw_item yanfly version
  497.   #--------------------------------------------------------------------------
  498.   alias prefomar_draw_item draw_item
  499.   def draw_item(index)
  500.     unless CBS::ATB
  501.       prefomar_draw_item(index)
  502.       return
  503.     end
  504.     return if index.nil?
  505.     clear_item(index)
  506.     actor = battle_members[index]
  507.     rect = item_rect(index)
  508.     return if actor.nil?
  509.     draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)
  510.     draw_actor_name(actor, rect.x, rect.y, rect.width-8)
  511.     draw_actor_action(actor, rect.x, rect.y)
  512.     draw_actor_icons(actor, rect.x, line_height*1, rect.width)
  513.     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
  514.     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
  515.     draw_actor_hp(actor, rect.x+2, line_height*2, rect.width-4)
  516.     if draw_tp?(actor) && draw_mp?(actor)
  517.       dw = rect.width/2-2
  518.       dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE
  519.       draw_actor_tp(actor, rect.x+2, line_height*2+gx, dw)
  520.       dw = rect.width - rect.width/2 - 2
  521.       draw_actor_mp(actor, rect.x+rect.width/2, line_height*2+gx, dw)
  522.     elsif draw_tp?(actor) && !draw_mp?(actor)
  523.       draw_actor_tp(actor, rect.x+2, line_height*2+gx, rect.width-4)
  524.     else
  525.       draw_actor_mp(actor, rect.x+2, line_height*2+gx, rect.width-4)
  526.     end
  527.     draw_actor_stamina(actor, rect.x+2, line_height*3, rect.width-4)
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # overwrite method: draw_item yanfly version
  531.   #--------------------------------------------------------------------------
  532.   def draw_item_stamina(index)
  533.     return if index.nil?
  534.     actor = battle_members[index]
  535.     rect = item_rect(index)
  536.     return if actor.nil?
  537.     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
  538.     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
  539.     draw_actor_stamina(actor, rect.x+2, line_height*3, rect.width-4)
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # new method: refresh_stamina
  543.   #--------------------------------------------------------------------------
  544.   def refresh_stamina
  545.     return unless CBS::ATB
  546.     item_max.times {|i| draw_item_stamina(i) }
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # new method: draw_actor_stamina
  550.   #--------------------------------------------------------------------------
  551.   def draw_actor_stamina(actor, dx, dy, width = 124)
  552.     draw_gauge(dx, dy, width, actor.stamina_rate, text_color(CBS.stamina_colors(actor)[2]),text_color(CBS.stamina_colors(actor)[1]))
  553.     change_color(system_color)
  554.     cy = (Font.default_size - contents.font.size) / 2 + 1
  555.     draw_text(dx+2, dy+cy, 30, line_height, CBS::SAMINA_GAUGE_NAME)
  556.   end
  557. end


最后就是yangfly的战斗引擎了,我想应该是需要的
RUBY 代码复制
  1. #==============================================================================
  2. #
  3. # ¥ Yanfly Engine Ace - Ace Battle Engine v1.22
  4. # -- Last Updated: 2012.03.04
  5. # -- Level: Normal, Hard
  6. # -- Requires: n/a
  7. #
  8. #==============================================================================
  9.  
  10. $imported = {} if $imported.nil?
  11. $imported["YEA-BattleEngine"] = true
  12.  
  13. #==============================================================================
  14. # ¥ Updates
  15. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  16. # 2012.03.04 - Bug fixed: Input crash bug.
  17. # 2012.02.13 - Bug fixed: Odd Victory game crash fixed.
  18. # 2012.02.12 - Bug fixed: Displayed damage in combat log is correct now.
  19. # 2012.01.29 - Visual Changes: Buff stacks now show one popup upon one skill.
  20. # 2012.01.24 - Compatibility Update: Enemy Levels
  21. # 2012.01.18 - Bug Fixed: Help Window clears text upon selecting nil items.
  22. # 2012.01.11 - Added <one animation> tag for multi-hit skills to play an
  23. #              animation only once.
  24. #            - Reduced lag from battle system constantly recreating bitmaps.
  25. # 2012.01.10 - Compatibility Update: Battle System FTB
  26. # 2012.01.09 - Anticrash methods implemented.
  27. #            - Damage Popups are now separate for damage formulas and recovery.
  28. # 2012.01.05 - Bug fixed: Game no longer crashes with escape skills/items.
  29. # 2012.01.02 - Compatibility Update: Target Manager
  30. #            - Added Option: AUTO_FAST
  31. #            - Random hits now show animations individually.
  32. # 2011.12.30 - Compatibility Update: Enemy Levels
  33. #            - Added Option to center the actors in the HUD.
  34. # 2011.12.27 - Bug fixed: TP Damage skills and items no longer crash game.
  35. #            - Default battle system bug fixes are now included from YEA's Ace
  36. #              Core Engine.
  37. #            - Groundwork is also made to support future battle system types.
  38. #            - Multi-hit actions no longer linger when a target dies during the
  39. #              middle of one of the hits.
  40. #            - Compatibility Update: Lunatic Objects v1.02
  41. # 2011.12.26 - Bug fixed: Multi-hit popups occured even after an enemy's dead.
  42. # 2011.12.22 - Bug fixed: Elemental Resistance popup didn't show.
  43. # 2011.12.20 - Bug fixed: Death state popups against immortal states.
  44. #            - Bug fixed: During State popup fix.
  45. #            - Added HIDE_POPUP_SWITCH.
  46. # 2011.12.17 - Compatibiilty Update: Cast Animations
  47. # 2011.12.15 - Compatibility Update: Battle Command List
  48. # 2011.12.14 - Compatibility Update: Lunatic Objects
  49. # 2011.12.13 - Compatibility Update: Command Party
  50. # 2011.12.12 - Bug fixed: Turn stalling if no inputable members.
  51. # 2011.12.10 - Compatibility update for Automatic Party HUD.
  52. #            - Popup graphical bug fixed.
  53. #            - Bug fixed: Didn't wait for boss dead animations.
  54. #            - Bug fixed: Surprise attacks that froze the game.
  55. #            - Bug fixed: Popups didn't show for straight recovery effects.
  56. # 2011.12.08 - Finished Script.
  57. # 2011.12.04 - Started Script.
  58. #
  59. #==============================================================================
  60. # ¥ Introduction
  61. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  62. # Ace Battle Engine works as a foundation for future battle engine add-ons. It
  63. # allows for easier management of the battle engine without adding too many
  64. # features, allowing users to customize what they want as they see fit. While
  65. # the Ace Battle Engine isn't an entirely new engine, it gives users control
  66. # that RPG Maker VX Ace didn't originally give them.
  67. #
  68. # Furthermore, this script provides some new features. They are as follows:
  69. #
  70. # -----------------------------------------------------------------------------
  71. # Animation Fixes
  72. # -----------------------------------------------------------------------------
  73. # Though the Yanfly Engine Ace - Ace Core Engine script contains these fixes,
  74. # these fixes are included in this script as well to ensure it's working for
  75. # the battle script in the event someone chooses not to work with the Ace Core
  76. # Engine script. The animation fixes prevent excessive animation overlaying
  77. # (and making the screen look really ugly) and prevents animation clashing
  78. # between two dual wielding normal attack animations.
  79. #
  80. # -----------------------------------------------------------------------------
  81. # Enemy Animations
  82. # -----------------------------------------------------------------------------
  83. # Enemies now show battle animations when they deliver attacks and skills
  84. # against the player's party. Before in RPG Maker VX Ace, it was nothing more
  85. # than just sound effects and the screen shaking. Now, animations play where
  86. # the status window is and relative to the position of each party member.
  87. #
  88. # -----------------------------------------------------------------------------
  89. # Left/Right Command Selection
  90. # -----------------------------------------------------------------------------
  91. # While choosing actions, the player can press Left or Right to move freely
  92. # between (alive) actors to change their skills. Players no longer have to
  93. # cancel all the way back to change one person's skill and reselect everything.
  94. # On that note, there is now the option that when a battle starts or at the
  95. # end of a turn, players will start immediately at command selection rather
  96. # than needing to select "Fight" in the Party Command Window.
  97. #
  98. # -----------------------------------------------------------------------------
  99. # Popups
  100. # -----------------------------------------------------------------------------
  101. # Dealing damage, inflicting states, adding buffs, landing critical hits,
  102. # striking weaknesses, missing attacks, you name it, there's probably a popup
  103. # for it. Popups deliver information to the player in a quick or orderly
  104. # fashion without requiring the player to read lines of text.
  105. #
  106. # -----------------------------------------------------------------------------
  107. # Targeting Window
  108. # -----------------------------------------------------------------------------
  109. # When targeting enemies, the window is no longer displayed. Instead, the
  110. # targeted enemies are highlighted and their names are shown at the top of the
  111. # screen in a help window. Another thing that's changed is when skills that
  112. # target multiple targets are selected, there is a confirmation step that the
  113. # player must take before continuing. In this confirmation step, all of the
  114. # multiple targets are selected and in the help window would display the scope
  115. # of the skill (such as "All Foes" or "Random Foes"). RPG Maker VX Ace skipped
  116. # this step by default.
  117. #
  118. # -----------------------------------------------------------------------------
  119. # Toggling On and Off Special Effects and Text
  120. # -----------------------------------------------------------------------------
  121. # Not everybody likes having the screen shake or the enemies blink when they
  122. # take damage. These effects can now be toggled on and off. Certain text can
  123. # also be toggled on and off from appearing. A lot of the displayed text has
  124. # been rendered redundant through the use of popups.
  125. #
  126. # -----------------------------------------------------------------------------
  127. # Visual Battle Status Window
  128. # -----------------------------------------------------------------------------
  129. # Rather than just having rows of names with HP and MP bars next to them, the
  130. # Battle Status Window now displays actors' faces and their gauges aligned at
  131. # the bottom. More status effects can be shown in addition to showing more
  132. # members on screen at once. The Battle Status Window is also optimized to
  133. # refresh less (thus, removing potential lag from the system).
  134. #
  135. # -----------------------------------------------------------------------------
  136. # Window Position Changes
  137. # -----------------------------------------------------------------------------
  138. # Windows such as the Skill Window and Item Window have been rearranged to
  139. # always provide the player a clear view of the battlefield rather than opening
  140. # up and covering everything. As such, the window positions are placed at the
  141. # bottom of the screen and are repositioned.
  142. #
  143. #==============================================================================
  144. # ¥ Instructions
  145. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  146. # To install this script, open up your script editor and copy/paste this script
  147. # to an open slot below ¥ Materials/‘fÞ but above ¥ Main. Remember to save.
  148. #
  149. # -----------------------------------------------------------------------------
  150. # Skill Notetags - These notetags go in the skills notebox in the database.
  151. # -----------------------------------------------------------------------------
  152. # <one animation>
  153. # Causes the action to display the action animation only once, even if it's a
  154. # multi-hit action. This is used primarily for non-all scope targeting.
  155. #
  156. # -----------------------------------------------------------------------------
  157. # Item Notetags - These notetags go in the items notebox in the database.
  158. # -----------------------------------------------------------------------------
  159. # <one animation>
  160. # Causes the action to display the action animation only once, even if it's a
  161. # multi-hit action. This is used primarily for non-all scope targeting.
  162. #
  163. # -----------------------------------------------------------------------------
  164. # Enemy Notetags - These notetags go in the enemy notebox in the database.
  165. # -----------------------------------------------------------------------------
  166. # <atk ani 1: x>
  167. # <atk ani 2: x>
  168. # Changes the normal attack animation of the particular enemy to animation x.
  169. # Attack animation 1 is the first one that plays. If there's a second animation
  170. # then the second one will play after in mirrored form.
  171. #
  172. # -----------------------------------------------------------------------------
  173. # State Notetags - These notetags go in the state notebox in the database.
  174. # -----------------------------------------------------------------------------
  175. # <popup add: string>
  176. # <popup rem: string>
  177. # <popup dur: string>
  178. # Status effects now create popups whenever they're inflicted. However, if you
  179. # don't like that a certain status effect uses a particular colour setting,
  180. # change "string" to one of the rulesets below to cause that popup to use a
  181. # different ruleset.
  182. #
  183. # <popup hide add>
  184. # <popup hide rem>
  185. # <popup hide dur>
  186. # Not everybody wants status effects to show popups when inflicted. When this
  187. # is the case, insert the respective tag to hide popups from appearing when the
  188. # state is added, removed, or during the stand-by phases.
  189. #
  190. # -----------------------------------------------------------------------------
  191. # Debug Tools - These tools only work during Test Play.
  192. # -----------------------------------------------------------------------------
  193. # - F5 Key -
  194. # Recovers all actors. Restores their HP and MP to max. Does not affect TP.
  195. # All states and buffs are removed whether they are positive or negative.
  196. #
  197. # - F6 Key -
  198. # Sets all actors to have 1 HP, 0 MP, and 0 TP. States are unaffected.
  199. #
  200. # - F7 Key -
  201. # Sets all actors to have max TP. Everything else is unaffected.
  202. #
  203. # - F8 Key -
  204. # Kills all enemies in battle. Ends the battle quickly.
  205. #
  206. #==============================================================================
  207. # ¥ Compatibility
  208. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  209. # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
  210. # it will run with RPG Maker VX without adjusting.
  211. #
  212. #==============================================================================
  213.  
  214. module YEA
  215.   module BATTLE
  216.  
  217.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  218.     # - General Battle Settings -
  219.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  220.     # These settings are adjusted for the overall battle system. These are
  221.     # various miscellaneous options to adjust. Each of the settings below will
  222.     # explain what they do. Change default enemy battle animations here, too.
  223.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  224.     BLINK_EFFECTS      = false  # Blink sprite when damaged?
  225.     FLASH_WHITE_EFFECT = true   # Flash enemy white when it starts an attack.
  226.     SCREEN_SHAKE       = false  # Shake screen in battle?
  227.     SKIP_PARTY_COMMAND = true   # Skips the Fight/Escape menu.
  228.     AUTO_FAST          = true   # Causes message windows to not wait.
  229.     ENEMY_ATK_ANI      = 36     # Sets default attack animation for enemies.
  230.  
  231.     # If this switch is ON, popups will be hidden. If OFF, the popups will be
  232.     # shown. If you do not wish to use this switch, set it to 0.
  233.     HIDE_POPUP_SWITCH  = 0
  234.  
  235.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  236.     # - Battle Status Window -
  237.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  238.     # This sets the default battle system your game will use. If your game
  239.     # doesn't have any other battle systems installed, it will use :dtb.
  240.     #
  241.     # Battle System        Requirement
  242.     #   :dtb               - Default Turn Battle. Default system.
  243.     #   :ftb               - YEA Battle System Add-On: Free Turn Battle
  244.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  245.     DEFAULT_BATTLE_SYSTEM = :dtb     # Default battle system set.
  246.  
  247.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  248.     # - Battle Status Window -
  249.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  250.     # Here, you can adjust the settings for the battle status window. The
  251.     # battle status window, by default, will show the actor's face, HP, MP, TP
  252.     # (if viable), and any inflicted status effects.
  253.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  254.     BATTLESTATUS_NAME_FONT_SIZE = 20    # Font size used for name.
  255.     BATTLESTATUS_TEXT_FONT_SIZE = 16    # Font size used for HP, MP, TP.
  256.     BATTLESTATUS_NO_ACTION_ICON = 185   # No action icon.
  257.     BATTLESTATUS_HPGAUGE_Y_PLUS = 11    # Y Location buffer used for HP gauge.
  258.     BATTLESTATUS_CENTER_FACES   = false # Center faces for the Battle Status.
  259.  
  260.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  261.     # - Help Window Text -
  262.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  263.     # When selecting a target to attack, this is the text that will be shown
  264.     # in place of a target's name for special cases. These special cases are
  265.     # for selections that were originally non-targetable battle scopes.
  266.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  267.     HELP_TEXT_ALL_FOES        = "All Foes"
  268.     HELP_TEXT_ONE_RANDOM_FOE  = "One Random Foe"
  269.     HELP_TEXT_MANY_RANDOM_FOE = "%d Random Foes"
  270.     HELP_TEXT_ALL_ALLIES      = "All Allies"
  271.     HELP_TEXT_ALL_DEAD_ALLIES = "All Dead Allies"
  272.     HELP_TEXT_ONE_RANDOM_ALLY = "One Random Ally"
  273.     HELP_TEXT_RANDOM_ALLIES   = "%d Random Allies"
  274.  
  275.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  276.     # - Popup Settings -
  277.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  278.     # These settings will adjust the popups that appear in battle. Popups
  279.     # deliver information to your player as battlers deal damage, inflict
  280.     # status effects, and more.
  281.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  282.     ENABLE_POPUPS  = true     # Set this to false if you wish to disable them.
  283.     FLASH_CRITICAL = true     # Sets critical hits to flash.
  284.  
  285.     # This hash adjusts the popup settings that will govern how popups appear.
  286.     # Adjust them accordingly.
  287.     POPUP_SETTINGS ={
  288.       :offset     => -24,         # Height offset of a popup.
  289.       :fade       => 12,          # Fade rate for each popup.
  290.       :full       => 60,          # Frames before a popup fades.
  291.       :hp_dmg     => "-%s ",      # SprintF for HP damage.
  292.       :hp_heal    => "+%s ",      # SprintF for HP healing.
  293.       :mp_dmg     => "-%s MP",    # SprintF for MP damage.
  294.       :mp_heal    => "+%s MP",    # SprintF for MP healing.
  295.       :tp_dmg     => "-%s TP",    # SprintF for MP damage.
  296.       :tp_heal    => "+%s TP",    # SprintF for MP healing.
  297.       :drained    => "DRAIN",     # Text display for draining HP/MP.
  298.       :critical   => "CRITICAL!", # Text display for critical hit.
  299.       :missed     => "MISS",      # Text display for missed attack.
  300.       :evaded     => "EVADE!",    # Text display for evaded attack.
  301.       :nulled     => "NULL",      # Text display for nulled attack.
  302.       :failed     => "FAILED",    # Text display for a failed attack.
  303.       :add_state  => "+%s",      # SprintF for added states.
  304.       :rem_state  => "-%s",      # SprintF for removed states.
  305.       :dur_state  => "%s",        # SprintF for during states.
  306.       :ele_rates  => true,        # This will display elemental affinities.
  307.       :ele_wait   => 20,          # This is how many frames will wait.
  308.       :weakpoint  => "WEAKPOINT", # Appears if foe is weak to element.
  309.       :resistant  => "RESIST",    # Appears if foe is resistant to element.
  310.       :immune     => "IMMUNE",    # Appears if foe is immune to element.
  311.       :absorbed   => "ABSORB",    # Appears if foe can absorb the element.
  312.       :add_buff   => "%s{",      # Appears when a positive buff is applied.
  313.       :add_debuff => "%s|",      # Appears when a negative buff is applied.
  314.     } # Do not remove this.
  315.  
  316.     # This is the default font used for the popups. Adjust them accordingly
  317.     # or even add new ones.
  318.     DEFAULT = ["VL Gothic", "Verdana", "Arial", "Courier"]
  319.  
  320.     # The following are the various rules that govern the individual popup
  321.     # types that will appear. Adjust them accordingly. Here is a list of what
  322.     # each category does.
  323.     #   Zoom1    The zoom the popup starts at. Values over 2.0 may cause lag.
  324.     #   Zoom2    The zoom the popup goes to. Values over 2.0 may cause lag.
  325.     #   Sz       The font size used for the popup text.
  326.     #   Bold     Applying bold for the popup text.
  327.     #   Italic   Applying italic for the popup text.
  328.     #   Red      The red value of the popup text.
  329.     #   Grn      The green value of the popup text.
  330.     #   Blu      The blue value of the popup text.
  331.     #   Font     The font used for the popup text.
  332.     POPUP_RULES ={
  333.       # Type     => [ Zoom1, Zoom2, Sz, Bold, Italic, Red, Grn, Blu, Font]
  334.       "DEFAULT"  => [   2.0,   1.0, 24, true,  false, 255, 255, 255, DEFAULT],
  335.       "CRITICAL" => [   2.0,   1.0, 24, true,  false, 255,  80,  80, DEFAULT],
  336.       "HP_DMG"   => [   2.0,   1.0, 36, true,  false, 255, 255, 255, DEFAULT],
  337.       "HP_HEAL"  => [   2.0,   1.0, 36, true,  false, 130, 250, 130, DEFAULT],
  338.       "MP_DMG"   => [   2.0,   1.0, 36, true,  false, 220, 180, 255, DEFAULT],
  339.       "MP_HEAL"  => [   2.0,   1.0, 36, true,  false, 160, 230, 255, DEFAULT],
  340.       "TP_DMG"   => [   2.0,   1.0, 36, true,  false, 242, 108,  78, DEFAULT],
  341.       "TP_HEAL"  => [   2.0,   1.0, 36, true,  false, 251, 175,  92, DEFAULT],
  342.       "ADDSTATE" => [   2.0,   1.0, 24, true,  false, 240, 100, 100, DEFAULT],
  343.       "REMSTATE" => [   2.0,   1.0, 24, true,  false, 125, 170, 225, DEFAULT],
  344.       "DURSTATE" => [   2.0,   1.0, 24, true,  false, 255, 240, 150, DEFAULT],
  345.       "DRAIN"    => [   2.0,   1.0, 36, true,  false, 250, 190, 255, DEFAULT],
  346.       "POSITIVE" => [   2.0,   1.0, 24, true,  false, 110, 210, 245, DEFAULT],
  347.       "NEGATIVE" => [   2.0,   1.0, 24, true,  false, 245, 155, 195, DEFAULT],
  348.       "WEAK_ELE" => [   0.5,   1.0, 24, true,  false, 240, 110,  80, DEFAULT],
  349.       "IMMU_ELE" => [   0.5,   1.0, 24, true,  false, 185, 235, 255, DEFAULT],
  350.       "REST_ELE" => [   0.5,   1.0, 24, true,  false, 145, 230, 180, DEFAULT],
  351.       "ABSB_ELE" => [   0.5,   1.0, 24, true,  false, 250, 190, 255, DEFAULT],
  352.       "BUFF"     => [   2.0,   1.0, 24, true,  false, 255, 240, 100, DEFAULT],
  353.       "DEBUFF"   => [   2.0,   1.0, 24, true,  false, 160, 130, 200, DEFAULT],
  354.     } # Do not remove this.
  355.  
  356.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  357.     # - Streamlined Messages -
  358.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  359.     # Want to remove some of those annoying messages that appear all the time?
  360.     # Now you can! Select which messages you want to enable or disable. Some of
  361.     # these messages will be rendered useless due to popups.
  362.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  363.     MSG_ENEMY_APPEARS  = false  # Message when enemy appears start of battle.
  364.     MSG_CURRENT_STATE  = false  # Show which states has affected battler.
  365.     MSG_CURRENT_ACTION = true   # Show the current action of the battler.
  366.     MSG_COUNTERATTACK  = true   # Show the message for a counterattack.
  367.     MSG_REFLECT_MAGIC  = true   # Show message for reflecting magic attacks.
  368.     MSG_SUBSTITUTE_HIT = true   # Show message for ally taking another's hit.
  369.     MSG_FAILURE_HIT    = false  # Show effect failed against target.
  370.     MSG_CRITICAL_HIT   = false  # Show attack was a critical hit.
  371.     MSG_HIT_MISSED     = false  # Show attack missed the target.
  372.     MSG_EVASION        = false  # Show attack was evaded by the target.
  373.     MSG_HP_DAMAGE      = false  # Show HP damage to target.
  374.     MSG_MP_DAMAGE      = false  # Show MP damage to target.
  375.     MSG_TP_DAMAGE      = false  # Show TP damage to target.
  376.     MSG_ADDED_STATES   = false  # Show target's added states.
  377.     MSG_REMOVED_STATES = false  # Show target's removed states.
  378.     MSG_CHANGED_BUFFS  = false  # Show target's changed buffs.
  379.  
  380.   end # BATTLE
  381. end # YEA
  382.  
  383. #==============================================================================
  384. # ¥ Editting anything past this point may potentially result in causing
  385. # computer damage, incontinence, explosion of user's head, coma, death, and/or
  386. # halitosis so edit at your own risk.
  387. #==============================================================================
  388.  
  389. module YEA
  390.   module REGEXP
  391.   module ENEMY
  392.  
  393.     ATK_ANI1 = /<(?:ATK_ANI_1|atk ani 1):[ ]*(\d+)>/i
  394.     ATK_ANI2 = /<(?:ATK_ANI_2|atk ani 2):[ ]*(\d+)>/i
  395.  
  396.   end # ENEMY
  397.   module USABLEITEM
  398.  
  399.     ONE_ANIMATION = /<(?:ONE_ANIMATION|one animation)>/i
  400.  
  401.   end # USABLEITEM
  402.   module STATE
  403.  
  404.     POPUP_ADD = /<(?:POPUP_ADD_RULE|popup add rule|popup add):[ ](.*)>/i
  405.     POPUP_REM = /<(?:POPUP_REM_RULE|popup rem rule|popup rem):[ ](.*)>/i
  406.     POPUP_DUR = /<(?:POPUP_DUR_RULE|popup dur rule|popup dur):[ ](.*)>/i
  407.  
  408.     HIDE_ADD  = /<(?:POPUP_HIDE_ADD|popup hide add|hide add)>/i
  409.     HIDE_REM  = /<(?:POPUP_HIDE_REM|popup hide rem|hide rem)>/i
  410.     HIDE_DUR  = /<(?:POPUP_HIDE_DUR|popup hide dur|hide dur)>/i
  411.  
  412.   end # STATE
  413.   end # REGEXP
  414. end # YEA
  415.  
  416. #==============================================================================
  417. # ¡ Switch
  418. #==============================================================================
  419.  
  420. module Switch
  421.  
  422.   #--------------------------------------------------------------------------
  423.   # self.hide_popups
  424.   #--------------------------------------------------------------------------
  425.   def self.hide_popups
  426.     return false if YEA::BATTLE::HIDE_POPUP_SWITCH <= 0
  427.     return $game_switches[YEA::BATTLE::HIDE_POPUP_SWITCH]
  428.   end
  429.  
  430. end # Switch
  431.  
  432. #==============================================================================
  433. # ¡ Colour
  434. #==============================================================================
  435.  
  436. module Colour
  437.  
  438.   #--------------------------------------------------------------------------
  439.   # self.text_colour
  440.   #--------------------------------------------------------------------------
  441.   def self.text_colour(index)
  442.     windowskin = Cache.system("Window")
  443.     x = 64 + (index % 8) * 8
  444.     y = 96 + (index / 8) * 8
  445.     return windowskin.get_pixel(x, y)
  446.   end
  447.  
  448. end # Colour
  449.  
  450. #==============================================================================
  451. # ¡ Icon
  452. #==============================================================================
  453.  
  454. module Icon
  455.  
  456.   #--------------------------------------------------------------------------
  457.   # self.no_action
  458.   #--------------------------------------------------------------------------
  459.   def self.no_action; return YEA::BATTLE::BATTLESTATUS_NO_ACTION_ICON; end
  460.  
  461. end # Icon
  462.  
  463. #==============================================================================
  464. # ¡ Numeric
  465. #==============================================================================
  466.  
  467. class Numeric
  468.  
  469.   #--------------------------------------------------------------------------
  470.   # new method: group_digits
  471.   #--------------------------------------------------------------------------
  472.   unless $imported["YEA-CoreEngine"]
  473.   def group; return self.to_s; end
  474.   end # $imported["YEA-CoreEngine"]
  475.  
  476. end # Numeric
  477.  
  478. #==============================================================================
  479. # ¡ DataManager
  480. #==============================================================================
  481.  
  482. module DataManager
  483.  
  484.   #--------------------------------------------------------------------------
  485.   # alias method: load_database
  486.   #--------------------------------------------------------------------------
  487.   class <<self; alias load_database_abe load_database; end
  488.   def self.load_database
  489.     load_database_abe
  490.     load_notetags_abe
  491.   end
  492.  
  493.   #--------------------------------------------------------------------------
  494.   # new method: load_notetags_abe
  495.   #--------------------------------------------------------------------------
  496.   def self.load_notetags_abe
  497.     groups = [$data_enemies, $data_states, $data_skills, $data_items]
  498.     for group in groups
  499.       for obj in group
  500.         next if obj.nil?
  501.         obj.load_notetags_abe
  502.       end
  503.     end
  504.   end
  505.  
  506. end # DataManager
  507.  
  508. #==============================================================================
  509. # ¡ RPG::UsableItem
  510. #==============================================================================
  511.  
  512. class RPG::UsableItem < RPG::BaseItem
  513.  
  514.   #--------------------------------------------------------------------------
  515.   # public instance variables
  516.   #--------------------------------------------------------------------------
  517.   attr_accessor :one_animation
  518.  
  519.   #--------------------------------------------------------------------------
  520.   # common cache: load_notetags_abe
  521.   #--------------------------------------------------------------------------
  522.   def load_notetags_abe
  523.     @one_animation = false
  524.     #---
  525.     self.note.split(/[\r\n]+/).each { |line|
  526.       case line
  527.       #---
  528.       when YEA::REGEXP::USABLEITEM::ONE_ANIMATION
  529.         @one_animation = true
  530.       end
  531.     } # self.note.split
  532.     #---
  533.   end
  534.  
  535. end # RPG::UsableItem
  536.  
  537. #==============================================================================
  538. # ¡ RPG::Enemy
  539. #==============================================================================
  540.  
  541. class RPG::Enemy < RPG::BaseItem
  542.  
  543.   #--------------------------------------------------------------------------
  544.   # public instance variables
  545.   #--------------------------------------------------------------------------
  546.   attr_accessor :atk_animation_id1
  547.   attr_accessor :atk_animation_id2
  548.  
  549.   #--------------------------------------------------------------------------
  550.   # common cache: load_notetags_abe
  551.   #--------------------------------------------------------------------------
  552.   def load_notetags_abe
  553.     @atk_animation_id1 = YEA::BATTLE::ENEMY_ATK_ANI
  554.     @atk_animation_id2 = 0
  555.     #---
  556.     self.note.split(/[\r\n]+/).each { |line|
  557.       case line
  558.       #---
  559.       when YEA::REGEXP::ENEMY::ATK_ANI1
  560.         @atk_animation_id1 = $1.to_i
  561.       when YEA::REGEXP::ENEMY::ATK_ANI2
  562.         @atk_animation_id2 = $1.to_i
  563.       end
  564.     } # self.note.split
  565.     #---
  566.   end
  567.  
  568. end # RPG::Enemy
  569.  
  570. #==============================================================================
  571. # ¡ RPG::Enemy
  572. #==============================================================================
  573.  
  574. class RPG::State < RPG::BaseItem
  575.  
  576.   #--------------------------------------------------------------------------
  577.   # public instance variables
  578.   #--------------------------------------------------------------------------
  579.   attr_accessor :popup_rules
  580.  
  581.   #--------------------------------------------------------------------------
  582.   # common cache: load_notetags_abe
  583.   #--------------------------------------------------------------------------
  584.   def load_notetags_abe
  585.     @popup_rules = {
  586.       :add_state => "ADDSTATE",
  587.       :rem_state => "REMSTATE",
  588.       :dur_state => nil
  589.     } # Do not remove this.
  590.     #---
  591.     self.note.split(/[\r\n]+/).each { |line|
  592.       case line
  593.       #---
  594.       when YEA::REGEXP::STATE::POPUP_ADD
  595.         @popup_rules[:add_state] = $1.upcase.to_s
  596.       when YEA::REGEXP::STATE::POPUP_REM
  597.         @popup_rules[:rem_state] = $1.upcase.to_s
  598.       when YEA::REGEXP::STATE::POPUP_DUR
  599.         @popup_rules[:dur_state] = $1.upcase.to_s
  600.       when YEA::REGEXP::STATE::HIDE_ADD
  601.         @popup_rules[:add_state] = nil
  602.       when YEA::REGEXP::STATE::HIDE_REM
  603.         @popup_rules[:rem_state] = nil
  604.       when YEA::REGEXP::STATE::HIDE_DUR
  605.         @popup_rules[:dur_state] = nil
  606.       end
  607.     } # self.note.split
  608.     #---
  609.   end
  610.  
  611. end # RPG::State
  612.  
  613. #==============================================================================
  614. # ¡ BattleManager
  615. #==============================================================================
  616.  
  617. module BattleManager
  618.  
  619.   #--------------------------------------------------------------------------
  620.   # overwrite method: self.battle_start
  621.   #--------------------------------------------------------------------------
  622.   def self.battle_start
  623.     $game_system.battle_count += 1
  624.     $game_party.on_battle_start
  625.     $game_troop.on_battle_start
  626.     return unless YEA::BATTLE::MSG_ENEMY_APPEARS
  627.     $game_troop.enemy_names.each do |name|
  628.       $game_message.add(sprintf(Vocab::Emerge, name))
  629.     end
  630.     if @preemptive
  631.       $game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
  632.     elsif @surprise
  633.       $game_message.add(sprintf(Vocab::Surprise, $game_party.name))
  634.     end
  635.     wait_for_message
  636.   end
  637.  
  638.   #--------------------------------------------------------------------------
  639.   # overwrite method: make_action_orders
  640.   #--------------------------------------------------------------------------
  641.   def self.make_action_orders
  642.     make_dtb_action_orders if btype?(:dtb)
  643.   end
  644.  
  645.   #--------------------------------------------------------------------------
  646.   # new method: make_dtb_action_orders
  647.   #--------------------------------------------------------------------------
  648.   def self.make_dtb_action_orders
  649.     @action_battlers = []
  650.     @action_battlers += $game_party.members unless @surprise
  651.     @action_battlers += $game_troop.members unless @preemptive
  652.     @action_battlers.each {|battler| battler.make_speed }
  653.     @action_battlers.sort! {|a,b| b.speed - a.speed }
  654.   end
  655.  
  656.   #--------------------------------------------------------------------------
  657.   # overwrite method: turn_start
  658.   #--------------------------------------------------------------------------
  659.   def self.turn_start
  660.     @phase = :turn
  661.     clear_actor
  662.     $game_troop.increase_turn
  663.     @performed_battlers = []
  664.     make_action_orders
  665.   end
  666.  
  667.   #--------------------------------------------------------------------------
  668.   # overwrite method: next_subject
  669.   #--------------------------------------------------------------------------
  670.   def self.next_subject
  671.     @performed_battlers = [] if @performed_battlers.nil?
  672.     loop do
  673.       @action_battlers -= @performed_battlers
  674.       battler = @action_battlers.shift
  675.       return nil unless battler
  676.       next unless battler.index && battler.alive?
  677.       @performed_battlers.push(battler)
  678.       return battler
  679.     end
  680.   end
  681.  
  682.   #--------------------------------------------------------------------------
  683.   # overwrite method: force_action
  684.   #--------------------------------------------------------------------------
  685.   def self.force_action(battler)
  686.     @action_forced = [] if @action_forced == nil
  687.     @action_forced.push(battler)
  688.     return unless Switch.forced_action_remove
  689.     @action_battlers.delete(battler)
  690.   end
  691.  
  692.   #--------------------------------------------------------------------------
  693.   # overwrite method: action_forced?
  694.   #--------------------------------------------------------------------------
  695.   def self.action_forced?
  696.     @action_forced != nil
  697.   end
  698.  
  699.   #--------------------------------------------------------------------------
  700.   # overwrite method: action_forced_battler
  701.   #--------------------------------------------------------------------------
  702.   def self.action_forced_battler
  703.     @action_forced.shift
  704.   end
  705.  
  706.   #--------------------------------------------------------------------------
  707.   # overwrite method: clear_action_force
  708.   #--------------------------------------------------------------------------
  709.   def self.clear_action_force
  710.     return if @action_forced.nil?
  711.     @action_forced = nil if @action_forced.empty?
  712.   end
  713.  
  714.   #--------------------------------------------------------------------------
  715.   # new method: self.init_battle_type
  716.   #--------------------------------------------------------------------------
  717.   def self.init_battle_type
  718.     set_btype($game_system.battle_system)
  719.   end
  720.  
  721.   #--------------------------------------------------------------------------
  722.   # new method: self.set_btype
  723.   #--------------------------------------------------------------------------
  724.   def self.set_btype(btype = :dtb)
  725.     @battle_type = btype
  726.   end
  727.  
  728.   #--------------------------------------------------------------------------
  729.   # new method: self.btype?
  730.   #--------------------------------------------------------------------------
  731.   def self.btype?(btype)
  732.     return @battle_type == btype
  733.   end
  734.  
  735. end # BattleManager
  736.  
  737. #==============================================================================
  738. # ¡ Game_System
  739. #==============================================================================
  740.  
  741. class Game_System
  742.  
  743.   #--------------------------------------------------------------------------
  744.   # new method: battle_system
  745.   #--------------------------------------------------------------------------
  746.   def battle_system
  747.     if @battle_system.nil?
  748.       return battle_system_corrected(YEA::BATTLE::DEFAULT_BATTLE_SYSTEM)
  749.     else
  750.       return battle_system_corrected(@battle_system)
  751.     end
  752.   end
  753.  
  754.   #--------------------------------------------------------------------------
  755.   # new method: set_battle_system
  756.   #--------------------------------------------------------------------------
  757.   def set_battle_system(type)
  758.     case type
  759.     when :dtb; @battle_system = :dtb
  760.     when :ftb; @battle_system = $imported["YEA-BattleSystem-FTB"] ? :ftb : :dtb
  761.     else;      @battle_system = :dtb
  762.     end
  763.   end
  764.  
  765.   #--------------------------------------------------------------------------
  766.   # new method: battle_system_corrected
  767.   #--------------------------------------------------------------------------
  768.   def battle_system_corrected(type)
  769.     case type
  770.     when :dtb; return :dtb
  771.     when :ftb; return $imported["YEA-BattleSystem-FTB"] ? :ftb : :dtb
  772.     else;      return :dtb
  773.     end
  774.   end
  775.  
  776. end # Game_System
  777.  
  778. #==============================================================================
  779. # ¡ Sprite_Base
  780. #==============================================================================
  781.  
  782. class Sprite_Base < Sprite
  783.  
  784.   #--------------------------------------------------------------------------
  785.   # new method: start_pseudo_animation
  786.   #--------------------------------------------------------------------------
  787.   unless $imported["YEA-CoreEngine"]
  788.   def start_pseudo_animation(animation, mirror = false)
  789.     dispose_animation
  790.     @animation = animation
  791.     return if @animation.nil?
  792.     @ani_mirror = mirror
  793.     set_animation_rate
  794.     @ani_duration = @animation.frame_max * @ani_rate + 1
  795.     @ani_sprites = []
  796.   end
  797.   end # $imported["YEA-CoreEngine"]
  798.  
  799. end # Sprite_Base
  800.  
  801. #==============================================================================
  802. # ¡ Sprite_Battler
  803. #==============================================================================
  804.  
  805. class Sprite_Battler < Sprite_Base
  806.  
  807.   #--------------------------------------------------------------------------
  808.   # public instance variables
  809.   #--------------------------------------------------------------------------
  810.   attr_accessor :effect_type
  811.   attr_accessor :battler_visible
  812.   attr_accessor :popups
  813.  
  814.   #--------------------------------------------------------------------------
  815.   # alias method: initialize
  816.   #--------------------------------------------------------------------------
  817.   alias sprite_battler_initialize_abe initialize
  818.   def initialize(viewport, battler = nil)
  819.     sprite_battler_initialize_abe(viewport, battler)
  820.     @popups = []
  821.     @popup_flags = []
  822.   end
  823.  
  824.   #--------------------------------------------------------------------------
  825.   # alias method: update_bitmap
  826.   #--------------------------------------------------------------------------
  827.   alias sprite_battler_update_bitmap_abe update_bitmap
  828.   def update_bitmap
  829.     return if @battler.actor? && @battler.battler_name == ""
  830.     sprite_battler_update_bitmap_abe
  831.   end
  832.  
  833.   #--------------------------------------------------------------------------
  834.   # alias method: setup_new_animation
  835.   #--------------------------------------------------------------------------
  836.   unless $imported["YEA-CoreEngine"]
  837.   alias sprite_battler_setup_new_animation_abe setup_new_animation
  838.   def setup_new_animation
  839.     sprite_battler_setup_new_animation_abe
  840.     return if @battler.pseudo_ani_id <= 0
  841.     animation = $data_animations[@battler.pseudo_ani_id]
  842.     mirror = @battler.animation_mirror
  843.     start_pseudo_animation(animation, mirror)
  844.     @battler.pseudo_ani_id = 0
  845.   end
  846.   end # $imported["YEA-CoreEngine"]
  847.  
  848.   #--------------------------------------------------------------------------
  849.   # alias method: setup_new_effect
  850.   #--------------------------------------------------------------------------
  851.   alias sprite_battler_setup_new_effect_abe setup_new_effect
  852.   def setup_new_effect
  853.     sprite_battler_setup_new_effect_abe
  854.     setup_popups
  855.   end
  856.  
  857.   #--------------------------------------------------------------------------
  858.   # new method: setup_popups
  859.   #--------------------------------------------------------------------------
  860.   def setup_popups
  861.     return unless @battler.use_sprite?
  862.     @battler.popups = [] if @battler.popups.nil?
  863.     return if @battler.popups == []
  864.     array = @battler.popups.shift
  865.     create_new_popup(array[0], array[1], array[2])
  866.   end
  867.  
  868.   #--------------------------------------------------------------------------
  869.   # new method: create_new_popup
  870.   #--------------------------------------------------------------------------
  871.   def create_new_popup(value, rules, flags)
  872.     return if @battler == nil
  873.     return if flags & @popup_flags != []
  874.     array = YEA::BATTLE::POPUP_RULES[rules]
  875.     for popup in @popups
  876.       popup.y -= 24
  877.     end
  878.     return unless SceneManager.scene.is_a?(Scene_Battle)
  879.     return if SceneManager.scene.spriteset.nil?
  880.     view = SceneManager.scene.spriteset.viewportPopups
  881.     new_popup = Sprite_Popup.new(view, @battler, value, rules, flags)
  882.     @popups.push(new_popup)
  883.     @popup_flags.push("weakness") if flags.include?("weakness")
  884.     @popup_flags.push("resistant") if flags.include?("resistant")
  885.     @popup_flags.push("immune") if flags.include?("immune")
  886.     @popup_flags.push("absorbed") if flags.include?("absorbed")
  887.   end
  888.  
  889.   #--------------------------------------------------------------------------
  890.   # alias method: update_effect
  891.   #--------------------------------------------------------------------------
  892.   alias sprite_battler_update_effect_abe update_effect
  893.   def update_effect
  894.     sprite_battler_update_effect_abe
  895.     update_popups
  896.   end
  897.  
  898.   #--------------------------------------------------------------------------
  899.   # new method: update_popups
  900.   #--------------------------------------------------------------------------
  901.   def update_popups
  902.     for popup in @popups
  903.       popup.update
  904.       next unless popup.opacity <= 0
  905.       popup.bitmap.dispose
  906.       popup.dispose
  907.       @popups.delete(popup)
  908.       popup = nil
  909.     end
  910.     @popup_flags = [] if @popups == [] && @popup_flags != []
  911.     return unless SceneManager.scene_is?(Scene_Battle)
  912.     if @current_active_battler != SceneManager.scene.subject
  913.       @current_active_battler = SceneManager.scene.subject
  914.       @popup_flags = []
  915.     end
  916.   end
  917.  
  918. end # Sprite_Battler
  919.  
  920. #==============================================================================
  921. # ¡ Sprite_Popup
  922. #==============================================================================
  923.  
  924. class Sprite_Popup < Sprite_Base
  925.  
  926.   #--------------------------------------------------------------------------
  927.   # public instance variables
  928.   #--------------------------------------------------------------------------
  929.   attr_accessor :flags
  930.  
  931.   #--------------------------------------------------------------------------
  932.   # initialize
  933.   #--------------------------------------------------------------------------
  934.   def initialize(viewport, battler, value, rules, flags)
  935.     super(viewport)
  936.     @value = value
  937.     @rules = rules
  938.     @rules = "DEFAULT" unless YEA::BATTLE::POPUP_RULES.include?(@rules)
  939.     @fade = YEA::BATTLE::POPUP_SETTINGS[:fade]
  940.     @full = YEA::BATTLE::POPUP_SETTINGS[:full]
  941.     @flags = flags
  942.     @battler = battler
  943.     create_popup_bitmap
  944.   end
  945.  
  946.   #--------------------------------------------------------------------------
  947.   # create_popup_bitmap
  948.   #--------------------------------------------------------------------------
  949.   def create_popup_bitmap
  950.     rules_array = YEA::BATTLE::POPUP_RULES[@rules]
  951.     bw = Graphics.width
  952.     bw += 48 if @flags.include?("state")
  953.     bh = Font.default_size * 3
  954.     bitmap = Bitmap.new(bw, bh)
  955.     bitmap.font.name = rules_array[8]
  956.     size = @flags.include?("critical") ? rules_array[2] * 1.2 : rules_array[2]
  957.     bitmap.font.size = size
  958.     bitmap.font.bold = rules_array[3]
  959.     bitmap.font.italic = rules_array[4]
  960.     if flags.include?("critical")
  961.       crit = YEA::BATTLE::POPUP_RULES["CRITICAL"]
  962.       bitmap.font.out_color.set(crit[5], crit[6], crit[7], 255)
  963.     else
  964.       bitmap.font.out_color.set(0, 0, 0, 255)
  965.     end
  966.     dx = 0; dy = 0; dw = 0
  967.     dx += 24 if @flags.include?("state")
  968.     dw += 24 if @flags.include?("state")
  969.     if @flags.include?("state") || @flags.include?("buff")
  970.       c_width = bitmap.text_size(@value).width
  971.       icon_bitmap = $game_temp.iconset
  972.       icon_index = flag_state_icon
  973.       rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  974.       bitmap.blt(dx+(bw-c_width)/2-36, (bh - 24)/2, icon_bitmap, rect, 255)
  975.     end
  976.     bitmap.font.color.set(rules_array[5], rules_array[6], rules_array[7])
  977.     bitmap.draw_text(dx, dy, bw-dw, bh, @value, 1)
  978.     self.bitmap = bitmap
  979.     self.x = @battler.screen_x
  980.     self.x += rand(4) - rand(4) if @battler.sprite.popups.size >= 1
  981.     self.x -= SceneManager.scene.spriteset.viewport1.ox
  982.     self.y = @battler.screen_y - @battler.sprite.oy/2
  983.     self.y -= @battler.sprite.oy/2 if @battler.actor?
  984.     self.y -= SceneManager.scene.spriteset.viewport1.oy
  985.     self.ox = bw/2; self.oy = bh/2
  986.     self.zoom_x = self.zoom_y = rules_array[0]
  987.     if @flags.include?("no zoom")
  988.       self.zoom_x = self.zoom_y = rules_array[1]
  989.     end
  990.     @target_zoom = rules_array[1]
  991.     @zoom_direction = (self.zoom_x > @target_zoom) ? "down" : "up"
  992.     self.z = 500
  993.   end
  994.  
  995.   #--------------------------------------------------------------------------
  996.   # update
  997.   #--------------------------------------------------------------------------
  998.   def update
  999.     super
  1000.     #---
  1001.     if @flags.include?("critical") && YEA::BATTLE::FLASH_CRITICAL
  1002.       @hue_duration = 2 if @hue_duration == nil || @hue_duration == 0
  1003.       @hue_duration -= 1
  1004.       self.bitmap.hue_change(15) if @hue_duration <= 0
  1005.     end
  1006.     #---
  1007.     if @zoom_direction == "up"
  1008.       self.zoom_x = [self.zoom_x + 0.075, @target_zoom].min
  1009.       self.zoom_y = [self.zoom_y + 0.075, @target_zoom].min
  1010.     else
  1011.       self.zoom_x = [self.zoom_x - 0.075, @target_zoom].max
  1012.       self.zoom_y = [self.zoom_y - 0.075, @target_zoom].max
  1013.     end
  1014.     #---
  1015.     @full -= 1
  1016.     return if @full > 0
  1017.     self.y -= 1
  1018.     self.opacity -= @fade
  1019.   end
  1020.  
  1021.   #--------------------------------------------------------------------------
  1022.   # flag_state_icon
  1023.   #--------------------------------------------------------------------------
  1024.   def flag_state_icon
  1025.     for item in @flags; return item if item.is_a?(Integer); end
  1026.     return 0
  1027.   end
  1028.  
  1029. end # Sprite_Popup
  1030.  
  1031. #==============================================================================
  1032. # ¡ Spriteset_Battle
  1033. #==============================================================================
  1034.  
  1035. class Spriteset_Battle
  1036.  
  1037.   #--------------------------------------------------------------------------
  1038.   # public instance variables
  1039.   #--------------------------------------------------------------------------
  1040.   attr_accessor :actor_sprites
  1041.   attr_accessor :enemy_sprites
  1042.   attr_accessor :viewport1
  1043.   attr_accessor :viewportPopups
  1044.  
  1045.   #--------------------------------------------------------------------------
  1046.   # alias method: create_viewports
  1047.   #--------------------------------------------------------------------------
  1048.   alias spriteset_battle_create_viewports_abe create_viewports
  1049.   def create_viewports
  1050.     spriteset_battle_create_viewports_abe
  1051.     @viewportPopups = Viewport.new
  1052.     @viewportPopups.z = 200
  1053.   end
  1054.  
  1055.   #--------------------------------------------------------------------------
  1056.   # alias method: dispose_viewports
  1057.   #--------------------------------------------------------------------------
  1058.   alias spriteset_battle_dispose_viewports_abe dispose_viewports
  1059.   def dispose_viewports
  1060.     spriteset_battle_dispose_viewports_abe
  1061.     @viewportPopups.dispose
  1062.   end
  1063.  
  1064.   #--------------------------------------------------------------------------
  1065.   # alias method: update_viewports
  1066.   #--------------------------------------------------------------------------
  1067.   alias spriteset_battle_update_viewports_abe update_viewports
  1068.   def update_viewports
  1069.     spriteset_battle_update_viewports_abe
  1070.     @viewportPopups.update
  1071.   end
  1072.  
  1073. end # Spriteset_Battle
  1074.  
  1075. #==============================================================================
  1076. # ¡ Game_Temp
  1077. #==============================================================================
  1078.  
  1079. class Game_Temp
  1080.  
  1081.   #--------------------------------------------------------------------------
  1082.   # public instance variables
  1083.   #--------------------------------------------------------------------------
  1084.   attr_accessor :battle_aid
  1085.   attr_accessor :evaluating
  1086.   attr_accessor :iconset
  1087.  
  1088.   #--------------------------------------------------------------------------
  1089.   # alias method: initialize
  1090.   #--------------------------------------------------------------------------
  1091.   alias game_temp_initialize_abe initialize
  1092.   def initialize
  1093.     game_temp_initialize_abe
  1094.     @iconset = Cache.system("Iconset")
  1095.   end
  1096.  
  1097. end # Game_Temp
  1098.  
  1099. #==============================================================================
  1100. # ¡ Game_Action
  1101. #==============================================================================
  1102.  
  1103. class Game_Action
  1104.  
  1105.   #--------------------------------------------------------------------------
  1106.   # overwrite method: speed
  1107.   #--------------------------------------------------------------------------
  1108.   def speed
  1109.     speed = subject.agi
  1110.     speed += item.speed if item
  1111.     speed += subject.atk_speed if attack?
  1112.     return speed
  1113.   end
  1114.  
  1115.   #--------------------------------------------------------------------------
  1116.   # alias method: evaluate_item_with_target
  1117.   #--------------------------------------------------------------------------
  1118.   alias evaluate_item_with_target_abe evaluate_item_with_target
  1119.   def evaluate_item_with_target(target)
  1120.     $game_temp.evaluating = true
  1121.     result = evaluate_item_with_target_abe(target)
  1122.     $game_temp.evaluating = false
  1123.     return result
  1124.   end
  1125.  
  1126. end # Game_Action
  1127.  
  1128. #==============================================================================
  1129. # ¡ Game_ActionResult
  1130. #==============================================================================
  1131.  
  1132. class Game_ActionResult
  1133.  
  1134.   #--------------------------------------------------------------------------
  1135.   # alias method: clear
  1136.   #--------------------------------------------------------------------------
  1137.   alias game_actionresult_clear_abe clear
  1138.   def clear
  1139.     game_actionresult_clear_abe
  1140.     clear_stored_damage
  1141.   end
  1142.  
  1143.   #--------------------------------------------------------------------------
  1144.   # new method: clear_stored_damage
  1145.   #--------------------------------------------------------------------------
  1146.   def clear_stored_damage
  1147.     @stored_hp_damage = 0
  1148.     @stored_mp_damage = 0
  1149.     @stored_tp_damage = 0
  1150.     @stored_hp_drain = 0
  1151.     @stored_mp_drain = 0
  1152.   end
  1153.  
  1154.   #--------------------------------------------------------------------------
  1155.   # new method: store_damage
  1156.   #--------------------------------------------------------------------------
  1157.   def store_damage
  1158.     @stored_hp_damage += @hp_damage
  1159.     @stored_mp_damage += @mp_damage
  1160.     @stored_tp_damage += @tp_damage
  1161.     @stored_hp_drain += @hp_drain
  1162.     @stored_mp_drain += @mp_drain
  1163.   end
  1164.  
  1165.   #--------------------------------------------------------------------------
  1166.   # new method: restore_damage
  1167.   #--------------------------------------------------------------------------
  1168.   def restore_damage
  1169.     @hp_damage = @stored_hp_damage
  1170.     @mp_damage = @stored_mp_damage
  1171.     @tp_damage = @stored_tp_damage
  1172.     @hp_drain = @stored_hp_drain
  1173.     @mp_drain = @stored_mp_drain
  1174.     clear_stored_damage
  1175.   end
  1176.  
  1177. end # Game_ActionResult
  1178.  
  1179. #==============================================================================
  1180. # ¡ Game_BattlerBase
  1181. #==============================================================================
  1182.  
  1183. class Game_BattlerBase
  1184.  
  1185.   #--------------------------------------------------------------------------
  1186.   # public instance variables
  1187.   #--------------------------------------------------------------------------
  1188.   attr_accessor :popups
  1189.  
  1190.   #--------------------------------------------------------------------------
  1191.   # new method: create_popup
  1192.   #--------------------------------------------------------------------------
  1193.   def create_popup(value, rules = "DEFAULT", flags = [])
  1194.     return unless SceneManager.scene_is?(Scene_Battle)
  1195.     return unless YEA::BATTLE::ENABLE_POPUPS
  1196.     return if Switch.hide_popups
  1197.     @popups = [] if @popups.nil?
  1198.     @popups.push([value, rules, flags])
  1199.   end
  1200.  
  1201.   #--------------------------------------------------------------------------
  1202.   # new method: make_damage_popups
  1203.   #--------------------------------------------------------------------------
  1204.   def make_damage_popups(user)
  1205.     if @result.hp_drain != 0
  1206.       text = YEA::BATTLE::POPUP_SETTINGS[:drained]
  1207.       rules = "DRAIN"
  1208.       user.create_popup(text, rules)
  1209.       setting = :hp_dmg  if @result.hp_drain < 0
  1210.       setting = :hp_heal if @result.hp_drain > 0
  1211.       rules = "HP_DMG"   if @result.hp_drain < 0
  1212.       rules = "HP_HEAL"  if @result.hp_drain > 0
  1213.       value = @result.hp_drain.abs
  1214.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group)
  1215.       user.create_popup(text, rules)
  1216.     end
  1217.     if @result.mp_drain != 0
  1218.       text = YEA::BATTLE::POPUP_SETTINGS[:drained]
  1219.       rules = "DRAIN"
  1220.       user.create_popup(text, rules)
  1221.       setting = :mp_dmg  if @result.mp_drain < 0
  1222.       setting = :mp_heal if @result.mp_drain > 0
  1223.       rules = "HP_DMG"   if @result.mp_drain < 0
  1224.       rules = "HP_HEAL"  if @result.mp_drain > 0
  1225.       value = @result.mp_drain.abs
  1226.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group)
  1227.       user.create_popup(text, rules)
  1228.     end
  1229.     #---
  1230.     flags = []
  1231.     flags.push("critical") if @result.critical
  1232.     if @result.hp_damage != 0
  1233.       setting = :hp_dmg  if @result.hp_damage > 0
  1234.       setting = :hp_heal if @result.hp_damage < 0
  1235.       rules = "HP_DMG"   if @result.hp_damage > 0
  1236.       rules = "HP_HEAL"  if @result.hp_damage < 0
  1237.       value = @result.hp_damage.abs
  1238.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group)
  1239.       create_popup(text, rules, flags)
  1240.     end
  1241.     if @result.mp_damage != 0
  1242.       setting = :mp_dmg  if @result.mp_damage > 0
  1243.       setting = :mp_heal if @result.mp_damage < 0
  1244.       rules = "MP_DMG"   if @result.mp_damage > 0
  1245.       rules = "MP_HEAL"  if @result.mp_damage < 0
  1246.       value = @result.mp_damage.abs
  1247.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group)
  1248.       create_popup(text, rules, flags)
  1249.     end
  1250.     if @result.tp_damage != 0
  1251.       setting = :tp_dmg  if @result.tp_damage > 0
  1252.       setting = :tp_heal if @result.tp_damage < 0
  1253.       rules = "TP_DMG"   if @result.tp_damage > 0
  1254.       rules = "TP_HEAL"  if @result.tp_damage < 0
  1255.       value = @result.tp_damage.abs
  1256.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[setting], value.group)
  1257.       create_popup(text, rules)
  1258.     end
  1259.     @result.store_damage
  1260.     @result.clear_damage_values
  1261.   end
  1262.  
  1263.   #--------------------------------------------------------------------------
  1264.   # alias method: erase_state
  1265.   #--------------------------------------------------------------------------
  1266.   alias game_battlerbase_erase_state_abe erase_state
  1267.   def erase_state(state_id)
  1268.     make_state_popup(state_id, :rem_state) if @states.include?(state_id)
  1269.     game_battlerbase_erase_state_abe(state_id)
  1270.   end
  1271.  
  1272.   #--------------------------------------------------------------------------
  1273.   # new method: make_during_state_popup
  1274.   #--------------------------------------------------------------------------
  1275.   def make_during_state_popup
  1276.     state_id = most_important_state_id
  1277.     return if state_id == 0
  1278.     make_state_popup(state_id, :dur_state)
  1279.   end
  1280.  
  1281.   #--------------------------------------------------------------------------
  1282.   # new method: most_important_state_id
  1283.   #--------------------------------------------------------------------------
  1284.   def most_important_state_id
  1285.     states.each {|state| return state.id unless state.message3.empty? }
  1286.     return 0
  1287.   end
  1288.  
  1289.   #--------------------------------------------------------------------------
  1290.   # new method: make_state_popup
  1291.   #--------------------------------------------------------------------------
  1292.   def make_state_popup(state_id, type)
  1293.     state = $data_states[state_id]
  1294.     return if state.icon_index == 0
  1295.     rules = state.popup_rules[type]
  1296.     return if rules.nil?
  1297.     text = sprintf(YEA::BATTLE::POPUP_SETTINGS[type], state.name)
  1298.     flags = ["state", state.icon_index]
  1299.     create_popup(text, rules, flags)
  1300.   end
  1301.  
  1302.   #--------------------------------------------------------------------------
  1303.   # new method: make_miss_popups
  1304.   #--------------------------------------------------------------------------
  1305.   def make_miss_popups(user, item)
  1306.     return if dead?
  1307.     if @result.missed
  1308.       text = YEA::BATTLE::POPUP_SETTINGS[:missed]
  1309.       rules = "DEFAULT"
  1310.       create_popup(text, rules)
  1311.     end
  1312.     if @result.evaded
  1313.       text = YEA::BATTLE::POPUP_SETTINGS[:evaded]
  1314.       rules = "DEFAULT"
  1315.       create_popup(text, rules)
  1316.     end
  1317.     if @result.hit? && !@result.success
  1318.       text = YEA::BATTLE::POPUP_SETTINGS[:failed]
  1319.       rules = "DEFAULT"
  1320.       create_popup(text, rules)
  1321.     end
  1322.     if @result.hit? && item.damage.to_hp?
  1323.       if @result.hp_damage == 0 && @result.hp_damage == 0
  1324.         text = YEA::BATTLE::POPUP_SETTINGS[:nulled]
  1325.         rules = "DEFAULT"
  1326.         create_popup(text, rules)
  1327.       end
  1328.     end
  1329.   end
  1330.  
  1331.   #--------------------------------------------------------------------------
  1332.   # new method: make_rate_popup
  1333.   #--------------------------------------------------------------------------
  1334.   def make_rate_popup(rate)
  1335.     return if rate == 1.0
  1336.     flags = []
  1337.     if rate > 1.0
  1338.       text = YEA::BATTLE::POPUP_SETTINGS[:weakpoint]
  1339.       rules = "WEAK_ELE"
  1340.       flags.push("weakness")
  1341.     elsif rate == 0.0
  1342.       text = YEA::BATTLE::POPUP_SETTINGS[:immune]
  1343.       rules = "IMMU_ELE"
  1344.       flags.push("immune")
  1345.     elsif rate < 0.0
  1346.       text = YEA::BATTLE::POPUP_SETTINGS[:absorbed]
  1347.       rules = "ABSB_ELE"
  1348.       flags.push("absorbed")
  1349.     else
  1350.       text = YEA::BATTLE::POPUP_SETTINGS[:resistant]
  1351.       rules = "REST_ELE"
  1352.       flags.push("resistant")
  1353.     end
  1354.     create_popup(text, rules, flags)
  1355.   end
  1356.  
  1357.   #--------------------------------------------------------------------------
  1358.   # new method: make_buff_popup
  1359.   #--------------------------------------------------------------------------
  1360.   def make_buff_popup(param_id, positive = true)
  1361.     return unless SceneManager.scene_is?(Scene_Battle)
  1362.     return unless alive?
  1363.     name = Vocab::param(param_id)
  1364.     if positive
  1365.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[:add_buff], name)
  1366.       rules = "BUFF"
  1367.       buff_level = 1
  1368.     else
  1369.       text = sprintf(YEA::BATTLE::POPUP_SETTINGS[:add_debuff], name)
  1370.       rules = "DEBUFF"
  1371.       buff_level = -1
  1372.     end
  1373.     icon = buff_icon_index(buff_level, param_id)
  1374.     flags = ["buff", icon]
  1375.     return if @popups.include?([text, rules, flags])
  1376.     create_popup(text, rules, flags)
  1377.   end
  1378.  
  1379. end # Game_BattlerBase
  1380.  
  1381. #==============================================================================
  1382. # ¡ Game_Battler
  1383. #==============================================================================
  1384.  
  1385. class Game_Battler < Game_BattlerBase
  1386.  
  1387.   #--------------------------------------------------------------------------
  1388.   # public instance variables
  1389.   #--------------------------------------------------------------------------
  1390.   attr_accessor :pseudo_ani_id
  1391.  
  1392.   #--------------------------------------------------------------------------
  1393.   # alias method: on_battle_end
  1394.   #--------------------------------------------------------------------------
  1395.   alias game_battler_on_battle_end_abe on_battle_end
  1396.   def on_battle_end
  1397.     game_battler_on_battle_end_abe
  1398.     @popups = []
  1399.   end
  1400.  
  1401.   #--------------------------------------------------------------------------
  1402.   # alias method: clear_sprite_effects
  1403.   #--------------------------------------------------------------------------
  1404.   alias game_battler_clear_sprite_effects_abe clear_sprite_effects
  1405.   def clear_sprite_effects
  1406.     game_battler_clear_sprite_effects_abe
  1407.     @pseudo_ani_id = 0
  1408.   end
  1409.  
  1410.   #--------------------------------------------------------------------------
  1411.   # alias method: item_apply
  1412.   #--------------------------------------------------------------------------
  1413.   alias game_battler_item_apply_abe item_apply
  1414.   def item_apply(user, item)
  1415.     game_battler_item_apply_abe(user, item)
  1416.     make_miss_popups(user, item)
  1417.   end
  1418.  
  1419.   #--------------------------------------------------------------------------
  1420.   # alias method: make_damage_value
  1421.   #--------------------------------------------------------------------------
  1422.   alias game_battler_make_damage_value_abe make_damage_value
  1423.   def make_damage_value(user, item)
  1424.     game_battler_make_damage_value_abe(user, item)
  1425.     rate = item_element_rate(user, item)
  1426.     make_rate_popup(rate) unless $game_temp.evaluating
  1427.   end
  1428.  
  1429.   #--------------------------------------------------------------------------
  1430.   # alias method: execute_damage
  1431.   #--------------------------------------------------------------------------
  1432.   alias game_battler_execute_damage_abe execute_damage
  1433.   def execute_damage(user)
  1434.     game_battler_execute_damage_abe(user)
  1435.     make_damage_popups(user)
  1436.   end
  1437.  
  1438.   #--------------------------------------------------------------------------
  1439.   # alias method: item_effect_recover_hp
  1440.   #--------------------------------------------------------------------------
  1441.   alias game_battler_item_effect_recover_hp_abe item_effect_recover_hp
  1442.   def item_effect_recover_hp(user, item, effect)
  1443.     game_battler_item_effect_recover_hp_abe(user, item, effect)
  1444.     make_damage_popups(user)
  1445.   end
  1446.  
  1447.   #--------------------------------------------------------------------------
  1448.   # alias method: item_effect_recover_mp
  1449.   #--------------------------------------------------------------------------
  1450.   alias game_battler_item_effect_recover_mp_abe item_effect_recover_mp
  1451.   def item_effect_recover_mp(user, item, effect)
  1452.     game_battler_item_effect_recover_mp_abe(user, item, effect)
  1453.     make_damage_popups(user)
  1454.   end
  1455.  
  1456.   #--------------------------------------------------------------------------
  1457.   # alias method: item_effect_gain_tp
  1458.   #--------------------------------------------------------------------------
  1459.   alias game_battler_item_effect_gain_tp_abe item_effect_gain_tp
  1460.   def item_effect_gain_tp(user, item, effect)
  1461.     game_battler_item_effect_gain_tp_abe(user, item, effect)
  1462.     make_damage_popups(user)
  1463.   end
  1464.  
  1465.   #--------------------------------------------------------------------------
  1466.   # alias method: item_user_effect
  1467.   #--------------------------------------------------------------------------
  1468.   alias game_battler_item_user_effect_abe item_user_effect
  1469.   def item_user_effect(user, item)
  1470.     game_battler_item_user_effect_abe(user, item)
  1471.     @result.restore_damage
  1472.   end
  1473.  
  1474.   #--------------------------------------------------------------------------
  1475.   # alias method: add_new_state
  1476.   #--------------------------------------------------------------------------
  1477.   alias game_battler_add_new_state_abe add_new_state
  1478.   def add_new_state(state_id)
  1479.     game_battler_add_new_state_abe(state_id)
  1480.     make_state_popup(state_id, :add_state) if @states.include?(state_id)
  1481.   end
  1482.  
  1483.   #--------------------------------------------------------------------------
  1484.   # alias method: add_buff
  1485.   #--------------------------------------------------------------------------
  1486.   alias game_battler_add_buff_abe add_buff
  1487.   def add_buff(param_id, turns)
  1488.     make_buff_popup(param_id, true)
  1489.     game_battler_add_buff_abe(param_id, turns)
  1490.   end
  1491.  
  1492.   #--------------------------------------------------------------------------
  1493.   # alias method: add_debuff
  1494.   #--------------------------------------------------------------------------
  1495.   alias game_battler_add_debuff_abe add_debuff
  1496.   def add_debuff(param_id, turns)
  1497.     make_buff_popup(param_id, false)
  1498.     game_battler_add_debuff_abe(param_id, turns)
  1499.   end
  1500.  
  1501.   #--------------------------------------------------------------------------
  1502.   # alias method: regenerate_all
  1503.   #--------------------------------------------------------------------------
  1504.   alias game_battler_regenerate_all_abe regenerate_all
  1505.   def regenerate_all
  1506.     game_battler_regenerate_all_abe
  1507.     return unless alive?
  1508.     make_damage_popups(self)
  1509.   end
  1510.  
  1511.   #--------------------------------------------------------------------------
  1512.   # new method: can_collapse?
  1513.   #--------------------------------------------------------------------------
  1514.   def can_collapse?
  1515.     return false unless dead?
  1516.     unless actor?
  1517.       return false unless sprite.battler_visible
  1518.       array = [:collapse, :boss_collapse, :instant_collapse]
  1519.       return false if array.include?(sprite.effect_type)
  1520.     end
  1521.     return true
  1522.   end
  1523.  
  1524.   #--------------------------------------------------------------------------
  1525.   # new method: draw_mp?
  1526.   #--------------------------------------------------------------------------
  1527.   def draw_mp?; return true; end
  1528.  
  1529.   #--------------------------------------------------------------------------
  1530.   # new method: draw_tp?
  1531.   #--------------------------------------------------------------------------
  1532.   def draw_tp?
  1533.     return $data_system.opt_display_tp
  1534.   end
  1535.  
  1536. end # Game_Battler
  1537.  
  1538. #==============================================================================
  1539. # ¡ Game_Actor
  1540. #==============================================================================
  1541.  
  1542. class Game_Actor < Game_Battler
  1543.  
  1544.   #--------------------------------------------------------------------------
  1545.   # overwrite method: perform_damage_effect
  1546.   #--------------------------------------------------------------------------
  1547.   def perform_damage_effect
  1548.     $game_troop.screen.start_shake(5, 5, 10) if YEA::BATTLE::SCREEN_SHAKE
  1549.     @sprite_effect_type = :blink if YEA::BATTLE::BLINK_EFFECTS
  1550.     Sound.play_actor_damage
  1551.   end
  1552.  
  1553.   #--------------------------------------------------------------------------
  1554.   # overwrite method: use_sprite?
  1555.   #--------------------------------------------------------------------------
  1556.   def use_sprite?; return true; end
  1557.  
  1558.   #--------------------------------------------------------------------------
  1559.   # new method: screen_x
  1560.   #--------------------------------------------------------------------------
  1561.   def screen_x
  1562.     return 0 unless SceneManager.scene_is?(Scene_Battle)
  1563.     status_window = SceneManager.scene.status_window
  1564.     return 0 if status_window.nil?
  1565.     item_rect_width = (status_window.width-24) / $game_party.max_battle_members
  1566.     ext = SceneManager.scene.info_viewport.ox
  1567.     rect = SceneManager.scene.status_window.item_rect(self.index)
  1568.     constant = 128 + 12
  1569.     return constant + rect.x + item_rect_width / 2 - ext
  1570.   end
  1571.  
  1572.   #--------------------------------------------------------------------------
  1573.   # new method: screen_y
  1574.   #--------------------------------------------------------------------------
  1575.   def screen_y
  1576.     return Graphics.height - 120 unless SceneManager.scene_is?(Scene_Battle)
  1577.     return Graphics.height - 120 if SceneManager.scene.status_window.nil?
  1578.     return Graphics.height - (SceneManager.scene.status_window.height * 7/8)
  1579.   end
  1580.  
  1581.   #--------------------------------------------------------------------------
  1582.   # new method: screen_z
  1583.   #--------------------------------------------------------------------------
  1584.   def screen_z; return 100; end
  1585.  
  1586.   #--------------------------------------------------------------------------
  1587.   # new method: sprite
  1588.   #--------------------------------------------------------------------------
  1589.   def sprite
  1590.     index = $game_party.battle_members.index(self)
  1591.     return SceneManager.scene.spriteset.actor_sprites[index]
  1592.   end
  1593.  
  1594.   #--------------------------------------------------------------------------
  1595.   # new method: draw_mp?
  1596.   #--------------------------------------------------------------------------
  1597.   def draw_mp?
  1598.     return true unless draw_tp?
  1599.     for skill in skills
  1600.       next unless added_skill_types.include?(skill.stype_id)
  1601.       return true if skill.mp_cost > 0
  1602.     end
  1603.     return false
  1604.   end
  1605.  
  1606.   #--------------------------------------------------------------------------
  1607.   # new method: draw_tp?
  1608.   #--------------------------------------------------------------------------
  1609.   def draw_tp?
  1610.     return false unless $data_system.opt_display_tp
  1611.     for skill in skills
  1612.       next unless added_skill_types.include?(skill.stype_id)
  1613.       return true if skill.tp_cost > 0
  1614.     end
  1615.     return false
  1616.   end
  1617.  
  1618.   #--------------------------------------------------------------------------
  1619.   # alias method: input
  1620.   #--------------------------------------------------------------------------
  1621.   alias game_actor_input_abe input
  1622.   def input
  1623.     if @actions.nil?
  1624.       make_actions
  1625.       @action_input_index = 0
  1626.     end
  1627.     if @actions[@action_input_index].nil?
  1628.       @actions[@action_input_index] = Game_Action.new(self)
  1629.     end
  1630.     return game_actor_input_abe
  1631.   end
  1632.  
  1633. end # Game_Actor
  1634.  
  1635. #==============================================================================
  1636. # ¡ Game_Enemy
  1637. #==============================================================================
  1638.  
  1639. class Game_Enemy < Game_Battler
  1640.  
  1641.   #--------------------------------------------------------------------------
  1642.   # overwrite method: perform_damage_effect
  1643.   #--------------------------------------------------------------------------
  1644.   def perform_damage_effect
  1645.     @sprite_effect_type = :blink if YEA::BATTLE::BLINK_EFFECTS
  1646.     Sound.play_enemy_damage
  1647.   end
  1648.  
  1649.   #--------------------------------------------------------------------------
  1650.   # new methods: attack_animation_id
  1651.   #--------------------------------------------------------------------------
  1652.   def atk_animation_id1; return enemy.atk_animation_id1; end
  1653.   def atk_animation_id2; return enemy.atk_animation_id2; end
  1654.  
  1655.   #--------------------------------------------------------------------------
  1656.   # new method: sprite
  1657.   #--------------------------------------------------------------------------
  1658.   def sprite
  1659.     return SceneManager.scene.spriteset.enemy_sprites.reverse[self.index]
  1660.   end
  1661.  
  1662. end # Game_Enemy
  1663.  
  1664. #==============================================================================
  1665. # ¡ Game_Unit
  1666. #==============================================================================
  1667.  
  1668. class Game_Unit
  1669.  
  1670.   #--------------------------------------------------------------------------
  1671.   # alias method: make_actions
  1672.   #--------------------------------------------------------------------------
  1673.   alias game_unit_make_actions_abe make_actions
  1674.   def make_actions
  1675.     game_unit_make_actions_abe
  1676.     refresh_autobattler_status_window
  1677.   end
  1678.  
  1679.   #--------------------------------------------------------------------------
  1680.   # new method: refresh_autobattler_status_window
  1681.   #--------------------------------------------------------------------------
  1682.   def refresh_autobattler_status_window
  1683.     return unless SceneManager.scene_is?(Scene_Battle)
  1684.     return unless self.is_a?(Game_Party)
  1685.     SceneManager.scene.refresh_autobattler_status_window
  1686.   end
  1687.  
  1688. end # Game_Unit
  1689.  
  1690. #==============================================================================
  1691. # ¡ Window_PartyCommand
  1692. #==============================================================================
  1693.  
  1694. class Window_PartyCommand < Window_Command
  1695.  
  1696.   #--------------------------------------------------------------------------
  1697.   # overwrite method: process_handling
  1698.   #--------------------------------------------------------------------------
  1699.   def process_handling
  1700.     return unless open? && active
  1701.     return process_dir6 if Input.repeat?(:RIGHT)
  1702.     return super
  1703.   end
  1704.  
  1705.   #--------------------------------------------------------------------------
  1706.   # new method: process_dir6
  1707.   #--------------------------------------------------------------------------
  1708.   def process_dir6
  1709.     Sound.play_cursor
  1710.     Input.update
  1711.     deactivate
  1712.     call_handler(:dir6)
  1713.   end
  1714.  
  1715. end # Window_PartyCommand
  1716.  
  1717. #==============================================================================
  1718. # ¡ Window_ActorCommand
  1719. #==============================================================================
  1720.  
  1721. class Window_ActorCommand < Window_Command
  1722.  
  1723.   #--------------------------------------------------------------------------
  1724.   # overwrite method: process_handling
  1725.   #--------------------------------------------------------------------------
  1726.   def process_handling
  1727.     return unless open? && active
  1728.     return process_dir4 if Input.repeat?(:LEFT)
  1729.     return process_dir6 if Input.repeat?(:RIGHT)
  1730.     return super
  1731.   end
  1732.  
  1733.   #--------------------------------------------------------------------------
  1734.   # new method: process_dir4
  1735.   #--------------------------------------------------------------------------
  1736.   def process_dir4
  1737.     Sound.play_cursor
  1738.     Input.update
  1739.     deactivate
  1740.     call_handler(:cancel)
  1741.   end
  1742.  
  1743.   #--------------------------------------------------------------------------
  1744.   # new method: process_dir6
  1745.   #--------------------------------------------------------------------------
  1746.   def process_dir6
  1747.     Sound.play_cursor
  1748.     Input.update
  1749.     deactivate
  1750.     call_handler(:dir6)
  1751.   end
  1752.  
  1753. end # Window_ActorCommand
  1754.  
  1755. #==============================================================================
  1756. # ¡ Window_BattleStatus
  1757. #==============================================================================
  1758.  
  1759. class Window_BattleStatus < Window_Selectable
  1760.  
  1761.   #--------------------------------------------------------------------------
  1762.   # overwrite method: initialize
  1763.   #--------------------------------------------------------------------------
  1764.   def initialize
  1765.     super(0, 0, window_width, window_height)
  1766.     self.openness = 0
  1767.     @party = $game_party.battle_members.clone
  1768.   end
  1769.  
  1770.   #--------------------------------------------------------------------------
  1771.   # overwrite method: col_max
  1772.   #--------------------------------------------------------------------------
  1773.   def col_max; return $game_party.max_battle_members; end
  1774.  
  1775.   #--------------------------------------------------------------------------
  1776.   # new method: battle_members
  1777.   #--------------------------------------------------------------------------
  1778.   def battle_members; return $game_party.battle_members; end
  1779.  
  1780.   #--------------------------------------------------------------------------
  1781.   # new method: actor
  1782.   #--------------------------------------------------------------------------
  1783.   def actor; return battle_members[@index]; end
  1784.  
  1785.   #--------------------------------------------------------------------------
  1786.   # overwrite method: update
  1787.   #--------------------------------------------------------------------------
  1788.   def update
  1789.     super
  1790.     return if @party == $game_party.battle_members
  1791.     @party = $game_party.battle_members.clone
  1792.     refresh
  1793.   end
  1794.  
  1795.   #--------------------------------------------------------------------------
  1796.   # overwrite method: draw_item
  1797.   #--------------------------------------------------------------------------
  1798.   def draw_item(index)
  1799.     return if index.nil?
  1800.     clear_item(index)
  1801.     actor = battle_members[index]
  1802.     rect = item_rect(index)
  1803.     return if actor.nil?
  1804.     draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)
  1805.     draw_actor_name(actor, rect.x, rect.y, rect.width-8)
  1806.     draw_actor_action(actor, rect.x, rect.y)
  1807.     draw_actor_icons(actor, rect.x, line_height*1, rect.width)
  1808.     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
  1809.     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
  1810.     draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4)
  1811.     if draw_tp?(actor) && draw_mp?(actor)
  1812.       dw = rect.width/2-2
  1813.       dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE
  1814.       draw_actor_tp(actor, rect.x+2, line_height*3, dw)
  1815.       dw = rect.width - rect.width/2 - 2
  1816.       draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw)
  1817.     elsif draw_tp?(actor) && !draw_mp?(actor)
  1818.       draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4)
  1819.     else
  1820.       draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4)
  1821.     end
  1822.   end
  1823.  
  1824.   #--------------------------------------------------------------------------
  1825.   # overwrite method: item_rect
  1826.   #--------------------------------------------------------------------------
  1827.   def item_rect(index)
  1828.     rect = Rect.new
  1829.     rect.width = contents.width / $game_party.max_battle_members
  1830.     rect.height = contents.height
  1831.     rect.x = index * rect.width
  1832.     if YEA::BATTLE::BATTLESTATUS_CENTER_FACES
  1833.       rect.x += (contents.width - $game_party.members.size * rect.width) / 2
  1834.     end
  1835.     rect.y = 0
  1836.     return rect
  1837.   end
  1838.  
  1839.   #--------------------------------------------------------------------------
  1840.   # overwrite method: draw_face
  1841.   #--------------------------------------------------------------------------
  1842.   def draw_face(face_name, face_index, dx, dy, enabled = true)
  1843.     bitmap = Cache.face(face_name)
  1844.     fx = [(96 - item_rect(0).width + 1) / 2, 0].max
  1845.     fy = face_index / 4 * 96 + 2
  1846.     fw = [item_rect(0).width - 4, 92].min
  1847.     rect = Rect.new(fx, fy, fw, 92)
  1848.     rect = Rect.new(face_index % 4 * 96 + fx, fy, fw, 92)
  1849.     contents.blt(dx, dy, bitmap, rect, enabled ? 255 : translucent_alpha)
  1850.     bitmap.dispose
  1851.   end
  1852.  
  1853.   #--------------------------------------------------------------------------
  1854.   # overwrite method: draw_actor_name
  1855.   #--------------------------------------------------------------------------
  1856.   def draw_actor_name(actor, dx, dy, dw = 112)
  1857.     reset_font_settings
  1858.     contents.font.size = YEA::BATTLE::BATTLESTATUS_NAME_FONT_SIZE
  1859.     change_color(hp_color(actor))
  1860.     draw_text(dx+24, dy, dw-24, line_height, actor.name)
  1861.   end
  1862.  
  1863.   #--------------------------------------------------------------------------
  1864.   # new method: draw_actor_action
  1865.   #--------------------------------------------------------------------------
  1866.   def draw_actor_action(actor, dx, dy)
  1867.     draw_icon(action_icon(actor), dx, dy)
  1868.   end
  1869.  
  1870.   #--------------------------------------------------------------------------
  1871.   # new method: action_icon
  1872.   #--------------------------------------------------------------------------
  1873.   def action_icon(actor)
  1874.     return Icon.no_action if actor.current_action.nil?
  1875.     return Icon.no_action if actor.current_action.item.nil?
  1876.     return actor.current_action.item.icon_index
  1877.   end
  1878.  
  1879.   #--------------------------------------------------------------------------
  1880.   # new method: draw_tp?
  1881.   #--------------------------------------------------------------------------
  1882.   def draw_tp?(actor)
  1883.     return actor.draw_tp?
  1884.   end
  1885.  
  1886.   #--------------------------------------------------------------------------
  1887.   # new method: draw_mp?
  1888.   #--------------------------------------------------------------------------
  1889.   def draw_mp?(actor)
  1890.     return actor.draw_mp?
  1891.   end
  1892.  
  1893.   #--------------------------------------------------------------------------
  1894.   # overwrite method: draw_current_and_max_values
  1895.   #--------------------------------------------------------------------------
  1896.   def draw_current_and_max_values(dx, dy, dw, current, max, color1, color2)
  1897.     change_color(color1)
  1898.     draw_text(dx, dy, dw, line_height, current.group, 2)
  1899.   end
  1900.  
  1901.   #--------------------------------------------------------------------------
  1902.   # overwrite method: draw_actor_hp
  1903.   #--------------------------------------------------------------------------
  1904.   def draw_actor_hp(actor, dx, dy, width = 124)
  1905.     draw_gauge(dx, dy, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
  1906.     change_color(system_color)
  1907.     cy = (Font.default_size - contents.font.size) / 2 + 1
  1908.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a)
  1909.     draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp,
  1910.       hp_color(actor), normal_color)
  1911.     end
  1912.  
  1913.   #--------------------------------------------------------------------------
  1914.   # overwrite method: draw_actor_mp
  1915.   #--------------------------------------------------------------------------
  1916.   def draw_actor_mp(actor, dx, dy, width = 124)
  1917.     draw_gauge(dx, dy, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
  1918.     change_color(system_color)
  1919.     cy = (Font.default_size - contents.font.size) / 2 + 1
  1920.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::mp_a)
  1921.     draw_current_and_max_values(dx, dy+cy, width, actor.mp, actor.mmp,
  1922.       mp_color(actor), normal_color)
  1923.     end
  1924.  
  1925.   #--------------------------------------------------------------------------
  1926.   # overwrite method: draw_actor_tp
  1927.   #--------------------------------------------------------------------------
  1928.   def draw_actor_tp(actor, dx, dy, width = 124)
  1929.     draw_gauge(dx, dy, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)
  1930.     change_color(system_color)
  1931.     cy = (Font.default_size - contents.font.size) / 2 + 1
  1932.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::tp_a)
  1933.     change_color(tp_color(actor))
  1934.     draw_text(dx + width - 42, dy+cy, 42, line_height, actor.tp.to_i, 2)
  1935.   end
  1936.  
  1937. end # Window_BattleStatus
  1938.  
  1939. #==============================================================================
  1940. # ¡ Window_BattleActor
  1941. #==============================================================================
  1942.  
  1943. class Window_BattleActor < Window_BattleStatus
  1944.  
  1945.   #--------------------------------------------------------------------------
  1946.   # overwrite method: show
  1947.   #--------------------------------------------------------------------------
  1948.   def show
  1949.     create_flags
  1950.     super
  1951.   end
  1952.  
  1953.   #--------------------------------------------------------------------------
  1954.   # new method: create_flags
  1955.   #--------------------------------------------------------------------------
  1956.   def create_flags
  1957.     set_select_flag(:any)
  1958.     select(0)
  1959.     return if $game_temp.battle_aid.nil?
  1960.     if $game_temp.battle_aid.need_selection?
  1961.       select(0)
  1962.       set_select_flag(:dead) if $game_temp.battle_aid.for_dead_friend?
  1963.     elsif $game_temp.battle_aid.for_user?
  1964.       battler = BattleManager.actor
  1965.       id = battler.nil? ? 0 : $game_party.battle_members.index(battler)
  1966.       select(id)
  1967.       set_select_flag(:user)
  1968.     elsif $game_temp.battle_aid.for_all?
  1969.       select(0)
  1970.       set_select_flag(:all)
  1971.       set_select_flag(:all_dead) if $game_temp.battle_aid.for_dead_friend?
  1972.     elsif $game_temp.battle_aid.for_random?
  1973.       select(0)
  1974.       set_select_flag(:random) if $game_temp.battle_aid.for_random?
  1975.     end
  1976.   end
  1977.  
  1978.   #--------------------------------------------------------------------------
  1979.   # new method: set_flag
  1980.   #--------------------------------------------------------------------------
  1981.   def set_select_flag(flag)
  1982.     @select_flag = flag
  1983.     case @select_flag
  1984.     when :all, :all_dead, :random
  1985.       @cursor_all = true
  1986.     else
  1987.       @cursor_all = false
  1988.     end
  1989.   end
  1990.  
  1991.   #--------------------------------------------------------------------------
  1992.   # overwrite method: update_cursor
  1993.   #--------------------------------------------------------------------------
  1994.   def update_cursor
  1995.     if @cursor_all
  1996.       cursor_rect.set(0, 0, contents.width, contents.height)
  1997.       self.top_row = 0
  1998.     elsif @index < 0
  1999.       cursor_rect.empty
  2000.     else
  2001.       ensure_cursor_visible
  2002.       cursor_rect.set(item_rect(@index))
  2003.     end
  2004.   end
  2005.  
  2006.   #--------------------------------------------------------------------------
  2007.   # overwrite method: cursor_movable?
  2008.   #--------------------------------------------------------------------------
  2009.   def cursor_movable?
  2010.     return false if @select_flag == :user
  2011.     return super
  2012.   end
  2013.  
  2014.   #--------------------------------------------------------------------------
  2015.   # overwrite method: current_item_enabled?
  2016.   #--------------------------------------------------------------------------
  2017.   def current_item_enabled?
  2018.     return true if $game_temp.battle_aid.nil?
  2019.     if $game_temp.battle_aid.need_selection?
  2020.       member = $game_party.battle_members[@index]
  2021.       return member.dead? if $game_temp.battle_aid.for_dead_friend?
  2022.     elsif $game_temp.battle_aid.for_dead_friend?
  2023.       for member in $game_party.battle_members
  2024.         return true if member.dead?
  2025.       end
  2026.       return false
  2027.     end
  2028.     return true
  2029.   end
  2030.  
  2031. end # Window_BattleActor
  2032.  
  2033. #==============================================================================
  2034. # ¡ Window_BattleStatusAid
  2035. #==============================================================================
  2036.  
  2037. class Window_BattleStatusAid < Window_BattleStatus
  2038.  
  2039.   #--------------------------------------------------------------------------
  2040.   # public instance variables
  2041.   #--------------------------------------------------------------------------
  2042.   attr_accessor :status_window
  2043.  
  2044.   #--------------------------------------------------------------------------
  2045.   # overwrite method: initialize
  2046.   #--------------------------------------------------------------------------
  2047.   def initialize
  2048.     super
  2049.     self.visible = false
  2050.     self.openness = 255
  2051.   end
  2052.  
  2053.   #--------------------------------------------------------------------------
  2054.   # overwrite method: window_width
  2055.   #--------------------------------------------------------------------------
  2056.   def window_width; return 128; end
  2057.  
  2058.   #--------------------------------------------------------------------------
  2059.   # overwrite method: show
  2060.   #--------------------------------------------------------------------------
  2061.   def show
  2062.     super
  2063.     refresh
  2064.   end
  2065.  
  2066.   #--------------------------------------------------------------------------
  2067.   # overwrite method: refresh
  2068.   #--------------------------------------------------------------------------
  2069.   def refresh
  2070.     contents.clear
  2071.     return if @status_window.nil?
  2072.     draw_item(@status_window.index)
  2073.   end
  2074.  
  2075.   #--------------------------------------------------------------------------
  2076.   # overwrite method: item_rect
  2077.   #--------------------------------------------------------------------------
  2078.   def item_rect(index)
  2079.     return Rect.new(0, 0, contents.width, contents.height)
  2080.   end
  2081.  
  2082. end # Window_BattleStatusAid
  2083.  
  2084. #==============================================================================
  2085. # ¡ Window_BattleEnemy
  2086. #==============================================================================
  2087.  
  2088. class Window_BattleEnemy < Window_Selectable
  2089.  
  2090.   #--------------------------------------------------------------------------
  2091.   # overwrite method: initialize
  2092.   #--------------------------------------------------------------------------
  2093.   def initialize(info_viewport)
  2094.     super(0, Graphics.height, window_width, fitting_height(1))
  2095.     refresh
  2096.     self.visible = false
  2097.     @info_viewport = info_viewport
  2098.   end
  2099.  
  2100.   #--------------------------------------------------------------------------
  2101.   # overwrite method: col_max
  2102.   #--------------------------------------------------------------------------
  2103.   def col_max; return item_max; end
  2104.  
  2105.   #--------------------------------------------------------------------------
  2106.   # overwrite method: show
  2107.   #--------------------------------------------------------------------------
  2108.   def show
  2109.     create_flags
  2110.     super
  2111.   end
  2112.  
  2113.   #--------------------------------------------------------------------------
  2114.   # new method: create_flags
  2115.   #--------------------------------------------------------------------------
  2116.   def create_flags
  2117.     set_select_flag(:any)
  2118.     select(0)
  2119.     return if $game_temp.battle_aid.nil?
  2120.     if $game_temp.battle_aid.need_selection?
  2121.       select(0)
  2122.     elsif $game_temp.battle_aid.for_all?
  2123.       select(0)
  2124.       set_select_flag(:all)
  2125.     elsif $game_temp.battle_aid.for_random?
  2126.       select(0)
  2127.       set_select_flag(:random)
  2128.     end
  2129.   end
  2130.  
  2131.   #--------------------------------------------------------------------------
  2132.   # new method: set_flag
  2133.   #--------------------------------------------------------------------------
  2134.   def set_select_flag(flag)
  2135.     @select_flag = flag
  2136.     case @select_flag
  2137.     when :all, :random
  2138.       @cursor_all = true
  2139.     else
  2140.       @cursor_all = false
  2141.     end
  2142.   end
  2143.  
  2144.   #--------------------------------------------------------------------------
  2145.   # new method: select_all?
  2146.   #--------------------------------------------------------------------------
  2147.   def select_all?
  2148.     return true if @select_flag == :all
  2149.     return true if @select_flag == :random
  2150.     return false
  2151.   end
  2152.  
  2153.   #--------------------------------------------------------------------------
  2154.   # overwrite method: update_cursor
  2155.   #--------------------------------------------------------------------------
  2156.   def update_cursor
  2157.     if @cursor_all
  2158.       cursor_rect.set(0, 0, contents.width, contents.height)
  2159.       self.top_row = 0
  2160.     elsif @index < 0
  2161.       cursor_rect.empty
  2162.     else
  2163.       ensure_cursor_visible
  2164.       cursor_rect.set(item_rect(@index))
  2165.     end
  2166.   end
  2167.  
  2168.   #--------------------------------------------------------------------------
  2169.   # overwrite method: cursor_movable?
  2170.   #--------------------------------------------------------------------------
  2171.   def cursor_movable?
  2172.     return false if @select_flag == :user
  2173.     return super
  2174.   end
  2175.  
  2176.   #--------------------------------------------------------------------------
  2177.   # overwrite method: current_item_enabled?
  2178.   #--------------------------------------------------------------------------
  2179.   def current_item_enabled?
  2180.     return true if $game_temp.battle_aid.nil?
  2181.     if $game_temp.battle_aid.need_selection?
  2182.       member = $game_party.battle_members[@index]
  2183.       return member.dead? if $game_temp.battle_aid.for_dead_friend?
  2184.     elsif $game_temp.battle_aid.for_dead_friend?
  2185.       for member in $game_party.battle_members
  2186.         return true if member.dead?
  2187.       end
  2188.       return false
  2189.     end
  2190.     return true
  2191.   end
  2192.  
  2193.   #--------------------------------------------------------------------------
  2194.   # overwrite method: enemy
  2195.   #--------------------------------------------------------------------------
  2196.   def enemy; @data[index]; end
  2197.  
  2198.   #--------------------------------------------------------------------------
  2199.   # overwrite method: refresh
  2200.   #--------------------------------------------------------------------------
  2201.   def refresh
  2202.     make_item_list
  2203.     create_contents
  2204.     draw_all_items
  2205.   end
  2206.  
  2207.   #--------------------------------------------------------------------------
  2208.   # overwrite method: make_item_list
  2209.   #--------------------------------------------------------------------------
  2210.   def make_item_list
  2211.     @data = $game_troop.alive_members
  2212.     @data.sort! { |a,b| a.screen_x <=> b.screen_x }
  2213.   end
  2214.  
  2215.   #--------------------------------------------------------------------------
  2216.   # overwrite method: draw_item
  2217.   #--------------------------------------------------------------------------
  2218.   def draw_item(index); return; end
  2219.  
  2220.   #--------------------------------------------------------------------------
  2221.   # overwrite method: update
  2222.   #--------------------------------------------------------------------------
  2223.   def update
  2224.     super
  2225.     return unless active
  2226.     enemy.sprite_effect_type = :whiten
  2227.     return unless select_all?
  2228.     for enemy in $game_troop.alive_members
  2229.       enemy.sprite_effect_type = :whiten
  2230.     end
  2231.   end
  2232.  
  2233. end # Window_BattleEnemy
  2234.  
  2235. #==============================================================================
  2236. # ¡ Window_BattleHelp
  2237. #==============================================================================
  2238.  
  2239. class Window_BattleHelp < Window_Help
  2240.  
  2241.   #--------------------------------------------------------------------------
  2242.   # public instance variables
  2243.   #--------------------------------------------------------------------------
  2244.   attr_accessor :actor_window
  2245.   attr_accessor :enemy_window
  2246.  
  2247.   #--------------------------------------------------------------------------
  2248.   # update
  2249.   #--------------------------------------------------------------------------
  2250.   def update
  2251.     super
  2252.     if !self.visible and @text != ""
  2253.       @text = ""
  2254.       return refresh
  2255.     end
  2256.     update_battler_name
  2257.   end
  2258.  
  2259.   #--------------------------------------------------------------------------
  2260.   # update_battler_name
  2261.   #--------------------------------------------------------------------------
  2262.   def update_battler_name
  2263.     return unless @actor_window.active || @enemy_window.active
  2264.     if @actor_window.active
  2265.       battler = $game_party.battle_members[@actor_window.index]
  2266.     elsif @enemy_window.active
  2267.       battler = @enemy_window.enemy
  2268.     end
  2269.     if special_display?
  2270.       refresh_special_case(battler)
  2271.     else
  2272.       refresh_battler_name(battler) if battler_name(battler) != @text
  2273.     end
  2274.   end
  2275.  
  2276.   #--------------------------------------------------------------------------
  2277.   # battler_name
  2278.   #--------------------------------------------------------------------------
  2279.   def battler_name(battler)
  2280.     text = battler.name.clone
  2281.     return text
  2282.   end
  2283.  
  2284.   #--------------------------------------------------------------------------
  2285.   # refresh_battler_name
  2286.   #--------------------------------------------------------------------------
  2287.   def refresh_battler_name(battler)
  2288.     contents.clear
  2289.     reset_font_settings
  2290.     change_color(normal_color)
  2291.     @text = battler_name(battler)
  2292.     icons = battler.state_icons + battler.buff_icons
  2293.     dy = icons.size <= 0 ? line_height / 2 : 0
  2294.     draw_text(0, dy, contents.width, line_height, @text, 1)
  2295.     dx = (contents.width - (icons.size * 24)) / 2
  2296.     draw_actor_icons(battler, dx, line_height, contents.width)
  2297.   end
  2298.  
  2299.   #--------------------------------------------------------------------------
  2300.   # special_display?
  2301.   #--------------------------------------------------------------------------
  2302.   def special_display?
  2303.     return false if $game_temp.battle_aid.nil?
  2304.     return false if $game_temp.battle_aid.for_user?
  2305.     return !$game_temp.battle_aid.need_selection?
  2306.   end
  2307.  
  2308.   #--------------------------------------------------------------------------
  2309.   # refresh_special_case
  2310.   #--------------------------------------------------------------------------
  2311.   def refresh_special_case(battler)
  2312.     if $game_temp.battle_aid.for_opponent?
  2313.       if $game_temp.battle_aid.for_all?
  2314.         text = YEA::BATTLE::HELP_TEXT_ALL_FOES
  2315.       else
  2316.         case $game_temp.battle_aid.number_of_targets
  2317.         when 1
  2318.           text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_FOE
  2319.         else
  2320.           number = $game_temp.battle_aid.number_of_targets
  2321.           text = sprintf(YEA::BATTLE::HELP_TEXT_MANY_RANDOM_FOE, number)
  2322.         end
  2323.       end
  2324.     else # $game_temp.battle_aid.for_friend?
  2325.       if $game_temp.battle_aid.for_dead_friend?
  2326.         text = YEA::BATTLE::HELP_TEXT_ALL_DEAD_ALLIES
  2327.       elsif $game_temp.battle_aid.for_random?
  2328.         case $game_temp.battle_aid.number_of_targets
  2329.         when 1
  2330.           text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_ALLY
  2331.         else
  2332.           number = $game_temp.battle_aid.number_of_targets
  2333.           text = sprintf(YEA::BATTLE::HELP_TEXT_RANDOM_ALLIES, number)
  2334.         end
  2335.       else
  2336.         text = YEA::BATTLE::HELP_TEXT_ALL_ALLIES
  2337.       end
  2338.     end
  2339.     return if text == @text
  2340.     @text = text
  2341.     contents.clear
  2342.     reset_font_settings
  2343.     draw_text(0, 0, contents.width, line_height*2, @text, 1)
  2344.   end
  2345.  
  2346. end # Window_BattleHelp
  2347.  
  2348. #==============================================================================
  2349. # ¡ Window_BattleLog
  2350. #==============================================================================
  2351.  
  2352. class Window_BattleLog < Window_Selectable
  2353.  
  2354.   #--------------------------------------------------------------------------
  2355.   # alias method: display_current_state
  2356.   #--------------------------------------------------------------------------
  2357.   alias window_battlelog_display_current_state_abe display_current_state
  2358.   def display_current_state(subject)
  2359.     subject.make_during_state_popup
  2360.     return unless YEA::BATTLE::MSG_CURRENT_STATE
  2361.     window_battlelog_display_current_state_abe(subject)
  2362.   end
  2363.  
  2364.   #--------------------------------------------------------------------------
  2365.   # alias method: display_use_item
  2366.   #--------------------------------------------------------------------------
  2367.   alias window_battlelog_display_use_item_abe display_use_item
  2368.   def display_use_item(subject, item)
  2369.     return unless YEA::BATTLE::MSG_CURRENT_ACTION
  2370.     window_battlelog_display_use_item_abe(subject, item)
  2371.   end
  2372.  
  2373.   #--------------------------------------------------------------------------
  2374.   # alias method: display_counter
  2375.   #--------------------------------------------------------------------------
  2376.   alias window_battlelog_display_counter_abe display_counter
  2377.   def display_counter(target, item)
  2378.     if YEA::BATTLE::MSG_COUNTERATTACK
  2379.       window_battlelog_display_counter_abe(target, item)
  2380.     else
  2381.       Sound.play_evasion
  2382.     end
  2383.   end
  2384.  
  2385.   #--------------------------------------------------------------------------
  2386.   # alias method: display_reflection
  2387.   #--------------------------------------------------------------------------
  2388.   alias window_battlelog_display_reflection_abe display_reflection
  2389.   def display_reflection(target, item)
  2390.     if YEA::BATTLE::MSG_REFLECT_MAGIC
  2391.       window_battlelog_display_reflection_abe(target, item)
  2392.     else
  2393.       Sound.play_reflection
  2394.     end
  2395.   end
  2396.  
  2397.   #--------------------------------------------------------------------------
  2398.   # alias method: display_substitute
  2399.   #--------------------------------------------------------------------------
  2400.   alias window_battlelog_display_substitute_abe display_substitute
  2401.   def display_substitute(substitute, target)
  2402.     return unless YEA::BATTLE::MSG_SUBSTITUTE_HIT
  2403.     window_battlelog_display_substitute_abe(substitute, target)
  2404.   end
  2405.  
  2406.   #--------------------------------------------------------------------------
  2407.   # alias method: display_failure
  2408.   #--------------------------------------------------------------------------
  2409.   alias window_battlelog_display_failure_abe display_failure
  2410.   def display_failure(target, item)
  2411.     return unless YEA::BATTLE::MSG_FAILURE_HIT
  2412.     window_battlelog_display_failure_abe(target, item)
  2413.   end
  2414.  
  2415.   #--------------------------------------------------------------------------
  2416.   # alias method: display_critical
  2417.   #--------------------------------------------------------------------------
  2418.   alias window_battlelog_display_critical_abe display_critical
  2419.   def display_critical(target, item)
  2420.     return unless YEA::BATTLE::MSG_CRITICAL_HIT
  2421.     window_battlelog_display_critical_abe(target, item)
  2422.   end
  2423.  
  2424.   #--------------------------------------------------------------------------
  2425.   # alias method: display_miss
  2426.   #--------------------------------------------------------------------------
  2427.   alias window_battlelog_display_miss_abe display_miss
  2428.   def display_miss(target, item)
  2429.     return unless YEA::BATTLE::MSG_HIT_MISSED
  2430.     window_battlelog_display_miss_abe(target, item)
  2431.   end
  2432.  
  2433.   #--------------------------------------------------------------------------
  2434.   # alias method: display_evasion
  2435.   #--------------------------------------------------------------------------
  2436.   alias window_battlelog_display_evasion_abe display_evasion
  2437.   def display_evasion(target, item)
  2438.     if YEA::BATTLE::MSG_EVASION
  2439.       window_battlelog_display_evasion_abe(target, item)
  2440.     else
  2441.       if !item || item.physical?
  2442.         Sound.play_evasion
  2443.       else
  2444.         Sound.play_magic_evasion
  2445.       end
  2446.     end
  2447.   end
  2448.  
  2449.   #--------------------------------------------------------------------------
  2450.   # overwrite method: display_hp_damage
  2451.   #--------------------------------------------------------------------------
  2452.   def display_hp_damage(target, item)
  2453.     return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
  2454.     if target.result.hp_damage > 0 && target.result.hp_drain == 0
  2455.       target.perform_damage_effect
  2456.     end
  2457.     Sound.play_recovery if target.result.hp_damage < 0
  2458.     return unless YEA::BATTLE::MSG_HP_DAMAGE
  2459.     add_text(target.result.hp_damage_text)
  2460.     wait
  2461.   end
  2462.  
  2463.   #--------------------------------------------------------------------------
  2464.   # overwrite method: display_mp_damage
  2465.   #--------------------------------------------------------------------------
  2466.   def display_mp_damage(target, item)
  2467.     return if target.dead? || target.result.mp_damage == 0
  2468.     Sound.play_recovery if target.result.mp_damage < 0
  2469.     return unless YEA::BATTLE::MSG_MP_DAMAGE
  2470.     add_text(target.result.mp_damage_text)
  2471.     wait
  2472.   end
  2473.  
  2474.   #--------------------------------------------------------------------------
  2475.   # overwrite method: display_tp_damage
  2476.   #--------------------------------------------------------------------------
  2477.   def display_tp_damage(target, item)
  2478.     return if target.dead? || target.result.tp_damage == 0
  2479.     Sound.play_recovery if target.result.tp_damage < 0
  2480.     return unless YEA::BATTLE::MSG_TP_DAMAGE
  2481.     add_text(target.result.tp_damage_text)
  2482.     wait
  2483.   end
  2484.  
  2485.   #--------------------------------------------------------------------------
  2486.   # alias method: display_added_states
  2487.   #--------------------------------------------------------------------------
  2488.   alias window_battlelog_display_added_states_abe display_added_states
  2489.   def display_added_states(target)
  2490.     return unless YEA::BATTLE::MSG_ADDED_STATES
  2491.     window_battlelog_display_added_states_abe(target)
  2492.   end
  2493.  
  2494.   #--------------------------------------------------------------------------
  2495.   # alias method: display_removed_states
  2496.   #--------------------------------------------------------------------------
  2497.   alias window_battlelog_display_removed_states_abe display_removed_states
  2498.   def display_removed_states(target)
  2499.     return unless YEA::BATTLE::MSG_REMOVED_STATES
  2500.     window_battlelog_display_removed_states_abe(target)
  2501.   end
  2502.  
  2503.   #--------------------------------------------------------------------------
  2504.   # alias method: display_changed_buffs
  2505.   #--------------------------------------------------------------------------
  2506.   alias window_battlelog_display_changed_buffs_abe display_changed_buffs
  2507.   def display_changed_buffs(target)
  2508.     return unless YEA::BATTLE::MSG_CHANGED_BUFFS
  2509.     window_battlelog_display_changed_buffs_abe(target)
  2510.   end
  2511.  
  2512. end # Window_BattleLog
  2513.  
  2514. #==============================================================================
  2515. # ¡ Window_SkillList
  2516. #==============================================================================
  2517.  
  2518. class Window_SkillList < Window_Selectable
  2519.  
  2520.   #--------------------------------------------------------------------------
  2521.   # overwrite method: spacing
  2522.   #--------------------------------------------------------------------------
  2523.   def spacing
  2524.     return 8 if $game_party.in_battle
  2525.     return super
  2526.   end
  2527.  
  2528. end # Window_SkillList
  2529.  
  2530. #==============================================================================
  2531. # ¡ Window_ItemList
  2532. #==============================================================================
  2533.  
  2534. class Window_ItemList < Window_Selectable
  2535.  
  2536.   #--------------------------------------------------------------------------
  2537.   # overwrite method: spacing
  2538.   #--------------------------------------------------------------------------
  2539.   def spacing
  2540.     return 8 if $game_party.in_battle
  2541.     return super
  2542.   end
  2543.  
  2544. end # Window_ItemList
  2545.  
  2546. #==============================================================================
  2547. # ¡ Scene_Battle
  2548. #==============================================================================
  2549.  
  2550. class Scene_Battle < Scene_Base
  2551.  
  2552.   #--------------------------------------------------------------------------
  2553.   # public instance variables
  2554.   #--------------------------------------------------------------------------
  2555.   attr_accessor :enemy_window
  2556.   attr_accessor :info_viewport
  2557.   attr_accessor :spriteset
  2558.   attr_accessor :status_window
  2559.   attr_accessor :status_aid_window
  2560.   attr_accessor :subject
  2561.  
  2562.   #--------------------------------------------------------------------------
  2563.   # alias method: create_spriteset
  2564.   #--------------------------------------------------------------------------
  2565.   alias scene_battle_create_spriteset_abe create_spriteset
  2566.   def create_spriteset
  2567.     BattleManager.init_battle_type
  2568.     scene_battle_create_spriteset_abe
  2569.   end
  2570.  
  2571.   #--------------------------------------------------------------------------
  2572.   # alias method: update_basic
  2573.   #--------------------------------------------------------------------------
  2574.   alias scene_battle_update_basic_abe update_basic
  2575.   def update_basic
  2576.     scene_battle_update_basic_abe
  2577.     update_debug
  2578.   end
  2579.  
  2580.   #--------------------------------------------------------------------------
  2581.   # new method: update_debug
  2582.   #--------------------------------------------------------------------------
  2583.   def update_debug
  2584.     return unless $TEST || $BTEST
  2585.     debug_heal_party if Input.trigger?(:F5)
  2586.     debug_damage_party if Input.trigger?(:F6)
  2587.     debug_fill_tp if Input.trigger?(:F7)
  2588.     debug_kill_all if Input.trigger?(:F8)
  2589.   end
  2590.  
  2591.   #--------------------------------------------------------------------------
  2592.   # new method: debug_heal_party
  2593.   #--------------------------------------------------------------------------
  2594.   def debug_heal_party
  2595.     Sound.play_recovery
  2596.     for member in $game_party.battle_members
  2597.       member.recover_all
  2598.     end
  2599.     @status_window.refresh
  2600.   end
  2601.  
  2602.   #--------------------------------------------------------------------------
  2603.   # new method: debug_damage_party
  2604.   #--------------------------------------------------------------------------
  2605.   def debug_damage_party
  2606.     Sound.play_actor_damage
  2607.     for member in $game_party.alive_members
  2608.       member.hp = 1
  2609.       member.mp = 0
  2610.       member.tp = 0
  2611.     end
  2612.     @status_window.refresh
  2613.   end
  2614.  
  2615.   #--------------------------------------------------------------------------
  2616.   # new method: debug_fill_tp
  2617.   #--------------------------------------------------------------------------
  2618.   def debug_fill_tp
  2619.     Sound.play_recovery
  2620.     for member in $game_party.alive_members
  2621.       member.tp = member.max_tp
  2622.     end
  2623.     @status_window.refresh
  2624.   end
  2625.  
  2626.   #--------------------------------------------------------------------------
  2627.   # new method: debug_kill_all
  2628.   #--------------------------------------------------------------------------
  2629.   def debug_kill_all
  2630.     for enemy in $game_troop.alive_members
  2631.       enemy.hp = 0
  2632.       enemy.perform_collapse_effect
  2633.     end
  2634.     BattleManager.judge_win_loss
  2635.     @log_window.wait
  2636.     @log_window.wait_for_effect
  2637.   end
  2638.  
  2639.   #--------------------------------------------------------------------------
  2640.   # alias method: create_all_windows
  2641.   #--------------------------------------------------------------------------
  2642.   alias scene_battle_create_all_windows_abe create_all_windows
  2643.   def create_all_windows
  2644.     scene_battle_create_all_windows_abe
  2645.     create_battle_status_aid_window
  2646.     set_help_window
  2647.   end
  2648.  
  2649.   #--------------------------------------------------------------------------
  2650.   # alias method: create_info_viewport
  2651.   #--------------------------------------------------------------------------
  2652.   alias scene_battle_create_info_viewport_abe create_info_viewport
  2653.   def create_info_viewport
  2654.     scene_battle_create_info_viewport_abe
  2655.     @status_window.refresh
  2656.   end
  2657.  
  2658.   #--------------------------------------------------------------------------
  2659.   # new method: create_battle_status_aid_window
  2660.   #--------------------------------------------------------------------------
  2661.   def create_battle_status_aid_window
  2662.     @status_aid_window = Window_BattleStatusAid.new
  2663.     @status_aid_window.status_window = @status_window
  2664.     @status_aid_window.x = Graphics.width - @status_aid_window.width
  2665.     @status_aid_window.y = Graphics.height - @status_aid_window.height
  2666.   end
  2667.  
  2668.   #--------------------------------------------------------------------------
  2669.   # overwrite method: create_help_window
  2670.   #--------------------------------------------------------------------------
  2671.   def create_help_window
  2672.     @help_window = Window_BattleHelp.new
  2673.     @help_window.hide
  2674.   end
  2675.  
  2676.   #--------------------------------------------------------------------------
  2677.   # new method: set_help_window
  2678.   #--------------------------------------------------------------------------
  2679.   def set_help_window
  2680.     @help_window.actor_window = @actor_window
  2681.     @help_window.enemy_window = @enemy_window
  2682.   end
  2683.  
  2684.   #--------------------------------------------------------------------------
  2685.   # alias method: create_party_command_window
  2686.   #--------------------------------------------------------------------------
  2687.   alias scene_battle_create_party_command_window_abe create_party_command_window
  2688.   def create_party_command_window
  2689.     scene_battle_create_party_command_window_abe
  2690.     @party_command_window.set_handler(:dir6, method(:command_fight))
  2691.   end
  2692.  
  2693.   #--------------------------------------------------------------------------
  2694.   # alias method: create_actor_command_window
  2695.   #--------------------------------------------------------------------------
  2696.   alias scene_battle_create_actor_command_window_abe create_actor_command_window
  2697.   def create_actor_command_window
  2698.     scene_battle_create_actor_command_window_abe
  2699.     @actor_command_window.set_handler(:dir4, method(:prior_command))
  2700.     @actor_command_window.set_handler(:dir6, method(:next_command))
  2701.   end
  2702.  
  2703.   #--------------------------------------------------------------------------
  2704.   # alias method: create_skill_window
  2705.   #--------------------------------------------------------------------------
  2706.   alias scene_battle_create_skill_window_abe create_skill_window
  2707.   def create_skill_window
  2708.     scene_battle_create_skill_window_abe
  2709.     @skill_window.height = @info_viewport.rect.height
  2710.     @skill_window.width = Graphics.width - @actor_command_window.width
  2711.     @skill_window.y = Graphics.height - @skill_window.height
  2712.   end
  2713.  
  2714.   #--------------------------------------------------------------------------
  2715.   # alias method: create_item_window
  2716.   #--------------------------------------------------------------------------
  2717.   alias scene_battle_create_item_window_abe create_item_window
  2718.   def create_item_window
  2719.     scene_battle_create_item_window_abe
  2720.     @item_window.height = @skill_window.height
  2721.     @item_window.width = @skill_window.width
  2722.     @item_window.y = Graphics.height - @item_window.height
  2723.   end
  2724.  
  2725.   #--------------------------------------------------------------------------
  2726.   # alias method: show_fast?
  2727.   #--------------------------------------------------------------------------
  2728.   alias scene_battle_show_fast_abe show_fast?
  2729.   def show_fast?
  2730.     return true if YEA::BATTLE::AUTO_FAST
  2731.     return scene_battle_show_fast_abe
  2732.   end
  2733.  
  2734.   #--------------------------------------------------------------------------
  2735.   # alias method: next_command
  2736.   #--------------------------------------------------------------------------
  2737.   alias scene_battle_next_command_abe next_command
  2738.   def next_command
  2739.     @status_window.show
  2740.     redraw_current_status
  2741.     @actor_command_window.show
  2742.     @status_aid_window.hide
  2743.     scene_battle_next_command_abe
  2744.   end
  2745.  
  2746.   #--------------------------------------------------------------------------
  2747.   # alias method: prior_command
  2748.   #--------------------------------------------------------------------------
  2749.   alias scene_battle_prior_command_abe prior_command
  2750.   def prior_command
  2751.     redraw_current_status
  2752.     scene_battle_prior_command_abe
  2753.   end
  2754.  
  2755.   #--------------------------------------------------------------------------
  2756.   # new method: redraw_current_status
  2757.   #--------------------------------------------------------------------------
  2758.   def redraw_current_status
  2759.     return if @status_window.index < 0
  2760.     @status_window.draw_item(@status_window.index)
  2761.   end
  2762.  
  2763.   #--------------------------------------------------------------------------
  2764.   # alias method: command_attack
  2765.   #--------------------------------------------------------------------------
  2766.   alias scene_battle_command_attack_abe command_attack
  2767.   def command_attack
  2768.     $game_temp.battle_aid = $data_skills[BattleManager.actor.attack_skill_id]
  2769.     scene_battle_command_attack_abe
  2770.   end
  2771.  
  2772.   #--------------------------------------------------------------------------
  2773.   # alias method: command_skill
  2774.   #--------------------------------------------------------------------------
  2775.   alias scene_battle_command_skill_abe command_skill
  2776.   def command_skill
  2777.     scene_battle_command_skill_abe
  2778.     @status_window.hide
  2779.     @actor_command_window.hide
  2780.     @status_aid_window.show
  2781.   end
  2782.  
  2783.   #--------------------------------------------------------------------------
  2784.   # alias method: command_item
  2785.   #--------------------------------------------------------------------------
  2786.   alias scene_battle_command_item_abe command_item
  2787.   def command_item
  2788.     scene_battle_command_item_abe
  2789.     @status_window.hide
  2790.     @actor_command_window.hide
  2791.     @status_aid_window.show
  2792.   end
  2793.  
  2794.   #--------------------------------------------------------------------------
  2795.   # overwrite method: on_skill_ok
  2796.   #--------------------------------------------------------------------------
  2797.   def on_skill_ok
  2798.     @skill = @skill_window.item
  2799.     $game_temp.battle_aid = @skill
  2800.     BattleManager.actor.input.set_skill(@skill.id)
  2801.     BattleManager.actor.last_skill.object = @skill
  2802.     if @skill.for_opponent?
  2803.       select_enemy_selection
  2804.     elsif @skill.for_friend?
  2805.       select_actor_selection
  2806.     else
  2807.       @skill_window.hide
  2808.       next_command
  2809.       $game_temp.battle_aid = nil
  2810.     end
  2811.   end
  2812.  
  2813.   #--------------------------------------------------------------------------
  2814.   # alias method: on_skill_cancel
  2815.   #--------------------------------------------------------------------------
  2816.   alias scene_battle_on_skill_cancel_abe on_skill_cancel
  2817.   def on_skill_cancel
  2818.     scene_battle_on_skill_cancel_abe
  2819.     @status_window.show
  2820.     @actor_command_window.show
  2821.     @status_aid_window.hide
  2822.   end
  2823.  
  2824.   #--------------------------------------------------------------------------
  2825.   # overwrite method: on_item_ok
  2826.   #--------------------------------------------------------------------------
  2827.   def on_item_ok
  2828.     @item = @item_window.item
  2829.     $game_temp.battle_aid = @item
  2830.     BattleManager.actor.input.set_item(@item.id)
  2831.     if @item.for_opponent?
  2832.       select_enemy_selection
  2833.     elsif @item.for_friend?
  2834.       select_actor_selection
  2835.     else
  2836.       @item_window.hide
  2837.       next_command
  2838.       $game_temp.battle_aid = nil
  2839.     end
  2840.     $game_party.last_item.object = @item
  2841.   end
  2842.  
  2843.   #--------------------------------------------------------------------------
  2844.   # alias method: on_item_cancel
  2845.   #--------------------------------------------------------------------------
  2846.   alias scene_battle_on_item_cancel_abe on_item_cancel
  2847.   def on_item_cancel
  2848.     scene_battle_on_item_cancel_abe
  2849.     @status_window.show
  2850.     @actor_command_window.show
  2851.     @status_aid_window.hide
  2852.   end
  2853.  
  2854.   #--------------------------------------------------------------------------
  2855.   # alias method: select_actor_selection
  2856.   #--------------------------------------------------------------------------
  2857.   alias scene_battle_select_actor_selection_abe select_actor_selection
  2858.   def select_actor_selection
  2859.     @status_aid_window.refresh
  2860.     scene_battle_select_actor_selection_abe
  2861.     @status_window.hide
  2862.     @skill_window.hide
  2863.     @item_window.hide
  2864.     @help_window.show
  2865.   end
  2866.  
  2867.   #--------------------------------------------------------------------------
  2868.   # alias method: on_actor_ok
  2869.   #--------------------------------------------------------------------------
  2870.   alias scene_battle_on_actor_ok_abe on_actor_ok
  2871.   def on_actor_ok
  2872.     $game_temp.battle_aid = nil
  2873.     scene_battle_on_actor_ok_abe
  2874.     @status_window.show
  2875.     if $imported["YEA-BattleCommandList"] && !@confirm_command_window.nil?
  2876.       @actor_command_window.visible = !@confirm_command_window.visible
  2877.     else
  2878.       @actor_command_window.show
  2879.     end
  2880.     @status_aid_window.hide
  2881.   end
  2882.  
  2883.   #--------------------------------------------------------------------------
  2884.   # alias method: on_actor_cancel
  2885.   #--------------------------------------------------------------------------
  2886.   alias scene_battle_on_actor_cancel_abe on_actor_cancel
  2887.   def on_actor_cancel
  2888.     BattleManager.actor.input.clear
  2889.     @status_aid_window.refresh
  2890.     $game_temp.battle_aid = nil
  2891.     scene_battle_on_actor_cancel_abe
  2892.     case @actor_command_window.current_symbol
  2893.     when :skill
  2894.       @skill_window.show
  2895.     when :item
  2896.       @item_window.show
  2897.     end
  2898.   end
  2899.  
  2900.   #--------------------------------------------------------------------------
  2901.   # alias method: select_enemy_selection
  2902.   #--------------------------------------------------------------------------
  2903.   alias scene_battle_select_enemy_selection_abe select_enemy_selection
  2904.   def select_enemy_selection
  2905.     @status_aid_window.refresh
  2906.     scene_battle_select_enemy_selection_abe
  2907.     @help_window.show
  2908.   end
  2909.   #--------------------------------------------------------------------------
  2910.   # alias method: on_enemy_ok
  2911.   #--------------------------------------------------------------------------
  2912.   alias scene_battle_on_enemy_ok_abe on_enemy_ok
  2913.   def on_enemy_ok
  2914.     $game_temp.battle_aid = nil
  2915.     scene_battle_on_enemy_ok_abe
  2916.   end
  2917.  
  2918.   #--------------------------------------------------------------------------
  2919.   # alias method: on_enemy_cancel
  2920.   #--------------------------------------------------------------------------
  2921.   alias scene_battle_on_enemy_cancel_abe on_enemy_cancel
  2922.   def on_enemy_cancel
  2923.     BattleManager.actor.input.clear
  2924.     @status_aid_window.refresh
  2925.     $game_temp.battle_aid = nil
  2926.     scene_battle_on_enemy_cancel_abe
  2927.     if @skill_window.visible || @item_window.visible
  2928.       @help_window.show
  2929.     else
  2930.       @help_window.hide
  2931.     end
  2932.   end
  2933.  
  2934.   #--------------------------------------------------------------------------
  2935.   # alias method: battle_start
  2936.   #--------------------------------------------------------------------------
  2937.   alias scene_battle_battle_start_abe battle_start
  2938.   def battle_start
  2939.     scene_battle_battle_start_abe
  2940.     return unless YEA::BATTLE::SKIP_PARTY_COMMAND
  2941.     @party_command_window.deactivate
  2942.     if BattleManager.input_start
  2943.       command_fight
  2944.     else
  2945.       turn_start
  2946.     end
  2947.   end
  2948.  
  2949.   #--------------------------------------------------------------------------
  2950.   # overwrite method: turn_end
  2951.   #--------------------------------------------------------------------------
  2952.   def turn_end
  2953.     all_battle_members.each do |battler|
  2954.       battler.on_turn_end
  2955.       status_redraw_target(battler)
  2956.       @log_window.display_auto_affected_status(battler)
  2957.       @log_window.wait_and_clear
  2958.     end
  2959.     update_party_cooldowns if $imported["YEA-CommandParty"]
  2960.     BattleManager.turn_end
  2961.     process_event
  2962.     start_party_command_selection
  2963.     return if end_battle_conditions?
  2964.     return unless YEA::BATTLE::SKIP_PARTY_COMMAND
  2965.     if BattleManager.input_start
  2966.       @party_command_window.deactivate
  2967.       command_fight
  2968.     else
  2969.       @party_command_window.deactivate
  2970.       turn_start
  2971.     end
  2972.   end
  2973.  
  2974.   #--------------------------------------------------------------------------
  2975.   # new method: end_battle_conditions?
  2976.   #--------------------------------------------------------------------------
  2977.   def end_battle_conditions?
  2978.     return true if $game_party.members.empty?
  2979.     return true if $game_party.all_dead?
  2980.     return true if $game_troop.all_dead?
  2981.     return true if BattleManager.aborting?
  2982.     return false
  2983.   end
  2984.  
  2985.   #--------------------------------------------------------------------------
  2986.   # overwrite method: execute_action
  2987.   #--------------------------------------------------------------------------
  2988.   def execute_action
  2989.     @subject.sprite_effect_type = :whiten if YEA::BATTLE::FLASH_WHITE_EFFECT
  2990.     use_item
  2991.     @log_window.wait_and_clear
  2992.   end
  2993.  
  2994.   #--------------------------------------------------------------------------
  2995.   # overwrite method: apply_item_effects
  2996.   #--------------------------------------------------------------------------
  2997.   def apply_item_effects(target, item)
  2998.     if $imported["YEA-LunaticObjects"]
  2999.       lunatic_object_effect(:prepare, item, @subject, target)
  3000.     end
  3001.     target.item_apply(@subject, item)
  3002.     status_redraw_target(@subject)
  3003.     status_redraw_target(target) unless target == @subject
  3004.     @log_window.display_action_results(target, item)
  3005.     if $imported["YEA-LunaticObjects"]
  3006.       lunatic_object_effect(:during, item, @subject, target)
  3007.     end
  3008.     perform_collapse_check(target)
  3009.   end
  3010.  
  3011.   #--------------------------------------------------------------------------
  3012.   # overwite method: invoke_counter_attack
  3013.   #--------------------------------------------------------------------------
  3014.   def invoke_counter_attack(target, item)
  3015.     @log_window.display_counter(target, item)
  3016.     attack_skill = $data_skills[target.attack_skill_id]
  3017.     @subject.item_apply(target, attack_skill)
  3018.     status_redraw_target(@subject)
  3019.     status_redraw_target(target) unless target == @subject
  3020.     @log_window.display_action_results(@subject, attack_skill)
  3021.     perform_collapse_check(target)
  3022.     perform_collapse_check(@subject)
  3023.   end
  3024.  
  3025.   #--------------------------------------------------------------------------
  3026.   # new method: perform_collapse_check
  3027.   #--------------------------------------------------------------------------
  3028.   def perform_collapse_check(target)
  3029.     return if YEA::BATTLE::MSG_ADDED_STATES
  3030.     target.perform_collapse_effect if target.can_collapse?
  3031.     @log_window.wait
  3032.     @log_window.wait_for_effect
  3033.   end
  3034.  
  3035.   #--------------------------------------------------------------------------
  3036.   # overwrite method: show_attack_animation
  3037.   #--------------------------------------------------------------------------
  3038.   def show_attack_animation(targets)
  3039.     show_normal_animation(targets, @subject.atk_animation_id1, false)
  3040.     wait_for_animation
  3041.     show_normal_animation(targets, @subject.atk_animation_id2, true)
  3042.   end
  3043.  
  3044.   #--------------------------------------------------------------------------
  3045.   # overwrite method: show_normal_animation
  3046.   #--------------------------------------------------------------------------
  3047.   def show_normal_animation(targets, animation_id, mirror = false)
  3048.     animation = $data_animations[animation_id]
  3049.     return if animation.nil?
  3050.     ani_check = false
  3051.     targets.each do |target|
  3052.       if ani_check && target.animation_id <= 0
  3053.         target.pseudo_ani_id = animation_id
  3054.       else
  3055.         target.animation_id = animation_id
  3056.       end
  3057.       target.animation_mirror = mirror
  3058.       ani_check = true if animation.to_screen?
  3059.     end
  3060.   end
  3061.  
  3062.   #--------------------------------------------------------------------------
  3063.   # overwrite method: process_action_end
  3064.   #--------------------------------------------------------------------------
  3065.   def process_action_end
  3066.     @subject.on_action_end
  3067.     status_redraw_target(@subject)
  3068.     @log_window.display_auto_affected_status(@subject)
  3069.     @log_window.wait_and_clear
  3070.     @log_window.display_current_state(@subject)
  3071.     @log_window.wait_and_clear
  3072.     BattleManager.judge_win_loss
  3073.   end
  3074.  
  3075.   #--------------------------------------------------------------------------
  3076.   # overwrite method: use_item
  3077.   #--------------------------------------------------------------------------
  3078.   def use_item
  3079.     item = @subject.current_action.item
  3080.     @log_window.display_use_item(@subject, item)
  3081.     @subject.use_item(item)
  3082.     status_redraw_target(@subject)
  3083.     if $imported["YEA-LunaticObjects"]
  3084.       lunatic_object_effect(:before, item, @subject, @subject)
  3085.     end
  3086.     process_casting_animation if $imported["YEA-CastAnimations"]
  3087.     targets = @subject.current_action.make_targets.compact rescue []
  3088.     show_animation(targets, item.animation_id) if show_all_animation?(item)
  3089.     targets.each {|target|
  3090.       if $imported["YEA-TargetManager"]
  3091.         target = alive_random_target(target, item) if item.for_random?
  3092.       end
  3093.       item.repeats.times { invoke_item(target, item) } }
  3094.     if $imported["YEA-LunaticObjects"]
  3095.       lunatic_object_effect(:after, item, @subject, @subject)
  3096.     end
  3097.   end
  3098.  
  3099.   #--------------------------------------------------------------------------
  3100.   # alias method: invoke_item
  3101.   #--------------------------------------------------------------------------
  3102.   alias scene_battle_invoke_item_abe invoke_item
  3103.   def invoke_item(target, item)
  3104.     show_animation([target], item.animation_id) if separate_ani?(target, item)
  3105.     if target.dead? != item.for_dead_friend?
  3106.       @subject.last_target_index = target.index
  3107.       return
  3108.     end
  3109.     scene_battle_invoke_item_abe(target, item)
  3110.   end
  3111.  
  3112.   #--------------------------------------------------------------------------
  3113.   # new method: show_all_animation?
  3114.   #--------------------------------------------------------------------------
  3115.   def show_all_animation?(item)
  3116.     return true if item.one_animation
  3117.     return false if $data_animations[item.animation_id].nil?
  3118.     return false unless $data_animations[item.animation_id].to_screen?
  3119.     return true
  3120.   end
  3121.  
  3122.   #--------------------------------------------------------------------------
  3123.   # new method: separate_ani?
  3124.   #--------------------------------------------------------------------------
  3125.   def separate_ani?(target, item)
  3126.     return false if item.one_animation
  3127.     return false if $data_animations[item.animation_id].nil?
  3128.     return false if $data_animations[item.animation_id].to_screen?
  3129.     return target.dead? == item.for_dead_friend?
  3130.   end
  3131.  
  3132.   #--------------------------------------------------------------------------
  3133.   # new method: status_redraw_target
  3134.   #--------------------------------------------------------------------------
  3135.   def status_redraw_target(target)
  3136.     return unless target.actor?
  3137.     @status_window.draw_item($game_party.battle_members.index(target))
  3138.   end
  3139.  
  3140.   #--------------------------------------------------------------------------
  3141.   # alias method: start_party_command_selection
  3142.   #--------------------------------------------------------------------------
  3143.   alias start_party_command_selection_abe start_party_command_selection
  3144.   def start_party_command_selection
  3145.     @status_window.refresh unless scene_changing?
  3146.     start_party_command_selection_abe
  3147.   end
  3148.  
  3149.   #--------------------------------------------------------------------------
  3150.   # overwrite method: refresh_status
  3151.   #--------------------------------------------------------------------------
  3152.   def refresh_status; return; end
  3153.  
  3154.   #--------------------------------------------------------------------------
  3155.   # new method: refresh_autobattler_status_window
  3156.   #--------------------------------------------------------------------------
  3157.   def refresh_autobattler_status_window
  3158.     for member in $game_party.battle_members
  3159.       next unless member.auto_battle?
  3160.       @status_window.draw_item(member.index)
  3161.     end
  3162.   end
  3163.  
  3164.   #--------------------------------------------------------------------------
  3165.   # new method: hide_extra_gauges
  3166.   #--------------------------------------------------------------------------
  3167.   def hide_extra_gauges
  3168.     # Made for compatibility
  3169.   end
  3170.  
  3171.   #--------------------------------------------------------------------------
  3172.   # new method: show_extra_gauges
  3173.   #--------------------------------------------------------------------------
  3174.   def show_extra_gauges
  3175.     # Made for compatibility
  3176.   end
  3177.  
  3178. end # Scene_Battle
  3179.  
  3180. #==============================================================================
  3181. #
  3182. # ¥ End of File
  3183. #
  3184. #==============================================================================


Lv6.析梦学徒

老鹰

梦石
40
星屑
34434
在线时间
6719 小时
注册时间
2012-5-26
帖子
3234

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2017-6-10 19:18:55 | 只看该作者
@stamina -= @actions[0].stamina_cost if @actions[0]
这样……?懒得看太懒了

点评

解决了_(:зゝ∠)_非常感谢!!!!!!!!!!  发表于 2017-6-10 20:57

评分

参与人数 1星屑 +250 收起 理由
RaidenInfinity + 250 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-4-26 07:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表