Hextractor, mi herramienta de traducción

Buenas a todos, como muchos ya sabeis he sacado muchas traducciones de juegos retro ultimamente, si no estais al tanto podeis verlo aqui:
hilo_la-traduccion-retro-de-la-semana_2183086
A lo largo de mis traducciones he ido mejorando la herramienta con la que las hago, para ser mas eficiente.
He decidido liberar la herramienta y voy a usar este hilo para poner un tutorial y responder a las dudas que surjan si alguien quiere traducir.
Esta herramienta es para traducir RESPETANDO EL TAMAÑO ORIGINAL, a veces falta espacio, pero es la manera de ir soltando traducciones facilmente.

GUIA BÁSICA DE HEXTRACTOR/HEXVIEWER V0.95

Este tutorial y esta herramienta no son una guia de principiante, deben conocerse lo que son las tablas .tbl y la edición hexadecimal como mínimo antes de usar la herramienta.

Requisitos:
1- Windows (XP o superior)
2- Java 6 o superior (Hay que descargar el JRE)
3- Notepad++ (Opcional pero recomendado)

Descarga:
Hextractor (Últimas releases)

NOTA: proyecto es el nombre de la carpeta. y NOMBREROM el nombre original de la rom.


IMPORTANTE: Hextractor trabaja con ficheros UTF8 sin BOM, si quereis modificarlos con un programa que no sea el notepad++ (que lo gestiona automaticamente) tenerlo en cuenta.


Guía en youtube de este tutorial:
https://www.youtube.com/watch?v=pPL_pq2c4WM

0.El entorno
Primero descargar e instalar Java, despues el editor de textos.
Mi recomendación como editor de textos es Notepad++, cargad para los ficheros ext la configuración del paquete del hextractor, se llama "nppextlang.xml".
Para ello debeis ir a "Lenguaje"->"Defina su lenguaje"->Importar, y elegir el archivo "nppextlang.xml".
Cuando querais abrir una rchivo .ext (lso de extraccion de scripts) le decis que lo abra siempre con el Notepad++ y os saldrá algo así:
Imagen

Las ventajas de esto son varias:
1-Los comentarios son verdes, después de un ";" todo lo que viene es un comentario.
2-Textos resaltados en azul, esto es lo que hay que traducir.
3-Bloques abribles y cerrables, los bloques empiezan por @ y terminan en un | (Caracteres reservados).

Recomiendo activar el "Ajuste de Línea", en el Menu "Vista".

1.Crear el proyecto de traduccion
Paso 1:
Descomprimimos el contenido del zip en una carpeta que será la base de las traducciones.

Paso 2:
Ejecutamos Hexviewer, ya sea mediante el bat (0.hexviewer.bat) si no tenemos el java instalado y configurado o con doble click si lo está.
Os recomiendo leeros "Ayuda"->"Ayuda", ya que explica todas las acciones posibles y teclas.
Paso 3:
Pulsamos CTRL+N o Archivo->Nuevo proyecto
Imagen

Paso 4:
Usamos el selector de archivos o arrastramos la rom a traducir, comprobamos el formulario y pulsamos "Crear..."
Aceptamos la confirmación.
Extra: este menú de creación admite el proceso en "batch" o lotes de roms, si le arrastramos varias roms a la vez, creará los proyectos para todas esas roms (con el nombre de proyecto por defecto).

Paso 5:
Cerramos hextractor y entramos a la carpeta del proyecto creado.
(El programa crea varios archivos bat que usaremos más tarde.)

2.Buscando las tablas del juego
Paso 1:
Lo primero sería cargar el juego en el emulador y detectar alguna palabra larga (por ejemplo ejecutandolo en el emulador y viendo la intro o similar).

Paso 2:
Abrimos el Hextractor y arrastramos la rom o la abrimos con "Archivo"->"Abrir Archivo..."
Para ello usaremos CTRL+R o "Herramientas"->"Búsqueda Relativa".
Imagen
En caso de que la palabra tenga mayúsculas y minusculas, mi recomendacion es buscar solo por las minúsculas, ya que si no coincide la alineacion de mayusculas-minusculas con la tabla ascii, no la encontrará.

Extra: el caracter * actúa de comodín, de modo que "C*SA", encontraría, "CASA", "COSA", etc..
Esto va muy bien para encontrar letras de 16 bits, ya que hextractor no da soporte para ello, pero sí podría encontrar una palabra del estilo "c*o*s*a", y si luego damos en la tabla caracteres a lo que hay en los *, podemos extraer de una forma legible caracteres de 16 bits (Aunque cuestan más de traducir).


Paso 3:
Una vez tenemos resultados, analizamos los mismos, si sale mas de una entrada y todas parecen usar la misma tabla, haremos clic derecho en una de ellas y elegimos que utilice la tabla.
Imagen
Si no hay mas de una tabla y tendremos que hacer este proceso varias veces (guardando diferentes tablas y editando los ficheros de extraer e insertar).

Paso 4:
En este momento deberiamos poder ver el texto (o casi todo), para la tabla encontrada.
Guardaremos la tabla con CTRL+S o "Tabla"->"Salvar Tabla..."
El nombre de la primera tabla ha de ser igual que el de la carpeta del proyecto (o editar los ficheros de extraer e insertar).

Paso 5:
Ahora habría que refinar esa tabla, eliminar caracteres no usados y añadir otros caracteres.
Para ello tendremos que comparar el texto que vemos en el emulador con los códigos que vemos en el hexviewer.
[[Foto comparar emulador con hextractor, Pendiente]]
Otra opcion es usar un emulador que nos deje ver los tiles y asi podemos refinar la tabla (si coinciden numero de tile con codigo del caracter).
Recomiendo utilizar el emulador BizHawk, ya que tiene soporte para ver tiles y más cosas de casi todas las plataformas.

Paso 6:
Una vez tenemos la tabla refinada, tocaría encontrar los textos.
Lo primero a hacer es desde una de las palabras antes encontradas, ver si las cadenas tienen un caracter de finalización, normalmente es 00 o FF.
Imagen

Paso 7:
Accedemos a la pantalla de búsqueda de cadenas con CTRL+A o Herramientas -> Buscar
Imagen
El número son los carácteres que va a ignorar seguidos, si vemos que los textos a parte del caracter de finalizar tienen alguno más, aumentamos este valor, normalmente con 4 sirve.
Los caracteres de abajo es el carácter/es de finalización, ponemos el que hemos visto según el juego.
Le damos a buscar y nos generará un fichero "NOMBREROM.ext" con los textos encontrados (una vez termine la barra de progreso).
Imagen
Como su nombre indica, busca TODAS las palabras que existan en el diccionario elegido en la ROM segun la tabla elegida.
Esto es muy útil para evitar tener que mirar toda la rom, utiliza el diccionario "EngDict.txt" de la raiz.
Paso 8:
Abrimos el fichero "NOMBREROM.ext".
Esto contiene la extracción de todos los textos del juego (y algo de basura), vamos a limpiarla.

Paso 9:
Imagen
Iremos eliminando todos los bloques que creamos que no son útiles.

NOTA: Cuidado al eliminar los bloques, han de eliminarse desde la @ hasta la linea del |, sino podemos dañar el archivo y no podrémos seguir después.

Paso 9:
Abrimos el Hextractor (si no está ya abierto) y cargamos el archivo NOMBREROM.ext, ya sea arrastrando el fichero al programa o a través de "Rangos"->"Cargar Rangos" o CTRL+SHIFT+O.
Tambien hay que abrir la rom y la tabla si no lo teniamos cargado.
NOTA: puedes arrastrar los 3 ficheros a la vez al programa abierto y los cargará.

Paso 10:
Con F5 ("Rangos"->"Rango Anterior") y F6("Rangos"->"Rango Siguiente"),
nos movemos por los rangos seleccionados, y los refinaremos de la siguiente forma:
Dentro de un rango podemos cortarlo con boton derecho y "Indica Inicio Offset" o "Indica Fin Offset", si queremos alargarlo, deberemos borrarlo y crear un rango nuevo (o elegir un inicio anterior y un final posterior, con lo cual "se come", a los otros rangos que haya dentro de él).
También se pueden hacer estas acciones con los botones "Inicio" y "Fin".
Al elegir "Indica Fin Offset", nos pedirá el (o los, pueden ser varios tal que 00-FF-01) caracteres de fin de cadena.
Imagen

Tambien podemos insertar nuevos rangos con "Indica Inicio Offset", y eliminarlos haciendo clic en ellos y pulsando suprimir o clic derecho en ellos y "Borrar rango".
Mi recomendacion es intentar hacer los rangos lo mas grandes posibles y despues utilizar boton derecho y "Partir rangos" con 1024 o el tamaño que deseeis.
El partido de rangos ayuda a ir avanzando los bloques traducidos y poder ir tirando "hacia abajo del archivo" los bloques traducidos.
Tambien ayuda a que si se comete algún error, es más fácil detectarlo.

Una vez hayamos terminado de refinar, guardamos los rangos con CTRl+SHIFT+S o con "Rangos"->"Guardar Rangos..." (con el nombre del proyecto, es decir, el de la carpeta, el mismo que la tabla, el fichero hex, etc).

Paso 11:
Extraemos los textos con "1.originalScript.bat" y revisamos el fichero proyecto.ext, verificando que los textos extraidos sean correctos. Sino volveríamos a refinar con el paso 10.

Paso 12:
Si no tenemos ya el fichero tr_proyecto.ext, copiamos proyecto.ext como tr_proyecto.ext, si ya lo teniamos con algo traducido y hemos cambiado algún rango, habrá que abrir los dos archivos y pasar a la traduccion las partes nuevas copiando los bloques correspondientes.

3.Traduciendo
Paso 1:
¡Traducir!
Ahora toca traducir el archivo tr_proyecto.ext, las tablas que genera por defecto el programa enmascaran las letras con acentos, ñ ¡ y ¿ como sus versiones normales, asi que no tengais miedo a usarlas aunque no tengais su gráfico, más adelante en caso de añadirlo, con un simple cambio de tabla y reinsertándola, se activarán.
NOTA: SIEMPRE hay que sustituir un caracter por otro (recomiendo tener el modo INSERT), no debería dar otros problemas. (Aunque hay de todo)
Tambien hay que tener cuidado al mover "caracteres de control" del juego (algunos no dejan), y con los caracteres "~00~" estos carácteres actuan como uno solo, no se pueden romper o no irá bien la cosa, de todos modos en estos casos el insert debería quejarse con que hay cosas raras.


Paso 2:
Ejecuta "3.insert.bat" para crear el archivo TR_NOMBREROM, ¡y prueba tu traducción!

Paso 3:
Cuando ya tengas tu versión final, ejecuta "5.createPatch.bat" y se creará un archivo de parche para transformar el original en el traducido con nombre "proyecto.ips".

JUEGOS MULTITABLA
En caso de que un juego tenga multiples tablas, deberemos repetir los pasos de la accion normal pero con alguna salvedad, estas son:
1-La tabla guardarla con otro nombre, (por ejemplo proyectoAlt.tbl, proyectoAlt2.tbl, etc).
2-Buscamos textos y generamos su archivo de rangos de la misma forma pero lo guardamos como proyectoAlt.off
3-Modificamos "1.originalScript.bat", copiamos la linea:
java -jar Hextractor.jar -a %SCRIPTNAME%.tbl %T_FILENAME% %SCRIPTNAME%.ext %SCRIPTNAME%.off
y la pegamos debajo como:
java -jar Hextractor.jar -a %SCRIPTNAME%Alt.tbl %T_FILENAME% %SCRIPTNAME%Alt.ext %SCRIPTNAME%Alt.off
Por tantas tablas como tengamos (con sus nombres de tabla)
4-Modificamos "3.insert.bat", copiamos la linea:
java -jar Hextractor.jar -h %SCRIPTNAME%.tbl tr_%SCRIPTNAME%.ext %T_FILENAME%
y la pegamos debajo como:
java -jar Hextractor.jar -h %SCRIPTNAME%Alt.tbl tr_%SCRIPTNAME%Alt.ext %T_FILENAME%
Por tantas tablas como tengamos (con sus nombres de tabla)
5-Cuando extraigais los textos con "4.originalScript.bat", ahora os generará tantos archivos como tablas, cada uno tendreis que copiarlo como tr_nombreoriginal.ext para que "3.insert.bat" pueda insertarlos en la rom.
6-Y ya podemos ir cambiando los rangos que necesitemos, siempre podemos arrastrar tabla y rangos al programa para que cambie ambos.
NOTA: si habeis buscado rangos con una tabla y vais a buscar con otra, de limpiar los rangos con: CTRL+L o "Rangos"->"Limpiar rangos".

PROXIMAMENTE:
JUEGOS CON TABLAS NO LINEALES
AÑADIENDO CARACTERES ESPECIALES
Gran trabajo!! mi enhorabuena! [tadoramo] [tadoramo]

Saludos
Vaya, muchas gracias por el trabajo.
Una pregunta, que no se si sería posible. ¿Habría la posibilidad de versión para Linux?.
Creo que estaría muy bien.

Saludos.
aranya escribió:Vaya, muchas gracias por el trabajo.
Una pregunta, que no se si sería posible. ¿Habría la posibilidad de versión para Linux?.
Creo que estaría muy bien.

Saludos.

"En teoria", deberia funcionar en linux (como es java core), solo tendrían que adaptarse los scripts que genera.
Si veo que hay interés, podría colaborar con alguien para que le funcionara.
DonVeneno está baneado por "Saltarse el ban con un clon"
excelente tutorial paso a paso, muchisimas gracias por el aporte [beer]
Wow muchas gracias por liberlala wave asi si que saldran mas traducciones
Gracias por la herramienta y por el tuto @wave [oki] [beer] ;)
Para busquedas relativas de la tabla yo usaba el searchrx si no es ASCII, aunque la tabla luego cargada en
windhex que es imposible pasarse de tamaño de fichero y editando las tablas con notepad para marcar valores que significan cosas en el juego tipo 01F0=(NombreHéroe) que sale en rojo al ser 2 bytes o para no mostrar del mismo color también, tipo *00=
al principio de la tabla, luego se ve 00 como * en amarillo.

Siempre que el juego no tenga el texto en algun archivo empaquetado/encriptado claro, que pasa mucho.
Genial; muchas gracias. [Ooooo]
Tengo desde hace años un juego a medio traducir, que estaba traduciendo a base hex. A ver si así es más rápido.
gadesx escribió:Para busquedas relativas de la tabla yo usaba el searchrx si no es ASCII, aunque la tabla luego cargada en
windhex que es imposible pasarse de tamaño de fichero y editando las tablas con notepad para marcar valores que significan cosas en el juego tipo 01F0=(NombreHéroe) que sale en rojo al ser 2 bytes o para no mostrar del mismo color también, tipo *00=
al principio de la tabla, luego se ve 00 como * en amarillo.

Siempre que el juego no tenga el texto en algun archivo empaquetado/encriptado claro, que pasa mucho.

El tema de lso 16bits me atrae pero tendría que modificar mucho.
La ventaja es que siempre parto de la rom limpia, con el editor hex a pelo (a parte que de windhex me molestaban algunas cosas), al final no sabes que has modificado y mover segun que cosas cuesta más, ahora puedo hacer copia y pega, o asignar la "á" a la letra "a" y si encuentro después como meterla no he de tocar el script, también puedo extraer el script limpio y pasarlo por un corrector... bueno son muchas cosas.
Pero el tema de las tablas multibyte son lo que me queda por tocar.
El windhex tiene una opcion de compare files y te dice los cambios entre archivos, aunque tampoco
te deja ver los dos en tiempo real, solo indica posicion y valores diferentes en el modificado.
Y lo de reemplazar, puff, yo lo hacia a mano usando lo de buscar, insertar valores dumpeados a un archivo y con F3 creo buscar siguiente y de nuevo.
Del corrector uso a lo bruto, archivos de 15MB con todo al Word e ir limpiando con paciencia [+risas]
He mirado el tutorial y no me he enterado de nada [sonrisa]

Pero si alguien me pasa textos en inglés, los puedo traducir al castellano.

Colaboré, entre otros, en traducir Fallout 2 en su momento.
Muy buen trabajo,gracias por compartirlo
Me suena algo y otras cosas, 0 patatero.
Con estas herramientas, se podrian tocar juegos de megacd como lunar?
Y de pc engine?
Tomax_Payne escribió:Me suena algo y otras cosas, 0 patatero.
Con estas herramientas, se podrian tocar juegos de megacd como lunar?
Y de pc engine?

No lo recomiendo para juegos en CD, aunque puede funcionar.
PC Engine CD? Si es la normal si, ya he sacado algunos :)
Os pongo una actualización de la herramienta, aunque está en pruebas por si saliera algún error:
Hextractor 0.91 (Experimental)
Los cambios son:
v0.91:
-Gran refactoring del código.
-Inicio y Fin de fichero con CTRL+INICIO/FIN.
-Modos de 16 filas/columnas.
-Mover cursor con flechas
-Soporte para compresion por palabras monobyte, al generar entradas en la tabla del estilo:
00=casa
(Siendo la asignacion de más de una letra)
Generará el texto:
Me fui a {casa}.
El texto entre {} indica que es un solo byte.
{ y } pasan a ser caracteres reservados.

Además, he empezado a subir el código a github, por si a alguien le interesa:
https://github.com/sewave/hextractor
una preguntilla, hay alguna limitacion en el tipo de roms a traducir? valdria para un samurai spirits rpg de neo geo cd?
gracias!
alex2005 escribió:una preguntilla, hay alguna limitacion en el tipo de roms a traducir? valdria para un samurai spirits rpg de neo geo cd?
gracias!

En teoria no pero para juegos de cd lo mejor es extraer los archivos, traducirlos y luego reinsertarlos.
Pero no es lo mejor.
Se podría emplear para traducir el Sensible Soccer de Mega Drive? Recuerdo que cambiar los nombres de equipos y jugadores era imposible...
Imsai8080 escribió:Se podría emplear para traducir el Sensible Soccer de Mega Drive? Recuerdo que cambiar los nombres de equipos y jugadores era imposible...

Pues si estan codificados no.
Pues me reservo tu hilo para este finde que me interesa, estuve toqueteando el otro día un juego de la Dreamcast y vi que lo podía traducir :D usé el UltraEdit, pero se me acaban los días de prueba [+risas]
Imsai8080 escribió:Se podría emplear para traducir el Sensible Soccer de Mega Drive? Recuerdo que cambiar los nombres de equipos y jugadores era imposible...

Los menús del juego son traducibles, los equipos y jugadores no los encuentro, aunque el propio juego tiene editor.
He actualizado la guía a la versión 0.95 y linkado un video de youtube donde se muestran estos pasos :)
23 respuestas