I came across Star's battle HUD script recently and decided to tweak it slightly and use it.
The script works almost perfectly except for one thing. The HP gauge does not fill completely when healing in battle.
Iv'e been trying to figure out why for hours now, and can't figure it out. The MP gauge works just fine.
I'm hoping someone else has messed with this one before.
Here is a quick image:

The max HP is 180, and the bar SHOULD be filled all the way.
Here is the script:
CODE
#==============================================================================
# ?~€RGSS2
# STR33g1_BattleStatus 0.5 08/03/20
#==============================================================================
# ?Features
# Different HP/MP Gauge Flavor
# "Rolling" Numbers
# State Icon Cycle
#==============================================================================
# ?Materials
# This script requires several image skins.
# Skin images are placed in the .Graphics\System folder:
# Main Skin
# HP/MP Back Gauge Skin
# - No size limit.
# HP/MP Gauge
# - Normally two gauges
# - Width = Unlimited
# - Height = Gauge Height(Optional) * 2
# Numbers
# - 0123456789 is the order of number arrays
# - Width = One Frame Width(Any Size) * 10
# - Height = Unlimited
# State Skin
# State Icon Main Skin
# Main skin is separate.
# - No size limit.
#==============================================================================
# ?€“? Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Selectable
# Skin File name
BTSKIN_00 = "atb_Btskin_main" # Main Skin
BTSKIN_01 = "atb_Btskin_hp" # HP(Gauge)
BTSKIN_02 = "atb_Btskin_mp" # MP(Gauge)
BTSKIN_04 = "Btskin_n00" # HP(Numbers)
BTSKIN_05 = "Btskin_n00" # MP(Numbers)
BTSKIN_03 = "atb_Btskin_state" # State
# Skin coordinates[ x, y]
BTSKIN_B_XY = [ 0, 0] # Standard Coordinates
BTSKIN_00XY = [ 0, 0] # Main Skin
BTSKIN_01XY = [97, 16] # HP(Gauge)
BTSKIN_02XY = [216, 16] # MP(Gauge)
BTSKIN_04XY = [122, 1] # HP(Numbers)
BTSKIN_05XY = [222, 1] # MP(Numbers)
BTSKIN_03XY = [-24, 0] # State Skin
BTSKIN_06XY = [-24, 0] # State
# Various Settings
#<--------------------------(Low values are fast)-------------------------->#
BTSKIN_01GS = 10 # HP Gauge Speed (Low values are fast)
BTSKIN_02GS = 4 # MP Gauge Speed(Low values are fast)
BTSKIN_04SS = 8 # HP Rolling Numbers Speed(Low values are fast)
BTSKIN_05SS = 2 # MP Rolling Numbers Speed(Low values are fast)
BTSKIN_04NS = 4 # HP Maximum Digits
BTSKIN_05NS = 4 # MP Maximum Digits
BTSKIN_06WH = [24,24] # [State Width, Height]
BTSKIN_06SC = 2 # State Icon Scroll Speed
# (Values close to 1 are fast)
# ?f??f^?f??€š??f€?f??€š??€š???„
def set_xy
@x = []
@y = []
for i in 0...$game_party.members.size
x = 0 + 96
y = (i * 24)
@x[i] = x + 16 #+ STRRGSS2::ST_SX
@y[i] = y + 16 #+ STRRGSS2::ST_SY
end
end
# Set š?€?€‚?€œ?€œ to
@@f = false
#--------------------------------------------------------------------------
# ?~€ ?€š??€š??f??€š??€š?
#--------------------------------------------------------------------------
alias initialize_str33 initialize
def initialize(f = false)
initialize_str33
unless @@f
@f = @@f = true
else
@f = false
end
set_xy
@s_sprite = []
@s_party = []
@s_lv = []
@opacity = 0
self.contents.dispose
self.create_contents
self.back_opacity = 0
self.opacity = 0
#@column_max = $game_party.actors.size
@viewport = Viewport.new(0, 416-128, 416, 128)
@hpgw = (Cache.system(BTSKIN_01)).width
@mpgw = (Cache.system(BTSKIN_02)).width
@viewport.z = self.z - 1
@state_opacity = []
@item_max = $game_party.members.size
return unless @f
for i in 0...@item_max
draw_item(i)
end
update
end
#--------------------------------------------------------------------------
# ?€”? ?f??f€?f??ff?€š??f???€”
#--------------------------------------------------------------------------
def refresh
# :-)
end
#--------------------------------------------------------------------------
# ?€”? ?€š??f€?f??f^???€?
#--------------------------------------------------------------------------
def draw_actor_state(actor)
icon = Cache.system("Iconset")
w = actor.states.size * 24
w = 24 if w < 1
bitmap = Bitmap.new(w, BTSKIN_06WH[1])
count = 0
for state in actor.states
icon_index = state.icon_index
x = 24 * count
rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
bitmap.blt(x, 0, icon, rect)
count += 1
end
return bitmap
end
#--------------------------------------------------------------------------
# ?€”? ??€??o?^?
#--------------------------------------------------------------------------
def name_bitmap(actor)
bitmap = Bitmap.new(100, 24)
bitmap.font.size = 16
bitmap.draw_text_f(0, 0, 100, 24, actor.name)
return bitmap
end
#--------------------------------------------------------------------------
# ?€”? ?€š??f€?f??f^?€??€“?€”
#--------------------------------------------------------------------------
def state_size(actor)
return actor.states.size
end
#--------------------------------------------------------------------------
# ?€”? ?€š??€š??f€?f??o?^?
#--------------------------------------------------------------------------
def draw_item(index)
return unless @f
actor = $game_party.members[index]
#
@s_sprite[index] = []
s = @s_sprite[index]
# ?f??€š??f??€š??€š??f?
s[0] = Sprite.new(@viewport)
s[0].bitmap = Cache.system(BTSKIN_00)
s[0].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_00XY[0]
s[0].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_00XY[1]
s[0].z = 0
# HP
s[1] = Sprite.new(@viewport)
s[1].bitmap = Cache.system(BTSKIN_01)
s[1].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_01XY[0]
s[1].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_01XY[1]
s[1].z = 4
w = s[1].bitmap.width
h = s[1].bitmap.height / 2
s[1].src_rect.set(0, 0, w, h)
s[2] = Sprite.new(@viewport)
s[2].bitmap = Cache.system(BTSKIN_01)
s[2].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_01XY[0]
s[2].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_01XY[1]
s[2].z = 3
s[2].src_rect.set(0, h, w, h)
s[11] = 96
s[6] = Sprite_strNumbers.new(@viewport, BTSKIN_04, BTSKIN_04NS)
s[6].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_04XY[0]
s[6].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_04XY[1]
s[6].z = 5
s[13] = actor.hp
s[6].update(s[13])
# MP
s[3] = Sprite.new(@viewport)
s[3].bitmap = Cache.system(BTSKIN_02)
s[3].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_02XY[0]
s[3].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_02XY[1]
s[3].z = 4
w = s[3].bitmap.width
h = s[3].bitmap.height / 2
s[3].src_rect.set(0, 0, w, h)
s[4] = Sprite.new(@viewport)
s[4].bitmap = Cache.system(BTSKIN_02)
s[4].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_02XY[0]
s[4].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_02XY[1]
s[4].z = 3
s[4].src_rect.set(0, h, w, h)
s[12] = 56
s[7] = Sprite_strNumbers.new(@viewport, BTSKIN_05, BTSKIN_05NS)
s[7].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_05XY[0]
s[7].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_05XY[1]
s[7].z = 5
s[14] = actor.mp
s[7].update(s[14])
# ?€š??f€?f??f^
s[5] = Viewport.new(0, 0, BTSKIN_06WH[0], BTSKIN_06WH[1])
s[5].rect.x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_06XY[0] + @viewport.rect.x
s[5].rect.y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_06XY[1] + @viewport.rect.y
s[5].z = @viewport.z + 1
s[8] = Sprite.new(@viewport)
s[8].bitmap = Cache.system(BTSKIN_03)
s[8].x = @x[index] + BTSKIN_B_XY[0] + BTSKIN_03XY[0]
s[8].y = @y[index] + BTSKIN_B_XY[1] + BTSKIN_03XY[1]
s[8].z = -2
s[9] = Plane.new(s[5])
s[9].bitmap = draw_actor_state(actor)
s[10] = state_size(actor)
# ??o???€š??f€?f??€š??€š??
s[11] = ((@hpgw * (actor.hp / (actor.maxhp * 1.0))) + 1).truncate
if actor.maxmp != 0
s[12] = ((@mpgw * (actor.mp / (actor.maxmp * 1.0))) + 1).truncate
else
s[12] = 0
end
s[15] = Sprite.new(@viewport)
s[15].bitmap = name_bitmap(actor)
s[15].x = @x[index] + 4
s[15].y = @y[index] + 2
s[15].z = 0
s[1].src_rect.width = s[11]
s[2].src_rect.width = s[11]
s[3].src_rect.width = s[12]
s[4].src_rect.width = s[12]
s[6].update(s[13])
s[7].update(s[14])
# ???€“?
for l in [0,1,2,3,4,8,9,15]
s[l].opacity = 0
end
for l in [6,7]
s[l].o = 0
end
# ?f€??~?€?
@s_lv[index] = actor.level
@s_party[index] = [actor.name, actor.hp, actor.maxhp,
actor.mp, actor.maxmp, actor.states]
#
end
#--------------------------------------------------------------------------
# ?€”? ?€š??f€“?€š??€š??€š??f^?€“€?€?
#--------------------------------------------------------------------------
def dispose
super
return unless @f
for i in 0...@s_sprite.size
for l in [0,1,2,3,4,8,9,15]
@s_sprite[i][l].bitmap.dispose
@s_sprite[i][l].dispose
end
for l in [5,6,7]
@s_sprite[i][l].dispose
end
end
@@f = false
end
#--------------------------------------------------------------------------
# ?€”? ?f€?f??f??f??€??€“?
#--------------------------------------------------------------------------
def update
super
return unless @f
for i in 0...@s_sprite.size
s = @s_sprite[i]
a = $game_party.members[i]
m = @s_party[i]
@state_opacity[i] = 0 if @state_opacity[i] == nil
# ??‚??~Ž??€š??ff?f€”
@state_opacity[i] += 8
if @opacity < 272
@opacity += 8
for l in [0,1,2,3,4,15]
s[l].opacity = @opacity
end
for l in [6,7]
s[l].o = @opacity
end
end
# ??€??€??€“?
if a.name != m[0]
s[15].bitmap.dispose
s[15].bitmap = name_bitmap(a)
m[0] = a.name
end
# HP/MP?€??€“?
update_hp(s,a,m)
update_mp(s,a,m)
# ?€š??f€?f??f^?€??€“?
if s[10] > BTSKIN_06WH[0] / 24 and (Graphics.frame_count % BTSKIN_06SC) == 0
s[9].ox += 1
end
if s[10] > 0 and @state_opacity[i] < 272
for l in [8,9]
s[l].opacity = @state_opacity[i]
end
end
if a.states != m[5]
m[5] = a.states
s[9].ox = 0
s[9].bitmap.dispose
s[9].bitmap = draw_actor_state($game_party.members[i])
s[10] = state_size($game_party.members[i])
@state_opacity[i] = 0
for l in [8,9]
s[l].opacity = @state_opacity[i]
end
end
end
end
#--------------------------------------------------------------------------
# ?€”? ?f€?f??f??f??€??€“? (HP)
#--------------------------------------------------------------------------
def update_hp(s,a,m)
# HP??€š€??€š€
if a.hp != s[13]
c = 0; c = 1 if a.hp < a.maxhp / 4; c = 2 if a.hp == 0
if s[13] > a.hp
s[13] -= BTSKIN_04SS
s[13] = a.hp if s[13] < a.hp
else
s[13] += BTSKIN_04SS
s[13] = a.hp if s[13] > a.hp
end
s[6].update(s[13], c)
end
# HP
if a.hp != m[1]
s[11] = ((@hpgw * (a.hp / (a.maxhp * 1.0))) + 1).truncate
m[1] = a.hp
end
sr = s[1].src_rect
if sr.width != s[11]
sp = BTSKIN_01GS
sr.width = (s[11] + (s[1].src_rect.width * (sp - 1))) / sp
sr.width = 2 if sr.width <= 1 and a.hp > 0
end
sr = s[2].src_rect
sp = 2
if sr.width != s[1].src_rect.width and (Graphics.frame_count % sp) == 0
if sr.width < s[1].src_rect.width
sr.width += 1
else
sr.width -= 1
end
end
sr.width = 2 if sr.width <= 1 and a.hp > 0
end
#--------------------------------------------------------------------------
# ?€”? ?f€?f??f??f??€??€“? (MP)
#--------------------------------------------------------------------------
def update_mp(s,a,m)
# MP??€š€??€š€
if a.mp != s[14]
c = 0; c = 1 if a.mp < a.maxmp / 4
if s[14] > a.mp
s[14] -= BTSKIN_05SS
s[14] = a.mp if s[14] < a.mp
else
s[14] += BTSKIN_05SS
s[14] = a.mp if s[14] > a.mp
end
s[7].update(s[14], c)
end
# MP
if a.mp != m[3]
if a.maxmp != 0
s[12] = ((@mpgw * (a.mp / (a.maxmp * 1.0))) + 1).truncate
else
s[12] = 0
end
m[3] = a.mp
end
sr = s[3].src_rect
if sr.width != s[12]
sp = BTSKIN_02GS
sr.width = (s[12] + (s[3].src_rect.width * (sp - 1))) / sp
sr.width = 2 if sr.width <= 1 and a.mp > 0
end
sr = s[4].src_rect
sp = 2
if sr.width != s[3].src_rect.width and (Graphics.frame_count % sp) == 0
if sr.width < s[3].src_rect.width
sr.width += 1
else
sr.width -= 1
end
end
sr.width = 2 if sr.width <= 1 and a.mp > 0
end
end
#==============================================================================
# ?€“? Sprite_strNumber
#==============================================================================
class Sprite_strNumber < Sprite
#--------------------------------------------------------------------------
# ?€”? ?€š??f€“?€š??€š??€š??f^?^??oY?O€“
#--------------------------------------------------------------------------
def initialize(v, gra, n = 0)
@n = n
super(v)
self.bitmap = Cache.system(gra)
@w = self.bitmap.width/10
@h = self.bitmap.height/3
self.src_rect = Rect.new(@n*@w, 0, @w, @h)
end
#--------------------------------------------------------------------------
# ?€”? ?f€?f??f??f??€??€“?
#--------------------------------------------------------------------------
def update(n = -1, c = 0)
@n = n
self.src_rect.x = @n*@w
self.src_rect.y = c*@h
end
end
#==============================================================================
# ?€“? Sprite_strNumbers
#==============================================================================
class Sprite_strNumbers
attr_accessor :x
attr_accessor :y
attr_accessor :z
attr_accessor
#--------------------------------------------------------------------------
# ?€”? ?€š??f€“?€š??€š??€š??f^?^??oY?O€“
#--------------------------------------------------------------------------
def initialize(v, gra, n = 4, s = 0)
@n = n # ??€?
@x = 0
@y = 0
@z = 0
@o = 255
@sprite = []
# ?€”?€“€œ??š
b = Cache.system(gra)
@s = b.width / 10 - s
# ?€š??f€”?f??€š??f^?o?^?
for i in 0...n
@sprite[i] = Sprite_strNumber.new(v, gra)
end
update
end
#--------------------------------------------------------------------------
# ?€”? ?f€?f??f??f??€??€“?
#--------------------------------------------------------------------------
def update(v = 0, c = 0)
val = []
# ?€??‚??€š€™?€??^€”???
for i in 0...@n
if (10 ** (i)) == 0
val[i] = v % 10
else
val[i] = v / (10 ** (i)) % 10
end
end
val = val.reverse
# ?€^??0?€š€™?€“?€šŠ?„??
for i in 0...@n
if val[i] == 0 and @n != i + 1
val[i] = -1
else
break
end
end
# ?€š??f€”?f??€š??f^?€??€“?
for i in 0...@n
@sprite[i].update(val[i], c)
@sprite[i].x = @x + (i * @s)
@sprite[i].y = @y
@sprite[i].z = @z
@sprite[i].opacity = @o
end
end
#--------------------------------------------------------------------------
# ?€”? ??‚??~Ž????€?
#--------------------------------------------------------------------------
def o=(val)
@o = val
for i in 0...@n
@sprite[i].opacity = @o
end
end
#--------------------------------------------------------------------------
# ?€”? ?€š??f€“?€š??€š??€š??f^?€“€?€?
#--------------------------------------------------------------------------
def dispose
for i in 0...@sprite.size
@sprite[i].bitmap.dispose
@sprite[i].dispose
end
end
end
#==============================================================================
# ?€“? Bitmap
#==============================================================================
# This script controls the shadow behind actor names for *STR33g1_Battle Status.
class Bitmap
#--------------------------------------------------------------------------
# Draw shadow text
#--------------------------------------------------------------------------
def draw_text_f(x, y, width, height, str, align = 0, color = Color.new(64,32,128))
shadow = self.font.shadow
b_color = self.font.color.dup
font.shadow = true
self.font.name = "Calibri"
self.font.size = 20
font.color = color
draw_text(x + 1, y, width, height, str, align)
draw_text(x - 1, y, width, height, str, align)
draw_text(x, y + 1, width, height, str, align)
draw_text(x, y - 1, width, height, str, align)
font.color = b_color
draw_text(x, y, width, height, str, align)
font.shadow = shadow
end
def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
end
end
This post has been edited by madwithstaples: Feb 20 2012, 04:45 PM