Informes

MuCho+

Por IADVD / Furillo Productions ( @FurilloProduct1)

Nota previa: en esta ocasión os traemos un artículo bastante técnico para ponernos en situación sobre las funciones extra que hemos conseguido aplicar en la herramienta, ojalá os parezca interesante, especialmente a los usuarios de MuCho, que se pueden beneficiar de las nuevas funciones.

MuCho+ Nuestra experiencia modificando el motor MuCho 3.0

Hace ya algún tiempo que veníamos oyendo hablar frecuentemente del motor MuCho de Jari Komppa. Antes de que saliese incluso el maravilloso artículo de Dani Revenga (DaRe @DaReInt) en el CAAD 60 (julio de 2023) explicando los conceptos básicos de su uso y presentando a su creador, teníamos constancia de las creaciones de Dani con esta herramienta (Antarctica, La tormenta), así como de las creaciones de Sequentia Soft (Sinclair 1 o The Time Machine entre otras). El propio creador del motor, Jari Komppa, lo usa de vez en cuando también, su última obra fue The Freak, una aventura breve pero intensa que muestra la imaginación de Komppa, acorde sin duda a su capacidad como desarrollador.

Antarctica (DaRe)
Antarctica (DaRe)
The Time Machine (Sequentia Soft)
The Time Machine (Sequentia Soft)
The Freak (Jari Komppa)
The Freak (Jari Komppa)

Nosotros (Furillo) andábamos buscando aprender cosas nuevas. Como sabéis, todo el homebrew que hemos elaborado ha sido hasta ahora con el brillante motor (me gusta llamarle framework en un sentido más modular y flexible) MK1 de los archiconocidos Mojon Twins (@mojon_twins). El motor, como seguramente sabe ya el lector, está preparado en lenguaje C y usa de una forma brillante las herramientas de otros genios de la escena. Por ejemplo, el motor Beepola de Shiru para la versión 48K, o la mítica librería splib2 de Alvin Albrecht.

Como uno de los puntos que nos gusta elaborar más es la historia de los personajes y la narrativa, me llamó la atención MuCho, así que me decidí a investigar cómo se utilizaba. Nuestra obra hasta ahora más conocida La Coza de la Poza, no deja de ser una aventura interactiva, eso sí, muy personalizada al estilo Furillo y con abundantes efectos visuales y músicas para cada escenario. A diferencia de MuCho, el MK1 modificado con el que hicimos La Coza de la Poza es para 128K, implica músicas de chip, uso de bancos de memoria profusamente, efectos en ensamblador, etc.

Así que tras ver cómo funcionaba MuCho en su última versión, y lo sencillo que era preparar un juego desde el punto de vista de la narrativa, empezaron a surgir las preguntas:

¿Es modificable MuCho? ¿Puedo hacer una versión en castellano del motor? ¿Puedo añadir efectos visuales? ¿Puedo poner músicas en los escenarios? ¿Se puede hacer una versión 128K?

Javi versus Parrish (Furillo)
Javi versus Parrish (Furillo)

Para ello, lo primero fue intentar conocer cómo funcionaba el código de MuCho, ya que es algo complejo. Afortunadamente, Jari Komppa dejó en abierto (licencia «no licencia», que a todos los efectos implica que se puede modificar libremente el programa para personalizarlo) los archivos fuente de las herramientas de MuCho.

La suite de MuCho está dividida en dos programas ejecutables EXE, pero realmente conviven en él tres proyectos.

Por un lado, tenemos el proyecto del motor (app.c) que está hecho en lenguaje C. Es el código que se cargará en la parte alta de memoria y que controla la apariencia y funcionalidad del motor. También abre los datos que están en la parte baja de memoria (estancias o lugares del juego, sus relaciones y las imágenes asociadas) según corresponda al momento del juego, y presenta las opciones posibles en cada paso del juego en la parte inferior. Es el motor de acciones, por así decirlo. Interpreta el contenido de la habitación actual, lo muestra en pantalla con imágenes si es preciso y presenta las opciones en la parte inferior con los efectos de animación del cursor de selección, gestiona las variables del juego (por ejemplo, variables de tener o no tener algo, contadores, etc. acorde a lo que ha definido el desarrollador del juego). El motor no es un archivo ejecutable, sino un modulo llamado crt0.ihx que el programa mc.exe utilizará para montar la «imagen» final del contenido de la memoria del Spectrum 48K. Básicamente, ese «módulo» del motor va a ser colocado por defecto en la zona superior de la memoria.

El Velo Oscuro (Furillo)
El Velo Oscuro (Furillo)

Por otro lado tenemos el proyecto del creador de la «imagen» de memoria, llamado mc.exe. También tiene su archivo fuente (mc.cpp) pero esta vez es un proyecto de C++, no me preguntéis porqué, pero el proyecto del motor y el proyecto del creador de la «imagen» final de memoria son lenguajes distintos. Estoy seguro de que hay un motivo práctico en esta elección, aunque reconozco que se me escapa (de ahí que yo no tenga capacidad para hacer estas maravillas de motores, sólo los puedo entender a efectos prácticos). El programa mc.exe es el que monta la «imagen» de memoria en un archivo DAT binario que representa todo lo que se ubica en memoria. Básicamente el archivo DAT incluye por un lado el motor que está en el archivo crt0.ihx y por otro el archivo compactado de los datos del juego que están en el archivo TXT que incluye la descripción de las estancias o lugares, las variables, las imágenes, ruidos (MuCho usa el motor Beepfx de Shiru que permite generar sonidos, pero no los motores de música, que quedaron un poco en el aire para revisiones futuras, según explica el propio Komppa en GitHub).

Finalmente, el programa mackarel.exe es el que crea el cargador del juego, creando un archivo TAP que contiene la imagen de carga y la «imagen» de memoria que contiene los datos del juego y el motor.

Lo primero que pude comprender es que, por diseño, la parte de datos y la parte de motor han sido definidas para ocupar un tamaño fijo inamovible. Es decir, el motor tiene reservada una zona fija de memoria que no puede crecer o decrecer para dar mas espacio a la zona de datos del juego. Al menos, hacerlo ya implicaría tocar muy profundamente el motor, para «rascar» 1Kb o 2Kb, pero en un principio, dada la cantidad de pantallas que se pueden producir con el motor actual, parece que no es necesario llegar a esas modificaciones más complejas.

El Velo Oscuro (Furillo)
El Velo Oscuro (Furillo)

El caso es que con el MuCho v3 decidimos empezar a hacer juegos. Le expliqué la idea a Molomazo y le pareció fantástico poder cambiar de motor e intentar cosas nuevas, así que sacamos primero El Velo Oscuro (The Dark Veil) para familiarizarnos con el motor, saber qué se puede hacer desde el punto de narrativa, imagen y color con la versión estándar del motor… y la sorpresa fue positiva. Es posible equilibrar texto, imágenes y colores para dar una sensación inmersiva.

Lo primero que también observamos es que otros desarrolladores (Sequentia Soft @sequentiasoft) utilizaron inteligentemente la posibilidad de jugar online para, mediante HTML5, añadir música MP3 de licencia libre de fondo mientras se juega con el emulador en pantalla. Esto permite dar un toque todavía más personalizado a la experiencia del juego. Nosotros, que nunca desechamos las ideas brillantes, también la aplicamos en nuestro El velo Oscuro pero le dimos dos toques más de especialización. Por un lado, le incluimos unos efectos de lluvia y el fondo de una mansión abandonada para situar al jugador en ese entorno misterioso, y la música fue reemplazada por una mezcla de sonidos espectrales, todos de licencia libre (licencia de uso por referencia, que añadimos en los textos del juego). Y por otro, también especializamos el emulador que se usa para visualizar el juego en el navegador, Jsspeccy, que está basado en JavaScript, para añadirle a su interfaz de comunicación tres llamadas que nos permitan enviar desde una pantalla táctil con botones HTML los mensajes de arriba, abajo y espacio para poder jugar también en navegador desde una pantalla táctil, que no posee teclado físico real. Eso hasta ahora no era posible con Jsspeccy y es una mejora que también permite expandir la accesibilidad de nuestros juegos MuCho a otros dispositivos (y en una tableta a pantalla completa, estos juegos son verdaderamente inmersivos, con su música de fondo y su historia en la que adentrarse).

Además, cumplimos el primer y más básico objetivo que teníamos: hacer la versión en castellano del motor MuCho. Era el punto más sencillo. Simplemente había que buscar en el código fuente los textos básicos del motor (frases en inglés para «Fin pulsa para continuar», «pulsa espacio» etc.) y hacer sus versiones equivalentes en castellano.

El resultado final fue bastante prometedor. El juego en navegador tenía un aspecto bastante atractivo con versiones del motor en castellano e inglés, y los efectos de lluvia y los sonidos de fondo hacen la experiencia bastante inmersiva.

No obstante, nos quedaba una espina clavada. Mientras que la experiencia en navegador queda bastante equilibrada, el TAP en sí, al ser descargado para jugar en emulador o en Spectrum real, no posee músicas que permitan introducir por ejemplo el tema en la pantalla de inicio, o definir unas músicas sencillas para las pantallas finales (sean de ganar o perder) o asociar unos sonidos musicales (no Beepfx sino mas bien tonos musicales de Beepola) a los movimientos del cursor de selección del motor.

Así que lo primero que pensé es si era posible incluir música Beepola en los juegos MuCho 48K. Al estudiar el archivo del motor app.c observé que era totalmente compatible con el mismo estilo de solución de motor de música que utiliza el MK1 de los Mojon Twins. Por tanto, era posible incluir un archivo con el motor reproductor de música e incluir esta funcionalidad. Pero había una restricción grande: el espacio que puede ocupar el motor NO puede crecer. Por tanto, para meter un motor de música del Beepola (nos decantamos por el Phaser 1) debíamos ser capaces de optimizar el código C de app.c para reducirlo aproximadamente 1Kb y dejar espacio donde meter el motor de Beepola, y además rebajarlo otros 2Kb para poder meter al menos unas sencillas melodías de principio de juego, final de juego y movimientos de selección del menú inferior del motor.

Y eso es lo que hice inicialmente, revisar todo el código del motor y buscar elementos del código que se podían hacer con menor cantidad de bytes. Afortunadamente, había espacio para una reducción de unos 5Kb, que no solo da pie a la inclusión de música en MuCho, sino a la de efectos visuales o de otro tipo que ya serían personalizaciones concretas necesarias en función de cada juego.

Hay que explicar que el código de Jari Komppa tal y como estaba era perfecto, no es que no fuera óptimo, es que cumplía el objetivo de su creador a la perfección. Simplemente, para los objetivos iniciales de MuCho no era necesario intentar reducir más el código o buscar trucos para optimizar el contenido del motor, porque tal y como estaba cumplía al 100% las necesidades definidas para el motor. Con esto quiero decir que el código en sí era perfecto, simplemente no había necesidad de buscar soluciones más complejas para que el motor ocupase menos.

Pero para nuestros objetivos de nuevas funcionalidades sí que había que darle una pequeña vuelta de tuerca, y afortunadamente el código tenía bastantes lugares en los que rascar bytes para poder introducir el motor de música.

Javi versus Parrish (Furillo)
Javi versus Parrish (Furillo)

Y así fue que generamos el minijuego de ejemplo Javi versus Parrish, también disponible para descarga, y pusimos los archivos fuente de las modificaciones en GitHub, así que los lectores más valientes que tengan interés por MuCho y además quieran tener música en sus juegos pueden intentar utilizar las versiones de los archivos fuente que dejamos en nuestro GitHub.

En resumen, hemos conseguido crear una variante de MuCho 3.0 en inglés y castellano que tiene un motor de música incluido y que se puede personalizar para cada juego con las músicas de inicio de juego y fin de juego, así como sonidos para la selección de opciones (arriba, abajo y espacio), estando disponible para los desarrolladores que no tengan miedo de recompilar el motor y añadir sus propias personalizaciones.

¿Y ahora qué? Siguientes pasos

Estamos preparando un nuevo juego que saldrá muy seguramente en septiembre de 2023, y que aúna todas estas mejoras y más personalizaciones, tanto visuales (efectos visuales) como de optimización del espacio de datos (juego en sí) y del motor. Esperamos que sirva como referencia de lo que se puede realizar técnicamente con el motor 48K.

También sigo estudiando la posibilidad de un MuCho 128K, al menos para trasladar toda la música al banco 1 (al estilo de MK1 de los Mojon Twins) lo cual permitiría que la música sonase de fondo mientras se juega. Aunque quizá sea mas complicado debido a la ubicación del motor en la zona superior de los 48K, pero es un punto en el que estamos trabajando.

Os invito a que intentéis utilizar las nuevas funcionalidades y que nos deis comentarios acerca de vuestra experiencia con el motor. ¡Hasta la próxima!

Fdo.: IADVD / Furillo Productions @FurilloProduct1

 
 

 

 

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

0 0 votos
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
Viejos
Nuevos Más votados
Comentarios en línea
Ver todos los comentarios
Botón volver arriba