#==============================================================================
# ** HUD
#------------------------------------------------------------------------------
# Mr.Mo "Muhammet Sivri" & Axerax
# Version 1.8
# 10.01.06
# Credit: Prexus for the Original Background. Axerax for edited HUD Background.
# Axerax for HUD Display,Mini-Map Backdrop HUD, and Hotkeys HUD.
# Notes: Be sure you have the Selwyn Passability Mini-Map before trying to use
# this version of the HUD. As well follow steps provided by Selwyn in his script
# to display the Mini-Map itself, my HUD will not display it for you, it is only
# a backdrop that displays the name of the map you are currently on.
#==============================================================================
#-------------------------------------------------------------------------------
# Begin SDK Enabled Check
#-------------------------------------------------------------------------------
if SDK.enabled?("Mr.Mo's ABS")
#--------------------------------------------------------------------------
# * Constants - MAKE YOUR EDITS HERE
#--------------------------------------------------------------------------
TIME_VISIBLE = false
HP_X = 54 Â Â Â Â Â Â # X POS of the HP Bar
HP_Y = 3 Â Â Â Â Â Â Â # Y POS of the HP Bar
HP_WIDTH = 55 Â Â Â Â # WIDTH of the HP Bar
HP_HEIGHT = 5 Â Â Â Â # Height of the HP Bar
#--------------------------------------------------------------------------
SP_X = 54 Â Â Â Â Â Â # X POS of the SP Bar
SP_Y = 22 Â Â Â Â Â Â # Y POS of the SP Bar
SP_WIDTH = 55 Â Â Â Â # WIDTH of the SP Bar
SP_HEIGHT = 5 Â Â Â Â # Height of the SP Bar
#--------------------------------------------------------------------------
EXP_X = 55 Â Â Â Â Â Â # X POS of the EXP Bar
EXP_Y = 42 Â Â Â Â Â Â # Y POS of the EXP Bar
EXP_WIDTH = 60 Â Â Â Â # WIDTH of the EXP Bar
EXP_HEIGHT = 5 Â Â Â Â # Height of the EXP Bar
#--------------------------------------------------------------------------
STATES_SHOW = true   # Show states?
STATES_X = 170 Â Â Â Â # States X display
STATES_Y = 430 Â Â Â Â # States Y display
#--------------------------------------------------------------------------
HOTKEYS_SHOW = true  #Show hotkeys?
HOTKEYS_X = 180 Â Â Â #Hotkeys X Display
HOTKEYS_Y = 440 Â Â Â #Hotkeys Y Display
#--------------------------------------------------------------------------
SHOW_DASH = true    # Show dash bar?
DASH_X = 95 Â Â Â Â Â # X POS of the DASH Bar
DASH_Y = 430 Â Â Â Â Â # Y POS of the DASH Bar
DASH_WIDTH = 55 Â Â Â # WIDTH of the DASH Bar
DASH_HEIGHT = 5 Â Â Â # Height of the DASH Bar
DASH_BAR = "018-Simple03" # The file used for gradient
#--------------------------------------------------------------------------
SHOW_SNEAK = true    # Show SNEAK bar?
SNEAK_X = 95 Â Â Â Â Â # X POS of the SNEAK Bar
SNEAK_Y = 445 Â Â Â Â Â # Y POS of the SNEAK Bar
SNEAK_WIDTH = 55 Â Â Â # WIDTH of the SNEAK Bar
SNEAK_HEIGHT = 5 Â Â Â # Height of the SNEAK Bar
SNEAK_BAR = "019-Simple04" # The file used for gradient
#--------------------------------------------------------------------------
LOW_HP = 150 Â Â Â Â Â # What HP should the low HP icon be shown?
#--------------------------------------------------------------------------
HP_ITEMID = 1 Â Â Â Â # POTION ITEM ID
SP_ITEMID = 4 Â Â Â Â # SP Increase Item ID
#--------------------------------------------------------------------------
CAN_TOGGLE = true
TOGGLE_KEY = Input::Letters["E"]
#--------------------------------------------------------------------------
MINI_MAP = true    # Display Mini-Map?
#--------------------------------------------------------------------------
class Window_MrMo_HUD < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
  super(-16, -16, 700, 700)
  #Record Old Data
  @actor = $game_party.actors[0]
  @old_hp = @actor.hp
  @old_sp = @actor.sp
  @old_exp = @actor.exp
  @level = @actor.level
  @hp_n = $game_party.item_number(HP_ITEMID)
  @sp_n = $game_party.item_number(SP_ITEMID)
  @gold_n = $game_party.gold
  @states = @actor.states.to_s
  @dash = $ABS.dash_min
  @sneak = $ABS.sneak_min
  #Create Bitmap
  self.contents = Bitmap.new(width - 32, height - 32)
  #Hide Window
  self.opacity = 0
  #Refresh
  refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
  self.contents.clear
  self.contents.font.color = system_color
  self.contents.font.color = normal_color
  self.contents.font.size = 12
  #Record new data
  @actor = $game_party.actors[0]
  @old_hp = @actor.hp
  @old_sp = @actor.sp
  @old_exp = @actor.exp
  @level = @actor.level
  @hp_n = $game_party.item_number(HP_ITEMID)
  @sp_n = $game_party.item_number(SP_ITEMID)
  @gold_n = $game_party.gold
  @states = @actor.states.to_s
  @dash = $ABS.dash_min
  @sneak = $ABS.sneak_min
  @time = game_time
  @time = $kts.time.to_s if $kts != nil
  #Show the Pictures
  bitmap = RPG::Cache.picture("HUD Graphic")
  self.contents.blt(0, 0, bitmap, Rect.new(0, 10, 175, 175))
  bitmap = RPG::Cache.picture("HUD Display")
  self.contents.blt(15, 380, bitmap, Rect.new(0, 0, 175, 175))
  if TIME_VISIBLE == true
  bitmap = RPG::Cache.picture("HUD Time Display")
  self.contents.blt(553.5, 338.5, bitmap, Rect.new(0, 0, 175, 175))
  end
  bitmap = RPG::Cache.picture("Hotkeys HUD")
  self.contents.blt(250, -10, bitmap, Rect.new(0, 0, 400, 80))
  if MINI_MAP
   bitmap = RPG::Cache.picture("Mini-Map HUD")
   self.contents.blt(493, 362.5, bitmap, Rect.new(0, 0, 175, 175))
   #Show Map Name
   map_infos = load_data("Data/MapInfos.rxdata")
   name = map_infos[$game_map.map_id].name.to_s
   self.contents.draw_text(520, 455, 400, 32, name.to_s)
  end
  #Show the HP Symbol
  bitmap = RPG::Cache.icon("HP Symbol")
  self.contents.blt(0, -2, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(35, -9, 640, 32, "HP")
  #Draw the HP BAR
  draw_gradient_bar(HP_X, HP_Y, @actor.hp, @actor.maxhp, HP_BAR, HP_WIDTH, HP_HEIGHT)
  #Show the SP Symbol
  bitmap = RPG::Cache.icon("SP Symbol")
  self.contents.blt(0, 18, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(35, 11, 640, 32, "SP")
  #Draw the SP Bar
  draw_gradient_bar(SP_X, SP_Y, @actor.sp, @actor.maxsp, SP_BAR, SP_WIDTH, SP_HEIGHT)
  #Show the EXP Symbol
  bitmap = RPG::Cache.icon("EXP Symbol")
  self.contents.blt(0, 37, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(35, 30, 640, 32, "EXP")
  #Draw the EXP Bar
  min = @actor.level == 99 ? 1 : @actor.now_exp
  max = @actor.level == 99 ? 1 : @actor.next_exp
  draw_gradient_bar(EXP_X, EXP_Y, min, max, EXP_BAR, EXP_WIDTH, EXP_HEIGHT)
  #Show Hero Icon
  bitmap = RPG::Cache.icon("Hero")
  self.contents.blt(2, 59, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(35, 49, 640, 32, "Hero:")
  self.contents.draw_text(30, 59, 640, 32, @actor.name.to_s)
  #Show Level Icon
  bitmap = RPG::Cache.icon("Level")
  self.contents.blt(2, 81, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(33, 72, 640, 32, "Level:")
  self.contents.draw_text(43, 82, 640, 32, @actor.level.to_s)
  #Show Gold Icon
  bitmap = RPG::Cache.icon("Gold")
  self.contents.blt(35, 390, bitmap, Rect.new(0, 0, 24, 24))
  self.contents.draw_text(30, 400, 640, 32, $game_party.gold.to_s)
  #Show Clock
  self.contents.font.color = system_color
  self.contents.font.color = normal_color
  self.contents.font.size = 14
  if TIME_VISIBLE == true
  self.contents.draw_text(570, 270, 175, 175, @time.to_s)
  end
  #If the HP is too low
  if @actor.hp.to_i <= LOW_HP
   bitmap = RPG::Cache.icon("Skull")
   self.contents.blt(130, 0, bitmap, Rect.new(0, 0, 24, 24))
  end
  #If the SP Item is more then 0
  if $game_party.item_number(SP_ITEMID) > 0
   bitmap = RPG::Cache.icon("SP Potion")
   self.contents.blt(110, 20, bitmap, Rect.new(0, 0, 24, 24))
  end
  #if the HP Item is more then 0
  if $game_party.item_number(HP_ITEMID) > 0
   bitmap = RPG::Cache.icon("HP Potion")
   self.contents.blt(110, 0, bitmap, Rect.new(0, 0, 24, 24))
  end
  if STATES_SHOW
   begin
    #Draw States Background
    n = -2
    for id in @actor.states
     state = $data_states[id]
     next if state == nil
     bitmap = RPG::Cache.picture("States Display")
     x = (n*40) + 185
     self.contents.blt(x, 50, bitmap, Rect.new(0, 0, 49, 58))
     n += 1
    end
    #Draw States
    n = -2
    for id in @actor.states
     state = $data_states[id]
     next if state == nil
     bitmap = RPG::Cache.icon(state.name+"_Icon")
     x = (n*40) + +195
     self.contents.blt(x, 65, bitmap, Rect.new(0, 0, 24, 24))
     self.contents.draw_text(x, 66.5, 49, 58, state.name.to_s)
     n += 1
    end
   rescue
    print "#{$!} - Don't ask Mr.Mo for it!!!"
   end
  end
  if HOTKEYS_SHOW
   #Draw Hotkeys
   count = 0
   #Make a loop to get all the ideas that are Hotkeyed
   @actor.skill_keys.each {|key, id|
    #Skip NIL values
    next if id == nil
    x = (count*32) + 280
    #Get skill
    skill = $data_skills[id]
    # Next if skill is nil
    next if skill.nil?
    #Get Icon
    icon = RPG::Cache.icon(skill.icon_name)
    self.contents.blt(x, 27, icon, Rect.new(0, 0, 200, 100))
    #self.contents.draw_text(x, 33, 49, 58, skill.name.to_s)
    n = Keys.name?(key)
    self.contents.draw_text(x+10, 33, 49, 58, "#{n}")
    #Increase Count
    count += 1
   }
  end
  #Change font size
  self.contents.font.size = 20
  #Dash Bar
  self.contents.draw_text(DASH_X - 40, DASH_Y-10, 40, 32, "") if SHOW_DASH
  draw_gradient_bar(DASH_X, DASH_Y, $ABS.dash_min, $ABS.dash_max, DASH_BAR, DASH_WIDTH, DASH_HEIGHT) if SHOW_DASH
  #SNEAK Bar
  self.contents.draw_text(SNEAK_X - 40, SNEAK_Y-10, 40, 32, "") if SHOW_SNEAK
  draw_gradient_bar(SNEAK_X, SNEAK_Y, $ABS.sneak_min, $ABS.sneak_max, SNEAK_BAR, SNEAK_WIDTH, SNEAK_HEIGHT) if SHOW_SNEAK
 end
 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
  refresh if something_changed?
 end
 #--------------------------------------------------------------------------
 # * Something Changed?
 #--------------------------------------------------------------------------
 def something_changed?
  return false if Graphics.frame_count % 30 != 0
  return true if @actor != $game_party.actors[0]
  return true if @old_hp != @actor.hp or @old_sp != @actor.sp or @old_exp != @actor.exp
  return true if @level != @actor.level
  return true if @hp_n != $game_party.item_number(HP_ITEMID) or @sp_n != $game_party.item_number(SP_ITEMID)
  return true if @gold_n != $game_party.gold
  return true if @states.to_s != @actor.states.to_s
  return true if @dash != $ABS.dash_min or @sneak != $ABS.sneak_min
  return true if $kts != nil and @time != $kts.time.to_s
  return true if $kts == nil and @time != game_time
  return false
 end
 #--------------------------------------------------------------------------
 # * Game Time
 #--------------------------------------------------------------------------
 def game_time
  total_sec = Graphics.frame_count / Graphics.frame_rate
  hour = total_sec / 60 / 60
  min = total_sec / 60 % 60
  sec = total_sec % 60
  text = sprintf("%02d:%02d:%02d", hour, min, sec)
  return text
 end
 #--------------------------------------------------------------------------
 def CAN_TOGGLE
  return CAN_TOGGLE
 end
 #--------------------------------------------------------------------------
 def TOGGLE_KEY
  return TOGGLE_KEY
 end
end
#==============================================================================
# * Scene_Map
#==============================================================================
class Scene_Map
 #--------------------------------------------------------------------------
 alias mrmo_hud_main_window main_window
 alias mrmo_keyhud_update update
 #--------------------------------------------------------------------------
 # * Main Draw
 #--------------------------------------------------------------------------
 def main_window
  @mrmo_hud = Window_MrMo_HUD.new
  mrmo_hud_main_window
 end
 #--------------------------------------------------------------------------
 # * Turn HUD Show
 #--------------------------------------------------------------------------
 def hud_show
  @mrmo_hud.visible = true
 end
 #--------------------------------------------------------------------------
 # * Turn HUD Hide
 #--------------------------------------------------------------------------
 def hud_hide
  @mrmo_hud.visible = false
 end
 #--------------------------------------------------------------------------
 # * Update
 #--------------------------------------------------------------------------
 def update
  mrmo_keyhud_update
  if @mrmo_hud.CAN_TOGGLE and Input.trigger?(@mrmo_hud.TOGGLE_KEY)
   return @mrmo_hud.visible = true if !@mrmo_hud.visible
   return @mrmo_hud.visible = false if @mrmo_hud.visible
  end
 end
end
#--------------------------------------------------------------------------
# * SDK End
#--------------------------------------------------------------------------
end
class Game_Actor
 #--------------------------------------------------------------------------
 # * Get the current EXP
 #--------------------------------------------------------------------------
 def now_exp
  return @exp - @exp_list[@level]
 end
 #--------------------------------------------------------------------------
 # * Get the next level's EXP
 #--------------------------------------------------------------------------
 def next_exp
  exp = @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  return exp
 end
end