El blog personal de Morgul, donde escribe sobre sus aficiones, descubrimientos y actividades, compartiendo conocimientos.

1 de febrero de 2010

Mi intérprete de aventuras DAAD

Últimamente, he estado desarrollando un intérprete tipo PAW con el lenguaje de programación Python, lenguaje que además de ser muy potente, permite programar aplicaciones de cualquier complejidad en muy poco tiempo (este proyecto es una buena prueba de esta afirmación).

Mi intención es hacer este intérprete genérico, de modo que pueda extenderse fácilmente para soportar cualquier sistema tipo PAW existente, añadiendo en módulos aparte los condactos adicionales (los de The PAWS estándar ya los implementará mi intérprete) y funciones para cargar o importar las bases de datos. Y también extensible en cuanto a poder incorporarlo en un sistema de creación integrado, partiendo convenientemente en módulos para aprovechar el código de buen modo, sin necesidad de duplicarlo.

Como ya había avanzado bastante en la comprensión y aprovechamiento de las bases de datos de algunas de las primeras versiones del parser DAAD, me aventuré a probar y adaptar mi intérprete para aventuras con este sistema (sobre todo, el 'Jabato'), sin perder de vista el aspecto de facilitar la compatibilidad hacia atrás (The Quill, The PAWS, SWAN) y hacia adelante (otros sistemas tipo PAW posteriores, como NMP, SINTAC, SKC, etc.). Esto me ha permitido avanzar aún más en mi descubrimiento arqueológico de los recovecos de DAAD (y sus precursores).

Ayer mismo, me puse tan contento cuando vi que lo que tenía hecho funcionaba tan bien, y de modo tan parecido ya al mismo intérprete DAAD original de el 'Jabato' (ejecutando esta aventura), que grabé un vídeo para compartir con vosotros, y que podáis ver que esto es más que puro vaporware:



En el vídeo (sobre todo en la versión con mayor calidad, la del enlace de descarga que indico en YouTube), si se presta suficiente atención, se aprecian algunos defectos. Unos cuantos de estos los he corregido ya hoy, como:
  • Mayor velocidad de ejecución. Mi intérprete, cuando tenía la traza de banderas activada (el mostrar cómo van cambiando estas), iba bastante lento. Esto me hizo tener que enlentecer enormemente la emulación de DOSBox, para poder comparar de modo visualmente más fácil la ejecución de ambos intérpretes a la vez. Lo he solucionado haciendo que sólo se redibujen las banderas que cambien de valor o color. En comparación, ahora vuela... deshabilitando la acción de espera de los condactos PAUSE y ANYKEY, la ejecución de lo que en el vídeo dura más de un minuto, ahora tarda unos cuatro segundos, permaneciendo totalmente funcional la traza de condactos por consola y de banderas en la ventana.
  • En los créditos, cuando aparece el texto "PRESENTAN" bajo la cara de Jabato, en la versión original Jabato guiña un ojo, mientras que en mi intérprete parpadea (cierra ambos ojos). Una misma versión, con distinto efecto, del mismo problema es cuando la cara de Jabato sube a la parte superior derecha de la pantalla, una vez descrita la localidad inicial. El problema era que mi intérprete dibujaba imágenes siempre completas, sin respetar los límites de dibujado que indicaba el código de la aventura. Ahora ya respeta estos límites invisibles.
  • Otro problemilla menor (en el vídeo) era que, al borrar partes de la pantalla, a veces se borraban también zonas de la sección de impresión del estado de las banderas de mi intérprete. Esto era un problema pequeño, hasta la corrección del problema del primer punto, que lo convertía en un problema grande. Pero la solución ha sido más rápida que la de los puntos anteriores, si bien similar a la del segundo.
Eso es todo, por ahora. Aprovecho para pediros que no dudéis en compartir conmigo cualquier información técnica que tengáis de DAAD o de su precursor inmediato SWAN. Sobre todo, me encantaría conseguir la documentación de DAAD que venía con las copias del parser que se entregaron a los siete ganadores del concurso de Aventuras AD-Microhobby.

¿Te ha gustado esta entrada? Vótala en Bitacoras.com: Votar

11 comentarios:

Baltasar dijo...

Me parece un trabajo impresionante desde el punto de vista técnico, pero... Cuál es tu objetivo a largo plazo?

Morgul dijo...

Mi única intención es la diversión de crear algo nuevo, no tengo ningún objetivo fijo a largo plazo.

Eso sí, tengo muy presente el factor de genericidad de lo que implemento, de modo que podrá ser aprovechado para proyectos derivados.

Por ejemplo, ahora mismo, mi código es capaz tanto de importar como de exportar bases de datos DAAD, con lo cual es posible generar nuevas aventuras DAAD. De momento, esto me ha servido para crear bases de datos con mi propio código DAAD, y así poder averiguar el comportamiento del intérprete original.

Eliuk Blau dijo...

Enhorabuena, Morgul!! :D

Davide dijo...

Muy impresionante :) ¿Existe la posibilidad de obtener el código fuente? Sé que es un trabajo sin terminar, pero estoy interesado en conocer los opcodes que utiliza para un proyecto que estoy llevando a cabo... :)

Morgul dijo...

Hola, Davide, dame más detalles de qué te gustaría exactamente, y te ayudaré a conseguirlo.

¿En qué versión del parser DAAD estás interesado? ¿El de alguna aventura en particular? Los opcodes iban cambiando de una a otra.

Miguel dijo...

Estaria interesado en como se estructuran las bases de datos de las aventuras en DAAD. Sobre todo para hacerme algun programita en Delphi para poder trabajar con ellas. ¿podris compartir esos conocimientos con un hasta ahora profano?

Gracias

el Juanjo dijo...

Quizá sería interesante contactar con Manolo González o Juanma Medina para obtener más información acerca del funcionamiento del DAAD.

Morgul dijo...

Me gustaría publicar todo el código y documentación de lo que he averiguado respecto a DAAD, y sistemas anteriores. Y me apetece algún día continuar con ello :D

Contacté con Graeme Yeandle, y tengo su visto bueno para liberar lo que quiera que haya hecho yo... tan solo me dijo que lo que él hizo no se puede liberar por motivos de Copyright (él es el creador de The Quill y The PAWS, y coautor de SWAN). Y también que él no tuvo nada que ver con DAAD, que debía preguntar a Tim Gilberts.

Así que también contacté con él :P Y, si no recuerdo mal, me dijo que de liberar de lo que es suyo (copyright) nanay... Sólo me falta preguntarle si puedo liberar lo que he implementado yo y documentado. La verdad, es que con paciencia, con el IDA Pro se puede averiguar qué hace exactamente cada uno de los condactos :) Otra cosa sería rebautizarlos con el mismo nombre que tenían, jejeje.

Hola Juanjo, pues yo la verdad contactaría con ellos por si les hace ilusión más que nada... y especialmente por ello, el factor humano es mejor que cualquier viaje egoico :) Me da a mí que a Graeme le saldría alguna sonrisa cuando me contaba cosas de hace casi 30 años ya ^_^ No obstante, los recuerdos de los demás implicados sobre el uso del sistema podrían ser muy útiles también para reimplementar un DAAD. Así que, ya estoy agradecido, Juanjo, feel free ;)

Ricardo Pérez López dijo...

¡Hola, Morgul! Me ha llamado mucho la atención tu comentario donde dices que has contactado con Tim Gilberts. ¿Podrías ampliar más esa información? ¡Me interesa mucho! ¡Gracias! :)

Nacho dijo...

Yo también he experimentado la cerrazón absoluta de Tim Gilberts y la amable generosidad de Graeme Yeandle. Cómo va tu proyecto de intérprete/editor de DAAD en 2013? Sigue vivo? Te apetece publicar algo en The Gilsoft PAW Reservoir sobre ello? Ya que liberar el SWAN está totalmente prohibido, y sobre el DAAD habría que preguntarle a Samudio, quizás te interese liberar tu propio xDAAD. Ya me contarás, un saludo!!

Álvaro Alea Fernández dijo...

Ahora que el DAAD ha sido liberado, ¿seria posible conseguir el programa? Seria muy util, no solo por la opcion de contar con un interprete que funcione en sistemas modernos, si no tambien por el tema de las banderas y los condacts, pues el sistema original era muy parco (o mal documentado) en el tema del debug.
¿Por que el tema del copyright? no se aplicaria aqui lo mismo que el scumvm.