| Descargas | F.A.Q. | Artículos | Screenshots | Comunidad | Archivo | Foro | English Info | Acerca >

Noticias Abril 2002


29/04/02
- Actualizo para comentaros que voy a tener que variar un poco los planes de desarrollo en cuanto a cuándo tener listo la totalidad del motor. El caso es que fui a ver a mi director de proyecto la semana pasada y me recomendó que comenzará ya a realizar la documentación de cara a la presentación del proyecto. Al final, el proyecto lo presentaré en septiembre pero lo ideal sería que la totalidad de la documentación esté acabada en el mes de Mayo, esto me permitirá luego trabajar en lo que es terminar los detalles actuales del motor.

Es importante que la documentación esté cerrada en Mayo porque luego viene el verano y será mucho más complicado, por no decir imposible, localizar a mi director de proyecto y la documentación que debo de presentar cambia sustancialmente con respecto al formato que he ido publicando en web (de todas formas, todo lo que he escrito es completamente válido y utilizable) y tendré que realizar varias consultas a mi director. Por cierto, la presentación en septiembre ya es totalmente oficial (a falta de la ratificación), de hecho, ya eché la solicitud de anteproyecto.

- Del motor ya tengo apuntado en una hoja los aspectos que me quedan por implementar. Vienen a ser 10 puntos que ocupan una hoja por las dos caras, tampoco me preocupan en exceso. Los mayores problemas se centrarían en dar un buen repaso al sistema de combate y su comportamiento con lo scripts. Procuraré intentar acabar algunos de ellos durante el mes de Mayo e incluso publicar otra beta con los scripts ya en funcionamiento antes de que acabe ese mes, para que sea vea cómo se pueden crear, gracias a los scripts, situaciones de juego, que es lo que verdaderamente se persigue.


19/04/02
- Bueno, actualizo para comentaros un poco como ha sido esta semana en la construcción del motor. Actualmente, ya tengo todos eventos funcionando salvo los idle (los eventos idle son aquellos que se ejecutan de forma automática cada cierto tiempo) de las entidades y del universo de juego. Todo lo que he probado funciona correctamente salvo un pequeño bug que aún no he solucionado y que como parece que no me va a molestar mucho, dejaré para un poco más adelante. Lo que sí es cierto, es que he tenido que realizar unos cuantos ajustes sobre el diseño original de algunos eventos script (que ya comentaré en otra actualización).

- Para que os hagáis una idea de lo que ya se puede hacer, si habéis probado la última beta de Crisol, ya es posible hacer cosas como que cuando el jugador manipule la estátua con luz, ésta se apague si está encendida y se encienda si está apagada. ¿Cómo se haría esto?. Muy sencillo, en primer lugar asociariamos un script al evento OnManipulate de ese objeto de escenario. Para asociar los scripts a los eventos, se deberá de acudir al perfil donde definimos la estatua (en la actual versión de CrisolBuilder esto no es posible pues dicha versión aún no está preparada para trabajar con scripts) e indicar que para ese evento queremos asociar un archivo script (en el ejemplo lo hemos llamado "Script_OnManipulate_Statue.cst"). Al asociar el script al evento de manipular permitiremos tal acción cuando se quiera interactuar con la estatua. Dentro del juego, si el motor detecta que el jugador (o cualquier npc) desea manipular la estatua lanzará el script que asociamos a tal evento.

A continuación os muestro un posible código fuente que haría falta programar para hacer que la estatua se apague si está encendida o se encienda si está apagada cuando el jugador manipule sobre ella (lo mejor de todo es que esto ya es posible, está probado y... ¡funciona! :):
	  
////////////////////////////////////////////////////////////////////////////
// Fichero:
// Script_OnManipulate_Statue.cst
//
// Notas:
// - Script asociado al evento OnManipulate para la estatua de luz. Cuando
//   se produzca el evento de manipular, este script sera llamado pasandose
//   en el argumento TheEntity la entidad manipulada (la estatua) y en 
//   TheCriature la criatura que la manipula (el jugador o cualquier otro
//   npc al que se le ordene que realice esa accion).
////////////////////////////////////////////////////////////////////////////
script OnManipulateEntity(entity TheEntity,
                          entity TheCriature)
begin
  // ¿La estatua tiene luz asociada?	
 if (TheEntity.GetLight() != 0) then begin
  // Si, se quita
  TheEntity.SetLight(0);
 end else begin
  // No, se establece luz maxima
  TheEntity.SetLight(255);
 end
end
- Lo que haré a partir de mañana y la siguiente semana, será terminar de codificar todas las instrucciones de código intermedio. Actualmente están las que podríamos considerar como las simples, esto es, aquellas que se procesan y ejecutan directamente. Las complicadas son aquellas que cuando se procesen deberán de detener el script en ejecución, esperar que se ejecute la instrucción que representa y regresar al script. Tengo la forma de resolver estos problemas ya escrito en borrador, pero mañana tendre que repasar todo.


13/04/02
- Ya tengo la base de la máquina virtual programada y fucionando, de hecho ¡ya he hecho funcionar un script!. Para ir haciendo pruebas estoy asociando al evento de la pulsación del panel horario un script, de tal forma que rápidamente pueda comprobar cómo de bien analiza el código intermedio (generado en el compilador) la máquina virtual. Las buenas noticias es que después de corregir múltiples errores en el compilador (la versión 0.6, que es la que se halla en web, tiene bastantes problemas internos ya corregidos) y en el primer diseño de la máquina virtual, he hecho funcionar un script con uso de funciones, llamadas al API del motor, llamadas recursivas, bucles y paso de variables por referencia. En definitiva, que he estado mostrando texto a la consola de juego pero usando las técnicas anteriores. Aunque esto pueda parecer una tonteria es realmente genial ver como habiendo programado un archivo script y habiendo asociado a un evento... ¡pasa algo! :).

En fin, ahora sí que aparece la sensación de estar en la recta final, aún así queda un camino nada trivial hasta el final, pues está pendiente diseñar unas cuantas interfaces para hacer que haya una buena y elegante comunicación entre los scripts y el resto del código, hacer que los scripts esperen desde una porción de código hasta que se complete una acción, etc. Todos estos problemas ya los tengo "resueltos" sobre papel y será en lo que a partir de mañana mismo ocupe mi tiempo.

- Aprovecho para colgar una nueva captura. Gracias a Manuel Moreno "Dracke" y Marcelo Galán "Sbe-Caos" estoy pudiendo trabajar con bastante motivación desde el punto de vista gráfico, ya que ellos están realizando un trabajo genial y altruista realizando los gráficos de apoyo para Crisol. En la última semana Marcelo ha realizado dos renders excelentes para el fondo de la creación de personaje y para la pantalla de inventario del jugador. Hoy por la tarde he aprovechado para "relajar" y he integrado uno de esos renders, en concreto el relativo a la creación del personaje, cambiando el diseño de esa pantalla (esto lo podéis hacer vosotros con sólo consultar la documentación de CrisolBuilder). Además le he añadido las animaciones estáticas que ya he utilizado para los créditos. ¡Mil gracias Marcelo, Manu :)!.

Nuevo diseño para la creación del jugador



5/04/02
- Al fin subo la versión íntegra del compilador. Ya tengo construidos todos los pasos que llevan hasta la generación del archivo de código intermedio que será usado en la máquina virtual (pendiente de programar). De todas formas, no estoy seguro de que el compilador esté libre de bugs, probablemente tenga unos cuantos ya que no he podido probar todas las situaciones ni todas las llamadas a funciones internas. La versión que ofrezco está creada en modo debug (la versión que ofrezca cuando esté seguro de que no hay errores, ocupará menos tamaño y será más rápida). La documentación a penas ha sufrido variaciones, simplemente he añadido un pequeño apartado al final sobre el uso del compilador (lo he llamado CSCompiler de CrisolScript Compiler) y he organizado un poquito el texto que ya había. En la sección de descarga podéis encontrar la última versión, la 0.6, del compilador.


1/04/02
- He decidido ponerme a diseñar por mi cuenta lo que es la última parte del compilador (emisión del código en formato binario) y la creación de la máquina virtual. Ya tengo el borrador de lo que será todo el modulo CScriptingEngine (la máquina virtual) y la forma en la que organizaré la ejecución de las instrucciones, los stack frames de cada proceso, etc. En otras palabras, que esta tarde comenzaré a trastear de nuevo con el compilador. Para guiarme en esta última parte, he estado buscando información general de cómo funciona la máquina virtual de Java (por cierto, os recomiendo todos los artículos "Under the Hood" de esa web) y también me ha servido de gran ayuda un pequeño capítulo del libro sobre construcción de compiladores que compré hace tiempo: "Writing Compilers and Interpreters", en donde explica un modelo de stack frame que yo he encontrado muy útil y, por lo que he podido averiguar, viene a ser muy parecido al usado en la máquina virtual de Java. Cuando hablo de stack frame, me refiero a la forma en la que al llamar a una función dentro de lo que es la ejecución de código intermedio, se prepara una estructura de datos de tipo pila para saber quien ha llamado a esa función, alojar sus variables y constantes locales, y reservar espacio para las operaciones que se ejecuten a través del código intermedio. Todo esto a grandes rasgos, claro.

Si os estáis preguntando cómo es que teniendo este libro he necesitado acudir al tutorial de pxdscript, os diré que aunque el libro resulta muy interesante en general, desarrolla código intermedio para ejecutarse en una arquitectura Intel 8086 y eso supone que en lugar de trabajar con una máquina virtual de pila, lo hace con registros, con la consiguiente complejidad que no me interesa en absoluto para un proyecto como este. Por otro lado, el libro cojea un poco exponiendo los pasos que se siguen para implementar el compilador pues recurre mucho al viejo truco de listar hojas y hojas de código fuente en C++ (el cual, por cierto, no me acaba de gustar, pero esto ya son opiniones personales). De todas formas, hay numerosas partes del libro que son sumamente interesantes y como ya he comentado, una de ellas me ha servido para inspirarme en el modelo de stack frame que voy a utilizar en la máquina virtual de CrisolScript.

- Hoy mismo he encargado el libro "AI Game Programming Wisdom" sobre temas de inteligencia artificial, scripting (en el índice vienen articulos bastante prometedores) y demás temas relacionados con lo que es la programacion lógica en un juego. El libro está orientado según los cánones de los Game Programming Gems (de hecho, esta editado por la misma casa). En fin, tan pronto lo reciba y revise os comentaré qué tal está. Si hay alguien interesado en adquirirlo, le sugiero que se pase por Barnes & Noble porque sale considerablemente más asequible en precio que en Amazon.

- El jueves pasado envié un email a Flipcode proponiendo a Crisol participar en la sección "Image of the Day" de esta conocida web de programación. Supongo que tardará aún unos días (suponiendo que sea seleccionado, que yo espero que sí) porque la cola de proyectos que deben de tener ha de ser más que considerable. En fin, espero que sirva para popularizar un poco más el motor y haya gente que se decida a darle soporte una vez que el código fuente sea liberado o bien que se anime a construir herramientas gráficas que lo único que tendrían que hacer sería ofrecer un interfaz visual, pues el verdadero trabajo de estas ya está programado mediante herramientas que he creado pero que funcionan en línea de comandos.

- Por último, la página parece que funciona a ratos porque en tripod están de mantenimiento y desconectan los servidores sin avisar (eso sin contar lo que me hicieron borrando la web entera y deshabilitándome la cuenta). Espero que se solucione pronto o al menos tengan la consideración de avisar porque la verdad es que fastidia bastante.