Registrarse

[RH - Scripting] Cambiar la posición de un evento para siempre

Estado
Cerrado para nuevas respuestas.

Kora

Viviendo algún videojuego
Saludos!
Estoy intentando hacer que cuando se ejecute un script, una roca se mueva a la derecha, pero tengo el problema de que cuando se refresca la pantalla, vuelve a su posición inicial.

He estado pensando en ocultar el sprite y mostrar otro donde debería quedarse la roca mediante variables y tal en un script de nivel, pero no se si hay un mejor modo para hacer esto.

Como lo haceis vosotros?
Gracias de antemano! :)
 

kakarotto

Leyenda de WaH
La posicion de un evento no cambia,si no su estado.
Si te fijas en los eventos oficiales de nintendo ocurre lo mismo que tu dices,cuando refrescas pantalla vuelve a su posición inicial.

Existen flags especiales que se les puede poner para este tipo de situaciones,preguntale a Sayer.
 

Sayer301!

UnityLord!
Miembro de honor
@kakarotto la proxima vez citame, que me he enterado por casualidad.

A ver si quieres un cambio durante el Game y que este sea permanente vas a tener que tirar de Flags o de vars si o tambien.

Lo suyo es que el mapa donde esta esa roca tenga un script de nivel que compruebe X flag, si esta activada mueve la roca si no, pues no. Y la flag la activas cuando la muevas por primera vez.

Aunque realmente lo correcto es que la Roca estuviese en su posicion Final (apartada) y con el script de nivel compruebes si se ha activado la flag o no, si se ha activado no se hace nada por lo cual la roca aparecerá movida y si esta desactivada, la movemos a la posicion de bloqueo.

Los dos metodos son igual de funcionales, pero a nivel profesional es mas economica en recursos la segunda, aunque en una ROM poco recurso vas a poder quemar XD


Ahora hay otro detalle que casi se me olvida, no te vale cualquier script de nivel, y no te voy a engañar, no me acuerdo de cual era cada uno, ya hace mucho tiempo, lo que si estoy casi seguro es de que es o de tipo 03, 04 o 07, si nadie viene a aclararlo, prueba tu con los 3 tipos y coge el que consiga el efecto que mas se parezca a lo que quieres.

Espero serte de help
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Pues depende de si el efecto que quieres conseguir es algo significativo o no y si lo vas a realizar en más ocasiones, quizá te merezca la pena utilizar el comando setmapfooter, que te permitiría modificar la disposición de los elementos de un mapa sin cambiar los scripts y demás. El problema es que ahora no recuerdo si el comando setmapfooter es necesario ejecutarlo cada vez que accedes al mapa o si se queda con efecto permanente.

En caso de que fuese necesario añadirlo en un script de nivel, la opción que te brinda el tito @Sayer301! es bastante adecuada :cool:
 

kakarotto

Leyenda de WaH
Script de nivel 07 ni de coña ya que se ejecuta justo despues de abrir menu o guardar partida..etc.

Si quiere un script que se ejecute antes de nada, yo usaría el 04 aunque el 03 tambien es correcto.
 

Sayer301!

UnityLord!
Miembro de honor
Script de nivel 07 ni de coña ya que se ejecuta justo despues de abrir menu o guardar partida..etc.

Si quiere un script que se ejecute antes de nada, yo usaría el 04 aunque el 03 tambien es correcto.
Justo por eso creo que debe ser un 04 y un 07 con el mismo script, ambos, ya que cuando entras en la mochila o en la T-card tambien se refresca el mapa.

Al final pasa como con el cambio de mini con WBTO que hay que generar dos scripts de nivel... sisi.

Por otro lado ya que me pongo tiquismiquis, aprovecha que el script de nivel 04 tiene que tener una variable como condicion, para usar esa misma variable en el script de nivel de ambos y que el tipo 07 funcione tambien sin gastar mas flags o variables.
 

Kora

Viviendo algún videojuego
Aún no he podido toquetear la rom, pero quiero aclarar una cosa, y es que no solo vuelven los eventos a su posicion inicial cuando sales y entras en el mapa. Con tan solo hacer que desaparezca de tu campo de visión ya vuelven a su sitio. Lo comento por si aporta algo.
 

kakarotto

Leyenda de WaH
Hombre pero si no le asignas una flag o variable logicamente todo vuelve a su posición inicial.

Pon la roca en el mapeado como a ti te gustaria que se quedara al final.

Crea el script de nivel y haz que se situe en el punto que necesitas para interactuar con ella. Lo que se pretende conseguir con el script es que se repita siempre hasta que el valor de la variable tenga un valor determinado

Luego al salir del pueblo y volver a entrar checkea el valor de la variable y por lo tanto no haría nada y quedaría tal y como lo pusimos al principio en advance map
 

Kora

Viviendo algún videojuego
Creo que estoy mezclando conceptos y no lo estoy pillando del todo.

Quiero hacer que cuando el jugador combata con un entrenador, una roca que estaba a la izquierda se vaya a la derecha y se quede allí.

Lo que tengo que hacer es poner la piedra originalmente a la derecha y con un script de nivel, mover la piedra a la izquierda antes de que lo pueda ver el jugador. Y que cuando combata el jugador con el entrenador, mediante una variable, hacer que la piedra ya no tenga que moverse a la izquierda.

Con eso se supone que la piedra se quedaria siempre a la derecha, no? Esto solucionaria lo de salir y entrar en el mapa, pero no tengo demasiado claro si tambien solucionaria lo de que la piedra vuelve a la posicion inicial si sale de mi vision.
 
Última edición:

Kora

Viviendo algún videojuego
Nada, no consigo echar a andar esto. He intentado hacer un script de nivel que simplemente mueva a la izquierda la roca al entrar, usando el tipo 04, 03 y nada. O no se mueve la roca, peta la rom o simplemente se queda la pantalla en negro, incluso haciendo el tutorial de https://whackahack.com/foro/t-45355/tutorial-solucionar-bloqueos-en-scripts-nivel-02-a

No se que estaré haciendo mal, he hecho otros script de nivel y siempre me han ido bien, pero este no hay manera.
Aquí os dejo el script de nivel:

Código:
#dynamic 0x800000

#org @inicio
compare 0x4017 0x1
if 0x1 goto @inicio2

applymovement 0x4 @movimiento
waitmovement 0x4
release
end

#org @inicio2
release
end

#org @movimiento
#raw 0x3B 'Deslizarse Izquierda (Rapido)
#raw 0xFE 'Finalizar Movimientos
Luego en el header probé los tipos scripts que me dijisteis, poniendo tambien en la flag la variable 4017 para que se ejecute si tiene el valor 0. Supuestamente, mientras la variable 4017 tenga el valor 0 deberia irse a la izquierda, pero nada :/
 
Última edición:

Sayer301!

UnityLord!
Miembro de honor
las coordenadas como dice Kakarotto sacalas de A-Map y usa Movesprite2 para moverlo directamente a la posicion al instante, sin applymovement.

Aqui va una tonteria que no se si es verdad, pero creo recordar que para los scripts de tipo 04 no valen comandos como el applymovement donde tienes que esperar un tiempo a que se ejecute y tal, si no recuerdo mal solo funcionaban los comandos que se ejecutan al instante y no hacen esperar a la secuencia, y por eso el apply no funciona.

Por otro lado si no entiendo mal, segun tu, mientras tenga el valor 0, debería moverse a la izquierda, pero en el propio script lo que comparas es que si tiene valor 1 se mueva a la izquierda, por lo cual probablemente estes haciendo un colapso de variables curiosa, cambia el valor del comparador de 1 a 0 y prueba.
 
Hola

Te ayudaré con un ejemplo...


1)En un inicio coloco el camión donde me apetezca, como vez lo coloque afuera de la casa de la derecha.
2) Ahora lo que yo quiero es cuando luche con el gordo, el camión se vaya a la casa de la izquierda. (eso es lo que entendí que querías hacer).

Código:
#dynamic 0x700000

#org @ini
givepokemon 0x17 0x17 0x0 0x0 0x0 0x0
msgbox @1 0x6
trainerbattle 0x3 0x0 0x0 @1
msgbox @2 0x6
movesprite 0x7 0x5 0xA
end


#org @2
= Me has ganado, movere el camion.

#org @1
= Que quieres?\n...\p\nClaro que no!, no molestes...
Aquel move son las coordenadas de la casa de la izquierda, lugar donde quiero que se vaya el camión.

3) Ahora solo nos quedaría que se quede ahí para siempre, entonces usaremos un comprobante, osea
- Cuando una variable X tenga el valor de 1 eso es igual a que el camión se quede a la izquierda. - Si tiene el valor de 0 pues se queda en el lugar que lo colocamos en un principio.

pd: Puedes también usar una flag.
Ahora te lo escribiré en codigo, usare la Variable 5000

Código:
#dynamic 0x750000

#org @ini
compare 0x5000 0x1
if 0x1 call @move
end

#org @move
movesprite2 0x7 0x5 0xA
return
Este es el script de nivel, yo uso el tipo 3.


4) Y ahora en el script del gordo solo nos faltaría escribir Setvar 0x5000 0x1, quedandomé el script del gordo así:

Código:
#dynamic 0x700000

#org @ini
givepokemon 0x17 0x17 0x0 0x0 0x0 0x0
msgbox @1 0x6
trainerbattle 0x3 0x0 0x0 @1
msgbox @2 0x6
movesprite 0x7 0x5 0xA
setvar 0x5000 0x1
end


#org @2
= Me has ganado, movere el camion.

#org @1
= Que quieres?\n...\p\nClaro que no!, no molestes...
Compilas y listo, lo hice un tanto apurado tengo que ir al colegio x,d...
Si algo algo no esta entendible me avisas y lo corrijo en la tarde...


M.H.B.P
 

Kora

Viviendo algún videojuego
Nada, he hecho exactamente lo que me dijiste @Marffy y sí, consigo mover la roca, pero no sirve de nada, si me muevo por el mismo mapa acaba apareciendo de nuevo en el mismo sitio y si salgo y entro del mapa más de lo mismo. He probado el movesprite2 de @kakarotto y directamente ni mueve la roca.

Este error de que los minis desaparecen y reaparecen mientras me muevo del mapa me está volviendo loco. Y esque por más que pruebo cosas no se como solucionar lo de los minis. Y temo que lo de la roca se deba a esto.

Tengo otros scripts que cuando se ejecutan y terminan, al moverme por el mapa van desapareciendo y apareciendo a mi paso. Es como si el emulador tuviera que ir cargando los minis o algo parecido.

Tambien he leido de gente que dice que no debemos poner minis "mirando abajo". No tengo ninguno así, pero tampoco se porque lo dicen, imagino que da error, pero no se el motivo.

Estoy seguro que el problema de la roca está siendo este bug con los minis. Alguien tiene alguna idea? Porque he mirado por el foro y no he visto a nadie con un problema similar. Ayuda por favor, me estoy volviendo loco xD

Dejo aquí una prueba gráfica sobre a lo que me refiero con los minis. Al principio no desaparece ninguno, pero una vez que toco el script de gatillo y termina, todo empieza a irse al traste.

 
Última edición:

Dani_SR_17

¡Pokémon LionHeart!
A ver, lo que te han dicho no debería fallar, pero si ves que te vas a estancar tanto en esa tontería siempre puedes usar dos flags y ea.
Es algo más costoso, pero te quitas de problemas si ves que no puedes hacer nada.

Una cosa, ¿cuántos minis tienes en el mapa? El máximo de minis en pantalla es de 16, contando el del jugador.
 
Última edición:

Sayer301!

UnityLord!
Miembro de honor
Nada, he hecho exactamente lo que me dijiste @Marffy y sí, consigo mover la roca, pero no sirve de nada, si me muevo por el mismo mapa acaba apareciendo de nuevo en el mismo sitio y si salgo y entro del mapa más de lo mismo. He probado el movesprite2 de @kakarotto y directamente ni mueve la roca.

Este error de que los minis desaparecen y reaparecen mientras me muevo del mapa me está volviendo loco. Y esque por más que pruebo cosas no se como solucionar lo de los minis. Y temo que lo de la roca se deba a esto.

Tengo otros scripts que cuando se ejecutan y terminan, al moverme por el mapa van desapareciendo y apareciendo a mi paso. Es como si el emulador tuviera que ir cargando los minis o algo parecido.

Tambien he leido de gente que dice que no debemos poner minis "mirando abajo". No tengo ninguno así, pero tampoco se porque lo dicen, imagino que da error, pero no se el motivo.

Estoy seguro que el problema de la roca está siendo este bug con los minis. Alguien tiene alguna idea? Porque he mirado por el foro y no he visto a nadie con un problema similar. Ayuda por favor, me estoy volviendo loco xD
Lo tuyo es un caso curioso, a saber que clase de error tonto nos estamos saltando. Estas seguro de no estar tocando esa variable para nada mas? Puedes mandarnos un video de eso que nos comentas sobre los minis apareciendo y desapareciendo? No estaras usando savestates sin refrescar mapa??

Lo de "mirar abajo" es un error muy tipico, no se en que se basa exactamente, pero se que si tienes en pantalla un mini, con el comportamiento mirar abajo y haces un refrescado de pantalla, sea metiendote a la mochila, al mapa o lo que sea, pasas a controlar al mini que tiene ese comportamiento, y la camara hará alguna que otra cosa extraña.

Bueno se me ocurre algo mucho mas facil y sin tantisima complicacion, aunque perdemos un par de flags.
Crea dos rocas, y a una le pones una flag y a otra la otra. Bien en alguna parte del juego, en algun momento anterior, activas la flag que esta en la roca a la derecha, esto hara que cuando llegues al sitio de la roca, solo aparezca la que esta a la izquierda bloqueando el camino. Cuando ganes al trainer (Acuerdate de usar una pelea de tipo 03 para que lo que pongas despues se ejecute) desactivas la flag de la roca a la derecha y activas la de la roza izquierda, haces un refrescado de pantalla o un "showsprite/hidesprite" y el efecto es el mismo sin scripts de nivel.
 

Kora

Viviendo algún videojuego
Una cosa, ¿cuántos minis tienes en el mapa? El máximo de minis en pantalla es de 16, contando el del jugador.
Vale, de eso no tenia ni idea. En el gif que he puesto, es otro mapa donde hay más de 16 seguro, pero en el otro con la roca solo hay 13 contando conmigo. Tambien cuenta los signpost?
 

Cheve

MoonLover~
Miembro de honor
Un script de tipo 0x4 que lo mueva a la posición de bloqueo.

Adentro del Script solo el "Movesprite", la variable asegúrate de que está limpia, que le dará la condición al Script de Nivel.
El setvar o lo que sea tiene que estar afuera, y no lleva ningún compare, porque ya lo hace el 0x4 en sí.
 

Kora

Viviendo algún videojuego
Aquí os dejo el caso de la roca. Lo hago incluso desde la ruta anterior para que el juego lo cargue todo sin problemas. Los scripts funcionan bien, mueven la roca, pero cuando sale de la visión vuelve a su sitio. Esto pasa siempre, da igual con que métodos de los anteriores que habeis puesto pruebe.

Ya no es tanto el caso de la famosa roca, ya es que otros scripts que hago, me está pasando lo mismo, tienen diversos errores que acaban todos igual, desapareciendo y apareciendo minis por el mapa.




Script del entrenador
Código:
'---------------
#org 0x80A84F
lock
faceplayer
compare 0x4017 0x1
if 0x1 goto 0x880A886
msgbox 0x880A892 MSG_NORMAL '"No esperes ninguna piedad de mi\ne..."
trainerbattle 0x3 0x2 0x0 0x880A8E0
addvar 0x4017 0x1
pause 0x25
sound 0x7C
movesprite 0x6 0x7 0x6
release
end

'---------------
#org 0x80A886
msgbox 0x880A8F8 MSG_NORMAL '"Supongo que todos podemos hacernos..."
waitmsg
release
end


'---------
' Strings
'---------
#org 0x80A892
= No esperes ninguna piedad de mi\nequipo Pokémon.\p¡Somos duros como una roca!

#org 0x80A8E0
= ¡P-pero las rocas...!

#org 0x80A8F8
= Supongo que todos podemos hacernos\nmás fuertes.

Script de nivel
Código:
'---------------
#org 0x8147B6
compare 0x4017 0x1
if 0x1 call 0x88147C3
end

'---------------
#org 0x8147C3
movesprite 0x4 0x7 0x8
end

Imágenes del AM (Dadle click derecho > ver imagen, porque se ve cortada)

Os dejo por aquí los scripts también. Espero que sean los correctos, porque ya con tanto cambio xDD
 
Última edición:

kakarotto

Leyenda de WaH
Ojo..cuando usas en un script de nivel el comando "call", el puntero 0x8147C3 debe de llevar "return"
Y si usas fadescreen? Aunque claro la transicion es menos profesional
 
Estado
Cerrado para nuevas respuestas.
Arriba