Tutorial: Buscar Textos en ROMs y Modificarlos

 


El motivo principal por el que nació el Romhacking fue para traducir videojuegos a otros idiomas en los que no fueron lanzados. En ocasiones había que ceñirse al espacio original del texto, lo que dificultaba la labor de traducción en algunos idiomas, como al español, pues nuestra sintaxis es más compleja y variada que por ejemplo la inglesa. Y ya no os cuento la odisea que sería traducir un texto japonés...

Buscando Textos

Texto simple

Hay varias formas de almacenar los textos en las ROMs, también explicadas en el artículo el cual hago referencia unas líneas más atrás.

Si tenemos suerte, el texto puede aparecer tal cual se escribe, aunque  a veces puede haber ciertas excepciones para caracteres especiales y vocales tildadas, las cuales pueden aparecer representadas con cualquier otro símbolo ASCII.

Un ejemplo de esta forma de almacenamiento la podemos encontrar en juegos como One Piece o DBZ El Legado de Goku.

Como veis, el texto es completamente visible. Hay caracteres que quizás no entendáis el por qué están ahí, y es justo lo que explicaré ahora antes de pasar a explicar cómo buscarlo.

Como premisa, debéis tener en cuenta que cada juego usa distintos códigos para determinar la maquetación de un texto. Es decir, indicar dónde hay saltos de línea, el final del texto, si debe aparecer centrado, cambios de ventana de diálogo, etc. Y no en todas las ROMs estas opciones están disponibles.

En la imagen podemos ver resaltado en rojo el código "0A", el cual indica un salto de línea, y en azul, "5C 00", que indica el final del texto. Algunos de estos códigos suelen ser estándar, como "0A", pero en otros juegos puede ser un código completamente distinto, incluso de varios bytes.

Un claro ejemplo de esto último lo podemos encontrar en Dragon Ball Advanced Adventure, donde el salto de línea se indica mediante "53 01", el final de texto con "55 01", e incluso para espaciar palabras, no debemos pulsar la barra espaciadora (20h), si no escribir "51 01 05 00".

Para aprender los distintos indicadores de un juego específico, no queda otra que experimentar con la ROM e ir aprendiendo con la práctica.

Para buscarlos, debemos abrir la ROM con nuestro editor Hexadecimal (yo uso HxD) y tan sencillo como ir a "Search > Find" (o Ctrl+F), cerciorarnos de que estemos en la pestaña "Text-string" y en "Search for" escribir parte del texto o palabra clave a buscar.

Es conveniente poner solo una palabra clave del diálogo o una pequeña parte del mismo para evitar que el programa no encuentre nada con motivo del posible uso de caracteres especiales que podamos desconocer (explicado al principio del apartado).


Una vez encontrado, tan solo debemos sobreescribir NO introducir nuestro texto en ese espacio, pues corromperíamos el archivo al expandir la ROM haciendo que todo quede desubicado y la consola no supiera leer las direcciones de los datos. No olvidad escribir siempre el código que indique el fin del texto, en este caso "00", para que la consola sepa dónde parar de leer.

IMPORTANTE: Si nos equivocamos escribiendo, tampoco debemos pulsar la tecla de retroceso, pues lo que haría sería eliminar el byte cambiando así la longitud del archivo. En ese caso debemos aplicar un "deshacer"(Ctrl+Z) o situarnos mediante las flechas o ratón en la posición a reescribir.


En la imagen se puede observar cómo la "ó" no aparece en el diálogo del juego. Esto es porque no está incluida en la fuente. Para modificar la fuente y sustituir caracteres que no se usan por otros, como las vocales tildadas, puedes seguir este tutorial siempre y cuando el gráfico no esté comprimido, pues aún debo escribir uno para cuando se de el caso contrario.

Repointeando el texto

En el caso de que nuestro texto no quepa en el espacio del texto original, debemos colocarlo en otro lugar del ROM que esté vacío, el cual reconoceremos porque de repente comenzaremos a visualizar bytes "FF" hasta el final del ROM.

Volviendo al ejemplo de One Piece, podemos ver que el puntero del primer texto se encuentra tras las líneas de diálogo de Alvida. Puede estar en otro lugar de la ROM, dependiendo del juego y de cómo esté organizada, así que de nuevo deberíamos hacer uso del buscador, pero esta vez seleccionando la pesataña "Hex-values". Como el texto comienza en "56 EF 68", su puntero es "68 EF 56 08". De nuevo, esto ya está explicado en otro artículo del cual ya dejé link directo.


Solo debemos modificar ese puntero por el nuevo tras haber elegido el Offset para nuestro texto
En este ejemplo, nuestro puntero sería "80 4C 64 08".