Registrarse

[FR] Ayuda con script de gatillo

Estado
Cerrado para nuevas respuestas.
Tengo un problema con un script de gatillo, y como soy muy nuevo en el Rom-Hacking me gustaría que alguien me ayudara jajaja.
El problema es que no consigo que el mini número 11 del mapa se mueva, simplemente se muestra el texto y nada más. ¿Alguien podría decirme qué tengo mal?

Gracias, aquí dejo el código :).

Código:
#dynamic 0x800000

#org @inicio
setvar 0x1388 0x0
checkflag 0x7FFF
applymovement 0xB @comeon
waitmovement 0xB
if 0x1 goto @inicio2
msgbox @frase 0x6
setflag 0x7FFF
end

#org @comeon
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0x8
#raw 0x56
#raw 0xFE

#org @frase
= Hola

#org @inicio2
release
end
 

CelticFrostie

Sexador de pollos
¿Debería ponerla a algún otro valor la variable?

¿Lo de la flag no pasa nada por dejarlo ahí no?
Vale que las flags y variables teóricamente existan hasta FFFF, pero...

Documento de DavidJCobb sobre las flags y variables dijo:
...flags up to 900 overlap the RAM and are not safe hence to use
^ Con eso de ahí te quiero hacer ver que en una investigación sobre flags y variables se observó que las flags por encima de la 900 sobreescriben la RAM y comparten datos con variables, además esa flag que estás usando ya es enormemente alta, te recomiendo usar de 200-2FF o de 500 a 700.

Si usas FR, claro. Ahora que me fijo, en la duda que planteas no es necesario que especifiques la ROM que uses, pero por si ocurren problemas de éste tipo siempre es conveniente que des toda la información posible.

Respecto a la variable, quiero decir que para qué la usas, ¿activar el script de gatillo? ¿Otra cosa? A no ser que estés modificando el valor de una concreta ya definida en otro script en el juego, esa variable es muy baja (sí, con las variables es al revés xD)

¿Y ahora que me fijo también, la flag para qué está? Si es sólo un applymovement no es necesaria.
Además has puesto el check antes de setearla, y el if después de 2 líneas de comandos. Intenta mantener un orden en todos tus scripts, sobre todo con los comandos que activan y desactivan cosas de ese tipo, porque además de liarte jodes el script xD

Un saludo!
 
Última edición:
Vale que las flags y variables teóricamente existan hasta FFFF, pero...



^ Con eso de ahí te quiero hacer ver que en una investigación sobre flags y variables se observó que las flags por encima de la 900 sobreescriben la RAM y comparten datos con variables, además esa flag que estás usando ya es enormemente alta, te recomiendo usar de 200-2FF o de 500 a 700.

Si usas FR, claro. Ahora que me fijo, en la duda que planteas no es necesario que especifiques la ROM que uses, pero por si ocurren problemas de éste tipo siempre es conveniente que des toda la información posible.

Respecto a la variable, quiero decir que para qué la usas, ¿activar el script de gatillo? ¿Otra cosa? A no ser que estés modificando el valor de una concreta ya definida en otro script en el juego, esa variable es muy baja (sí, con las variables es al revés xD)

¿Y ahora que me fijo también, la flag para qué está? Si es sólo un applymovement no es necesaria.
Además has puesto el check antes de setearla, y el if después de 2 líneas de comandos. Intenta mantener un orden en todos tus scripts, sobre todo con los comandos que activan y desactivan cosas de ese tipo, porque además de liarte jodes el script xD

Un saludo!
Vale, a ver por partes...
La flag ya está cambiada de valor.
Uso el FireRed (versión española, ya que no quiero hacer un hack completo, solo editar algunas pequeñas cosas).
La variable la he puesto para que se active el script (hasta que no la he puesto, no se activaba). ¿Le doy un valor alto entonces?

La flag está para que una vez que se haya realizado el script no se vuelva a realizar nunca más.

Lo que quiero hacer es que al entrar en un mapa y pisar un determinado tile, en el que se encuentra el script, venga un personaje caminando y me diga un mensaje.
El resto lo cambiaré ahora :).
Gracias!
 

CelticFrostie

Sexador de pollos
Vale, a ver por partes...
La flag ya está cambiada de valor.
Uso el FireRed (versión española, ya que no quiero hacer un hack completo, solo editar algunas pequeñas cosas).
La variable la he puesto para que se active el script (hasta que no la he puesto, no se activaba). ¿Le doy un valor alto entonces?

La flag está para que una vez que se haya realizado el script no se vuelva a realizar nunca más.

Lo que quiero hacer es que al entrar en un mapa y pisar un determinado tile, en el que se encuentra el script, venga un personaje caminando y me diga un mensaje.
El resto lo cambiaré ahora :).
Gracias!
No, no. A ver, la flag es para que no se repitan scripts convencionales (no de gatillo/nivel 02/04) o eventos que se encadenan con otros scripts. Pero si quieres que un script de gatillo (en éste caso el script de gatillo) no se repita más, basta con poner setvar (recomendables 4011-40FF, aunque quizás con un poco de suerte puedas extenderte hasta 5000) y el valor 0x1, que significa que desactivas la casilla que se activa previamente al pisar el script de gatillo para que al pisar ahí el evento no se repita.

Fíjate que en la pestaña de eventos del advance mal los scripts de gatillo siempre tienen un "var value" y un "var number" asignado, ese "var number" debe ser la variable que elegiste en el script y el "var value" 0000, que equivale a 0x0.

Así funcionan todos los scripts de gatillo, y de una forma parecida (por no decir igual, al menos en ese aspecto) los scripts de nivel 02 y 04.

No sé si me explico, espero que me entiendas. Recuerda que la flag en este caso no es necesaria :D
 
No, no. A ver, la flag es para que no se repitan scripts convencionales (no de gatillo/nivel 02/04) o eventos que se encadenan con otros scripts. Pero si quieres que un script de gatillo (en éste caso el script de gatillo) no se repita más, basta con poner setvar (recomendables 4011-40FF, aunque quizás con un poco de suerte puedas extenderte hasta 5000) y el valor 0x1, que significa que desactivas la casilla que se activa previamente al pisar el script de gatillo para que al pisar ahí el evento no se repita.

Fíjate que en la pestaña de eventos del advance mal los scripts de gatillo siempre tienen un "var value" y un "var number" asignado, ese "var number" debe ser la variable que elegiste en el script y el "var value" 0000, que equivale a 0x0.

Así funcionan todos los scripts de gatillo, y de una forma parecida (por no decir igual, al menos en ese aspecto) los scripts de nivel 02 y 04.

No sé si me explico, espero que me entiendas. Recuerda que la flag en este caso no es necesaria :D
Me he decidido a borrarlo y comenzarlo desde cero, ya que gracias a ti he entendido un poco mejor las cosas :).

Ahora muestra el texto una vez y ninguna más, como yo quería:
Código:
#dynamic 0x800000

#org @inicio

msgbox @frase 0x6
setvar 0x40FF 0x1
end

#org @frase
= Hola.
Ahora bien, quiero que el evento de persona, en este caso el número 11, por lo que en el script debería llamarle 0xB, que si no me equivoco, es 11 en Hex, ¿verdad?

¿Para ello solo tengo que poner el applymovement y el wait e indicar el movimiento? ¿O necesito algo más?

---------

Edito:

He probado con este código, pero simplemente se salta el applymovement y pasa a decir el mensaje directamente, ¿alguien sabe por qué?
Código:
#dynamic 0x800000

#org @inicio
applymovement 0xB @mov
waitmovement 0xB
msgbox @frase 0x6
setvar 0x40FF 0x1
end

#org @mov
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0x8
#raw 0x56
#raw 0xFE

#org @frase
= Hola.
 
Última edición:

RedMort

Aprendiendo Decomp
Lo unico que creo que podria ocurrir es que en el mapa no haya ningun mini con el numero 11, y se lo salte (nunca he probado con algo asi)
 

CelticFrostie

Sexador de pollos
Me he decidido a borrarlo y comenzarlo desde cero, ya que gracias a ti he entendido un poco mejor las cosas :).

Ahora muestra el texto una vez y ninguna más, como yo quería:
Código:
#dynamic 0x800000

#org @inicio

msgbox @frase 0x6
setvar 0x40FF 0x1
end

#org @frase
= Hola.
Ahora bien, quiero que el evento de persona, en este caso el número 11, por lo que en el script debería llamarle 0xB, que si no me equivoco, es 11 en Hex, ¿verdad?

¿Para ello solo tengo que poner el applymovement y el wait e indicar el movimiento? ¿O necesito algo más?

---------

Edito:

He probado con este código, pero simplemente se salta el applymovement y pasa a decir el mensaje directamente, ¿alguien sabe por qué?

Código:
#dynamic 0x800000

#org @inicio
applymovement 0xB @mov
waitmovement 0xB
msgbox @frase 0x6
setvar 0x40FF 0x1
end

#org @mov
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0x8
#raw 0x56
#raw 0xFE

#org @frase
= Hola.
Mmm, prueba a poner un lock/(lockall si hay más gente moviéndose en el mapa), y antes del end un release/releaseall (lo que corresponda) :p
Por el resto no veo errores, si no espera lo suficiente ponle un pause o waitmovement 0x0 en vez de 0xB (0x0 espera a todos los minis, aunque no lo necesitas aquí, pero por probar... xD)
O como acaba de decir @RedMort, que te estés equivocando y realmente no haya mini 11 xDD
En n° de gente nunca pongas algo aleatorio, intenta que todo vaya en orden, si hay 8 minis, pues que no haya nadie con un 9 porque no te haya dado la gana de asignarle el número 0 al primero, no sé si me entiendes...

A ver si ahora te funciona.
 
Lo unico que creo que podria ocurrir es que en el mapa no haya ningun mini con el numero 11, y se lo salte (nunca he probado con algo asi)
Mmm, prueba a poner un lock/(lockall si hay más gente moviéndose en el mapa), y antes del end un release/releaseall (lo que corresponda) :p
Por el resto no veo errores, si no espera lo suficiente ponle un pause o waitmovement 0x0 en vez de 0xB (0x0 espera a todos los minis, aunque no lo necesitas aquí, pero por probar... xD)
O como acaba de decir @RedMort, que te estés equivocando y realmente no haya mini 11 xDD
En n° de gente nunca pongas algo aleatorio, intenta que todo vaya en orden, si hay 8 minis, pues que no haya nadie con un 9 porque no te haya dado la gana de asignarle el número 0 al primero, no sé si me entiendes...

A ver si ahora te funciona.
Prueba a cambiar el 0xB en el waitmov por 0x0, desde que lo pongo así no me ha vuelto a dar error. Si no es eso, comprueba lo que te dice Redmort
Saludos ^^

EDITO: @Flame Kuchiki puto. Hazle caso a lo que dice xD
Nada chicos, que no hay manera jajaja, ahora os dejo un par de screenshots para ver si es error en el advance map o algo así, y aquí os dejo el code, tal y como está ahora.



Código:
#dynamic 0x800000

#org @inicio
lockall
applymovement 0xB @mov
waitmovement 0x0
msgbox @frase 0x6
setvar 0x40FF 0x1
releaseall
end

#org @mov
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0x8
#raw 0x56
#raw 0xFE

#org @frase
= Hola.
El mapa en cuestión es el Bosque Verde del Pokémon Rojo Fuego (en español).
 

CelticFrostie

Sexador de pollos
Nada chicos, que no hay manera jajaja, ahora os dejo un par de screenshots para ver si es error en el advance map o algo así, y aquí os dejo el code, tal y como está ahora.



Código:
#dynamic 0x800000

#org @inicio
lockall
applymovement 0xB @mov
waitmovement 0x0
msgbox @frase 0x6
setvar 0x40FF 0x1
releaseall
end

#org @mov
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0xA
#raw 0x8
#raw 0x56
#raw 0xFE

#org @frase
= Hola.
El mapa en cuestión es el Bosque Verde del Pokémon Rojo Fuego (en español).
Ya me estaba rompiendo la cabeza. El ID de Persona!
Sirve principalmente para ocultar el mini tras un hidesprite, (con la flag que hayas elegido). En este caso debe estar en 0.
Y si lo fueras a ocultar, recuerda que 7FFF como flag no eh jajaja

De esta debería ir. Crucemos los dedos (?) ;)
 
Efectivamente, era eso, que tontería D:.
Aunque la duda esté resuelta, al no haber acabado el script preferiría que los Mods lo dejaran abierto, por si tengo alguna duda más no tener que abrir otro tema nuevo.
Saludos y muchas gracias a todos los que habéis contestado al tema :)
 
Estado
Cerrado para nuevas respuestas.
Arriba