# Proyecto Fenix

Fenix, o el proyecto Fenix, es el nombre de un proyecto multiplataforma de software libre para crear un compilador alternativo al lenguaje DIV parte fundamental de la suite para el desarrollo de videojuegos Div Games Studio. Sin embargo, con el paso del tiempo se han ido añadiendo nuevas características que entre otras cosas, ha derivado en una versión hasta cierto punto incompatible con el lenguaje DIV original y en un nuevo proyecto más ambicioso.

## Características

* Lenguaje interpretado, mezcla de C y Pascal: muy sencillo y potente.
* Multiplataforma extrema: El intérprete funciona en todas las versiones de 32 bits de Windows, GNU/Linux, Mac OS X, BeOS, BSD, GP32, Dreamcast, PSP, GP2X y, en general, en casi cualquier plataforma que soporte SDL y GCC. Los programas compilados pueden ser intercambiados entre cualquiera de esas plataformas sin necesidad de recompilación.
* Procesos (programación multihilo).
* Motor de render 2D por software.
* Modos gráficos 8 y 16 bits, entre otras cosas permite rotación de sprites, escalado, alpha blending, blendops, blit aditivo y sustractivo, etc.
* Soporte (incompleto) para Modo 7.
* Reproducción de sonidos en formato WAV, PCM y Ogg Vorbis.
* Reproducción de módulos de música en formato IT, MOD y XM.
* Soporte de librerías DLL en las plataformas que así lo permiten.

## Historia

En la década de los 90 Daniel Navarro Medrano creó una herramienta orientada a la creación de videojuegos de 32 bits bajo MS-DOS. El nuevo lenguaje, de nombre DIV Games Studio, combinaba características de C y Pascal con un entorno completo que permitía la creación y edición de todos los aspectos de los proyectos: programación, edición gráfica y sonora y un largo etc.
Fenix, inicialmente bajo el nombre DIVC y de naturaleza GNU, apareció de la mano de José Luis Cebrián como una herramienta capaz de compilar y ejecutar esos juegos en Linux. El nombre fue cambiado en la versión 0.6 del compilador, que además introducía otras mejoras, como la aparición de un fichero intermedio entre el entorno de compilación y el entorno de ejecución. Ya no era necesario distribuir el código fuente de un juego para poder jugarlo. La ventaja principal de esa práctica (similar en concepto a Java) era clara, compilar en una plataforma y ejecutar en muchas.
En la versión 0.71 el proyecto quedó parado, lo que dio lugar a múltiples versiones derivadas que corregían fallos o añadían nuevas características.
La versión oficial de Fenix fue retomada por Slàinte en el año 2002, viejo conocido de la comunidad DIV por ser el webmaster de una de las páginas web más importantes para la comunidad, quien continuó el proyecto bajo el nombre de Fenix - Proyecto 1.0 al que pronto se reincorporaría su creador y cuyo primer objetivo era limpiar el compilador de errores y estabilizarlo. Desde entonces el compilador ha sufrido numerosos cambios y mejoras, dejando de lado la compatibilidad con el lenguaje DIV.
En el actualidad, tras un largo tiempo sin modificaciones, en el año 2006, Fenix ha sido retomado por SplinterGU, el mismo que implementó el primer sistema de dlls. Fenix se encuentra actualmente en la versión 0.92, la cual ya posee mejoras importantes en cuanto a rendimiento, estabilidad, prestaciones, etc.
Debido a la base del proyecto, la biblioteca SDL, ha sido posible portar Fenix a un gran número de plataformas, como el propio Linux, Windows, Mac OS X, BSD, BeOS, PlayStation, GP32, GP2X, Dreamcast y otras, aunque las únicas oficialmente soportadas hoy día son Linux, Windows, Mac OS X y BSD. Otras, como GP32 y GP2X gozan de gran aceptación de sus respectivas comunidades y se mantienen gracias a la dedicación de sus usuarios.

## Críticas

Fenix ha sido o es criticado por varios motivos.
El primero es la falta de documentación actualizada. Pese a que existe un extenso manual, éste está orientado a versiones hasta la 0.71 y sólo está disponible en español. El lenguaje ha cambiado desde entonces, dejando ciertas partes del mismo obsoleto. Para solventar esto, se ha puesto a disposición de los usuarios una documentación de las funciones que incorpora la versión del CVS. Sin embargo, se está trabajando en actualizar el sistema y el nuevo sistema (que pretende ser mucho más versátil que el antiguo) aún no está completo.
El proyecto carece de una buena base multilingüe, lo cual provoca en los usuarios no hispanohablantes un cierto recelo en su uso. Esta dificultad está siendo trabajada en las últimas versiones CVS, aún por completar.
Muchos usuarios se quejan de la lentitud del intérprete ya que todas las rutinas gráficas se ejecutan por software. Aunque se ha hablado de posibles versiones aceleradas a través de arquitecturas OpenGL y parece que esta va a ser la vía que se siga en un futuro, aún no hay nada que pueda ser mostrado.
Por último, no existen IDEs completos para plataformas no-Windows, lo que conlleva cierta dificultad en su uso para el resto de plataformas. Recientemente ha aparecido un entorno escrito en Gambas que pretende facilitar el trabajo a los usuarios de Linux. Sin embargo, aún no es más que un editor simple con soporte para resaltado de sintaxis.

## Versiones actuales (0.85 y siguientes)

Las versiones de Fenix posteriores a la 0.84b han sido desarrolladas por SplinterGU y su objetivo es limpiar de fallos Fenix y optimizarlo para una ejecución más rápida, dejando de lado en principio la inclusión de nuevas características cuyo objetivo no vaya en esa línea.
Además, se ha cambiado el sistema de compilación a uno basado en GNU toolchain para todas las plataformas soportadas. Además esta serie de versiones incluye las mejoras necesarias para ofrecer soporte para Windows Vista, incluso con UAC activado.
Otro resultado de esta serie de mejoras es que el rendimiento, en determinados casos llega a ser 3 veces mayor que en la versión 0.84.
Una vez se estabilice por completo la rama actual el objetivo es modularizar Fenix, separando toda la funcionalidad no esencial del núcleo del motor y ofreciéndola como librerías externas. Está previsto que estos cambios se realicen en lo que se ha dado en llamar Proyecto 2.0.
Otras de las mejoras más reseñables (ver enlace más abajo para lista completa de cambios) son:
* Concepto de variables públicas/locales por proceso, esto permite poder declarar variables que son locales a 1 proceso y no a todos.
* Nuevos filtros de escalado gráfico.
* Un soporte de debug más completo
Por ahora, el desarrollo de Fénix está paralizado. Gracias a ser un proyecto de Software Libre, este pudo ser continuado por su comunidad bajo otro nombre: Bennu Game Development, o simplemente BennuGD. Actualmente ya se ha completado la modularización, se ha añadido soporte de 32 bits de color, con mayor portabilidad y con muchos menos bugs.