Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

> Munkis' Actor HUD
munkis
post Jan 3 2011, 11:36 AM
Post #1


Woah, dude...
Group Icon

Group: Revolutionary
Posts: 197
Type: Writer
RM Skill: Intermediate




Munkis' Actor HUD

Version: 1.3
Author: Munkis
Release Date: 01/03/2011


Exclusive Script at RPG RPG Revolution

Introduction
Displays character's face, name, and states in the top-left corner of the screen.

Features
Use Input::X to toggle the appearance of the HUD, and cycle through party members with Input::Z Use Input::Y to do a one-time update of the HUD if $game_system.always_update == false

In version 1.3, you have the option of disabling the button toggle with
CODE
$game_system.keep_static = true/false
in a script call. You can still hide the hud manually with
CODE
$game_system.show_hud = true/false


Script
Munkis' Actor HUD

CODE
#------------------------------------------------------------------------------
#  * Munkis' Actor HUD V 1.3 -- Animated States Version
#  * Made by munkis; assisted by Woogie
#    ╔══════════╗
#    ║ FEATURES ║
#    ╚══════════╝
#  * Displays character's face, name, and states.  Use Input::X to toggle the
#    appearance of the HUD, and cycle through party members with Input::Z  Use
#    Input::Y to do a one-time update of the HUD if
#    $game_system.always_update == false
#  * V 1.0: Initial release
#  * V 1.1: Improved lag reduction (not the way BigEd781 meant, but this'll work
#           until I can wrap my brain around it).  The HUD now automatically
#           refreshes by default; however the current methodology of lag
#           reduction this script uses means that this cannot be turned off.
#           Input::Y is now used to cycle through actors, and Input::Z is no
#           longer used. Aliased command_311, command_312, and command_313 of
#           Game_Interpreter (Change HP, Change MP, Change State respectively)
#           to account for the other changes made.  Also fixed a minor n00b
#           error where the script would cycle through actors even though there
#           was only one in the party.  Added options for custom HUD skins (you
#           can either use a custom pic or an internally generated basic skin).
#           Options for this are handled within a seperate config array.  The
#           pic skin can be up to screen size, but let's face it; having a
#           544X416 pic for the HUD skin would be pretty stupid;)
#  * V 1.2: With IceDragon's assistance, the icons now animate properly,
#           without the need for ziifee's script.  Also removed some code that
#           was rendered redundant from this change.
#  * V 1.3: Added the option to keep the HUD on-screen (can't be hidden by
#           Input::X)  However, the the HUD can still be toggled manually with
#           $game_system.show_hud = true/false.  Useful if you have YEM Keyboard
#           Input in your project and need to free up the keys.
#------------------------------------------------------------------------------

module MNK_Actor_HUD

  #CONFIG_PROPERTIES = [window opacity, appearance SE, disappearance SE,
  #default visibility, actor cycle SE]
  #The fourth setting is overridden if $game_system.show_hud == false
  CONFIG_PROPERTIES = [0,"Up","Down",false,"Book"]
  
  #CUSTOM_SKIN_PROPERTIES = [use custom skin, use pic for skin, use generated
  #skin, pic for skin, generated skin color 1, generated skin color 2]
  #Color.new(Red,Green,Blue,Alpha(opacity))
  CUSTOM_SKIN_PROPERTIES = [false,false,false,"",Color.new(0,0,0,128),Color.new(255,0,0,160)]

end

$imported = {} if $imported == nil
$imported["Munkis_HUD"] = true

class Bitmap
  def draw_icon(x, y, icon_index, enabled = true)
    bitmap = Cache.system("Iconset")
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    self.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  end
end
class Game_System
  attr_accessor :show_hud
  attr_accessor :keep_static
  alias munkis_hud_initialize initialize
  def initialize
    @show_hud = true
    @keep_static = false
    munkis_hud_initialize
  end
end
class Hud_Custom_Skin < Window_Base
  def initialize
    super(-16, -16, 576, 448)
    self.opacity = 0
    self.visible = false
    if MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[1] == true and MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[0] == true
      self.contents.clear
      bitmap = Cache.picture(MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[3])
      rect = Rect.new(0, 0, 0, 0)
      rect.x = -16
      rect.y = -16
      rect.width = 560
      rect.height = 432
      self.contents.blt(x, y, bitmap, rect)
      bitmap.dispose
    end
    if MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[2] == true and MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[0] == true
      rect = Rect.new(0, 0, 0, 0)
      rect.x = 0
      rect.y = 0
      rect.width = 128
      rect.height = 128
      contents.fill_rect(rect, MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[4])
      lsize = 2
      lcolor = MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[5]
      contents.fill_rect(rect.x, rect.y, lsize, rect.height, lcolor)
      contents.fill_rect(rect.x, rect.y, rect.width, lsize, lcolor)
      contents.fill_rect(rect.x + rect.width - lsize, rect.y, lsize, rect.height, lcolor)
      contents.fill_rect(rect.x, rect.y + rect.height - lsize, rect.width, lsize, lcolor)
    end
  end
end
class Hud_Main < Window_Base
  def initialize
    super(0, 352, 128, 128)
    if $game_system.show_hud == true
      self.visible = MNK_Actor_HUD::CONFIG_PROPERTIES[3]
    else
      self.visible = false
    end
    if MNK_Actor_HUD::CUSTOM_SKIN_PROPERTIES[0] == true
      self.opacity = 0
    else
      self.opacity = MNK_Actor_HUD::CONFIG_PROPERTIES[0]
    end
    @selected_actor_index = 0
    @next_state = 0
    @@stored_actor = $game_party.members[1]
  end
  def refresh
    self.contents.clear
    @party_size = $game_party.members.size
    for actor in $game_party.members
      next if actor.index != @selected_actor_index
        draw_state_icons(actor, x + 24, y + 72)
        draw_actor_information(actor, x, y)        
        @@stored_actor = actor.clone
      end
    end
  def change_displayed_actor
    Audio.se_play("audio/se/"+MNK_Actor_HUD::CONFIG_PROPERTIES[4],100,100)
    @selected_actor_index += 1
    @selected_actor_index = 0 if @selected_actor_index >= @party_size
  end
  def draw_actor_information(actor, x, y)
    draw_actor_face(actor, x, 0)
    draw_actor_name(actor, x, 0)
    draw_actor_hp(actor, x, 16, 96)
    draw_actor_mp(actor, x, 32, 96)
  end
  def draw_state_icons(actor, x, y)
    dispose_states_sprite
    @sprite_state = []
    @state_change_wait = 0
    return if actor == nil
    for i in 0..actor.states.size
      next if actor.states[i] == nil
      @sprite_state[i] = Sprite.new
      @sprite_state[i].bitmap = Bitmap.new(32, 32)
      icon = actor.states[i].icon_index
      @sprite_state[i].bitmap.draw_icon(0, 0, icon)
      @sprite_state[i].x = x
      @sprite_state[i].y = y
      @sprite_state[i].z = 4000
      @sprite_state[i].visible = false
    end
    if @sprite_state[0] != nil
       @sprite_state[0].visible = true
    end
  end
  def something_changed?
    return true if @@stored_actor == nil
    return true if @@stored_actor.hp != $game_actors[@@stored_actor.id].hp
    return true if @@stored_actor.mp != $game_actors[@@stored_actor.id].mp
    return true if @@stored_actor.states != $game_actors[@@stored_actor.id].states
    return false
  end
  def update
    refresh if something_changed?
    update_state_icons
  end
  def update_state_icons
    return if @sprite_state == nil
    if @state_change_wait == 60 and @sprite_state[@next_state] != nil    
      @sprite_state[@next_state].visible = false
      @next_state = (@next_state + 1) % @sprite_state.size
      @sprite_state[@next_state].visible = true
      @state_change_wait = 0
    end
    @state_change_wait += 1
  end
  def dispose
    super
    dispose_states_sprite
  end
  def dispose_states_sprite
    return if @sprite_state == nil
    for spr in @sprite_state
      next if spr == nil
      spr.dispose
      spr = nil
    end
    @sprite_state = []
  end
end
class Scene_Map < Scene_Base
  alias munkis_hud_update update
  alias munkis_hud_terminate terminate
  alias munkis_hud_main main
  def main
    @selected_actor_index = 0
    @hudskin = Hud_Custom_Skin.new
    @hudmain = Hud_Main.new
    munkis_hud_main
  end
  def update
    if $game_system.show_hud == false
      @hudmain.visible = false
      @hudskin.visible = false
    end
    if $game_system.keep_static == true
      @hudmain.visible = $game_system.show_hud
      @hudskin.visible = $game_system.show_hud
    end
    if Input.trigger?(Input::X) and @hudmain.visible == true and @hudskin.visible == true and $game_system.keep_static == false and $game_system.show_hud == true
      Audio.se_play("audio/se/"+MNK_Actor_HUD::CONFIG_PROPERTIES[2],100,100)
      @hudmain.visible = false
      @hudmain.dispose_states_sprite
      @hudskin.visible = false
    elsif Input.trigger?(Input::X) and @hudmain.visible == false and @hudskin.visible == false and $game_system.keep_static == false and $game_system.show_hud == true
      Audio.se_play("audio/se/"+MNK_Actor_HUD::CONFIG_PROPERTIES[1],100,100)
      @hudmain.visible = true
      @hudskin.visible = true
      @hudmain.refresh
    elsif Input.trigger?(Input::Y) and @hudmain.visible == true and $game_party.members.size >= 2
      @hudmain.change_displayed_actor
    end
    munkis_hud_update
    @hudmain.update if @hudmain.visible
  end
  def terminate
    munkis_hud_terminate
    @hudmain.dispose
    @hudskin.dispose
    return
  end
end



Customization
Look in the script; what little there is to be customized is pretty much self-explanatory.

Compatibility
If you set the first and second values of the second array to "true", you will need to include an image. Likely incompatible with other scripts that do the same thing.

Screenshot


(That one is a bit outdated, as it was taken before I updated the script for animating the states.)

DEMO
Not needed; it's a pretty simple script.

Installation
Place in the "Materials" section right above "Main".

FAQ
Q: ZOMG teh scriptz doesn't werk!!!

A: First of all, be more specific. Second, any and all reports typed in chat-speak or 1337-speak will be ignored.

Terms and Conditions
I don't mind my scripts being posted or linked on other RMVX sites AS LONG AS YOU GIVE CREDIT!!! Same goes for using this in your game. Contact me if you want to use this in a commercial project.

Credits

I did most of the work, so credit me please. IceDragon did help with animating the state icons, so credit him too if you like.

This post has been edited by munkis: Jul 13 2011, 11:19 AM


__________________________
Go to the top of the page
 
+Quote Post
   

Posts in this topic
- munkis   Munkis' Actor HUD   Jan 3 2011, 11:36 AM
- - munkis   Updated to V 1.3   Jul 13 2011, 11:20 AM
- - Storm237   Interesting! Though I wont use it! It look...   Jul 13 2011, 11:24 AM


Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 24th May 2013 - 10:43 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker