Registrarse

Problema con un script

Estado
Cerrado para nuevas respuestas.
Hola! Estoy intentando hacer un script de gatillo en el que al llegar a la salida de la casa tu madre te pare y te de un Pokémon.

Este es el script:

#dynamic 0x0D7C983
#org @start
lock
faceplayer
checkflag 0x800
if 0x1 goto @end
applymovement 0x1 @mov
waitmovement 0x0
applymovement 0xFF @movFF
waitmovement 0x0
msgbox @talk1 0x6
givepokemon 0x151 0x5 0x0 0x0 0x0 0x0
fanfare 0x13E
waitfanfare
msgbox @name 0x5
compare LASTRESULT 0x1
if 0x1 gosub @Nickname
msgbox @talk2 0x6
applymovement 0x1 @mov2
waitmovement 0x0
setflag 0x800
release
end

#org @mov
#raw 0x56 0x08 0x08 0x0B 0x0B 0x0B 0x0B 0x0B 0xFE

#org @movFF
#raw 0x02 0xFE

#org @talk1
= Good morning, \v\h01!\pI hope that little tremor hasn't\nscared you. Although I guess at\lthis point you're pretty much used\lto it.\pWell, forget about that! What's\nimportant is that you're going on\la journey today!\pAs you have no Pokémon, I thought\nyou'd enjoy taking with you that\lPokémon that I caught for you to\lplay with when you were little.

#org @name
= Give a nickname to the obtained\nElectrike?

#org @Nickname
special 0x9E
return

#org @talk2
= Now that you have your own\nPokémon, why don't you go see\lProfessor Birch?

#org @mov2
#raw 0x0A 0x0A 0x0A 0x0A 0x0A 0x09 0x09 0x03 0xFE

#org @end
release
end

Todo funciona a la perfección, excepto por el detalle de que cuando me pregunta si quiero ponerle un mote a Electrike, si le digo 'No' se ejecuta el @talk2 pero si le digo 'Sí' entonces le pongo el mote y cuando termino el mini de la madre se queda uno o dos segundos parado y se salta el @talk2 pasando directamente al @mov2... Alguien sabe qué está mal? Al principio pensé que podía deberse a que en lugar de gosub hubiese utilizado goto, pero cuando fui a comprobarlo todo estaba bien.

No sé por qué en el spoiler sale @Nick name' pero en el script lo tengo junto.
 

Javi4315

Babyface
Miembro de honor
Claro, el return de "@nick name" te devuelve al gosub que te mandó allí, por eso se ejecuta esa parte. Lo que tienes que hacer es cambiar el return por un goto/call para mandar a otro sitio, creo que es lo más fácil.
 
Javi4315♪;223353 dijo:
Claro, el return de "@nick name" te devuelve al gosub que te mandó allí, por eso se ejecuta esa parte. Lo que tienes que hacer es cambiar el return por un goto/call para mandar a otro sitio, creo que es lo más fácil.
Y cómo tendría que hacer eso? Es que aprendí a hacer scripts ayer, así que no se usar call muy bien. Después de calmbiar gosub por goto qué cambio tendría que hacer? Dónde y cómo pongo el call?
 

Javi4315

Babyface
Miembro de honor
Sí, mira, tú has puesto esto:

#org @Nick name
special 0x9E
return
Como te he dicho, ese return vuelve hacia atrás. Entonces, puedes quitar ese return y seguir directamente el script ahí, o poner un goto/call a otro pointer. Funciona así:

goto @(pointer)

Es sencillo, aunque si no tienes experiencia con los scripts, quizás cueste un poco.
 
Javi4315♪;223366 dijo:
Sí, mira, tú has puesto esto:



Como te he dicho, ese return vuelve hacia atrás. Entonces, puedes quitar ese return y seguir directamente el script ahí, o poner un goto/call a otro pointer. Funciona así:

goto @(pointer)

Es sencillo, aunque si no tienes experiencia con los scripts, quizás cueste un poco.
Es que lo que no sé hacer es poner el call. O sea, eso quedaría así?

Código:
#org [MENTION=24618]Nick[/MENTION]name
special 0x9E
goto @talk2
Y el call dónde y cómo lo pongo? Es que el call creo que se pone callxoffset y no se que offset poner ahi, ni donde poner el call. Digamos que no entiendo cómo se conectan el goto y el call.
 

Javi4315

Babyface
Miembro de honor
Es que lo que no sé hacer es poner el call. O sea, eso quedaría así?

Código:
#org [MENTION=24618]Nick[/MENTION]name
special 0x9E
goto @talk2
Y el call dónde y cómo lo pongo? Es que el call creo que se pone callxoffset y no se que offset poner ahi, ni donde poner el call. Digamos que no entiendo cómo se conectan el goto y el call.
Vamos a ver. El call y el goto son comandos distintos, pero que funcionan prácticamente igual, por eso digo que puedes usar el que quieras de los dos. Pero es que me estás liando, si quieres que se vea el msgbox @talk2, entonces deja el return ¿No?
 
Javi4315♪;223403 dijo:
Vamos a ver. El call y el goto son comandos distintos, pero que funcionan prácticamente igual, por eso digo que puedes usar el que quieras de los dos. Pero es que me estás liando, si quieres que se vea el msgbox @talk2, entonces deja el return ¿No?
Es que tal y como está debería funcionar, con el gosub y el return. De hecho en otro script que había usado como prueba sí que funcionaba perfectamente.

#dynamic 0x80000

#org @inicio
lock
checkflag 0x800
if 0x1 goto @inicio2
applymovement 0x3 @mov
waitmovement 0x3
applymovement 0xFF @mov2
waitmovement 0xFF
msgbox @mensaje 0x2
givepokemon 0x151 0x5 0x0 0x0 0x0 0x0
fanfare 0x13E
waitfanfare
faceplayer
msgbox @name 0x5
compare LASTRESULT 0x1
if 0x1 gosub @Nickname
msgbox @mensaje3 0x2
setflag 0x800
release
end

#org @mov
#raw 0x0A 0x0A 0x0A 0x0A 0x0A 0x0A 0xFE

#org @mov2
#raw 0x03 0xFE

#org @mensaje
= He oído que quieres ir de viaje\ncon Pokémon, pero no tienes\lninguno que puedas usar.\p¡Así que te he conseguido este!

#org @name
= ¿Quieres darle un mote a este\nElectrike?

#org @Nickname
special 0x9E
return

#org @mensaje3
= ¡Ahora tú también podrás ser\nEntrenador Pokémon!\pEspero que ese Electrike y tú os\nhagáis buenos amigos.

#org @inicio2
release
end
 

Sayer301!

UnityLord!
Miembro de honor
bueno, yo basandome en tu script inicial, no en el ultimo que has puesto he dado con lo que creo que es la clave.

#dynamic 0x0D7C983
#org @start
lock
faceplayer
checkflag 0x800
if 0x1 goto @end
applymovement 0x1 @mov
waitmovement 0x0
applymovement 0xFF @movFF
waitmovement 0x0
msgbox @talk1 0x6
givepokemon 0x151 0x5 0x0 0x0 0x0 0x0
fanfare 0x13E
waitfanfare
msgbox @name 0x5
compare LASTRESULT 0x1
if 0x1 gosub @Nickname
XXXXXXXXXXXX
msgbox @talk2 0x6
applymovement 0x1 @mov2
waitmovement 0x0
setflag 0x800
release
end

#org @mov
#raw 0x56 0x08 0x08 0x0B 0x0B 0x0B 0x0B 0x0B 0xFE

#org @movFF
#raw 0x02 0xFE

#org @talk1
= Good morning, \v\h01!\pI hope that little tremor hasn't\nscared you. Although I guess at\lthis point you're pretty much used\lto it.\pWell, forget about that! What's\nimportant is that you're going on\la journey today!\pAs you have no Pokémon, I thought\nyou'd enjoy taking with you that\lPokémon that I caught for you to\lplay with when you were little.

#org @name
= Give a nickname to the obtained\nElectrike?

#org @Nickname
special 0x9E
return

#org @talk2
= Now that you have your own\nPokémon, why don't you go see\lProfessor Birch?

#org @mov2
#raw 0x0A 0x0A 0x0A 0x0A 0x0A 0x09 0x09 0x03 0xFE

#org @end
release
end

Se ve claramente el XXXXXXX en rojo no?
Pues hay dos opciones, como no lo tengo muy claro del todo tendrás que probar a ver con cual te funciona.

Prueba a sustituir el XXXXX por uno de estos dos comandos:

-Closeonkeypress

-Nop

Prueba uno y luego otro, no los dos juntos ehh. De todas formas tienes muy raro lo del mote, creo que como lo haces, al abrir la pantalla del mote ¿no te sale la imagen del pokemon no?
 
bueno, yo basandome en tu script inicial, no en el ultimo que has puesto he dado con lo que creo que es la clave.

[...]
Pues ninguno de los dos comandos me ha funcionado =/ no cambia nada en el juego. Si le digo que sí a ponerle mote, cuando salgo de la pantalla de mote el mini de la madre se queda parado mirando al jugador hasta que le doy a la A y entonces se aplica el applymovement y vuelve a moverse a donde estaba al principio del script. Pero sin decir el segundo texto...

Respecto a tu pregunta, sí, en la pantalla del mote me sale la imagen del Pokémon.
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Necesitas un waitspecial.
PD: Para otra vez, la mejor fuente siempre son los scripts originales, en este caso los del laboratorio en el ROM de FR:
Código:
#org 0x1a74eb
fadescreen 0x1
special 0x9e
waitspecial
return
 

Cheve

MoonLover~
Miembro de honor
Puedes usar un waitspecial como dice cosarara o un waitstate también deberia funcionar :) Es que sino la Rom sige ejecutandose en vez de esperar a que le des el nickname de tu pokémon ;)
 
Con el waitspecial el XSE 1.1.1 me dice 'Palabra clave desconocida "waitspecial" en la linea 39'... El waitstate me lo reconoce pero no funciona T_T
 

Cheve

MoonLover~
Miembro de honor
Se llama waitstate ._. xD

Y pues si no es eso no me doy cuenta de qué es :C
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Prueba a añadir un closemsg (que no se si se llama así en xse, es el 0x68) después del waitstate. Es lo que hace el script del profesor con un salto en medio.
 
Estado
Cerrado para nuevas respuestas.
Arriba