Idiomas múltiplos no RMXP com o Multiple Languages

20 de agosto de 2015

Multiple Languages (versão 2) é um script desenvolvido pelo SephirothSpawn para ser usado no RPG Maker XP que deixa você simular o aprendizado de múltiplos idiomas no seu projeto, através de transferências de cartas.

O script permite você a transferir uma carta para outra, até que você aprenda a carta (Uma Carta = Outra Carta). Você pode definir idiomas variados e controlar a cor de cartas conhecidas ou desconhecidas para cada um deles.

Utilização

Primeiro de tudo, instale o script no seu projeto.

Para utilizar o script em seu total potencial, convém um pouco de conhecimento de RGSS.

  • Acionando diferentes idiomas: $game_languages.language_id = language_id
  • Desativando diferentes idiomas: $game_languages.language_id = nil
  • Para aprender uma carta, use: $game_languages.learn_letter(language_id, 'letter')

Note que pela complexidade do sistema de mensagens, você não pode usar comandos especiais como a janela de mostrar o gold quando usa uma linguagem alternativa.

Definindo o Idioma

Como definir a cor para cartas conhecidas e desconhecidas:

  • Known_Letter_Color = {language_id => text_color, ...}
  • Unknown_Letter_Color = {language_id => text_color, ...}

Definindo uma tabela de idioma

  • Languages = {language_id => <language_table>, ...}

Onde <language_table> é um hash de todas as cartas e símbolos que vão transferir para outra coisa. As chaves são o que a letra é, e seus valores são como o que as cartas vão se parecer depois que traduzidas.

Por exemplo:

{'a' => 'j', 'b' => 'k', 'c' => 'l', 'd' => 'm', 'e' => 'n'}
CbaEBac -> LkjNKjl

Instalação

Coloque o script abaixo do SDK e acima do Main. Segue o código:

#==============================================================================
# ** Multiple Languages
#------------------------------------------------------------------------------
# SephirothSpawn
# Version 2
# 2006-08-27
#------------------------------------------------------------------------------
# * Description :
#
#   This script was designed to let you simulate multiple languages through
#   letter transfers. It allows you to transfer one letter to another, until
#   you learn the letter (One Letter = Another Letter). You can set up
#   multiple languages and control color of known and unknown letters for
#   each language.
#------------------------------------------------------------------------------
# * Instructions :
#
#   Place The Script Below the SDK and Above Main.
#
#   Turning on Different Language:
#    - $game_languages.language_id = language_id
#
#   Turning off multiple langauges:
#    - $game_languages.language_id = nil
#
#   To Learn a letter, use:
#    - $game_languages.learn_letter(language_id, 'letter')
#
#   ** NOTE: Due to the complexity of message systems, you cannot use special
#   commands such as the show gold window when displaying an alternate language
#------------------------------------------------------------------------------
# * Setting Up A Language
#
#   Setting Color for Known and Unknown letters
#    - Known_Letter_Color = {language_id => text_color, ...}
#    - Unknown_Letter_Color = {language_id => text_color, ...}
#
#   Setting Up Language Table
#    - Languages = {language_id => <language_table>, ...}
#
#   <language_table> is a hash of all letters and symbols that will transfer
#   to something else. The keys are what the letter is, and the values are
#   how the letters will appear until translated.
#
#   Example:
#    {'a' => 'j', 'b' => 'k', 'c' => 'l', 'd' => 'm', 'e' => 'n'}
#
#    CbaEBac -> LkjNKjl
#------------------------------------------------------------------------------
# * Credits :
#
#   Thanks To Makeamidget For helping me with previous versions
#==============================================================================

#------------------------------------------------------------------------------
# * SDK Log Script
#------------------------------------------------------------------------------
SDK.log('Multiple Languages', 'SephirothSpawn', 2, '2006-08-28')

#------------------------------------------------------------------------------
# * Begin SDK Enable Test
#------------------------------------------------------------------------------
if SDK.state('Multiple Languages')

#==============================================================================
# ** Game_Languages
#==============================================================================

class Game_Languages
  #--------------------------------------------------------------------------
  # * Letter Colors
  #
  #  ~ language_id => text_colors
  #
  #  The Text Colors are the colors you would use when you use c[n].
  #  By Default, these are the colors:
  #
  #  0 : White            1 : Dark Blue
  #  2 : Red              3 : Green
  #  4 : Light Blue       5 : Purple
  #  6 : Yellow           7 : Gray
  #--------------------------------------------------------------------------
  Known_Letter_Color = {
    1 => 0
  }
  Unknown_Letter_Color = {
    1 => 6
  }
  #--------------------------------------------------------------------------
  # * Languages
  #
  #  ~ language_id => {a => 'f', 'b' => 'c', ...}
  #
  # * Template For Letters
  #  = {'a' => '', 'b' => '', 'c' => '', 'd' => '', 'e' => '',
  #     'f' => '', 'g' => '', 'h' => '', 'i' => '', 'j' => '',
  #     'k' => '', 'l' => '', 'm' => '', 'n' => '', 'o' => '',
  #     'p' => '', 'q' => '', 'r' => '', 's' => '', 't' => '',
  #     'u' => '', 'v' => '', 'w' => '', 'x' => '', 'y' => '',
  #     'z' => ''}
  #--------------------------------------------------------------------------
  Languages = {
    1 => {'a' => 'y', 'b' => 'p', 'c' => 'l', 'd' => 't', 'e' => 'a',
          'f' => 'v', 'g' => 'k', 'h' => 'r', 'i' => 'e', 'j' => 'z',
          'k' => 'g', 'l' => 'm', 'm' => 's', 'n' => 'h', 'o' => 'u',
          'p' => 'b', 'q' => 'x', 'r' => 'n', 's' => 'c', 't' => 'd',
          'u' => 'i', 'v' => 'v', 'w' => 'f', 'x' => 'q', 'y' => 'o',
          'z' => 'w'
    }
  }
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :language_id
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @language_id = nil
    @known_letters = {}
  end
  #--------------------------------------------------------------------------
  # * Learn Letter
  #--------------------------------------------------------------------------
  def learn_letter(language_id, letter)
    unless @known_letters.has_key?(language_id)
      @known_letters[language_id] = [] 
    end
    unless @known_letters[language_id].include?(letter.downcase)
      @known_letters[language_id] << letter.downcase
    end
  end
  #--------------------------------------------------------------------------
  # * Change To Language
  #--------------------------------------------------------------------------
  def change_to_language
    return_text = ''
    text = $game_temp.message_text
    last_color = 0
    begin
      while ((c = text.slice!(/./m)) != nil)
        if @known_letters.has_key?(@language_id)
          if @known_letters[@language_id].include?(c.downcase)
            next_color = Known_Letter_Color[@language_id]
            unless next_color == last_color
              last_color = next_color
              return_text += 'c' + "[#{next_color}]"
            end
            return_text += c
            next
          end
        end
        if Languages[@language_id].include?(c.downcase)
          if c.upcase == c
            c = Languages[@language_id][c.downcase].upcase
          else
            c = Languages[@language_id][c]
          end
        end
        next_color = Unknown_Letter_Color[@language_id]
        unless next_color == last_color
          last_color = next_color
          return_text += 'c' + "[#{next_color}]"
        end
        return_text += c
      end
    end
    $game_temp.message_text = return_text
  end
end

#==============================================================================
# ** Window_Message
#==============================================================================

class Window_Message
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_gmlngs_wdmsg_refresh refresh
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    # If Alternate Languages Isn't Nil
    unless $game_languages.language_id.nil?
      $game_languages.change_to_language
    end
    # Original Method Refresh
    seph_gmlngs_wdmsg_refresh
  end
end

#==============================================================================
# ** Scene_Title
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_gmlngs_scnttl_cng command_new_game
  #--------------------------------------------------------------------------
  # * Command : New Game
  #--------------------------------------------------------------------------
  def command_new_game
    # Original Command New Game
    seph_gmlngs_scnttl_cng
    # Creates Game Languages Game Data
    $game_languages = Game_Languages.new
  end
end

#==============================================================================
# ** Scene_Save
#==============================================================================

class Scene_Save
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_gmlngs_scnsave_wd write_data
  #--------------------------------------------------------------------------
  # * Command : New Game
  #--------------------------------------------------------------------------
  def write_data(file)
    # Original Write Data
    seph_gmlngs_scnsave_wd(file)
    # Saves Game Languages Data
    Marshal.dump($game_languages, file)
  end
end

#==============================================================================
# ** Scene_Load
#==============================================================================

class Scene_Load
  #--------------------------------------------------------------------------
  # * Alias Listings
  #--------------------------------------------------------------------------
  alias seph_gmlngs_scnload_rd read_data
  #--------------------------------------------------------------------------
  # * Command : New Game
  #--------------------------------------------------------------------------
  def read_data(file)
    # Original Write Data
    seph_gmlngs_scnload_rd(file)
    # Saves Game Languages Data
    $game_languages = Marshal.load(file)
  end
end

#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end

Mais RMXP

[gS_tags tagslugs=rpg-maker-xp]

Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Clique aqui e saiba como. Obrigado!

Deixe um comentário

Inscreva-se na nossa newsletter!