Saludos, amantes del cacharreo, retroadictos y curiosos lectores aleatorios. :)
Hoy continuaremos con la cuarta parte de la guía de Hackeo de ROMs de NES. En entregas anteriores, explicamos como modificar los datos de la memoria de vídeo sin modificar la paleta original. En esta ocasión, cubriremos lo básico respecto a la edición de texto. De nuevo, nos desviaremos de la fuente original, dado que las herramientas mencionadas eran demasiado antiguas. Como también hicimos en anteriores ocasiones, adjuntare un paquete con las nuevas herramientas. En esta ocasión Thingy32.
Sin más dilación, entremos en materia.
Guía esencial de Hackeo de ROMS de NES: Parte IV [ Parte I - Parte II - Parte I I ]
Fuente original: A Beginner's Guide to NES ROM Hacking
Modificando Texto.
Modificar el texto de un juego es un poco mas complicado de lo que podria parecer en un principio. Cambiar las imágenes de las fuentes en la tabla de patrones, no es una buena idea, ya que no modifica el orden de las letras y convertiríamos las palabras en un auténtico galimatías. Pueden encontrarse algunos casos asi en los primeros Hacks de NES. Si abrimos la ROM con un editor de texto, tampoco conseguiremos nada, ya que las ROMs no hacen uso del estándar ASCII para codificar el texto.
¿Como hacerlo entonces? nosotros utilizaremos un programa llamado
Thingy32, que podréis encontrar al final del articulo.
En primer lugar arrancaremos
NESticle. Para la edición de hoy, usaremos la ROM de Dragon Warrior
Hoy necesitaremos:
NESticleThingy32
una ROM de Dragon Warrior
Un editor de texto plano (Bloc de notas)
Cargamos Dragon Warrior en NESticle, y pulsamos F2 para abrir las tablas de patrones. En la ventana de patrones situada a la izquierda, encontraras los sprites de los números del 0 al 9 y las letras del alfabeto. Haz click en el número 0. En la cuadricula de edición del Tile que contiene el número "0", veras que aparece el código Hexadecimal "# 00" en la parte superior.
La última vez, también vimos un código parecido en la ROM de Super Mario al seleccionar el Tile que contenía parte de la cabeza del protagonista. En aquella ocasión ignoramos el código, pero en esta ocasión lo vamos a necesitar.
Abrimos el Bloc de notas o un editor de texto plano y escribimos lo siguiente:
0 = 00
Ojo, hemos dicho un editor de texto
plano. Programas como WordPad o WordPerfect no son adecuados porque añaden información ASCII adicional.
Lo que vamos a hacer ahora es confeccionar una tabla para con los códigos Hexadecimales de cada uno de los caracteres utilizados en el texto.
Seguimos seleccionando los demás caracteres y apuntando los números Hexadecimales que nos aparecen en la parte superior del editor. Una vez apuntados todos (incluidos los saltos de linea y signos de puntuación) tendremos que tener una tabla mas o menos como esta:
00 = 00
1 = 10
2 = 20
3 = 30
4 = 40
5 = 50
6 = 60
7 = 70
8 = 80
9 = 90
A = a0
B = b
Y así sucesivamente ... guarda ahora la tabla como
dw1.tbl
Esta tabla que acabamos de confeccionar, será utilizada por
Thingy32, un programa que nos ahorrará horas de búsqueda.
Como mencionamos antes, los juegos de NES casi nunca utilizan el sistema ASCII para almacenar los textos, por lo que no nos servirá de nada un editor de texto tradicional. El archivo que acabamos de crear sirve como referencia a Thingy32 para poder localizar y editar los textos tal y como se verían en el juego en lugar de con su codificación Hexadecimal. Resulta mucho mas cómodo buscar "
YOUR" con Thingy32, que tener que buscar "
37 11 18 1D" con un editor Hexadecimal e irlos sustituyendo byte a byte, que es como se hacia con los primeros hacks.
Sigamos con el procedimiento. Ahora ejecutamos Thingy, y veremos que nos pide una ROM. Como podras comprobar, no solo abre ROMs de NES, sino que también abre ROMs de Super Nintendo o GBA, asi que recuerda seleccionar el tipo de ROM en el filtro de extensiones de archivo para poder seleccionar tu ROM
.nes.
Ahora el programa nos preguntará en dos ocasiones por un archivo
.tbl. Nos pide dos tablas por si queremos cotejar entre ambas, pero no nos hará falta en esta ocasión. Seleccionamos el archivo
dw1.tbl que habiamos creado en ambas ocasiones.
Ahora veremos algo como esto:
Interfaz de Thingy32 [Castellano] ROM de Mario Bros
La ventana de la izquierda muestra la información de la ROM en formato Hexadecimal y la parte de la derecha, la transcripción que extrae Thyngy32 de esos valores gracias a los datos que le facilitamos en la tabla.
Antes de empezar a cambiar nada hay algunas cosas que debemos dejar claras para no corromper la ROM. Por una parte, la mayoría de los juegos utilizan punteros hacia las direcciones de memoria, lo que significa que no podemos utilizar textos con mas caracteres de los reservados para cada frase sin modificar sus definiciones, algo que queda fuera del alcance de esta guía. Por ahora, cuando modifiquemos una ROM, lo haremos de forma que nuestros textos nunca sean mas largos que los originales.
Pongamos que tenemos una línea de texto que dice: "¡yo soy el rey de tierra Dank!"
Contando los espacios, tenemos 30 Bytes para trabajar.
No podemos introducir mas de 30 caracteres sin corromper la ROM, ya que todo el espacio de mas que utilicemos lo haremos a costa de sobreescribir el byte de fin de línea y otros datos del juego.
Cosas que podemos hacer:
Hola, soy un rey molón. 23 Bytes
¡Me debes dinero malandrín! 27 Bytes
Cosas que NO podemos hacer:
Saludos Plebeyo, ¿Que te trae por aquí? 39 Bytes
En un lugar de la mancha de cuyo nombre no puedo acordarme... 61 Bytes
Tomando en cuenta estas consideraciones, pasemos a editar los textos de la ROM.
Pulsa "
S" para saltar de posición en la ROM. Escribe "
0" para desplazarnos al principio del archivo y pulsa "
B" para buscar un texto. Escribe "
Listen"
El programa te desplazará a la posición de memoria que corresponde al texto del principio del juego, donde hablas por primera vez con el rey Lorik:
Dragon Warrior, texto original
Modifiquemos ahora lo que dice el rey. Desplázate con los cursores hasta la primera letra del texto que quieres modificar y pulsa espacio. Desplázate ahora hacia la ultimo carácter y vuelve a pulsa espacio. Te aparecerá un pequeño formulario de edición donde podrás modificar todo el texto contenido entre ambos caracteres. Escribamos por ejemplo: "
I Want my Rage CD Back"
Como verás, los datos se guardan automáticamente. Vamos a ver los cambios.
Arrancamos Nesticle, cargamos la ROM de Dragon Warrior y comenzamos una nueva partida.
Cuando Lorik nos hable, deberíamos de ver nuestro texto:.
Dragon Warrior, texto modificado
Hecho. Hemos realizado nuestro primer cambio de texto en una ROM. En breve continuaremos con algo mas de contenido.
Para terminar, os dejo con una captura del Hack que estoy haciendo conforme avanzamos con el tutorial y el enlace de descarga a la aplicación que vais a necesitar para hacer estas ediciones de texto.
Hack de texto en ROM de Mario Bros
Recordad que el resto de los enlaces los tenéis en las anteriores entradas. Os deseo un fructífero cacharreo. Si hacéis algo, por favor, no dudéis en mandármelo. :D
Enlace de descarga de software:
Thingy32