Introdução
É gente, acho que vocês já puderam observar que até mesmo o novo RPG Maker VX Ace, apesar de terem corrigidos muitos dos bugs do VX "clássico". O Yanfly, scripter -- já conhecido por muitos --, como é de praxe, fez um script-base para a engine que está desenvolvendo, esse script-base geralmente contém as correções de erro, customizações mais básicas da engine, e suporte para os outros scripts.
Mas como já vi acontecer por aqui, nem todas as customizações agradam a todos os usuários, já que nem todo mundo vai usar a engine dele. Por isso decidi tirar todas as customizações e código "inútil", isolando apenas as correções de erro e funções mais básicas. No fim das contas, após enxugar tudo cheguei a essas 5 correções básicas.
Scripts de Correção de Erros:Sobreposição da Animação
É o mesmo erro do VX. Quando uma animação de tela inteira é reproduzida contra um grupo de inimigos, o bitmap da animação é na verdade reproduzido várias vezes, causando uma extrema sobreposição quando há muitos inimigos na tela. Essa correção fará com que a animação se reproduza apenas uma vez.Correção da Ordem do Turno da Batalha
Mesmo erro do VX. Para aqueles que usam o sistema de batalha padrão, uma vez que um turno começou, a ordem de ação se configura e é inalterada durante o restante do turno. Quaisquer alterações na AGI do combatente não serão feitas, mesmo que o combatente receba um acréscimo ou decréscimo na AGI. Essa correção faz com que a AGI seja atualizada corretamente a cada ação.Correção da Sobreposição dos Medidores
Mesmo erro do VX. Quando algumas variáveis excedem determinados valores, os medidores podem extrapolar a largura para a qual eles foram originalmente projetados. Essa correção irá evitar que os medidores passem da largura máxima. (Nota: E ainda coloca uma borda em volta deles!)Rolagem do Menu Segurando L e R
Antes, no VX, você podia navegar através de menus rapidamente pressionando os botões L e R (Q e W no teclado). Essa correção recupera a capacidade de percorrer os menus dessa forma.Rolagem no Mapa, Se Menor que a Tela
Uma pequena correção que permita que mapas menores que a tela (17x13, na resolução padrão) apresentem erros na hora do movimento da tela , o "scroll". É útil principalmente para quem utiliza a resolução de 640x480, e faz mapas do tamanho mínimo que o editor permite.
- Código:
#==============================================================================
# PACOTE DE CORREÇÕES PARA RMVXACE DO YANFLY:
# Pacote com algumas correções básicas para RMVXAce, tirando as modificações e
# possibilidades de customização do script original. Essencial para corrigir
# vários bugs do jogo já presentes na engine padrão do RGSS3;
# Baseado no "Yanfly Engine Ace - Ace Core Engine v1.00 Versão Traduzida".
#
# Todos os créditos vão para:
# - Yanfly (http://yanflychannel.wordpress.com/)
# Tradução do cabeçalho para Português por:
# - Tradutor (http://makercafe.blogspot.com/)
# Edições e adaptações por:
# - Rafael_Sol_Maker (http://www.condadobraveheart.com/)
#
#==============================================================================
#==============================================================================
# INSTRUÇÕES:
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Para instalar este script, abra seu editor de scripts copie e cole este script
# em um slot aberto abaixo de "Scripts Adicionais", mas acima de Main. Lembre-se
# de salvar.
#
#==============================================================================
# COMPATIBILIDADE:
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Este script é feito estritamente para o RPG Maker VX Ace. É improvável que
# seja executado com o RPG Maker VX sem que precise de ajustes.
#
#==============================================================================
#==============================================================================
# CONTEÚDOS DO SCRIPT:
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Correção de Erro: Sobreposição da Animação
# -----------------------------------------------------------------------------
# - É o mesmo erro do VX. Quando uma animação de tela inteira é reproduzida
# contra um grupo de inimigos, o bitmap da animação é na verdade reproduzido
# várias vezes, causando uma extrema sobreposição quando há muitos inimigos na
# tela. Essa correção fará com que a animação se reproduza apenas uma vez.
#
# -----------------------------------------------------------------------------
# Correção de Erro: Correção da Ordem do Turno da Batalha
# -----------------------------------------------------------------------------
# - Mesmo erro do VX. Para aqueles que usam o sistema de batalha padrão, uma vez
# que um turno começou, a ordem de ação se configura e é inalterada durante o
# restante do turno. Quaisquer alterações na AGI do combatente não serão feitas,
# mesmo que o combatente receba um acréscimo ou decréscimo na AGI.
# Essa correção faz com que a AGI seja atualizada corretamente a cada ação.
#
# -----------------------------------------------------------------------------
# Correção de Erro: Correção da Sobreposição dos Medidores
# -----------------------------------------------------------------------------
# - Mesmo erro do VX. Quando algumas variáveis excedem determinados valores, os
# medidores podem extrapolar a largura para a qual eles foram originalmente
# projetados. Essa correção irá evitar que os medidores passem da largura
# máxima. (N.E.: E ainda coloca uma borda em volta deles!)
#
# -----------------------------------------------------------------------------
# Correção de Erro: Rolagem do Menu Segurando L e R
# -----------------------------------------------------------------------------
# - Antes, no VX, você podia navegar através de menus rapidamente pressionando
# os botões L e R (Q e W no teclado). Essa correção recupera a capacidade de
# percorrer os menus dessa forma.
#
# -----------------------------------------------------------------------------
# Correção de Erro: Rolagem no Mapa, Se Menor que a Tela
# -----------------------------------------------------------------------------
# - Uma pequena correção que permita que mapas menores que a tela (17x13, na
# resolução padrão) apresentem erros na hora do movimento da tela , o "scroll".
# É útil principalmente para quem utiliza a resolução de 640x480, e faz mapas
# do tamanho mínimo que o editor permite.
#
#==============================================================================
#==============================================================================
# ¦ BattleManager
#==============================================================================
module BattleManager
#--------------------------------------------------------------------------
# overwrite method: turn_start
#--------------------------------------------------------------------------
def self.turn_start
@phase = :turn
clear_actor
$game_troop.increase_turn
@performed_battlers = []
make_action_orders
end
#--------------------------------------------------------------------------
# overwrite method: next_subject
#--------------------------------------------------------------------------
def self.next_subject
@performed_battlers = [] if @performed_battlers.nil?
loop do
@action_battlers -= @performed_battlers
battler = @action_battlers.shift
return nil unless battler
next unless battler.index && battler.alive?
return battler
end
end
end # BattleManager
#==============================================================================
# ¦ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :pseudo_ani_id
#--------------------------------------------------------------------------
# alias method: clear_sprite_effects
#--------------------------------------------------------------------------
alias game_battler_clear_sprite_effects_ace clear_sprite_effects
def clear_sprite_effects
game_battler_clear_sprite_effects_ace
@pseudo_ani_id = 0
end
end # Game_Battler
#==============================================================================
# ¦ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
#--------------------------------------------------------------------------
# overwrite method: setup
#--------------------------------------------------------------------------
def setup(troop_id)
clear
@troop_id = troop_id
@enemies = []
troop.members.each do |member|
next unless $data_enemies[member.enemy_id]
enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
enemy.hide if member.hidden
enemy.screen_x = member.x + (Graphics.width - 544)/2
enemy.screen_y = member.y + (Graphics.height - 416)
@enemies.push(enemy)
end
init_screen_tone
make_unique_names
end
end # Game_Troop
#==============================================================================
# ¦ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# overwrite method: scroll_down
#--------------------------------------------------------------------------
def scroll_down(distance)
if loop_vertical?
@display_y += distance
@display_y %= @map.height * 256
@parallax_y += distance
else
last_y = @display_y
dh = Graphics.height > height * 32 ? height : (Graphics.height / 32)
@display_y = [@display_y + distance, (height - dh) * 256].min
@parallax_y += @display_y - last_y
end
end
#--------------------------------------------------------------------------
# overwrite method: scroll_right
#--------------------------------------------------------------------------
def scroll_right(distance)
if loop_horizontal?
@display_x += distance
@display_x %= @map.width * 256
@parallax_x += distance
else
last_x = @display_x
dw = Graphics.width > width * 32 ? width : (Graphics.width / 32)
@display_x = [@display_x + distance, (width - dw) * 256].min
@parallax_x += @display_x - last_x
end
end
end # Game_Map
#==============================================================================
# ¦ Game_Event
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# overwrite method: near_the_screen?
#--------------------------------------------------------------------------
def near_the_screen?(dx = nil, dy = nil)
dx = [Graphics.width, $game_map.width * 256].min/32 - 5 if dx.nil?
dy = [Graphics.height, $game_map.height * 256].min/32 - 5 if dy.nil?
ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
end
end # Game_Event
#==============================================================================
# ¦ Sprite_Base
#==============================================================================
class Sprite_Base < Sprite
#--------------------------------------------------------------------------
# new method: start_pseudo_animation
#--------------------------------------------------------------------------
def start_pseudo_animation(animation, mirror = false)
dispose_animation
@animation = animation
return if @animation.nil?
@ani_mirror = mirror
set_animation_rate
@ani_duration = @animation.frame_max * @ani_rate + 1
@ani_sprites = []
end
end # Sprite_Base
#==============================================================================
# ¦ Sprite_Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# alias method: setup_new_animation
#--------------------------------------------------------------------------
alias sprite_battler_setup_new_animation_ace setup_new_animation
def setup_new_animation
sprite_battler_setup_new_animation_ace
return if @battler.pseudo_ani_id <= 0
animation = $data_animations[@battler.pseudo_ani_id]
mirror = @battler.animation_mirror
start_pseudo_animation(animation, mirror)
@battler.pseudo_ani_id = 0
end
end # Sprite_Battler
#==============================================================================
# ¦ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# overwrite method: create_viewports
#--------------------------------------------------------------------------
def create_viewports
if Graphics.width > $game_map.width * 32 and !$game_map.loop_horizontal?
dx = (Graphics.width - $game_map.width * 32) / 2
else
dx = 0
end
dw = [Graphics.width, $game_map.width * 32].min
dw = Graphics.width if $game_map.loop_horizontal?
if Graphics.height > $game_map.height * 32 and !$game_map.loop_vertical?
dy = (Graphics.height - $game_map.height * 32) / 2
else
dy = 0
end
dh = [Graphics.height, $game_map.height * 32].min
dh = Graphics.height if $game_map.loop_vertical?
@viewport1 = Viewport.new(dx, dy, dw, dh)
@viewport2 = Viewport.new(dx, dy, dw, dh)
@viewport3 = Viewport.new(dx, dy, dw, dh)
@viewport2.z = 50
@viewport3.z = 100
end
end # Spriteset_Map
#==============================================================================
# ¦ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# overwrite method: draw_gauge
#--------------------------------------------------------------------------
def draw_gauge(dx, dy, dw, rate, color1, color2)
dw -= 2
fill_w = [(dw * rate).to_i, dw].min
gauge_h = 6
gauge_y = dy + line_height - 2 - gauge_h
outline_colour = gauge_back_color
outline_colour.alpha = translucent_alpha
contents.fill_rect(dx, gauge_y - 1, dw + 2, gauge_h + 2, outline_colour)
dx += 1
contents.fill_rect(dx, gauge_y, dw, gauge_h, gauge_back_color)
contents.gradient_fill_rect(dx, gauge_y, fill_w, gauge_h, color1, color2)
end
end # Window_Base
#==============================================================================
# ¦ Window_Selectable
#==============================================================================
class Window_Selectable < Window_Base
#--------------------------------------------------------------------------
# overwrite method: process_cursor_move
#--------------------------------------------------------------------------
def process_cursor_move
return unless cursor_movable?
last_index = @index
cursor_down (Input.trigger?(:DOWN)) if Input.repeat?(:DOWN)
cursor_up (Input.trigger?(:UP)) if Input.repeat?(:UP)
cursor_right(Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT)
cursor_left (Input.trigger?(:LEFT)) if Input.repeat?(:LEFT)
cursor_pagedown if !handle?(:pagedown) && Input.repeat?(:R)
cursor_pageup if !handle?(:pageup) && Input.repeat?(:L)
Sound.play_cursor if @index != last_index
end
end # Window_Selectable
#==============================================================================
# ¦ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# overwrite method: show_normal_animation
#--------------------------------------------------------------------------
def show_normal_animation(targets, animation_id, mirror = false)
animation = $data_animations[animation_id]
return if animation.nil?
ani_check = false
targets.each do |target|
if ani_check
target.pseudo_ani_id = animation_id
else
target.animation_id = animation_id
end
target.animation_mirror = mirror
abs_wait_short unless animation.to_screen?
ani_check = true if animation.to_screen?
end
abs_wait_short if animation.to_screen?
end
end # Scene_Battle
#==============================================================================
#
# FIM DO ARQUIVO
#
#==============================================================================
Fonte = Condado Braverhart