Despues de hablar de no querer apuntar demasiado alto, bla, bla, bla... ¡Voy a dar un salto a 2.5D! Bueno... aun no lo tengo del todo claro, pero tengo la intención de crear las paredes del laberinto en 3D y el resto del juego en 2D, sobre todo aprovechando el tema de la iluminación. Ya he conseguido cambiar de cámara ortográfica a cámara de perspectiva y encajar el resultado del cálculo de iluminación en un plano arbitrario dentro de un espacio 3D. Ahora falta ver si encaja con la malla 3D que irá dibujada encima, pero como he dicho, no estoy del todo seguro de querer hacer este cambio, al que le veo bastantes inconvenientes, pero sin duda sería una mejora visual importante.
 
Imagen
Vueltas en programación mirando la posibilidad de convertir toda la estructura del juego en un entorno basado en Scene2D. Resulta interesante, pero rompe con la estructura MVC que estaba siguiendo hasta ahora, por lo que creo que no me compensa. Prefiero seguir teniendo por un lado el control y por otro lo que dibujo. También he pasado mucho tiempo intentando definir luces ambientales al conjunto que vayan mostrando un color determinado para en un primer momento mostrar que anochece con escasos resultados hasta que me he dado cuenta de que necesitaba estar en un entorno GL 2.0. Ahora hay que programar algo que permita “secuenciar” lo que vaya pasando.

En vez de avanzar en la historia, ha habido un gran debate sobre si es mejor ir haciendo juegos pequeños e ir pillando experiencia con ellos o habría que pasar de todo, e intentar hacer un juego personal con un aspecto gráfico novedoso aunque nunca se llegue a realizar por ser demasiado ambicioso. Yo me quedo con la primera opción, así que seguimos adelante ¡ya me parece bastante ambicioso esto!


 
La versión android tiene un problema grave... no permite niveles de recursividad excesivamente grandes y resulta que el algoritmo con el que estábamos generando el laberinto era un algoritmo recursivo, por lo que hemos tenido que rehacerlo para que sea iterativo. Ahora funciona bien y ya podemos generar laberintos en android de las casillas que queramos... bueno... sin pasarnos pq la capacidad de proceso tampoco da para laberintos de más de 900 casillas, lo que equivale a una superficie de juego de 3.600 metros cuadrados... no esta nada mal, aunque tal vez podría mejorarlo afinando el bucle de render para que solo dibuje las casillas que estén alrededor del jugador. Miraré a ver si compensa la complicación o en realidad nunca vamos a usar un laberinto tan grande.

La historia se irá desvelando a partir de recuerdos del protagonista. Los objetos que va encontrando por los laberintos van pasando a mostrarse en una especie de página en plan comic que muestra las viñetas correspondientes a los objetos encontrados manteniéndose el resto de las viñetas en blanco. En el momento en el que todas las viñetas de una página estén rellenas se supone que ese recuerdo está completo y podemos ver la secuencia que corresponde. Cada grupo de laberintos tendrá una hoja de este comic más la hoja de la secuencia inicial que la tenemos rellena desde el principio.
 
Nuevo ajuste al FOV de la cámara para añadir una “vista de mapa” en la que ver una zona amplia del laberinto, el cual estará totalmente negro a no ser que hayas dejado luces encendidas. Programación del sistema para poder crear luces en posiciones concretas del laberinto y añadirlas al laberinto actual.

En los laberintos, además, habría que añadir “elementos decorativos”, de forma que, siempre siendo coherentes con el estilo en el que estoy en ese momento, pases cerca de estatuas, cuadros, esqueletos... cosas que te ayuden a decir «mmm... creo que por aquí ya he pasado» y de paso aporten un poco de variedad a laberintos largos. Como añadido podría ser que en estos elementos haya posibilidad de conseguir secretos. Por poner un ejemplo, podría ser que a lo largo del juego completo se pudieran recolectar 30 piezas de puzzle que al tenerlas todas y resolver el puzzle te de acceso a algún bonus como un nivel nuevo de laberintos o dibujos de los personajes, o poder escuchar las músicas y los efectos del juego (como en los juegos clásicos de MegaDrive y SNES :D), así como ir contando la historia.
 
Sistema de colisiones y definición de entrada y salida del laberinto. ¡Bién! nuestro primer laberinto ya es jugable. Empezamos en un punto concreto y tenemos que llegar a otro punto determinado, disparando un evento al llegar que nos permite pasar al cálculo de puntuación o a disparar una animación o lo que queramos que ocurra. El sistema de iluminación es insuficiente. Al quedar tan oscuro todo lo que no ilumina nuestra luz el laberinto resulta muy claustrofóbico y hace que al dar unos cuantos giros, al no tener absolutamente ninguna referencia de pasillos cercanos, resulte agobiante y aburra, así que cambiamos la iluminación. Esta es mas falsa (una luz más leve que atraviesa las paredes cercanas añadida a tu luz principal), tiene más rango (vemos más lejos) y además ampliamos el FOV de la cámara para que veas una porción de tu entorno. Esta nueva configuración es mas jugable, haciendo que sea más divertido moverse y seguir probando a encontrar la salida.

Decidimos probar un estilo comic para las texturas, con un cell shading falso. En los próximos días habrá que ponerse a ello, ya que hay bastante tarea de esto para tener texturas para los diferentes entornos de laberintos.

El protagonista podría haber entrado a buscar a su pareja. Dando un paseo pasaron junto a un laberinto de setos, a ella le hizo gracia y entró y él, después de dejarle un rato para esconderse fue tras ella. Esta idea además da la posibilidad de que a lo largo del juego se escuche la voz de la muchacha llamándole, dando pequeñas risas, animando a seguir y diciendo cosas como «frío, frío»,«caliente, caliente» o «por ahí no es» según tu proximidad a la salida.
 
Imagen
Implementamos sistema de iluminación y sombras. Generamos sombras en 2D que proyectan las paredes del laberinto debido a que el protagonista se mueve con una antorcha o algún tipo de farol que le alumbra, de forma que el resto del laberinto está totalmente a oscuras, excluyendo aquellas zonas en las que de alguna manera puedas encender una luz. Empaquetado del sistema «laberinto+iluminación+personaje» en una estructura que permita ir replicando para hacer los diferentes niveles.

Dudas sobre como puede ser que el protagonista termine estando dentro del laberinto ¿fue secuestrado y abandonado dentro? Muy Saw ¿Sufrió un accidente y quedó aislado de forma que su única salida era entrar en el laberinto? Muy Perdidos y Bioshock ¿Entró por su propio pie? mmmm... Interesante, pero ¿por qué? Para buscar algo o a alguien. Los que organizan todo esto desde la sombra consiguen meter algo importante para el protagonista dentro del laberinto, lo que hace que este tenga que arriesgarse a entrar.


 
Imagen
Texture and camera test. First build with a maze randomly generated from a seed that you can recover to replicate the level, using a tiles system to draw the walls. The camera can change its FOV and move around the maze in order to test everything is how it is supposed to be.

Concerning the storyline, the main character could be a test subject that doesn't know he is just the entertainment of some people who bet how long he will survive or how far he will reach. We ear their voices between the levels, learning about them by this way.

Prueba de texturas y movimiento de cámara. Creación de una versión de programa en la que a partir de un laberinto generado con un valor fijo, de forma que ese laberinto siempre sea el mismo se le asigne una textura u otra dependiendo del número de paredes vecinas, cree una cámara con un FOV determinado y nos permita el desplazamiento por el laberinto para comprobar que todo está en su sitio.

El protagonista podría ser el sujeto de un experimento que no sabe que se está experimentando con él y que simplemente se ve metido en el juego de otras personas que hacen apuestas en la sombra sobre si conseguirá salir o no del siguiente laberinto. Trozos de diálogo entre estas personas serían lo que abriría paso al siguiente laberinto, de forma que te vas enterando de sus intenciones con esos fragmentos.

 
Imagen
Taking account the original idea  of random labyrinths, we developed a random maze generator, mixing some classic maze generator algorithms with the addition of  an utility to insert open rooms and loops to avoid brute force solvers

In a first iteration we thought the better score for solve the maze was if you discover the 100%, turning on some torches along the maze before leaving, but now we think it should be better the opposite way... The less maze you crawl, the more score you get, so you are rewarded for finding the fastest way to finish. Even so you still might want light the torches to make it easier find the exit.

A partir de la idea original y teniendo en mente el tema de los laberintos aleatorios desarrollamos un generador aleatorio de laberintos a partir de un par de algoritmos clásicos, con un par de añadidos para poder crear zonas abiertas, aunque aun no tengo claro el propósito y para poder añadir ciclos para evitar resoluciones del laberinto por fuerza bruta.

En un primer momento, la idea era que se premiará el hecho de recorrer todo el laberinto encendiendo una serie de luces, antes de salir, pero vemos que sería más interesante lo contrario. Se premiará salir del laberinto de la forma más directa posible, de forma que el hecho de recorrerlo encendiendo las luces será penalizado, debido a que encender luces hace que sea más fácil encontrar la salida.