PROYECTO TLSA ENGINE

Autor: [EX3] (José Miguel Sánchez Fernández)
Nombre del proyecto: T.L.S.A. Engine
Descripción: Motor de juegos programable
Fecha de inicio del proyecto: sábado, 22 de marzo de 2004
Ultima actualización: Friday, 01 de October de 2004
Numero de versión actual: 0.1.694
Estado de la versión: Alpha

Índice de contenidos:


1.- Descripción de proyecto
2.- Registro de progresos del proyecto
3.- Próximos objetivo
s
 

1. Descripción del proyecto


T.L.S.A. son la siglas del nombre del juego que dio origen al proyecto dx_lib32, The Light Star Adventure. Dado mi nivel de ingles en su día me es fácil suponer que el nombre no tenga una sintaxis correcta, pero eso es lo de menos en estos momentos. TLSA iba a ser en sus comienzos hace ya algo mas de 4 años una aventura grafica debido a que era un genero fácil de llevar a cabo. Pero actualmente, con lo aprendido durante estos 4 años gracias al desarrollo de la dx_lib32 y de demás experimentos llevados a cabo con lenguajes como Div2, me decidí a cambiar el genero del juego a ROL en tiempo real isométrico mezclado con algo de plataformas al estilo Prince of Persia o Flash Back. La idea de mezclar en el juego dos géneros diferentes es para dotar al juego de diferentes perspectivas a la hora de jugar. La posibilidad de poder navegar por escenarios y perderse por pasadizos o cualquier otro tipo de estructuras y el poder navegar por niveles con obstáculos, abismos y demás características de un plataformas al puro estilo Prince of Persia.

Dado que la dx_lib32 ya esta preparada para poder llevar a cabo el desarrollo de juegos con ella decidí comenzar a diseñar el motor del TLSA. Estudie multitud de posibilidades. La que mas me gusto era la de poder crear un motor que se pudiese reutilizar para diferentes juegos y con la posibilidad de cambiar el mecanismo de los niveles que definen el genero. Algo así como permite el motor de Half-Life que modificando scripts y la dll del juego te permite hacer con un motor de shot-em-up un juego de carreras o un simulador de vuelo. Entones empecé a darle vueltas a la idea. Al final vi que lo mejor era hacer un motor que funcionase con scripts, scripts que definirían el comportamiento de las entidades, de como se deben generar los niveles del juego y demás funcionalidades internas del propio juego.

La idea es crear un programa que de una amplia base para el desarrollo de juegos. Esto significa que el motor en si ya ofrece ciertas funcionalidades y características necesarias para llevar a cabo el desarrollo de un juego. El motor controlara e inicializara la dx_lib32 por el usuario, comprobara si el sistema soporta el motor, si falta algo necesario (alguna dll o archivo especifico), dará soporte de recursos como hacen motores como el Quake, Half-Life, etc, mediante archivos paquetes con el formato PAK (el mismo formato usado por Quake, Quake2, Half-Life, Heretic2) dando así la posibilidad de utilizar cualquiera de los editores PAK disponibles para estos juegos, un manejador de recursos que se encargara de almacenar en memoria los recursos que necesite el juego mientras se ejecuta y facilitar el acceso a los mismos desde el script, un sistema de entidades que se programaran mediante scripts, un sistema para generar logs o registros de sucesos que puede ser llamado desde el script para registrar sucesos internos del juego, y un completo sistema de scripts basados en el lenguaje BASIC que facilitaran la programación de los mismos gracias a su sencilla sintaxis y a las funciones orientadas para el desarrollo de juegos añadidas.

El objetivo del motor no es mas que el de evitar la programación de la base o motor y programar única y exclusivamente los diferentes módulos que conformaran el juego: menús, pantalla de carga, sistema de niveles, consola de comandos, etc. Luego aparte se podrán cargar scripts para poder ampliar las funcionalidades del motor y del juego, algo así como plugins, ideal para crear modificaciones para el juego.

El motor esta siendo programado, al igual que la dx_lib32, en Visual Basic 6.0 con dx_lib32, que dota de soporte grafico, sonido, video, entrada de periféricos y funciones de sistema, y el Microsoft Script Control 1.0 que dota al motor de la base para crear un script rápido y personalizable con sintaxis idéntica al BASIC utilizado por Visual Basic (mas concreto Visual Basic Script ya que este esta muy limitado en comparación a Visual Basic tradicional). Tanto la dx_lib32 como el MS Script Control vendrán incluidos con el TLSA Engine.
 

2. Registro de progresos del proyecto


Sábado, 22 de Marzo de 2004
---------------------------
Inicio del proyecto. Se comienza a programar el arranque del motor: inicialización de la dx_lib32, comprobación sencilla del sistema. Si ocurre algún error durante el arranque el motor detiene la inicialización y muestra un mensaje de error describiendo el error ocurrido, sus posibles causas y posibles soluciones.

Miércoles, 24 de Marzo de 2004
------------------------------
Sistema generador de logs terminado. El programa genera en memoria el log durante la ejecución y al terminar lo guarda por fecha numero de ejecución en dicha fecha (Ej.: TLSA_LOG(24-03-2004)02.LOG)
Se comienza a programar la búsqueda de recursos de archivos PAK.

Jueves, 25 de Marzo de 2004
---------------------------
Sistema de búsqueda de archivos PAK terminada. El motor busca todos los PAK en una ruta especifica y según ruta donde se encontrara el juego por defecto "\DATA\TLSA\GameData\*.PAK". El motor después de buscar todos los PAK genera una lista con todos los archivos únicos englobando todos los PAK. El motor lista por orden alfabético los PAK encontrados y genera la lista siempre con las ultimas coincidencias localizadas entre los diferentes PAKs y restos de archivos únicos. Esto quiere decir que si tenemos un pak0.pak con un archivo y ruta "GFX\Fondo.bmp" y un pak1.pak con el mismo archivo y ruta "GFX\Fondo.bmp" el archivo del pak1.pak será el que se guarde en la lista de recursos que genera el motor. Este mecanismo esta basado en el de motores como el del Quake, Half-Life, JediKnight, etc...

Jueves, 15 de Abril de 2004
---------------------------
Se añade el MS Script Control al motor pero sin funcionalidad alguna, solo se añade en el arranque del motor. Se añaden nuevos pasos al sistema de arranque.

Miércoles, 5 de Mayo de 2004
----------------------------
Se crea la ventana que hará de interfaz para el motor. Se añade inicialización del modo de video a pantalla completa a una resolución estándar de 640x480x16.

Lunes, 10 de Mayo de 2004
-------------------------
Se añaden las primeras funciones al script, funciones de texto. Comienzan las primeras pruebas del script del motor con código compilado dentro del motor. Al iniciarse el motor aparece la ventana en pantalla completa a 640x480x16 mostrando una frase y un contador de cuadros por segundo (FPS) en la parte superior.

Jueves, 20 de Mayo de 2004
--------------------------
Se comienza a programar el sistema de carga del juego. Se trata que después de inicializar el motor buscara en la lista de recursos un archivo que es una lista de carga donde figura el script y recursos que se cargaran al terminar la inicialización del motor. Ahora el código script que ejecutara el motor se cargara desde los PAKs. La extensión para los archivo script o subprogramas será *.ex3.

Lunes, 14 de Junio de 2004
--------------------------
El sistema de carga de recursos aun esta sin definir. La idea ha sido estudiar la forma más sencilla para poder tener los datos que definan los escenarios y demás parámetros del juego y la lista de recursos que necesiten en un mismo archivo. Se ha creado un formato especifico para el TLSA Engine pero que permite personalizar una parte de el, el buffer de datos.

El archivo estará compuesto por una cabecera que definirá el formato para que el motor lo reconozca y que también contendrá valores como la versión del formato, numero de recursos a cargar, tamaño del buffer de datos y su posición de lectura dentro del archivo. Luego vendrá una lista donde aparecerán las rutas de los recursos a cargar con un valor que identificara si se trata de un grafico, sonido, video, etc... y otro valor que definirá si el recurso debe mantenerse en memoria hasta que el programa finalice su ejecución o si debe ser descargado en la siguiente carga de recursos. El resto del archivo será el buffer de datos, que el motor tratara como un array de datos Byte para ser más flexible y evitar la perdida de información de los datos (razón por la que no se trata los datos como Variant).

El buffer de datos será la parte que el programador definirá a su gusto cuando programe el motor, organizando los datos a su antojo para que luego el script que se encargara de construir los escenarios y demás partes del juego sepa como interpretar ese array de datos Byte, por ejemplo guardando datos de 3 registros que definan un grafico y su posición, una  variable, etc... Las funciones para lectura del buffer serán para lectura de cadenas de texto y de valores numéricos, a las que se les pasara un parámetro de posición de lectura y posiblemente un parámetro que defina la longitud de lectura. Esto ultimo se vera más adelante cuando el script y el formato del archivo estén más avanzados.

Martes, 17 de Agosto de 2004
----------------------------
El sistema de carga de recursos esta casi terminado, solo falta un detalle mínimo. Se ha añadido una consola de comandos  (estilo como la del Quake3) al motor para poder realizar operaciones de carga y algunas funciones más. Esto nos servirá para seguir los procesos del motor sin tener que esperar a que se genere el log al finalizar la ejecución del programa. Desde el script se podrá enviar mensajes a la consola. Posiblemente también se puedan añadir comandos a la consola desde un script. De momento el motor al cargar un archivo de recursos, después de cargar los gráficos y demás recursos, cargara el script motor que moverá el nivel (script principal). En este script se definirán las funciones para generar y "motorizar" el nivel del juego y también se podrán definirán las variables globales, para que así al añadir scripts secundarios estos puedan interactuar con el principal (ADDONS, Plugins, Mods, ...). Poco a poco iré añadiendo funciones al script (graficas, de sonido, de video, etc...). Después de esto se estudiara como implementar el sistema de entidades.

Miércoles, 08 de Septiembre de 2004
-----------------------------------
Se han corregido unos cuantos bugs del motor y se han añadido nuevas características como son la de generar un log en disco en tiempo de ejecución evitando así perder la información del log al no generarse por algún fallo grave de ejecución del programa.

La consola de comandos ya esta terminada y totalmente operativa.

Se ha habilitado la línea de parámetros en la llamada del programa pudiendo así configurar algunas características del motor como el modo de video, presentación (ventana o pantalla completa) y algunas características mas.

También se han realizado algunas modificaciones respecto algunas características implementadas inicialmente como por ejemplo ahora cualquier recurso (grafico, sonido, script, ...) que se cargue en memoria será descargado de la misma al cargar un archivo de recursos, ya no habrá opción para mantenerlo en memoria hasta el final de la ejecución del motor.

Ahora el ejecutable del motor es un programa independiente, no precisa de tener instalado las DLLs que necesita para poder ejecutarse (Runtimes del VB, dx_lib32 y MS Script Control). Estas DLLs ahora van integradas en el propio código del ejecutable haciendo mas fácil su portabilidad a otros equipos sin necesidad de instalar nada excepto MS DirectX.

Jueves, 09 de Septiembre de 2004
--------------------------------
La ventana ya adapta su tamaño al de la resolución utilizada por la clase grafica de dx_lib32 en modos que no sean pantalla completa.

Friday, 01 October 2004
--------------------------
Se ha modificado el tipo dato utilizado para tratar el contenido del archivo de recursos. Antes se interpretaba como un array de tipo Byte, pero como he tenido problemas a la hora de interpretar ciertos datos como los numéricos WORD, DWORD (Integer, Long en Visual Basic) he decidido interpretar el contenido del archivo como un array de tipo Variant (Los tipos Variant son un tipo de dato de 16 bytes que puede contener información de cualquier otro tipo de dato), esto quiere decir que cada elemento del array es un valor total: una cadena de texto, un numero... Esto supondrá algo de velocidad a la hora de trabajar los datos con el script, dado que Visual Basic Script solo trabaja con Variants, ya que no habrá que realizar conversiones pero se perderá un mínimo de optimización en cuanto a memoria se refiere dado que cada elemento del array ocupara 16 bytes sin importar lo que contenga mientras que el array de tipo Byte ocupara tantos bytes como elementos contenga. El buffer de intercambio entre scripts también será de tipo Variant. Esta modificación esta implementada de tal forma que en futuras versiones se podría cambiar de nuevo el tipo de dato a Byte y trabajar sin problemas cambiando solo un modulo de código. De momento se trabajara con datos Variant.

Se han implementado las funciones de lectura de entrada del teclado en el script.

Se ha implementado la primera función grafica del script. Es un simple enlace a la función MAP_DRAW() de dx_GFX, esto quiere decir que no usa la lista de renderizado del motor. Esta función solo esta implementada para realizar pruebas con el motor.

Próximos objetivos


> Crear el sistema de renderizado del motor y las funciones graficas para el script.
> Crear el sistema de entidades.
> Añadir mas funciones al script.


FIN DE IMPRESIÓN