Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por newold el 2018-08-11, 19:48



Versión 1.0 Lanzada.

Pues como dice el título. Con este script puedes tener diferentes personajes hablando diferentes idiomas (por ejemplo el idioma gatuno, idioma humano, idioma orco....)

Para que un personaje hable en un idioma específico solo hay que usar el comando llamar script y escribir: set_language(ID)

La ID es un número (empezando en 1) que indica en que idioma habla el personaje. Al terminar de hablar con el personaje debes usar otro comando llamar script y escribir set_language(0) para volver al idioma por defecto.

Puedes controlar mediante condiciones e interruptores cuando usar cada idioma (ver vídeo demostración)


Script VX/ACE

Código:
=begin

    - Script Type: Create differents languages to NPCs of your game
    - Versión Info :1.0
    - Created by newold, 12-08-2018
    
    
    When you want an npc to speak in another language, go to the command
    "call script" of the events and type in:
    
        set_language(language_id)
        
    language_id => 0 = Default language, other number = language with that ID
    
    When finish to talk with a npc, use another command "call script" of the
    events and type in:
    
       set_language(0)
      
      
    You can create a new languages using the program called "Create Language"
    available in this post below all. (Copy code generated by the program into
    this script, below all)

=end



# ==============================================================================
class InGame_Language
  # ············································································
  class Language
    # ··········································································
    def initialize
      @data = {}
    end
    # ··········································································
    def [](character)
      return (@data[character].nil? ? character : @data[character])
    end
    # ··········································································
    def set(character, conversion)
      @data[character] = conversion
    end
    # ··········································································
  end
  # ············································································
  def initialize
    @data = []
    @data << nil
  end
  # ············································································
  def add_language(id=nil)
    if id.to_i > 0
      @data[id.to_i] = Language.new
    else
      @data << Language.new
    end
  end
  # ············································································
  def set(language_id, character, conversion)
    id = language_id.to_i
    return if id < 1 || @data[id].nil?
    @data[id].set(character, conversion)
  end
  # ············································································
  def translate(text)
    language_id = $game_temp.current_game_language
    return text if @data[language_id].nil?
    characters = text.split("")
    result = ""
    characters.each{|c|
      result << @data[language_id][c]
    }
    return result
  end
  # ············································································
  def [](id_language)
    return @data[id_language.to_i]
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Window_Base
  # ············································································
  alias inGame_Lang_pnc process_normal_character unless $@
  # ············································································
  def process_normal_character(c, pos)
    c = $game_language.translate(c)
    inGame_Lang_pnc(c, pos)
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Game_Temp
  # ············································································
  attr_accessor   :current_game_language
  # ············································································
  alias inGame_Language_initialize initialize unless $@
  def initialize
    inGame_Language_initialize
    @current_game_language = 0
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Game_Interpreter
  # ············································································
  def set_language(id)
    $game_temp.current_game_language = [0, id.to_i].max
    if $game_language[$game_temp.current_game_language].nil?
      $game_temp.current_game_language = 0
    end
  end
  # ············································································
end
# ==============================================================================


$game_language = InGame_Language.new

=begin

  ****************************************************************************
                        CREATE LENGUAGES FOR THIS GAME
  ****************************************************************************

=end

# Language with ID 1 (Configure language with mode below)
$game_language.add_language # New language = ID 1

language_id = 1
# letters downcase a-ñ
characters  =  %w(a   b   c   d   e   f   g   h   i   j   k   l   m   n   ñ)
conversions =  %w(а   б   ц   д   е   ф   г   х   и   й   к   л   м   н   ö)
for i in 0...characters.size
  # set letter downcase characters[i]
  $game_language.set(language_id, characters[i], conversions[i])
  # set letter upcase characters[i]
  $game_language.set(language_id, characters[i].upcase, conversions[i].upcase)
end
# letters downcase o-z
characters  =  %w(o   p     q   r   s   t   u   v   w   x   y   z)
conversions =  %w(о   п     q   р   с   т   у   в   w   x   ы   з)
for i in 0...characters.size
  # set letter downcase characters[i]
  $game_language.set(language_id, characters[i], conversions[i])
  # set letter upcase characters[i]
  $game_language.set(language_id, characters[i].upcase, conversions[i].upcase)
end


# Language with ID 2 (Configure language with mode below)
$game_language.add_language # New language = ID 2

$game_language.set(2, "a", "阿什")
$game_language.set(2, "e", "鸡")
$game_language.set(2, "i", "哦")
$game_language.set(2, "o", "特")
$game_language.set(2, "u", "玉")
$game_language.set(2, "A", "独布勒维")
$game_language.set(2, "E", "伊克斯")
$game_language.set(2, "I", "伊格黑克")
$game_language.set(2, "O", "贼德")
$game_language.set(2, "U", "日")

Script XP

Código:
=begin

    - Script Type: Create differents languages to NPCs of your game
    - Versión Info :1.0
    - Created by newold, 12-08-2018
    
    
    When you want an npc to speak in another language, go to the command
    "call script" of the events and type in:
    
        set_language(language_id)
        
    language_id => 0 = Default language, other number = language with that ID
    
    When finish to talk with a npc, use another command "call script" of the
    events and type in:
    
       set_language(0)
      
      
    You can create a new languages using the program called "Create Language"
    available in this post below all. (Copy code generated by the program into
    this script, below all)

=end




# ==============================================================================
class InGame_Language
  # ············································································
  class Language
    # ··········································································
    def initialize
      @data = {}
    end
    # ··········································································
    def [](character)
      return (@data[character].nil? ? character : @data[character])
    end
    # ··········································································
    def set(character, conversion)
      @data[character] = conversion
    end
    # ··········································································
  end
  # ············································································
  def initialize
    @data = []
    @data << nil
  end
  # ············································································
  def add_language(id=nil)
    if id.to_i > 0
      @data[id.to_i] = Language.new
    else
      @data << Language.new
    end
  end
  # ············································································
  def set(language_id, character, conversion)
    id = language_id.to_i
    return if id < 1 || @data[id].nil?
    @data[id].set(character, conversion)
  end
  # ············································································
  def translate(text)
    language_id = $game_temp.current_game_language
    return text if @data[language_id].nil?
    characters = text.split("")
    result = ""
    characters.each{|c|
      result << @data[language_id][c]
    }
    return result
  end
  # ············································································
  def [](id_language)
    return @data[id_language.to_i]
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Window_Message < Window_Selectable
  # ············································································
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    @cursor_width = 0
    # Indent if choice
    if $game_temp.choice_start == 0
      x = 8
    end
    # If waiting for a message to be displayed
    if $game_temp.message_text != nil
      text = $game_temp.message_text
      # Control text processing
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # Change "\\\\" to "\000" for convenience
      text.gsub!(/\\\\/) { "\000" }
      # Change "\\C" to "\001" and "\\G" to "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "\002" }
      # Get 1 text character in c (loop until unable to get text)
      while ((c = text.slice!(/./m)) != nil)
        # If \\
        if c == "\000"
          # Return to original text
          c = "\\"
        end
        # If \C[n]
        if c == "\001"
          # Change text color
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # go to next text
          next
        end
        # If \G
        if c == "\002"
          # Make gold window
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          # go to next text
          next
        end
        # If new line text
        if c == "\n"
          # Update cursor width if choice
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # Add 1 to y
          y += 1
          x = 0
          # Indent if choice
          if y >= $game_temp.choice_start
            x = 8
          end
          # go to next text
          next
        end
        # Draw text
        c = $game_language.translate(c)
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        # Add x to drawn text width
        x += self.contents.text_size(c).width
      end
    end
    # If choice
    if $game_temp.choice_max > 0
      @item_max = $game_temp.choice_max
      self.active = true
      self.index = 0
    end
    # If number input
    if $game_temp.num_input_variable_id > 0
      digits_max = $game_temp.num_input_digits_max
      number = $game_variables[$game_temp.num_input_variable_id]
      @input_number_window = Window_InputNumber.new(digits_max)
      @input_number_window.number = number
      @input_number_window.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Game_Temp
  # ············································································
  attr_accessor   :current_game_language
  # ············································································
  alias inGame_Language_initialize initialize unless $@
  def initialize
    inGame_Language_initialize
    @current_game_language = 0
  end
  # ············································································
end
# ==============================================================================


# ==============================================================================
class Interpreter
  # ············································································
  def set_language(id)
    $game_temp.current_game_language = [0, id.to_i].max
    if $game_language[$game_temp.current_game_language].nil?
      $game_temp.current_game_language = 0
    end
  end
  # ············································································
end
# ==============================================================================


$game_language = InGame_Language.new

=begin

  ****************************************************************************
                        CREATE LENGUAGES FOR THIS GAME
  ****************************************************************************

=end

# Language with ID 1 (Configure language with mode below)
$game_language.add_language # New language = ID 1

language_id = 1
# letters downcase a-ñ
characters  =  %w(a   b   c   d   e   f   g   h   i   j   k   l   m   n   ñ)
conversions =  %w(а   б   ц   д   е   ф   г   х   и   й   к   л   м   н   ö)
for i in 0...characters.size
  # set letter downcase characters[i]
  $game_language.set(language_id, characters[i], conversions[i])
  # set letter upcase characters[i]
  $game_language.set(language_id, characters[i].upcase, conversions[i].upcase)
end
# letters downcase o-z
characters  =  %w(o   p     q   r   s   t   u   v   w   x   y   z)
conversions =  %w(о   п     q   р   с   т   у   в   w   x   ы   з)
for i in 0...characters.size
  # set letter downcase characters[i]
  $game_language.set(language_id, characters[i], conversions[i])
  # set letter upcase characters[i]
  $game_language.set(language_id, characters[i].upcase, conversions[i].upcase)
end


# Language with ID 2 (Configure language with mode below)
$game_language.add_language # New language = ID 2

$game_language.set(2, "a", "阿什")
$game_language.set(2, "e", "鸡")
$game_language.set(2, "i", "哦")
$game_language.set(2, "o", "特")
$game_language.set(2, "u", "玉")
$game_language.set(2, "A", "独布勒维")
$game_language.set(2, "E", "伊克斯")
$game_language.set(2, "I", "伊格黑克")
$game_language.set(2, "O", "贼德")
$game_language.set(2, "U", "日")


Copiar el script encima del main. Para configurar los idiomas se hace abajo del script, siguiendo los dos ejemplos que ya hay (o puedes usar el programa que encuentras en este post abajo del todo). Puedes usar cualquier letra/número/símbolo y también mayúsculas y minúsculas para crear tu nuevo idioma.

Bugs Conocidos en esta versión: En los diferentes idiomas, los comandos de texto para color, tipo de letra, mostrar variable etc.... pueden no funcionar. En el idioma por defecto (el 0) no hay ningún problema (trataré de arreglarlo mañana si tengo tiempo) Arreglado.


Con este programa podéis crear idiomas para vuestro juego fácilmente (una vez creado, copiáis el código generado y lo pegáis abajo del script):

http://www.mediafire.com/file/lg2ati3zvs9okie/CreateLanguage.exe




Demo para ACE solo: http://www.mediafire.com/file/civ9nc14gzkvo8h/InGame_Language%20-%20Demo.rar


Última edición por newold el 2018-08-12, 13:44, editado 3 veces
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por orochii el 2018-08-12, 05:13

Jajajaja, me recuerda a Final Fantasy X. No lo he jugado pero creo haber escuchado que había una cosa así ahí. Por lo que veo funciona parecido, supongo que queda mejor si por ejemplo en lugar de cambiar letras por tonteras, uno cambia talvez el abecedario por letras griegas, cirílicas u otros caracteres ilegibles.

Pero está gracioso xD. ¿Habrá forma de hacer como en FF10, que aprendías como partes del lenguaje o algo así? Y que poco a poco ibas entendiendo lo que te decían.
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por newold el 2018-08-12, 08:50

Eso de aprender el idioma por partes ser podría hacer de la siguiente forma:

Creamos 3 idiomas (1, 2 y 3).

En el primero cambiamos todas las letras. El segundo sería igual que el primero pero eliminamos algunas letras (esas letras no serán convertidas). El tercero solo dejamos cambiadas las vocales.

Ahora con una variable en el juego controlamos que nivel de aprendizaje tiene el prota de ese idioma. Si es 0, mostramos el idioma 1, si es 1 mostramos el idioma 2, si es 2 mostramos el idioma 3, y si es más de 2 mostramos el idioma 0 (que sería el común, o nivel nativo ^^)

Idioma 1: Pito, ¿Lisi ma ttoson?
Idioma 2: Hola, ¿Lóso ma llasas?
Idioma 3: Hola, ¿Lómo te llamas?
Idioma 0 (nativo): Hola, ¿Cómo te llamas?


Y obvio, queda mejor si al idioma inventado se le ponen letras raras pero hay que ver si esas letras raras son aceptadas por el maker a la hora de dibujar el texto.

(Por ejemplo se pueden usar letras chinas, hice la prueba (foto abajo))

avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por newold el 2018-08-12, 10:39

Un doble post que no viene al tema pero me resulta curioso:

¿Soy yo solo o os pasa también a vosotros que si ponéis el mouse sobre el título de mi post éste se cambia de idioma aleatorio entre portugués/alemán...etc? Solo me pasa con este post :D
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por Ledai el 2018-08-12, 11:38

Nota: A mi también me sucede.... es la primera vez; es muy raro, pasa por francés, portugués italiano, español ingles... y algo como ¿rumano? y creo que una vez apareció en alemán XDD Eso es muy raro XDDD
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5491

Gracias : 211

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por Wecoc el 2018-08-12, 12:42

Es curioso. A mí también me recordó al Final Fantasy, creo que era ahí que podías "desbloquear" letras/sílabas para ir entendiendo el texto por trozos. Los bloqueados salían en un color y los desbloqueados en otro... Supongo que con un poco de arreglo podría llegar a hacerse algo así. O ya de modo más simple puede servir con la típica misión "la clave de todo la tiene el borracho del pueblo" xD

En cosas simples normalmente hay dos casos, que no entiendas lo que te dice y por lo tanto ocurra A o bien que sí lo entiendas y luego ocurra B, por lo que con un simple interruptor tienes suficiente, no veo que necesites script para nada en ese caso... Pero todo esto del aprendizaje sí de la un plus y hace que sea más útil.

¿Soy yo solo o os pasa también a vosotros que si ponéis el mouse sobre el título de mi post éste se cambia de idioma aleatorio entre portugués/alemán...etc? Solo me pasa con este post :D

¿Cómo?

Nah, culpable xD Sé que no es ese tipo de script de "distintos idiomas en el juego" (aunque ya subiste uno de eso hace un tiempo), pero era solo para hacer una bromita temporalmente ¯\_(ツ)_/¯ En unos días retiraré el Javascript que causa eso xD

Javascript:
Código:
$(function() {
  var lang = [
    "Different Languages ingame",      // Inglés   
    "Diferentes idiomas en el juego",  // Español   
    "Verschiedene Sprachen im Spiel",  // Alemán    
    "Différentes langues en jeu",      // Francés   
    "Lingue diverse in gioco",         // Italiano  
    "Kotonaru gengo no gēmu",          // Japonés   
    "Jogo com diferentes idiomas"      // Portugués
  ];
  $('a').filter(function(){
    if (this.innerText.includes(lang[0])) {
      this.onmouseover = function(){
        for (var i = 0; i < lang.length; i++) {
          var current_lang = lang[i];
          if (this.innerText.includes(current_lang)) {
            var r = Math.floor(Math.random() * lang.length), rand_lang = lang[r];
            $(this).text($(this).text().replace(current_lang, rand_lang));
            return;
          }
        }
      }
    }
  });
})

Por si os interesa xD
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por newold el 2018-08-12, 13:44

Buena esa de javascript Wecoc xD.

Subo un demo con el que muestro como poner que se aprenda un idioma por fases con este script.

Demo RPG MAKER VX ACE
http://www.mediafire.com/file/civ9nc14gzkvo8h/InGame_Language%20-%20Demo.rar
avatar
newold
Principiante
Principiante

0/3

Créditos 1232

Gracias : 119

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por orochii el 2018-08-12, 19:48

@Wecoc escribió:Nah, culpable xD Sé que no es ese tipo de script de "distintos idiomas en el juego" (aunque ya subiste uno de eso hace un tiempo), pero era solo para hacer una bromita temporalmente ¯\_(ツ)_/¯ En unos días retiraré el Javascript que causa eso xD

Que quede para la posteridad pues xD.
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

Re: [XP][VX][ACE] Different Languages ingame - Version 1.0 available (Final)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.