De Whack a Hack Wiki!

Klink NB.gif

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:

  1. La dirección del texto (NombreDelScript_Texto).
  2. 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)

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 pointer 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.

Carteles

poryasm

poryscript

XSE (Binario)

Recibir objetos

poryasm

poryscript

XSE (Binario)

Recibir Pokémon y huevos

poryasm

poryscript

XSE (Binario)