Xabier2012
Usuario mítico


Crear un póster
Primero, creamos el evento en AM. Para eso en el apartado eventos aumentados el número de "singposts". Le damos a "change events" y nos aparecerá una "S" de color anaranjado.
En las opciones de este eventos debemos ponerlo como tipo "script", para que podamos poner nuestro offset en él. Aparte de esto, también podemos ponerlo como script pero si el jugador está mirando para cierto lado, eso ya depende de cada uno.
Para crear el script de un póster es muy sencillo, solo hay que usar el tipo msgbox 0x3. De esta forma:
Código:
#dynamic 0x800000
#org @inicio
msgbox @texto 0x3
end
#org @texto
= ¡Bienvenido a Pueblo Sol!

¿Qué es una Flag?
Las flags son elementos como las variables, solo que estas no almacenan números, sino que almacenan dos estados, activada o desactivada.
Una Flag por defecto siempre estará desactivada.

¿Para qué sirven?
Se pueden utilizar como las variables, para controlar condiciones. Por ejemplo, tenemos un mini que te da un objeto. Pues primeros miramos si la flag está activada. En caso de que no lo esté, le damos el pokémon, y en caso de que esté activada pues preguntará como está el pokémon entregado. Cuando se ejecuten los comandos de entregar el pokémon, ponemos un comando para activar la flag, de esta forma el evento de entregar el pokémon solo se hará una vez y no se repetirá constantemente. Luego nos preguntará siempre por el pokémon, porque la flag estará activada.
Podemos asignarle una flag a un minisprite en el campo "person_id". De esta forma, si activamos la flag del minisprite conseguiremos que el mini sea completamente invisible, como el profesor oak en Pueblo Paleta, que si os fijáis aparece su minisprite en medio del mapa sin embargo no lo podéis ver en el juego y lo traspasáis. Esto es porque cuando ocurre el evento de que te vas a la hierba alta, se desactiva su flag asignada.

Activando y desactivando Flags
Normalmente, se pueden usar flags desde la 100 hasta la 2FF. Muchas son utilizadas en el juego por objetos ocultos y minisprites. Estas son las más seguras de utilizar pero muchas gente utilizada flags de la 500 para arriba.
Para activar una Flag, utilizamos el comando setflag (número de flag), de esta forma:
Código:
setflag 0x200

Desactivando una flag
Una flag que esté activada se puede desactivar con el comando clearflag (número de flag). Tal que así:
Código:
clearflag 0x200

Condiciones con Flags
Se pueden hacer condiciones con las flags. Si utilizamos el comando checkflag (número de flag), el juego comprobará si una flag está activada.
Entonces es cuando nosotros podremos poner la condición if 0x1, la cual se cumplirá si la flag está activada.(La condición de estar activada se representa con if 0x1)
Vamos a comprobar si una flag está activada, y dependiendo de si lo está, que se diga un texto u otro.
Código:
#dynamic 0x800000
#org @inicio
checkflag 0x200
if 0x1 goto @activada
msgbox @texto1 0x6
end
#org @activada
msgbox @texto2 0x6
end
#org @texto1
= Está desactivada
#org @texto2
= Está activada
En caso de que esté activada iremos a @activada (if 0x1 goto @activada)
Si hemos ido a @activada nos dirán el @texto2
Si no se cumple la condición el script seguirá y se ejecutará el msgbox @texto1.

Flags vs Variables
¿Es mejor trabajar con variables o con flags para las condiciones dentro de un script?
Sin duda alguna es mejor utilizar variables, y las flags utilizarlas para hacer desaparecer objetos ocultos y minisprites.
¿Por qué?
Aparte de que creo que las flags son más valiosas, una variable da más posibilidades de hacer un script más complejo.
Por ejemplo, vamos a utilizar el script de decir un texto u otro que utilizamos arriba y lo vamos hacer con flags y con variables. Y esta vez cuando diga el @texto1 activaremos la flag o le daremos un valor a nuestra variable para que después solo nos diga el @texto2.
Con flags:
Código:
#dynamic 0x800000
#org @inicio
checkflag 0x200
if 0x1 goto @activada
msgbox @texto1 0x6
setflag 0x200
end
#org @activada
msgbox @texto2 0x6
end
#org @texto1
= Está desactivada
#org @texto2
= Está activada
Con variables: (Toda var empieza teniendo el valor 0)
Código:
#dynamic 0x800000
#org @inicio
compare 0x4000 0x1
if 0x1 goto @activada
msgbox @texto1 0x6
setvar 0x4000 0x1
end
#org @activada
msgbox @texto2 0x6
end
#org @texto1
= Está desactivada
#org @texto2
= Está activada
Como veis, podemos utilizar una variable y una flag para condiciones en scripts. Ahora bien, y si queremos que después de pasarnos la liga pokémon
el minisprite nos diga algo distinto (es un poco absurdo pero es para poner un ejemplo).
Pues en el caso de la flag tendríamos que utilizar otra flag. Activaríamos por ejemplo la flag 201 cuando nos pasemos la liga, y así en nuestro script comprobando la flag 201 sabremos si nos hemos pasado la liga y dirá el tercer texto que queremos.
Quedaría así:
Código:
#dynamic 0x800000
#org @inicio
checkflag 0x201
if 0x1 goto @ligapasada
checkflag 0x200
if 0x1 goto @activada
msgbox @texto1 0x6
setflag 0x200
end
#org @activada
msgbox @texto2 0x6
end
#org @ligapasada
msgbox @texto3 0x6
#org @texto1
= Está desactivada
#org @texto2
= Está activada
#org @texto3
= ¡Te has pasado la liga!
Gastaremos un flag más.
Si utilizamos variables, no hace falta gastar otra variable, simplemente cuando nos pasemos la liga, le daremos el valor 2 a nuestra variable, y solo tendremos que comprobar si dicha variable es mayor que uno.
Código:
#dynamic 0x800000
#org @inicio
compare 0x4000 0x1
if 0x1 goto @activada
if 0x2 goto @ligapasada
msgbox @texto1 0x6
setvar 0x4000 0x1
end
#org @activada
msgbox @texto2 0x6
end
#org @ligapasada
msgbox @texto3 0x6
#org @texto1
= Está desactivada
#org @texto2
= Está activada
#org @texto3
= ¡Te has pasado la liga!
Hemos utilizado solo una variable de forma más práctica. Y en caso de que quisiéramos poner más condiciones, podríamos estar jugando con el valor de la misma variable infinitamente (hasta el valor FFFF).
Mi consejo es que las flags las aprovechéis para objetos ocultos, no ocultos, minisprites, entrenadores ect.

Crear un objeto oculto
Primero tenemos que crear un evento como el de un póster.
En singpost type pondremos la opción 7 hidden item (objeto oculto). En la opción de abajo donde pone ID, tendremos que poner una flag que no hayamos utilizado, y en la opción de abajo es el número de objetos que te va a dar (normalmente solo se pone 1).
Cuando encontremos dicho objeto en nuestro juego, la flag que habremos puesto como id se actiará, de esta forma no podremos volver a coger el objeto oculto, por eso es importante que esa flag ya no la utilicemos para otras cosas.

Flags especiales
Los juegos de pokémon tienen unas flags especiales las cuales cuando se activan provocan que se activen un evento del juego, como las zapatillas.
Por ejemplo, en Fire Red si activamos la flag 0x82F, podremos correr con las zapatillas. También hay flags especiales para activar el menú pokémon, la pokédex y las medallas. Estas son las que hay en los tres juegos:
0x820 – Activa la primera medalla
0x821 - Activa la segunda medalla
0x822 - Activa la tercera medalla
0x823 - Activa la cuarta medalla
0x824 - Activa la quinta medalla
0x825 - Activa la sexta medalla
0x826 - Activa la septima medalla
0x827 - Activa la octava medalla
0x828 - Activa el menú Pokemon
0x829 - Activa la Pokedex
0x82F - Activa las zapatillas
0x821 - Activa la segunda medalla
0x822 - Activa la tercera medalla
0x823 - Activa la cuarta medalla
0x824 - Activa la quinta medalla
0x825 - Activa la sexta medalla
0x826 - Activa la septima medalla
0x827 - Activa la octava medalla
0x828 - Activa el menú Pokemon
0x829 - Activa la Pokedex
0x82F - Activa las zapatillas
0x800 - Activa el menu pokemon
0x801 - Activa la pokedex
0x802 - activa el pokenav
0x807 - Activa la primera medalla
0x808 - Activa la segunda medalla
0x809 - Activa la tercera medalla
0x80A - Activa la cuarta medalla
0x80B - Activa la quinta medalla
0x80C - Activa la sexta medalla
0x80D - Activa la septima medalla
0x80E - Activa la octava medalla
0x860 - Activa las zapatillas
0x801 - Activa la pokedex
0x802 - activa el pokenav
0x807 - Activa la primera medalla
0x808 - Activa la segunda medalla
0x809 - Activa la tercera medalla
0x80A - Activa la cuarta medalla
0x80B - Activa la quinta medalla
0x80C - Activa la sexta medalla
0x80D - Activa la septima medalla
0x80E - Activa la octava medalla
0x860 - Activa las zapatillas
0x860 - Activa el menu pokemon
0x861 - Activa la pokedex
0x862 - activa el pokenav
0x867 - Activa la primera medalla
0x868 - Activa la segunda medalla
0x869 - Activa la tercera medalla
0x86A - Activa la cuarta medalla
0x86B - Activa la quinta medalla
0x86C - Activa la sexta medalla
0x86D - Activa la septima medalla
0x86E - Activa la octava medalla
0x8C0 - Activa las zapatillas
0x861 - Activa la pokedex
0x862 - activa el pokenav
0x867 - Activa la primera medalla
0x868 - Activa la segunda medalla
0x869 - Activa la tercera medalla
0x86A - Activa la cuarta medalla
0x86B - Activa la quinta medalla
0x86C - Activa la sexta medalla
0x86D - Activa la septima medalla
0x86E - Activa la octava medalla
0x8C0 - Activa las zapatillas
Cuando hagáis un setflag en alguna de estas flags, hará lo que indica al lado.

Preguntas frecuentes
Activo una flag que está en el person_id de un mini, pero el mini no desaparece
El mini no desaparecerá hasta que cambiéis de mapa o refresquéis la pantalla, eso es así. Pero si utilizáis el comando hidesprite 0x(numero del mini en AM), justo antes del comando setflag, hará el efecto de desaparecer instantáneamente.
Utilizo el comando clearflag pero el mini no vuelve a aparecer en mi evento
Un mini que no está visible debido a un setflag no hace falta que hagáis un clearflag para que se visualice en vuestro script. Simplemente con el comando showsprite 0x(numero del mini en AM) podéis que hacer que aparezca en vuestro evento. Si después utilizáis un hidesprite lo haréis desaparecer y ni tendréis que utilizar ni el clearflag ni el setflag.
He perdido la cuenta de las flags o variables que estaba utilizando
Todo buen rom-hacker tiene una archivo de texto donde apunta las variables y flags que va utilizando y para qué las utilizó.

Hacer un script donde al hablar con un mini os dé la pokedex. No se podrán utilizar variables y solo se podrá aparecer el número de una flag, de decir, que si en mi script aparece la flag 0x200, puedo hacer con esa flag los comandos que quiera pero no podré utilizar otro número de flag.
Se tiene que entregar antes del miércoles.
Se tiene que entregar antes del miércoles.
@Tervaxx @Toni @Neon Skylar @rdoble @AwesomeCS @RafaSc3 @~Nozz~ @LluviaElemental @AlexanderWWE @Luna @Axnez @♦ZeØn♦ @KaycerWolf @jfem