
Voy a tratar de escribir sobre el motor MuCho (Multiple Choice Adventure Engine) de Jari Komppa, desde mi punto de vista como usuario, y la experiencia usándolo en dos de mis aventuras. La primera fue La Tormenta, una adaptación del relato corto de H. P. Lovecraft titulado The Picture in the House, y últimamente he publicado el primer capítulo de Antarctica. No puedo ahondar en detalles técnicos porque no soy programador y mis conocimientos sobre la materia son más bien rudimentarios. Escribiré sobre las características que yo uso en mis aventuras, normalmente de tipo libro-juego en las que trato de crear novelas interactivas, donde están ausentes los gráficos, como ocurre normalmente en los libros. Por ello, sobre estas cuestiones creo que existen personas mucho más autorizadas que yo que seguramente podrán aportar su conocimiento o su experiencia.
Lo primero que llama la atención del motor es que da formato de párrafos, con su sangría, al texto que le vas introduciendo, consiguiendo un gran número de líneas en pantalla y mostrando caracteres que admiten diferentes tipos de letra. Ya en la parte inferior, separado, aparece un menú para seleccionar las distintas opciones que tiene el jugador, también configurable y en el que se puede apreciar una animación sobre la opción que está marcando el jugador, que selecciona con las teclas Q, para arriba, y A, para abajo, con Enter para elegir; vaya, una distribución clásica en los juegos de esta máquina.
Del autor conozco lo que hay de él en Internet. Jari Komppa, según su perfil público de Linkedin, es un ingeniero finlandés de software vinculado a Intel Corporation que ha creado varios proyectos, entre ellos el motor que nos ocupa, liberado, según la información que hay en Spectrum Computing, en el año 2016 y publicado como software libre (los fuentes se encuentran en GitHub). Consta en esa misma web la existencia de nueve obras que han empleado dicho motor para su realización, los autores de las cuales son tres: el propio autor, por un lado; Sequentia Soft; y, por último, quien esto suscribe.
El motor se puede descargar desde esa web. Viene en un archivo comprimido bastante completo, que incluye dos archivos ejecutables con archivos auxiliares. Uno es el compilador, mc.exe, y el otro es el empaquetador, mackarel.exe, que es el que crea finalmente el archivo *.tap de nuestra aventura.
Todo se agiliza creando un archivo por lotes *.bat al que luego me referiré. El comprimido trae, además de esto, varias carpetas.
En primer lugar una con el manual de la herramienta, en inglés y en diferentes formatos, bastante claro y entendible, basta su lectura para poder comenzar a programar con el motor sin grandes dificultades. Por ello, en este punto remito al lector a dicho manual, porque aquí voy a tratar únicamente lo que yo he podido usar en mi experiencia y lo más elemental, a fin de mostrar una imagen general sencilla para que quien quiera, se pueda animar a escribir y entrar ya luego en más detalle.
Trae además, otras carpetas que contienen herramientas que ayudarán a personalizar cada aventura. Una con fuentes (tipos de letra) en la que se incluye un archivo de Photoshop con el que se puede modificar la fuente al gusto. Yo suelo utilizar la fuente Lucida Console a la que hago modificaciones para introducir los caracteres del idioma correspondiente, por ejemplo, en español hay que incluir los acentos, la eñe, etc.
Luego modifico también el guion para hacerlo más largo a fin de identificar los diálogos. Todo ello es muy sencillo con el programa indicado. Se puede elegir cualquier tipo de letra pero hay que tener en cuenta la limitación del Spectrum, por lo que conviene elegir las que son más sencillas y legibles.
El resto de carpetas son una con divisores de diferentes tipos, que separan el texto de las opciones, y otra con diferentes selectores, que son los que marcan en cada momento la opción resaltada por el jugador; así como una última carpeta, y esta es muy importante, con diferentes ejemplos de aventuras ya hechas y compiladas, con su correspondiente código, y un fichero *.bat que permite compilarlas y empaquetarlas. La sintaxis de estos ficheros *.bat es conveniente copiarla y crearnos nuestro propio archivo para facilitar la labor.
Para empezar a programar vamos a necesitar únicamente una hoja de texto con un nombre de archivo de extensión *.txt. Yo suelo utilizar Notepad++ por comodidad, pero valdría cualquier aplicación. Lo que sí es conveniente es tener numeradas las líneas a efectos de localizar cualquier error que pudiera arrojar el compilador.
Esta hoja la dividiremos en localidades (el manual usa el término «rooms» para referirse a ellas). Cada localidad la comenzamos con un $Q seguido del nombre o número que le asignemos, y a partir de la línea siguiente podremos añadir el texto de la descripción separando los diferentes párrafos con saltos de línea, indicados con $P. Hay que tener en cuenta, no obstante, que el «peso» de cada localidad está limitado a 4096 bytes, por lo que habrá que ajustar la cantidad de texto.
Seguidamente podremos incluir texto que se mostrará de forma opcional, indicándolo con un $O, si se dan las circunstancia que nosotros programemos, por ejemplo con el uso de variables. Si existen diferentes párrafos incluiremos los $P también para el salto de línea, y finalmente la localidad acaba con las opciones del menú que damos al jugador, cada una de ellas encabezadas con un $A seguido del número de localidad a la que salta el jugador, las opciones que concurren en esa opción, y ya en la línea siguiente, el texto de la opción en cuestión. Existen más posibilidades, por ejemplo, hacer llamadas a otras localidades, como subrutinas, pero eso lo dejamos para quien se introduzca en la programación y vaya ajustando el código a sus necesidades.
A las variables (flags) les podemos dar el nombre que nosotros deseemos y efectuar diferentes operaciones según lo previsto en el manual de la herramienta. Me voy a limitar a señalar que a cada variable se le puede asignar un valor determinado, por ejemplo, escribiendo nombrevariable=1. También podemos incrementar o decrementar su valor con nombredelavariable+1, o nombredelavariable-1. Para que el motor compruebe el valor podemos escribir nombrevariable==1, y nombrevariable>1 o nombrevariable<1, para comprobar si es mayor o menor que el valor, en este caso, 1.
Finalmente, podremos escribir nombrevariable!=1 para comprobar si el valor es distinto de 1. También podremos «setear» las variables, por ejemplo, escribiendo set:nombrevariable, y borrarlas con clear:nombrevariable. Incluso podemos alternar entre sus valores «set» y «clear» con toggle:nombrevariable. Con estas simples operaciones se puede escribir una historia.
Así, muy esquemáticamente, cada localidad se establecerá, de la siguiente forma:
$Q [nombre o número de localidad] Texto de la localidad $P Texto de la localidad $O [parámetros del texto opcional] Texto opcional $A [localidad de destino] [parámetros de la opción del jugador] Texto de la opción del jugador
Vamos a dar un ejemplo sencillo de localidad:
10 $Q 1 20 Te encuentras ante la puerta de un gran edificio. 30 $P 40 La puerta es de madera maciza. 50 $O puertabierta==1 60 La puerta está abierta. 70 $O puertabierta==0 80 La puerta está cerrada. 90 $A 1 puertabierta==1 puertabierta=0 100 Cerrar la puerta 110 $A 1 puertabierta==0 puertabierta=1 120 Abrir la puerta 130 $A 2 puertabierta==1 140 Entrar al edificio
El código es bastante simple y entendible a simple vista. En la línea 10 indicamos que la localidad se identificará como “1”. En la 50 indicamos que, en caso de que la variable puertabierta sea igual a 1 aparezca el texto refiriendo que la puerta está abierta, y en la 70 que si el valor es 0 aparezca que la puerta está cerrada.
La variable de partida estará siempre a 0 por lo que al jugador le aparecerá siempre primero como cerrada. En la 90 indicamos, para la opción «Cerrar la puerta» que si puertabierta tiene el valor 1 le dé el valor 0, quedándose en la misma localidad; y al revés para la opción «Abrir la puerta» en la línea 110, quedándose también en la localidad 1. Sólo cuando el jugador haya abierto la puerta y puertabierta tenga el valor 1 aparecerá la opción «Entrar al edificio» y el jugador salta a la localidad 2, que será el interior del edificio.
El mismo efecto hubiésemos conseguido «seteando» la variable puertabierta, no obstante, he preferido el método de asignar valores para poder entender el funcionamiento de las asignaciones y comprobaciones de los mismos.
El motor permite configurar el color tanto del fondo como de la letra, y varias opciones más, remitiéndome al manual para más detalles. También permite incluir gráficos simplemente llamando a un archivo SCR de Spectrum desde el código, indicándolo con $I. Por ejemplo, podríamos añadir una línea al anterior programa de la siguiente forma.
$I puerta.src
Una vez redactada la aventura en nuestro archivo TXT, la compilaremos y empaquetaremos con los ejecutables que antes hemos referido. Al compilador mc.exe le tenemos que dar como opción la fuente y el divisor que hayamos seleccionado, a nuestro gusto, y al empaquetador le indicaremos la pantalla de carga de la aventura, que será un archivo SCR ubicado en el directorio. En caso de no indicar ningún archivo, el propio programa nos hará una pantalla de carga básica. En mi caso, el archivo por lotes que utilizo está extraído, modificándolo, de uno de los ejemplos que proporciona el autor, este es el de Antarctica:
@echo off cls del antarctica.tap ..\..\mc -v antarctica.txt antarctica.dat ..\..\fonts\font_lucida_console_en_2.png ..\..\dividers\divider_sin.png ..\..\mackarel patched.ihx antarctica.tap Antarctica load.scr -nosprestore -noei -lowblock antarctica.dat 0x5b00 del antarctica.dat del patched.ihx
Y si todo va bien, se hace la magia y los jugadores ya podrán disfrutar de vuestras aventuras. Muchas gracias al CAAD por darme la oportunidad de escribir este informe y publicarlo, así como a todos los que han hecho posible la existencia y difusión de esta herramienta, empezando por su creador, Jari Komppa, y también a todos los que seguís manteniendo en pie este género, sea como autores, como jugadores, o ambas cosas.
Interesante manera de crear relatos interactivos por opciones (CYOA) para Spectrum. Disculpen si soy purista y les recuerdo que las aventuras conversacionales requieren una línea de comandos (prompt) como mecanismo de interfaz para entrada de texto, el que luego es interpretado por el motor de la aventura para cambiar las variables del modelo del mundo de la aventura: localidades, objetos y personajes (incluido el personaje del jugador).