Registrarse

[RH - Scripting] que estoy haciendo mal (Otra vez)?

Estado
Cerrado para nuevas respuestas.

Robe

Artista digital y game dev
hola a todos, espero que esten bien.
llevo alto rato tratando de hacer un script de gatillo que verifique que tenga el equipo pokemon activo para poder pasar de el inicio.
bueno veran.
hace tiempo (1 mes exactamente) una personita muy chula con la cual estoy muy agradecida
que es @Lunos, quien me hice este script pulido de uno que yo habia hecho en aquel entonces.
y pues en este escript lo que hacia era darme un pokemon (que en mi caso en mi rom era un mankey al lv5) y tambien me activaba el equipo pokemon con la falg 0x828.
lo que trate hacer yo para no ocasionar problemas en la rom fue hacer un script de gatillo que lo que hacia era verificar que esta flag estuviese activa, pero habia un erro lo cual hacia que la rom se quedara cogelada.
me gustaria que alguien me ayude, ya que no cuento con un equipo y estoy haciendo el hack solito.
aqui les dejo el script:
Código:
#dynamic 0x800000

#org @inicio
checkflag 0x828
if 0x1 goto @activada
msgbox @texto1 0x6
applymovement 0xFF @mover
end

#org @activada
msgbox @texto2 0x6
end
release

#org @texto1
= Mi madre dijo que revisara\nla caja en mi habitacion.\ldebo apurarme

#org @mover
#raw 0x10
#raw 0x12
#raw 0x12
#raw 0x12
#raw 0x12
#raw 0x11
#raw 0xFE

#org @texto2
= vamos a la aventura
no ce si esta bien, asi que xfa alguien ayudeme :'c
 

hacanoca

Héroe de WaH
Hola.
Pues te comento varias cositas
1. Algunos errores ortográficos: "habitación", ". Debo apurarme.", "Vamos a la ave..."
2. Un detalle que no creo que esté afectando: tienes el "release" luego del "end", por lo que no se está leyendo; lo otro, es que nunca hiciste un "lock", así que no sé que tan importante sea el "release"
3. Ahora, lo que sí creo que está causando el error:
Te falta un "waitmovement 0x0" luego del comando del "applymovement", sería así:

....
applymovement 0xFF @mover
waitmovement 0x0
end
...
En general, si mueves a la persona "FF" el "waitmovement" debe ser con la misma persona:
"waitmovement 0xFF"; pero el "waitmovement 0x0" funciona para cualquier persona que uses, y te evita estar pendiente de esa numeración, así que lo recomiendo.

Si no colocas el "waitmovement", el script queda esperando ese comando que le indique como el "fin" de ese movimiento, y si no estoy mal, lo que pasa es eso, que el juego se queda congelado.

4. No estás cambiando el valor de la variable que activa el script de gatillo, por lo que, en caso de que el menú PKMN esté activado, cada vez que pases por esa casilla, saldrá el mensaje de "Vamos a la aventura"

Para solucionar eso basta con agregar un addvar 0xYYYY 0x1 aquí:
....
#org @activada
msgbox @Texto2 0x6
addvar 0xYYYY 0x1
release
end
.....
Donde 0xYYYY es la variable que estás utilizando para activar el gatillo

Por último, en caso de que quieras mover a 2 personas simultáneamente, baste con un "waitmovement", así:

.....
applymovement 0x1 @move1
applymovement 0x2 @move2
waitmovement 0x0
....
Recomiendo poner el movimiento más demorado de último ya que, en caso de que el "move1" sea más largo que el "move2", una vez acabe el "move2" el script seguirá leyendo lo que sigue sin importar que la persona 0x1 aún no haya finalizado su movimiento (aunque teniendo claro eso también lo puedes aprovechar para crear otros efectos =P ).

Bueno, inténtalo y me comentas si se solucionó.
Espero haberme hecho entender, saludos. :blush:
 

Eddy64

Usuario de oro
Viendo los errores que comentas, yo lo solucionaria así:

Basicamente es todo lo que aplica el usuario @hacanoca (que por cierto esta muy bien explicado), con la unica diferencia que no haria falta poner la etiqueta "release" después del texto por dos motivos:

- No lleva lock al principio, por lo que ningun sprite bloqueara su movimiento (a no ser que quieras que todos los sprites se paren con la etiqueta "lockall", pero eso es otra historia.. jeje)

- Es un script de gatillo, por lo cual no vas a hablar con una persona si no que va a saltar cuando pases por encima de él.

#dynamic 0x800000

#org @inicio
checkflag 0x828
if 0x1 goto @activada
msgbox @texto1 0x6
applymovement 0xFF @mover
waitmovement 0x0
end

#org @activada
addvar 0x"variable_utilizada_para_script" 0x"valor_de_salida_del_script"
msgbox @texto2 0x6
end

#org @texto1
= Mi madre dijo que revisara\nla caja en mi habitacion.\ldebo apurarme

#org @mover
#raw 0x10
#raw 0x12
#raw 0x12
#raw 0x12
#raw 0x12
#raw 0x11
#raw 0xFE

#org @texto2
= vamos a la aventura
Cualquier duda en la que pueda ayudar no dudes en preguntarme ;)

Un saludo!
 

Robe

Artista digital y game dev
Viendo los errores que comentas, yo lo solucionaria así:

Basicamente es todo lo que aplica el usuario @hacanoca (que por cierto esta muy bien explicado), con la unica diferencia que no haria falta poner la etiqueta "release" después del texto por dos motivos:

- No lleva lock al principio, por lo que ningun sprite bloqueara su movimiento (a no ser que quieras que todos los sprites se paren con la etiqueta "lockall", pero eso es otra historia.. jeje)

- Es un script de gatillo, por lo cual no vas a hablar con una persona si no que va a saltar cuando pases por encima de él.



Cualquier duda en la que pueda ayudar no dudes en preguntarme ;)

Un saludo!
ok veamos.
entonces donde hay que poner una raibale podria usar la 4010 en 0x1?
o como le hago?

lo probe y no funciona :'c
 

hacanoca

Héroe de WaH
Pues si es la variable que quieres usar para ese evento, sí.
Debes estar muy segura de los valores con los que vayan trabajando las vbles.
En teoría, todas las vbles seguras inician con valor de 0x0.
Una cosa es que vi este tema y mencionan que las vbles seguras van de la 0x4011 a la 0x40FF. Así que por si las moscas, mejor probar con otra.
Bueno, digamos que trabajaremos con la 0x40FF; se ve que el evento es al inicio del juego, así que asumo que esa variable la tendrás en 0x0.
Entonces en A-Map lo configuras así:


Y ya, así, el evento se activará cuando la vble 0x40FF esté con valor 0x0.
Lo otro es en el script, poner el "addvar 0x40FF 0x1" o bien "setvar 0x40FF 0x1", en el punto que te mencioné antes.
Así, una vez el script verifique que ya tienes tu PKMN, aumentará el valor de la vble en 1, o bien establecerá el valor de la vble en 1 (depende de si usas addvar o setvar), de esta forma cuando vuelvas a pasar por allí, el evento no se activará nuevamente pues el valor de 0x40FF ya no es 0x0.
Por si no los has visto, te recomiendo los tutoriales de Javi, son muy buenos.
Estos tutoriales
Nos vemos:D
 

Eddy64

Usuario de oro
Con la explicacion de @hacanoca deberia de funcionar sin problema!

Mi recomendacion es poner un setvar 0xvalor_de_salida de la lista de "variables seguras" por dos razones

-Pone la variable en el valor de salida y te puede ahorrar muchos quebraderos de cabeza en un futuro.

-La variable puede ser usada por otro aspecto del juego y podria modificar su valor, por lo que el evento podria volver a repetirse (un ejemplo de ello es la variable 0x800F que si no me confundo cambia a razon de la ultima persona con la que hablaste).

En este caso te funcionara ya que el script es simple y no tiene mas fases, pero si por ejemplo pones que el script salte cuando la variable que tu hayas puesto tenga un valor (por ejemplo 0x0) y quieres que salga en un punto determinado antes de que se ejecute todo el script (por ejemplo tienes un item pero no otro y el script no debe seguir ejecutandose) pondrias un setvar y a correr! jeje

Ejemplo de lo que te digo:

VAR utilizada: 0x400F (por ejemplo)
Valor de entrada de script (valor con el que se ejecuta): 0x0
Valor de salida del script: 0x2

#dynamic 0x800000
#org @inicio
checkitem 0x1 0x2 "Comprueba si tienes el item 1 de la lista de items 2 veces (dos pokeballs por ejemplo)
compare lastresult 0x5 "No tienes cantidad 2 de ese item
goto @salir_sin_comprobar "Salta a la etiqueta salir_sin_comprobar
addvar 0x400F 0x1 "Añade 1 al valor actual de la variable (0+1=1)
checkitem 0x2 0x1 "Comprueba si tienes el item 2 de la lista de items 1 vez (dos master balls por ejemplo)
compare lastresult 0x5 "No tienes cantidad 1 de ese item
goto @salir_sin_comprobar "Salta a la etiqueta salir_sin_comprobar
add 0x400F 0x1 "Añade 1 al valor actual de la variable (1+1=2)
end "El script termina, y como ha alcanzado el valor de salida no se vuelve a ejecutar.

@org salir_sin_comprobar
setvar 0x400F 0x2 "Pone la variable en el valor de salida independientemente del valor que tuviera anteriormente y termina el script ya que hay algun item que no tienes o no tienes dicho valor
end "El script termina, y como ha alcanzado el valor de salida no se vuelve a ejecutar.
Como puedes ver, hay diferentes situaciones en las que puedes poner setvar o addvar, todo depende de la situacion.

Es un poco lioso si no tienes mucha experiencia, pero con tiempo y dedicacion seguro que lo entiendes a la perfeccion :)

Espero haberte ayudado y te digo lo mismo que antes, si tienes cualquier duda avisa.. un saludo!
 
Última edición:

Robe

Artista digital y game dev
hola.
gracias @hacanoca y @Eddy64 por haberme ayudado con este problema :'3
ya pude hacerlo bien gracias a la ayuda de ustedes dos.
los quiero :'3:lovelon::lovelon::lovelon::lovelon::lovelon::lovelon:
bueno, cuidense.
 
Estado
Cerrado para nuevas respuestas.
Arriba