Overview
Un sencillo tutorial para crear una puerta animada en RPG Maker 2003 que responda al contacto con el jugador.
Introducción
Un detalle que queda muy bien en un juego hecho por nosotros mismos es el de puertas que se abren mostrando una animación, algo que consigue que nuestro juego dé la impresión de estar estéticamente más cuidado y elaborado. Sin embargo, el proceso para conseguirlo no es para nada complicado, basta con conocer un poco las instrucciones básicas de los eventos que maneja, en este caso, RPG Maker 2003. En esta guía os enseñaré a crear dos tipos de puerta y a aportar algunas ideas sencillas a las que sacaréis mucho partido.
Espero que os sea útil. Comenzamos!
¿Qué necesitamos hacer?
Para mostar un evento que controle la apertura de una puerta necesitaremos, además de lo obvio (un chipset y un mapa creado), un charset que contenga los frames que formarán la animación de la puerta. Para esta guía usaremos tres diferentes:
- Una puerta sencilla.
- La puerta izquierda de una puerta doble.
- La puerta derecha de una puerta doble.
La distribución de los frames deberá respetar un patrón similar al siguiente para que las instrucciones de los eventos que aportaré después funcionen correctamente:
Como podéis ver, es muy similar al charset de un personaje convencional, pero con la diferencia de que solo necesitamos cuatro frames para cada tipo de puerta, así que en un charset normal nos caben tres tipos diferentes.
Recordemos que la distribución de los frames va de la siguiente manera:
- Mirar arriba frame izquierdo – MIrar arriba frame central – Mirar arriba frame derecho
- Mirar derecha frame izquierdo – MIrar derecha frame central – Mirar derecha frame derecho
- Mirar abajo frame izquierdo – MIrar abajo frame central – Mirar abajo frame derecho
- Mirar izquierda frame izquierdo – MIrar izquierda frame central – Mirar izquierda frame derecho
En base a esto, para crear una animación de una puerta abriéndose necesitaremos que el evento muestre el frame de mirar abajo, el de mirar a la derecha, el de mirar arriba y el de mirar a la izquierda, todos en la misma columna en ese orden concreto.
Una vez tenemos la teoría, pasemos a la práctica.
Creando una puerta sencilla
El primer paso es abrir un evento nuevo sobre el tile que más nos interese, de forma que veamos la pantalla de edición de eventos. Nuestro objetivo será crear uno similar a este:
He marcado con puntos del 1 al 5 las opciones que es esencial alterar para que todo funcione:
- En el (1), pulsamos “Set” y en la ventana que se abrirá deberemos seleccionar la puerta que queramos utilizar en el charset. En la sección “Direction” deberemos seleccionar “Down”.
- En el (2), tenemos dos opciones interesantes. La primera es “Action button” y “Player touch”. Básicamente controlan la manera de activar el evento. La primera hace que solo se active al pulsar el botón de acción cuando el jugador está pegado al evento de la puerta y mirando hacia él. El segundo cuando el jugador toca el evento, sin que haga falta pulsarlo. A mí me gusta más esta última forma, pero esto ya va a gusto del consumidor.
- En el (3), es esencial que seleccionemos “Same as characters”. Esto hará que el evento se sitúe al mismo nivel de capa que el jugador, por lo que hará que el este no pueda pasar. No os preocupéis, esto solo será mientras se completa la animación de apertura de la puerta, posteriormente dejará de tener efecto y podremos atravesar el evento de la misma forma que si tuviese la especificación “Below characters”.
- En el (4), seleccionaremos “Fixed graphic”, lo que asegurará que siempre mostrará el frame adecuado independientemente de si la puerta está en la columna izquierda, central o derecha del charset.
- En el (5), definiremos los procesos que darán funcionalidad al evento. Los describiré en el siguiente paso.
Como podemos ver, para este caso disponemos de 3 comandos:
- PlaySE: Es el único opcional, yo lo incluyo para hacer sonar un efecto de sonido para cuando la puerta se abre.
- Set Move Route: Es el que hace cambiar el evento entre los diferentes frames de la puerta. Para ello, es esencial que en el desplegable superior izquierdo de la pantalla de creación del comando seleccionemos “This event”, lo que hará que todas las órdenes afecten únicamente al propio evento. En “Frequency” marcaremos el 8 y en los “Movement Commands” introduciremos los siguientes: Turn Right, Wait, Turn Up, Wait, Turn Left, Through ON. Es tremendamente importante que el último sea ese, ya que es el que hace que el jugador pueda pasar a través del evento a pesar de haber sido definido como “Same as characters” previamente. Las comandos “Turn” se encargarán de mostrar el frame adecuado y los “Wait” de hacer que cada uno de ellos espere un poco a cambiar para poder ser visibles (si no pasaría del frame original al último inmediatamente, arruinando la animación)
- Wait for all movement: Este comando hará que el jugador no pueda moverse hasta que la animación de apertura se complete.
Con esto, ya tendríamos una puerta perfectamente funcional.
Si queremos que la puerta desaparezca al terminar de abrirse, en vez de usar el “Through ON” al final de la ruta, podemos utilizar una segunda página sin “Graphic” asignado que solo se ejecute al activarse un switch que solo se pondrá a ON justo tras el “Wait for all movement” de la primera página. Deberá estar especificada como “Below characters” para que no bloquee el paso al jugador.
Creando una puerta doble
En este caso el proceso se complica ligeramente, pues tendremos dos eventos diferentes, uno para cada lado de la puerta, que además interactuarán entre ellos, para que al entrar en contacto con uno se abran los dos.
Los eventos serán similares en los cuatro primeros puntos enumerados en la sección anterior, salvo por el frame que se verá. Atendiendo al charset de prueba en “Graphic” usaremos la siguiente configuración:
- Para el evento “Puerta izquierda” > “Direction” – “Down” > “Pattern” – “Left”
- Para el evento “Puerta derecha” > “Direction” – “Down” > “Pattern” – “Right”
En la sección de “Contents” deberemos hacer exactamente lo mismo con una salvedad, ya que necesitaremos dos “Set Move Route”, uno para cada evento que hagan exactamente lo mismo. El primero deberá hacer referencia a “This event” y el segundo a “Puerta derecha” (si se abre desde la izquierda) o “Puerta izquierda” (si se abre desde la derecha)
Deberíamos tener algo así:
Eso hará que se abran ambos lados a la vez al tocar cualquiera de ellos. Por supuesto, se puede hacer que solo se abra un lado y el otro no, si el desarrollador lo desea. Las posibilidades son muchas.
Ideas de uso
Una buena manera de implementar este tipo de evento sería añadir una segunda página en el mismo, que esté definida como “Below characters” y que en “Contents” tuviese comandos para transportar al personaje a otro mapa. Sería tan sencillo como crear un switch llamado “PuertaAbierta” (por ejemplo) y ponerlo a ON justo detrás del “Wait for all movement” de la primera página. La segunda página que citamos antes tendría como condicionante que ese mismo switch esté a ON. De esta manera, cuando el jugador pisase el evento se transportaría a otro mapa. Además, justo después del ejecutar el comando de transporte, se podría poner “PuertaAbierta” a OFF y reproducir un sonido con “PlaySE” de cierre de la puerta, dando a entender que que la cerramos al pasar a la nueva zona.
Si no queremos irnos a otro mapa, otra solución sería crear un evento “Below characters” en la casilla siguiente al evento de la puerta, que tenga un comando “Set Move Route” que haga exactamente lo contrario a lo que hemos hecho para abrirla. La única página de este evento debería estar condicionada por un switch como el que mencionamos en el punto anterior y que se pusiese a OFF justo al final de los “Contents”. Esto haría que este evento se desactivase justo al cerrar la puerta y que además se volviese a activar la primera página del evento que muestra la puerta, lo que nos permitiría repetir la acción. Para completar el funcionamiento, deberíamos crear un tercer evento en la casilla inmediatamente anterior al de la puerta para hacer lo mismo en la otra dirección.