#==============================================================================
# +++ MOG - Blitz Commands (v1.1) +++
#==============================================================================
# By Moghunter
# [url]http://www.atelier-rgss.com/[/url]
#==============================================================================
# Permite ativar ações através de sequência de comandos.
#==============================================================================
# UTILIZAÇÃO
#==============================================================================
# No banco de dados de habilidades ou itens, coloque o seguinte comentário na
# caixa de notas.
#
# <Blitz Command>
#
# * Lembre-se de definir a sequência de botões no editor de script antes de
# usar a habilidade
#
# Para definir uma velocidade especifica na sequência de botões use o cometário
# abaixo.
#
# <Blitz Speed = X>
#
#==============================================================================
# Arquivos necessários. Graphics/System/
#==============================================================================
#
# Blitz_Background.png
# Blitz_Flash.png
# Blitz_Layout.png
# Blitz_Meter.png
# Chain_Command.png
#
#==============================================================================
#==============================================================================
# ● Histórico (Version History)
#==============================================================================
# v 1.1 - Melhoria na performance
#==============================================================================
module MOG_BLITZ_COMMANDS
#Definição do tempo para inserir os comandos. (tempo X quantidade de comandos)
DEFAULT_INPUT_DURATION = 30
#==============================================================================
# BLITZ_INPUT = { SKILL_ID => [COMMAND] }
#
# SKILL_ID = ID da habilidade no banco de dados.
# COMMANDS = Defina aqui a sequência de botões.
# (Para fazer a sequência use os comandos abaixo)
#
# "Down" ,"Up" ,"Left" ,"Right" ,"Shift" ,"D" ,"S" ,"A" ,"Z" ,"X" ,"Q" ,"W"
#
# Exemplo de utilização
#
# BLITZ_INPUT = {
# 25=>["Down","D","S","Right"],
# 59=>["Down","Up","Left","Right","Shift","D","S","A","Z","X","Q","W"],
# 80=>["Shift","D"]
# }
#==============================================================================
BLITZ_INPUT = {
22=>["Left","Up","Right","Down","Up","Down","Left","Right","Z"],
51=>["Up","Down","Left","Right","Z"],
53=>["X","Z","A","S","D"],
61=>["Z","D","X","Right","Left"],
62=>["Right","Left","Right","Q","Z","Z","D","X","Right","Left"],
66=>["Right","Up","Up","Z"],
69=>["X","Right","Left","Z","Z"],
141=>["Down","Right","Down","Right","A"],
999=>["Left","Right","Left","Right","Left","Right","Q","Z","Up","A","S",
"Down","D","Z","Right","Up","Up","Z","W","Left","Down","D","A","W"]
}
#Ativar animação da imagem de fundo.
BACKGROUND_ENABLE = false
#Velocidade de deslize da imagem de fundo.
BACKGROUND_SCROLL_SPEED = [30,0]
#Posição do layout.
BLITZ_POSITION = [0,0]
#Posição do botão.
BUTTON_POSITION = [265,170]
#Posição do medidor de tempo.
METER_POSITION = [63,249]
#Posição do sprite Flash.
FLASH_POSITION = [0,146]
#Posição do ícone.
ICON_POSITION = [0,0]
#Posição do nome da skill
SKILL_NAME_POSITION = [180,140]
#Definição das palavras usadas no sistema blitz.
BLITZ_WORDS = ["Missed!", "Timeover", "Success!"]
#Configuração da fonte.
FONT_NAME = "Georgia"
FONT_SIZE = 22
FONT_COLOR = Color.new(255,255,255)
#Prioridade dos sprites.
BLITZ_Z = 100
#Som ao acertar.
RIGHT_SE = "Chime1"
#Som ao errar.
WRONG_SE = "Buzzer1"
#Definição do som ao ativar o sistema.
BLITZ_START_SE = "Saint9"
end
#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
attr_accessor :blitz_commands
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_blits_commands_initialize initialize
def initialize
@blitz_commands = [false,0]
mog_blits_commands_initialize
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● Use Item
#--------------------------------------------------------------------------
alias mog_blitz_commands_use_item use_item
def use_item
if can_execute_blitz_input?
execute_blitz_input
unless $game_temp.blitz_commands[1] == nil
return if !$game_temp.blitz_commands[0]
end
end
mog_blitz_commands_use_item
end
#--------------------------------------------------------------------------
# ● Can Execute Blitz Input
#--------------------------------------------------------------------------
def can_execute_blitz_input?
return false if !@subject.is_a?(Game_Actor)
for i in @subject.states
return false if i.restriction > 0
end
return true
end
#--------------------------------------------------------------------------
# ● Execute Blitz Input
#--------------------------------------------------------------------------
def execute_blitz_input
$game_temp.blitz_commands[0] = false
action_id = @subject.current_action.item.note =~ /<Blitz Command>/ ? @subject.current_action.item.id : nil
$game_temp.blitz_commands[1] = action_id
return if action_id == nil
blitz_command_sequence = MOG_BLITZ_COMMANDS::BLITZ_INPUT[action_id]
if blitz_command_sequence != nil
blitz_sq = Blitz_Commands.new(blitz_command_sequence, @subject ,action_id)
loop do
unless @spriteset.animation?
blitz_sq.update
Input.update
end
@spriteset.update
Graphics.update
break if blitz_sq.phase == 9
end
blitz_sq.dispose
end
end
end
#==============================================================================
# Game Temp
#==============================================================================
class Game_Temp
attr_accessor :cache_blitz_command
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_blitz_command_initialize initialize
def initialize
mog_blitz_command_initialize
cache_blt_cmd
end
#--------------------------------------------------------------------------
# ● Cache Blt Cmd
#--------------------------------------------------------------------------
def cache_blt_cmd
@cache_blitz_command = []
@cache_blitz_command.push(Cache.system("Blitz_Background"))
@cache_blitz_command.push(Cache.system("IconSet"))
@cache_blitz_command.push(Cache.system("Blitz_Flash"))
@cache_blitz_command.push(Cache.system("Blitz_Meter"))
@cache_blitz_command.push(Cache.system("Blitz_Layout"))
@cache_blitz_command.push(Cache.system("Chain_Battle_Command"))
end
end
#==============================================================================
# ■ Spriteset Battle
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_blitz_commands_initialize initialize
def initialize
$game_temp.cache_blt_cmd
mog_blitz_commands_initialize
end
end
#==============================================================================
# Blitz Commands
#==============================================================================
class Blitz_Commands
include MOG_BLITZ_COMMANDS
attr_accessor :phase
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def initialize(sequence, subject,action_id)
@phase = 0
[url=home.php?mod=space&uid=95897]@actor[/url] = subject
[url=home.php?mod=space&uid=260100]@skill[/url] = $data_skills[action_id]
@skillname = @skill.name
@action_id = action_id
@chain_command = sequence
duration = @skill.note =~ /<Blitz Speed = (\d+)>/i ? $1.to_i : DEFAULT_INPUT_DURATION
@timer_max = duration * @chain_command.size
@timer_max = 1 if @timer_max < 1
@timer = @timer_max
[url=home.php?mod=space&uid=10462]@Com[/url] = 0
@com_index = 0
@new_x = 0
[url=home.php?mod=space&uid=297884]@END[/url] = false
Audio.se_play("Audio/SE/" + BLITZ_START_SE, 100, 100) rescue nil
create_sprites
end
#--------------------------------------------------------------------------
# ● Create Sprites
#--------------------------------------------------------------------------
def create_sprites
create_background
create_layout
create_buttons
create_meter
create_flash
create_skill_name
create_icon
end
#--------------------------------------------------------------------------
# ● Create Background
#--------------------------------------------------------------------------
def create_background
@background = Plane.new
@background.bitmap = $game_temp.cache_blitz_command[0]
@background.z = BLITZ_Z
@background.visible = BACKGROUND_ENABLE
@background.opacity = 0
end
#--------------------------------------------------------------------------
# ● Create Icon
#--------------------------------------------------------------------------
def create_icon
@icon_image = $game_temp.cache_blitz_command[1]
@icon_sprite = Sprite.new
@icon_sprite.bitmap = Bitmap.new(24,24)
@icon_sprite.z = BLITZ_Z + 3
@org_x2 = 80 + ICON_POSITION[0] - @center + SKILL_NAME_POSITION[0]
@icon_sprite.x = @org_x2
@icon_sprite.y = ICON_POSITION[1] + SKILL_NAME_POSITION[1]
icon_rect = Rect.new(@skill.icon_index % 16 * 24, @skill.icon_index / 16 * 24, 24, 24)
@icon_sprite.bitmap.blt(0,0, @icon_image, icon_rect)
@icon_sprite.opacity = 0
end
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
def create_skill_name
@skill_name = Sprite.new
@skill_name.bitmap = Bitmap.new(200,32)
@skill_name.bitmap.font.name = FONT_NAME
@skill_name.bitmap.font.size = FONT_SIZE
@skill_name.z = BLITZ_Z + 3
@skill_name.y = SKILL_NAME_POSITION[1]
@skill_name.opacity = 0
refresh_skill_name
end
#--------------------------------------------------------------------------
# ● Refresh Skill Name
#--------------------------------------------------------------------------
def refresh_skill_name
cm = @skillname.to_s.split(//).size
@center = ((200 / @skill_name.bitmap.font.size) * cm / 2) + 5
@org_x = SKILL_NAME_POSITION[0]
@skill_name.x = @org_x
@skill_name.bitmap.font.color = Color.new(0,0,0)
@skill_name.bitmap.draw_text(1,1,200,32,@skillname.to_s,1)
@skill_name.bitmap.font.color = FONT_COLOR
@skill_name.bitmap.draw_text(0,0,200,32,@skillname.to_s,1)
end
#--------------------------------------------------------------------------
# ● Create Flash
#--------------------------------------------------------------------------
def create_flash
@flash_type = 0
@flash_image = $game_temp.cache_blitz_command[2]
@flash_cw = @flash_image.width
@flash_ch = @flash_image.height / 2
[url=home.php?mod=space&uid=14082]@Flash[/url] = Sprite.new
@flash.bitmap = Bitmap.new(@flash_cw,@flash_ch)
@flash.x = FLASH_POSITION[0]
@flash.y = FLASH_POSITION[1]
@flash.z = BLITZ_Z + 2
@flash.opacity = 0
@flash.blend_type = 1
refresh_flash
end
#--------------------------------------------------------------------------
# ● Refresh Flash
#--------------------------------------------------------------------------
def refresh_flash
@flash.bitmap.clear
f_scr = Rect.new(0,@flash_type * @flash_ch,@flash_cw,@flash_ch)
@flash.bitmap.blt(0,0,@flash_image,f_scr)
end
#--------------------------------------------------------------------------
# ● Create Meter
#--------------------------------------------------------------------------
def create_meter
@meter_image = $game_temp.cache_blitz_command[3]
@meter_cw = @meter_image.width
@meter_ch = @meter_image.height
@meter_sprite = Sprite.new
@meter_sprite.bitmap = Bitmap.new(@meter_cw,@meter_ch)
@meter_sprite.x = METER_POSITION[0]
@meter_sprite.y = METER_POSITION[1]
@meter_sprite.z = BLITZ_Z + 2
@meter_sprite.opacity = 0
update_meter
end
#--------------------------------------------------------------------------
# ● Update Meter
#--------------------------------------------------------------------------
def update_meter
return if @meter_sprite == nil
@meter_sprite.bitmap.clear
m_width = @meter_cw * @timer / @timer_max
m_scr = Rect.new(0,0,m_width,@meter_ch)
@meter_sprite.bitmap.blt(0,0,@meter_image, m_scr)
end
#--------------------------------------------------------------------------
# ● Create Layout
#--------------------------------------------------------------------------
def create_layout
@layout = Sprite.new
@layout.bitmap = $game_temp.cache_blitz_command[4]
@layout.x = BLITZ_POSITION[0]
@layout.y = BLITZ_POSITION[1]
@layout.z = BLITZ_Z + 1
@layout.opacity = 0
end
#--------------------------------------------------------------------------
# ● Create Buttons
#--------------------------------------------------------------------------
def create_buttons
@image = $game_temp.cache_blitz_command[5]
@image_cw = @image.width / 13
@image_ch = @image.height
@image_cw_max = (@image_cw + 5) * @chain_command.size
@sprite = Sprite.new
@sprite.bitmap = Bitmap.new(@image_cw_max,@image_ch * 2)
if @chain_command.size <= 15
@sprite.x = (544 / 2) - ((@image_cw + 5) * @chain_command.size) / 2
@new_x = 0
else
@sprite.x = (544 / 2)
@new_x = @sprite.x
end
@sprite.x = BUTTON_POSITION[0]
@sprite.y = BUTTON_POSITION[1]
@sprite.z = BLITZ_Z + 1
@sprite.opacity = 0
refresh_button
end
#--------------------------------------------------------------------------
# ● Refresh Button
#--------------------------------------------------------------------------
def refresh_button
return if @sprite == nil
@sprite.bitmap.clear
index = 0
for i in @chain_command
command_list_check(i)
bitmap_src_rect = Rect.new(@com * @image_cw, 0, @image_cw, @image_ch)
if @com_index == index
@sprite.bitmap.blt(index * (@image_cw + 5) , 0, @image, bitmap_src_rect)
else
@sprite.bitmap.blt(index * (@image_cw + 5) , @image_ch, @image, bitmap_src_rect)
end
index += 1
end
@new_x = BUTTON_POSITION[0] - ((@image_cw + 5) * @com_index)
end
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------
def dispose
dispose_background
dispose_layout
dispose_buttons
dispose_meter
dispose_flash
dispose_name
dispose_icon_sprite
end
#--------------------------------------------------------------------------
# ● Dispose Background
#--------------------------------------------------------------------------
def dispose_background
return if @background == nil
@background.dispose
@background = nil
end
#--------------------------------------------------------------------------
# ● Dispose Icon Sprite
#--------------------------------------------------------------------------
def dispose_icon_sprite
return if @icon_sprite == nil
@icon_sprite.bitmap.dispose
@icon_sprite.dispose
@icon_sprite = nil
end
#--------------------------------------------------------------------------
# ● Dispose Name
#--------------------------------------------------------------------------
def dispose_name
return if @skill_name == nil
@skill_name.bitmap.dispose
@skill_name.dispose
@skill_name = nil
end
#--------------------------------------------------------------------------
# ● Dispose Flash
#--------------------------------------------------------------------------
def dispose_flash
return if @flash == nil
@flash.bitmap.dispose
@flash.dispose
@flash = nil
end
#--------------------------------------------------------------------------
# ● Dispose Meter
#--------------------------------------------------------------------------
def dispose_meter
return if @meter_sprite == nil
@meter_sprite.bitmap.dispose
@meter_sprite.dispose
@meter_sprite = nil
end
#--------------------------------------------------------------------------
# ● Dispose Buttons
#--------------------------------------------------------------------------
def dispose_buttons
return if @sprite == nil
@sprite.bitmap.dispose
@sprite.dispose
@sprite = nil
end
#--------------------------------------------------------------------------
# ● Dispose Layout
#--------------------------------------------------------------------------
def dispose_layout
return if @layout == nil
@layout.dispose
@layout = nil
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
def update
if @end and @sprite.x == @new_x
update_flash
update_background
update_end
return
end
update_background
update_timer
update_command
update_slide_command
update_meter
update_flash
update_opacity
end
#--------------------------------------------------------------------------
# ● Update Opacity
#--------------------------------------------------------------------------
def update_opacity
return if @sprite.opacity == nil
@sprite.opacity += 10
@layout.opacity += 10
@meter_sprite.opacity += 10
@skill_name.opacity += 10
@background.opacity += 10
@icon_sprite.opacity += 10
end
#--------------------------------------------------------------------------
# ● Update End
#--------------------------------------------------------------------------
def update_end
fade_speed = 6
@icon_sprite.opacity -= fade_speed
@background.opacity -= fade_speed
@skill_name.opacity -= fade_speed
@sprite.opacity -= fade_speed
@layout.opacity -= fade_speed
@meter_sprite.opacity -= fade_speed
@phase = 9 if @background.opacity == 0
end
#--------------------------------------------------------------------------
# ● Update Background
#--------------------------------------------------------------------------
def update_background
return if @background == nil
@background.ox += BACKGROUND_SCROLL_SPEED[0]
@background.oy += BACKGROUND_SCROLL_SPEED[1]
end
#--------------------------------------------------------------------------
# ● Update Flash
#--------------------------------------------------------------------------
def update_flash
return if @flash == nil
return if @flash.opacity == 0
@flash.opacity -= 10
end
#--------------------------------------------------------------------------
# ● Update Timer
#--------------------------------------------------------------------------
def update_timer
return if @timer == 0
@timer -= 1
wrong_command(1) if @timer == 0
end
#--------------------------------------------------------------------------
# ● Update Slide Command
#--------------------------------------------------------------------------
def update_slide_command
return if @sprite == nil
return if @sprite.x == @new_x
slide_speed = 5 + ((@sprite.x - @new_x).abs / 5)
@sprite.x -= slide_speed
@sprite.x = @new_x if @sprite.x < @new_x
end
end
#==============================================================================
# Blitz Commands
#==============================================================================
class Blitz_Commands
#--------------------------------------------------------------------------
# ● Update Command
#--------------------------------------------------------------------------
def update_command
return if @end
if Input.trigger?(Input::X)
check_command(0)
elsif Input.trigger?(Input::Z)
check_command(1)
elsif Input.trigger?(Input::Y)
check_command(2)
elsif Input.trigger?(Input::A)
check_command(3)
elsif Input.trigger?(Input::C)
check_command(4)
elsif Input.trigger?(Input::B)
check_command(5)
elsif Input.trigger?(Input::L)
check_command(6)
elsif Input.trigger?(Input::R)
check_command(7)
elsif Input.trigger?(Input::RIGHT)
check_command(8)
elsif Input.trigger?(Input::LEFT)
check_command(9)
elsif Input.trigger?(Input::DOWN)
check_command(10)
elsif Input.trigger?(Input::UP)
check_command(11)
end
end
#--------------------------------------------------------------------------
# ● command_list_check
#--------------------------------------------------------------------------
def command_list_check(command)
case command
when "A"
@com = 0
when "D"
@com = 1
when "S"
@com = 2
when "Shift"
@com = 3
when "Z"
@com = 4
when "X"
@com = 5
when "Q"
@com = 6
when "W"
@com = 7
when "Right"
@com = 8
when "Left"
@com = 9
when "Down"
@com = 10
when "Up"
@com = 11
else
@com = 12
end
end
#--------------------------------------------------------------------------
# ● check_command
#--------------------------------------------------------------------------
def check_command(com)
index = 0
if com != -1
right_input = false
for i in @chain_command
if index == @com_index
command_list_check(i)
right_input = true if @com == com
end
index += 1
end
else
command_list_check(@com_index)
right_input = true
end
if right_input
next_command
else
wrong_command(0)
end
end
#--------------------------------------------------------------------------
# ● Next Command
#--------------------------------------------------------------------------
def next_command
@flash.opacity = 255
@flash_type = 0
@com_index += 1
Audio.se_play("Audio/SE/" + RIGHT_SE, 100, 100)
refresh_button
refresh_flash
if @com_index == @chain_command.size
@end = true
@skill_name.bitmap.clear
@skill_name.bitmap.draw_text(0,0,200,32,BLITZ_WORDS[2].to_s,1)
@icon_sprite.visible = false
$game_temp.blitz_commands[0] = true
end
end
#--------------------------------------------------------------------------
# ● wrong_command
#--------------------------------------------------------------------------
def wrong_command(type)
Audio.se_play("Audio/SE/" + WRONG_SE, 100, 100)
@flash.opacity = 255
@flash_type = 1
@skill_name.bitmap.clear
@end = true
wname = type == 0 ? BLITZ_WORDS[0] : BLITZ_WORDS[1]
$game_temp.blitz_commands[0] = false
@skill_name.bitmap.draw_text(0,0,200,32,wname.to_s,1)
@icon_sprite.visible = false
refresh_flash
end
end
$mog_rgss3_blitz_commands = true