6 Dimensions: Cómo hacer un videojuego con físicas de la librería Box2D

Ago 23

6 Dimensions: Cómo hacer un videojuego con físicas de la librería Box2D

Introducción

Esta semana he terminado un juego que empecé hace más de un año, no había podido acabarlo por falta de tecnología necesaria, cosas como la física de agua y programas para la GPU llamados shaders, específicos, no estuvieron disponibles al nivel que un juego exige hasta hace apenas dos o tres meses.

Compra el juego en AppStore

Historia

De hecho, cuando terminé con el juego de los caballos estaba haciendo otro par de juegos distintos, uno de cuidar granjas y otro de un avión bombardero, pero como tuve un accidente y no podía tener acceso al ordenador, estuve programando en el iPad desde la cama del hospital este juego de físicas, de hecho hay una historia interesante que ocurrió con este juego. Pero antes, como en el cine, os pongo el trailer del juego #6Dimensions , acción!

Si miráis el foro de Codea, veréis que algunos vídeos hay un modo especial dentro del juego, el modo “enfermo” o “illness”, las transiciones que se muestran al terminar un nivel las diseñé durante una fiebre por insolación y de ahí que sean tan horrorosas, como a alguna gente de los foros de Codea les resultó interesante-gracioso los dejé pero como una opción.

Progreso

Me llevó un tiempo poder ir diseñando los elementos del juego, fuí aprendiendo sobre diseño de niveles en 2D, de hecho, gracias a algunos artículos de la prestigiosa revista de desarrollo de videojuegos, Gamasutra (este , este o este!), entendí mejor qué es lo que quería y como conseguirlo, sabiendo que me iba a llevar bastante tiempo. Sobre todo porque necesitaba crear unos cuantos elementos de diseño de niveles para que fuera realmente interesante.

Me dí cuenta de que necesitaba darle un enfoque al primer prototipo, que sólo era un juego como Crayon Physics:

Estaba bien , pero necesitaba algo más, estuve investigando y descubrí que lo mejor sería hacer un juego que sirviera a la vez de una serie de tutoriales para que la gente y yo, claro, fuéramos aprendiendo sobre la física de Newton contenida en la librería Box2D, y que a la vez pudiera descubrir nuevas formas de aprender gamificación para diseñar juegos más entretenidos y que exploraran nuestra psique humana con un enfoque más abierto y profundo.

Así que aún sigo aprendiendo un montón de #gamificación con este juego, de hecho, aún me queda por completar una de las partes que es la del dibujo multijugador cooperativo para terminar de cerrar el círculo del ecosistema en esta fauna de jugadores que es el mundo.

Diseño del juego

Quizás os estéis preguntando por qué el título sugiere que sean 6 dimensiones y no 12 o cualquier otro número, la verdad es que me fascinó la teoría de las 6 dimensiones del electromagnetismo (3 dimensiones de campo eléctrico junto con las tres del magnetismo dan un tensor de seis dimensiones), eso, combinado con este artículo sobre las 6 dimensiones del tiempo, me convencieron para combinar una serie de mecánicas de juego en 6 mundos distintos o dimensiones pues cada una tenía sus reglas y se parecían bastante a la teoría del tiempo en el que las espirales del futuro y el pasado se unen en el presente luego el tiempo no existe pero somos conscientes de las dimensiones físicas, y la fuerza de la gravedad representa mejor que ninguna la presencia de campos electromagnéticos.
A raiz de esto, empecé a crear una serie de historias y contraté un ilustrador, un músico y un grafista, aquí un ejemplo del cómic:

Ejemplo de personaje para la serie de 6 cómics del juego

Ejemplo de personaje para la serie de 6 cómics del juego

Para mostrar los cómics he usado un algoritmo GPU (shader) basado en la función glsl mod que va moviendo la textura a un tamaño y posición adecuado para seguir la historia.

Tecnología

Además de escribir los shaders en glsl (C), el juego está escrito en Objective C y Lua.
Usa la librería Box2d desde Lua, para crear la parte del agua bastaría con usar physics.body(CIRCLE,radius) con un for hasta el número de bolas que queramos, y luego para pintarlas , en creamos una imagen en memoria y una malla (mesh) del tamaño del ancho y largo de la pantalla, a la que le asignamos la textura, por último, en el loop de dibujado del juego, pintamos en la posición de la bola dentro de la imagen que es la textura y le aplicamos el shader que lo que hace es comprobar la distancia de cada bola con el resto de bolas, aplicándole un filtro de color, en este caso azul.

Seguí desarrollando una a una las técnicas y características de la famosa librería física, esto me llevó algunos meses, por ejemplo la parte de elaboración del algoritmo para la física de agua fué de los métodos más difíciles, toda la información que había internet apuntaba a que había que desarrollar una cosa llamada metabolas, el resultado de meses de investigación fué este:

ya con modificadores de terreno.

Todos los elementos de los niveles están explicados y con código fuente para descargar, tenemos

Programación de niveles

Una vez diseñados los niveles sobre el papel, he aquí un ejemplo:

Diseño de niveles sobre el papel

Diseño de niveles sobre el papel

Diseño de niveles

Para definir un nivel lo único que hay que hacer es pasarle a la clase Level un array con los contenidos que definen este, por ejemplo, para el nivel 8 del mundo 4 (física de planetas), tenemos algo como esto:

donde especificamos que no queremos que en el evento de colisión de cada objeto se genere un sonido procedural porque habrá una cantidad desorbitada y podría congestionar el engine y reventar el juego, así como le especificamos una lista de planetas, con esto el motor sobreentiende que ha de establecer la gravedad como un vector(0,0), y que cada planeta, en función de si es un atractor o no, se moverá o no, dependiendo de los planetas a los que es atraido o empujará a los que tenga en su campo de acción. Se especifican otros parámetros, como los gráficos, los elementos del escenario, como el nombre del nivel, dónde se colocará la estrella y el jugador, elementos decorativos, modificadores, etc. todo esto hay que pensarlo muy bien y para cada ancho de pantalla, sin sobrecargar el motor para que funcione en los viejos igual de bien,etc.

Este es el resultado

Aquí hay otro ejemplo de un nivel ,con cuerdas elásticas y cuerpos blandos además de elementos que usan funciones de consulta al motor de físicas , de tipo “AABB”, son como unos sensores que nos dicen con todo lo que colisiona una línea o un conjunto de ellas, con los cuerpos con máscaras y categorías definidas afines.

Jugadores

Si os preguntáis cuáles son estos tipos de jugadores, me gusta lo que define Andrzej Marczewski en este artículo, en función de eso he elaborado este sencillo esquema:

Esquema de jugadores

Esquema de jugadores

…donde tenemos a los jugadores sociales, para los que completar un nivel no es tan importante como enseñarlo al mundo a través de facebook, twitter, game center y todo el que se pase por delante suyo “informáticamente” hablando jaja, después están los filántropos a los que les encanta saber cosas sobre el juego para poder enseñar a otros jugadores, para eso, en los comentarios de youtube podrá satisfacer las curiosidades de un juego como este que ofrece muchas posibilidades para pasar un nivel, y gracias a este sistema de comunicación los sociales se verán encantados de tener con alguien con quien hablar, a los que les encantan los retos (achievers) seguramente será de los que más les guste el juego ya que hay muchísimos niveles que completar y tendrán ayuda para hacerlo y así acumular puntos,estrellas y logros de GameCenter, etc. Por último nos quedan los espíritus libres que disfrutarán de poder elegir el mundo en el que quieran jugar y repetir los niveles de bonus (cada nivel 6 de cada mundo) y a parte cuando esté en el modo multijugador, podrán crear e interactuar con otros para crear obras colaborativas por turnos, cosa que disfrutarán mucho los sociales y donde los filántropos desearán conocer para ser los que más sepan sobre el dibujo. Como véis he pintado unas flechas para saber el flujo de las acciones de cada tipo de jugador, pero como somos personas, no hay un tipo definido estándar por lo que cada persona tirará hacia uno u otro lado de la balanza según le guste o se le dé el día jaja

El juego está disponible en AppStore para comprar.

articulo_gamasutra

La versión de este artículo en inglés está en Gamasutra, salió el 26/08/13 en la portada (destacado).

Artículos relacionados

  • ...

2 contribuciones

  1. Ooo, you used my user types model!! Have to check this game out now 🙂

    • Hey, what an honor!
      I’m so glad to see you in this blog 🙂 , and I hope you’ll like the version 1.2 with collaborative painting [ Game Center Turn based online ]

Exprésate dejando un comentario:

Introduce el captcha

Por favor escriba los caracteres de la imagen captcha en el cuadro de entrada