Registrarse

¿Alguien sabe por qué se me buguea el script de gatillo?

Estado
Cerrado para nuevas respuestas.

Yainish

Usuario de platino
Hola a todos, antes de nada decir que si mi problema es un simple fail es porque soy muy reciente en el rom hacking. Así que ahora mi duda: estaba creando un script de gatillo yo contento y cuando lo tengo terminado y abro el emulador para probarlo (uso el Visual Boy) se me queda bugueado el personaje al pisarlo y no sale ningún texto. Si me podéis ayudar os lo agradecería. Esto es lo que sale una vez compilado y todo lo demás:


#dynamic 0x800000

'---------------
#org @start
checkflag 0x201
msgbox @String1 0x6 '"Mamá: ¡[player]! ¡Baja a cenar!\n[..."
setflag 0x201
release
end


'---------
' Strings
'---------
#org @String1
= Mamá: ¡[player]! ¡Baja a cenar!\n[player]: ¡Ya voy mamá!
 

Rubire4

Usuario mítico
No tiene sentido que pongas un "checkflag" si después no vas a poner un "if...". Pon la condición o quita el checkflag. Si sigue dando error avisa.
 

Katherine

Omnipresente
Miembro de honor
Aparte de que como te han mencionado, un checkflag sin if no sirve de mucho, tampoco no es correcto usar una flag en un script de gatillo (no es lo que te está ocasionando este error, pero es algo notable que hay que destacar). Si has entendido bien el funcionamiento de los scripts de gatillo, es que usan una variable y si esa variable en el momento que se pisa el script de gatillo, tiene ese valor asignado (el que pusiste en el Advance Map), llama al script. Si tiene otro valor que no es el asignado, no ocurre nada y no ejecuta el script. Así que es tan simple como cambiar el valor de la variable asignada en el script, para que así no se vuelva a repetir.

Reserva las flags para ocultar y mostrar minis, y usa las variables para condiciones, ya que tienen muchísimas más posibilidades y las flags, sólo pueden tener dos valores.

Aunque el uso del checkflag no es correcto, no sé si puede ocasionar un problema de ese tipo como congelar la rom al no tener if. Es probable que el error se deba a otra cosa y quizá es que no has configurado el script correctamente. Realiza los cambios, y si sigues teniendo problemas notifícanoslo.

¡Nos vemos! Miau revoir~.
 

Katherine

Omnipresente
Miembro de honor
He hecho todo lo que me dijisteis pero sigue apareciendo el error
Algo estás haciendo mal. Lo más probable es que el error se ocasione al estar intentando recompilar el script donde estaba el original. También me acabo de fijar que usas un release cuando no hay lock, por lo que es completamente innecesario.

Este es el script que deberías de tener:

Código:
#dynamic 0x800000
#org @inicio
msgbox @txt 0x6
setvar 0x4011 0x1
end

#org @txt
= Mamá: ¡[player]! ¡Baja a cenar!\n[player]: ¡Ya voy mamá!
El var number del script es 4011, y el var value 0. De esta forma el script tampoco se repite, ya que modifica el valor de la variable para que deje de ser 0, y así ya no vuelve a llamarlo.
Compílalo en una nueva dirección usando esa configuración y debería funcionarte perfectamente.

¡Nos vemos! Miau revoir~.
 

Bugrhak

A long time ago I used to call myself "Subzero".
Ya te respondieron, pero bueno... XD

Estás chequeando la flag, pero no decides que hacer con ese chequeo, por lo que, estas almacenando datos (el estado de la flag, por supuesto) que resultan innecesarios.
Es un error bastante grave en cuanto a eficiencia en el script y demás.

Por otra parte, ¿configuraste bien los parametros del script de gatillo?

Te recuerdo que para que se active o desactive el script, se usan variables, no flags.
 

Inferno

Miembro insignia
Miembro insignia
He hecho todo lo que me dijisteis pero sigue apareciendo el error
Los scripts de gatillo habitualmente son dirigidos a través de variables, a las cuales tu puedes ir añadiendo y restando valores.
Para ello necesitas saber unos comandos:

Código:
setvar 0x(variable) 0x(valor a fijar)
addvar 0x(variable) 0x(valor a sumar al que posee la variable)
subvar 0x(variable) 0x(valor a restar al que posee la variable)

Ejemplo:

Nosotros vamos a usar en este caso la variable 0x4000 como ejemplo

setvar 0x4000 0x2 (Le damos a la variable 4000 el valor 2)
addvar 0x4000 0x5 (Le sumamos a esa variable el valor 5, quedándose esta ahora con el valor 7)
subvar 0x4000 0x6 (Restamos a esa variable el valor 6, quedándonos ahora con que la variable ahora tiene el valor 1)
Una vez sepas manipular bien los valores de las variables necesitaras usar condicionantes para desencadenar las acciones que a ti te convengan, te paso a explicar lo que vendría a ser el checkflag pero con variables.

Código:
compare 0x(variable) 0x(valor a comparar)

compare 0x4000 0x1 (Aquí estamos comprobando si la variable 4000 tiene el valor 1) 
if 0x1 goto @tiene_valor_1 (esto quiere decir: si lo anterior es cierto (0x1) que nos lleve al puntero (lugar del script) @tiene_valor_1
Existen diferentes condiciones a la hora de comparar valores (me refiero a la hora de poner if 0x goto @algo). La lista es la siguiente:
Código:
Menor a... 0x0
Igual a... 0x1
Mayor a 0x2...
Menor o igual a... 0x3
Mayor o igual a... 0x4
Distinto de... 0x5
Una vez sepas ya al menos lo básico de las variables puedes pasar a hacer el script y a configurar la casilla Script de Gatillo en el Advance Map.
Para esto último quizás te ayude esto:

*Donde dice comprimir es compilar
2* Esto se aplica con todas las variables, esto quiere decir que aunque tu en la imagen veas que se usa la variable 4FFF cambiándola y poniendo la nuestra, en este caso la 0x4000, sería exactamente lo mismo.

Antes de hacer el script debes haber entendido el funcionamiento básico de las variables y la configuración del script de gatillo en el AM.

Te voy a dejar un script de ejemplo tomando el tuyo de base:
Código:
#dynamic 0x800000

#org @start
msgbox    [MENTION=29127]String[/MENTION] 1 0x6 '"Mamá: ¡[player]! ¡Baja a cenar!\n[..."
setvar 0x4000 0x1 (como en var value pondremos 0, al añadirle el valor 1 ya no se repetirá el script, puesto que los valores son diferentes)
end


'---------
' Strings
'---------
#org    [MENTION=29127]String[/MENTION] 1
= Mamá: ¡[player]! ¡Baja a cenar!\n[player]: ¡Ya voy mamá!

Y configurando en Advance Map de está manera debería funcionar todo perfectamente (poniendo el offset que te de en script offset obviamente):

Sé que ya te han solucionado la duda, pero espero que así te haya dejado un poco más clara la idea de variables y como funciona todo y no solo copies sin saber lo que hace.
Recuerda pasarte por el subforo de tutoriales, allí encontrarás más de uno dedicado al scripting.
Para cualquier duda no dudes en preguntar. :D
 

Yainish

Usuario de platino
Los scripts de gatillo habitualmente son dirigidos a través de variables, a las cuales tu puedes ir añadiendo y restando valores.
Para ello necesitas saber unos comandos:

Código:
setvar 0x(variable) 0x(valor a fijar)
addvar 0x(variable) 0x(valor a sumar al que posee la variable)
subvar 0x(variable) 0x(valor a restar al que posee la variable)

Ejemplo:

Nosotros vamos a usar en este caso la variable 0x4000 como ejemplo

setvar 0x4000 0x2 (Le damos a la variable 4000 el valor 2)
addvar 0x4000 0x5 (Le sumamos a esa variable el valor 5, quedándose esta ahora con el valor 7)
subvar 0x4000 0x6 (Restamos a esa variable el valor 6, quedándonos ahora con que la variable ahora tiene el valor 1)
Una vez sepas manipular bien los valores de las variables necesitaras usar condicionantes para desencadenar las acciones que a ti te convengan, te paso a explicar lo que vendría a ser el checkflag pero con variables.

Código:
compare 0x(variable) 0x(valor a comparar)

compare 0x4000 0x1 (Aquí estamos comprobando si la variable 4000 tiene el valor 1) 
if 0x1 goto @tiene_valor_1 (esto quiere decir: si lo anterior es cierto (0x1) que nos lleve al puntero (lugar del script) @tiene_valor_1
Existen diferentes condiciones a la hora de comparar valores (me refiero a la hora de poner if 0x goto @algo). La lista es la siguiente:
Código:
Menor a... 0x0
Igual a... 0x1
Mayor a 0x2...
Menor o igual a... 0x3
Mayor o igual a... 0x4
Distinto de... 0x5
Una vez sepas ya al menos lo básico de las variables puedes pasar a hacer el script y a configurar la casilla Script de Gatillo en el Advance Map.
Para esto último quizás te ayude esto:

*Donde dice comprimir es compilar
2* Esto se aplica con todas las variables, esto quiere decir que aunque tu en la imagen veas que se usa la variable 4FFF cambiándola y poniendo la nuestra, en este caso la 0x4000, sería exactamente lo mismo.

Antes de hacer el script debes haber entendido el funcionamiento básico de las variables y la configuración del script de gatillo en el AM.

Te voy a dejar un script de ejemplo tomando el tuyo de base:
Código:
#dynamic 0x800000

#org @start
msgbox     [MENTION=29127]String[/MENTION] 1 0x6 '"Mamá: ¡[player]! ¡Baja a cenar!\n[..."
setvar 0x4000 0x1 (como en var value pondremos 0, al añadirle el valor 1 ya no se repetirá el script, puesto que los valores son diferentes)
end


'---------
' Strings
'---------
#org     [MENTION=29127]String[/MENTION] 1
= Mamá: ¡[player]! ¡Baja a cenar!\n[player]: ¡Ya voy mamá!

Y configurando en Advance Map de está manera debería funcionar todo perfectamente (poniendo el offset que te de en script offset obviamente):

Sé que ya te han solucionado la duda, pero espero que así te haya dejado un poco más clara la idea de variables y como funciona todo y no solo copies sin saber lo que hace.
Recuerda pasarte por el subforo de tutoriales, allí...
Muchas gracias por la explicación.

PD: una preguntita rápida que me ha surgido
Tu has usado como ejemplo la variable 4000, entonces ¿qué valores (4000, 4001, 4002, etc.) puedo poner a las variables?
No se si me he explicado bien
 

Inferno

Miembro insignia
Miembro insignia
Una variable puede almacenar cualquier valor entre 0 y FFFF (65,536 en decimal), vamos que no vas a tener problemas de que la variable se te acabe.
Sobre cuales están libres yo siempre me he guiado de usar entre la 4000 y la 4FFF, pero mucha gente usa de la 7000 a la 7FFF, si buscas un poco podrás mirar más opciones incluso.
 
Estado
Cerrado para nuevas respuestas.
Arriba