#==============================================================================
# +++ MOG - Combo Count (v1.2) +++
#==============================================================================
# By Moghunter
# [url]http://www.atelier-rgss.com/[/url]
#==============================================================================
# Apresenta a quantidade de acertos no alvo e o dano maximo.
#==============================================================================
# É necessário ter os arquivos imagens na pasta Graphics/Systems.
# Combo_Damage.png
# Combo_Hud.png
# Combo_Number.png
#==============================================================================
#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.2 - Corrigido o erro de crash randômico. (relativo a dispose de imagem.)
# v 1.1 - Opção de definir a prioridade da Hud.
#==============================================================================
module MOG_COMBO_COUNT
#Ativar tempo para fazer combo.
TIME_COUNT = true
# Tempo para fazer um combo. (60 = 1s)
COMBO_TIME = 120
# Cancelar a contagem de Combo caso o inimigo acertar o herói.
ENEMY_CANCEL_COMBO = true
# Posição geral das imagens. X Y
COMBO_POSITION = [10,90]
# Posição do número de HITS. X Y
HIT_POSITION = [55,20]
# Posição do número de dano. X Y
TOTAL_POSITION = [100,-20]
# Prioridade da HUD
HUD_Z = 1
end
#===============================================================================
# ■ Game_Temp
#===============================================================================
class Game_Temp
attr_accessor :combo_hit
attr_accessor :max_damage
attr_accessor :combo_time
#--------------------------------------------------------------------------
# ● initialize
#--------------------------------------------------------------------------
alias mog_combo_display_initialize initialize
def initialize
@combo_hit = 0
@max_damage = 0
@combo_time = 0
mog_combo_display_initialize
end
end
#===============================================================================
# ■ Game_Battler
#===============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● Item Apply
#--------------------------------------------------------------------------
alias mog_combo_display_item_apply item_apply
def item_apply(user, item)
mog_combo_display_item_apply(user, item)
unless @result.hit?
$game_temp.combo_time = 0
end
end
#--------------------------------------------------------------------------
# ● execute_damage
#--------------------------------------------------------------------------
alias mog_combo_display_execute_damage execute_damage
def execute_damage(user)
mog_combo_display_execute_damage(user)
if @result.hp_damage > 0
if user.is_a?(Game_Actor)
$game_temp.combo_hit += 1
$game_temp.max_damage += @result.hp_damage
$game_temp.combo_time = MOG_COMBO_COUNT::COMBO_TIME
else
$game_temp.combo_time = 0 if MOG_COMBO_COUNT::ENEMY_CANCEL_COMBO == true
end
end
end
end
#===============================================================================
# Scene_Battle
#===============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● start
#--------------------------------------------------------------------------
alias mog_combo_start start
def start
create_cb_sprite
mog_combo_start
end
#--------------------------------------------------------------------------
# ● create_cb_sprite
#--------------------------------------------------------------------------
def create_cb_sprite
@combo_sprite = Combo_Sprite_Hud.new
end
#--------------------------------------------------------------------------
# ● Terminate
#--------------------------------------------------------------------------
alias mog_combo_terminate terminate
def terminate
mog_combo_terminate
@combo_sprite.dispose
end
#--------------------------------------------------------------------------
# ● update_basic
#--------------------------------------------------------------------------
alias mog_combo_update_basic update_basic
def update_basic
mog_combo_update_basic
update_combo_hit
end
#--------------------------------------------------------------------------
# ● Update Combo Hit
#--------------------------------------------------------------------------
def update_combo_hit
@combo_sprite.update
if (@spriteset.animation? or @spriteset.effect?)
@combo_sprite.combo_wait = true
else
@combo_sprite.combo_wait = false
end
end
end
#===============================================================================
# ■ Combo_Sprite_Hud
#===============================================================================
class Combo_Sprite_Hud
attr_accessor :combo_wait
include MOG_COMBO_COUNT
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize
dispose
@combo_wait = false
$game_temp.combo_time = 0
$game_temp.combo_hit = 0
$game_temp.max_damage = 0
@combo_hit_old = 0
@animation_speed = 0
@pos_x = COMBO_POSITION[0]
@pos_x_fix = 0
@pos_y = COMBO_POSITION[1]
create_combo_sprite
create_total_damage_sprite
create_hud_sprite
end
#--------------------------------------------------------------------------
# ● create_hud_sprite
#--------------------------------------------------------------------------
def create_hud_sprite
@hud = Sprite.new
@hud.bitmap = Cache.system("Combo_HUD")
@hud.z = HUD_Z
@hud.x = COMBO_POSITION[0]
@hud.y = COMBO_POSITION[1]
@hud.opacity = 250
@hud.visible = false
end
#--------------------------------------------------------------------------
# ● create_total_damage_sprite
#--------------------------------------------------------------------------
def create_total_damage_sprite
@total_image = Cache.system("Combo_damage")
@total = Sprite.new
@total.bitmap = Bitmap.new(@combo_image.width,@combo_image.height)
@total_im_cw = @total_image.width / 10
@total_im_ch = @total_image.height
@total.z = HUD_Z + 1
@total_orig_x = COMBO_POSITION[0] + TOTAL_POSITION[0]
@total_orig_y = COMBO_POSITION[1] + TOTAL_POSITION[1]
@total.x = @total_orig_x
@total.y = @total_orig_y
@total.zoom_x = 1.00
@total.zoom_y = 1.00
@total.opacity = 250
@total.visible = false
end
#--------------------------------------------------------------------------
# ● create_combo_number
#--------------------------------------------------------------------------
def create_combo_sprite
@combo_image = Cache.system("Combo_Number")
@combo = Sprite.new
@combo.bitmap = Bitmap.new(@combo_image.width,@combo_image.height)
@combo_im_cw = @combo_image.width / 10
@combo_im_ch = @combo_image.height
@combo.z = HUD_Z + 2
@combo_orig_x = COMBO_POSITION[0] + HIT_POSITION[0]
@combo_orig_y = COMBO_POSITION[1] + HIT_POSITION[1]
@combo.zoom_x = 1.00
@combo.zoom_y = 1.00
@combo.opacity = 250
@combo.visible = false
end
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------
def dispose
return if @hud == nil
@hud.bitmap.dispose
@hud.dispose
@hud = nil
@combo_image.dispose
@combo.bitmap.dispose
@combo.dispose
@total_image.dispose
@total.bitmap.dispose
@total.dispose
end
#--------------------------------------------------------------------------
# ● Refresh
#--------------------------------------------------------------------------
def refresh
@combo_hit_old = $game_temp.combo_hit
@combo.bitmap.clear
@total.bitmap.clear
@combo_number_text = $game_temp.combo_hit.abs.to_s.split(//)
for r in [email]0..@combo_number_text.size[/email] - 1
@combo_number_abs = @combo_number_text[r].to_i
@combo_src_rect = Rect.new(@combo_im_cw * @combo_number_abs, 0, @combo_im_cw, @combo_im_ch)
@combo.bitmap.blt(@combo_im_cw * r, 0, @combo_image, @combo_src_rect)
end
@total_number_text = $game_temp.max_damage.abs.to_s.split(//)
for r in [email]0..@total_number_text.size[/email] - 1
@total_number_abs = @total_number_text[r].to_i
@total_src_rect = Rect.new(@total_im_cw * @total_number_abs, 0, @total_im_cw, @total_im_ch)
@total.bitmap.blt(@total_im_cw * r, 20, @total_image, @total_src_rect)
end
#Combo Position
@pos_x_fix = (@combo_im_cw / 2 * @combo_number_text.size)
@combo.x = @combo_orig_x - @pos_x_fix
@combo.y = @combo_orig_y
@combo.zoom_x = 2
@combo.zoom_y = 2
@combo.opacity = 70
@combo.visible = true
#Total Position
@total.x = @total_orig_x + 20
@total.y = @total_orig_y
@total.opacity = 100
@total.visible = true
#Hud Position
@hud.x = COMBO_POSITION[0]
@hud.y = COMBO_POSITION[1]
@hud.opacity = 255
@hud.visible = true
end
#--------------------------------------------------------------------------
# ● Slide Update
#--------------------------------------------------------------------------
def slide_update
return if !@combo.visible
if $game_temp.combo_time > 0 and @combo_wait == false
$game_temp.combo_time -= 1 if TIME_COUNT == true
end
if $game_temp.combo_time > 0 and $game_temp.combo_hit > 0
#Total Damage
if @total.x > @total_orig_x
@total.x -= 1
@total.opacity += 8
else
@total.x = @total_orig_x
@total.opacity = 255
end
#Combo
if @combo.zoom_x > 1.00
@combo.zoom_x -= 0.05
@combo.zoom_y -= 0.05
@combo.opacity += 8
else
@combo.zoom_x = 1
@combo.zoom_y = 1
@combo.opacity = 255
@combo.x = @combo_orig_x - @pos_x_fix
@combo.y = @combo_orig_y
end
elsif $game_temp.combo_time == 0 and @combo.visible
@combo.x -= 5
@combo.opacity -= 10
@total.x -= 3
@total.opacity -= 10
@hud.x += 5
@hud.opacity -= 10
$game_temp.combo_hit = 0
@combo_hit_old = $game_temp.combo_hit
$game_temp.max_damage = 0
if @combo.opacity <= 0
@combo.visible = false
@total.visible = false
@hud.visible = false
end
end
end
#--------------------------------------------------------------------------
# ● Cancel
#--------------------------------------------------------------------------
def cancel
$game_temp.combo_hit = 0
$game_temp.max_damage = 0
$game_temp.combo_time = 0
@combo_hit_old = $game_temp.combo_hit
end
#--------------------------------------------------------------------------
# ● Clear
#--------------------------------------------------------------------------
def clear
$game_temp.combo_time = 0
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
return if @hud == nil
refresh if $game_temp.combo_hit != @combo_hit_old
slide_update
end
end
$mog_rgss3_combo_count = true