Mejorando el juego: Neon Gaia Super Defender

Sí, ya he bautizado el juego. Tras un arduo y exhaustivo proceso de brainstorming en el que sólo he participado yo, he decidido llamarle, por lo menos por ahora, Neon Gaia Super Defender. Neon Gaia será el nombre del mecha protagonista y Super Defender la típica coletilla que se pone siempre en los títulos de los juegos de este estilo. ¿El origen?, ni yo mismo lo sé así que no me voy a inventar ninguna justificación :D.

Entrando ya en el terreno de desarrollo, tras continuar y acabar ya con algunos de los tutoriales que mencioné en la entrada anterior y pasar el código basico a POO (siguiendo en parte otro tutorial de la misma persona, y digo en parte porque algunos detalles no me acababan de gustar),  ya tengo una estructura básica para poder empezar a añadir funcionalidades al juego de forma sencilla. En la siguiente imagen se puede ver un diagrama de las clases básicas que manejo por el momento, aunque me falta añadir otras muchas para mejorar el planteamiento del tutorial, creando, por ejemplo, una clase para gestionar los controles u otra para gestionar los enemigos (cuándo aparecen,cómo, etc.), ya que por ahora está todo metido a saco en el main, cosa que no me convence en absoluto porque dificulta bastante la lectura y entendimiento del código.

ClassDiagram2

Básicamente para los objetos del juego hay una clase genérica, GameObject, de la que heredan las demás: NeonGaia que es el robot del jugador, Background para gestionar los fondos, Explosion para las explosiones y otras de las que por ahora solamente hereda una clase en cada caso, Enemy para los enemigos y Weapon para las armas del Neon Gaia y seguramente en un futuro también para las de los enemigos.

Una vez hecho esto pensé que era mejor pasar un rato mejorando el aspecto gráfico para que no fuera tan deprimente y el resultado ha sido este (el vídeo se ve mejor en Youtube con el reproductor grande o a pantalla completa):

Por ahora, mientras no haga mis propias sprites salchicheras voy a dejar las del Hyper Dyne (el juego de Capcom que puse en la entrada anterior) que se ven un poco pequeñas para las pantallas de hoy en día si no se amplían (32×32 píxels). El fondo es un trozo de una imagen de una zona de la Vía Láctea tomada por el telescopio Spitzer de la NASA (un poco pesada quizás) y la música y los efectos de sonido lo saqué de OpenGameArt, de los usuarios FoxSynergy y dklon respectivamente. Esto representaría la estructura típica de un nivel, con la parada del scroll al final donde supuestamente se encontraría el jefe de la fase.

Los siguientes pasos serán, en primer lugar corregir un par de bugs que he visto grabando el vídeo: las explosiones destruyen enemigos (doh!) y cuando el Neon Gaia toca una explosión el juego se cuelga salvajemente y empieza a reservar más memoria que la que dicen que tienen los elefantes. Posteriormente ya entraré en las mejoras de la estructura del código que mencioné antes y crear máquinas de estados para controlar el desarrollo del juego y de sus objetos. También estoy pensando en posibles armas y enemigos.

Un saludo de vuestro amigo y vecino.

P.D.: Como novedad en esta entrada he dejado de poner la coletilla “Spidey blablabla” en el título ya que realmente es absurdo teniendo unas cosas tan bonitas como son las etiquetas de categorías y los tags. Además así se ve el título de la entrada de un vistazo y ocupa menos 😀

Spidey Developer: Primeros pasos con Allegro

En la anterior entrada de esta temática comentaba que había decidido comenzar esta idea empleando la librería Allegro. Tras buscar un poco por su wiki encontré un videotutorial bastante interesante sobre el desarrollo de juegos en 2D con Allegro hecho por un tal Mike Geig, que está accesible aquí.

Este tutorial introduce los diversos componentes de la librería Allegro, desde lo más básico, como puede ser la creación de ventanas de un determinado tamaño en el sistema operativo, las primitivas básicas para crear gráficos o cómo manejar la interacción con los usuarios a través de periféricos de control típicos como ratón y teclado. Además, también trata algunos temas genéricos como la animación de sprites, el tratamiento de colisiones y las diversas formas en las que se puede llevar a cabo o el uso de máquinas de estados para controlar el comportamiento del juego y sus elementos.

Como ejemplo durante el  tutorial se crea un típico juego matamarcianos con vista lateral en el que el objetivo es destruir el mayor número posible de asteroides que avanzan irremediablemente hacia la Tierra. Aunque tenía una idea vaga para un posible juego, ver éste y que era realmente sencillo de programar, pensé que, ya que el tutorial me facilitaba mucho el trabajo y el esfuerzo, lo mejor era empezar por un juego de este estilo para después apuntar más alto. Además, esta decisión hizo que se me ocurrieran nuevas ideas para combinar con las que tenía de antes.

Cuando decidí empezar a hacer un shooter clásico espacial me acordé de un juego con el que me divertía en el MAME hacía tiempo. Un juego que no tenía nada de especial pero que me había llamado la atención porque se manejaba un robot controlado por un humano que se podía combinar con otro (desde siempre me han apasionado) y con el que te enfrentabas a una invasión extraterrestre (historia nada recurrida en el género :D). Me costó encontrar el juego porque no me acordaba del nombre pero al final conseguí dar con él. A continuación enlazo un vídeo con un gameplay del Side Arms Hyper Dyne, de Capcom .

Así que, tras ponerme manos a la obra he llegado hasta aquí y he grabado un pequeño vídeo en el que se puede ver lo super básico que es el juego por ahora (sí, soy muy malo y con vidas estaría muerto en nada):

Los cambios realizados sobre el tutorial son mínimos: básicamente estuve jugando un poco para probar las primitivas gráficas con el objetivo de crear el robotito que se controla y cambié parcialmente el control para poder alternar el disparo apuntando con el ratón sin mover la nave con una pequeña cruceta, a modo de elección de arma alternativa. Los controles son muy simples: se mueve el robot con las teclas W, A, S y D, como es común, se alterna entre los dos tipos de “armas” pulsando la tecla Q, se dispara con el botón izquierdo del ratón y se apunta la cruceta también con el ratón.

La detección de colisiones es muy básica y sólo tiene en cuenta si se encuentran dos rectángulos que rodean a los objetos robot, bala y asteroide. Cuando una bala le da a un asteroide se destruye y lo mismo cuando un asteroide le da al robot, aunque en este caso se pierde una vida, al igual que si un asteroide consigue atravesar intacto toda la pantalla.

En el tutorial se hace todo con programación procedimental clásica así que ahora mismo lo estoy pasando todo a clases para que sea más sencillo de manejar  y para añadir fácilmente nuevos objetos, armas, etc. Para la próxima entrada sobre juegos a lo mejor me animo a meter algo de código por si a alguien le apetece probar algo, incluso un mini tutorial si me veo con ánimos :).

Un saludo de vuestro amigo y vecino.

Spidey Developer: Creando juegos, librerías de desarrollo

games

En la primera entrada comentaba que tenía algún proyectillo en mente cuyo desarrollo compartiría a través de este blog que, de hecho, ha sido una de las razones que hizo decidirme a crearlo para llevar una especie de Dev Diary. Pues bien, uno de estos proyectos es la creación de un juego, programándolo desde cero mediante la ayuda de alguna librería de desarrollo open source existente. Hacía tiempo que tenía ganas de hacer algo así pero nunca me había puesto en serio y me había puesto a hurgar con programas como el RPG Maker o, hace mucho tiempo, haciendo algún mapa para el Heroes III (perdidos en algún disco duro que seguro que ya no funciona). Esta vez, influenciado por un compañero de trabajo que se ha puesto también manos a la obra y por el curso de Udacity que comenzará en febrero, “HTML5 Game Development“, que tengo intención de hacer, he decidido dar de nuevo el pasito e intentar hacer algo desde un nivel más bajo.  Aunque tengo algunas ideas ya para  un juego completo, quiero hacer las cosas poco a poco y seguramente me tomaré mi tiempo, así que comenzaré desde lo más básico: la selección de la librería que voy a emplear, teniendo en cuenta que mi plataforma objetivo por el momento es PC (aunque los dispositivos móviles estén de moda, todo se andará :)).

Tras hacer una búsqueda por Internet, he localizado una serie de librerías entre las que destacaré las siguientes, que son las que más me han llamado la atención y que he considerado, en mayor o menor medida, utilizar:

Librería Plataforma Licencia Descripción básica
SDL Windows, Linux, MacOS LGPL

Todo un clásico, SDL es una librería pensada para facilitar el acceso a diversas funciones multimedia (framebuffer, sonido, eventos…) que ha sido utilizada para la creación de varios juegos, especialmente para Linux.

SFML Windows, Linux, MacOS zlib/libpng

Otra librería multimedia y multiplataforma que facilita el acceso a funciones gráficas, de audio y demás. Tiene bindings para varios lenguajes de programación.

PyGame Windows, Linux, MacOS GPLv2.1

Es un wrapper de SDL para Python, por lo que es altamente portable, que proporciona prácticamente las mismas funcionalidades. Hace tiempo que no se actualiza.

ClanLib Windows, Linux, MacOS zlib

Además de las funcionalidades típicas presentes en las librerías anteriores, ClanLib dispone de multitud de código extra para tratar sprites fácilmente, detección de colisiones, funciones de red o bases de datos.

Libgdx Windows, Linux, Mac OS X, Android, HTML5 Apache 2.0

Realmente más que una librería se trata de un framework para la creación de juegos para diversas plataformas, especialmente orientado hacia Android y HTML5, con soporte de físicas, funciones matemáticas o representación de contenido multimedia y GUIs.

Allegro Windows, Linux, MacOS, iOS, Android y otros zlib

Características similares a las anteriores: soporte gráfico, de audio y controles, fácilmente portable, con la posibilidad de añadir addons y muy sencilla de usar.

Para más información, incluyendo muchas otras librerías, recomiendo visitar este enlace o este otro, además de las webs propias de cada una de ellas.

Finalmente, mi elección ha sido esta última, Allegro, por las siguientes razones (aunque acepto cualquier tipo de consejo):

  • Es una librería que tiene ya bastante tiempo (unos 15 años) pero de todas maneras no para de actualizarse por lo que he podido comprobar y tiene un gran alcance.
  • Existen tutoriales bastante buenos y articulillos que explican sus principales funciones de una forma bastante clara y sencilla, cosa que carecen otras librerías con muchas funciones atractivas, como es el caso de ClanLib.
  • De lo poco que he ojeado la documentación me ha parecido que está bastante clara y explicada.
  • Te permite abstraerte del sistema operativo base, por ahora con Windows, Linux, Mac OS y iOS aunque en la siguiente versión candidata para release se incluye soporte parcial para Android.
  • Aunque no trae soporte para colisiones, físicas o comunicaciones en red por ahora no es algo que me preocupe y siempre podré recurrir a alguna librería dedicada exclusivamente a ello.

En el futuro iré añadiendo más información en el blog. Por ahora ya he empezado a jugar algo con la librería siguiendo uno de los tutoriales y ya tengo alguna cosilla hecha. Esto pinta bien 😀

Un saludo de vuestro amigo y vecino.