Animated Control Timer Meter
Authors: Moghunter
Version: 2.0
Type: HUD add-on
Key Term: Misc Add-on
IntroductionPresents an animated count down meter for control timer!
Features
- Uses pictures to show a Controlled Timer
- Animations involved,
- Requires 4 pictures in Graphics / Windowskins
- Location can be easily edited (even by noobs)
Screenshots(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/XP_SYS08.GIF)
DemoXP_Animated_Control_timer_meter (http://www.atelier-rgss.com/RGSS/Demos/XP_TIME_METER.exe)
Script
#==============================================================================
# +++ MOG XP - Timer Meter v2.0 +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Apresenta um medidor animado com a contagem de tempo.
#==============================================================================
# Serão necessários os seguintes arquivos na pasta Graphics/Windowskins
#
# Timer_Layout.png
# Timer_Meter.png
# Timer_Number.png
# Timer_Fire.png
#
#==============================================================================
# Histórico
# 2.0 - Novos efeitos e melhor codificação.
#==============================================================================
module MOG_TIMER_METER
#Posição geral da janela de contagem. (X,Y)
TIMER_POS = [180,30]
#Posição do medidor. (X,Y)
METER_POS = [60,9]
#Posição do número. (X,Y)
NUMBER_POS = [104,24]
#Posição da animação do fogo. (X,Y)
FIRE_POS = [60,0]
#Velocidade da animação do medidor.
METER_FLOW_SPEED = 5
#Velocidade da animação do fogo.
FIRE_ANIMATION_SPEED = 3
#Prioridade do medidor.
PRIORITY_Z = 200
end
#==============================================================================
# ** Game_System
#==============================================================================
class Game_System
attr_accessor :timer_prev
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
alias mog_timer_meter_initialize initialize
def initialize
@timer_prev = 1
mog_timer_meter_initialize
end
end
#==============================================================================
# ** Interpreter
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# * command_124
#--------------------------------------------------------------------------
alias mog_timer_meter_command_124 command_124
def command_124
mog_timer_meter_command_124
$game_system.timer_prev = $game_system.timer - 40
$game_system.timer_prev = 1 if $game_system.timer == 0
end
end
#==============================================================================
# ** Sprite_Timer
#==============================================================================
class Sprite_Timer < Sprite
include MOG_TIMER_METER
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize
super
update_timer
create_layout
create_meter
create_number
create_fire
end
#--------------------------------------------------------------------------
# * create_layout
#--------------------------------------------------------------------------
def create_layout
@layout = Sprite.new
@layout.bitmap = RPG::Cache.windowskin("Timer_Layout")
@layout.z = PRIORITY_Z
@layout.x = TIMER_POS[0]
@layout.y = TIMER_POS[1]
end
#--------------------------------------------------------------------------
# * create_meter
#--------------------------------------------------------------------------
def create_meter
@meter_flow = 0
@meter_image = RPG::Cache.windowskin("Timer_Meter")
@meter_bitmap = Bitmap.new(@meter_image.width,@meter_image.height)
@meter_range = @meter_image.width / 3
@meter_width = @meter_range * ($game_system.timer - 40) / $game_system.timer_prev
@meter_width = 0 if $game_system.timer < 40
@meter_height = @meter_image.height
@meter_src_rect = Rect.new(@meter_range, 0, @meter_width, @meter_height)
@meter_bitmap.blt(0,0, @meter_image, @meter_src_rect)
@meter_sprite = Sprite.new
@meter_sprite.bitmap = @meter_bitmap
@meter_sprite.z = PRIORITY_Z + 1
@meter_sprite.x = TIMER_POS[0] + METER_POS[0]
@meter_sprite.y = TIMER_POS[1] + METER_POS[1]
update_flow
end
#--------------------------------------------------------------------------
# * create_number
#--------------------------------------------------------------------------
def create_number
@number_image = RPG::Cache.windowskin("Timer_Number")
@number_bitmap = Bitmap.new(@number_image.width,@number_image.height)
@number_sprite = Sprite.new
@number_sprite.bitmap = @number_bitmap
@number_sprite.z = PRIORITY_Z + 3
@number_sprite.x = TIMER_POS[0] + NUMBER_POS[0]
@number_sprite.y = TIMER_POS[1] + NUMBER_POS[1]
@number_cw = @number_image.width / 10
@number_ch = @number_image.height
refresh_number
@number = @total_sec
end
#--------------------------------------------------------------------------
# * create_fire
#--------------------------------------------------------------------------
def create_fire
@fire_flow = 0
@fire_flow_speed = 0
@fire_refresh = false
@fire_image = RPG::Cache.windowskin("Timer_Fire")
@fire_bitmap = Bitmap.new(@fire_image.width,@fire_image.height)
@fire_width = @fire_image.width / 4
@fire_src_rect_back = Rect.new(0, 0,@fire_width, @fire_image.height)
@fire_bitmap.blt(0,0, @fire_image, @fire_src_rect_back)
@fire_sprite = Sprite.new
@fire_sprite.bitmap = @fire_bitmap
@fire_sprite.z = PRIORITY_Z + 2
@fire_sprite.x = -5 + @meter_width + TIMER_POS[0] + FIRE_POS[0]
@fire_sprite.y = TIMER_POS[1] + FIRE_POS[1]
update_fire
end
#--------------------------------------------------------------------------
# * dispose
#--------------------------------------------------------------------------
def dispose
@layout.bitmap.dispose
@layout.dispose
@meter_sprite.bitmap.dispose
@meter_sprite.dispose
@meter_bitmap.dispose
@number_sprite.bitmap.dispose
@number_sprite.dispose
@number_bitmap.dispose
@fire_bitmap.dispose
@fire_sprite.bitmap.dispose
@fire_sprite.dispose
super
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update
super
update_visible
update_timer
update_flow
update_fire
refresh_number
end
#--------------------------------------------------------------------------
# * draw_number
#--------------------------------------------------------------------------
def draw_number(x,y,value)
@number_text = value.abs.to_s.split(//)
plus_x = -@number_cw * @number_text.size
for r in 0..@number_text.size - 1
@number_abs = @number_text[r].to_i
@number_src_rect = Rect.new(@number_cw * @number_abs, 0, @number_cw, @number_ch)
@number_bitmap.blt(plus_x + x + (@number_cw * r), y, @number_image, @number_src_rect)
end
end
#--------------------------------------------------------------------------
# * refresh_number
#--------------------------------------------------------------------------
def refresh_number
return if @number == @total_sec
@number = @total_sec
@number_sprite.bitmap.clear
draw_number(@number_cw * 1,0,0) if @min < 10
draw_number(@number_cw * 2,0,@min)
draw_number(@number_cw * 4,0,0) if @sec < 10
draw_number(@number_cw * 5,0,@sec)
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update_visible
@meter_sprite.visible = $game_system.timer_working
@number_sprite.visible = $game_system.timer_working
@layout.visible = $game_system.timer_working
@fire_sprite.visible = $game_system.timer_working
end
#--------------------------------------------------------------------------
# * update
#--------------------------------------------------------------------------
def update_timer
@total_sec = $game_system.timer / Graphics.frame_rate
@min = @total_sec / 60
@sec = @total_sec % 60
end
#--------------------------------------------------------------------------
# * update_flow
#--------------------------------------------------------------------------
def update_flow
@meter_sprite.bitmap.clear
@meter_width = @meter_range * ($game_system.timer - 40) / $game_system.timer_prev
@meter_width = 0 if $game_system.timer < 40
@meter_src_rect = Rect.new(@meter_flow, 0,@meter_width, @meter_height)
@meter_bitmap.blt(0,0, @meter_image, @meter_src_rect)
@meter_flow += METER_FLOW_SPEED
@meter_flow = 0 if @meter_flow >= @meter_image.width - @meter_range
end
#--------------------------------------------------------------------------
# * update_fire
#--------------------------------------------------------------------------
def update_fire
@fire_flow_speed += 1
if @fire_flow_speed > FIRE_ANIMATION_SPEED
@fire_flow += 1
@fire_flow_speed = 0
@fire_flow = 0 if @fire_flow == 4
@fire_refresh = true
end
@fire_sprite.x = -5 + @meter_width + TIMER_POS[0] + FIRE_POS[0]
return if @fire_refresh == false
@fire_sprite.bitmap.clear
@fire_refresh = false
@fire_src_rect_back = Rect.new(@fire_width * @fire_flow, 0,@fire_width, @fire_image.height)
@fire_bitmap.blt(0,0, @fire_image, @fire_src_rect_back)
end
end
$mog_rgssxp_timer_meter = true
Instructionseasy just insert the script, and set an event to have a control timer started, also turn off switch 001 everytime you start a timer.
You will need the following files in the Graphics / Windowskins
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Fire.PNG)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Layout.PNG)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Meter.png)
(http://www.atelier-rgss.com/RGSS/System/IMG/XP_SYS08/Timer_Number.PNG)
Compatibilitycompatible with anything, at least thats how it looked like after testing it.
Credits and Thanks
Author's Notesi bet this scripit can be very useful :P
http://forum.chaos-project.com/index.php/topic,17.0.html
Ohhhhhh, that looks nice :D! It can be put to good use when used in combination with Blizz-ABS, I think :D. As this is scripted by Moghunter, I hope you understand I won't really level you up for this.
fine blizz Ill edit it in a sec S:,
@SBR* i dont excpect you to lvl me up ^^, I found it and thought it is really nice so I decided to share it with CP
i just translated what ever needed to.
You can post someone script here?
Not just our script?
btw the script is cut in my browser or it's just mine?
yeah, the script is cut ;/
Pictures are so underrated in my opinion. Looks great. Thanks....Moghunter? lol
Quote from: LiTTleDRAgo on February 25, 2011, 10:50:17 am
You can post someone script here?
Not just our script?
btw the script is cut in my browser or it's just mine?
i dont see why not? im not taking any credit for it.
also fixed S:
I thought you could only post your own scrips here?
Plus anyone can just go to http://www.atelier-rgss.com/ to find Moghunters scrips.
You can post anyones script here if the original author is okay with it and it already hasn't been posted along with giving credits to the actual author.
Quote from: SBR* on February 25, 2011, 04:21:26 am
As this is scripted by Moghunter, I hope you understand I won't really level you up for this.
Lol, look who takes level ups seriously.
Quote from: game_guy on February 25, 2011, 08:32:49 pm
You can post anyones script here if the original author is okay with it and it already hasn't been posted along with giving credits to the actual author.
"check"