#==============================================================================
# DRG - Growing Hud
# Version : 1.00
# Author : LiTTleDRAgo
#==============================================================================
module LiTTleDRAgo
HUD_POSITION = [5,425] # X and Y
HUD_PRIORITY = 1 # Hud Z
DISABLE_HUD_SWITCH = 5 # Switch to disable hud
# (enter false if there aren't)
LAYOUT_IMAGE = "Layout Wing"
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc.
# It's used within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
unless method_defined?(:drg2032013_update)
alias drg2032013_update update
alias drg2032013_dispose dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
drg2032013_update
@hp_sprite.nil? ? create_hud : update_hud
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
drg2032013_dispose
dispose_hud
end
#--------------------------------------------------------------------------
# * dispose_hud
#--------------------------------------------------------------------------
def dispose_hud
[@hud_face,@hp_sprite,@sp_sprite,@states,
@hp_number_sprite,@sp_number_sprite].each {|s|s.dispose}
end
#--------------------------------------------------------------------------
# * create_hud
#--------------------------------------------------------------------------
def create_hud
@party_leader = $game_party.actors[0]
return if @party_leader.nil?
create_hud_face
create_hp_meter
create_hp_number
create_sp_meter
create_sp_number
create_state
update_visible_hud(false)
end
#--------------------------------------------------------------------------
# * update_hud
#--------------------------------------------------------------------------
def update_hud
return if @party_leader.nil?
hp_flow_update
hp_number_update
sp_flow_update
sp_number_update
update_max_hp
update_visible_hud
update_states
end
#--------------------------------------------------------------------------
# * Update States
#--------------------------------------------------------------------------
def update_states
if @states_x != @party_leader.states.size
@states_x = @party_leader.states.size
@states.bitmap.clear
@states_max = 0
sta = []
for i in @party_leader.states
unless @states_max > 5
sta.push($data_states[i].name)
image = RPG::Cache.icon(sta[@states_max]) rescue RPG::Cache.icon('')
cw = image.width
ch = image.height
@states.bitmap.blt(26 * @states_max, 0, image, Rect.new(0, 0, cw, ch))
@states_max += 1
end
end
sta = nil
end
end
#--------------------------------------------------------------------------
# * update_max_hp
#--------------------------------------------------------------------------
def update_max_hp
if @party_leader != $game_party.actors[0]
dispose_hud
create_hud
return if @party_leader.nil?
end
if @maxhp_old != @party_leader.maxhp
@maxhp_old = @party_leader.maxhp
@hp_sprite.dispose
create_hp_meter
create_hud_face
end
if @maxsp_old != @party_leader.maxsp
@maxsp_old = @party_leader.maxsp
@sp_sprite.dispose
create_sp_meter
end
end
#--------------------------------------------------------------------------
# * update_max_hp
#--------------------------------------------------------------------------
def update_visible_hud(value=nil)
visible = hud_visible?
visible = value if !value.nil?
@hud_face.visible =
@hp_sprite.visible =
@sp_sprite.visible =
@states.visible =
@hp_number_sprite.visible =
@sp_number_sprite.visible = visible
end
#--------------------------------------------------------------------------
# * hud_visible?
#--------------------------------------------------------------------------
def hud_visible?
sw = LiTTleDRAgo::DISABLE_HUD_SWITCH
sw = sw.is_a?(Integer) ? $game_switches[sw] : false
return false if $game_system.map_interpreter.running?
return false if sw
return true
end
#--------------------------------------------------------------------------
# * Create State
#--------------------------------------------------------------------------
def create_state
@states_max = 0
@states = Sprite.new
@states.bitmap = Bitmap.new(156,24)
@states_x = @party_leader.states.size
@states_y = 0
@states_f = false
sta = []
for i in @party_leader.states
unless @states_max > 5
sta.push($data_states[i].name)
image = RPG::Cache.icon(sta[@states_max]) rescue RPG::Cache.icon('')
cw = image.width
ch = image.height
@states.bitmap.blt(26 * @states_max, 0, image, Rect.new(0, 0, cw, ch))
@states_max += 1
end
end
@states.x = @hp_sprite.x
@states.y = @hp_sprite.y - 30
@states.z = @hp_sprite.z
end
#--------------------------------------------------------------------------
# * create_hud_face
#--------------------------------------------------------------------------
def create_hud_face
@hud_face = Sprite.new
bitmap_file = "Hud_Face#{@party_leader.id}"
hp = @party_leader.hp * 100 / @party_leader.maxhp
hp_name = case hp
when 0..10 then "_10"
when 11..25 then "_25"
when 26..50 then "_50"
when 51..75 then "_75"
else
""
end
@face = RPG::Cache.windowskin(bitmap_file + hp_name) rescue RPG::Cache.windowskin(bitmap_file)
lay = RPG::Cache.windowskin(LiTTleDRAgo::LAYOUT_IMAGE)
text = RPG::Cache.windowskin("HP Text")
@hud_face.bitmap = Bitmap.new(@face.height+250,@face.height+50)
bit = Bitmap.new(200,50)
bit.stretch_blt(bit.rect,lay,lay.rect)
@hud_face.bitmap.blt(40,2,bit,bit.rect)
@hud_face.bitmap.blt(5,5,@face,@face.rect)
@hud_face.bitmap.blt(@face.height+1,8,text,text.rect)
@hud_face.x = LiTTleDRAgo::HUD_POSITION[0]
@hud_face.y = LiTTleDRAgo::HUD_POSITION[1]
@hud_face.z = LiTTleDRAgo::HUD_PRIORITY
end
#--------------------------------------------------------------------------
# * Create HP Number
#--------------------------------------------------------------------------
def create_hp_number
@hp_number_image = RPG::Cache.windowskin("Hud Number")
@hp_number_bitmap = Bitmap.new(@hp_number_image.width,@hp_number_image.height)
@hp_number_sprite = Sprite.new
@hp_number_sprite.bitmap = @hp_number_bitmap
@hp_number_sprite.x = @hp_sprite.x - 20
@hp_number_sprite.y = @hp_sprite.y
@hp_number_sprite.z = @hp_sprite.z + 1
@im_cw = @hp_number_image.width / 10
@im_ch = @hp_number_image.height / 2
@hp_src_rect = Rect.new(@im_cw,0, @im_cw, @im_ch)
@hp_number_text = @party_leader.hp.abs.to_s.split(//)
lowhp2 = @party_leader.maxhp * 30 / 100
if @party_leader.hp < lowhp2
@health2 = @im_ch
else
@health2 = 0
end
@hp_health = @health2
for r in 0..@hp_number_text.size - 1
@hp_number_abs = @hp_number_text[r].to_i
@hp_src_rect = Rect.new(@im_cw * @hp_number_abs, @hp_health, @im_cw, @im_ch)
@hp_number_bitmap.blt(20 + ((@im_cw - 7) * r), 0, @hp_number_image, @hp_src_rect)
end
end
#--------------------------------------------------------------------------
# * hp_number_update
#--------------------------------------------------------------------------
def hp_number_update
return unless @hp_old != @party_leader.hp
create_hud_face
@hp_refresh = true
if @hp_old.nil? || @hp_old < @party_leader.hp
@hp_ref = 5 * (@party_leader.hp - (@hp_old||0)) / 100
@hp_ref = 1 if @hp_ref < 1
@hp2032013 = (@hp||10000)+@hp_ref
if @hp_old.nil? || @hp2032013 >= @party_leader.hp
@hp_old = @party_leader.hp
@hp2032013 = @party_leader.hp
@hp_ref = 0
hp_number_refresh
end
elsif @hp_old > @party_leader.hp
@hp_refresh = true
@hp_ref = 5 * (@hp_old - @party_leader.hp) / 100
@hp_ref = 1 if @hp_ref < 1
@hp2032013 -= @hp_ref
if @hp2032013 <= @party_leader.hp
@hp_old = @party_leader.hp
@hp2032013 = @party_leader.hp
@hp_ref = 0
hp_number_refresh
end
end
hp_number_refresh if @hp_refresh
end
#--------------------------------------------------------------------------
# * hp_number_refresh
#--------------------------------------------------------------------------
def hp_number_refresh
@hp_number_sprite.bitmap.clear
@hp2032013 = 0 if @party_leader.hp == 0
@hp_number_text = @hp2032013.abs.to_s.split(//)
lowhp2 = @party_leader.maxhp * (@low_hp||30) / 100
if @party_leader.hp < lowhp2
@health2 = @im_ch
else
@health2 = 0
end
@hp_health = @health2
for r in 0..@hp_number_text.size - 1
@hp_number_abs = @hp_number_text[r].to_i
@hp_src_rect = Rect.new(@im_cw * @hp_number_abs, @hp_health, @im_cw, @im_ch)
@hp_number_bitmap.blt(20 + ((@im_cw - 7) * r), 0, @hp_number_image, @hp_src_rect)
end
@hp_refresh = false if @hp2032013 == @party_leader.hp
end
#--------------------------------------------------------------------------
# * Create HP Meter
#--------------------------------------------------------------------------
def create_hp_meter
@hp_bar = RPG::Cache.windowskin("HP Bar")
@hp_image = RPG::Cache.windowskin("HP Meter")
@hp_bitmap = Bitmap.new(@hp_bar.width,@hp_bar.height)
@hp_range = @hp_bar.width
@hp_width = @hp_range * @party_leader.hp / @party_leader.maxhp
@hp_height = @hp_image.height
hp_width_old = @hp_width
hp_src_rect = Rect.new(0, 0, @hp_width, @hp_height)
@hp_bitmap.blt(0,0, @hp_bar, @hp_bar.rect)
@hp_bitmap.blt(3,2, @hp_image, hp_src_rect)
width = [(@party_leader.maxhp/10).to_i,1].max
hp_bitmap_true = Bitmap.new(width ,@hp_bar.height)
hp_bitmap_true.stretch_blt(hp_bitmap_true.rect,@hp_bitmap,@hp_bitmap.rect)
@hp_sprite = Sprite.new
@hp_sprite.bitmap = hp_bitmap_true.dup
@hp_sprite.x = @hud_face.x + @face.width + 25
@hp_sprite.y = @hud_face.y + 8
@hp_sprite.z = @hud_face.z + 1
hp_bitmap_true.dispose
end
#--------------------------------------------------------------------------
# * Create HP Meter
#--------------------------------------------------------------------------
def create_sp_meter
@sp_bar = RPG::Cache.windowskin("SP Bar")
@sp_image = RPG::Cache.windowskin("SP Meter")
@sp_bitmap = Bitmap.new(@sp_bar.width,@sp_bar.height)
@sp_range = @sp_bar.width
@sp_width = @sp_range * @party_leader.sp / @party_leader.maxsp
@sp_height = @sp_image.height
sp_width_old = @sp_width
sp_src_rect = Rect.new(0, 0, @sp_width, @sp_height)
@sp_bitmap.blt(0,0, @sp_bar, @sp_bar.rect)
@sp_bitmap.blt(3,2, @sp_image, sp_src_rect)
width = [(@party_leader.maxsp/10).to_i,1].max
sp_bitmap_true = Bitmap.new(width ,@sp_bar.height)
sp_bitmap_true.stretch_blt(sp_bitmap_true.rect,@sp_bitmap,@sp_bitmap.rect)
@sp_sprite = Sprite.new
@sp_sprite.bitmap = sp_bitmap_true.dup
@sp_sprite.x = @hp_sprite.x
@sp_sprite.y = @hp_sprite.y + @hp_sprite.bitmap.height + 6
@sp_sprite.z = @hud_face.z + 1
sp_bitmap_true.dispose
end
#--------------------------------------------------------------------------
# * hp_flow_update
#--------------------------------------------------------------------------
def hp_flow_update
return if @hp_bar.nil?
@hp_flow = (@hp_flow||0) + 5
@hp_flow = 0 if @hp_flow >= @hp_range*2
@hp_width = @hp_range * @party_leader.hp / @party_leader.maxhp
if @old_hp != (100 * @party_leader.hp) / @party_leader.maxhp
@old_hp = (100 * @party_leader.hp) / @party_leader.maxhp
@hp_bitmap.clear
@hp_bitmap.blt(0,0, @hp_bar, @hp_bar.rect)
if @old_hp < 30 && !@low_hp_warn
@low_hp_warn = true
elsif @old_hp >= 30 && @low_hp_warn
@low_hp_warn = false
end
end
hp_src_rect = Rect.new(@hp_flow, 0, @hp_width, @hp_height)
@hp_bitmap.blt(3,2, @hp_image, hp_src_rect)
@hp_sprite.bitmap.stretch_blt(@hp_sprite.bitmap.rect,@hp_bitmap,
@hp_bitmap.rect)
end
#--------------------------------------------------------------------------
# * sp_flow_update
#--------------------------------------------------------------------------
def sp_flow_update
return if @sp_bar.nil?
@sp_flow = (@sp_flow||0) + 5
@sp_flow = 0 if @sp_flow >= @sp_range*2
@sp_width = @sp_range * @party_leader.sp / @party_leader.maxsp
if @old_sp != (100 * @party_leader.sp) / @party_leader.maxsp
@old_sp = (100 * @party_leader.sp) / @party_leader.maxsp
@sp_bitmap.clear
@sp_bitmap.blt(0,0, @sp_bar, @sp_bar.rect)
if @old_sp < 30 && !@low_sp_warn
@low_sp_warn = true
elsif @old_sp >= 30 && @low_sp_warn
@low_sp_warn = false
end
end
sp_src_rect = Rect.new(@sp_flow, 0, @sp_width, @sp_height)
@sp_bitmap.blt(3,2, @sp_image, sp_src_rect)
@sp_sprite.bitmap.stretch_blt(@sp_sprite.bitmap.rect,@sp_bitmap,
@sp_bitmap.rect)
end
#--------------------------------------------------------------------------
# * Create sp Number
#--------------------------------------------------------------------------
def create_sp_number
@sp_number_image = RPG::Cache.windowskin("Hud Number")
@sp_number_bitmap = Bitmap.new(@sp_number_image.width,@sp_number_image.height)
@sp_number_sprite = Sprite.new
@sp_number_sprite.bitmap = @sp_number_bitmap
@sp_number_sprite.x = @sp_sprite.x - 20
@sp_number_sprite.y = @sp_sprite.y
@sp_number_sprite.z = @sp_sprite.z + 2
@im_cw = @sp_number_image.width / 10
@im_ch = @sp_number_image.height / 2
@sp_src_rect = Rect.new(@im_cw,0, @im_cw, @im_ch)
@sp_number_text = @party_leader.sp.abs.to_s.split(//)
lowsp2 = @party_leader.maxsp * 30 / 100
if @party_leader.sp < lowsp2
@health2 = @im_ch
else
@health2 = 0
end
@sp_health = @health2
for r in 0..@sp_number_text.size - 1
@sp_number_abs = @sp_number_text[r].to_i
@sp_src_rect = Rect.new(@im_cw * @sp_number_abs, @sp_health, @im_cw, @im_ch)
@sp_number_bitmap.blt(20 + ((@im_cw - 7) * r), 0, @sp_number_image, @sp_src_rect)
end
end
#--------------------------------------------------------------------------
# * sp_number_update
#--------------------------------------------------------------------------
def sp_number_update
return unless @sp_old != @party_leader.sp
@sp_refresh = true
if @sp_old.nil? || @sp_old < @party_leader.sp
@sp_ref = 5 * (@party_leader.sp - (@sp_old||0)) / 100
@sp_ref = 1 if @sp_ref < 1
@sp2032013 = (@sp||10000)+@sp_ref
if @sp_old.nil? || @sp2032013 >= @party_leader.sp
@sp_old = @party_leader.sp
@sp2032013 = @party_leader.sp
@sp_ref = 0
sp_number_refresh
end
elsif @sp_old > @party_leader.sp
@sp_refresh = true
@sp_ref = 5 * (@sp_old - @party_leader.sp) / 100
@sp_ref = 1 if @sp_ref < 1
@sp2032013 -= @sp_ref
if @sp2032013 <= @party_leader.sp
@sp_old = @party_leader.sp
@sp2032013 = @party_leader.sp
@sp_ref = 0
sp_number_refresh
end
end
sp_number_refresh if @sp_refresh
end
#--------------------------------------------------------------------------
# * sp_number_refresh
#--------------------------------------------------------------------------
def sp_number_refresh
@sp_number_sprite.bitmap.clear
@sp2032013 = 0 if @party_leader.sp == 0
@sp_number_text = @sp2032013.abs.to_s.split(//)
lowsp2 = @party_leader.maxsp * (@low_sp||30) / 100
if @party_leader.sp < lowsp2
@health2 = @im_ch
else
@health2 = 0
end
@sp_health = @health2
for r in 0..@sp_number_text.size - 1
@sp_number_abs = @sp_number_text[r].to_i
@sp_src_rect = Rect.new(@im_cw * @sp_number_abs, @sp_health, @im_cw, @im_ch)
@sp_number_bitmap.blt(20 + ((@im_cw - 7) * r), 0, @sp_number_image, @sp_src_rect)
end
@sp_refresh = false if @sp2032013 == @party_leader.sp
end
end