De Whack a Hack Wiki!
En desarrollo. Esta página todavía no está terminada y está en espera de ser editada en breve. Por favor, si quiere ayudar, contacta con sus creadores a través de la página de discusión antes de realizar ningún cambio.
No importa si eres un principiante en el mundo del ROM Hacking o ya tienes experiencia previa, este tutorial te guiará a través de los conceptos fundamentales y te proporcionará ejemplos prácticos para ayudarte a comprender y dominar la creación de scripts de eventos. A través de este tutorial, aprenderás cómo escribir scripts de eventos paso a paso.
Introducción
Los eventos se definen mediante scripts, que son secuencias de comandos que controlan la interacción del jugador con el entorno del juego. Puedes usarlos para crear diálogos, activar batallas, desencadenar eventos especiales y mucho más.
A lo largo de este tutorial verás tres modalidades para realizar los mismos scripts:
- poryasm: Es el formato por defecto de Decompilación. Tiene muchas similitudes con el lenguaje utilizado por XSE, el que se utiliza en ROM Hacking Binario.
- poryscript: Es un formato más similar a los lenguajes de programación modernos como JavaScript. Fue concebido para agilizar el proceso de desarrollo de los eventos.
- XSE: Es el formato utilizado por el ROM Hacking binario.
Diálogo básico
Este tipo de script permite crear una interacción del jugador con un NPC.
poryasm
El comando msgbox es el que muestra el mensaje. Este requiere dos elementos:
- La dirección del texto (
NombreDelScript_Texto
). - El tipo de mensaje (
MSGBOX_NPC
).
NombreDelScript:: msgbox NombreDelScript_Texto, MSGBOX_NPC end NombreDelScript_Texto:: .string "Hola mundo.$"
Fíjate que tenemos dos scripts: Uno que contiene el código (NombreDelScript
) y otro que tiene el texto (NombreDelScript_Texto
).
El código siempre termina con el comando end
, mientras que el texto siempre termina con el caracter $
.
poryscript
Poryscript no aporta muchas diferencias con poryasm en este ejemplo. Lo más destacado es que se debe indicar si lo que se va a escribir es un script o si es texto. El contenido se encierra entre llaves ({...}
) y los parámetros se encierran entre paréntesis y separados por comas.
script NombreDelScript { msgbox(NombreDelScript_Texto, MSGBOX_NPC) end } text NombreDelScript_Texto { "Hola mundo." }
La mayor ventaja sobre poryasm es que permite obviar la definición del texto, añadiéndolo directamente en el comando msgbox
:
script NombreDelScript { msgbox("Hola mundo.", MSGBOX_NPC) end }
XSE (Binario)
Fuente.
GBA Hacking desde cero de Javi4315
La etiqueta #dynamic 0x800000
especifica a partir de qué dirección empezará XSE a buscar un espacio vacío donde compilar el script. Por ejemplo, la dirección 0x800000. A partir de ahí las bases suelen tener espacio libre.
La etiqueta #org @inicio
indica el puntero inicial (inicio es un nombre de ejemplo). Esto siempre se debe poner al inicio del script, ya que al compilar se convertirá en un offset, que será el que le asignemos a los NPC en Advance Map para que nuestro script se ejecute.
- El comando
lock
bloquea el movimiento. Así podremos hablar sin que la persona con la que hablamos se vaya. - El comando
faceplayer
hace que la persona con la que hablamos nos mire. - El comando msgbox. Se utiliza de la forma
msgbox @(puntero del texto) 0x(tipo)
- El puntero del texto es la dirección donde se escribirá nuestro texto.
- Respecto al tipo, dependiendo de si es un cartel, una persona, etc, tiene un tipo. El tipo de msgbox nos dice que caja de texto aparecerá en el juego.
#dynamic 0x800000 #org @inicio lock faceplayer msgbox @texto 0x6 release end #org @texto = Hola mundo.
Inserción
Una vez creado el script hay que asignárselo a un NPC, ya que este tipo de script se ejecuta al interaccionar con un NPC.
Decompilación
Desde porymap se debe entrar en el mapa donde se quiera añadir el script, en la pestaña Events, y seleccionar el NPC que se quiera asignar. Entonces, se copia el nombre del script en el campo Script de la siguiente manera:
Una vez se guarde el proyecto, se puede compilar para comprobar que el script se ha insertado correctamente.
Binario
En primer lugar, se debe compilar el script dentro de la ROM.
Desde Advance Map se debe entrar en el mapa donde se quiera añadir el script, en la pestaña Eventos, y seleccionar el NPC que se quiera asignar. Entonces, se copia el offset del script en el campo Script offset de la siguiente manera:
Una vez se guarde la ROM, se puede abrir para comprobar que el script se ha insertado correctamente.
Carteles
Se denominan carteles (o, tradicionalmente, postes) a los scripts que no se muestran tras hablar con algún NPC, sino que, por el contrario se muestran al interactuar con un tile, por ejemplo: un cartel de ruta, un libro, un PC...
poryasm
Igual que en el caso anterior, el comando msgbox es el que muestra el mensaje. Este requiere dos elementos:
- La dirección del texto (
FallarborTown_Text_TownSign
). - El tipo de mensaje (
MSGBOX_SIGN
).
FallarborTown_EventScript_TownSign:: msgbox FallarborTown_Text_TownSign, MSGBOX_SIGN end FallarborTown_Text_TownSign: .string "FALLARBOR TOWN\n" .string "“A farm community with small gardens.”$"
poryscript
script FallarborTown_EventScript_TownSign { msgbox("FALLARBOR TOWN\n“A farm community with small gardens.”", MSGBOX_SIGN) end }
XSE (Binario)
Fuente.
Aprendiendo sobre Scripting de Xabier2012
Una vez más, la etiqueta #dynamic 0x800000
especifica a partir de qué dirección empezará XSE a buscar un espacio vacío donde compilar el script.
La etiqueta #org @inicio
indica el puntero inicial (inicio es un nombre de ejemplo).
- En este caso, los comandos
lock
yfaceplayer
no hacen falta. - El comando msgbox. Se utiliza de la forma
msgbox @(puntero del texto) 0x(tipo)
- El puntero del texto es la dirección donde se escribirá nuestro texto.
- Respecto al tipo, dependiendo de si es un cartel, una persona, etc, tiene un tipo. El tipo de msgbox nos dice qué caja de texto aparecerá en el juego.
#dynamic 0x800000 #org @inicio msgbox @texto 0x3 end #org @texto = ¡Bienvenido a Pueblo Sol!
Recibir objetos
poryasm
poryscript
XSE (Binario)
Fuente.
GBA Hacking desde cero de Javi4315
Recibir Pokémon y huevos
poryasm
poryscript
XSE (Binario)
Fuente.
GBA Hacking desde cero de Javi4315