Registrarse

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

Estado
Cerrado para nuevas respuestas.

Kora

Viviendo algún videojuego
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
Lo acabo de probar y sigue igual, como si no hubiera hecho nada. Aunque si que es cierto que siempre los habia terminado en end. No habia leido nada sobre eso en el super tutorial de scripts.
 

kakarotto

Leyenda de WaH
Despues de darle vueltas al coco, preguntandome porque esto se atraganta tanto si en principio no tiene mucho misterio, decidí hablar con un experto en el engine del juego y la verdad es que su explicación lógica me ha abierto los ojos...

¿Se puede hacer esto de la manera que realmente quieres? La respuesta es no, al menos de una forma "sencilla" como son los scripts de nivel.

Dentro del propio engine hay dos memorias. La ram y la rom. Cuando tú haces el script del movimiento de la roca, la roca mientras está en tu zona de visión se mantiene en el lado que tú quieres. Lo que ocurre cuando te alejas de la zona de visión el juego refresca la ram,vaciando los datos que tenía en caché y accede a la memoria rom, la rom verifica la posicion original de la roca y la "redibuja" en el sitio original

Entonces..¿cómo hacer esto aunque sea un poco chapucero? No te queda de otra...

Crear dos rocas, la que vamos a mover y la que estará en el sitio final donde tú quieres,oculta (seteada su flag)
Con el script mueves la roca hacia el lado que necesitas y acto seguido muestras la roca final (tengo que probar como quedaría el efecto..) liberando la flag de la roca final y seteando la movida,justo al reves.

Así cuando te alejes del campo de visión y vuelvas, la roca movida sigue ahí pero oculta debido a su flag y en su puesto ves la roca final movida en el sitio que quieres, consiguiendo el efecto deseado.


Mas o menos esto ya te lo han explicado varios usuarios. Realmente muchas cosas se pueden hacer de mil formas. Unos prefieren hacer un script central donde controlar todo y otros simplemente lo tienen subestructurado en varios subscripts.

Espero haber sido de ayuda.
 

Kora

Viviendo algún videojuego
Entonces..¿cómo hacer esto aunque sea un poco chapucero? No te queda de otra...

Crear dos rocas, la que vamos a mover y la que estará en el sitio final donde tú quieres,oculta (seteada su flag)
Con el script mueves la roca hacia el lado que necesitas y acto seguido muestras la roca final (tengo que probar como quedaría el efecto..) liberando la flag de la roca final y seteando la movida,justo al reves.

Así cuando te alejes del campo de visión y vuelvas, la roca movida sigue ahí pero oculta debido a su flag y en su puesto ves la roca final movida en el sitio que quieres, consiguiendo el efecto deseado.


Mas o menos esto ya te lo han explicado varios usuarios. Realmente muchas cosas se pueden hacer de mil formas. Unos prefieren hacer un script central donde controlar todo y otros simplemente lo tienen subestructurado en varios subscripts.

Espero haber sido de ayuda.
Imagino que intentaré hacer eso, hacerlo más a lo basto como tenía pensado. Pero ahora mi problema ha pasado a que esto me pasa no solo con el script de la roca, tambien me pasa en otros scripts donde desaparecen y aparecen los minis. Y no tengo ni idea de el por qué. Será que son scripts demasiado largos? A nadie le ha pasado esto? :(
 

kakarotto

Leyenda de WaH
Intenta compilar tus scripts en un rom limpio para descartar errores. Puede que tengas corrompido el juego por algun parche que hayas metido,rutina

Espero que aclares esto.
 

Kora

Viviendo algún videojuego
Lo único que le he hecho a la rom ha sido aplicarle un parche con los nombres de los objetos y ataques al español y poco más. Por lo demás que yo sepa es una rom completamente normal.

La verdad es que me ha jodido esto porque ahora no se como continuar la rom sin estos errores, no quiero continuar haciendo mal los scripts sin saber en que estoy fallando, porque es tiempo perdido. Ojalá alguien sepa de que puede tratarse.
 
Última edición:

Sayer301!

UnityLord!
Miembro de honor
A ver yo hay cosas que no entiendo.

1. Porque usas movesprite y no movesprite2, con movesprite2 no te pasaría el problema de alejarte.

2. Porque cuando usas el movesprite en el player, y en el script, no usan ni las mismas coordenadas ni el mismo numero de personaje a mover?

Por otro lado aclarar que no es para nada imposible, de hecho el propio juego lo usa con el viejo que te bloquea el camino porque esta cansado en ciudad verde.
 

kakarotto

Leyenda de WaH
Ya, pero el viejo cansado de ciudad verde es un npc distinto al normal,por el mero hecho de estar acostado dentro de advance map.

Kora,lo puedes hacer de 1000 maneras. Puede que te hayas cargado algo por instalar el parche. Recuerda que siempre hay que hacer copias de seguridad...
 

Kora

Viviendo algún videojuego
Tengo un backup por cada vez que pienso que voy a tocar algo importante en la rom, así que por ahí no hay problema xD

Ahora que caigo, esto de que desaparecen y aparecen los minis me pasa siempre con scripts de gatillo, pero no veo nada raro en los scripts como para que pase todo esto.

Lo que voy a intentar es irme a un backup anterior e intentar hacer algunos de estos scripts que hacen que desaparezcan los minis otra vez y observar a que puede deberse. Con un poco de suerte lo descubriré o alguien del foro podrá decirme a que se debe.

Por cierto, entonces no debo poner nunca más de 16 minis en un mapa? O 16 minis en el rango de vision del jugador?
 

kakarotto

Leyenda de WaH
Lo de la roca tiene q ser así si o si. Los otros estoy casi seguro que es en total del mapa y no del campo de visión
 

Kora

Viviendo algún videojuego
A ver, traigo noticias:

Casi que descarto que sea problema de mis scripts de gatillo. He quitado casi todos los minis del mapa, he quitado los scripts de gatillo, singpost y demás (por si fuera problemas de memoria) y los minis fantasma siguen ocurriendo. De todos modos yo diria que este problema es completamente distinto al de la roca.

Hasta ahora pensaba que era cuestión de algún script de gatillo o algo así, pero se ve que no.

He estado trasteando en el mapa de pueblo paleta y efectivamente, si se meten demasiados minis empieza a pasar este curioso efecto. Pero en el museo de Ciudad Plateada no hay TANTOS minis como para que pase esto, es demasiado exagerado. Son tan solo 11 minis contando el jugador. Podría ser que cada mapa tenga un numero limitado de minis y a partir de ahí pasa esto? (Ahora he borrado todos los minis del museo, he puesto 15 nuevos minis y todo bien, pero si agrego más empieza a causar problemas, es como si los minis anteriores estuvieran malditos o yo que se xDD)

Solo por aclararlo, cuando voy a editar un mapa, hay algún inconveniente en borrar los eventos originales de la rom? De eliminar minis? Porque ya es lo único que se me ocurre.

Podemos descartar casi con total seguridad de que no se trata de scripts sino de memoria en los mapas. Aquí un nuevo ejemplo para que veais lo exagerado que es:

 

Sayer301!

UnityLord!
Miembro de honor
Tengo la solucio, lo he conseguido hacer y todo funciona perfectamente.

Te resumo los scripts:

El script de nivel, tal y como dije solo tiene que hacer el movesprite2, pero lo que no me habia dado cuenta es que el script tiene que ser de tipo 05. Aqui el script (habra que adaptarlo a tus minis y coordenadas)
Código:
#dynamic 0x900000

'---------------
#org @start
compare 0x4050 0x1
if 0x0 goto @snippet1
movesprite2 0x4 0x6 0x5
end

'---------------
#org @snippet1
end

Este es el script del entrenador es el siguiente, lo que hace basicamente es moverlo y fijarle la posicion para siempre parece una tontería, pero con este movesprite2 es como solucionas el problema de alejarte y que se vuelva a mover:
Código:
#org @start
trainerbattle 0x3 0x1 0x0 @string1
setvar 0x4050 0x1
movesprite 0x4 0x6 0x5
movesprite2 0x4 0x6 0x5
end


'---------
' Strings
'---------
#org @string1
= Tito Sayer siempre acaba teniendo\nla razon.

He hecho pruebas y me funciona de 10, no vuelve a su posicion ni cambiando de mapa, ni refrescando, ni entrando a menus, ni alejandote... Para mi es un... DESAFÍO SUPERADO!
 

Kora

Viviendo algún videojuego
Maravilloso @Sayer301!, ha funcionado a la perfección. Parece mentira después de tanto tiempo! Pero tengo una duda, por qué el entrenador necesita hacer un movesprite y un movesprite2 justo después? Entiendo que es porque el primer movesprite lo mueve de forma temporal y el movesprite2 lo hace luego de forma permanente, no?

Eso quiere decir que si quisiera hacer que la roca tuviera un movimiento de deslizamiento, podria hacer el applymovement a la roca y justo después el movesprite2 para que se quede ahí de por vida sin necesidad del movesprite, verdad?
 

Sayer301!

UnityLord!
Miembro de honor
Maravilloso @Sayer301!, ha funcionado a la perfección. Parece mentira después de tanto tiempo! Pero tengo una duda, por qué el entrenador necesita hacer un movesprite y un movesprite2 justo después? Entiendo que es porque el primer movesprite lo mueve de forma temporal y el movesprite2 lo hace luego de forma permanente, no?

Eso quiere decir que si quisiera hacer que la roca tuviera un movimiento de deslizamiento, podria hacer el applymovement a la roca y justo después el movesprite2 para que se quede ahí de por vida sin necesidad del movesprite, verdad?
Justo has dado en el clavo, el movesprite2 lo hace de forma permanente pero necesita un refrescado mas agresivo que entrar en la mochila solo. El porque? ni guarra! GameFreak y sus maneras.

Respecto al applymovement, pues la verdad es que no estoy seguro, lo mejor es probar, pero creo que si, y en el peor de los casos puedes hacer un applymovement, despues el movesprite al mismo sitio y luego el movesprite2 que eso funciona seguro, aunque me parece que solo con el apply valdrá.

Me alegro de que te haya servido, la verdad es que no hacia un script desde hace mas de 3 años, ha sido bastante divertido.
 

Kora

Viviendo algún videojuego
Pues ya está todo solucionado, POR FIN! Muchísimas gracias a todos por vuestro tiempo, ha sido un mareo pero se ha conseguido. Espero que la maldición de los minis fantasma no vuelva a ocurrirme, y si no, pues ya haré un tema al respecto con ese problema en concreto.

Gracias a todos de nuevo <3
 

kakarotto

Leyenda de WaH
Me alegro por tu parte @Kora pero yo estoy teniendo problemas con ese script. Y DUDO MUCHO que sea porque uso emerald.. hablare con sayer..es rarisimo
 

Kora

Viviendo algún videojuego
Cual es el problema que te da exactamente? Quizá pueda ayudarte despues de todo.
 

kakarotto

Leyenda de WaH
1) hago el script de nivel de tipo 05 tal cual lo escribio Sayer

2)luego el otro script en el entrenador tal cual

En am como poneis la roca? Yo la pongo en la posición final donde quiero que esté. Entonces el script de nivel deberia ponerla en el sitio de bloqueo y eso no lo hace porque en el script de nivel comprueba si tiene el valor 1 para ejecutarse y obvio el valor es 0.

Luego si entras en otro lugar esta no se queda en el sitio, si te vas del rango si.

Es extraño y esto no deberia darme quebraderos...jaj
 

Kora

Viviendo algún videojuego
En mi caso la roca la tengo justo en el bloqueo, y cuando lucho con el entrenador se mueve a la derecha. Y gracias a los movesprite haga lo que haga se quedan ahí.

Si combates con el entrenador y la roca se mueve donde quieres pero al volver al mapa vuelve a su origen, entonces el problema está en el script de nivel.

Quizá estes haciendo que ambos script muevan la piedra en el mismo sitio donde está. Pasa el código por si acaso.
 
Re: Respuesta: Cambiar la posición de un evento para siempre

1) hago el script de nivel de tipo 05 tal cual lo escribio Sayer

2)luego el otro script en el entrenador tal cual

En am como poneis la roca? Yo la pongo en la posición final donde quiero que esté. Entonces el script de nivel deberia ponerla en el sitio de bloqueo y eso no lo hace porque en el script de nivel comprueba si tiene el valor 1 para ejecutarse y obvio el valor es 0.

Luego si entras en otro lugar esta no se queda en el sitio, si te vas del rango si.

Es extraño y esto no deberia darme quebraderos...jaj
Te explicas fatal we... broma.

El script de Sayer301 lo que hace es comparar el valor de la variable 40XX 0x1, SI ES MENOR QUE UNO se dirige al pointer donde lo unico que hay es un END
Si es igual que 1, el script sigue en cascada, osea ahí es donde ejecuta el comando MOVESPRITE2.

No se si te referías a eso...
 
Estado
Cerrado para nuevas respuestas.
Arriba