Todas y cada una de las partes textuales del juego se han implementado usando un módulo de internacionalización que puede ser configurado a través del propio menú principal.
Cada cadena de caracteres es referenciada en el juego mediante el uso de una clave. Cuando se necesita mostrar el contenido de la misma, se busca en un archivo de configuración: si la clave tiene su correspondiente traducción en el idioma actual del juego, se muestra la cadena traducida por pantalla. En el caso de que no sea así, el propio nombre de la clave será el que se muestre.
Este sistema permite que un juego pueda ser traducido a diferentes lenguajes incluso después de su lanzamiento, y por otra parte permite que un juego pueda ser jugado incluso con traducciones incompletas.
Para elaborar los tilemaps, hemos decidido utilizar el famoso editor de tiles Tiled. Este programa nos da la posibilidad de elaborar directamente los mapas en el editor y exportar los mismos en JSON, evitando el uso de XML por ser éste un formato más pesado y necesitado de parseo.
Varios objetos se han desarrollado para llevar a nuestro soporte del motor del juego casi completamente en Tiled: tilemaps, tilesets,capas y opacidad.
Con el fin de facilitar el desarrollo del juego, hemos trabajado en un motor de juego propulsado por el poder de Gosu.
Se trata de implementar una gran cantidad de funciones no compatibles con una biblioteca simple de gráficos como Gosu: archivos de configuración, sprites, cámaras, detección de colisiones, pathfinding, gestión de tiempo, organización de eventos… Todas estas características han sido implementadas en el motor del juego, por lo que se pueden utilizar directamente en nuestro proyecto, incluso si se plantea su exportación para su uso en otros juegos.
En cada uno de los niveles tenemos que evitar a los guardias que están buscando a intrusos como nosotros.
Los guardias pasan por diferentes estados con el fin de encontrarte. El primero de estos estados es el de patrulla, en el cual recorren diferentes puntos del mapa especificados en el archivo de nivel. Para localizarte usan una linterna que mueven en varias direcciones con un haz de luz en forma de triángulo, que se utiliza para detectar colisiones con el jugador.
En el caso de que el jugador colisione con el haz de luz, el guardia pasa a estado de búsqueda: avanza más rápido, dirigiéndose a toda prisa hacía el último punto en el que se encontró el jugador. Para la búsqueda se usa internamente el algoritmo A*.
El último estado por el que pasa un guardia es el de tranquilidad: una vez perdida la vista del jugador, el guardia volverá a patrullar tranquilamente por su zona.
Como idea para complementar el juego, vamos a incluir un pequeño cómic de cuatro viñetas que aparecerá una vez se le de a Jugar, en el Menú Principal, y antes de que aparezca la primera pantalla de juego.
El cómic es totalmente original; cada viñeta ha sido individualmente vectorizada en su totalidad con el programa de software libre Inkscape, y las viñetas han sido posteriormente montadas con GIMP , y se ha tomado algunos rasgos inspirados en el dibujante Francisco Ibañez, y sirve para introducir al jugador al juego, con una breve historia.
El cómic se podrá saltar pulsando la tecla Escape (Esc), para no aburrir al usuario por cada vez que quiera empezar el juego de nuevo.
1. Una noche tranquila de verano.
2. Un ruido rompe el silencio en la noche.
3. Un atraco se está produciendo.
4. Manolo ‘el Cluni’ se ha colado en el Museo sin ser visto.
Tras la primera presentación, ampliamos el proyecto añadiéndo nuevas pistas de audio para los distintas partes del juego. La música ha sido totalmente realizada y producida por Jose Pablo Tur, especiálmente para el juego.
Las distintas pistas son:
Menú principal del Juego
Nivel 1 – Tuberías
Nivel 2 – Egipto
Menú de Pausa, durante el juego
Siguen en producción varias pistas más para concluir los dos niveles que restan al juego y aplicar los efectos de sonido que acompañará al videojuego durante su ejecución.
Compartimos la primera presentación de clase del Proyecto ‘De guante blanco’: