#==============================================================================
# +++ MOG - BATTLER MOTION (v1.3) +++
#==============================================================================
# By Moghunter
# [url]http://www.atelier-rgss.com/[/url]
#==============================================================================
# Adiciona efeitos de animações nos sprites dos battlers.
# ● Animação inicial (entrada)de batalha.
# ● Animação de espera.
# ● Animação de ação.
# ● Animação de dano.
# ● Animação de collapso.
#==============================================================================
#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.3 - Correção na posição do battler após receber o dano. (Actor)
# v 1.2 - Melhoria na codificação do script. (Melhor compatibilidade.)
# - Adição do colapso tipo 6.
# - Adição do efeito de ação tipo 6 e 7.
# - Adição do efeito de animação inicial tipo 5.
# v 1.1 - Ativar animação em battler abatidos. (Ex - Animações de Reviver.)
# - Opção de ativar ou não efeito de colapso para os personagens.
# v 1.0 - Primeiro lançamento.
#==============================================================================
#==============================================================================
# ● CONFIGURAÇÃO
#==============================================================================
# ■ Animação inicial de entrada ao começar a batalha. 出现效果
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Appear = X>
#
# X = 0
# Battler desliza horizontalmente.从左右过来。
#
# X = 1
# Battler desliza verticalmente.从上边飞下来
#
# X = 2
# Battler rola (Cambalhota O_o) pela tela.旋转上了
#
# X = 3
# Zoom IN放大到缩小
#
# X = 4
# Zoom Out 缩小到放大
#
# X = 5
# Efeito de emergir do solo. 从下边跳上来
#
#==============================================================================
# ■ Animações dos battlers em modo espera. 备用效果
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Standby = X>
#
# X = 0
# Ativa o efeito do battler respirando.悬浮呼吸
#
# X = 1
# Ativa o efeito do battler levitando. 渐慢的呼吸
#
# X = 2
# Ativa o efeito do battler movimentando para os lados.左右晃动
#
#==============================================================================
# ■ Animações dos battlers em modo de ação. 敌人使用特技时攻击效果
#==============================================================================
# Coloque as seguintes Tags na caixa de notas de itens ou habilidades.
#
# <Motion Action = X>
#
# X = 0
# Ativa o efeito de ação de zoom.放大攻击
#
# X = 1
# Ativa o efeito de ação de pular.旋转攻击
#
# X = 2
# Ativa o efeito de girar para a esquerda.向左滑动一个三角形攻击
#
# X = 3
# Ativa o efeito de girar para a direita.向右滑动一个三角形攻击
#
# X = 4
# Ativa o efeito de tremer.身体晃动攻击
#
# X = 5
# Ativa o efeito de ação frontal.向前跳跃攻击
#
# X = 6
# Ativa o efeito de dar um passo para esquerda.左移动攻击
#
# X = 7
# Ativa o efeito de de dar um passo para direita.右移动攻击
#
#==============================================================================
# ■ Animações dos battlers em Colapso. 死亡效果
#==============================================================================
# Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
#
# <Motion Collapse = X>
#
# X = 0
# Ativa colapso na vertical.变瘦往上消失
#
# X = 1
# Ativa o colapso na horizontal.死后变成扁的消失
#
# X = 2
# Ativa o colapso em Zoom OUT.放大消失
#
# X = 3
# Ativa o colapso em Zoom IN.缩小消失
#
# X = 4
# Ativa o colapso em Zoom IN e Zoom OUT.先放大后缩小消息
#
# X = 5
# Ativa o colapso em Modo Boss.boss消失
#
# X = 6
# Não ativa colapso.(Do nothing)不消失
#
#==============================================================================
# ■ Ativar animação de dano em condições maléficas.
#==============================================================================
# Coloque a seguinte Tag na caixa de notas de condições para ativar o efeito
# de dano.
#
# <Bad State>
#
#==============================================================================
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
attr_accessor :motion_start
attr_accessor :motion_stand
attr_accessor :motion_action
attr_accessor :motion_damage
attr_accessor :motion_collapse
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_motion_animation_initialize initialize
def initialize
mog_motion_animation_initialize
@motion_start = -1
@motion_stand = [-1,0]
@motion_action = [-1,0]
@motion_collapse = [7,0]
@motion_damage = [0,0]
end
#--------------------------------------------------------------------------
# ● Added New State
#--------------------------------------------------------------------------
alias mog_motion_animation_add_new_state add_new_state
def add_new_state(state_id)
mog_motion_animation_add_new_state(state_id)
self.motion_damage[0] = 1 if $data_states[state_id].note =~ /<Bad State>/
end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_motion_animation_enemy_initialize initialize
def initialize(index, enemy_id)
mog_motion_animation_enemy_initialize(index, enemy_id)
setup_motion_animation(enemy_id)
end
#--------------------------------------------------------------------------
# ● Setup Motion Animation
#--------------------------------------------------------------------------
def setup_motion_animation(enemy_id)
self.motion_stand[0] = $1.to_i if enemy.note =~ /<Motion Standby = (\d+)>/i
self.motion_collapse[0] = $1.to_i if enemy.note =~ /<Motion Collapse = (\d+)>/i
self.motion_start = $1.to_i if enemy.note =~ /<Motion Appear = (\d+)>/i
end
end
#==============================================================================
# ■ Game Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● Setup
#--------------------------------------------------------------------------
alias mog_motion_animation_actor_setup setup
def setup(actor_id)
mog_motion_animation_actor_setup(actor_id)
self.motion_stand[0] = $1.to_i if actor.note =~ /<Motion Standby = (\d+)>/i
self.motion_collapse[0] = $1.to_i if actor.note =~ /<Motion Collapse = (\d+)>/i
self.motion_start = $1.to_i if actor.note =~ /<Motion Appear = (\d+)>/i
end
end
#==============================================================================
# ■ Game_ActionResult
#==============================================================================
class Game_ActionResult
#--------------------------------------------------------------------------
# ● HP Damage Text
#--------------------------------------------------------------------------
alias mog_motion_animation_hp_damage_text hp_damage_text
def hp_damage_text
mog_motion_animation_hp_damage_text
@battler.motion_damage[0] = 1 if @hp_damage > 0
end
end
#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# ● Update Position
#--------------------------------------------------------------------------
alias mog_motion_animation_update_position update_position
def update_position
if @battler.use_sprite?
update_motion_animation
return
end
mog_motion_animation_update_position
end
#--------------------------------------------------------------------------
# ● Update Motion Animation
#--------------------------------------------------------------------------
def update_motion_animation
setup_initial_motion
execute_start_animation
return if @wait_motion_start
if can_execute_collapse?
execute_motion_collapse
else
execute_motion_damage
execute_motion_animation
execute_motion_action
end
end
#--------------------------------------------------------------------------
# ● Setup Initial Motion
#--------------------------------------------------------------------------
def setup_initial_motion
return if @motion_initial != nil
@motion_initial = true
@collapse_done = false
@motion_speed = 0
@start_speed = [0,0]
@battler.motion_collapse[1] = 0
self.x = @battler.screen_x rescue 0
self.y = @battler.screen_y rescue 0
self.z = @battler.screen_z rescue 100
setup_motion_stand
@original_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
setup_motion_start
setup_motion_damage
setup_motion_action
end
#--------------------------------------------------------------------------
# ● Return Set
#--------------------------------------------------------------------------
def return_set(value)
self.x = value[0]
self.y = value[1]
self.zoom_x = value[2]
self.zoom_y = value[3]
self.mirror = value[4]
self.angle = value[5]
self.opacity = value[6]
end
#--------------------------------------------------------------------------
# ● setup_motion_start
#--------------------------------------------------------------------------
def setup_motion_start
@wait_motion_start = true
@scr_rect_speed = 1
case @battler.motion_start
when 0
self.x = 0 - (self.bitmap.width + rand(100))
when 1
self.y = 0 - (self.bitmap.height + rand(100))
when 2
self.angle = 360
self.x = 0 - self.bitmap.width
when 3
self.zoom_x = 1.5 + (rand(10) / 100.0)
self.zoom_y = self.zoom_x
self.opacity = 0
when 4
self.zoom_x = 0.2 + (rand(10) / 100.0)
self.zoom_y = self.zoom_x
self.opacity = 0
when 5
self.src_rect.y = -self.bitmap.height
@scr_rect_speed = self.bitmap.height / 40
@scr_rect_speed = 1 if @scr_rect_speed <= 0
else
@wait_motion_start = false
end
end
#--------------------------------------------------------------------------
# ● Setup Motion Damage
#--------------------------------------------------------------------------
def setup_motion_damage
@battler.motion_damage = [0,0]
@damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
end
#--------------------------------------------------------------------------
# ● Execute Start Animation
#--------------------------------------------------------------------------
def execute_start_animation
return if !@wait_motion_start
s_x = 1 + ((self.x - @original_set[0]).abs / (20 + @start_speed[0]))
s_y = 1 + ((self.y - @original_set[1]).abs / (20 + @start_speed[1]))
if self.x < @original_set[0]
self.x += s_x
self.x = @original_set[0] if self.x >= @original_set[0]
elsif self.x > @original_set[0]
self.x -= s_x
self.x = @original_set[0] if self.x <= @original_set[0]
end
if self.y < @original_set[1]
self.y += s_y
self.y = @original_set[1] if self.y > @original_set[1]
elsif self.y > @original_set[1]
self.y -= s_y
self.y = @original_set[1] if self.y < @original_set[1]
end
if self.zoom_x != @original_set[2]
if self.zoom_x > @original_set[2]
self.zoom_x -= 0.01
self.zoom_x = @original_set[2] if self.zoom_x < @original_set[2]
elsif self.zoom_x < @original_set[2]
self.zoom_x += 0.01
self.zoom_x = @original_set[2] if self.zoom_x > @original_set[2]
end
end
if self.zoom_y != @original_set[3]
if self.zoom_y > @original_set[3]
self.zoom_y -= 0.01
self.zoom_y = @original_set[3] if self.zoom_y < @original_set[3]
elsif self.zoom_y < @original_set[3]
self.zoom_y += 0.01
self.zoom_y = @original_set[3] if self.zoom_y > @original_set[3]
end
end
self.opacity += 10
if self.angle > 0
self.angle -= 5
self.angle = @original_set[5] if self.angle < @original_set[5]
end
if self.src_rect.y != 0
self.src_rect.y += @scr_rect_speed
self.src_rect.y = 0 if self.src_rect.y > 0
end
if sprite_original_set?
@wait_motion_start = false
self.src_rect.y = 0
end
end
#--------------------------------------------------------------------------
# ● Sprite original Set?
#--------------------------------------------------------------------------
def sprite_original_set?
return false if self.x != @original_set[0]
return false if self.y != @original_set[1]
return false if self.zoom_x != @original_set[2]
return false if self.zoom_y != @original_set[3]
return false if self.mirror != @original_set[4]
return false if self.angle != @original_set[5]
return false if self.opacity != @original_set[6]
return false if self.src_rect.y != 0
return true
end
#--------------------------------------------------------------------------
# ● Setup Initial Motion
#--------------------------------------------------------------------------
def execute_motion_damage
damage_refresh
update_motion_damage
end
#--------------------------------------------------------------------------
# ● Damage Refresh
#--------------------------------------------------------------------------
def damage_refresh
return if @battler.motion_damage[0] == 0
if @battler.motion_damage[1] == 0
@damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
end
@battler.motion_damage[0] = 0
@battler.motion_damage[1] = 45
end
#--------------------------------------------------------------------------
# ● Update Motion Damage
#--------------------------------------------------------------------------
def update_motion_damage
return if @battler.motion_damage[1] == 0
self.x = @damage_pre_set[0] + rand(@battler.motion_damage[1])
@battler.motion_damage[1] -= 1
if @battler.motion_damage[1] == 0
if $mog_rgss3_battle_hud != nil and @battler.is_a?(Game_Actor)
return_set(@original_set)
else
return_set(@damage_pre_set)
end
end
end
#--------------------------------------------------------------------------
# ● Setup Motion Stand
#--------------------------------------------------------------------------
def setup_motion_stand
@breath_range = [0.9, 1.0]
@float_range = [@battler.screen_y - 10, @battler.screen_y + 10]
@side_range = [@battler.screen_x - 10, @battler.screen_x + 10]
@battler.motion_stand[1] = 0
case @battler.motion_stand[0]
when 0
self.zoom_y = @breath_range[0] + (rand(10) / 100.0)
@battler.motion_stand[1] = rand(2)
when 1
self.y += 10 - rand(20)
@battler.motion_stand[1] = rand(2)
when 2
self.x += 10 - rand(20)
@battler.motion_stand[1] = rand(2)
end
end
#--------------------------------------------------------------------------
# ● Execute Motion Animation
#--------------------------------------------------------------------------
def execute_motion_animation
return if @old_motion_action != -1
return if @battler.motion_damage[1] > 0
case @battler.motion_stand[0]
when 0
update_motion_breath
when 1
update_motion_float
when 2
update_motion_side
end
end
#--------------------------------------------------------------------------
# ● Update Motion Breath
#--------------------------------------------------------------------------
def update_motion_breath
case @battler.motion_stand[1]
when 0
self.zoom_y -= 0.002
if self.zoom_y <= @breath_range[0]
@battler.motion_stand[1] = 1
self.zoom_y = @breath_range[0]
end
when 1
self.zoom_y += 0.002
if self.zoom_y >= @breath_range[1]
@battler.motion_stand[1] = 0
self.zoom_y = @breath_range[1]
end
end
end
#--------------------------------------------------------------------------
# ● Update Motion Float
#--------------------------------------------------------------------------
def update_motion_float
@motion_speed += 1
return if @motion_speed < 5
@motion_speed = 0
case @battler.motion_stand[1]
when 0
self.y -= 1
if self.y < @float_range[0]
self.y = @float_range[0]
@battler.motion_stand[1] = 1
end
when 1
self.y += 1
if self.y > @float_range[1]
self.y = @float_range[1]
@battler.motion_stand[1] = 0
end
end
end
#--------------------------------------------------------------------------
# ● Update Motion Side
#--------------------------------------------------------------------------
def update_motion_side
@motion_speed += 1
return if @motion_speed < 5
@motion_speed = 0
case @battler.motion_stand[1]
when 0
self.x -= 1
if self.x < @side_range[0]
self.x = @side_range[0]
@battler.motion_stand[1] = 1
end
when 1
self.x += 1
if self.x > @side_range[1]
self.x = @side_range[1]
@battler.motion_stand[1] = 0
end
end
end
end
#==============================================================================
# ■ Game Action
#==============================================================================
class Game_Action
#--------------------------------------------------------------------------
# ● Prepare
#--------------------------------------------------------------------------
alias mog_motion_action_prepare prepare
def prepare
mog_motion_action_prepare
set_motion_action
end
#--------------------------------------------------------------------------
# ● Set Motion Action
#--------------------------------------------------------------------------
def set_motion_action
return if @item.object == nil or subject == nil
subject.motion_action[0] = $1.to_i if @item.object.note =~ /<Motion Action = (\d+)>/i
end
end
#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# ● Setup Motion Action
#--------------------------------------------------------------------------
def setup_motion_action
@battler.motion_action = [-1,0]
@old_motion_action = @battler.motion_action[0]
@pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
end
#--------------------------------------------------------------------------
# ● Refresh Action
#--------------------------------------------------------------------------
def refresh_action
return if @old_motion_action == @battler.motion_action[0]
if @old_motion_action == -1
@pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
end
@battler.motion_action[1] = 0
return_set(@pre_set)
@old_motion_action = @battler.motion_action[0]
self.src_rect.y = 0
end
#--------------------------------------------------------------------------
# ● Execute Motion Action
#--------------------------------------------------------------------------
def execute_motion_action
return if @battler.motion_damage[1] > 0
refresh_action
update_motion_action
end
#--------------------------------------------------------------------------
# ● Update Motion Action
#--------------------------------------------------------------------------
def update_motion_action
return if @battler.motion_action[0] == -1
@battler.motion_action[1] += 1
case @battler.motion_action[0]
when 0
update_motion_zoom
when 1
update_motion_jump
when 2
update_motion_round_right
when 3
update_motion_round_left
when 4
update_motion_shake
when 5
update_motion_front
when 6
update_motion_step_left
when 7
update_motion_step_right
end
end
#--------------------------------------------------------------------------
# ● Update Motion Step Left
#--------------------------------------------------------------------------
def update_motion_step_left
case @battler.motion_action[1]
when 1..20
self.x -= 2
when 21..40
self.x += 2
else
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Step Right
#--------------------------------------------------------------------------
def update_motion_step_right
case @battler.motion_action[1]
when 1..20
self.x += 2
when 21..40
self.x -= 2
else
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Shake
#--------------------------------------------------------------------------
def update_motion_shake
self.x = @pre_set[0] + rand(@battler.motion_action[1])
end_action if @battler.motion_action[1] > 40
end
#--------------------------------------------------------------------------
# ● Update Motion Zoom
#--------------------------------------------------------------------------
def update_motion_zoom
case @battler.motion_action[1]
when 1..20
self.zoom_x += 0.01
self.zoom_y += 0.01
when 21..40
self.zoom_x -= 0.01
self.zoom_y -= 0.01
else
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Jump
#--------------------------------------------------------------------------
def update_motion_jump
case @battler.motion_action[1]
when 1..20
self.y -= 9
self.zoom_x += 0.01
self.zoom_y += 0.01
self.mirror = true
self.angle += 9
when 21..40
self.y += 9
self.zoom_x -= 0.01
self.zoom_y -= 0.01
self.mirror = false
self.angle += 9
else
self.angle = 0
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Front
#--------------------------------------------------------------------------
def update_motion_front
case @battler.motion_action[1]
when 1..20
self.y += 3
self.zoom_x += 0.02
self.zoom_y += 0.02
when 21..40
self.y -= 3
self.zoom_x -= 0.02
self.zoom_y -= 0.02
else
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Round Left
#--------------------------------------------------------------------------
def update_motion_round_left
case @battler.motion_action[1]
when 1..15
self.y += 3
self.x -= 3
self.mirror = false
when 16..30
self.x += 6
self.mirror = true
when 31..45
self.y -= 3
self.x -= 3
self.mirror = false
else
end_action
end
end
#--------------------------------------------------------------------------
# ● Update Motion Round Right
#--------------------------------------------------------------------------
def update_motion_round_right
case @battler.motion_action[1]
when 1..15
self.y += 3
self.x += 3
self.mirror = true
when 16..30
self.x -= 6
self.mirror = false
when 31..45
self.y -= 3
self.x += 3
self.mirror = true
else
end_action
end
end
#--------------------------------------------------------------------------
# ● End Action
#--------------------------------------------------------------------------
def end_action
if $mog_rgss3_battle_hud != nil and @battler.is_a?(Game_Actor)
return_set(@original_set)
else
return_set(@pre_set)
end
@battler.motion_action = [-1,0]
end
end
#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# ● Update Blink
#--------------------------------------------------------------------------
alias mog_motion_animation_update_blink update_blink
def update_blink
return if @battler.dead?
mog_motion_animation_update_blink
end
#--------------------------------------------------------------------------
# ● Update Collapse
#--------------------------------------------------------------------------
def update_collapse
end
#--------------------------------------------------------------------------
# ● Execute Motion Collapse
#--------------------------------------------------------------------------
def execute_motion_collapse
collapse_end if self.opacity == 0
@battler.motion_collapse[1] += 1
case @battler.motion_collapse[0]
when 0; update_collapse_vertical
when 1; update_collapse_horizontal
when 2; update_collapse_zoom_out
when 3; update_collapse_zoom_in
when 4; update_collapse_zoom_in_out
when 5; update_collapse_boss_2
when 6; update_collpase_do_nothing
else ; update_collapse_normal
end
end
#--------------------------------------------------------------------------
# ● Can Execute Collapse
#--------------------------------------------------------------------------
def can_execute_collapse?
return false if !@battler.dead?
return false if @collapse_done
return true
end
#--------------------------------------------------------------------------
# ● Update Collapse Vertical
#--------------------------------------------------------------------------
def update_collapse_vertical
self.zoom_y += 0.1
self.zoom_x -= 0.02
self.opacity -= 3
end
#--------------------------------------------------------------------------
# ● Update Collapse Horizontal
#--------------------------------------------------------------------------
def update_collapse_horizontal
self.zoom_x += 0.1
self.zoom_y -= 0.02
self.opacity -= 3
end
#--------------------------------------------------------------------------
# ● Update Collapse Zoom Out
#--------------------------------------------------------------------------
def update_collapse_zoom_out
self.zoom_x += 0.02
self.zoom_y += 0.02
self.opacity -= 4
end
#--------------------------------------------------------------------------
# ● Update Collapse Zoom IN
#--------------------------------------------------------------------------
def update_collapse_zoom_in
self.zoom_x -= 0.01
self.zoom_y -= 0.01
self.opacity -= 4
end
#--------------------------------------------------------------------------
# ● Update Collapse Zoom IN OUT
#--------------------------------------------------------------------------
def update_collapse_zoom_in_out
case @battler.motion_collapse[1]
when 0..30
self.zoom_x += 0.1
self.zoom_y -= 0.02
self.opacity -= 2
else
self.zoom_y += 0.5
self.zoom_x -= 0.2
self.opacity -= 10
end
end
#--------------------------------------------------------------------------
# ● Update Collapse Boss 2
#--------------------------------------------------------------------------
def update_collapse_boss_2
self.x = @original_set[0] + rand(10)
self.src_rect.y -= 1
self.opacity = 0 if self.src_rect.y < -self.bitmap.height
end
#--------------------------------------------------------------------------
# ● Update Collapse do nothing
#--------------------------------------------------------------------------
def update_collpase_do_nothing
end
#--------------------------------------------------------------------------
# ● Update Collapse Normal
#--------------------------------------------------------------------------
def update_collapse_normal
self.opacity -= 3
self.blend_type = 1
end
#--------------------------------------------------------------------------
# ● Collapse End
#--------------------------------------------------------------------------
def collapse_end
@collapse_done = true
return_set(@original_set)
self.src_rect.y = -self.bitmap.height unless @battler.motion_collapse[0] == 6
end
#--------------------------------------------------------------------------
# ● Revert to Normal
#--------------------------------------------------------------------------
alias mog_battler_motion_revert_to_normal revert_to_normal
def revert_to_normal
if @collapse_done
@collapse_done = false
return_set(@original_set)
end
mog_battler_motion_revert_to_normal
end
end
$mog_rgss3_battler_motion = true