Code:
#==============================================================================
# ** Scene_Battle (part 1)
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle
alias raz_old_main main
alias raz_old_phase3_setup_command_window phase3_setup_command_window
alias raz_old_start_phase1 start_phase1
alias raz_old_start_phase2 start_phase2
alias raz_old_start_enemy_select start_enemy_select
alias raz_old_start_actor_select start_actor_select
alias raz_old_start_skill_select start_skill_select
alias raz_old_start_item_select start_item_select
alias raz_old_start_phase4 start_phase4
alias raz_old_update update
alias raz_old_update_phase4_step5 update_phase4_step5
alias raz_old_update_phase5 update_phase5
alias raz_old_update_phase4_step1 update_phase4_step1
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
@troop_id = $game_temp.battle_troop_id
$game_troop.setup(@troop_id)
# Make actor command window
@enemy_name = Window_EnemyName.new
raz_old_main
@enemy_name.dispose
end
def start_phase1
@actor_command_window = Actor_Command.new
raz_old_start_phase1
end
def update
@enemy_name.update
raz_old_update
end
def phase3_setup_command_window
raz_old_phase3_setup_command_window
@party_command_window.visible = true
@actor_command_window.visible = true
@actor_command_window.x = 160
end
def start_phase2
raz_old_start_phase2
@party_command_window.visible = true
@actor_command_window.visible = true
end
def start_enemy_select
raz_old_start_enemy_select
@actor_command_window.visible = true
end
def start_actor_select
raz_old_start_actor_select
@actor_command_window.visible = true
end
def start_skill_select
raz_old_start_skill_select
@actor_command_window.visible = true
end
def start_item_select
raz_old_start_item_select
@actor_command_window.visible = true
end
def start_phase4
raz_old_start_phase4
@party_command_window.visible = true
@actor_command_window.visible = true
end
def update_phase4_step5
@actor_command_window.refresh
@enemy_name.refresh
raz_old_update_phase4_step5
end
def update_phase5
# If wait count is larger than 0
if @phase5_wait_count > 0
# Decrease wait count
@phase5_wait_count -= 1
# If wait count reaches 0
if @phase5_wait_count == 0
# Show result window
@result_window.visible = true
# Clear main phase flag
$game_temp.battle_main_phase = false
# Refresh status window
@status_window.refresh
@enemy_name.refresh
end
return
end
raz_old_update_phase5
end
def update_phase4_step1
raz_old_update_phase4_step1
@enemy_name.refresh
end
end
#==============================================================================
# ** Window_PartyCommand
#------------------------------------------------------------------------------
# This window is used to select whether to fight or escape on the battle
# screen.
#==============================================================================
class Window_PartyCommand < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(160, 320, 320, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
@commands = ["Fight", "Escape"]
@item_max = 2
@column_max = 2
draw_item(0, normal_color)
draw_item(1, $game_temp.battle_can_escape ? normal_color : disabled_color)
self.active = false
self.visible = false
self.index = 0
end
def draw_item(index, color)
self.contents.font.color = color
rect = Rect.new(index * 160 + 4, 0, 128 - 10, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index], 1)
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
self.cursor_rect.set(index * 160, 0, 128, 32)
end
end
#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
# This window displays the status of all party members on the battle screen.
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(480, 320, 160, 160)
self.contents = Bitmap.new(width - 32, height - 32)
@level_up_flags = [false, false, false, false]
self.back_opacity = 160
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = 1
actor = $game_party.actors[0]
actor_x = 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[1]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
# Slightly lower opacity level during main phase
if $game_temp.battle_main_phase
self.contents_opacity -= 4 if self.contents_opacity > 191
else
self.contents_opacity += 4 if self.contents_opacity < 255
end
end
end
class Spriteset_Battle
def initialize
# Make viewports
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
# Make battleback sprite
@battleback_sprite = Sprite.new(@viewport1)
# Make enemy sprites
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
# Make actor sprites
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
# Make weather
@weather = RPG::Weather.new(@viewport1)
# Make picture sprites
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
# Make timer sprite
@timer_sprite = Sprite_Timer.new
# Frame update
update
end
def update
# Update actor sprite contents (corresponds with actor switching)
@actor_sprites[0].battler = $game_party.actors[0]
@actor_sprites[1].battler = $game_party.actors[1]
@actor_sprites[2].battler = $game_party.actors[2]
@actor_sprites[3].battler = $game_party.actors[3]
# If battleback file name is different from current one
if @battleback_name != $game_temp.battleback_name
@battleback_name = $game_temp.battleback_name
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
@battleback_sprite.src_rect.set(0, 0, 640, 480)
end
# Update battler sprites
for sprite in @enemy_sprites + @actor_sprites
sprite.update
end
# Update weather graphic
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.update
# Update picture sprites
for sprite in @picture_sprites
sprite.update
end
# Update timer sprite
@timer_sprite.update
# Set screen color tone and shake position
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
# Set screen flash color
@viewport4.color = $game_screen.flash_color
# Update viewports
@viewport1.update
@viewport2.update
@viewport4.update
end
end
class Actor_Command < Window_Selectable
def initialize
super(160, 384, 320, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
@item_max = 4
@column_max = 2
self.active = false
self.visible = false
self.index = 0
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(4, 0, 118, 32, $data_system.words.attack,1)
self.contents.draw_text(164, 0, 118, 32, $data_system.words.skill,1)
self.contents.draw_text(4, 32, 118, 32, $data_system.words.guard,1)
self.contents.draw_text(164, 32, 118, 32, $data_system.words.item,1)
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
self.cursor_rect.set(4 + index % 2 * 160, index / 2 * 32, 128, 32)
end
end
class Window_EnemyName < Window_Base
def initialize
super(0, 320, 160, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.font.size = 21
self.contents.draw_text(4, 0, 110, 32, "Enemies:")
for i in 0...$game_troop.enemies.size
x = 4 + i % 2 * 60
enemy = $game_troop.enemies[i]
y = i / 2 * 25 + 20
self.contents.font.size = 16
unless enemy.hp == 0
draw_slant_bar(x ,y + 25, enemy.hp, enemy.maxhp, 50, 6)
self.contents.draw_text(x, y, 130, 32, "#{enemy.name}")
end
end
end
end
class Window_Base < Window
#--------------------------------------------------------------------------
# * Draw Slant Bar(by SephirothSpawn)
#--------------------------------------------------------------------------
def draw_slant_bar(x, y, min, max, width = 152, height = 6,
bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
# Draw Border
for i in 0..height
self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
end
# Draw Background
for i in 1..(height - 1)
r = 100 * (height - i) / height + 0 * i / height
g = 100 * (height - i) / height + 0 * i / height
b = 100 * (height - i) / height + 0 * i / height
a = 255 * (height - i) / height + 255 * i / height
self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a))
end
# Draws Bar
for i in 1..( (min / max.to_f) * width - 1)
for j in 1..(height - 1)
r = bar_color.red * (width - i) / width + end_color.red * i / width
g = bar_color.green * (width - i) / width + end_color.green * i / width
b = bar_color.blue * (width - i) / width + end_color.blue * i / width
a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a))
end
end
end
end
class Game_Actor < Game_Battler
def screen_x
if self.index != nil
return self.index * 160 + 550
else
return 0
end
end
end
class Spriteset_Battle
alias seph_razdbsfix_ssbtl_update update
def update
seph_razdbsfix_ssbtl_update
if @battleback_sprite.bitmap.height < 480
src_bitmap = @battleback_sprite.bitmap
src_rect = Rect.new(0, 0, @battleback_sprite.bitmap.width,
@battleback_sprite.bitmap.height)
@battleback_sprite.bitmap = Bitmap.new(640, 480)
@battleback_sprite.bitmap.stretch_blt(Rect.new(0, 0, 640, 480),
src_bitmap, src_rect)
@battleback_sprite.src_rect.set(0, 0, 640, 480)
end
end
end