Suporte ao desenvolvimento de jogos!


    BugFix (para VXACE SP1)

    Compartilhe
    avatar
    Komuro Takashi
    Moderador Local
    Moderador Local

    Mensagens : 1051
    Créditos : 131

    BugFix (para VXACE SP1)

    Mensagem por Komuro Takashi em Seg Jun 18, 2012 12:42 pm

    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
    #
    #==============================================================================
    Crédito = Rafael Sol Maker
    Fonte = Condado Braverhart


    _________________

      Data/hora atual: Seg Ago 20, 2018 10:01 am