Como se hizo...Informes

Cómo se hizo: CYD

Por Sergio Chico ()

Hola, permitid que me presente: Soy cronomantic (@cronomantic), pero podéis llamarme Sergio y soy el autor de Los Anillos de Saturno, participante del concurso de Aventuras 2023 organizado por Radastan, y ésta es mi crónica de su creación.

Todo esto comenzó hace siete años, cuando empecé a interesarme de nuevo por el «retro» y por el Spectrum que alegró tanto mi infancia. Empecé mis pinitos con ensamblador, pero nunca llegué a materializar un proyecto. Luego seguí con ZxBasic de Boriel (@boriel), que me daba casi la misma potencia que el ensamblador, pero con mayor facilidad, y ya empecé a considerar proyectos abarcables.

Hace dos años, otro gusanillo que me empezó a picar de nuevo fue el de las aventuras conversacionales. Pasé grandísimos ratos con La Guerra de las VajillasLa Aventura Original y Cozumel y me encontré con el CAAD y el grupo de Telegram @RetroAventuras. Había leído que se había recuperado el DAAD y se estaban haciendo cosas, y este grupo era donde se estaba cocinando el DAAD Ready del genial Uto (@uto_dev) en ese momento, así que entré por curiosidad a cotillear…

Me sorprendió que no hubiese soporte en el DAAD Ready para gráficos bitmap en el Spectrum normal, y que no se aprovechase la memoria extra del 128, ya que PAWS sí tenía esta posibilidad. Hablando con los miembros del grupo, me decidí a aprovechar mis conocimientos y con la ayuda de Uto (y muchísimos otros de los que ahora no me acuerdo, pero que desde aquí saludo), a crear con ZxBasic de Boriel un intérprete que aprovechase las posibilidades de los modelos de 128, y de ahí surgió ZxDAAD128.

Este intérprete y sus herramientas adyacentes permiten crear aventuras en DAAD con gráficos comprimidos mediante ZX0 (compresor muy eficaz para ordenadores de 8 bits), distribuyendo esos gráficos y los textos entre los bancos de memoria de los modelos de 128, permitiendo tener más texto y gráficos tipo bitmap en dichos modelos.

Al principio tuve dudas de si iba a tener algún tipo de utilidad para alguien, pero parece haber tenido una buena acogida, lo cual me satisface enormemente… excepto cuando encuentran bugs, claro…

El año pasado se anunciaron los dos concursos de Radastan (@Bytemaniacos) ; el de Basic, como viene siendo acostumbrado, y uno de aventuras y RPG. En principio mis planes eran participar en el segundo mediante un RPG. Gracias a la experiencia adquirida con ZxBasic128 y muchas de las rutinas empleadas en el mismo, me planteé hacer un juego tipo Final Fantasy con ensamblador y Boriel.

Otra de mis ocurrencias fue hacerlo dedicado para el Spectrum +3. Ese modelo siempre me fascinó y ahora es un modelo muy raro y cotizado. Además, siempre pensé que nunca se le sacó todo el jugo que se le podía haber sacado, y ya conocía las rutinas de acceso a disco al hacer la correspondiente versión de ZxDAAD128. Los discos dan la ventaja de hacer cargas bajo petición; poder cargar mapas, textos o gráficos según hagan falta, en lugar de cargar todo de una sola vez.

Pues me puse con ello, pero la vida tenía otros planes… Radastan anunció que habría categoría de ZxBasic de Boriel. Esperaba que mi (futuro) juego pudiese presentarse a las dos, pero se anunció que en la categoría de Basic compilado no se podía usar ensamblador, sólo los recursos incorporados en el compilador.

Bytemaniacos

Yo quería presentarme al concurso de Basic para apoyar a Boriel, para demostrar que su compilador es una herramienta perfectamente válida para crear juegos «que no parezcan hechos en Basic», con mis disculpas a los fans del Basic (esquivando tomates).

Como esto iba de nostalgia, mi entrada fue una conversión de la máquina de Gakken Super Cobra, versión de sobremesa del juego homónimo de Taito. Una maquinita a la que tuve mucho cariño de pequeño y que fue mi primer videojuego. Dicho y hecho, la completé durante el verano y principios de otoño de 2023. Quedé muy contento con el resultado ya que los comentarios que tuvo es que es muy fiel a la original, con lo que el homenaje estaba realizado.

Con tiempo disponible, volví a darle una vuelta al tema del RPG. ¿Con el tiempo disponible? Imposible. De todas maneras, vi lo que tenía. Tenía rutinas de impresión y compresión de textos, de gráficos, pero ni idea de qué hacer, y que se pudiese hacer en el plazo de entrega.

Durante esos días, acabé de jugar a Radical Dreamers, una «pseudo-secuela» del clásico de Super Nintendo, Chrono Trigger. Es un pequeño juego incluido con la versión de Steam de Chrono Cross, la verdadera secuela de Chrono Trigger. Es una aventura de texto por opciones, con gráficos animados y excelente música. Una especie de pequeña novela visual o aventura por opciones, con combates descritos por texto y múltiples rutas. Quedé inmediatamente prendado por esta joya oculta.

RadicalDreamers
Radical Dreamers
Objetos_consumibles_extras
La_edad_de_los_saurios

Entonces tuve la iluminación divina mientras estaba en el servicio haciendo mis cosas (¡qué grandes ideas se tienen en esos momentos de intimidad!). En el grupo de Telegram de DAAD se estuvo hablando de hacer una especie de wrapper o «envoltorio» para hacer aventuras por opciones con DAAD. Radastan permitía que las aventuras no fuesen sólo conversacionales, ¡también se admitían «Elige tu propia aventura»! Además, tenía un esqueleto de RPG que nunca se iba a plasmar en un juego real…

Entonces todo confluyó: ¿Por qué no hacer un motor de aventuras por opciones y presentar una aventura similar a Radical Dreamers hecha con él? Pues manos a la obra, si es que me daba tiempo…

Lo primero fue, obviamente, el diseño del motor y del lenguaje para definir la aventura. En este caso, DAAD fue una influencia descarada, pues los comandos están claramente inspirados en los condactos del DAAD, usa el mismo sistema de tokens para comprimir el texto y el mismo compresor de imágenes que ZxDAAD128. La filosofía del lenguaje del fichero fuente es, sin embargo, completamente distinta. Había visto MuCho, pero no me convencía su sistema y decidí plantearlo de otra manera.

El fichero fuente está pensado para «Escribe el texto primero, luego ya programas», es decir, para usar directamente el texto plano original que se va a mostrar en la aventura, y luego se le añaden comandos, imágenes y menús de opciones para darle la parte «programable».

El lenguaje tiene dos modos; el modo «texto», donde el texto que va leyendo es el que se presenta en pantalla, y el modo «comandos», donde se escriben comandos para cambiar colores, mostrar imágenes, hacer los menús, etc. La distinción en el fichero es sencilla, todo lo que haya dentro de dobles corchetes («[[» y «]]») son comandos para el intérprete, y lo que haya fuera es texto para imprimir en pantalla. La filosofía del lenguaje está basada en PHP, JSP o ASP para los que los conozcan, es decir, un lenguaje de marcas.

Así que la idea es que coges tu texto de la aventura y empiezas a poner dobles corchetes con comandos dentro para dar forma a la misma en tu Spectrum. Eso es lo que hice yo con Los Anillos de Saturno más adelante.

Los anillos de SaturnoCon esto definido, me puse manos a la obra en programar el motor y el compilador. Para el motor o intérprete (la parte que se ejecuta en el Spectrum), decidí prescindir de ZxBasic en esta ocasión. ZxDAAD128 hace su cometido, pero tiene un tamaño excesivo. Además, no necesitaba todas las funciones del DAAD ni un parser, así que decidí rehacerlo en ensamblador. Al final, esto fue una decisión acertada y muchas de las rutinas reescritas para este motor fueron trasladadas a ZxDAAD128 para aligerarlo y acelerarlo un poco.

Para el compilador decidí usar el lenguaje Python. Es un lenguaje muy potente y rápido y que incluye casi todo lo necesario para hacer cualquier cosa. Gracias a la librería PLY, pude hacer un compilador sencillo en unas dos o tres semanas. Además, me permitió usar código del DAAD Reborn Tokenizer (DRT) para buscar las mejores abreviaturas y comprimir los textos al máximo. Aprovecho la ocasión para agradecer a DjMorgul el poner esta gran utilidad a disposición de toda la comunidad. Sin embargo, la decisión de usar Python me ocasionará un dolor de cabeza del que hablaré más adelante.

Los anillos de SaturnoTras dos meses de tecleo y pruebas, el motor, aunque crudo, era perfectamente funcional, pero al mirar las fechas, me percaté de que no llegaba para hacer una aventura propia. Sin saber qué hacer, la nostalgia de mi infancia me dio la inspiración de nuevo. Recordé mi libro de «Elige tu propia aventura» favorito, Los Anillos de Saturno, de la colección La máquina del tiempo, una aventura espacial-ciberpunk que me introdujo la afición a la lectura de ciencia-ficción.

Fue un libro que conservé hasta casi el año 2000 y pico, deshojado, amarillento y con los bordes cuarteados. Lo tenía en casa de mis abuelos y lo releía de vez en cuando al estar de vacaciones allí. Con el fallecimiento de mis abuelos y la consiguiente limpieza y vaciado de su casa, desgraciadamente se perdió. Así que, después del homenaje del Super Cobra, acabé haciendo otro homenaje a otro elemento de mi infancia. Además, también serviría como prueba de carga. ¿Cabría todo el libro en un disco de 180Kb para el +3? Sólo había una manera de averiguarlo…

Lo primero fue «conseguir» de nuevo el libro… donde no entraré en muchos detalles que ya os imaginaréis. Sin embargo, en este caso no considero que esté haciendo nada malo ya que el libro lleva descatalogado casi 30 años y he sido legítimo propietario de este. Así que obtuve dos versiones, una inglesa en PDF y otra en castellano en formato EPUB.

El PDF fue utilizado para extraer las ilustraciones, las cuales fueron capturadas, retocadas con GIMP, convertidas a formato de pantalla de Spectrum, retocadas de nuevo con MultiPaint y comprimidas con mi propia utilidad de compresión. Algunas me quedaron geniales, estoy bastante orgulloso de cómo quedaron las ilustraciones de Hugi el ciborg o de la manifestación en Washington, mientras que otras me dieron auténticas jaquecas como la cara de la jefa de los mutantes, Rachel, o tu compañero astronauta en Marte.

El formato EPUB fue crucial, ya que es simplemente un archivo ZIP con el contenido del libro en ficheros HTML comprimidos. ¡Tenía el texto íntegro y original de la aventura! Lo primero que hice fue convertir ese texto en un fichero de texto plano que el compilador pudiese digerir, sin comandos de momento… y tras una hora de espera para comprimir los textos… ¡cabía en el disco! Y con espacio suficiente para el motor, gráficos y alguna cosa más…

código_fuente
Detalle de código fuente de una aventura desarrollada con CYD

El camino estaba marcado. Me puse a añadir comandos, menús y gráficos. En menos de una semana ya tenía la aventura preparada, con gráficos y todo. Me sorprendí de que cupiese todo tan bien y que mi aproximación inicial fuese la correcta para crear aventuras de este tipo tan rápidamente. Pero no me quedé satisfecho. Para hacerle un verdadero homenaje, quería llevarla más lejos, hacerla diferente y que llamase la atención sin perder el espíritu original.

Por eso empecé poniendo colores diferenciados a los diálogos de los personajes para que resaltasen del resto del texto e identificasen al interlocutor. Algo que fue una excelente idea en retrospectiva, ya que también se le ocurrió a Diego Pardal (@Pulsaunatecla) en su inigualable aventura Nutca, merecidísima ganadora de esta edición del concurso.

Lo segundo que pensé fue poner efectos de sonido junto con efectos de imagen simples, para hacerla un pelín más inmersiva. Para ello recurrí a BeepFx, de Shiru, de donde cogí bastantes efectos de sus ficheros de ejemplo. Por los comentarios vertidos, parece que ha sido bien recibida la idea.

Ya, por último, quise poner música AY, pero no daba tiempo. Además, en música soy un negado y no conozco a nadie que lo pudiese/quisiese hacer por mí. Eso era una tarea que se quedaría pendiente…

Tras un mes de pruebas y correcciones de bugs hasta que me empezó a dar asco el libro que tanto añoraba, presenté la imagen de disco con unas cutres instrucciones en un fichero TXT a Radastan. Todos los demás presentaron PDFs chulos, así que me dio algo de vergüenza.

La suerte estaba echada. Mientras tanto, tenía que preparar el motor para su estreno en sociedad. Lo primero que tuve que hacer es desacoplarlo de Los Anillos de Saturno. Los fuentes estaban entremezclados, y por ciertas razones, no quiero publicar el código de la aventura.

Una vez hecho esto, tuve que pensar un nombre para el repositorio y el motor en general. Recordé el Mortal Kombat 3, donde al salir la elección de los combates, una voz de ultratumba dice «¡Choose your Destiny!», pues ya tenía un nombre… Además, es una variación de «Elige tu propia aventura»… mi forma de poner nombres es atroz, como habréis podido comprobar.

Y ahora es cuando Python me dio dolores de cabeza. Programar en Python es fácil, pero distribuir programas Python a usuarios con sistemas operativos sin Python instalado de serie (Windows) es un dolor. Tenía tres opciones:

  • Dar instrucciones para que el usuario se instale Python.
  • Añadir un entorno Python dentro de la distribución.
  • Usar PyInstaller, que convierte el programa Python en un fichero EXE.

Me decidí al principio por la tercera, para ser lo más transparente posible al usuario, pero me encontré con un imprevisto. PyInstaller lo que hace es incluir dentro del ejecutable del programa un entorno Python completo, y cuando se ejecuta lo desempaqueta. El problema es que este  comportamiento hace saltar las alarmas de los detectores heurísticos de algunos antivirus y clasifican el ejecutable de sospechoso y generan alertas al usuario, lo cual fue MUY frustrante para la distribución. Al final cambié a la segunda opción, y con esto, aunque el paquete es más grande, ya no da problemas.

Luego pasé a hacer el manual, otra tarea harto difícil y nada trivial, aunque no lo parezca. Yo estoy acostumbrado a documentar de forma exhaustiva los pormenores de las aplicaciones, pero esto puede sólo ser válido para otro programador o para usuarios avanzados. Esto tendrá consecuencias más adelante.

Tras horas de escritura, doy por acabado el manual, y ya tengo listo el motor para presentar, salvo algún gazapo de última hora que tuve que corregir.

En otra de esas casualidades de la vida, en el puente de diciembre, me llega una notificación de que Arnau Jess (@arnauballe) está haciendo una revisión de los juegos participantes en esta edición del concurso, con la colaboración de El Mesías (@El__Mesias__), y decido entrar a verlo. Por suerte tenía el día libre, y además podía aprovechar para hacer un pelín de hype del motor.

Estaba bastante nervioso, ya que aparte de que no sabía cómo se iban a tomar que hiciese eso, tampoco tenía claro cómo se iba a recibir el juego. La aventura, técnicamente, no es mía, yo no la he escrito. Simplemente he creado el motor para presentarla en el Spectrum y la adapté con el mayor respeto posible al libro.

Mis miedos fueron infundados. Tengo que agradecer, tanto a Arnau como a El Mesías, su amabilidad y «buen rollo» por permitirme hacer eso y por la crítica que le hicieron al juego y los ánimos que me dieron.

El día de Navidad liberé el motor y puse el repositorio como público. La fecha elegida no fue por la celebración, sino porque tenía tiempo libre, e inmediatamente se publicó como un rayo la noticia en el CAAD. Tranqui69 hizo un retocado de la portada de un libro de «Elige tu propia aventura» para la noticia que me hizo mucha gracia. Bajo su bendición, lo colgué en el repositorio.

Y entonces empezó a llegar el feedback de posibles usuarios. Entre ellos ximokom, al cual le agradezco el interés y su colaboración desinteresada. Me indicó varios posibles puntos de mejora, algunos factibles y otros no. El más flagrante que me indicó fue un «problema» en la impresión del texto que a mí también me molestaba; no era grave pero no era «estético».

En CYD, abreviatura oficial de Choose Your Destiny por cierto, cuando una palabra no cabe en lo que queda de la línea, salta a la línea siguiente y la imprime allí para evitar partir la palabra. La cosa es que también imprimía los espacios que tuviese delante la palabra, creando un efecto de «dientes de sierra» en el margen izquierdo si no se tenía cuidado. Tras una semana de codificación y pruebas, el problema quedó subsanado y una nueva versión subida al repositorio, la cual incluye también soporte de música para el chip AY con un reproductor de módulos creados con Vortex Tracker 2, una tarea que se me quedó pendiente.

Tras conversaciones con ximokom y Fran Kapilla (SequentiaSoft), me quedó claro que la documentación no se entendía. Era demasiado técnica y querían saber cómo empezar desde cero, lo cual me llevó a la decisión de escribir un tutorial menos técnico y más práctico, haciendo pequeños ejercicios para entender cómo se comporta el motor y dar un pequeño empujoncito a quien empieza sin conocimientos previos.

Al terminar el tutorial, se anuncia el día en el que se hará la gala de premios del concurso de aventuras. Para mi sorpresa y agrado, se hace también en el canal de Arnau Jess.

¿El resultado?, un tercer puesto con el que estoy más que satisfecho. No me lo esperaba, y no me esperaba tampoco la cálida acogida de la aventura por parte de los jueces, sobre todo los comentarios de Radastan y Kelben Stark, a los cuales se lo agradezco con humildad. Pero mi mayor recompensa ha sido el vídeo que me mandó Nahell Treshal, con su hija de 7 años jugando a (bueno, más bien leyendo) mi aventura.

Para hacerlo más accesible, subí Los Anillos de Saturno y Super Cobra a Itch.io, para que la gente pudiese disfrutarlos, con un manual más presentable en PDF, y una versión especial para cargarla en un Dandanator.
Mientras hacía esto, ximokom me sorprendió gratamente lanzando una versión de La Cueva del Tiempo, el primer libro de la colección «Elige tu propia aventura» original, hecha con CYD, subiéndolo también a Itch.io, lo cual demostraba que el motor era usable por seres (presuntamente) humanos.

Y para acabar con las gratas sorpresas, tranqui69 ofreció subir ambos juegos a la página web del CAAD para que se pudiesen jugar online con el emulador incorporado. La verdad es que ver mi aventura entre mis aventuras favoritas de niño me llena de orgullo y satisfacción, como dijo aquél. Además, tranqui69 amablemente me cedió la plantilla de las portadas que creó para la web, así que la he subido al repositorio, por si alguien quiere usarla con su propia aventura.

Los gráficos son idénticos a la versión impresa, cortesía de Dani Carbonell.

De momento, ximokom, Fran Kapilla y yo somos los únicos usuarios del motor, así que desconozco el interés que

hay en usarlo por parte de la comunidad aventurera. El motor está ahí para quien quiera usarlo y/o modificarlo, y estoy abierto a sugerencias (con un límite) y, sobre todo,ayuda y colaboraciones.

 

Hay que indicar que en el momento en el que estoy escribiendo estas líneas, el motor sólo tiene soporte para el Spectrum +3. Actualmente estoy preparando el soporte para cinta con los modelos de 48 y 128K, y lo tengo casi a punto. Seguramente cuando estéis leyendo esto estará ya disponible, junto con un simple conversor de fuentes para personalizar el juego de caracteres. Además, quiero portarlo a otras plataformas, como Linux o Mac. Toda ayuda es más que bienvenida, ya que me falta el más preciado de los bienes: tiempo.

Con esto me despido de vosotros, dando gracias a Radastan y al elenco de jueces, Demiurgo, Kelben Stark, JMV y Beyker, que dieron vida al concurso. También a Arnau Jess y El Mesías, por la cobertura y apoyo, y sobre todo felicito a los ganadores Diego Pardal y Juan Antonio Fernández con mi más sincera enhorabuena y admiración por sus trabajos, junto a los de Gorkel, Xave, Manuel Martínez y McFly. Y por supuesto, mi infinito agradecimiento a ximokom y Fran Kapilla por ofrecerse a hacer de betatesters de CYD, sin olvidarse de tranqui69 por su inestimable ayuda y ánimos.

¡Saludos, Aventureros!

Tranquilino Rodriguez

Nació viejo hace ya más de medio siglo. Desde entonces solo ha podido ir cuesta abajo y sin frenos. Prueba de ello es que dedica parte de su tiempo a dirigir y presentar un pódcast en Twitch llamado Increíble Pero Incierto. Como es un animal sediento de éxito y fortuna, está tratando de ofrecer a las masas su visión del clásico de Aventuras AD #LaAventuraCasiOriginal, una aventura de texto que, sin duda, le reportará pingues beneficios. Mastodon

Publicaciones relacionadas

5 1 voto
Valoración del artículo
Subscribirse
Notificame

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

0 Comentarios
Comentarios en línea
Ver todos los comentarios
Botón volver arriba
0
Me encantaría tu opinión, por favor comenta.x
()
x