This is a fix for the Order Battlers script from Yami
It fixes crashes from hidden enemies
Two options - first is the normal one, second option doesn't require PCTB script to function.
Credit and Thanks
Yami
Roninator2
Â
One
#==============================================================================
#
# â–¼ YSA Battle Add-On: Order Battlers - Enemy Appear/Transform
# -- Last Updated: 2012.02.20
# -- Level: Easy
# -- Requires: n/a
# Mod by Roninator2
#==============================================================================
# â–¼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Place below Order Battlers
#==============================================================================
#==============================================================================
# Function:
# Fixes the issue that the gauge doesn't update when an enemy is revealed,
# transformed, or revived
# * updated - added fix for memory leaks
#==============================================================================
module R2_Turn_Gauge_Display
SWITCH = 10 # Do not turn on. Used automatically to reset icons
end
class Game_Interpreter
#--------------------------------------------------------------------------
# * Enemy Appear
#--------------------------------------------------------------------------
def command_335
iterate_enemy_index(@params[0]) do |enemy|
enemy.appear
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
$game_troop.make_unique_names
end
end
#--------------------------------------------------------------------------
# * Enemy Transform
#--------------------------------------------------------------------------
def command_336
iterate_enemy_index(@params[0]) do |enemy|
enemy.transform(@params[1])
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
$game_troop.make_unique_names
end
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# overwrite method: create all windows
#--------------------------------------------------------------------------
def create_all_windows
order_gauge_create_all_windows
if @spriteset_order
for order in @spriteset_order
order.bitmap.dispose
order.dispose
end
@spriteset_order = nil
end
@spriteset_order = []
if $imported["YSA-PCTB"] && YSA::PCTB::CTB_MECHANIC[:predict] == 1
@active_order_sprite = Sprite_OrderBattler.new(@spriteset.viewportOrder, nil, :pctb2)
end
if $imported["YSA-PCTB"] && YSA::PCTB::CTB_MECHANIC[:predict] == 2
num = YSA::PCTB::CTB_MECHANIC[:pre_turns]
i = 0
num.times {
order = Sprite_OrderBattler.new(@spriteset.viewportOrder, nil, :pctb3, i)
@spriteset_order.push(order)
i += 1
}
return
end
for battler in $game_party.members + $game_troop.members
battle_type = :dtb
battle_type = :pctb if BattleManager.btype?(:pctb)
battle_type = :catb if BattleManager.btype?(:catb)
order = Sprite_OrderBattler.new(@spriteset.viewportOrder, battler, battle_type)
@spriteset_order.push(order)
end
end
#--------------------------------------------------------------------------
# new method: update spriteset
#--------------------------------------------------------------------------
def update_spriteset_order
if @spriteset_order
for order in @spriteset_order
order.bitmap.dispose
order.dispose
end
@spriteset_order = nil
end
@spriteset_order = []
if $imported["YSA-PCTB"] && YSA::PCTB::CTB_MECHANIC[:predict] == 1
@active_order_sprite = Sprite_OrderBattler.new(@spriteset.viewportOrder, nil, :pctb2)
end
if $imported["YSA-PCTB"] && YSA::PCTB::CTB_MECHANIC[:predict] == 2
num = YSA::PCTB::CTB_MECHANIC[:pre_turns]
i = 0
num.times {
order = Sprite_OrderBattler.new(@spriteset.viewportOrder, nil, :pctb3, i)
@spriteset_order.push(order)
i += 1
}
return
end
for battler in $game_party.members + $game_troop.members
battle_type = :dtb
battle_type = :pctb if BattleManager.btype?(:pctb)
battle_type = :catb if BattleManager.btype?(:catb)
order = Sprite_OrderBattler.new(@spriteset.viewportOrder, battler, battle_type)
@spriteset_order.push(order)
end
end
#--------------------------------------------------------------------------
# alias method: update
#--------------------------------------------------------------------------
alias update_order_guage update
def update
update_spriteset_order if $game_switches[R2_Turn_Gauge_Display::SWITCH] == true
$game_switches[R2_Turn_Gauge_Display::SWITCH] = false
update_order_guage
end
end
class Game_Battler < Game_BattlerBase
alias r2_enemy_revive_order_gauge revive
def revive
r2_enemy_revive_order_gauge
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
end
end
Â
Two
# if you get an error under Order Battlers Line 679 put a # there
# if @actor_command_window.current_symbol == :attack #&& !BattleManager.actor.input.attack?
# Order patch by Roninator2
module R2_Turn_Gauge_Display
SWITCH = 10
end
class Game_Interpreter
#--------------------------------------------------------------------------
# * Enemy Appear
#--------------------------------------------------------------------------
def command_335
iterate_enemy_index(@params[0]) do |enemy|
enemy.appear
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
$game_troop.make_unique_names
end
end
#--------------------------------------------------------------------------
# * Enemy Transform
#--------------------------------------------------------------------------
def command_336
iterate_enemy_index(@params[0]) do |enemy|
enemy.transform(@params[1])
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
$game_troop.make_unique_names
end
end
end
module BattleManager
#--------------------------------------------------------------------------
# alias method: turn_start
#--------------------------------------------------------------------------
def self.sort_battlers(cache = false)
battlers = []
for battler in ($game_party.members + $game_troop.members)
next if battler.dead? || battler.hidden?
battlers.push(battler)
end
battlers.sort! { |a,b|
if a.agi != b.agi
b.agi <=> a.agi
else
a.name <=> b.name
end
}
return battlers
end
end
class Scene_Battle < Scene_Base
alias r2_order_gauge_create_all_windows create_all_windows
def create_all_windows
r2_order_gauge_create_all_windows
update_spriteset
end
#--------------------------------------------------------------------------
# new method: update spriteset
#--------------------------------------------------------------------------
def update_spriteset
@spriteset_order = []
h = []
$game_troop.members.each do |enemy|
h << enemy if enemy.hidden?
end
for battler in $game_party.members + $game_troop.members
battle_type = :dtb
battle_type = :pctb if BattleManager.btype?(:pctb)
battle_type = :catb if BattleManager.btype?(:catb)
next if h.include?(battler)
order = Sprite_OrderBattler.new(@spriteset.viewportOrder, battler, battle_type)
@spriteset_order.push(order)
end
end
#--------------------------------------------------------------------------
# alias method: update
#--------------------------------------------------------------------------
alias update_order_guage update
def update
update_order_guage
update_spriteset if $game_switches[R2_Turn_Gauge_Display::SWITCH] == true
$game_switches[R2_Turn_Gauge_Display::SWITCH] = false
end
end
class Game_Battler < Game_BattlerBase
alias r2_enemy_revive_order_gauge revive
def revive
r2_enemy_revive_order_gauge
$game_switches[R2_Turn_Gauge_Display::SWITCH] = true
end
end