[GENERAL] tutorial de traduccion

bueno, vamos a aprender a traducir juegos...

como ejemplo, voy a tomar el juego MLS Extratime 2002 de Xbox, el sistema de traduccion es muy similar en otros juegos, pero no siempre los datos estaran en el mismo sitio, a veces tendremos que 'bucear' por entre los archivos del juego para ver donde estan los textos que se puedan traducir...

MLS Extratime 2002 (MLSE2k2 a partir de ahora) tiene una traduccion muy sencilla, puesto que TODOS los textos estan incluidos en el archivo DEFAULT.XBE.
El truco de traducir consiste en abrir con un editor hexadecimal un fichero, localizar la cadena de texto a traducir y cambiarla, esto es importante, por otra cadena DE LA MISMA LONGITUD O MAS CORTA que la original. muy pocas veces podremos superar la longitud de la cadena original, y las veces que podamos superar esa longitud apenas seran uno o dos caracteres mas. Esta es la maxima dificultad a la hora de traducir, lo que se conoce como 'cuadrar' los textos.

vamos a un caso practico, el anteriormente dicho MLSE2k2... cuando arrancamos el juego y termina toda la intro, se nos queda en una pantalla azul de presentacion, con las letras parpadeando abajo a la izquierda 'Press START Button' (vamos, no te fies de mi, arranca el juego y llega hasta esa pantalla, para que veas lo que vamos a cambiar). bueno, pues vamos a cambiar esa frase por su traduccion al español 'presiona el boton START', pero ALTO, vemos que la traduccion literal nos da una frase MAS larga que la original, asi que no es admisible. nos estrujamos un poco la cabeza y damos con otra mas corta: 'Pulsa boton START', esa esta mejor, es 1 caracter mas corta que la original, asi que vamos a ello.

ejecutamos Hex Workshop, y abrimos el fichero 'default.xbe' del juego MLSE2k2
Imagen

una vez abierto, llegamos a la pantalla general del programa con el fichero en su formato hexadecimal, podemos leer algunas letras legibles como 'XBE' y algo asi...
Imagen

ahora buscamos la cadena de caracteres 'press start button' dentro de todo el fichero, para eso usaremos la utilidad de buscar que trae el programa HexWorkshop
Imagen
el paso 1 no es obligatorio pulsarlo, pero es bueno tener en mente usar siempre notacion hexadecimal en vez de la decimal para indicar los offsets (ver glosario), tambien es importante buscar las cadenas de caracteres tanto en modo ASCII como en modo UNICODE. tambien es importante que no tachemos el cuadro de 'match case' porque entonces nos buscaria teniendo en cuenta mayusculas y minusculas y eso, por el momento, no lo vamos a usar.

ya lo hemos encontrado:
Imagen
a la izquierda viene representado en numeros negros el OFFSET donde se encuentra la linea; en medio, en numeros/letras azules, la informacion hexadecimal que esta ahi contenida, y a la derecha, en letras negras, la traduccion que tiene esa informacion hexadecimal en letras, si es que tiene alguna... como podemos ver, nos ha localizado toda la frase de 'press start button'.

ahora, sin miedo, procedemos a cambiar la frase, para eso pulsamos en la primera 'P' de 'Press start button' y escribimos en lo alto 'Pulsa boton START'
Imagen
nos fijamos, como, en las letras que han cambiado del original (es casualidad que la P y una 's' de 'Press...' esten en el mismo sitio que 'Pulsa...') nos las marca en rojo, y que tambien nos sobra una letra al final, con la letra sobrante podemos hacer 2 cosas: 1) dejamos un espacio en blanco o 2) escribimos un '.'; se pueden hacer cualquiera de las 2, aunque yo he optado por dejar un espacio en blanco, tambien podemos fijarnos que el espacio en blanco representa el valor hexadecimal 20h internamente.

con esto ya esta listo, pulsamos en grabar y salvamos el archivo nuevo.
Imagen
vemos que el programa nos avisa si queremos hacer una copia de seguridad del archivo antiguo antes de grabar el nuevo, esto es muy importante, puesto que si por cualquier cosa el nuevo no funciona, no podriamos volver atras. al aceptar, el nuevo lo grabamos como 'default.xbe' y el antiguo original se guarda como 'default.bak'. si el nuevo no funciona, borraremos default.xbe y renombraremos default.bak a default.xbe y lo tendremos como al principio.

ya esta, solo queda 'uplodear' la version modificada de default.xbe a la consola XBOX y ver el resultado de nuestra pequeña obra...

el resto de la traduccion es igual, localizar una cadena a traducir, buscar en el archivo, modificar por otra cadena igual o mas corta, guardar y uplodear para ver si funciona. el resto es paciencia.


GLOSARIO:
decimal y hexadecimal: son dos metodos de numeracion, con el metodo decimal se cuenta del 0 al 9 (10 numeros), mientras que con el metodo hexadecimal se cuenta del 0 al F (15 numeros). como no existen bastantes numeros, los que pasan del 9 se sustituyen por letras, quedando como A=10, B=11, C=12, D=13, E=14, F=15. la ventaja del metodo hexadecimal es que para representar un byte de informacion solo te hacen falta 2 digitos(FFh=255), al contrario que en el metodo decimal, donde te hacen falta 3 digitos para eso. es norma tambien que para diferenciar un numero hexadecimal de uno decimal se ponga detras del numero hexadecimal una pequeña 'h' o se anteceda de '0x' al estilo de 8FE3h o 0x8FE3, que significa ambos numeros lo mismo.

offset: referido como el 'desplazamiento' desde un valor determinado, por ejemplo, si tomamos como origen el valor 100, el valor 125, tendra un offset de 25 con respecto a 100. comunmente se le denomina offset si no se especifica inicio, a la distancia desde el principio del archivo.

UNICODE y ASCII: son dos metodos de alfabetizacion. el metodo ASCII es muy popular y usa un byte por cada letra, ademas de guardar algunas codigos especiales para uso interno (por ejemplo, el codigo de valor 00h es el codigo NULL, que indica comunmente los finales de las cadenas de caracteres). sin embargo ASCII solo puede representar hasta 255 caracteres distintos, en el alfabeto clasico no es problema (27 letras), pero en idiomas como el chino, donde puede haber miles de 'kanjis' (el equivalente chino a las letras) ASCII se queda corto, por eso se usa tambien UNICODE, que es mas moderno y puede representar hasta 65535 caracteres, eso si, da la casualidad que los 255 primeros se corresponden con los caracteres ASCII. cuando veais una frase que todas sus letras estan separadas con un punto, es alfabetizacion UNICODE, y podeis cambiar las letras, pero debeis respetar el espacio intermedio para traducir.
Vale pero entonces tb debemos cuadrar todos los nombres de los jugadores como ha dicho Zamorate?? Es que va a ser una putada cuando no quepa... ¬_¬
depende del nombre y la posicion, mustik, por ejemplo, hay algunos nombres de jugadores que tienen hasta tres (3) NULLs detras del nombre, cuando solo deberia haber un solo NULL, es posible que en esas opciones podamos aprovechar 2 caracteres extras o asi...

pero vamos, todo es cuestion de probar...

lo que si esta claro es que detras de cada nombre de jugador debe haber como minimo UN (1) NULL (00h), sin embargo, si un jugador tiene 2 o 3 NULLs a lo mejor podemos apurar un poco mas...
Vamos que no hay problema si hay que recortar nombre se recorta. Se pone la mitad y un punto o algo asi y fuera. [oki]
ese es el espiritu mi joven padawan!!! [barret]

con buen rollo eh... [ginyo]

PD: joer, esto parece un chat mas que un foro!!!
Ya te digo menudo pique que llevamos encima con esto [buenazo]
nuevo hilo al canto: [MLSE2k2] repartiendo el trabajo...
Bueno... algo raro me pasa, cambio datos de los menus (pro probar) y cambian, pero estoy cambiando a Casero por casiYas y demas y no se cambia!!!
será por mis archivos de guardado ?
Me autorespondo, si, era la partida guardada...
A todo esto...¿hay algun software editor hexadecimal que me muestre el texto en japones?
Muy bien el tutorial f5inet, felicidades [oki]

Quizás sólo se le podría poner una pega, y es que el juego debe estar en ASCII ^^U.
Si a alguien le interesa podría hacer un tutorial con imagenes y tal sobre como traducir cualquier juego, ya sea de SNES, GBA, PSX, PS2, o cualquier otro sistema... (bueno, eso es MUY discutible [mad] ), por supuesto sin entrar en cosas complicadas, sólo traducción de texto de un juego inglés/japonés (sin compresiones) que funcione a 8/16 bits, aunque poniendo todo el texto que se quiera (también es MUY discutible ^^U), podría intentarlo [chiu] .

De momento pongo este (malísimo) tutorial que hice muy rápidamente y sin imágenes hace tiempo, pero que quizás despierte el interés de la gente (sería genial [toctoc] ) Nada más, aquí lo dejo:

TUTORIAL BÁSICO PARA APRENDER A TRADUCIR JUEGOS POR TORUZZ v 0.2

Bien, antes de comenzar con el tutorial hay que tener en cuenta algunas cosillas:

- Este tutorial es MUY básico, y habrán juegos que aún después de aprenderte el tutorial, no podréis traducir.
- Recomiendo leerlo entero antes de comenzar a probar nada.
- El romhacking principalmente consiste en modificar la rom para que aparezca en la pantalla lo que se nos antoje, y es posible que hacerlo resulte un camino de rosas o un infierno, dependiendo del juego y la consola en la que se traduce.
- "Todo es traducible" xD
- No es necesario saber programar para traducir, pero si quisieras cambiar el código del juego (romhacking avanzado) necesitarías saber ensamblador para la consola correspondiente. Pero vamos, para casi todas las traducciones de un juego en inglés, no lo necesitarás.

- Con este tutorial aprenderéis a traducir con ThingyV (el cual recomiendo), aunque quizás te sirva para otros editores hexadecimales.


Teniendo esto claro, ¡vamos a traducir!

HEXADECIMALES

Los hexadecimales no son más que números normales, con la diferencia de que al contar números en un sólo dígito no lo haremos del 0 al 9, sino del 1 al F (o sea, del 0 al 16). Lía un poco al principio pero la cosa sería así:

00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 ... <= Decimal

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 ... <= Hexadecimal

Si juegas a un juego y ves aparecer el texto en la pantalla, es debido a que cada letra, cada símbolo, o cada código de control (por ejemplo un cambio de color en la letra), está almacenado de forma hexadecimal dentro de la ROM. Así mismo, cada juego tiene una forma distinta de almacenar el texto.
Normalmente, un hexadecimal equivale a una letra, aunque puedes encontrar casos en los que un sólo hexadecimal equivalga a varias letras (DTE), y casos en los que dos hexadecimales equivalen a una letra (16 bits).

Como a nosotros lo que nos interesa es que aparezca el texto en español, lo que deberemos hacer es cambiar los hexadecimales originales por los que a nosotros nos interese (en eso consiste básicamente la traducción).

Un hexadecimal siempre lleva dos dígitos, por lo que el mayor número posible es FF (255). Si a un programador no le basta con 255 caracteres/códigos es cuando recurre a los 16 bits.

NOTA: Para pasar de decimal a hexadecimal o viceversa, se puede utilizar la calculadora de windows (bueno, si utilizas thingyv entiendo que estás en windows ><) en modo científica (estando en modo "Dec" pones el número y pasas al modo "Hex", o viceversa).


BÚSQUEDAS RELATIVAS

Las búsquedas relativas efectúan una búsqueda de texto en relación al orden de los caracteres (A-Z, a-z, 0-9...), pero desconociendo su valor hexadecimal. Esto quiere decir que, si es un juego normal, se podrán encontrar los valores hexadecimales de A y a, los únicos que nos son necesarios por ahora.

Para hacer una búsqueda relativa podemos utilizar SearchRX (recomendado) o el propio ThingyV.

Para comenzar abriremos el ROM en un emulador o el juego en la consola, y apuntamos algo de texto (a ser posible texto poco repetido, que sea inusual), y cuidando de no coger cosas extrañas como pueden ser cambios de color, saltos de línea, etc. Además es mejor si cogemos una palabra con mayúsculas y minúsculas.

Abrimos la ROM con SearchRX y ponemos la palabra a buscar en la caja de "Busca:", y pulsamos en buscar. Seguramente aparecerán resultados en el programa, si no es así prueba a buscar a 16 bits o buscar una palabra más inusual (si la rom es de megadrive es necesario que sea en formato .bin), y si aún así no aparece puede tratarse de texto comprimido o de una rom que necesita conocimientos más avanzados.

En el caso muy probable de que hayan aparecido resultados, debes comprobar el contexto para verificar si se trata del texto que buscabas (si necesitas más contexto haz doble click en el resultado y cambia al modo "Vista Previa").
Una vez encuentres el texto que buscabas apunta los valores de A y a que están junto al texto.


TABLAS (FORMATO THINGY)

Una tabla es un archivo de texto con la información de los hexadecimales y de sus equivalentes caracteres/códigos. Ésta es cargada por el editor hexadecimal y nos permite editar algo legible ^^. El formato es muy sencillo, sólo se trata de poner el hexadecimal, el simbolo igual ( = ) y el carácter equivalente (sin poner espacios, salvo para el carácter de la barra espaciadora).

La tabla básica (básica que no la completa), podemos hacerla desde un programa llamado Tabular (o desde el propio ThingyV). Este programa nos facilita mucho la labor de crear la tabla insertando automáticamente el alfabeto.

Bien, para crear la tabla, en el programa Tabular, debemos poner 'A' y 'a' en el lugar de su valor hexadecimal, y en el menú "Insert" ponemos "Capital English Alphabet" para las mayúsculas y "Lowercase English Alphabet" para completar el alfabeto de las minúsculas.
Ésta tabla la guardamos en formato Thingy en la misma carpeta que ThingyV.

Ahora hay que completar la tabla.

Ahora que ya tenemos una tabla básica, buscaremos utilizando la tabla la palabra que antes buscamos relativamente (sólo que ésta vez buscaremos directamente). Una vez tengamos localizado el texto, vamos al primer párrafo y comenzamos a sustituir las primeras letras por hexadecimales. Luego arrancamos el emulador y apuntamos los resultados, y así poco a poco hasta llegar al FF y tener todos los valores de la tabla. Para introducir los valores de los hexadecimales en la tabla utilizaremos el edit de MS-DOS (se ejecuta ms-dos o símbolo del sistema y se escribe "EDIT" sin comillas), y nunca el bloc de notas, ya que la tabla debe estar en formato ASCII (edit de ms-dos) y nunca en ANSI (bloc de notas).

Para añadir los saltos de línea (el enter, vamos), se pone * y a continuación el hex que tenga el valor de salto de línea. (Ej.- Si el salto de línea vale 01, sería: *01).

Para añadir la continuación de párrafo (que el párrafo sigue, normalmente pulsando un botón), se pone / y a continuación su valor (Ej.- Si vale 04, sería /04)

Para añadir el fin de párrafo, se pone \ y a continuación su valor (Ej.- Si vale FF, sería \FF)

Un ejemplo de tabla sería esto:

*01
/04
\FF
44=A
45=B
46=C
47=D
...
64=a
65=b
66=c
67=d
...

(Pero por supuesto en el EDIT de ms-dos, ya que si no está en ASCII no podrás poner los caracteres castellanos como la ñ y las tildes)



GRÁFICOS

Al menos para mí, el mejor editor de tiles (forma de almacenar gráficos en juegos), es Tile Molester, ya que, aunque funciona en java (necesitas instalar una consola java para hacerlo funcionar), tiene una gran cantidad de códecs y es de muy fácil manejo.
Los gráficos en las consolas no tienen mucho misterio, sólo tienes que utilizar el códec adecuado y buscar gráficos con cuidado. Una vez localizado el gráfico a modificar, por ejemplo la fuente de caracteres, se coge lo que se quiera y se utiliza el "Copiar a..." (o "Copy to...") para extraerlo y modificarlo con un editor gráfico (por ejemplo paint o photoshop), y luego volverlo a insertar con "Pegar desde..." (o "Paste from...").

Tile Molester, por defecto, te asocia la extensión de la ROM con el códec más utilizado, pero es posible que utilice alguno más. Por ejemplo, SNES utiliza varios (Bpp1, Bpp3, Bpp4, Bpp8 creo recordar), y GBA aparte de 4bpp composite utiliza el 8bpp. Puedes mirar en otros tutoriales más avanzados sobre gráficos, si lo deseas.

Recuerda, una vez modificada la fuente para que tenga los caracteres castellanos, debes cambiarlo también en la tabla con el EDIT de MS-DOS.

EDITAR TEXTO

Ha llegado la hora de modificar texto :D. Un pequeño truquillo para comenzar a traducir rápidamente, sería poner la rom, la tabla y thingyv en la misma carpeta y crear un archivo bat, para eso, es necesario que la rom y la tabla tengan un nombre corto (8 caracteres) y sin espacios. Luego creamos un archivo de texto y escribiremos lo siguiente: thingyv (nombre de la rom.extension) (nombre de la tabla.tbl) (si se quiere se pone una segunda tabla)

Ej.- thingyv zeldaesp.v64 esp.tbl

Luego lo guardamos como texto renombramos el archivo cambiando el .txt por .bat (cuidado de no poner .bat.txt). Ahora cada vez que abramos ese bat accederemos rápidamente a la pantalla de traducir.

Thingyv tiene muy fácil manejo, y es muy intuitivo. Aún así explicaré un poco como funciona...


Para editar texto has de colocarte en el primer caracter a traducir y pulsar ESPACIO. Luego te sitúas en el último caracter de la parte que desees cambiar y vuelves a pulsar ESPACIO. De esta forma pasarás a un modo de edición en el que podrás escribir sólo los carácteres apuntados en la tabla. Si lo que deseas es escribir hexadecimales (muy útiles para cuando vayas conociendo los códigos de control, como el color de las letras o las pausas en el texto, etc.) has de pulsar Alt + H e introducirlo). Si tu tabla tiene MTE (Multiple Tile Encoding, vamos que tiene más de una letra por hexadecimal), puedes activarlo o desactivarlo con Alt + M. Para guardar el texto pulsa Esc.

Para buscar texto pulsa S. Te aparecerá el menú de búsqueda. En el puedes introducir el texto directamente (coge los valores hex de la tabla) para una búsqueda normal. Para una búsqueda a 16 bits (sobretodo se usa en juegos japoneses, es un hex entre cada letra) debes pulsar Alt + D. Si lo que quieres es hacer una búsqueda relativa, pulsa Alt + R (yo recomiendo SearchRX). Para introducir hexadecimales a la hora de buscar (por ejemplo para indicar un color de texto), has de pulsar Alt + H. Y finalemente puedes activar o desactivar el MTE con Alt + M.

Para repetir la misma búsqueda, una vez hayas buscado en la pantalla principal pulsa R.

Si has cometido un gran fallo y quieres que no se guarde en la rom antes de salir pulsa U. Esto devuelve la rom ha su estado original.

Para extraer e insertar scripts (esto no se trata en este tutorial), se utilizan las teclas D e I respectivamente.

Para ir a una posición determinada de la rom en un instante pulsa J. En la J puedes incluir la dirección o añadir unos "marcadores" para que no tengas que buscar cada vez una determinada zona. Es muy recomendable al menos añadir la dirección donde comienza el texto. Para llegar a una dirección ya añadida pulsa J y selecciona el nombre que le pusiste al marcador. Llegarás de inmediato.

Para otras opciones pulsa F10. De éstas la que veo más util es la de "editar la tabla actual", ya que lanza la tabla con el EDIT de MS-DOS.

Finalmente, para salir de thingyv, has de pulsar Q y a continuación S.




Pues eso es todo por ahora, en el futuro añadiré el tema de los punteros y de los scripts, de cómo traducir juegos japoneses, y si es posible, algo más avanzado...


PD.- La traducción de ROMs se basa en comparaciones de archivos (parches IPS), por lo que son absolutamente legales.
10 respuestas