domingo, 22 de marzo de 2009

Comandos para scripts

Rubycode es el lenguage que utiliza Scripted y sus precursores Rubikon y Diamond Cutter. Entender este lenguaje es el primer paso para poder hacer un buen script, así que lo he traducido a español. Entre paréntesis está la traducción el nombre del comando, aunque tienes que usar el nombre en inglés.

Debajo del nombre aparece su formato. Luego su descripción y después un ejemplo.

Ahora que sabeis que significan, un consejo: leed los scripts como si fueran textos.

Por ejemplo:

#org 0x800000
faceplayer
message 0x800100
boxset 0x06
end

“Empieza a escribir en 0x800000, encara el sprite al jugador y muestra el mensaje escrito en 800100, según el parámetro 0x06 (cerrar al pulsar A)

Comandos de RubiKode

Está altamente recomendado escribir los comandos en minúsculas y cualquier cosa "#definida" en mayúsculas.

Comandos de preprograma

Son comandos que no se compilan, pero que coordinan el funcionamiento del programa

#include (#incluye)

#include nombredelarchivo

Incluye otro archivo en el proceso de compilación. Las comillas se quitan automáticamente.

Ejemplo:

#include "misconfiguraciones.rbh"
#include stdpoke.rbh
#define (#define) #define nombre_simbolo índice_número Te permite definir símbolos para reemplazar números. Solo se permiten números pero pueden ser de cualquier tamaño de byte a dword. Es recomendable usar mayúsculas para el nombre del símbolo.

Ejemplo:

#define MASTERBALL 1 'Entonces, cada vez que
escribas MASTERBALL, Scripted
compilará un “1” (cabe añadir que la
masterball es el primer objeto de la
lista)
#org

Indica un cursor para el compilador, a un sitio específico del rom (indica donde empieza a escribir el guión)

Ejemplo:

#org 0x605040 'continúa (o empieza) a
escribir en el offset 0x605040
#autobank (#autobanco)
#autobank on #autobank off

Algunos prefieren hacerlo manualmente, otros no. Autobank inserta en los punteros un 08 automáticamente. Solo #org no está afectado )porque, como archivo, el rom empieza en el offset 0x000000)

Autobank, por defecto (porque se incluye #autobank on en std.rbh) está activo, asíq eu no te preocupes por el.

Ejemplo:

#autobank on
message 0x604020 'se vuelve 0F00 08604020
#autobank off
message 0x604020 'se vuelve 0F00 00604020,
Lo cual no es bueno.
#raw

Aliados: #binary #raw aLot

Inserta una carga de datos raw en el ROM. Puede ser usado para comandos defectuosos o no soportados así como para los datos de movimiento. Para determinar que tipo de datos usar, escribelo antes de los números. Por defecto es byte. Puedes usar los prefijos hexadecimales 0x o &H, pero no son necesarios

    Los tipos de datos pueden ser:
  • byte (tambien char)
  • word (tambien int o integer)
  • dword (tambien long)
  • pointer (tambien ptr)

Ejemplo:

#raw 12 69 word 1234 dword
12345678 pointer 0xABCDEF

Este ejemplo insertaría dos bytes, un word, un dword y un puntero. Ten en cuenta que el puntero es afectado por Autobank y Dword no

=

= texto

Inserta un texto basado en una tabla hecha por los creadores de Elitemap

Ejemplo:

= ¡Hola, soy tan feliz y estúpido!
\feliz feliz feliz...

Comandos generales

nop (00, 01) (no)

nop

Absolutamente NADA.

end (02) (fin)

end

Termina la ejecución del script.

return (03) (volver)

return

Vuelve a donde has sido llamado (call o #org). Como el sistema GOSUB...RETURN de Basic

call (04) (llamar)

call puntero

Llama a otro script. Puedes volver a ahí mediante return.

Ejemplo:

call JUMP_BAGISFULL
goto (05) (ir a)

goto punteroobjetivo

Continúa la ejecución desde el putnero objetivo. Return no está permitido.

if (06) (si)

if valorcondicional acción punteroobjetivo

Si la última comparación devolvió un valor concreto, saltar o ir a otro script. Las acciones pueden ser goto o call. Si no se especifica, se presume call por loq ue return puede ser usado.

Los valores condicionales son: 00 – Menor/falso (<<), tb FALSE 01 – Igual/verdadero (==), tb TRUE 02 - Mayor (>>) 03 – Menor o igual (>=) 04 – Mayor o igual (<=) 05 – Desigual (!=)

Ejemplo:

compare LASTRESULT 0x4
if TRUE goto JUMP_BAGISFULL
boxset (09) (determinar la caja)

Aliases: callstd

boxset valor

Llama a una función standart. En general se usa para mostrar la caja de diálogo con los parámetros 0x04 o 0x06, o usar 0x05 para preguntas de si/no (la cual, además, mete un valor en LASTRESULT.

Ejemplo:

message 0x604000 'texto normal
boxset 4 'no cerrarse despues de pulsar A
message 0x604020 'pregunta
boxset BOXSET_YESNO '(= 0x05)
if NO 0x600020 'ir a la rama "no"
'la rama “si” va aquí
...
end

#org 0x600020
'la rama “no” va aquí
...
end
message (0F) (mensaje)

message punterodelmensaje

Prepara un puntero para usar por comandos como boxset. Se usa para los textos.

Ejemplo:

message 0x604020
boxset 0x06 'cerrar al puslar A
setvar (16) (determinar variable)

Alias: setvar1

setvar indicevariable numerovalor

Determina una variable a un valor concreto.

Analogo a A = 4 de Basic

copyvar (19) (copiar variable)

Alias: setvar2

copyvar indicevariable indicevariable

Copia el valor de una variable a otra.

Analogo al A = B de Basic.

copyvarifnotzero (1A) (copiar variable si no es 0)

Alias: setvar3

copyvarifnotzero variable variable

Copia el valor de una variable a otra, si esta no tiene como valor 0.

Analogo al IF B > 0 THEN A = B de Basic.

compare (21) (comparar)

compare variable valor

Compara una variable con un valor. Usado en conjunción con if y mayormente.

con LASTRESULT como valor.

Compares a variable with a value. Used in conjunction with if and mostly with LASTRESULT as a parameter.

Ejemplo:

compare LASTRESULT 0x4
if TRUE JUMP_BAGISFULL
special (25) (especial)

special indicedeevento

Activa un evento especial

Ejemplo:

special SPECIAL_WALLYCATCH 'Reproduce la película de
Wally cazando al Ralts

*NOTA DE BARO: estaría bien probar los especiales, quizás encontrais algo que os guste.

special2 (26) (especial2)

special2 variable indice

¿Comprueba cosas especiales? Se usa en revanchas y otras situaciones especiales.

pause (28) (pausa)

pause itiempo

setflag (29) (poner bandera)

setflag numeroflag

Activa un flag.

Ejemplo:

setflag 0x64
checkflag 0x64
compare LASTRESULT YES
if 1 0x600020 'ir a la rama “si”
'rama “no” va aquí
...
end

#org 0x600020
'rama “si” va aquí
...
end
clearflag (2A) (limpiar bandera)

clearflag numero flag

Desactiva un flag.

checkflag (2B) (comprueba flag)

checkflag numeroflag

comprueba si el flag está activado (ver ejemplo en setflag)

cry (30) (grito)

cry indiceespecies

Reproduce el grito de la especie indicada.

Ejemplo:

cry PKMN_PIKACHU
fanfare (31) (himno)

fanfare indicecanción

Reproduce una canción de fondo.

waitfanfare (32) (espera himno)

waitfanfare

Espera por el sonido de fanfare para acabar.

playsound (33) (tocar canción)

playsound indicecanción

Cambia abruptamente a otra canción.

fadedefault (35) (aparece por defecto)

fadedefault

Suavemente cambia a la canción por defecto del mapa

fadesound (36) (aparece canción)

fadesound indicecanción

Suavemente cambia a la canción con el indice indicado.

fadeout (37) (desaparece)

fadeout

Suavemente apaga la canción sonando

fadein (38) (aparece)

fadein

Suavemente aparece la canción que estaba sonando antes.

warp (39) (teletransporte)

warp bancodelmapa numerodelnivel numerodelasalida

checkitem (47) (comprobar objeto)

checkitem indiceobjeto

Comprueba si el jugador lleva como mínimo una unidad del objeto mencionado.

Ejemplo:

checkitem ITEM_MAXPOTION
compare LASTRESULT YES
if TRUE 0x604020
applymovement (4F) (aplicar movimiento)

applymovement Spriteafectado punterodelmovimiento

Aplica el movimiento descrito en el puntero.

Ejemplo:

applymovement
0x5 0x604020
pause 0x0 'espera a que el movimiento se complete
movesprite (57) (mueve minisprite)

movesprite indice ejeX ejeY

faceplayer (5A) (encarar sprite)

faceplayer

Gira el minisprite hacia el jugador

trainerbattle (5C) (batalla de entrenador)

trainerbattle tipo batalla punterodeltextointro

punterodeltextovencido

Empieza un combate de entrenador

El tipo es 0x00 para batallas normales, 0x04 para 2 contra 2 y 0x05 para revanchas. Para batallas 2 contra 2 o para gimnasios, añade otro parámetro, punteroespecial.

Las batallas 2-2 requieren punteroespecial para mostrar un mensaje si el jugador solo tiene un pokémon.

Los líderes de gimnasio te darán regalos como medallas en la continuación de la batalla. Mira tu lider favorito en scripted para ver un ejemplo.

Ejemplo:

trainerbattle 0 TEXTOINTRO TEXTOALVENCER
message TEXTO DE DESPUES
boxset 4
jingle (69) (sonidillo)

jingle

Se supone que reproduce un sonido, pero no hace nada.

lock (6A) (bloquear)

lock

Bloquea el movimiento del sprite que llama

release (6C) (liberar)

release

Devuelve el movimiento bloqueado con lock

multi (6F) (multiple)

multi posizquierda posarriba indicelista Cancelar

Pone una lista de opciones para que escoja el jugador. Las opciones dependen de la lista (indicelista). Cancelar indica si el último elemento es Cancelar o no. (si sí, 0x01, si no, 0x00) La respuesta se almacena en LASTRESULT

Ejemplo:

message 0x604020 '”que ciudad te gusta más?”
choice 2 2 13 0 'las opciones son littlerrot,
slateport y lilycove
compare LASTRESULT 1
if 0 0x600030 'rama de littleroot
if 1 0x600050 'rama de slateport
'aquí va la rama de lilycove.
No se necesita “il lastresult 3”
givepokemon (79) (dar pokémon)

givepokemon indiceespecie nivel Item

Le da al jugador un pokémon de un determinado nivel y con un determinado objeto, si item > 0.

pokemart (86) (poketienda)

pokemart punterolistadeobjetos

Inicia el sistema de compra de pokemart con los objetos/precios que se encuentran en punterolistadeobjetos.

fadescreen (97) (fundido en negro)

fadescreen in/out

Fundido en negro hacia dentro/fuera

checkgender (A0) (comprueba sexo)

checkgender

Pone un 1 en LASTRESULT si el jugador es una chica o 0 si es un chico.

setmaptile (A2) (poner bloque en el mapa)

setmaptile ejeX ejeY numerodebloque movpermitido

Pone un tile en el mapa. Tienes que refrescar de algún modo esa parte, alejando la vista y volviendo, o llamar este comando desde el script del nivel.

setweather (A4) (determinar clima)

setweather valorclima

Prepara un clima para ser activado por doweather

Los valores son
00 - Nada
03 - Lluvia
04 – copos de nieve (Breve)
05 - Tormenta
06 - Niebla
07 – Ceniza
08 – Tormenta arena
09 – Otra niebla
0A – niebla clara
0B – Oscuridad (nocturno!!)
0C - Sofoco
0D – Tormenta 2
0E - Submarino
0F - Nada

doweather (A5) (hacer clima)

doweather

Activa el clima preparado por setweather.

Construídos (comandos complejos)

wildbattle (batalla salvaje)

wildbattle indiceespecie nivel estilo

Originalmente un verdadero comando, ahora un construído.

El estilo puede ser
0 normal
1 movimiento en zigzag, tierra
2 movimiento en zigzag, hierba
3 movimiento en torbellino

Ejemplo:

wildbattle 0x196 70 3 'lucha
contra un RAYQUAZA NIVEL 70!
giveitem (dar objeto)

giveitem objeto cantidad

Da un objeto

Este construído combina dos setvarifnotzero

Ejemplo:

giveitem ITEM_SODAPOP 1

Comandos chungos

jumpstd (08) (salta std)
jumpstd bValue
Salta a una función estándar. Del estilo de BoxSet, pero con una lógica ligeramente diferente, como comparar en Basic's GOSUB con GOTO.
comparevars (1B)
(compara variables)

comparevars variable variable

comparevartobyte (1C)

(compara variable con byte)

comparevartobyte variable valorbyte

comparevartofarbyte (1D)
(compara variable con byte lejano)

comparevartofarbyte variable puntero

Byte lejano = byte localizado en un puntero.

comparefarbytetovar (1E) (
compara byte lejano con variable)

comparefarbytetovar puntero variable

Compares a byte at some location with a variable.

comparefarbytetobyte (1F)
(compara byte lejano con byte)

comparefarbytetobyte puntero valorbyte

Compares a byte at some location with a byte value.

comparefarbytetofarbyte (20)
(compara byte lejano con byte lejano)

comparefarbytetofarbyte puntero puntero

Variables predefinidas y constantes en STD.RBH

B_YES, B_NO, B_TRUE, B_FALSE, B_BOY y B_GIRL

(SI, NO, VERDADERO, FALSO, CHICO, CHICA)

Me gustan las booleanas (kyoufu Kawa). Son fáciles de #definir.

B_<<, B_==, B_>>, B_<=, B_>= y B_!=

Como B_TRUE y B_FALSE arriba, pero con todo el poder lógico para los más expertos.

BOXSET_DONTCLOSE, BOXSET_YESNO y BOXSET_NORMAL

Parámetros de Boxset más normales.

MENU_PARTY, MENU_POKEDEX y MENU_NAVIGATOR

Parámetros de Setflag para cada uno d elos tres elementos del menu (equipo, pokedex y navegador). Se peude usar, por ejemplo, para que el TEAM te robe tu material.

0x800D – LASTRESULT (ultimo resultado)

Casi siempre que algo se comprueba, la información se mete en esta variable: LASTRESULT.

SPRITEMOVE_INDEX
SPRITEMOVE_NEWXPOS
SPRITEMOVE_NEWYPOS

Combinados con Setvar, los mueves a cierta posición en el mapa. Se usa en littleroot para mover a la madre dependiendo del sexo del jugador.

APPLYMOVE_PLAYER (aplicarmovimiento al jugador)

Porque tiene más sentido que “0xFF” en applymovement. Ponlo como el indice del sprite para que el afectado sea el jugador. Aunque es más corto el típico "0xFF"

JUMP_BAGISFULL (saltar a “si la mochila está llena”)

No hay comentarios: