Herramienta de extracción / inserción de texto de roms de NES

 Voy a liberar una herramienta que ha diseñado para mí la I.A. Grok, este programa puede extraer e insertar texto en roms de NES así como modificar los punteros(en caso de haberlos) automáticamente, el programa lleva un archivo Léeme.txt, es necesario leerlo y entenderlo para poder usarlo apropiadamente y asume que el usuario tiene un mínimo de conocimientos sobre roms de NES.

 De todos modos, voy a explicar dos ejemplos muy claros de cómo se puede usar esta herramienta para modificar juegos de NES.

 Modificación de juegos con tabla de punteros para el texto:

 Rom de ejemplo: Argos no Senshi - Hachamecha Daishingeki (English v1.0 by BlackPaladin)

Este juego es una fan traducción de la versión japonesa del Rygar.

La primera consideración es que este programa solo hace cambios a nivel de texto, cualquier edición gráfica o hackeo se ha de hacer previamente, en este caso, solo será necesario modificar la fuente:

  

Como vemos, he añadido acentos, ñ, ? y ! a la fuente, estos cambios se han de reflejar en el archivo TBL para que se inserten en la rom al traducir.

Una vez tengas los cambios hechos en la rom ORIGINAL o FUENTE, lo primero sería localizar un bloque de texto, si avanzas un poco en el juego, el primer diálogo habla de un lugar llamado "Gerozeo", buscamos el texto y creamos la tabla de equivalencias (TBL), si buscamos en la rom este diálogo específico, encontramos que el offset de este bloque de texto es Db67, es un bloque con varios diálogos, lo siguiente sería encontrar la tabla de punteros, hay información a tutiplén en internet de cómo hacer esto, pero, por simplificar en este ejemplo asumiremos que puedes usar windhex: buscaremos el primer diálogo del bloque que contiene , "Thank..." que se ubica en DB67 y el segundo diálogo "You lack...", que se ubica en DB94, cogemos el segundo byte de cada offset, 67 y 94, les restamos 10 (es lo normal en roms de NES por la cabecera, busca y lee), quedando 57 y 84, ahora buscamos esto en windhex, nos vamos al offset 0 (el principio de la rom), pulsamos CTRL+H y en este diálogo escribimos 57**84 (hay que marcar, 'Use "*" as wildcard' que es Usar "*" de comodín), en principio, no conocemos cuál es el otro byte del puntero, por eso buscamos la estructura 57XX84XX(aunque basta encontrar 57XX84)


 Encontraremos este resultado en DB29, esto será el principio de la tabla de punteros, si miramos el último diálogo del bloque, veremos que se ubica en dfb9, el segundo byte menos 10 es a9, existe el puntero A99F en DB56, así que este será el fin de la tabla de punteros.

Con estos 3 datos, inicio de texto, inicio de punteros y fin de punteros, abrimos la aplicación, cargamos la rom, la tabla y rellenamos los datos correspondientes, los punteros son de 2 bytes, así que se queda la opción por defecto, debemos averiguar cual es el byte de fin de texto, por ejemplo, viendo un diálogo del juego y comparándolo con cómo está escrito en la rom. Veremos que cada diálogo acaba en FF, este será el byte de fin de texto, nos falta solo el byte de espacio, miramos qué byte separa las palabras y vemos que es 00, lo ponemos todo en el programa y pulsamos "Extract text", quedando tal que así:

  

A partir de aquí, podemos empezar a traducir en la ventana derecha, cada vez que cambiemos de diálogo, se grabará el guión traducido en archivos temporales y esto se guarda entre sesiones, podemos usar "Check line lenghts" con una longitud de 12, pues 12 carácteres es lo máximo que cabe de ancho en la caja., al finalizar, pulsamos "Save & Reinsert" y guardaremos una nueva rom con el nombre que elijamos, esta rom a tendrá todo el guión que hayas traducido insertado. 

Como consideración, este juego en particular, tiene algo de espacio libre tras el texto, con lo que podremos alargar algo el guión, en Total Size puedes ver el tamaño original del guión, comparado con el Traducido.

 Modificación de juegos SIN tabla de punteros para el texto:

Rom de ejemplo: Dragon Warrior U (v1.1)

Muy parecido al ejemplo anterior, en el caso de Dragon Warrior, para el texto principal no se usan punteros, empezando el siguiente diálogo donde ha terminado el primero.

 Efectuamos la misma operación de antes, modificamos gráficos en rom original para poner los carácteres que queremos en la fuente, hackeamos lo que haga falta de necesitarse y ya podemos empezar. Buscamos el texto, creamos una tabla y establecemos el rango que forma el guión; en este caso, empieza en 8038 y termina en bcbf, no hay espacio tras el texto así que nos hemos de ceñir a ese espacio para trabajar. Buscamos el byte de fin de texto (fc) y el de espacio (5f), introducimos los datos y pulsamos "Extract text", a partir de ahí solo es traducir texto, todas las consideraciones de "con punteros" se aplican aquí.

Y eso es básicamente todo, espero que esto le pueda servir a alguien para atreverse con algún proyecto de nes, corto o largo.

 

En este caso no es necesario chequear  "Check line lenghts" porque el salto de línea es automático en este juego.

Aquí la herramienta: 

Nes Rom Translation Tool 

 

Comentarios

  1. Recién salido del horno!
    Se ve muy interesante: traducir más fácil, con manejo de punteros automático para aprovechar mejor el espacio disponible.

    ResponderEliminar

Publicar un comentario