domingo, 28 de septiembre de 2014

Mars Colonial (Videojuego 3D)



Sinopsis:
Tras muchos esfuerzos y años de exploración espacial, finalmente los seres humanos hemos establecido una colonia en Marte para poder explotar sus recursos. Este anhelado sueño también nos ha revelado una inquietante pesadilla: no estamos solos en el Universo. Una sonda Von-Neumann también ha establecido su base en Marte. Este eficiente astillero automatizado es capaz de crear miles de robots ‘arácnidos’ cuya único objetivo es minar el planeta y autoreplicarse, acabando con cualquier obstáculo que se encuentre en su camino.
Marte es sólo el comienzo, todo nuestro Sistema Solar se encuentra en grave riesgo si consigue los recursos necesarios para conseguir su fin…


Descripción del juego:
Desde un punto de vista más prosaico, este juego sigue los esquemas de los clásicos juegos arcade de destruir ‘marcianos’. La mayor diferencia con éstos, es que toda la acción transcurre en un mundo infinito que simula ser Marte con modelos y escenas en 3D. Cuantos más enemigos destruyes, más aumenta tu nivel. Esto implica que pueden aparecer nuevos tipos de adversario (de momento sólo existen dos), además de que éstos irán creciendo en número y velocidad.
Existen una serie de recursos que se consumen conforme avanza la acción: munición, energía y salud. Los dos primeros se guardan automáticamente cuando acabas la partida para que dispongas de ellos al comenzar de nuevo. Estos recursos pueden reponerse en el transcurso del juego recogiendo las distintas cajas que aparecen en cuanto empiezas a carecer de alguno de ellos.
Otro de los valores que se conservan es el nivel alcanzado durante la partida, además de configuraciones como el idioma, sonido y filtros (dof y bloom).
La IA de los enemigos es bastante básica. Algunos te persiguen de manera constante provocando daños mediante el contacto con sus afiladas patas. Otros se sitúan a cierta distancia y disparan a placer. Los primeros pueden ser exterminados de un solo disparo, mientras que los segundos requieren un poco más de esfuerzo para ser derribados (tres disparos).


Algunas capturas de pantalla con el juego en funcionamiento

¿Qué herramientas se han empleado?
Este juego ha sido desarrollado básicamente con JMonkeyEngine (JME), Blender, Gimp e Inkscape.
JMonkeyEngine es un motor de juegos de código abierto y libre diseñado en Java que permite crear juegos 3D mediante ese lenguaje de programación.

Si sois lectores habituales del blog, sobre Blender, Gimp e Inkscape no tengo mucho más que añadir. El primero ha sido utilizado para crear los modelos y sus animaciones, mientras que tanto Gimp como Inkscape, se han empleado para la creación y edición de imágenes (texturas, fondos, interfaz, etc.).

JMonkeyEngine. Unos breves apuntes:
JME tiene un completo entorno de desarrollo (IDE) que utiliza todas las características de programación de la Plataforma NetBeans (autocompletado de código, herramientas de limpieza, integración VCS) y editores visuales que implementan distintas opciones y herramientas para modelos, terrenos, vehículos, etc. Además, cuenta con un completo conjunto de plugins que permiten complementar aspectos tan importantes como por ejemplo la propia interfaz del juego (Nifty GUI / XML) y que son actualizados automáticamente. Sin embargo, en este caso, he decidido no utilizar Nifty GUI y he partido de cero para implementar toda la  interfaz así como los botones y sus controles.

La incorporación de los activos o modelos digitales (Digital Art Assets) en la construcción del juego es realmente sencilla. Por ejemplo, en el caso de las imágenes basta con arrastrar desde el explorador de archivos a la aplicación. Los modelos en 3D se cargan a través de una herramienta de Importación que previsualiza el modelo, comprueba si existe algún problema y los convierte a un formato compatible llamado .j3o. Una vez importados se almacenan en la carpeta “assets” listos para ser cargados en cualquier visor, en el compositor de la escena (“Scene Composer”) o en el juego a través del “AssetManager”. Ahora tenemos todos los activos, pero ¿cómo se organizan dentro de la Escena?.


JMonkeyEngine en funcionamiento

En JME las escenas organizan todos sus datos jerárquicamente como si fueran un árbol: un padre puede tener múltiples hijos pero cada hijo solo un padre. Así, al actuar sobre el padre (mover, rotar, escalar, anexar, separar de la escena, etc.), el hijo recoge cualquiera de estas transformaciones. Por tanto, es importante planificar el esquema de tu escena desde el nodo principal (rootNode), pasando por cada uno de los nodos que vayas creando. En el último nivel se encontraría la geometría que les permite ser visibles al darles una forma, color, textura, etc.


Diagrama con la organización de la Escena

En cuanto al código, toda la programación en JME se realiza en Java, por lo que si te decides a juguetear con este programa es muy aconsejable que antes hayas adquirido unas nociones básicas en este lenguaje.

Este juego está estructurado en distintas Clases para tener más organizado todos sus elementos (jugador, enemigos, hud, sonido, etc.), separar los controles en algunos casos (p.e. la IA de los enemigos) y tener un mejor acceso y control sobre las distintas pantallas (Start, Main y Float Window). Deben existir cientos de métodos o funciones, y ya no digo de atributos o variables, que he intentado optimizar en la medida de lo posible. Sin embargo, en un proyecto tan vasto existen bastantes cosas que se escapan y que pueden derivar en algún posible bug o falta de rendimiento. Por mi parte intentaré ir mejorando estos problemas si el tiempo y las circunstancias no lo impiden.

Requisitos mínimos del juego:
Sistema operativo
Linux, Windows
Memoria (JVM tamaño de almacenamiento dinámico)
> 10 MB + memoria para los activos digitales (modelos, texturas, sonidos, etc.)
CPU
> 1 GHz
Tarjeta gráfica
AMD/ATI Radeon 9500, NVIDIA GeForce 5 FX, Intel GMA 4500, o superior con soporte para OpenGL 2.0 o superior (las bibliotecas nativas se incluyen en la descarga)
Java (Entorno de ejecución)
Java 5 o superior
Es necesaria una máquina Virtual Java (JVM) para ejecutar los juegos JME.
Normalmente JVM se encuentra preinstalado en la mayoría de equipos, aunque puede obtenerse gratuitamente desde http://www.java.com

Instalación:
El juego puedes descargarlo de manera gratuita desde sourceforge.

•  Linux
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.sh”.
Si tienes un sistema basado en Debian, también tienes la opción de instalarlo mediante un paquete “.deb”.

•  Windows
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.exe”.

•  MacOSX
Descarga el juego, descomprime la carpeta y ejecuta “MarsColonial.app”.

Controles del juego (Atajos de Teclado):
•  W, S, A, D o teclas de dirección: Movimiento del jugador.
•  Barra espaciadora: Disparo.
•  X: Cambiar la posición de disparo del arma.
•  M: Activar o desactivar el sonido.
•  P: Hacer una pausa o continuar con el juego
•  Esc: Cerrar el juego.

Saludos y espero que paséis algún buen rato con él.

2 comentarios:

  1. Otro buen juego!

    La primera vez que conocí el blog lo hice por el juego del Pacman en Blender.
    Me gustan muchos los trabajos que realizas.
    Hace unos meses atrás le he estado poniendo el ojo encima a un Game Engine llamado Godot, con licencia MIT y que a mi parecer se ve bastante prometedor ;)

    http://www.godotengine.org/

    Tiene comunidades muy activas en Facebook y en sus foros, la documentación también es bastante buena y los desarrolladores muy accesibles.

    Dejo el dato aquí por si puedes probarlo y medirlo con lo que ya has usado.

    Saludos y animo con los proyectos :)

    ResponderEliminar
    Respuestas
    1. Pues tiene muy buena pinta. En cuanto tenga algo de tiempo me gustaría pegarle un vistazo. Sí que promete, gracias por el aviso ;)

      Eliminar

¡Me gusta conocer tu opinión! Pregunta si tienes alguna duda, sugerencia o encuentras algún error.

AddThis