Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4064 miembros registrados.
El último usuario registrado es cesarseb233.

Nuestros miembros han publicado un total de 84115 mensajes en 11982 argumentos.

[XP][Tutorial] Efecto al quedarse quieto

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP][Tutorial] Efecto al quedarse quieto

Mensaje por Wecoc el 2017-01-21, 22:09

Éste engine es sencillo pero no es algo que se suela ver en el maker y es interesante así que creo que es buena idea crear un tutorial de cómo hacerlo.
Es un evento común que se activa cuando el personaje lleva un rato quieto en el mapa, sin hacer nada.

Lo más habitual es aplicarle una animación como la de "Duda" que viene en el RPG maker. En algunos juegos a veces se hace que el evento haga algún movimiento solo en ese caso, como para dar realismo; en Castlevania SOTN, Alucard cambia a una pose como más cómodo. Hace tiempo vi un juego (creo que era de los Simpsons) en el que si te estabas un rato parado el protagonista se rascaba el culo. Otro uso distinto más serio por ejemplo es el que se da a Diablo II, si te estás un rato parado en la guarida del malo, ese enemigo final pese a no estar en el mapa suelta una frase en off y daña al personaje (creo que hace aparecer unas garras del suelo o algo así). Son solo algunos ejemplos que me vienen a la mente.

Hay dos cosas que se deben tener en cuenta para éste engine:
1 - Mirar el tiempo que lleva el personaje sin moverse del mismo sitio
2 - Comprobar que ningún evento (no paralelo) esté a medio funcionamiento
Óbviamente si por ejemplo el personaje está quieto porque está hablando con un NPC, no se debe producir el efecto.
Pero empezaremos por lo primero y luego añadiremos al final la segunda condición que lo que hará es anular el evento.

1 - Mirar el tiempo que lleva el personaje sin moverse del mismo sitio

Haremos lo siguiente. Primero activaremos un interruptor que esté siempre en marcha (siempre que queramos que ese efecto ocurra).
Éste interruptor activará un Evento Común en proceso paralelo.

Game_Character tiene un contador para saber cuanto tiempo lleva parado el personaje (o también usable en cualquier evento), llamado @stop_count.
Ese contador no es accesible directamente, pero podemos obtenerlo usando instance_eval.

Usaremos éste código en una condición para saber si el contador es mayor que 0:
$game_player.instance_eval("@stop_count") > 0
No es la única forma de hacer eso.

Entonces incrementamos una variable para que nos sirva de contador más fácilmente, en el ejemplo la variable 1.
En XP los frames por script valen el doble que por engine, así que si lo pusiéramos tal cual la variable valdría el doble de los frames que lleva quieto el personaje.
Para evitar eso y lograr un valor de variable más intuitivo, haremos que la variable se incremente solo uno de cada dos frames, usando éste código:
Graphics.frame_count % 2 == 0

Luego usaremos ésta variable para obtener cuanto tiempo ha pasado, y tras pasar ese tiempo podemos hacer que se repita cada x frames.
En el ejemplo de a continuación se activa tras pasar 0 frames (es decir justo al pararse) pero solo sucede una vez cada 100 frames, siendo por lo tanto 100 el primero y luego volviendo a pasar a 200, 300...

Spoiler:

Si solo queremos que ocurra una vez, en la primera condición en vez de > usamos == y nos ahorramos la segunda condición; solo ocurre si la variable es igual a un tiempo concreto. Éste será el caso más habitual, así que es lo que usaré a partir de la siguiente imagen.

Finalmente debemos volver a igualar la variable a 0 en cuanto el chara vuelve a moverse. Para hacer tal cosa comprobaremos si @stop_count vale 0, lo que significa que ya no está parado, e igualaremos la variable a 0 en ese punto.
De modo muy similar al principio, para mirar si se está moviendo usaremos el código:
$game_player.instance_eval("@stop_count") == 0

Spoiler:

Dentro de las condiciones para que el efecto ocurra (en la imagen, donde puse "Aquí ocurre el efecto") pondremos qué efecto que queremos que ocurra; mostrar animación, quitar HP, mostrar sonido, rascar culo...
En todos éstos ejemplos éste primer punto del tutorial quedaría aquí. Pero en ejemplos como el de Castlevania, que se cambia de modo indefinido el gráfico del chara por otro y no se recupera el normal hasta que vuelve a moverse, el engine se debe ampliar un poco más.

Para ello primero hay que guardar en un Interruptor el hecho de que ya se haya cambiado el chara. Si ese interruptor está activado, al empezar a moverse se cambiará el personaje al gráfico normal de nuevo.

Spoiler:

Hay otras posibilidades parecidas pero no puedo abarcarlas todas, si tenéis alguna duda sobre alguna lo comentáis.

2 - Comprobar que ningún evento esté a medio funcionamiento

Como se ve aquí, si lo dejamos tal cual el cambio de gráfico se efectua pese a estar a medio evento.

Spoiler:

Para evitar ese bug, crearemos una condición extra al principio de nuestro pequeño engine que abortará el evento común directamente si hay algún evento del mapa funcionando.

Crearemos una condición con éste código:
$game_system.map_interpreter.running?

Y dentro igualaremos nuestra variable contador a 0 y saldremos del evento.

Resultado final:

Spoiler:

Como siempre, estaré atento a cualquier respuesta.
Saludos.
avatar
Wecoc
Administrador
Administrador



Créditos 9129

Gracias : 471

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Tutorial] Efecto al quedarse quieto

Mensaje por Ledai el 2017-01-22, 11:40

Vamos a ver... Pero tú es que me les el pensamiento o cómo lo haces?
Justo estaba pensando en cómo hacer que al estar un rato parado, se muestre una animación en los personajes (Perdiendo el tiempo) y vas y creas un tutorial mediante códigos!
Nuevo meme makero:
"Piensas en algo y no lo dices, y Wecoc lo hace, ¡Toma ya!"

En serio que voy a revisarlo hasta comprender perfectamente su funcionamiento y ver si puedo aplicarlo en el propio enguine de día y noche que tengo, (Y así no tener que usar otro evento paralelo) Por lo que tal vez tenga que cambiar algún proceso de tu enguine para adaptarlo, pero seguro que me será útil.

Gracias pro hacer estos tutos, a muchos nos son de una utilidad increíble, en serio.
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2344

Gracias : 168

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.