Introducción
Lo primero que debes saber es que no necesitas saber programar más allá de lo que sabías de ROM Hacking binario de toda la vida. Lo verás enseguida que leas esta guía.
Sólo necesitas cuatro cosas:
¿Dónde está todo?
Cuando hayáis instalado el repositorio seguramente estéis perdidos entre tanta carpeta y tanto archivo. No os preocupéis, no vais a usar la mayoría.
Estas son las rutas más importantes que deberéis conocer:
Vamos a mapear un poco
Porymap es el editor de mapas que se usa en decompilación. ¿Os suena, no?
Habréis podido observar que los permisos de movimiento aquí se llaman colisiones y difieren un poco de vuestro querido Advance Map. No os preocupéis, he aquí la equivalencia:
Cuando el símbolo está rojo, significa que no es pasable, lo que en Advance Map se traduciría a sumar uno al byte de permisos (por ejemplo, C sería D).
Scripts
En cuanto al scripting, es bastante sencillo localizar scripts, pues cada script tiene un nombre descriptivo (y si no te gusta, lo puedes cambiar). Olvídate de offsets, solo necesitas un nombre.
Por ejemplo, en la imagen anterior se mostraba el script llamado Route101_EventScript_RouteSign, el cual se encuentra en el archivo /data/maps/Route101/scripts.inc.
Encontraremos el script buscando con ctrl + F y escribiendo el nombre del Script.
Aquí prácticamente todos los comandos se llaman igual. Por si acaso, dejo una equivalencia entre los más habituales:
Pese a todo, no es mala práctica trabajar una temporada paralelamente con una ROM original y XSE para ver más diferencias. Como podéis observar, al lado del nombre de los scripts aparece el offset original de estos, por lo que si lo buscas en XSE encontrarás su equivalente.
Incluso viendo otros scripts podrás copiar y adaptarlos a los tuyos.
IMPORTANTE: Los comentarios se colocan con una @ delante del texto, los scripts se inician con el nombre del script y dos veces dos puntos ( :: ). Si el script es de texto o de movimiento, se usa únicamente una vez ( : ).
Insertar gráficos
Los gráficos pequeños (sprites, iconos, etc.) y tilesets se componen de una paleta (.pal) y un mapa de bits (.png). Los gráficos más grandes tendrán también un tilemap, que son los .RAW de toda la vida, solo que aquí están en formato .BIN.
Para modificar cualquier mapa de bits, usaremos GraphicsGale. Para ello abriremos el archivo original y el archivo modificado a la vez.
Manteniendo seleccionada la ventana del original (justo al revés que en la foto ) Seleccionaremos el botón de paleta y haremos clic en Load palette.
Se abrirá la ventana Load Palette, donde, desde el botón File▾, seleccionaremos Import from File. Aquí buscaremos el archivo nuevo (indexado a tantos colores como el archivo original tenga).
Una vez cargado, seleccionaremos todos los colores de izquierda a derecha (obviando los negros, que no los vamos a utilizar) bajo 'Drag to select' y los colocaremos debajo de 'Click to paste'. IMPORTANTE: la casilla Match Pixels with Colors debe estar desmarcada.
Haremos clic en OK y veremos que la imagen original tiene ahora la paleta de la imagen nueva. Ahora volvemos a la imagen nueva y haremos CTRL + A para seleccionarla entera. Entonces copiaremos con CTRL + C e iremos a la imagen original donde pegaremos con CTRL + V. Se deselecciona con el botón derecho del ratón.
Guardamos y ya tenemos el mapa de bits cambiado. Ahora toca modificar las paletas. Si tienes suerte y no hay un .pal con el mismo nombre que el mapa de bits, has terminado. De lo contrario, abre el archivo .pal con un editor de código (Visual Studio Code, por ejemplo) y edítalo con la paleta nueva, por ejemplo:
El primer color empieza en la línea 4 y las cifras son valores R G B. Ahora guarda la paleta y se acabó.
Los mapas de tiles (o tilemaps) son los RAW de toda la vida, pero cambiando la extensión por BIN. Un buen editor de tilemaps es el Tileset Studio.
Al final de la edición de un gráfico, no olvides borrar todos los archivos con el nombre del gráfico que no sean ni PNG, ni PAL, ni BIN. Esto hará que el compilador detecte los cambios.
Y hasta aquí un resúmen de lo que puedes hacer en decompilación sin saber programar en C. Lo demás es investigar un poco, ya que muchas de las funciones son análogas a binario (o ROM Hacking normal).
Por supuesto, si quieres meter más mecánicas o introducirte más en el código, sí necesitarás conocimientos de programación en lenguaje C.
Lo primero que debes saber es que no necesitas saber programar más allá de lo que sabías de ROM Hacking binario de toda la vida. Lo verás enseguida que leas esta guía.
Sólo necesitas cuatro cosas:
- Instalar el repositorio de la versión elegida:
- Visual Studio Code: El Editor de Código™.
- Porymap: El Advance Map de decomp.
- GraphicsGale: para modificar los gráficos.
¿Dónde está todo?
Cuando hayáis instalado el repositorio seguramente estéis perdidos entre tanta carpeta y tanto archivo. No os preocupéis, no vais a usar la mayoría.
Estas son las rutas más importantes que deberéis conocer:
- /data
- /layouts
- /maps
- /LittlerootTown
- /scripts.inc: Hay una carpeta por cada mapa, en la cual hay varios archivos. El que te interesa a ti, ROM Hacker, es este. Aquí encontrarás todos los scripts del mapa. Scripts de nivel, de gatillo, de NPCs, de postes...
- /...
- /LittlerootTown
- /scripts: En esta carpeta hay scripts importantes o comunes, como la guardería, o los Centros Pokémon.
- /text: En esta carpeta encontrarás textos para los scripts de la carpeta anterior.
- /tilesets: Aquí encontrarás perfectamente clasificados en carpetas todos los tilesets existentes en el juego.
- /graphics: Aquí están todos los gráficos (y fuentes) de la ROM.
- /include
- /constants:Aquí encontrarás información interesante como por ejemplo:
- /flags.h: Un listado de todas las flags existentes, usadas o no.
- /vars.h: Un listado de todas las variables existentes, usadas o no.
- /constants:Aquí encontrarás información interesante como por ejemplo:
- /src
- /data
- /pokemon: En esta carpeta encontrarás un montón de archivos relacionados con las stats, evoluciones, etc. de los Pokémon. En resumen, todo lo que hacías con YAPE, Gen III Suite o Gen 3 Tools.
- /text: Todos los archivos para traducir nombres de movimientos, habilidades, naturalezas...
- battle_moves.h: Los datos de los movimientos, véase potencia, precisión, objetivos...
- items.h: Aquí se encuentran todas las características de los objetos, como por ejemplo, el bolsillo en el que se guardan.
- script_menu.h: Los dichosos multichoices que tanta lata daban antaño, se encuentran aquí en un mismo archivo.
- /data
Vamos a mapear un poco
Porymap es el editor de mapas que se usa en decompilación. ¿Os suena, no?
Habréis podido observar que los permisos de movimiento aquí se llaman colisiones y difieren un poco de vuestro querido Advance Map. No os preocupéis, he aquí la equivalencia:
Símbolo | Altura |
---|---|
⇅ | Intercambio entre alturas. '0' en Advance Map. |
× | Obstáculo. '1' en Advance Map. |
≈ | Agua, surfeable. '4' en Advance Map. |
2 | Pasable, altura 1. '8' en Advance Map. |
3 | Pasable, altura 2 (por defecto). 'C' en Advance Map. |
4 | Pasable, altura 3. '10' en Advance Map. |
... | ... |
+ | Puente. '3C' en Advance Map. |
Scripts
En cuanto al scripting, es bastante sencillo localizar scripts, pues cada script tiene un nombre descriptivo (y si no te gusta, lo puedes cambiar). Olvídate de offsets, solo necesitas un nombre.
Por ejemplo, en la imagen anterior se mostraba el script llamado Route101_EventScript_RouteSign, el cual se encuentra en el archivo /data/maps/Route101/scripts.inc.
Encontraremos el script buscando con ctrl + F y escribiendo el nombre del Script.
Código:
Route101_EventScript_RouteSign:: @ 81EBE0D
msgbox Route101_Text_RouteSign, MSGBOX_SIGN
end
Route101_Text_RouteSign: @ 81EC0C8
.string "ROUTE 101\n"
.string "{UP_ARROW} OLDALE TOWN$"
Comando XSE | Comando decomp |
---|---|
givepokemon | givemon |
showsprite | addobject |
hidesprite | removeobject |
movesprite | setobjectxy |
if 0x0 call @xxx if 0x1 call @xxx if 0x2 call @xxx if 0x3 call @xxx if 0x4 call @xxx if 0x5 call @xxx | call_if_lt xxx (less than) call_if_eq xxx (equal) call_if_gt xxx (greater than) call_if_le xxx (less or equal) call_if_ge xxx (greater or equal) call_if_ne xxx (not equal) |
if 0x0 goto @xxx if 0x1 goto @xxx if 0x2 goto @xxx if 0x3 goto @xxx if 0x4 goto @xxx if 0x5 goto @xxx | goto_if_lt xxx goto_if_eq xxx goto_if_gt xxx goto_if_le xxx goto_if_ge xxx goto_if_ne xxx |
Pese a todo, no es mala práctica trabajar una temporada paralelamente con una ROM original y XSE para ver más diferencias. Como podéis observar, al lado del nombre de los scripts aparece el offset original de estos, por lo que si lo buscas en XSE encontrarás su equivalente.
Incluso viendo otros scripts podrás copiar y adaptarlos a los tuyos.
IMPORTANTE: Los comentarios se colocan con una @ delante del texto, los scripts se inician con el nombre del script y dos veces dos puntos ( :: ). Si el script es de texto o de movimiento, se usa únicamente una vez ( : ).
Insertar gráficos
Los gráficos pequeños (sprites, iconos, etc.) y tilesets se componen de una paleta (.pal) y un mapa de bits (.png). Los gráficos más grandes tendrán también un tilemap, que son los .RAW de toda la vida, solo que aquí están en formato .BIN.
Para modificar cualquier mapa de bits, usaremos GraphicsGale. Para ello abriremos el archivo original y el archivo modificado a la vez.
Se abrirá la ventana Load Palette, donde, desde el botón File▾, seleccionaremos Import from File. Aquí buscaremos el archivo nuevo (indexado a tantos colores como el archivo original tenga).
Haremos clic en OK y veremos que la imagen original tiene ahora la paleta de la imagen nueva. Ahora volvemos a la imagen nueva y haremos CTRL + A para seleccionarla entera. Entonces copiaremos con CTRL + C e iremos a la imagen original donde pegaremos con CTRL + V. Se deselecciona con el botón derecho del ratón.
Guardamos y ya tenemos el mapa de bits cambiado. Ahora toca modificar las paletas. Si tienes suerte y no hay un .pal con el mismo nombre que el mapa de bits, has terminado. De lo contrario, abre el archivo .pal con un editor de código (Visual Studio Code, por ejemplo) y edítalo con la paleta nueva, por ejemplo:
Código:
JASC-PAL
0100
16
65 65 90
222 230 238
213 213 222
205 205 213
197 197 205
164 180 255
115 139 255
74 98 255
32 65 255
74 180 189
255 230 49
90 90 123
123 123 172
65 65 90
255 255 255
0 0 0
Los mapas de tiles (o tilemaps) son los RAW de toda la vida, pero cambiando la extensión por BIN. Un buen editor de tilemaps es el Tileset Studio.
Al final de la edición de un gráfico, no olvides borrar todos los archivos con el nombre del gráfico que no sean ni PNG, ni PAL, ni BIN. Esto hará que el compilador detecte los cambios.
Y hasta aquí un resúmen de lo que puedes hacer en decompilación sin saber programar en C. Lo demás es investigar un poco, ya que muchas de las funciones son análogas a binario (o ROM Hacking normal).
Por supuesto, si quieres meter más mecánicas o introducirte más en el código, sí necesitarás conocimientos de programación en lenguaje C.
Última edición: