¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 Tutorial: Minijuego de Avalancha el Sáb Oct 29, 2016 9:03 pm

Reputación del mensaje :100% (3 votos)

Faye Valentine

avatar

A petición de: @Vala

Nivel: Medio-Alto



Introducción: introducción =D



He tardado, pero finalmente está aquí. Se trata de un minijuego de "avalancha" donde tienes que evitar los obstáculos que se van presentando mientras vas cayendo. Es un poco bastante simplón pero cumple su propósito de minijuego si lo que quieres es un inciso de relajo y buena onda en tu juego. No tendrá obviamente la calidad de un juego arcade pero sí que entretetiene.

Me disculpo por el retraso que he tenido en publicar este tutorial, pero llegué a un punto cuando estaba creando el engine que pensé que ya lo tenía listo y luego mil bugs aparecieron y bueno... la cosa se complicó xD Tanto que tuve que reemplazar eventos por eventos comunes y utilizar códigos en vez de comandos. Así que sí, gente, habrá código aquí, pero confiad en mi, corre muchísimo más fluido, da menos lag y es más exacto en los cálculos. Decir también que esto al no ser un tutorial convencional sino un minijuego, convendría muchísimo más revisar como todo funciona desde adentro, así que os dejaré al final un link para que bajéis el proyecto. Pesa 4MB y está hecho en Ace (necesitaréis RTP). Tened eso muy cuenta.

Ahora sí entremos en acción.


Paso 1: ¿Generadores?



Soy partidario de que la magia de crear engines en RM es, muchas veces, crear ilusiones. Es todo como un escenario que parece robusto y bien construido pero está hecho de cartón, solo que pintado de manera que parezca metal. ¿De qué estoy hablando? Simple. Pensemos en que es un minijuego donde tenemos que estar constantemente esquivando objetos que van en dirección contraria a la que vamos nosotros, ¿qué hacemos? ¿hacemos acaso un mapa de 17x300 y movemos al jugador hasta el final? No podemos hacer eso, sabemos lo que implica hacer un mapa tan grande (lag), así que... ¿de qué manera podríamos lograr este engine? Por supuesto, no haremos que el jugador literalmente caiga, sino que daremos la sensación de que lo hace. ¿Ya lo váis pillando?
Lo primero que tenéis que hacer crear un mapa con el tamaño default de vuestro maker, con solamente la capa inferior (el terreno, nada de rocas ni árboles ni nada). Hacedlo lo más bonito que queráis y luego tomándole una screenshot o utilizando herramientas para extraer los mapas hacemos una nueva imagen que guardaremos en nuestra carpeta de parallax. Nos vamos al mapa que creamos, borramos todo lo que hicimos dejando solo la transparencia, acto seguido abrimos sus propiedades y colocamos el parallax que hemos creado como fondo. En scroll | desplazamiento le colocaremos un valor que vaya rápido. Yo le puse 30, de tal manera que el parallax se moverá sin cesar hacia arriba de forma rápida.
Con esto crearemos la ilusión de que estamos en caída constante. Oh, por cierto, si deseáis no hacer un mapa si no colocar cualquier cosa de fondo eso ya es vuestra cosa. Si algo tiene este tutorial es que podéis modificar cualquier aspecto para encajar con vuestras necesidades.
Vale, ahora tenemos una sensación de caida constante, ¿qué sigue? Obstáculos. Entonces, ¿cómo hacemos que tengamos que evitar obstáculos si el tamaño del mapa es default? Mi respuesta es: generadores.

Crearemos generadores que según una probabilidad podrá cambiar A) el tipo de obstáculo y B) la posición donde sale. Si queréis añadir más probabilidades a evaluar eso ya es cosa vuestra. Repito una vez más, todos los parámetros de este tutorial pueden ser cambiados a vuestros antojos.

Yo trabajaré con dos tipos de obstáculos y tres posiciones posibles.

Antes de empezar con los generadores, id a las propiedades del mapa y añadidle dos tiles más de largura.

También necesitaremos switches y variables. Necesitaréis:
>Un switch por cada generador. Este servirá para evaluar si se está moviendo o no (ya lo veremos más adelante).
>Un switch que iniciará o desactivará el sistema.
>Una variable para la prob. de posición, otra para la prob. de tipo y una para el selector de generadores.

Cread un evento en cualquier posición del mapa, y usaremos la variable que os hablé de selector de generadores. En su valor colocad aleatorio desde 1 hasta la cantidad de generadores que deseéis tener. Yo utilicé 5. Este evento irá proceso paralelo.


Crearemos un evento en cualquier posición del mapa, le llamaremos Gen #1. Este evento tendrá dos páginas, y esto es lo que le colocaremos dentro:



Evaluaremos si la variable Generador es 1, en caso de ser así entonces evaluará si el switch que dice si el obstáculo se está moviendo está activo o no; si lo está, no hará nada, si no lo está, activará el interruptor local A, que llamará a la segunda página, donde el obstáculo se moverá.

La segunda página contendrá los siguientes parámetros:

Tomé la imagen mal, ups. Antes de evaluar todo eso tendremos que hacer dos operaciones de variables, una donde de forma aleatoria escoja entre 1 y la cantidad de tipos que queráis, en mi caso es 2. Y otra variable donde de forma aleatoria escoja entre 1 y la cantidad de posiciones que queráis, que en mi caso es 3. Ahora sí a explicar las evaluaciones.

Primero evaluaremos si la variable Tipo es igual a 1. En caso de serlo evaluaremos si la variable Posición es 1, 2, o 3. Si es 1, 2 o 3 no importará, lo único que cambiará es la posición del evento que escogeremos con el comando Set Event Location | Elegir Posición de Evento (ya debería bajarme el maker pirata en español porque esto de no saber los nombres... xD). Entonces procederemos a mover el evento hasta lo más arriba donde finalmente desaparecerá con otro comando de Set Event Location | Elegir Posición de Evento, retornándolo a su posición original (o, de hecho, a la que queráis, siempre y cuando esté fuera de la cámara. Por eso os dije que le añadieráis 2 tiles más al mapa Ópalo Tuerto ).

Lo mismo será para tipo 2, o para los tipos que queráis. Puede lucir complejo a primera vista pero no lo es, todo es un copipega, cambiando únicamente el lugar donde aparecerá (que tiene que estar fuera de cámara, por cierto).

Como nota final decir que antes de escoger posición se tiene que activar el switch que dice si el evento se está moviendo o no, y cuando termine de moverse apagarlo. Esto es vital.
Prueba de que es un copipega, aquí tenéis el tipo 2:


Oh, si no lo han notado aún, lo que cambiará el "tipo" es el gráfico del obstáculo, que a mayor tamaño obviamente mayor el radio de colisión. Yo recomiendo siempre utilizar 32x32, 64x64 o 128x128 máximo para los tamaños (ya luego los multiplicáis por las columnas y filas al momento de hacer la hoja del chara/sprite)

Bien, ahora ¿qué procede? Lo más engorroso del asunto. Vais a copipegar el evento del generador que habéis creado por tantas veces queráis generadores. Yo coloqué 5. Entonces en cada evento vais a tener que cambiar cada switch que evalúe si se está moviendo a su respectivo evento (es decir, si el evento es el generador 2 no tiene sentido que evalúe [el switch] si el generador 1 se está moviendo, ¿verdad?) y las posiciones por supuesto.
Ahora hemos terminado los generadores.



Paso 2: Checks y Colisiones



Cuando ya finalicemos la aburrida tarea de hacer todos los santos generadores de obstáculos ahora necesitaremos que el sistema sepa cuando hemos colisionado con ellos.

Crearemos un evento común, el primero de muchos. Este evento común evaluará si la coordenada X y Y de nuestros personajes equivalen a la X y Y de cada generador. Sin embargo, esta vez no haremos el clásico y engorroso uso de variables para cada coordenada, sino que haremos algo mucho mejor, y es utilizar una función que el propio RPG Maker usa.
($game_player.x - $game_map.events[id].x).abs + ($game_player.y-$game_map.events[id].y).abs == 0

No me pondré a explicar el código para no hacer esto más tedioso de lo que ya está siendo, pero sabed que eso evaluará lo que ya os he dicho. Donde "id" irá el ID del generador a checar y como bonus, aunque no lo usaremos en este tutorial, podéis cambiar ese 0 por cualquier número para evaluar si el evento está a X tiles de distancia. Ese código de allí es útil para cualquier escenario.

Haremos un evento común que revise las posiciones X y Y con respecto a la del jugador con el código que os facilité y así dentro de cada una llamaremos al evento común "Colisión" que crearemos en breve. Tendrá que verse así nuestro evento común:

Crearemos otro evento común, le llamaremos Colisión. ¿Qué hara? Ejecutará lo que ocurrirá si colisionamos con un obstáculo. Pero espera, ¿por qué entonces no lo hice directamente en el primer evento común? Porque así lo intenté de buenas a primeras pero ya sabéis como el maker es de mañoso y bueno... estaba bugeadísimo. Fue cuando lo hice un evento común que corrió a la perfección. Qué se yo, así es el maker todo el tiempo a veces.



Lo que enmarqué en rojo es una condicional que revisará si tenemos el escudo activado, esto se trata de un powerup. Más adelante veremos como añadir powerups para hacer todo más dinámico, pero si no queréis powerups o al menos no uno que de escudo simplemente eliminad la condicional y dejad sea lo que sea que queráis que ocurra.

Por último haremos el tercer evento común, este se encargará de nuestro movimiento. Nadie que esté deslizándose a toda velocidad por las nieves va a poder moverse para arriba y para abajo como gusten, ignorando todas leyes de gravedad y física existentes. Por eso solamente le permitiremos moverse a los lados, cosa que sí podemos hacer en un desliz (claro que no es tan fácil como lo haremos ver pero es un minijuego, no nos enredaremos aquí con física y demases).
Este evento común lo colocaremos en Autorun | Inicio Automático y tendrá los siguientes parámetros.


Si las teclas arriba o abajo son presionadas el personaje se moverá hacia el personaje (es decir, no se moverá en absoluto), si las teclas izquierda o derecha son presionadas se moverá a la izquierda o derecha respectivamente.

Con eso habremos terminado. Nuestro último paso es crear un último evento (en el mapa), con Autorun | Inicio Automático y ya veréis si agregáis un texto, una imagen o lo que sea. Yo he agregado lo siguiente:

Pero lo primordial de este evento es que al final active el switch que a su vez activará el sistema. Yo le llamé Ignite.

Con esto habremos terminado la versión simple.



Bonus: powerups | mejoras



Deberíamos añadirle un poco más de sabor a nuestro minijuego. Por qué no un par de mejoras, como aumentar la velocidad en la que el jugador se puede mover y un escudo que absorbe un golpe, ¿qué os parece? Preparaos porque vendrán más eventos comunes, pero primero con los eventos en mapa.

Vamos a necesitar una variable nueva para generar, yo le llamaré "Powerup Generator", la diferencia será que esta vez no le daremos un valor aleatorio entre 1 a X cantidad de powerups, sino que le daremos valor de 1 a X probabilidad. Yo lo he colocado del 1 al 20. Entre más alto el número se reducen las posibilidades de que aparezcan powerups. Hacemos esto para que no haya una avalancha pero de powerups, así el jugador tiene que esforzarse moviéndose a través del mapa para conseguir una.

Hacemos un evento similar al del selector de generador.



Ahora haremos los eventos que generen los powerups, los cuales también son una copia de los generadores que hicimos, solo que esta vez no utilizaremos la variable "tipo", de esta manera nos aseguramos que se vuelvan más raros los powerups (ya que si utilizamos la variable tipo puede darse la posibilidad de que se repitan varias veces la misma clase de powerup, y eso no es lo que queremos), así que solo evaluaremos posición. Otra cosa es que en la primera página deberíamos poner que, en vez de "si X variable es igual a: Y", colocar "si X variable es mayor o igual que a: Y", o "menor o igual que" también sirve. Para el powerup de velocidad yo he colocado a que se active el interruptor local A si es menor o igual a 5, y para el powerup de escudo, si es mayor o igual a 15, recordando que la variable de generador de powerups será aleatoria del 1 al 20. De esta manera tenemos 5/20 de posibilidades de que se genere un powerup de velocidad y 5/20 que se genere un powerup de escudo.
Los parámetros, una vez más lo digo, pueden ser modificados a preferencia.


No nos olvidemos de crear dos switches, uno para cada powerup, que evalúe si se está moviendo o no.

Una vez creado los eventos en el mapa vienen los eventos comunes.

1) Obtener Escudo: este evento no hará nada, se llamará desde otro evento común. Es lo que le dirá al sistema qué hacer cuando se obtenga el powerup.


Yo he cambiado el gráfico y cambiado a transparente el gráfico para que desaparezca, dando la sensación de que lo obtuvimos. Nunca olvidéis activar el switch que dirá si obtuvimos el powerup, en este caso será Shield Obtained?

2) Obtener Velocidad: este evento no hará nada, se llamará desde otro evento común. Es lo que le dirá al sistema qué hacer cuando se obtenga el powerup.

Yo he cambiado la velocidad del jugador, reproducido un sonido, un flash, desaparecido el evento y activado el switch que dirá si obtuvimos el powerup, el cual es Haste Obtained?

3) Colisión de Escudo: este evento se activará cuando el jugador toque el powerup de escudo. Evaluará si ya lo tienes o no, si ya lo tienes reproducirá un sonido, si no lo tienes llamará a Obtener Escudo. Nótese que evalúa la X y Y con el código que vimos más arriba.


4) Colisión de Velocidad: este evento se activará cuando el jugador toque el powerup de velocidad. Evaluará si ya lo tienes o no, si ya lo tienes reproducirá un sonido, si no lo tienes llamará a Obtener Velocidad. Nótese que evalúa la X y Y con el código que vimos más arriba.


5) Colisión: como ya habíamos visto más atrás, tendremos que evaluar si al momento de colisionar contra un obstáculo tenemos el escudo activo o no, si lo está absorberá el golpe y nada pasará, y si no lo está el jugador pierde.





Descarga la demostración por: Box

Créditos: ninguno.

*Este tutorial fue creado en el RPG Maker VX Ace, pero es compatible con todas las versiones del RPG Maker.

#2 Re: Tutorial: Minijuego de Avalancha el Dom Oct 30, 2016 1:36 am

Vala

avatar
¡Sos genial! ¡Sos el mejor!
Darte las gracias es lo menos que puedo hacer y, sinceramente, no sabría ahora mismo cómo retribuirte por todos los tutoriales que nos estás dedicando. Pero, demás está decir que cualquier cosa que necesites, estoy a tu disposición.
Por lo pronto, te entrego un muy merecido Ópalo Reputación

Saludos,
Vala.

#3 Re: Tutorial: Minijuego de Avalancha el Mar Nov 01, 2016 3:03 pm

Natalie

avatar
Impresionante tutorial.... Ópalo Reputación

Lo he leido y hay cosas que no he comprendido bien de primeras porque es de bastante nivel, y sobre todo creo que lo aprenderé mejor al intentar hacerlo en el XP. Por cierto, ¿el código es igual para el XP o solo es válido para Ace?

#4 Re: Tutorial: Minijuego de Avalancha el Mar Nov 01, 2016 6:00 pm

Faye Valentine

avatar
@Natalie: es igual para XP y para Ace, posiblemente para MV de igual manera =)

Por lo demás no te preocupe, puede lucir difícil a primera vista, entiendo que esos códigos hagan lucir todo más complejo de lo que realmente es, pero en realidad todo es lógica pura. Es evaluar situaciones y en caso de uno u otro, actuar de distinta manera =) Los generadores son un copipega absoluto, así que no te preocupes. Es solo cuestión de practicarlo un poco y ponerle algo de atención, seguro que podrás.

¡Saludos!

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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