Haxe + OpenFL + Away3D: Un framework de desarrollo de videojuegos para GNU/Linux.

By Haxe Foundation - http://haxe.org/img/haxe-logo-vertical.svg, GPL, https://commons.wikimedia.org/w/index.php?curid=38052396

Antes que cualquier cosa, cabe decir que este artículo contiene información que puede llegar a ser superflua si lo que estas buscando es simplemente instalar Haxe, Openfl y Away3D en Ubuntu, te recomiendo ir a la sección: ¿Cómo instalar Haxe +OpenFl + Away3D?.

El porqué


Desde que era pequeño me gustaban los videojuegos, siento que son una forma de expresión divertida y que tienen su propia magia en la forma en que nos dejan ser los protagonistas de una realidad ajena a la nuestra. Los disfruto tanto, en solitario, como cuando juego a partidas multiplayer con mis amigos.
Hace un tiempo, mis amigos y yo, estuvimos jugando a un First Person Shooter táctico bastante viejo llamado Ghost Recon. Cuando terminó la partida, les pregunté a mis amigos, ¿qué aspectos de este mejorarían para que dicho juego fuese considerado un videojuego perfecto?. Después de recopilar sus propuestas, me surgió la idea de hacer mi propio videojuego basado en esas premisas.

Y es que, lo normal es que uno se compre lo que le ofrezcan en el mercado. Si uno se compra un videojuego y dicho videojuego tiene algún fallo o le falta alguna característica que podría mejorar la experiencia, pues uno se tiene que conformar hasta que salga una actualización o tal vez una nueva secuela que haga los cambios. Sin embargo yo quería hacer el mi videojuego perfecto, mi propia receta a la medida con los elementos que habíamos acordado; ahí comenzó mi travesía buscando un buen motor de juegos que fuese software libre, que la licencia me permitiera hacer lo que quisiera con mi juego, que exportara a varias plataformas, que fuese optimizado y sobretodo que funcionase en mi computador con Ubuntu.

Comienza la odisea

Lo normal es irse por lo fácil. Hay dos opciones que, a día de hoy, llevan la bandera en el desarrollo de juegos Indie. El Unreal Engine 4 y el motor Unity3D. Ambos, son motores propietarios que tienen sus clientes oficiales para Mac y Windows. Pero al ser propietarios, y su licencia restrictiva, paso por ahora de ellos.

Descubrí Godot como motor de desarrollo, en un principio me pareció  interesante porque reunía todas las características que estaba buscando, hasta que quedé tristemente sorprendido por su lento desempeño con los juegos tridimensionales; así que tuve que dejarlo.

Probé Blender Game Engine (BGE), también un opción interesante, su único defecto es que no tiene forma de exportar juegos a múltiples plataformas más allá de la santa trinidad de los sistemas operativos, Windows, Mac y Linux. existe un Plug-in que exporta a Android que funciona sobre una capa que ejecuta HTML5 y WebGL. Algo que me pareció extraño.
Buscando buscando, me encontré con un motor integrado en Blender llamado Armory3D. Exporta en varias plataformas, es software libre y es bastante veloz. Su mayor fallo es que aún está en estado alfa, por lo que no tiene una versión oficial mas allá de la que ofrece con un pago en Itch.io. También tiene un repositorio en github.com para descargarte el plug-in y configurarlo en Blender manualmente.

Creí que estaba todo perdido hasta que me dí cuenta que Armory3D estaba creado bajo una plataforma que se llama Haxe, el cual es un lenguaje de programación en bajo nivel para juegos. Haxe es la capa que permite ejecutar con rapidez, nativamente y en varias plataformas juegos que uno solo programa una sola vez. Y me sorprendió su gran adopción en el campo del desarrollo indie.

El problema de Haxe es que funciona en un nivel muy bajo, sin embargo, otros desarrolladores han programado frameworks que funcionan encima de Haxe. Entre ellos, Kha que es un framework 3D el cual intenté instalar pero no me funcionó del todo bien.

Lo interesante comienza aquí. Descubrí Lime, que funciona sobre Haxe y hace de capa de bajo nivel para desarrollo cruzado a varias plataformas que van desde: móviles, juegos flash y aplicaciones nativas. Lime por sí solo no es tan útil; pero cuando entra OpenFL, la historia cambia. 

OpenFL permite desarrollar juegos 2d apoyándose en Haxe + Lime. Usa sintaxis que normalmente veríamos en ActionScript de Flash, sin embargo las plataformas a las que permite exportar son las mismas que Lime. Esto quiere decir que el desarrollo en este framework es fácil y cómodo si uno está acostumbrado a lenguajes como Java, C++ o ActionScript como dije antes.
El último componente que hacía falta para que todo fuera perfecto es poder hacer juegos en tres dimensiones. OpenFL hace muy bien su trabajo en 2d pero para hacer algo en 3D hay que vérselas con OpenGl y WebGl. Aquí es donde entra OpenFL/Away3D a jugar.

Inicialmente, Away3D era un framework open source para hacer juegos 3D que funcionaran sobre el API de Adobe Flash. El proyecto OpenFL terminó haciendo un port de las funcionalidades 3d que tenía Away3D a OpenFL, lo cual facilitó mucho el desarrollo de juegos en tres dimensiones. La mayor virtud de Away3D es que no hay que trastear con OpenGL para hacer un objeto simple; sino que ahora puedes importar objetos tipo Collada (.dae) (el cual  es el estándar libre para objetos 3D). Lo mejor es que los archivos .dae se pueden exportar desde Blender fácilmente a golpe de click. Por último, cabe resaltar que Away3D tiene un gran repertorio de funciones para hacer Shading y Materiales. Es muy entendible la forma en que se aplican las texturas y los materiales a los modelos. Todo esto me terminó convenciendo de sus virtudes.

¿Cómo instalar Haxe +OpenFl + Away3D?

Si has usado Node.js y su instalador de dependencias npm, te resultará sencillo instalar HOA3D. Para instalarlo en Ubuntu simplemente añade los repositorios, instalas Haxe y creas una carpeta en donde ubicarás las dependencias que Haxe vaya necesitando.

sudo add-apt-repository ppa:haxe/releases -y
sudo apt-get update
sudo apt-get install haxe -y
mkdir ~/haxelib && haxelib setup ~/haxelib

Ahora pasamos a instalar OpenFL, si te pregunta que si quieres que agregue openfl como un comando del sistema, dale s:
 
haxelib install openfl
haxelib run openfl setup

Por último instalamos Away3D:
 
openfl install away3d

Para ver si todo está funcionando, puedes crear algún proyecto que trae por defecto Away3D, vamos a crear el de Shading:

openfl create away3d Shading

Este te crea una carpeta con el proyecto en el directorio en la que estas ubicado. ahora lo que debes hacer es entrar a la carpeta y ejecutar la maquina virtual neko para probar la ejecución del programa:

cd Shading
openfl test neko

---- Editado mucho tiempo después ----

Esto es todo por ahora, la verdad el motor tiene un potencial enorme y me dan unas ganas gigantescas de volver a hacer alguna prueba y aprender a sacarle el jugo.

Comentarios

Entradas populares de este blog

De la vida a puertas de los 30

El espacio interno de un diletante