[RH - Scripting] [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox


Like Tree22Gracias
 
 
Herramientas Desplegado
  #1  
03/07/2016
Predeterminado [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox


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

Imagen



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

imagen



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
Con este comando empezaremos todos nuestros scripts. Lo que hace es buscar offsets libres de datos para que se guarden los nuestros. Esos offsets los buscará a partir del numero 800000 porque así lo hemos puesto en dynamic. En Fire Red podéis poner 0x700000 ya que desde este offset hay muchos que están libres y podemos usar.

Cuando ponemos #dynamic 0x800000 sustituirá las palabras que empiecen por "@" por un offset libre. Por ejemplo:

Código:
#dynamic 0x800000

#org @inicio
Cuando compilemos nuestro script gracias al #dynamic se sustituirá el "@inicio" por un offset libre. Cuando cuando abramos nuestro script desde el AM veremos que se ha convertido en esto:

Código:
#org 0x800000
El #dynamic 0x800000 desaparecerá y el @inicio se ha sustituido por 0x800000 porque este offset está libre. IMPORTANTE: DESPUÉS DEL @ PONER UNA PALABRA COMPLETA. NO SE PUEDEN PONER DOS PALABRAS SEPARADAS POR UN ESPACIO PORQUE DARÁ ERROR.

¿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
¿Y nuestro mensaje?

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
Vamos a explicar lo que acabo de escribir.
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
Pese a los /n y /l que nos encontremos, en el juego se verá bien.
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)

Rojo Fuego


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]


Ruby


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]


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]?
Una vez que tenemos nuestro texto listo, ya nos podemos olvidar de nuestro #org de texto y volver a nuestro #org del offset principal.


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]?
Aunque si utilizamos el tipo de mensaje 0x2, el código puede quedar así:

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í:

imagen






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

Posible Solución


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
Gracias: KevinXDE, Toni, NozZ C y 4 más.

Última edición por Xabier2012; 14/07/2016 a las 23:37
  #2  
03/07/2016
Predeterminado Re: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Usuario:AlexanderWWE
Rom Base:Pokemon FireRed
Lección:Compilación / Evitar errores / msgbox
Scripts:

Script1

Código:
#dynamic 0x800000

#org @texto
msgbox @texto 0x2
end

#org @texto
=¿odias a [rival]?\n  [orange_fr]¿como se\lsiente tu madre?


imagenes

Código:
 

Última edición por AlexanderWWE; 03/07/2016 a las 17:38
  #3  
03/07/2016
Corazón Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Pues aqui mi tarea SENSEI

Usuario:Nozz
Rom Base:Ruby [USA]
Lección:Compilación / Evitar errores / msgbox
Scripts:

Script1

Código:
#dynamic 0x800000

'---------------
#org 0x800000
msgbox 0x880000A MSG_FACE '"Como vas con [rival]?\p[yellow_rs]..."
end


'---------
' Strings
'---------
#org 0x80000A
= Como vas con [rival]?\p[yellow_rs] y como ha estado la salud de tu madre?


Imágenes

Imágenes








Gracias: Xabier2012

Última edición por NozZ C; 03/07/2016 a las 22:03
  #4  
03/07/2016
Predeterminado Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Usuario:wenston91
Rom Base:FireRed
Lección:Evitar errores, msgbox, compilación
Scripts:

Script1

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?


Video

Video


Si en el video les da error, o esperen media hora (segun google) o denle a este link: VIDEO
Gracias: Xabier2012

Última edición por Zeon; 06/07/2016 a las 19:05
  #5  
03/07/2016
Predeterminado Re: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
@AlexanderWWE : Las dudas van en este tema: dudas

@~Nozz~ : Por favor, sigue esta estructura que acordamos en este tema: tareas y vuelvelo a entregar, gracias ^^
  #6  
03/07/2016
Predeterminado Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Usuario: Jaizu
Rom Base: Ruby
Lección: Compilación / Evitar errores / msgbox
Scripts:

Script1

Código:
'---------------
#org 0x800010
msgbox 0x880001A MSG_FACE '"¿Qué tal está tu rival España?\n[y..."
end


'---------
' Strings
'---------
#org 0x80001A
= ¿Qué tal está tu rival España?\n[yellow_rs]¿Qué tal tu madre?


Imágenes

Imágenes

Gracias: Xabier2012

  #7  
03/07/2016
Predeterminado Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Hoy ha se empieza las clases?
  #8  
03/07/2016
Predeterminado Re: Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Dicho por RafaSc3 Ver mensaje
Hoy ha se empieza las clases?
Por favor cualquier tema sobre dudas y preguntas en el tema de Dudas. Y sí, hoy domingo empiezan las clases.
  #9  
03/07/2016
Predeterminado Re: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Usuario:JFEM
Rom Base:Fire Red USA
Lección:Compilación / Evitar errores / msgbox
Scripts:

Script1

Código:
#dynamic 0x800000

#org @inicio
lock
faceplayer
msgbox @text 0x6
release
end

#org @text
= [red_fr]Desconocido:[black_fr]¡Hey!\n[player],¿Has visto a [green_fr][rival][black_fr]?\lPor cierto, [orange_fr]¿Cómo está tu\lmadre?\l[black_fr]Dale un saludo de mi parte.




Imágenes

Imágenes



Gracias: Xabier2012
  #10  
03/07/2016
Predeterminado Respuesta: [ESCUELA DE SCRIPTS] Compilación / Evitar errores / msgbox
Usuario:Toni
Rom Base:FR
Lección:Compilación / Evitar errores / msgbox
Scripts:

Script1

Código:
#dynamic 0x800000

#org @inicio
lock
faceplayer 
msgbox @texto1 0x6
release
end

#org @texto1
= Ayer ví a tu rival gary,\nIba muy enfadado por\lel combate de ayer.\lPor cierto,\l[orange_fr]¿Cómo está tu madre?



Imágenes

Imágenes

Gracias: Xabier2012

Última edición por Toni; 03/07/2016 a las 14:55
 

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 21:59.