qna_rh
Thread Id: 12768
Thread Name: [RUBY USA] Problema con script
Saludos, foro de Wah!
He aquí a un antiguo usuario que retoma de vez en cuando como hobby el rom hacking ^^ . Esta vez me encuentro con un extraño problema en un script de gatillo que he hecho para evitar el jaleo del gimnasio de Petalia y el padre mandándonos con Wally.
'---------------
#org 0x804251
compare 0x401E 0x1
if 0x2 goto 0x880427F
applymovement MOVE_PLAYER 0x8804497
waitmovement 0xFF
lock
msgbox 0x8804282 MSG_NORMAL '"Kevin: Hello there, [player]!\n Wh..."
msgbox 0x8804428 MSG_NORMAL '"Kevin: I think he got into SNOWSOF..."
setvar 0x401E 0x2
releaseall
end
'---------------
#org 0x80427F
release
end
'---------
' Strings
'---------
#org 0x804282
= Kevin: Hello there, [player]!\n What's going on?\l [player]: Hey ther Kevin, guess what, I got\n my very FIRST POKéMON!\l Now I'm going to LUSTER Town in search\n of my first badge!\l My adventure is about to start!\p KEVIN: Ehm, that's an awesome new, [player]!\n but I have to ask you a favor before you leave the city.\p [player]: What's it about?\pKEVIN: Well, you see, the son of some friends\lof mine wanted to start his own journey and\nsuddenly disappeared.
#org 0x804428
= Kevin: I think he got into SNOWSOFT Peak to get\na POKéMON.\lCould you please bring him back when you find him?
'-----------
' Movements
'-----------
#org 0x804497
#raw 0x6 'Paso Izquierda (lento)
#raw 0x6 'Paso Izquierda (lento)
#raw 0x5 'Paso Arriba (lento)
#raw 0x5 'Paso Arriba (lento)
El juego se me congela automáticamente nada más comenzar el script. He probado a darle el valor 1 a la variable que uso para que salte al script de "end", y lo reconoce y se desactiva el script (o sea, que el error debe de estar en el script grande). Pero no se me ocurre dónde. También he probado a cambiar el orden de los comandos msgbox y applymovement, por si el error venía del applymovement, pero tampoco funciona.
¿A alguien se le ocurre dónde puede estar el error?
¡Muchísimas gracias! ^__^
Lo único que se me ocurre es que, el applymovement del principio no se finaliza ya que no tiene al final:
#raw 0xFE 'End of Movements
Si no tiene eso al final, no acaba de ejecutar los movimientos y se para el juego.
Prueba a añadir lo que te he dicho y si te sigue dando problemas avísame.
Muchas gracias por tan rápida respuesta ^^
Seguramente ése fuera otro error más, pero el script sigue sin ejecutarse, congelándose el juego en el acto... no sé qué puede ser :/
Pero gracias, de veras, de no ser por eso tal vez luego me habría vuelto a dar error.
bueno amigo,si se te congela apenas empieza es por que no le pusiste una variable(VAR NUMBER en AM) AL SCRIP DE GATILLO Y TAMBIEN RECUERDA PONERLE DESCONOCIDO 03
pero revisando tu scrip, aparte de eso tambien te falta LO QUE DICE KIWi AL FINAL DE LOS MOVEMENT NO OLVIDES NUNCA EL RAW FE
saludos
Revisa las características del script de gatillo en el AM.
Si no, aunque no creo que sea eso, comprueba el valor del if.
Cierto, no me acordaba! De hecho, hace tiempo pregunté algo parecido con otro script y ya me dijeron lo mismo del Advance Map (lo de la variable y unknown=03). El script ya funciona bien, no me da problemas x)
Muchas gracias!
Postdata: importa si espero a cerrar el tema hasta mañana por si me surjen más dudas con los siguientes scripts que voy a compilar? Espero que pueda ser así.
Muchísimas gracias de nuevo ^^
Edito:
Ahora me ha surgido un error con un script de un minisprite. Se supone que yo quiero que, una vez haya hablado con él por primera vez, me diga otra cosa distinta.
El script es éste:
'---------------
#org 0x8044AD
compare 0x401E 0x3
if 0x1 goto 0x88044C5
lock
faceplayer
msgbox 0x86B1174 MSG_NORMAL '"Kevin: I think he got into\nSNOWSO..."
release
end
'---------------
#org 0x8044C5
lock
faceplayer
applymovement 0x5 0x880C1F3
msgbox 0x880C19C MSG_NORMAL
applymovement 0x5 0x880C1F6
waitmovement 0x5
applymovement 0x6 0x880C1F9
waitmovement 0x6
msgbox 0x880C1A1 MSG_NORMAL
applymovement 0x5 0x880C1FC
applymovement 0x6 0x880C22C
waitmovement 0x6
msgbox 0x880C1B0 MSG_NORMAL
applymovement 0x6 0x880C235
msgbox 0x880C1C4 MSG_NORMAL
applymovement 0x6 0x880C238
clearflag 0x816
setflag 0x816
setvar 0x401E 0x4
release
end
'---------
' Strings
'---------
#org 0x6B1174
= Kevin: I think he got into\nSNOWSOFT Peak to get a POKéMON.\lCould you please bring him back\nwhen you find him?
#org 0x80C19C
= Bla bla bla (prueba)
#org 0x80C1A1
= Adios (prueba)
#org 0x80C1B0
= Se fue (prueba)
#org 0x80C1C4
= Ahora me voy yo (prueba)
'-----------
' Movements
'-----------
#org 0x80C1F3
#raw 0x3 'Face Right
#raw 0xFE 'End of Movements
#org 0x80C1F6
#raw 0x1 'Face Up
#raw 0xFE 'End of Movements
#org 0x80C1F9
#raw 0x0 'Face Down
#raw 0xFE 'End of Movements
#org 0x80C1FC
#raw 0xA 'Step Left (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x0 'Face Down
#raw 0x10 'Delay1
#raw 0x11 'Delay2
#raw 0xA 'Step Left (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0xFE 'End of Movements
#org 0x80C22C
#raw 0x2 'Face Left
#raw 0x10 'Delay1
#raw 0x11 'Delay2
#raw 0x12 'Delay3
#raw 0x1 'Face Up
#raw 0x10 'Delay1
#raw 0x11 'Delay2
#raw 0xFE 'End of Movements
#org 0x80C235
#raw 0x20 'Step on the Spot Right (Normal)
#raw 0xFE 'End of Movements
#org 0x80C238
#raw 0x20 'Step on the Spot Right (Normal)
#raw 0x10 'Delay1
#raw 0x11 'Delay2
#raw 0xA 'Step Left (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements
Pero ni siquiera me dice lo primero. Por raro que parezca, cuando hablo con el personaje el juego dice que he encontrado un máx. revivir, el mini desaparece y vuelve a aparecer cuando me muevo. Sin sentido ninguno.
He estado mirando los parámetros del mini en Advance Map y no le veo nada raro. ¿Qué puede ser? :/
Prueba a borrar el mini y crear otro asignándole el script de nuevo.
Si sigue pasandote, postealo.
Sigue sucediendo.
Borré el mini e hice uno nuevo, y le volví a asignar el script. Pero como si no hubiese hecho nada, sigo "encontrándome un Max Revivir" cada vez que hablo con el mini.
Siento no poder aportar nada más, pero es que no sé qué puede estar fallando y ya me he quedado sin ideas :/ si lo creéis necesario, puedo incluir un pantallazo del AM.
EDITO: He probado con el mini en otro mapa y sí que funciona. O sea, que es cosa del mapa en el que estoy (Ciudad Petalia) . Pero necesito que ocurra ahí...
Gracias por todo, de verdad.
Prueba a compilarlo de nuevo en un nuevo offset, tal vez así se solucione, si te sigue dando problemas, avísame.
El script funciona bien, porque lo he probado en otro mapa, con otro mini, y no da problemas. Pero no sé qué sucede en el mapa de Ciudad Petalia que me da error.
Hola denuevo xD
Bueno lo que te sugiero es que cambies la avariable porq que yo sepa en ruvi estan libres de la 5000 para arriva, ademas para lo que quieres hacer seria mas facil usar un flag
#org 0x8044AD
lock
checflag 0xªªªª
if 0x1 goto 0x88044C5
faceplayer
msgbox 0x86B1174 MSG_NORMAL '"Kevin: I think he got into\nSNOWSO..."
release
end
.
.
.
.
setflag 0xªªªª
release
end
El problema no está en la variable... en su momento me cercioré de que esa variable no era usada por el juego; aparte, he trabajado con ella en otros scripts y no la voy a cambiar por una flag porque se me desbarata todo lo que llevo hecho, y porque usar flags es muy engorroso (acabo perdiendo la cuenta de cuáles he usado y cuáles no).
Además, eso no tiene nada que ver con el comportamiento del mini :/ pero de veras, muchas gracias por el consejo de todas formas.
Bueno, yo te lo desia porque ya me a pasado, te sugiero que agas una copia de tu rom y cambies de variable (solo para provar :) ) y luego ya tu decides
salu2!
Mándanos una captura de ese mapa, a ver si te podemos ayudar...
Respecto al primer script:
'---------------
#org 0x804251
compare 0x401E 0x1
if 0x2 goto 0x880427F
applymovement MOVE_PLAYER 0x8804497
'...
Un compare nunca va a dar 0x2, ya que el compare hace lo siguiente:
Coge lo que pone en 0x401E, y mira si es igual al segundo argumento (en tu caso 1), si son iguales devuelve 1, y si son diferentes devuelve 0.
EDIT: Pues lo debía tener mal entendido :/
Hola a todos:
Siento no haber respondido antes, pero estoy liado con un examen y unos trabajos. De momento sólo puedo responder a la segunda observación de Cosarara:
Perdóname si me equivoco, pero según tengo entendido en un tutorial que saqué o bien de éste foro o bien de la wiki de WaH, compare compara una varible con otro valor (o con el valor de otra variable) y, en función de lo que le especificas en el comando "if" que le sigue, compara que el valor de la variable especificada y aquello con que la comparas sea mayor, menor, igual, mayor o igual, menor ó igual o distinto.
Véase el ejemplo de mi script:
#org 0x804251
compare 0x401E 0x1
if 0x2 goto 0x880427F --> Aquí le estás diciendo que, si el valor de 401E es mayor que el valor 1, se vaya al script en 80427F.
applymovement MOVE_PLAYER 0x8804497
'...
Y efectivamente funciona, porque el script no se vuelve a ejecutar más.
Cuando me sea posible subiré el pantallazo del mapa. Lo haré del mapa en sí, de los eventos, del mini que me da problemas, etcétera. Si no postea nadie más después de mí, editaré este post y lo incluiré.
Muchas gracias por todo, ¡saludos!