Registrarse

[RH - Scripting] Ayuda con un script

Estado
Cerrado para nuevas respuestas.
Holap, a ver; estoy empezando a hacer scripts y este es mi primero un poco largo. Es un script de gatillo que se supone que tendría que activar un evento en el que el jugador anda, se encuentra unos científicos, hablan y se van, pero no. Cuando activo el flag 202 (que tendría que dejar disponible el evento) y voy a la zona en el que se tendría que activar (que está entre dos rutas) el juego se congela ¿:. :

#dynamic 0x800000

#org @inicio
checkflag 0x202
if 0x1 goto @evento
release
end

#org @evento
checkflag 0x207
if 0x1 goto @yasehizoneno
clearflag 0x203
setflag 0x203
hidesprite 0x3
clearflag 0x204
setflag 0x204
showsprite 0x4
clearflag 0x205
setflag 0x205
showsprite 0x5
clearflag 0x206
setflag 0x206
showsprite 0x6
applymovement 0xFF @movimientoplayer
waitmovement 0xFF
msgbox @texto 0x6
applymovement 0x4 @movimiento4
applymovement 0x5 @movimiento5
applymovement 0x6 @movimiento6
waitmovement 0x6
clearflag 0x204
setflag 0x204
hidesprite 0x4
clearflag 0x205
setflag 0x205
hidesprite 0x5
clearflag 0x206
setflag 0x206
hidesprite 0x6
setflag 0x207
release
end

#org @movimientoplayer
#raw 0x63 '?
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0xFE 'End

#org @texto
= [red_fr]Científico: ¡Venga! ¡Tenemos que\nir a la Gruta Submarina!

#org @movimiento4
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0xFE 'End

#org @movimiento5
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0xFE 'End

#org @movimiento6
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0x12 'Walk Left
#raw 0xFE 'End

#org @yasehizoneno
release
end

Seguramente el fallo sea una tontería pero no lo doy encontrado '^^
Por cierto antes de ese script tengo otro para que los científicos se oculten y no se vean cuando el jugador pasa por la ruta la primera vez, pero no creo que tenga nada que ver... por si acaso lo dejo:

#dynamic 0x800000

#org @inicio
setflag 0x204
hidesprite 0x4
setflag 0x205
hidesprite 0x5
setflag 0x206
hidesprite 0x6
release
end
 

Katherine

Omnipresente
Miembro de honor
No identifico cual puede ser el error que está ocasionando eso, pero sí he detectado algunos errores en tu script:

1- Release solo se usa cuando utilizas el comando lock con anterioridad, el cual por cierto, solo sirve con scripts asignados a minis. Por lo tanto, carece de sentido el uso del comando lock como el release en scripts de gatillo y deberías eliminarlo de tus tres offsets.

2- No deberías usar una flag para evitar que el script de gatillo se ejecute de nuevo. Si te lees un tutorial de Scripts detenidamente, verás que cada vez que pisas la casilla que tiene el script de gatillo se asigna una variable y un valor. Lo que hace el juego es comprobar el valor de esa variable cada vez que pisas la casilla, y si coincide con el asignado, se ejecuta el script. Por tanto, si cambias el valor de la variable asignada a cualquier otro cuando quieras desactivarlo no se volverá a ejecutar nunca más el script asignado a este y te ahorraras el uso innecesario de una flag, las cuales son muy preciadas y escasas y es mejor reservar para otro tipo de tareas como la desaparición de minis.

3- Respecto a las dos primeras líneas del offset @evento:

Código:
[PLAIN]checkflag 0x207
if 0x1 goto @yasehizoneno[/PLAIN]
Estás haciendo un goto a un offset que está vacío:

Código:
#org @yasehizoneno
release
end
No es una buena práctica hacer un if goto a un offset el cuál está vacío (con un release que como he explicado en la primera razón, no hace absolutamente nada). Es mejor que las anteriores dos líneas las muevas antes del end en el offset de inicio (eliminando el release, por supuesto, y también el setflag que he dicho que es innecesario ya que los scripts de gatillo comprueban el valor de la variable antes de ejecutarse cada vez).

Intenta realizar estos cambios y si el problema persiste lo probaré directamente en una ROM para identificar el problema. Si no has entendido alguna de mis explicaciones te recomiendo revisar el apartado de scripts de gatillo de algún tutorial de scripts.

¡Nos vemos! Miau revoir~.
 
No identifico cual puede ser el error que está ocasionando eso, pero sí he detectado algunos errores en tu script:

1- Release solo se usa cuando utilizas el comando lock con anterioridad, el cual por cierto, solo sirve con scripts asignados a minis. Por lo tanto, carece de sentido el uso del comando lock como el release en scripts de gatillo y deberías eliminarlo de tus tres offsets.

2- No deberías usar una flag para evitar que el script de gatillo se ejecute de nuevo. Si te lees un tutorial de Scripts detenidamente, verás que cada vez que pisas la casilla que tiene el script de gatillo se asigna una variable y un valor. Lo que hace el juego es comprobar el valor de esa variable cada vez que pisas la casilla, y si coincide con el asignado, se ejecuta el script. Por tanto, si cambias el valor de la variable asignada a cualquier otro cuando quieras desactivarlo no se volverá a ejecutar nunca más el script asignado a este y te ahorraras el uso innecesario de una flag, las cuales son muy preciadas y escasas y es mejor reservar para otro tipo de tareas como la desaparición de minis.

3- Respecto a las dos primeras líneas del offset @evento:

Código:
[PLAIN]checkflag 0x207
if 0x1 goto @yasehizoneno[/PLAIN]
Estás haciendo un goto a un offset que está vacío:

Código:
#org @yasehizoneno
release
end
No es una buena práctica hacer un if goto a un offset el cuál está vacío (con un release que como he explicado en la primera razón, no hace absolutamente nada). Es mejor que las anteriores dos líneas las muevas antes del end en el offset de inicio (eliminando el release, por supuesto, y también el setflag que he dicho que es innecesario ya que los scripts de gatillo comprueban el valor de la variable antes de ejecutarse cada vez).

Intenta realizar estos cambios y si el problema persiste lo probaré directamente en una ROM para identificar el problema. Si no has entendido alguna de mis explicaciones te recomiendo revisar el apartado de scripts de gatillo de algún tutorial de scripts.

¡Nos vemos! Miau revoir~.
Gracias por la explicación :), no sé como pero he estado toqueteándolo todo y el evento ya se activa :boogie:, pero no cuando yo quiero. Yo busco que el jugador pase por el script de gatillo antes y que no se active, que al otro lado haga una acción y que al volver si suceda el evento. Tenía pensado hacerlo con flags pero ahora ya no sé... lll-_-
 

Katherine

Omnipresente
Miembro de honor
Gracias por la explicación :), no sé como pero he estado toqueteándolo todo y el evento ya se activa :boogie:, pero no cuando yo quiero. Yo busco que el jugador pase por el script de gatillo antes y que no se active, que al otro lado haga una acción y que al volver si suceda el evento. Tenía pensado hacerlo con flags pero ahora ya no sé... lll-_-
Entonces lo que tendrás que hacer es asignar al script de gatillo un valor que la variable no tenga por defecto y después modificarlo al que esté asignado.

Es decir, deberás usar una variable libre ($4011-40FF) y en el valor de la variable, poner cualquier valor que no sea $00, como por ejemplo: $01. Entonces, una vez pases por encima de ese script de gatillo no se ejecutará, ya que esas variables libres tienen por defecto el valor $00. En medio del script que hará que se active después el script de gatillo deberás poner lo siguiente (en este caso usando la variable $4011):

Código:
setvar 0x4011 0x1
De esta forma, cuando vuelvas atrás, se ejecutará el script de gatillo, pero no lo hará desde un principio.

¡Nos vemos! Miau revoir~.
 
Entonces lo que tendrás que hacer es asignar al script de gatillo un valor que la variable no tenga por defecto y después modificarlo al que esté asignado.

Es decir, deberás usar una variable libre ($4011-40FF) y en el valor de la variable, poner cualquier valor que no sea $00, como por ejemplo: $01. Entonces, una vez pases por encima de ese script de gatillo no se ejecutará, ya que esas variables libres tienen por defecto el valor $00. En medio del script que hará que se active después el script de gatillo deberás poner lo siguiente (en este caso usando la variable $4011):

Código:
setvar 0x4011 0x1
De esta forma, cuando vuelvas atrás, se ejecutará el script de gatillo, pero no lo hará desde un principio.

¡Nos vemos! Miau revoir~.
¡Conseguido! Muchas gracias por tu ayuda :blush: (no me creo que haya conseguido hacer esto jajaja)
 
Estado
Cerrado para nuevas respuestas.
Arriba