¡Scripts!

Aprende a scriptear como los mejores

Los comandos requieren saber los códigos o índices de los pokemon, objetos y movimientos que están contenidos en la sección de códigos.

Bien, a pesar de ya haber otros manuales de scripts en WAH mucha gente sigue pidiendo más de ellos, así que espero que entre todos los que hay se les haga más fácil aprender scripts a los novatos.
En el manual verán que repito varias cosas ya anteriormente dichas en otros manuales, pero trataré de explicarlas de distintas formas para si no entienden una pueden consultar la otra.

¿Qué herramienta usaremos para scriptear?
Pues XSE me parece la mejor y más sencilla, así que esa es la que usaremos.

Empecemos...

Pues empecemos con lo más básico de un script, haremos un script que no hace nada, pero obviamente tiene que tener 2 cosas que son básicas y que jamás pueden faltar.

Ejemplo:
#org 0x6B0AB0
end

#org 0xdirección del script – Así se inicia el script, nunca debes olvidarte de poner éste comando o el script terminará sobrescribiéndose encima del inicio del rom y arruinandolo.

end – Con este comando estás terminando el script, éste comando también debe aparecer siempre a menos que pongas un return, que es algo que explicaré más adelante.

Bien, estas dos cosas son básicas, así que deben asegurarse de entenderlas en un 100%. Si han logrado hacer eso significa que han hecho un script que simplemente no hace nada, pero aun así es un script.

Ahora les mostraré un script de texto.

#org 0xdirección del script 
faceplayer
msgbox 0xdirección del mensaje
callstd 0x6
end

faceplayer – Sirve para hacer que cuando hablas con un overworld (mini) éste te mire. Obviamente si estamos haciendo un script de gatillo éste comando no se pone.

Msgbox 0xdirección del mensaje – Aquí simplemente pones la dirección del texto que se dirá.

Callstd 0x – Siempre va luego de un msgbox, ya que sin esto el msgbox no se activa. Al poner callstd 0x6 estas haciendo que luego de que diga el mensaje el textbox se cierre, y si pones callstd 0x4 al terminar el mensaje el textbox sigue ahí, esto sirve generalmente para cuando luego pondrás otro msgbox en el mismo script o en un script encadenado a ese.

Bien, ahora les voy a explicar algo que es esencial en los scripts (ya que sin esto los scripts se repetirían una y otra vez por siempre, y esa no es la idea en la mayoría de los casos). ¿Y qué es eso tan importante? Las flags.

¿Y qué es una flag?
Es un tipo de variable que sirve como interruptor, y te permiten tomar control del orden que quieres que ocurran los eventos en tu hack, también para que los eventos no se repitan, para hacer “desaparecer” o “aparecer” a un mini, etc.
#org 0xdirección del script
checkflag 0x1234
if 0x1 goto 0xdirección script2
msgbox 0xdirección mensaje
callstd 0x6
setflag 0x1234
release
end

#org 0xdirección script2
release
end

checkflag 0x – Chequea la flag, yo en este caso use la flag 1234 pero hay muchísimas libres que pueden utilizar (la verdad es que no se cuales son las que están libres, pero yo las que uso, y estoy casi seguro que están todas libres son desde la 1200 hasta la 3000 o incluso creo que más).

If 0x1 goto 0x dirección script2 – Si la flag 1234 está activada ve al script que está en la dirección a la que manda (en este caso a la dirección del script2), y si no está activada sigue en el mismo script (recuerda que si yo hubiera puesto if 0x0 goto 0xdir. Script2 sería que si la flag NO está activada vas al script que está en la dirección del script2 y si estuviera activada continúa con lo que sigue abajo del comando if 0x0 goto.

Setflag 0x  – Muy bien, ya sabemos que la flag no está activada, ya que si no, no estaríamos en esta parte del script. Éste comando lo que hace es simplemente activar la flag, así que cuando volvamos a pasar por el gatillo (es que un script de una persona que solo te hable una vez y luego nunca más no tendría sentido, a menos que se enfadara contigo tal vez?) la flag ya estará activada (¡Porque este comando la activo!) y entonces enviará (en este caso) al script que no tiene nada, para hacer que no ocurra nada al pasar por ese lugar y así  nadie se da cuenta de que ahí sigue estando el gatillo.


También hay un comando para desactivar flags, que es el clearflag 0x, que también lo pueden usar para hacer que no se pueda pasar por un lugar hasta que desactives una flag que ya está activada y varias cosas más.

Aprovecho a decir que las flags también sirven para hacer que recibas la pokedex, el pokenav, etc.

En rubí, setflag 0x800 hace que se active el menú de Pokémon en el menú principal. Ésta flag es prácticamente obligatoria de poner en el primer givepokemon, ya que si no la pones si tendrás a un pokémon, pero solo en batallas (ya que no verás al menú). En Esmeralda la flag no sería 0x800, si no que sería 0x860, y de Rojo Fuego no se ninguna de memoria.

Setflag 0x801 (en rubí) y setflag 0x861 (en esmeralda) hacen que recibas a la Pokedex (la regional, no la nacional).

Setflag 0x802 (en rubí) y setflag 0x862 (en esmeralda) hacen que recibas la PokéNav.

En rubí:
Setflag 0x807 hace que recibas la primera medalla.
Setflag 0x808 hace que recibas la segunda medalla.
Setflag 0x809 hace que recibas la tercera medalla.
Setflag 0x80A hace que recibas la cuarta medalla.
Setflag 0x80B hace que recibas la quinta medalla.
Setfalg 0x80C hace que recibas la sexta medalla.
Setflag 0x80D hace que recibas la séptima medalla.
Setflag 0x80E hace que recibas la octava medalla.

Ahora continuemos aprendiendo más de scripts.

#org 0xdirección del script
faceplayer
msgbox 0xdirección mensaje
callstd 0x4
call 0xdirección script2
msgbox 0xdireccion mensaje2
callstd 0x6
release
end

#org 0xdirección script2
msgbox 0xdirección mensaje3
callstd 0x4
applymovement 0xFF 0xdirección movimiento
waitmovement 0x0
msgbox 0xdirección mensaje4
callstd 0x6
return

Antes que nada explicaré el ejemplo, imaginemos que el ejemplo de script que di antes hubiera sido antes más corto, pero luego decidí agregar más cosas y me di cuenta que abajo del script había espacio ocupado, cosa que no podía eliminar, entonces imaginemos que borré algún comando como de msgbox y puse al call 0xdirección, entonces en esa dirección a la que te envía  puse al comando que había borrado y además lo nuevo del script, luego puse un return para que regresara al script y continuara desde abajo del call. Recuerden que el comando goto 0xdirección también puede ser usado para enviar a otro script, pero en este caso no podrías poner el return, así que tu script no regresará.

Así que ahora a explicar comandos:

call 0xdirección - sirve para que te envíe a otro script, si luego en el otro script pones return al regresar al script éste sigue justo luego del call.

Return – Regresa al script anterior.

Release -  Libera al personaje si es que se usó lock, aunque yo recomeindo ponerlo antes del end siempre para tener seguridad que  volverá a la normalidad.

Applymovement 0xmini que se mueve 0xdirección del movimiento – Applymovement es un comando que hace que los minis se muevan, es un comando que en mi opinión da vida a los scripts, sin el estaría todo muy quieto xD.
En la parte de 0xel mini que se mueve tendrías que poner el número del mini que se moverá (en hex), número que podes ver en el Advance Map al tocar al mini (aunque te lo da en decimal, deberías pasarlo a hex con la calculadora de la PC [de todas formas de los minis del 1 al 9 en decimal y en hex son lo mismo]). Si pones applymovement 0xFF 0xdirección del movimiento estarías haciendo que el protagonista se mueva.

Waitmovement 0x0 - Eso sería la pause perfecta, siempre va luego de cada applymovement.

Aun me queda decir como se ponen los movimientos. Simplemente vas en tu editor hexadecimal a un espacio vacío (con puro FFFFFFFFFFFFFFFFFFFFFFFFFF) y pones cada movimiento que hace el que se mueve en hex (por ejemplo un paso hacia abajo sería 08, mirar hacia arriba sería 01, etc.). Todos los movimientos terminan con un FE al final.
Ejemplo: 08080A01FE
Ese movimiento sería dos pasos hacia abajo, uno hacia la izquierda, uno hacia arriba y finaliza al movimiento.

Entonces en la parte que va la dirección del script pones la dirección de donde está el movimiento.
Ejemplo: Si el mini que se mueve es el protagonista (FF), y el movimiento está en la dirección 6BA0B0 el script de applymovement quedaría así:

Applymovement 0xFF 0x6BA0B0
waitmovement 0x0

Aquí hay varios comandos que les pueden parecer interesantes:

Wildbattle: Sirve para que puedas pelear contra el pokémon que tu mismo desees.

Wildbattle 0xpoke 0xnivel 0xobjeto 0xescenario

Recuerden:
En el primer 0x hay que poner al número del pokémon en hexadecimal.
En el segundo 0x hay que poner al nivel, pero en hexadecimal (así que si quieren poner nivel 10, tienen que poner A).
En el tercer 0x pone al número del objeto que desees que el pokémon tenga (en hex, claro).
Y  el cuarto 0x es para el escenario en el que combates (puede ser 0, 1, 2 o 3).

Givepokemon: Hace que recibas el pokémon que desees.

Givepokemon 0xpoke 0xnivel 0xobjeto 0x0 0x0 0x0

Nuevamente hay que poner al número del pokémon, al nivel y al número del item en hex.
Los ultimos tres 0x0 no hacen nada, pero hay que ponerlos para que funcione bien.

Giveitem: Recibes la cantidad que quieras de un objeto determinado.

Giveitem 0xobjeto 0xcantidad

Recuerden que van el número del objeto y la cantidad en hex.