03-07-2008, 04:41 AM
1 Person DBS
Version: 1.1
Version: 1.1
Introduction
A quick request I made.
Features
- Shows the enemy's name and a small health bar.
- Supports 640 * 480 big Battlebackgrounds.
Script
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
Instructions
Place it above main. If you're using a CBS, put this script below it. I aliased most parts, so it should be compatible.
FAQ
None yet.
Compatibility
May be incompatible with your CBS.
Credits and Thanks
Thanks to Kaze950 for requesting it.
Thanks to SephirothSpawn for the bars script.
Author's Notes
Enjoy.