#======================================
# ■ Squad Based Action Battle System Heads Up Display Upgrade
#======================================
# By: AcedentProne
# Massive Edits: RadethDart
# Date: 9.06.08
# Version: 1
# Thanks To: Near Fantastica for SBABS and help with Curved Bars
# Thanks To: Astro_Mech for basis of Curved Bars
# Thanks To: Fuso for Status Icon Script and basis of Curved Bars
# Thanks To: [url=http://www012.upp.so-net.ne.jp/iceax/framepage1.htm]http://www012.upp.so-net.ne.jp/iceax/framepage1.htm[/url]
# for Status Icons
#======================================
#
#======================================
# ■ ABS HUD
#======================================
# There are 5 Different Heads Up Displays, HUDs, included
# in this script.
#
# HUD name Discription
#
# HUD-Display ● Futuristic / Sci-Fi
# HUD-Display2 ● Western / Ranch
# HUD-Display3 ● Medieval / Knighting
# HUD-Display4 ● Modern / Plastic
# HUD-Display5 ● B.C. / Roman or Greek
#======================================
#
#======================================
# ■ Changing Between Them
#======================================
# To change HUDs in game, use a call script and the Line:
#
# $ABS.hudname = "HUD-DisplayX"
#
# X = The Display number. Leave blank for Futuristic.
#
# To change starting HUD find line 117 of the SBABS script
# and change "HUD-Display" to the one you want.
#
# Add more Picture files of the same general shape to
# make more variety.
#======================================
#
#======================================
# ■ Status Effects
#======================================
# Status Effects are controlled by Icons in the Icons Folder.
# To add new status effects, name one in the "Status Effects"
# tab of the Database and add an icon to the Icons Folder
# named "Status-X"
# Replace X with the Status Effect name.
#======================================
class Window_Base < Window
#------------------------------------------------------------------------
def draw_actor_name(actor, x, y)
if actor !=nil
self.contents.draw_text(x, y, 120, 32, actor.name)
end
end
#------------------------------------------------------------------------
def draw_actor_hp_hud(actor, x, y)
if actor !=nil
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
hp_x = contents.text_size($data_system.words.hp).width + 5
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.draw_text(hp_x+ x, y, 48, 32, actor.hp.to_s)
end
end
#------------------------------------------------------------------------
def draw_actor_sp_hud(actor, x, y)
if actor !=nil
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
sp_x = contents.text_size($data_system.words.sp).width + 5
self.contents.font.color = actor.sp == 0 ? knockout_color :
actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
self.contents.draw_text(sp_x+ x, y, 48, 32, actor.sp.to_s)
end
end
#------------------------------------------------------------------------
def draw_picture(name, x, y)
bitmap = RPG::Cache.picture(name)
w = bitmap.width
h = bitmap.height
src_rect = Rect.new(0, 0, w, h)
self.contents.blt(x, y , bitmap, src_rect)
end
#------------------------------------------------------------------------
def draw_actor_face(actor, x, y, o = 160)
if actor !=nil
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
end
w = bitmap.width/4
h = (bitmap.height/4)/2#22
src_rect = Rect.new(0, 0, w, h)
self.contents.blt(x - w/2, y - h/2 , bitmap, src_rect, o)
end
#------------------------------------------------------------------------
def draw_actor_hp_bar(actor, x, y, width, height = 4, bar_color = Color.new(255, 0, 0, 200))
if actor !=nil
self.contents.fill_rect(x, y, width, height, Color.new(255, 255, 255, 100))
w = width * actor.hp / actor.maxhp
for i in 0..height
r = bar_color.red * (height -i)/height + 0 * i/height
g = bar_color.green * (height -i)/height + 0 * i/height
b = bar_color.blue * (height -i)/height + 0 * i/height
a = bar_color.alpha * (height -i)/height + 255 * i/height
self.contents.fill_rect(x, y+i, w, 1, Color.new(r, g, b, a))
end
end
end
#-----------------------------------------------------------------------
def draw_actor_sp_bar(actor, x, y, width , height = 4, bar_color = Color.new(0, 0, 255, 200))
if actor !=nil
self.contents.fill_rect(x, y, width, height, Color.new(255, 255, 255, 100))
w = width * actor.sp / actor.maxsp
for i in 0..height
r = bar_color.red * (height -i)/height + 0 * i/height
g = bar_color.green * (height -i)/height + 0 * i/height
b = bar_color.blue * (height -i)/height + 0 * i/height
a = bar_color.alpha * (height -i)/height + 255 * i/height
self.contents.fill_rect(x, y+i, w, 1, Color.new(r, g, b, a))
end
end
end
def draw_actor_hud_state(actor, x, y)
if actor !=nil
for state_i in actor.states
bt = RPG::Cache.icon("Status-"+$data_states[state_i].name)
self.contents.stretch_blt(
Rect.new(x, y, bt.width/1,bt.height/1),
bt,
Rect.new(0,0,bt.width,bt.height))
x += bt.width / 2 + 1
end
end
end
end
#======================================
# ■ Window hud
#======================================
class Window_HUD < Window_Base
#--------------------------------------------------------------------------
def initialize
viewport1 = Viewport.new(45, 360, 80, 80)
viewport2 = Viewport.new(520, 360, 80, 80)
viewport2.z = 100
viewport1.z = 100
@hp_sprite = Sprite.new(viewport1)
@hp_sprite.bitmap = RPG::Cache.picture("hpbar.png")
@hp_sprite.y = 80
@hp_sprite.oy = 80
@hp_sprite.opacity = 160
@sp_sprite = Sprite.new(viewport1)
@sp_sprite.bitmap = RPG::Cache.picture("spbar.png")
@sp_sprite.y = 80
@sp_sprite.oy = 80
@sp_sprite.opacity = 160
@dash_sprite = Sprite.new(viewport2)
@dash_sprite.bitmap = RPG::Cache.picture("dashbar.png")
@dash_sprite.y = 80
@dash_sprite.ox = 80
@dash_sprite.x = 80
@dash_sprite.oy = 80
@dash_sprite.opacity = 160
@sneak_sprite = Sprite.new(viewport2)
@sneak_sprite.bitmap = RPG::Cache.picture("sneakbar.png")
@sneak_sprite.y = 80
@sneak_sprite.oy = 80
@sneak_sprite.x = 80
@sneak_sprite.ox = 80
@sneak_sprite.opacity = 160
super(-16, -16, 640+32, 480+32)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Times New Roman"
self.contents.font.size = 13
self.opacity = 0
refresh
end
#--------------------------------------------------------------------------
def dispose
@hp_sprite.dispose
@sp_sprite.dispose
@dash_sprite.dispose
@sneak_sprite.dispose
super
end
#--------------------------------------------------------------------------
def set_bars(flag)
@hp_sprite.visible = flag
@sp_sprite.visible = flag
@dash_sprite.visible = flag
@sneak_sprite.visible = flag
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_picture($ABS.hudname,1, 1)
if $ABS.hudname == "HUD-Display4"
colorific = Color.new(0,0,0,255)
elsif $ABS.hudname == "HUD-Display5"
colorific = Color.new(0,0,0,255)
else
colorific = Color.new(255,255,255,255)
end
actor = $game_party.actors[0]
self.contents.font.size = 13
cx = contents.text_size("Lead:").width
cy = contents.text_size("Lead:").width
self.contents.font.color = colorific
draw_actor_hud_state(actor, 94, 30)
self.contents.draw_text(54, 14, cx, cy + 2, "Lead:")
draw_actor_name(actor, 62, 30)
draw_actor_face(actor, 42, 44, 200)
@actor = $game_party.actors[0]
@str = @actor.str
@dex = @actor.dex
@int = @actor.int
@agi = @actor.agi
self.contents.draw_text(50, 60, 96, 16, "#{$data_system.words.str}: #{@str}")
self.contents.draw_text(50, 75, 96, 16, "#{$data_system.words.dex}: #{@dex}")
self.contents.draw_text(50, 90, 96, 16, "#{$data_system.words.int}: #{@int}")
self.contents.draw_text(50, 105, 96, 16, "#{$data_system.words.agi}: #{@agi}")
self.contents.font.color = colorific
#HP
percent = actor.hp.to_f / actor.maxhp.to_f
percent *= 100
angle = (90 - percent * 0.9) * -1
@hp_sprite.angle = angle
#SP
percent = actor.sp.to_f / actor.maxsp.to_f
percent *= 100
angle = (90 - percent * 0.9)* -1
@sp_sprite.angle = angle
#Dash
percent = $ABS.dash_level.to_f / 5
percent *= 100
angle = (90 - percent * 0.9)
@dash_sprite.angle = angle
#Sneak
percent = $ABS.sneak_level.to_f / 5
percent *= 100
angle = (90 - percent * 0.9)
@sneak_sprite.angle = angle
self.contents.font.size = 13
w = contents.text_size("LongNa").width
w1 = contents.text_size("Dead").width
self.contents.font.color = colorific
draw_actor_name($game_party.actors[1], 450, 20)
if $game_party.actors[1] != nil
if$game_party.actors[1].hp >= 1
draw_actor_hp_bar($game_party.actors[1], 450 + w + 5, 28, w)
draw_actor_sp_bar($game_party.actors[1], 450 + w + 5, 38, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w + 5, 20, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
draw_actor_name($game_party.actors[2], 450, 49)
if $game_party.actors[2] != nil
if $game_party.actors[2].hp >= 1
draw_actor_hp_bar($game_party.actors[2], 450 + w + 5, 57, w)
draw_actor_sp_bar($game_party.actors[2], 450 + w + 5, 67, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w + 5, 49, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
draw_actor_name($game_party.actors[3], 450, 79)
if $game_party.actors[3] != nil
if $game_party.actors[3].hp >= 1
draw_actor_hp_bar($game_party.actors[3], 450 + w + 5, 87, w)
draw_actor_sp_bar($game_party.actors[3], 450 + w + 5, 97, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w + 5, 79, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
draw_actor_name($game_party.actors[4], 450 + w + 45, 20)
if $game_party.actors[4] != nil
if $game_party.actors[4].hp >= 1
draw_actor_hp_bar($game_party.actors[4], 450 + w*2 + 50 , 28, w)
draw_actor_sp_bar($game_party.actors[4], 450 + w*2 + 50 , 38, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w*2 + 50, 20, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
draw_actor_name($game_party.actors[5], 450 + w + 45, 49)
if $game_party.actors[5] != nil
if $game_party.actors[5].hp >= 1
draw_actor_hp_bar($game_party.actors[5], 450 + w*2 + 50 , 57, w)
draw_actor_sp_bar($game_party.actors[5], 450 + w*2 + 50 , 67, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w*2 + 50, 49, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
draw_actor_name($game_party.actors[6], 450 + w + 45, 79)
if $game_party.actors[6] != nil
if $game_party.actors[6].hp >= 1
draw_actor_hp_bar($game_party.actors[6], 450 + w*2 + 50 , 87, w)
draw_actor_sp_bar($game_party.actors[6], 450 + w*2 + 50 , 97, w)
else
self.contents.font.color = Color.new(255,0,0,255)
self.contents.draw_text(450 + w*2 + 50, 79, w1, 32, "Dead")
self.contents.font.color = colorific
end
end
end
#--------------------------------------------------------------------------
def update
if @str != $game_party.actors[0].str or
@agi != $game_party.actors[0].agi or
@int != $game_party.actors[0].int or
@dex != $game_party.actors[0].dex
end
if @hp_sprite.visible == true and self.visible == false
set_bars(self.visible)
end
if @hp_sprite.visible == false and self.visible == true
set_bars(self.visible)
end
return if Graphics.frame_count % 20 != 0
return if self.visible == false
refresh
@str = $game_party.actors[0].str
@dex = $game_party.actors[0].dex
@int = $game_party.actors[0].int
@agi = $game_party.actors[0].agi
Graphics.frame_reset
end
end
#==============================================