• Publicado el 26/12/2016 Esto es un post en el blog de: Jesús Alonso Abad @kencho Offline Bio: Apasionado de los videojuegos (desarrollarlos), intentando abrirme paso en la industria poco a poco. Ir a su perfil completo

    Hacking the Dragons (1)

    ¡Muy buenas! ¡Cuánto tiempo!

    En esta miniserie os voy a contar un poco sobre mis peripecias parcheando/hackeando el Return of Double Dragon, de Super Famicom.

    El juego y el por qué
    El Return of Double Dragon (el japonés, más completo que Super Double Dragon) es para mí uno de los mejores beat ‘em ups que he jugado en SNES. Sin embargo, seguro que al poco rato de jugar ya descubriréis que tiene algunas carencias muy graves, sobre todo en la respuesta de los controles, a menudo frustrantes.

    Así que como ni la difunta Technos, ni la actual propietaria Arc System Works, van a parchearlo, pues no queda otra que hacerlo uno mismo.

    Las herramientas
    bsnes-plus v073+3a
    Tiene un excelente gestor de breakpoints que nos permitirá pausar la emulación cuando una cierta línea de código o, especialmente, una zona de memoria se lea o escriba. Por desgracia no se puede modificar el código al vuelo (al menos, no cómodamente), así que toca usar también otro emulador, el…
    no$sns v1.6
    Es más tosco que bsnes, pero permite cambiar el código desensamblado del juego al vuelo y trae una excelente documentación técnica.
    HxD
    Ninguno de los dos emuladores aplica los cambios sobre la rom real, así que habrá que hacer los cambios parcheándola con un editor hexadecimal.
    Lunar Address
    Las direcciones del código en la memoria de la consola/emulador no son las mismas que en la rom. Con esta herramienta se pueden convertir fácilmente para saber qué hay que parchear para aplicar los cambios.
    LibreOffice, Excel y/o boli+papel
    Va a tocar tomar bastantes notas, así que mejor tenerlo un poco organizado todo (recomiendo las hojas de cálculo, por eso de poder mover las cosas de sitio o cambiarlas si no son lo que en un principio habíais pensado)

    no$sns
    Al cargar aquí la rom, se pueden ver cuatro paneles en la ventana (de arriba a abajo y de izquierda a derecha): código desensamblado, mapa de memoria, registros y pila (stack). Se abrirá también una ventana con la vista del juego (el juego sólo avanza si esta ventana tiene el foco).

    En el panel del código desensamblado podremos hacer algunas modificaciones en el código de una forma más cómoda (dentro de lo que cabe, teniendo en cuenta que es ensamblador de un procesador 65816). En las opciones de depuración (Options > Debugger setup), os recomiendo cambiar el primer valor, Disassembler Syntax, a Native 65XX Style, por coherencia con bsnes y la documentación que hay online. Esta es la notación que usaré yo también.

    Cuando los cambios tengan que ser de otro tipo, como alterar algún valor de la RAM a pelo, lo haremos desde el panel del mapa de memoria.

    bsnes
    Lo primero que habrá que hacer para trabajar una vez cargada la rom es abrir el depurador: Tools > Debugger… Se abrirá una ventana con el depurador, desde la que podremos abrir otras herramientas. Yo uso el mapa de memoria (Tools > Memory editor...) y el editor de breakpoints (Tools > Breakpoint editor).

    El mapa de memoria es similar al de no$sns y otros cientos de herramientas para infinidad de sistemas. No tiene mayor pérdida.

    El editor de breakpoints es lo que realmente me enamoró de esta herramienta. Nos dá la opción de definir posiciones individuales o intervalos de memoria y establecer condiciones para interrumpir la emulación. por cada bloque de memoria podemos indicar si queremos que pare al hacer una lectura (R), una escritura (W), o cuando ese punto se ejecute (X). Además podemos filtrar las lecturas y escrituras indicando un valor específico (por ejemplo, si sólo queremos que pare en el frame 2 de una animación, y no en todos).

    Otros enlaces de interés
    Personalmente me ha resultado bastante útil esta referencia de instrucciones del procesador 65816, en combinación con la que trae la ayuda de no$sns.

    También podremos usar Lunar IPS para crear y aplicar parches a las roms.



    Creo que con esto es suficiente por hoy. Más en el siguiente capítulo, ya con algo de mandanga ;)
    4
    • plissken, 27/12/2016
      Lógicamente no me he enterado de nada... pero me alegra verte por aqui de nuevo! Te he republicado para que más gente pueda disfrutar de tu Vodoo digital. Un saludo :)
    • kencho, 27/12/2016
      ¡Gracias @plissken! Es complicadete, pero la verdad es que se aprende bastante sobre cómo se hacen/hacían los juegos por dentro. Y sobre todo, aprendes a admirar lo costoso que era. Es fascinante... a su manera XD
Loader
Arriba