quarta-feira, 3 de abril de 2013

RPGMAKERVXACE - PACOTE DE CORREÇÕES PARA RMVXACE DO YANFLY:


#==============================================================================
# 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
#
#==============================================================================

Nenhum comentário:

Postar um comentário