Xabier2012
Usuario mítico

Primero, os daré un pack de herramientas completo posteado en su momento por Ángel Asakura que os servirá para esta escuela: Pack de herramientas
En él, vamos a necesitar concretamente:
-Advanced Map 1.95 (Editor de mapas y eventos entre otras cosas)
-XSE 1.1 (Editor de scripts)
*Si utilizáis Esmeralda es recomendable usar Advanced Map 1.92. Aunque nuestras explicaciones y gráficos se basarán en la versión 1.95
También necesitaremos nuestra Rom base limpia. Esta la deberíais tener vosotros ya. Yo trabajaré en Fire red, os la pongo por si acaso:
Fire Red
¡Empecemos!

¿Cómo enlazo XSE a Advance Map?
Al enlazar nuestro XSE con nuestro Advanced map podremos abrir scripts directamente en nuestro XSE desde Advanced map. De esta forma nos será más fácil editar y acceder al XSE.
Para enlazar nuestro XSE al AM (Advanced Map) nos vamos a Settings, luego seleccionamos Choose script editor, y entonces vamos a la carpeta donde tenemos nuestro XSE y seleccionamos la aplicación para cargarla.

Estructura de los Scripts
Un script es un conjunto de código que se ejecuta en cascada. Esto quiero decir que el juego leerá el primer comando de nuestro código y lo ejecutará, cuando acabe ejecutará el que está por debajo y así de forma continua.
Lógicamente si un comando ordena ir a otro comando/dirección, el juego irá a la dirección mandada en vez de seguir con el comando siguiente.
Los comandos de los scripts se guardan en offsets. Un offset es como una caja de datos, puesto que un comando también está compuesto por datos, se podría decir que un offset es una caja que almacena datos.
El offset está representado por números en hexadecimal. Por ejemplo "800000" sería un offset, pero en XSE nuestros números hexadecimales tienen que ir precedidos por un "0x". Por lo tanto un offset sería "0x800000".
En un offset guardaremos nuestros datos de texto de minisprites, movimientos de minisprites, otras direcciones para que se ejecuten otras partes del código, etc.

Estructura del XSE

1-Indica la ruta de lo que hemos abierto. Cuando queramos hacer un script tendremos que abrir nuestro Rom en la opción Archivo
2-Botón de compilar. Compilar significa guardar nuestro script/(código que forma el script) en los datos del nuestra Rom. Como ya hemos dicho antes, estos datos se almacenan en offsets, entonces al compilar, lo que estamos haciendo es asignar los datos de nuestro código a offsets. A este botón le tendremos que dar cuando escribamos todo el código de un script.
3-Botón de descompilar. Si escribimos nuestro offset (teniendo cargada la rom) en el hueco de la izquierda y le damos al botón de descompilar, aparecerá el código almacenado en dicho offset. Luego nosotros podremos modificar ese código y volverlo a compilar. Aun que esto puede tener inconvenientes que ya veremos más adelante.
4-Calculadora. Si queremos pasar por ejemplo de numeros normales (decimal) a hexadecimal, escribimos nuestro número con el botón en dec. Luego pulsamos el botón "Hex" y nuestro número pasará a hexadecimal automáticamente. Esto nos será de utilidad más adelante.
5-Código de nuestro script.

Estructura del AM

1-Offset de nuestro script. Aquí pondremos el offset principal de nuestro script. IMPORTANTE: SE TIENEN QUE DEJAR LOS DOS PRIMEROS CEROS COMO ESTÁN Y PONER NUESTRO OFFSET DESPUÉS. Por ejemplo si nosotros tenemos el offset "0x8B0000", el script offsets quedaría así: "$008B0000". Cuando hablemos con un minisprite se ejecutará el script que pongamos en esta casilla.
2-Aquí se ponen flags, las cuales daremos más adelante. Solo recordar que en esta casilla se ponen flags y al poner flags podemos hacer desaparecer el mini, por ejemplo. Pero esto lo daremos en otra clase.
3-Normalmente cuando es un entrenador Pokémon se pune el numero 11. Puede estar a cero perfectamente, tampoco tengo mucha conciencia de para que sirve, no es de mucha utilidad.
4-Será 01 si es un entrenador estándar y 00 si no lo es.
5-Si es un entrenador marca la distancia a la cual te ve para retarte.
6-Cuando ponemos un offset en nuestro Script offset, y tenemos enlazado nuestro XSE al AM, podremos darle a Open script para abrir nuestro script directamente en el XSE.
7-Marca las coordenadas del evento.
8-Marca las coordenadas de donde se ponga el ratón
9-Nos lleva al cabezal del mapa. Lo utilizaremos para ver como se hacen los Scripts de nivel dentro de bastantes lecciones.

Empezando nuestro script
Bien. Carguemos nuestra Rom con el XSE y empezamos a escribir comandos.(Escribiré los comando la estructura "CODE" que proporciona el foro. Pero lo que escriba es como si lo escribiéramos en el XSE)
Código:
#dynamic 0x800000
Cuando ponemos #dynamic 0x800000 sustituirá las palabras que empiecen por "@" por un offset libre. Por ejemplo:
Código:
#dynamic 0x800000
#org @inicio
Código:
#org 0x800000
¿Qué es el #org?
El #org indica que este offset en una dirección. Siempre que queramos escribir una dirección offset pondremos un #org antes. El funcionamiento de este #org se entenderá mejor cuando veas en esta lección como funciona.
Bueno, ahora ya sabemos como encontrar offset libres y como tiene que empezar nuestro script. Todos los comandos que se pongan después del #org (offset) son aquellos que nuestro ejecutará.
Podemos entender el #org como la dirección de nuestra casa, y que esa dirección estará asociada al offset que viene después. El primero #org con offset que se ponga es la dirección principal, y es la que tendremos que poner en el script offset de nuestro mini para que ejecute el código.

Comando Faceplayer
Este comando sirve para que cuando interactuemos con el mini del script, este, mira al jugador.
¿Cuándo no lo utilizaremos?
Pues por ejemplo si queremos simular que el minisprite está hablando solo y no se entera de que el jugador está cerca de él.
Vamos a implementarlo en nuestro código.
Código:
#dynamic 0x800000
#org @inicio
faceplayer

Comandos Lock y lockall
Con el comando lock se consigue que nuestro player no se mueva mientras se ejecuta el script.
El lockall tiene la misma función pero en vez de hacer efecto solo sobre nosotros, también afectará a todos los minis del mapa. De esta forma ninguno se moverá aunque tengan algún movimiento configurado por el AM.
Entonces nuestro código quedaría tal que así:
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock

msgbox
Con el comando msgbox abriremos nuestra caja de texto y podremos escribir frases para que se reproduzcan al ejecutase el comando.
El comando msgbox se compone así:
msgbox (offset) (tipo de mensaje)
Lo explico:
msgbox indica que se va abrir la caja de texto para un mensaje.
offset en el número offset el cual contendrá el texto de nuestro mensaje. Como tenemos el #dynamic, para buscar un offset libre ya dijimos que utilizaríamos un @ seguido de una palabra cualquiera. Entonces nuestro comando de momento quedaría así:
msgbox @texto (tipo de mensaje)
El tipo de mensaje es lo que su nombre indica. Es un número el cual le dice al juego el tipo de mensaje que se va a ejecutar. Estos son los tipos:
0x2 Se utiliza para textos normales. Si ponemos 0x2 no nos hará falta poner el faceplayer y el lock, puesto que este tipo de mensaje digamos que lo tiene incorporado.
0x3 Se utiliza para postes. Lo veremos en profundidad en la siguiente lección.
0x4 Es un mensaje normal pero este no se cerrará hasta que no pongamos el comando "closeonkeypress"
0x5 Este después de escribir el texto correspondiente abre la caja de texto del si/no. Entraremos en profundidad con esto en la siguiente lección.
0x6 Mensaje normal
Bueno nosotros queremos un mensaje normal, así que utilizaremos el 0x6, y entonces nos quedará de esta forma.
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock
msgbox @texto 0x6
Nuestro mensaje estará en el offset que se creará en @texto. Entonces ahora tendremos que crear la dirección en nuestro script y poner el texto que queramos. Como ya he dicho, lo que marca el comienzo de en un offset para que se ejecute es el #org. En el msgbox hacemos referencia a un offset que es donde estará nuestro texto. Entonces tenemos que poner un #org, nuestro offset y a continuación nuestro texto.
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock
msgbox @texto 0x6
#org @texto
= Hola
El #org lo pongo porque es una dirección offset, entonces cada vez que en uno de nuestros comandos pongamos un @ que haga referencia a un offset. Tenemos que crear aparte otro #org junto con el offset referenciado y luego escribir la información que se va a guardar. En este caso, texto.
¿Por qué ponemos @texto? Para que cuando se generen nuestros offsets el @texto se sustituirá por el mismo offset. Si no no tendría ningñun sentido llamar a un offset que está vacío. Si ponemos @ con palabras igual generará el mismo offset sino serán distintos offset.
Luego de crear la dirección offset, en la siguiente línea ponemos un = y con un espacio de margen el texto que queramos que se muestre.
El XSE tiene parámetros especiales para el texto, pero si pulsamos ctr+T abriremos una caja donde podremos introducir nuestro texto y lo convertirá e insertará automáticamente. Por ejemplo vamos a convertir esta frase y la vamos a insertar:
"Hola a todos. En un principio parece difícil pero con práctica todo es fácil"
Quedaría así:
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock
msgbox @texto 0x6
#org @texto
= Hola a todos. En un principio\nparece difícil pero con práctica\ltodo es fácil
También hay comandos especiales que puedes introducir manualmente:
[player] Dirá tu nombre
[rival] dirá el nombre de tu rival
Colores: (Los pones antes del texto)
White - [white_fr]
Black - [black_fr]
Gray - [grey_fr]
Red - [red_fr]
Orange - [orange_fr]
Green - [green_fr]
Light Green - [lightgreen_fr]
Blue - [blue_fr]
Light Blue - [lightblue_fr]
Light Blue 2 - [lightblue2_fr]
Cyan - [cyan_fr]
Light Blue 3 - [lightblue3_fr]
Navy Blue - [navyblue_fr]
Dark Navy Blue - [darknavyblue_fr]
Black - [black_fr]
Gray - [grey_fr]
Red - [red_fr]
Orange - [orange_fr]
Green - [green_fr]
Light Green - [lightgreen_fr]
Blue - [blue_fr]
Light Blue - [lightblue_fr]
Light Blue 2 - [lightblue2_fr]
Cyan - [cyan_fr]
Light Blue 3 - [lightblue3_fr]
Navy Blue - [navyblue_fr]
Dark Navy Blue - [darknavyblue_fr]
White - [white_fr]
Black - [black_fr]
Gray - [grey_fr]
Red - [red_fr]
Orange - [orange_fr]
Green - [green_fr]
Light Green - [lightgreen_fr]
Blue - [blue_fr]
Light Blue - [lightblue_fr]
Light Blue 2 - [lightblue2_fr]
Cyan - [cyan_fr]
Light Blue 3 - [lightblue3_fr]
Navy Blue - [navyblue_fr]
Dark Navy Blue - [darknavyblue_fr]
Black - [black_fr]
Gray - [grey_fr]
Red - [red_fr]
Orange - [orange_fr]
Green - [green_fr]
Light Green - [lightgreen_fr]
Blue - [blue_fr]
Light Blue - [lightblue_fr]
Light Blue 2 - [lightblue2_fr]
Cyan - [cyan_fr]
Light Blue 3 - [lightblue3_fr]
Navy Blue - [navyblue_fr]
Dark Navy Blue - [darknavyblue_fr]
Entonces si queremos que nos pregunten por nuestro nombre, y el texto queremos que sea rojo, tendríamos que hacer esto:
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock
msgbox @texto 0x6
#org @texto
= [red_fr]¿Eres [player]?

waitmsg
waitmsg es un comando que hará que no se ejcuten las siguientes lineas de código hasta que no cierren el texbox de nuestro msg.
Este comando no tiene utilizar para textos simples, pero si por ejemplo alguien dice un texto y luego hay comandos para que ese mini se mueva, el mini se moverá mientras dice el texto. Para que primero diga el texto y luego se mueva, ponemos después del comando del mensaje un waitmsg.

Release y end
release es un comando que se debe de poner para que el mini deje de estar en "lock" y vuelva a su movimiento natural. Este comando lo pondremos justo antes de finalizar el script. Si ponemos un lock y no ponemos un release, el jugador se quedará bloqueada y no se podrá continuar el juego.
¿Y si he puesto lockall? Entonces tendrás que poner releaseall en vez de release.
Y en comando end es el que indica que nuestro código a terminado y que el jugador vuelve a ser libre.
Sabiendo esto nuestro codigo tiene que quedar así:
Código:
#dynamic 0x800000
#org @inicio
faceplayer
lock
msgbox @texto 0x6
release
end
#org @texto
= [red_fr]¿Eres [player]?
Código:
#dynamic 0x800000
#org @inicio
msgbox @texto 0x2
end
#org @texto
= [red_fr]¿Eres [player]?

Compilar
Hemos finalizado nuestro script. Ahora le daremos al botón de compilar y nos saldrá un cuadro como este:

El cuadro nos indica que offset libre fué asignado a cada @.
Nos vendrá marcado el offset principal (El del primer #org), y le tendremos que dar a copiar. Ahora pegamos nuestro offset en el cuadro "Script offset"
de nuestro mini en AM y ya lo tendremos.
A mí me ha quedado tal que así:


Preguntas frecuentes
¿Por qué mi jugador se queda bloqueado?
Posiblemente te falte el comando release o no has puesto el comando end
He compilado bien el script pero no me funciona
Asegúrate que dejas los dos primeros ceros como ceros en la casilla "script offset" del AM.
El mini me dice cosas que no le he puesto
Posiblemente se hayan asignado offset erróneos o tu mini está bugeado.
Asegúrate de que tienes #dynamic 0x800000 bien puesto. En caso de que persista el bug, borra el mini y crea otro, poniéndole el mismo offset principal.
He compilado, he abierto el script, lo he modificado y vuelto a compilar y ahora tengo bugs
Cuando abres un script compilado, le añades comandos y lo vuelves a compilar estás provocando que el offset almacene más datos de los que en un principio le fueron asignados, y esto causa bugs no solo en tu script sino en otros scripts con offsets de números cercanos.
Cuando se modifica y es para sustituir comando del miso tamaño o para cambiar un número o una letra no importa que compilemos tal cual. Pero si lo que quieres es añadir nuevos comandos, lo que tienes que hacer es asignar nuevos offsets. Para esto volverás a escribir arriba del todo #dynamic 0x800000 y sustituirás los offsets por nombre con @, (como si estuvieras haciendo un script desde el principio). De esta forma generarás nuevos offsets para el script y no bugearás el script ni otros scripts.
Algunos mensajes me salen de un color que no he puesto
Al menos en Fire Red, algunos minis con los que interaccionamos tienen un color de texto predeterminado. Si quieres poner otro color simplemente pon el comando especial correspondiente al color que quieras antes del texto.
Mi advanced map 1.95 en español tiene bugs
El AM 1.95 es español suele tener algunos bugs de texto, lo mejor instalarlo en lenguaje inglés, de esta forma no te dará ningún problema.

TAREA
tendréis que entregar un script donde habléis con un minisprite y os pregunte sobre vuestro rival. Luego en texto de color amarillo/naranja preguntará sobre el estado de salud de vuestra madre
Código:
#dynamic 0x800000
'---------------
#org @start
faceplayer
lock
msgbox @texto 0x6
release
end
#org @texto
= Niña: Hola, qué tal te encuentras?\nSe te ha pasado ya el enfado\lcon [rival]?\l[player]: Prefiero no hablar de ese\ltema...\l[orange_fr]Niña: Y qué tal se encuentra tu\lmadre? Le ha bajado la fiebre?
*Plazo de entrega máximo para el martes, este día incluido
@Tervaxx @Toni @Neon Skylar @AwesomeCS @Jaizu @RafaSc3 @~Nozz~ @LluviaElemental @AlexanderWWE @AlejoCr @Luna @Axnez @wenston91 @KaycerWolf @jfem
Última edición: