No, but I'll sure try to teach you how to do it! Teach a man to fish, etc. First off, I have edited that script to be more readable. I also fixed the "Stack level too deep" error you'd get if you pushed F12. Keep in mind this won't fix it if you have other scripts that
alias things dumbly.
Code:
#==============================================================================
# ** Window_YourHUD
#------------------------------------------------------------------------------
# This Window displays relavent values to the player during gameplay.
# by emeraldcyndaquil
#==============================================================================
class Window_YourHUD < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.opacity = 0
self.contents = Bitmap.new(640 - 32, 64 - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
reset_variables
return if !@actor
draw_actor_hp(@actor, 0, 0)
draw_actor_sp(@actor, 200, 0)
draw_actor_exp(@actor, 400, 0)
end
#--------------------------------------------------------------------------
# * Reset Stored Variables
#--------------------------------------------------------------------------
def reset_variables
@actor = $game_party.actors[0]
@old_hp = @actor ? @actor.hp : 0
@old_maxhp = @actor ? @actor.maxhp : 0
@old_sp = @actor ? @actor.sp : 0
@old_maxsp = @actor ? @actor.maxsp : 0
end
#---------------------------------------------------------------------------
# * Update (called once a frame)
#---------------------------------------------------------------------------
def update
super
refresh if (@actor = $game_party.actors[0] or
@old_hp = @actor ? @actor.hp : 0 or
@old_maxhp = @actor ? @actor.maxhp : 0 or
@old_sp = @actor ? @actor.sp : 0 or
@old_maxsp = @actor ? @actor.maxsp : 0)
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# We've edited this to add a HUD
#==============================================================================
class Scene_Map
#---------------------------------------------------------------------------
# * Alias Listings (fixes F12 bug)
#---------------------------------------------------------------------------
unless method_defined?(:yourhud_main)
alias_method(:yourhud_main, :main)
alias_method(:yourhud_update, :update)
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
@yourhud = Window_YourHUD.new
yourhud_main
@yourhud.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@yourhud.update
yourhud_update
end
end
Step one, we need a way to draw the variable, so grab the
draw_variable(x, y) method from my script and put in into
Window_YourHUD. For it to work it has to go after the
end of a method but before the
def of another. So put it between
Code:
end
#--------------------------------------------------------------------------
Now there are only three more steps! Next we want to tell the script to draw our Event Variable. So we add a call to our method,
draw_variable(x, y). But where? See if you can't figure it out (HINT: look for other
draw_stuff)
The next thing to do is to add our own variable to track the game's Event Variables. We do this because drawing something on-screen takes a long time and so we only want to do it if we need to (when the number changes).
Variables in ruby are made by typing a word.
old_ammo would be a variable! We also have a thing called Scope, which means "who can look at my variable?" Putting an
@ in front of a word means the entire class can access its value, and putting
$ means the entire game can access it. So look at the
reset_variables method, and add:
Code:
@old_ammo = $game_variables[WHICH_VARIABLE]
Now the whole
Window_YourHUD can see the value of
@old_ammo. Don't forget to change WHICH_VARIABLE to your Event Variable number.
Now we just have to modify the
update method, so it can check our ammo and call
refresh if it is different. The
update method currently looks like
Code:
#---------------------------------------------------------------------------
# * Update (called once a frame)
#---------------------------------------------------------------------------
def update
super
refresh if (@actor = $game_party.actors[0] or
@old_hp = @actor ? @actor.hp : 0 or
@old_maxhp = @actor ? @actor.maxhp : 0 or
@old_sp = @actor ? @actor.sp : 0 or
@old_maxsp = @actor ? @actor.maxsp : 0)
end
Wait... what? I think we found a bug! This code says "Refresh if, oh but also set these old variables to the current value." I am assume the author mean to use
== which compares two values, but even that is wrong. What we want is "Refresh if our old variables do NOT equal the current value" The current way is going to draw on every frame, which is going to cause lag. It SHOULD be
Code:
#---------------------------------------------------------------------------
# * Update (called once a frame)
#---------------------------------------------------------------------------
def update
super
refresh if (@actor != $game_party.actors[0] or
@old_hp != @actor ? @actor.hp : 0 or
@old_maxhp != @actor ? @actor.maxhp : 0 or
@old_sp != @actor ? @actor.sp : 0 or
@old_maxsp != @actor ? @actor.maxsp : 0)
end
Sorry, got off track... We need to add a Conditional! So it knows to
refresh if our ammo changed. Can you figure out what we need to add?
So now it should work!
Bonus: Maybe you want to make it say "Ammo: 12" instead of just "12"? Push CTRL+SHIFT+F in the script editor and search for "def draw_actor_hp". And then study how it is different from my
draw_variable method.
Good luck!