Lune Frontal Battle System
Compativel com: RMVXAceCompatibilidade :boa
Facilidade de uso: fácil
Lag gerado: médio
Condições de Uso
Pode ser modificado, e divulgado em outros lugares, mas peço que não retire os créditos.Para que serve o script
O script adiciona battlers na batalha, deixando visualmente muito mais agradável, veja o video abaixo para ver mais sobre ele.Muito compativel com add-ons feitos para a batalha do Ace.
Detalhes do script
- Armas de perto o personagem corre na direção do inimigo.
- Magias tem animação de conjuração.
- Compatível com quase todos os scripts de add-ons para batalha do Ace.
- Não necessita imagens.
- Não necessita sprites extras.
- Instruções no script.
Script.
- Código:
#=======================================================
# Lune Frontal Battle System
# Autor: Raizen
# Compativel com: RMVXAce
#=======================================================
# Instruções.
# Plug n' play, coloque acima do main e todos os scripts de
# adições na batalha coloque abaixo desse script.
# Configure de acordo com o pedido na linha abaixo.
#=======================================================
# Confgurações:
module Lune_Frontal_Battle
# Gráfico dos personagens caidos.
# Basta adicionar uma nova linha desse modo.
# DeadG[1] = "Monster1", com o ID e o gráfico dele caido ou outro
# gráfico que funcione para tal.
DeadG = []
DeadG[1] = "Monster1"
DeadG[2] = "Monster1"
DeadG[3] = "Monster1"
DeadG[4] = "Monster1"
DeadG[5] = "Monster1"
DeadG[6] = "Monster1"
DeadG[7] = "Monster1"
DeadG[8] = "Monster1"
DeadG[9] = "Monster1"
# Ataques a curta distancia, lembrando que 1 é o ataque normal,
# e será considerado a arma.
Dist = [1, 3, 4, 10, 21, 80, 81, 85, 100]
# Armas com ataque a distancia
# Lembrando que para facilitar é o id dos tipos de arma, e não da
# arma em si.
Weapdist = [6, 10]
# Habilidades que não tem conjuração.
Nocast = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 80, 76, 77, 78, 85,
81, 83, 84, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 99, 102, 103, 104,
105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
86, 100]
# Id da animação de conjuração
Castid = 43
# Tempo de conjuração
Casttime = 20
end
#==============================================================================
# ================== A partir daqui começa o script ======================
#==============================================================================
#==============================================================================
# Reescrita dos seguintes métodos
# ==> Scene_Battle <==
# show_normal_animation
# ==> Game_Actor <==
# use_sprite?
#==============================================================================
#==============================================================================
# Alias dos seguintes métodos
# ==> Scene_Battle <==
# update_basic
# start
# start_actor_command_selection
# dispose_spriteset
# ==> Game_Actor <==
# initialize
#==============================================================================
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de batalha.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Aliasing
#--------------------------------------------------------------------------
alias lune_front_update update_basic
alias lune_front_start start
alias lune_front_start_actor_command start_actor_command_selection
alias lune_front_dispose dispose_spriteset
#--------------------------------------------------------------------------
# * Inicialização do processo
#--------------------------------------------------------------------------
def start
create_battlers
lune_front_start
end
#--------------------------------------------------------------------------
# * Atualização das tropas
#--------------------------------------------------------------------------
def update_basic
update_move_troops
lune_front_update
end
#--------------------------------------------------------------------------
# * Inicialização das variáveis
#--------------------------------------------------------------------------
def create_battlers
@bitmap = Array.new(4) { Sprite_Battler.new(@viewport1) }
@cw = []
@ch = []
@pattern = []
@index = []
for actor in $game_party.members
draw_battler(actor.character_name, actor.character_index, 100 + actor.index*110, actor.index)
end
end
#--------------------------------------------------------------------------
# * Criação dos gráficos dos personagens
#--------------------------------------------------------------------------
def draw_battler(character_name, index, x, y)
return unless character_name
@bitmap[y].bitmap = Cache.character(character_name)
@bitmap[y].x = $game_party.members[y].screen_x = x
@bitmap[y].y = $game_party.members[y].screen_y = 250
$game_party.members[y].screen_x += 16
$game_party.members[y].screen_y += 24
@bitmap[y].z = 0
@pattern[y] = 0
@index[y] = index
sign = character_name[/^[\!\$]./]
if sign && sign.include?('$')
@cw[y] = @bitmap[y].width / 3
@ch[y] = @bitmap[y].height / 4
else
@cw[y] = @bitmap[y].width / 12
@ch[y] = @bitmap[y].height / 8
end
sx = (@index[y] % 4 * 3) * @cw[y]
sy = (@index[y] / 4 * 4 + 6 / 2) * @ch[y]
@bitmap[y].src_rect.set(sx + @cw[y], sy, @cw[y], @ch[y])
end
#--------------------------------------------------------------------------
# * Movimento dos gráficos dos personagens
#--------------------------------------------------------------------------
def move_actors_front(y, target = nil)
return unless y
unless target
@bitmap[y].y -= 2 if @bitmap[y].y >= 220
@pattern[y] = (@bitmap[y].y % 24) / 8
sx = (@index[y] % 4 * 3 + @pattern[y]) * @cw[y]
sy = (@index[y] / 4 * 4 + 6 / 2) * @ch[y]
@bitmap[y].src_rect.set(sx, sy, @cw[y], @ch[y])
else
@distance_in_y = @bitmap[y].y - (@target.screen_y - 50)
@distance_in_x = @bitmap[y].x - (@target.screen_x)
if @bitmap[y].y >= @distance_in_y
@bitmap[y].y -= @distance_in_y / 20
@bitmap[y].x -= @distance_in_x / 18
end
@pattern[y] = (@bitmap[y].y % 24) / 8
sx = (@index[y] % 4 * 3 + @pattern[y]) * @cw[y]
sy = (@index[y] / 4 * 4 + 6 / 2) * @ch[y]
@bitmap[y].src_rect.set(sx, sy, @cw[y], @ch[y])
end
end
def move_actors_back(n)
for y in 0...$game_party.members.size
unless y == n
@bitmap[y].y += 2 if @bitmap[y].y <= 248
@distance_in_x = @bitmap[y].x - (100 + $game_party.members[y].index*110)
@bitmap[y].x -= @distance_in_x / 15
end
character_name = $game_party.members[y].character_name
if $game_party.members[y].dead?
@index[y] = 0
@bitmap[y].bitmap =
Cache.character(Lune_Frontal_Battle::DeadG[$game_party.members[y].id])
if @bitmap[y].bitmap !=
Cache.character(Lune_Frontal_Battle::DeadG[$game_party.members[y].id])
else
@index[y] = $game_party.members[y].character_index
@bitmap[y].bitmap = Cache.character(character_name) if @bitmap[y].bitmap != Cache.character(character_name)
end
@pattern[y] = (@bitmap[y].y % 24) / 8
sx = (@index[y] % 4 * 3 + @pattern[y]) * @cw[y]
sy = (@index[y] / 4 * 4 + 6 / 2) * @ch[y]
@bitmap[y].src_rect.set(sx, sy, @cw[y], @ch[y])
@bitmap[y].opacity += 4 unless @bitmap[y].opacity >= 255
end
end
#--------------------------------------------------------------------------
# * Atualização dos movimentos dos personagens
#--------------------------------------------------------------------------
def update_move_troops
@startmove = nil if @party_command_window.active
pattern = 0
move_actors_front(@startmove, @target)
move_actors_back(@startmove)
end
#--------------------------------------------------------------------------
# * atualização do indice.
#--------------------------------------------------------------------------
def start_actor_command_selection
@startmove = BattleManager.actor.index
lune_front_start_actor_command
end
def dispose_spriteset
lune_front_dispose
for y in 0...$game_party.members.size
@bitmap[y].dispose
end
end
#--------------------------------------------------------------------------
# * atualização do indice no processamento.
#--------------------------------------------------------------------------
def process_action
return if scene_changing?
if !@subject || !@subject.current_action
@subject = BattleManager.next_subject
if @subject
@subject.actor? ? @startmove = @subject.index : @startmove = nil
end
end
return turn_end unless @subject
if @subject.current_action
@subject.current_action.prepare
if @subject.current_action.valid?
@status_window.open
execute_action
end
@subject.remove_current_action
end
process_action_end unless @subject.current_action
end
#--------------------------------------------------------------------------
# * animações de ataque
#--------------------------------------------------------------------------
def show_attack_animation(targets)
if @subject.actor?
show_normal_animation(targets, @subject.atk_animation_id1, false)
show_normal_animation(targets, @subject.atk_animation_id2, true)
else
show_monster_animation(targets, @subject.atk_animation_id1, false)
abs_wait_short
end
end
#--------------------------------------------------------------------------
# * Exibição da animação normal
# targets : lista dos alvos
# animation_id : ID da animação
# mirror : inversão
#--------------------------------------------------------------------------
def show_monster_animation(targets, animation_id, mirror = false)
animation_id = 1 if animation_id.nil?
animation = $data_animations[animation_id]
if animation
targets.each do |target|
@bitmap[target.index].opacity = 0
target.animation_id = animation_id
target.animation_mirror = mirror
abs_wait_short unless animation.to_screen?
end
abs_wait_short if animation.to_screen?
end
end
def show_normal_animation(targets, animation_id, mirror = false)
animation = $data_animations[animation_id]
if animation
onecast = true
targets.each do |target|
@target = target unless from_distance?
if !Lune_Frontal_Battle::Nocast.include?(@subject.current_action.item.id) and onecast
abs_wait(Lune_Frontal_Battle::Casttime)
@subject.animation_id = Lune_Frontal_Battle::Castid
onecast = false
abs_wait(30)
end
@bitmap[target.index].opacity = 0 if target.actor?
target.animation_id = animation_id
target.animation_mirror = mirror
abs_wait_short unless animation.to_screen?
end
abs_wait_short if animation.to_screen?
end
@target = nil
end
#--------------------------------------------------------------------------
# * verificação de ataque a distancia
#--------------------------------------------------------------------------
def from_distance?
return true unless @subject.actor?
return true if !Lune_Frontal_Battle::Dist.include?(@subject.current_action.item.id) and @subject.current_action.item.id != 1
return true if Lune_Frontal_Battle::Weapdist.include?(@subject.weapon_type)
return false
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# Esta classe gerencia os heróis. Ela é utilizada internamente pela classe
# Game_Actors ($game_actors). A instância desta classe é referenciada
# pela classe Game_Party ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Aliasing
#--------------------------------------------------------------------------
alias lune_frontal_initialize initialize
#--------------------------------------------------------------------------
# * Variáveis públicas
#--------------------------------------------------------------------------
attr_accessor :screen_x # posição x na tela do battler
attr_accessor :screen_y # posição y na tela do battler
attr_accessor :screen_z # posição z na tela do battler
#--------------------------------------------------------------------------
# * Inicialização do objeto
# actor_id : ID do herói
#--------------------------------------------------------------------------
def initialize(actor_id)
lune_frontal_initialize(actor_id)
@screen_x = 0
@screen_y = 0
@screen_z = 0
end
def weapon_type
weapons.any? {|weapon| return weapon.wtype_id }
end
def use_sprite?
return true
end
end
class Game_Enemy < Game_Battler
def atk_animation_id1
end
end
Videos
Acho que um video vale por muitas imagens Sem nenhum add-on
Esse segundo video é usando os scripts do Iris core do Zero, atoa, Vitorj, Mog...
Dowload dos scripts dele aqui.
http://ateliercross.webege.com/codes/rgss3/first-person-battle/
Download
Não necessárioCréditos e Avisos
Raizen pelo script