Tutorial de traducción de juegos MSX

Artículo original de Ricardo Bittencourt (en portugués). Texto traducido y adaptado por Konamito. Publicado con permiso de su autor.

Introducción

Es curioso cómo ciertas formas de arte se encuentran en lugares y momentos muy específicos. El movimiento grunge tuvo su apogeo en la ciudad de Seattle en los años 90, y los cómics de superhéroes tenían como escenario la Nueva York de 1940. Lo mismo ocurrió con los videojuegos que andaban por Japón durante los años 80.

Sin embargo, estando Japón típicamente orientado hacia el mercado interno, muy poco de lo hecho allí en aquella época llegó a occidente. Por cada Mario y Zelda que llegó hasta aquí,¡ otros diez juegos igualmente buenos permanecieron allá completamente desconocidos para nosotros!

Hoy en día todos estos juegos se pueden encontrar fácilmente en Internet. Sin embargo, todavía no pueden ser apreciados por los jugadores occidentales, debido a la barrera del idioma. Por lo general estos juegos están escritos totalmente en japonés, sin ninguna versión escrita en otro idioma.

La solución para esto es la traducción de los juegos. En noviembre de 2001, comencé la traducción del juego Shalom, de Konami, y actualmente está casi terminado. Sin embargo, ¡todavía hay muchos juegos que merecen ser traducidos!

El objetivo de este tutorial es enseñar a todos los trucos y técnicas necesarias para traducir un juego. ¡De esta manera espero hacer estas perlas desconocidas para el público de habla portuguesa!

En lugar de simplemente hacer una página con consejos y trucos de traducción, me decidí a hacer este tutorial en forma de blog. Por lo tanto, los aspirantes a traductor pueden seguir paso a paso el proceso de traducción, sin perderse ningún detalle.

Antes de comenzar este tutorial, hay que hacer algunas advertencias. Traducir un juego no es fácil. Es laborioso, tedioso y requiere una serie de habilidades que no todos podrían tener.

Como los juegos originales están en japonés, tenéis que saber japonés antes que nada. Y el hecho de saber el idioma puede no ser suficiente: para los chistes y los juegos de palabras puede ser necesario tener un conocimiento bastante avanzado de las estructuras gramaticales, el vocabulario, las costumbres y la historia de Japón.

Además, en algún momento tenéis que que entender cómo funciona el programa, o al menos parte de él. Y si entender el código C de otras personas, incluso comentado, es difícil; entonces, créeme, que entender el código ensamblador sin comentarios lo es aún más.

Además de los requisitos anteriores, tendréis que tener un buen conocimiento general de programación. En el camino, pueden surgir problemas de compresión de datos, conversión de caracteres, falta de memoria, y muchos otros. En estos casos, sólo la experiencia puede ayudar al programador.

Teniendo en cuenta todos los peros mencionados anteriormente, ¡huid mientras podáis! ¡El botón atrás de vuestro navegador os llevará a los rincones más seguros de la web! ¡Esto de de la traducción es algo de locos!

De acuerdo, sois conscientes de las dificultades y habéis decidido continuar con la lectura. Esto es bueno. Las traducciones requieren una buena dosis de coraje. A pesar de que todos los problemas mencionados anteriormente no son reales, no es necesario atacarlos a todos. Si hay algo que no entendéis buscad a alguien que sepa. Nadie dijo que la traducción fuera una tarea solitaria. Incluso, si no no sabéis nada de las áreas comentadas más arriba, aún podéis ayudar en un proyecto de traducción, como beta-tester. No dejando pasar ninguno de los errores cometidos por los programadores y traductores.

Terminada la introducción, ¡en la próxima lección explicaré el primer desafío al que debe enfrentarse el traductor!

La elección

 

Uno de las tareas más difíciles al traducir un juego, por increíble que pueda parecer, es elegir el juego. El proceso de traducción es largo, duro y agotador, por lo que es bueno tener en mente qué juego será vuestro compañero durante meses o incluso años. Por eso, la primera lección es: hay traducir un juego que os guste. No tiene mucho sentido traducir un juego sólo porque está de moda, u otro motivo igualmente vano. Si no os gusta lo que estáis haciendo, las posibilidades de que abandonéis son muy grandes.

Para este tutorial, tuve que elegir un juego que me gustaba, y acabé decidiéndome por Labyrinth, de Pack-in-Video, juego basado en la película homónima de Jim Henson. Las razones por las que soy un fan de esta película son demasiado largas para comentarlas aquí (un día acabaré haciendo una página sobre ellas). Para mí traducir un juego basado en Labyrinth es un honor. Como juego, Labyrinth solamente tiene sonido MSX-Audio pero sonido en FM, ¡y esto ya lo convierte en un juego único! Además, Labyrinth es un juego de rol, así que es casi imposible jugarlo sin saber japonés por lo que esto lo coloca en la categoría de juego inédito (al menos en occidente).

Para la primera lección, ¡hablaré un poco sobre vuestros compañeros de trabajo!

Las herramientas de trabajo

Una de las características más extrañas de la lengua japonesa es la ausencia de «Rebelos». Rebelo fue un político brasileño que quiso prohibir el uso de palabras inglesas dentro de la lengua portuguesa. Por lo general, los japoneses no tienen ningún reparo en aprovecharse de otros idiomas apropiarse de todo lo que les falta en el suyo.

Esto puede ser demostrado históricamente. En un principio el japonés era estrictamente un lenguaje oral. Cuando la forma escrita fue necesaria, alrededor del siglo V, los caracteres (kanji) fueron importados de China. En el siglo XV, Japón entró en contacto con las civilizaciones occidentales, que en esa época estaban en expansión debido a las grandes navegaciones. Por eso algunas palabras que representan los nuevos conceptos fueron tomadas directamente de la lengua de los navegantes portugueses, como pan (パン=pan) y jabón ((シャボン=shabon).

Hoy en día, la fuente de conceptos nuevos son los Estados Unidos. Así que una gran cantidad de palabras se copian directamente del inglés, como ordenador (コンピュータ = konpyuuta) y juego (ゲーム = geemu). Por esta motivo, es muy común encontrar las palabras, frases y fragmentos enteros, incluso textos escritos en inglés, en un juego hecho en Japón.

Por otro lado, si los japoneses no se cortan en tomar adaptar palabras y tomar prestados los verbos, tampoco se preocupan de adoptar la ortografía correcta. Incluso en algunos casos, ¡el significado original se conserva! Un ejemplo sencillo es la palabra vestido, que en Japón se ha convertido en ワンピース = wanpiisu, del inglés one piece.

Así que si os encontráis cualquier texto en inglés en un juego que japonés, recuerdad este consejo importante: no importa lo que está escrito, sino lo que el autor quería escribir. Como dijo sabiamente un amigo mío japonés: «no es inglés… es japonés inglés!»

Pero dejemos la introducción y vayamos a lo que nos interesa. Aplicando directamente lo que escrito más anteriormente, podemos observar que en la pantalla de créditos de Labyrinth hay una parte que dice «CODE FOR MSX CONPUTER». obviando lo que está escrito,nos damos cuenta de que el autor realmente quiso escribir «CODE FOR MSX COMPUTER». Una buena traducción pasaría todo este texto a portugués (español en nuestro caso) pero la corrección ortográfica es un buen ejercicio para practicar el uso de las herramientas.

La primera herramienta que necesitáis para traducir es un buen emulador. En el caso de Labyrinth, un juego para MSX2, yo usaría BrMSX como emulador. Ser el autor de BrMSX ayuda un poco a elegir, por supuesto, pero al final siempre se puede optar por cualquier opción que ayude a traducir. Pero la verdadera razón de esta elección es que tiene un excelente debugger (depurador) para el código fuente. Por pura comodidad, yo uso, además de BrMSX, tambiénParaMSX, muy bieno a la hora de realizar capturas de pantalla.

Comprobando que la ROM original funciona en el emulador, podemos comenzar a corregir la ortografía. Para ello, usamos una segunda herramienta, un editor hexadecimal. Hay muchas disponibles pero yo os recomiendo usar UltraEdit. Además de la edición hexadecimal sí mismo, esta plaicación tiene también un editor de texto Unicode muy adecuado para editar textos en japonés, y un sistema de plug-in con el que se puede poner en el emulador así como también herramientas de extracción de scripts. ¡Y todo esto por sólo 35 dólares!

Antes de hacer una corrección (parche) una pequeña observación. Esto es algo que ya debería haber hecho, pero nunca está de más recordar: hay que hacer una copia de seguridad de la ROM original antes de realizar cualquier cambio.

Para hacer la modificación, sólo tenéis que cargar la ROM en el UltraEdit. Se debe abrir directamente en modo hexadecimal, si esto no sucede, sólo tenéis que pulsar CTRL + H. Usando ALT + F3, introducís la cadena a buscar en nuestro caso CONPUTER y el programa nos recuerda que se trata de una búsqueda de texto, así que hay que hacer click en Find ASCII. Ahora basta con escribir M encima de la N original y guardar la ROM para probar en el emulador.

 

 

Si todo va bien, ahora deberíais tener una ROM ya corregida y que funciona correctamente en el emulador. ¡Felicidades, habéis tenido suerte! Y muy buena suerte, porque a pesar de ser un procedimiento simple, muchas cosas podrían haber fallado.

Entre las cosas que podrían haber ocurrido están las siguientes:

  • Fallo al buscar el texto CONPUTER: el texto usa una codificación diferente a ASCII.
  • Fallo al buscar el texto CONPUTER: el texto está comprimido dentro de la ROM.
  • Fallo al buscar el texto CONPUTER: la pantalla de créditos es un gráfico en lugar de texto.
  • La modificación del texto podría dar fallo si la ROM tuviese checksum o tuviera protección antipiratería.
  • Un meteorito podría caer en vuestra cabeza (esto no está directamente relacionado con la traducción, ¡pero podría ocurrir! ¡Sois unos tipos con suerte!)

Teniendo en mente los problemas que podrían haber ocurrido, es hora de seguir adelante con un poco de traducción real del japonés al portugués.

El conjunto de caracteres

La traducción de los juegos es una de esas cosas que son exponencialmente más fáciles con la experiencia. De hecho, traducir no sigue un método complicado: todo se reduce a un puñado de trucos, que con el tiempo aprenderéis y sabréis rápidamente cuándo se deben usar.

Mi primera traducción fue en 1987, cuando las unidades de disco eran todavía demasiado caras para su uso personal. En aquella época usaba el cartucho Mega Assembler, una belleza que traía un editor hexadecimal, buscador de cadenas (incluida búsqueda relativa con cualquier offset), editor de tiles y letras, ensamblador y desensamblador. En definitiva, todas las herramientas que el traductor necesita.

Fui jugando con Mega Assembler ya que estaba familiarizado con la arquitectura del MSX. Hoy conozco todos los detalles de la plataforma, lo que hace que ciertos procedimientos de traducción sean muy fáciles. Por lo tanto, la lección de hoy es: hay que estudiar bien la arquitectura de la máquina que ejecuta el juego, a veces un pequeño detalle de la arquitectura puede ahorrarnos mucho tiempo.

Problema en cuestión es la codificación de caracteres. Hemos visto que el texto de la pantalla de créditos se almacena en la ROM en formato, por lo que la modificación es sencilla. Pero eso fue para un pequeño texto escrito en inglés. ¿Y para el resto de la ROM, que está en japonés, qué patrón hay que usar?

Si para occidente el estándar ASCII es un casi universal, no puede decirse lo mismo de la codificación del japonés. Incluso hoy en día, hay una gran cantidad absurda de sistemas en uso. Al visitar los sitios web japoneses vemos que los textos de las páginas están escritos en Shift-JIS, EUC-JP algunos, y otros en Unicode. En el caso de los juegos, a menudo no utilizan ningún estándar, y lo más probable es que el juego tenga una tabla especial que no se utiliza en ningún otro lugar. Shalom, por ejemplo, utiliza una tabla de 256 posiciones hiragana o katakana yalrededor de 100 kanjis de uso común. Para averiguar de qué tabla se trataba tuve que abrir la ROM en un editor de tiles y localicé dentro dónde estaba el alfabeto. En otras palabras, nada demasiado complicado.

En el caso de Labyrinth, sin embargo, quien trate de hacer lo mismo no encontrará alfabeto ninguno. En este punto es donde los traductores novatos caen en la desesperación, piensan que debe estar comprimido, lo cual es muy difícil, y se dan por vencidos. ¡No lo hagáis vosotros! Este caso se resuelve fácilmente cuando se comprende bien la arquitectura.

Lo que ocurre en el MSX es que la ROM del juego no es el único programa que se ejecuta. En el interior del equipo hay una BIOS que contiene, entre otras cosas, un alfabeto. Y puede ocurrir que Labyrinth use ese alfabeto ubicado en la ROM interna del ordenador. La evidencia que sugiere esta posibilidad es la falta de acentos en kanas (por ejemplo, en lugar de ぜんぶ, aparece en la pantalla せ ゛ ん ふ ゛). Esto es característico del alfabeto interno de la BIOS.

Para probar la teoría, sólo tenéis que que utilizar el emulador con una BIOS diferente. Al ejecutar el juego con un BIOS coreana el texto cambia. Esto demuestra la teoría, así que ahora podemos asumir con seguridad que el conjunto completo de caracteres es el mismo que se encuentra en la BIOS. Teniendo esta información.

Convirtiendo la tabla

Una vez que hemos descubierto que el alfabeto del juego está en la ROM interna del MSX, tenemos ahora que averiguar qué formato utiliza. Para ello, la forma más fácil es simplemente abrir la BIOS en cualquier programa de edición de gráficos. Como el alfabeto de la BIOS solamente tiene dos colores, blanco y negro, lo más probable es que se almacene como un gráfico de 1bpp (1 bit por píxel). Y para visualizar este gráfico usaremos una herramienta llamada Tile Layer Pro.

Abriendo el programa y configurándolo para gráficos monocromos (1bpp) basta con navegar un poco para encontrar el alfabeto. Este tipo de cosas siempre van en orden, así que simplemente basta con contar de izquierda a derecha y de arriba a abajo para encontrar el código equivalente de cada carácter. Con un poco de paciencia se puede ver que el carácter A tiene el código 65. Teniendo en cuenta que la letra A se encuentra en posición 2 de la fila 5, y restando 1 a cada posición obtendréis el código hexadecimal 41 (5-1=4, 2-1=1), que en decimal equivale a 65.

Conociendo el código interno de la ROM, ahora sólo tenemos que convertirlo en código legible para otras herramientas. Como he dicho antes, UltraEdit puede editar el texto en japonés, siempre que utilice el formato Unicode. Por lo tanto basta con modificar el formato-BIOS a Unicode para que el texto estará listo. El código Unicode aparece en su página web oficial, donde, por ejemplo, es 0x3042.

Ahora viene la pregunta crucial: ¿tengo que hacer esto para todos los 256 caracteres de la tabla? La respuesta es ¡sí! Algunas partes del proceso de traducción son bastante aburridas, pero alguien tiene que hacerlo. Si nadie lo hace no se podrá traducir nada, ¡así que hay que arremangarse y ponerse manos a la obra!

Para ahorraros el trabajo de hacer la tabla, podéis conseguirla aquí, en formato binario. De esta manera es posible realizar vuestro primer volcado. A continuación se muestra una versión preliminar, de funcionamiento muy simple. Lo que hace este volcado es leer byte por byte la información de la ROM, y cambiarlo por su equivalente en Unicode. El código de escape 0xFEFF al comienzo del código es sólo para indicar que estamos utilizando una máquina de bajo rendimiento, de esta manera la secuencia de comandos generada se puede leer en cualquier software compatible con Unicode en cualquier plataforma.

#include <stdio.h>
#include <io.h>
#include <malloc.h>

#define print(x) c=(x); fwrite (&c,1,2,f);

int main (int argc, char **argv) {
  FILE *f;
  int len,i;
  unsigned char *buf;
  unsigned short table[256],c;

  f=fopen ("msxtable.out","rb");
  fread (table,2,256,f);
  fclose (f);

  f=fopen (argv[1],"rb");
  len=filelength (fileno (f));
  buf=(unsigned char *) malloc (len);
  fread (buf,1,len,f);
  fclose (f);

  f=fopen (argv[2],"wb");
  print (0xFEFF);
  for (i=0; i<len; i++) {
    print (table[buf[i]]);
    if (i%16==15) {
      print (0xD);
      print (0xA);
    }
  }
  fclose (f);

  return 0;
}

Después de ejecutar el programa, debéis estar ansiosos por abrir el archivo y buscar los textos para traducirlos, ¿verdad? Sin embargo, a excepción del texto en inglés del comienzo, ¡no hay nada inteligible en ella! Esto indica que los textos se comprimen o se codifican en la ROM, en cuyo caso la solución es respirar profundamente y empezar el proceso de depuración.

4 comentarios sobre «Tutorial de traducción de juegos MSX»

  1. Jo, peazo artículo. Lo malo de leer cosas así es que uno se da cuenta de lo poco que sabe…. 🙁

    Saludetes. 😉

  2. La verdad es que uno después de leer el artículo cree que es más sencillo de lo que parece traducir juegos, ¿verdad? En el caso del japonés se complica la cosa porque si no conoces el idioma estás vendido.

    Igual me animo a traducir al español ¿Gradius 2?

  3. Gracias por el tutorial, el procedimiento es similar al de los roms de nintendo.

    Saludos

    CondeNador

Deja tu comentario sobre esto

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.