De Whack a Hack Wiki!
(→XSE (Binario)) |
|||
(No se muestran 6 ediciones intermedias de 2 usuarios) | |||
Línea 34: | Línea 34: | ||
=== poryscript === | === 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''' (<code>{...}</code>) y los parámetros se encierran '''entre paréntesis y separados por comas'''. | ||
script NombreDelScript { | script NombreDelScript { | ||
msgbox(NombreDelScript_Texto, MSGBOX_NPC) | msgbox(NombreDelScript_Texto, MSGBOX_NPC) | ||
end | end | ||
+ | } | ||
text NombreDelScript_Texto { | text NombreDelScript_Texto { | ||
"Hola mundo." | "Hola mundo." | ||
+ | } | ||
+ | |||
+ | La '''mayor ventaja''' sobre poryasm es que permite '''obviar la definición del texto''', añadiéndolo '''directamente en el comando''' <code>msgbox</code>: | ||
+ | |||
+ | script NombreDelScript { | ||
+ | msgbox("Hola mundo.", MSGBOX_NPC) | ||
+ | end | ||
} | } | ||
Línea 48: | Línea 58: | ||
La etiqueta <code>#dynamic 0x800000</code> 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 <code>#dynamic 0x800000</code> 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 <code>#org @inicio</code> indica el | + | La etiqueta <code>#org @inicio</code> 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 <code>lock</code> bloquea el movimiento. Así podremos hablar sin que la persona con la que hablamos se vaya. | * El comando <code>lock</code> bloquea el movimiento. Así podremos hablar sin que la persona con la que hablamos se vaya. | ||
* El comando <code>faceplayer</code> hace que la persona con la que hablamos nos mire. | * El comando <code>faceplayer</code> hace que la persona con la que hablamos nos mire. | ||
− | * El comando msgbox. Se utiliza de la forma <code> | + | * El comando msgbox. Se utiliza de la forma <code>msgbox @(puntero del texto) 0x(tipo)</code> |
** El puntero del texto es la dirección donde se escribirá nuestro texto. | ** 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. | ** 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. | ||
Línea 67: | Línea 77: | ||
#org @texto | #org @texto | ||
= Hola mundo. | = 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: | ||
+ | |||
+ | [[Archivo:Eventos basicos npc porymap.png|600px|center]] | ||
+ | |||
+ | Una vez se guarde el proyecto, se puede compilar para comprobar que el script se ha insertado correctamente. | ||
+ | |||
+ | ==== Binario ==== | ||
+ | |||
+ | En primer lugar, se debe [[Tutorial:Compilar_scripts_con_XSE | 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: | ||
+ | |||
+ | [[Archivo:Eventos_basicos_npc_xse_3.png|600px|center]] | ||
+ | |||
+ | Una vez se guarde la ROM, se puede abrir para comprobar que el script se ha insertado correctamente. | ||
== Carteles == | == 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 === | === 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 (<code>FallarborTown_Text_TownSign</code>). | ||
+ | # El [[Anexo:Comandos_para_Scripts_(Decompilación)#Tipos_de_Msgbox|tipo de mensaje]] (<code>MSGBOX_SIGN</code>). | ||
+ | |||
+ | 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 === | === poryscript === | ||
+ | |||
+ | script FallarborTown_EventScript_TownSign { | ||
+ | msgbox("FALLARBOR TOWN\n“A farm community with small gardens.”", MSGBOX_SIGN) | ||
+ | end | ||
+ | } | ||
=== XSE (Binario) === | === XSE (Binario) === | ||
− | {{Fuente|[https://whackahack.com/foro/threads/ | + | {{Fuente|[https://whackahack.com/foro/threads/aprendiendo-sobre-scripting.42542/ Aprendiendo sobre Scripting] de [https://whackahack.com/foro/members/xabier2012.24720// Xabier2012]}} |
+ | Una vez más, la etiqueta <code>#dynamic 0x800000</code> especifica a partir de qué dirección empezará XSE a buscar un espacio vacío donde compilar el script. | ||
+ | |||
+ | La etiqueta <code>#org @inicio</code> indica el '''puntero''' inicial (''inicio'' es un nombre de ejemplo). | ||
+ | |||
+ | * En este caso, los comandos <code>lock</code> y <code>faceplayer</code> no hacen falta. | ||
+ | * El comando msgbox. Se utiliza de la forma <code>msgbox @(puntero del texto) 0x(tipo)</code> | ||
+ | ** 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 == | == Recibir objetos == |
Revisión actual del 19:25 23 jun 2023
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