martes, 20 septiembre

16:08

Usando inputs del usuario como mensajes del juego en DAAD para Spectrum.
[Ficción Interactiva – La Línea Dura (lineadura)]

Los aficionados con los que coincido en foros, chats y RRSS han podido aburrirse oyéndome contar la batallita de que para el concurso de aventuras de Bytemaniacos del 2017 llegué a poner en marcha un motor de juegos del tipo «elige tu propia aventura» para el DAAD pero… para cuando acabó el plazo de entrega no llegó a ocurrírseme ninguna aventura con la que utilizarlo XDD

Así que el motor quedó abandonado y, literalmente, muerto de la risa esperando su momento de rescate. Pasaron cuatro largos años y una pandemia y un buen día me encontré en el brete de proyectar contenido para el stand de Zona FI de RetroParla 2021 en un momento en el que todavía se mantenían un montón de restricciones para exponer en un acto público. En esa situación lo mejor que se me ocurrió fue preparar una mesa más bien minimalista con un cartel en el que pondría un código QR que enlazaría a un pequeño juego tipo ETPA que crearía con Twine en su modalidad Chapbook, maravillosamente jugable en móvil. Con ello evitaría todo contacto con teclados potencialmente usados por decenas de visitantes y tendría una excusa para regalar revistas, fanzines del CAAD, y un par de libros a quienes terminasen la aventura allí mismo. La idea funcionó tan bien que, de haber podido volver a tener tiempo para asistir como expositor a eventos posteriores, la hubiera repetido con entusiasmo, pero la «vida real», como suele suceder, dispuso las cosas de otra manera.

En cualquier caso, la aventura que usé para la ocasión no surgió de la nada. Estaba basada en el ejemplo de juegos tipo ETPA que usó Tim Hartnell (autor que fue muy querido por sus libros de programación e inteligencia artificial en los felices 80) en su libro Creating Adventure Games on Your Computer (Ballantine Books, 1984). El juego se llamaba Werewolves and Wanderers y básicamente consistía en recorrer un castillo abandonado usando una moneda para decidir, a cara o cruz, los encuentros aleatorios con monstruos y el resultado de su lucha con ellos. Como algo tan dependiente del azar no se ajustaba bien a lo que necesitaba, ya que no sería del todo justo hacer depender los regalos a la pura suerte, eliminé ese elemento cambiándolo por una pequeña trama en la que habría que resolver un puzle sencillito que cualquiera podría acabar en cuestión de minutos, manteniendo del juego original el mapeado y las descripciones de localidades libremente traducidas a nuestro idioma. Si alguno tiene curiosidad por ver el resultado, retitulado como Explorando el castillo maldito, todavía se puede encontrar por AQUÍ.

Portada de la versión Twine de Explorando el castillo maldito
Momento del juego
Libros del recordado Tim Hartnell. Tiene su encanto leer ahora sobre la visión que se tenía de la inteligencia artificial hace treinta y muchos años 🙂
El juego Werewolves and Wanderers sobre el papel

Posteriormente el tema de cómo crear juegos ETPA con herramientas de creación para aventuras de texto basadas en parser para ordenadores de 8 bits (como el PAWS o el DAAD) continuó saliendo periódicamente en chats como el grupo de Telegram de Retroaventuras y yo seguía contando la historia de mi «motor sin aventura» hecho para DAAD que… un momento… ¿cómo que no tenía una aventura? ¡Por supuesto que la tenía! XDD El Castillo maldito sería el conejillo de indias ideal para ponerlo a prueba.

Ante todo, con perdón por la obviedad, hay que dejar claro que los ETPA y las conversacionales clásicas son dos tipos de «bestia» sustancialmente distintos entre sí:

– La aventura conversacional, aventura de texto, o poniéndonos pomposos, ficción interactiva basada en parser, se distingue por tener una estructura cuyos elementos comúnmente suelen ser localidades, objetos (que pueden ser personajes), un vocabulario y una suerte de puzles que se crean combinando todo lo anterior.

– Los ETPA o librojuegos, o, siendo pomposos otra vez, la ficción interactiva basada en opciones, se construyen a partir de lo que podemos llamar «escenas» o «situaciones» que pueden ser, o en las que puede pasar, cualquier cosa. No dependen ni se edifican a partir de un mapeado geográfico ni de los objetos dispersos por éste. Un error habitual es confundir las «localidades» de las aventuras de texto con las «escenas» de los librojuegos. Lo único que tienen en común es que son «átomos» que componen la base de sus respectivos tipos de obra.

– Un tercero en discordia, por completismo, serían las aventuras de texto basadas en menús. Lejos de ser una suerte de «eslabón perdido» entre los otros dos, son en realidad un modelo mucho más cercano al parser que a las opciones. Básicamente son conversacionales clásicas en las que se ha sustituido el interfaz de usuario por una serie de menús que hacen referencia a… localidades, objetos y acciones, o sea, lo mismo pero de otra manera. En ocasiones los dos modelos han demostrado ser intercambiables, como en los clásicos de Legend Entertaiment donde se podía jugar indistintamente de un modo u otro. A pesar de su cercanía al modelo de parser, la interfaz condiciona mucho el tipo de historia que puedes contar con ella, ya que no es lo mismo avanzar a través de ella teniendo que ocurrisele a uno la acción a realizar que escogiendo la clásica combinación «acción – objeto» entre las disponibles en un menú.

Ejemplos con fotitos:

Juegos de FI basada en parser: Aventura original (Aventuras AD), Colossal Adventure (Level 9) y Classic Adventure (Melbourne House). Todos ellos versiones del mismo clásico.
Aventuras de texto basadas en menús. La Aventura espacial y Sam Mallard.
Juegos ETPA propiamente dichos: The Archers y la serie de Adrian Mole (Level 9) y Está en la casa (Relevo Videogames).
Las fronteras entre estos estilos de juegos de texto no eran infranqueables. Aquí varios librojuegos de papel de la serie Fighting Fantasy adaptados a aventura conversacional (con parser) por Adventuresoft.

Toda la divagación anterior para al final llegar a una conclusión bastante simple: una herramienta de creación pensada para el modelo de parser nunca será la opción ideal para crear un ETPA ni viceversa. Es, por supuesto, enteramente posible, pero el resultado siempre saldrá… raro…
En el caso del Castillo maldito, partía de una obra originalmente concebida como librojuego para papel (y una monedita 🙂 ) que estaba, eso sí, más basada en recorrer localidades que en desarrollar escenas. Un esquema muy facilito de implementar en el DAAD, pero que produce un efecto «extraño» al jugarse, ya que el desplazamiento mediante opciones en las que una determinada dirección no va a coincidir siempre con la misma posición de opción puede llegar a ser más confuso que el tradicional de teclear puntos cardinales, a pesar de que éste tiene la mala fama de ser el módelo más antiguo y obtuso. Pero eso ya podrán juzgarlo quienes lo prueben.

Por lo demás, traducir de Twine a DAAD no tuvo mucha más historia que reemplazar toda la parte de análisis de las órdenes del jugador por un nuevo bucle que se limitase a discriminar entre las pulsaciones de teclado correspondientes a cada opción, y eso era todo…

¿Todo? ¡No! 🙂 Faltaba algo…

En el Twine original se me ocurrió meter la posibilidad de que el jugador ponga su nombre al personaje. Algo trivial en Twine y en cualquier lenguaje de programación de alto nivel que habremos visto en cientos de juegos. Pero las herramientas de creación de conversacionales basadas en máquinas virtuales, llamense Quill, PAWS, GAC, DAAD o la mismísima máquina Z, sencillamente no están pensadas para ello. Pueden manejar los mensajes que introduzcan en su base de datos durante la compilación, pero no convertir en ellos una cadena de caracteres introducida por el jugador en tiempo de juego. Así el clásico «Introduzca el nombre del jugador» es una maniobra que, en principio, el DAAD no puede realizar… O al menos, no sin ayuda.

En Inform esto se puede resolver dando un rodeo a base de reservar espacio en una matriz, y lo que vamos a hacer en DAAD es, salvando muchas distancias, algo parecido.

El truco está en reservar este espacio (de un número predeterminado de caracteres) en alguna parte de la zona de mensajes de la base de datos de la aventura en DAAD. Cuando pidamos la entrada al jugador, un condacto EXTERN se encargará de llamar a una rutina externa en código máquina que copiará el mensaje introducido desde el buffer donde se almacena la última órden tecleada por el jugador a este espacio reservado en el area de mensajes.

Vamos a desmenuzar todo esto en partes más pequeñas:

Lo primero es determinar donde está el buffer de texto donde se guarda el último input del jugador. En cualquier emulador (las pruebas se hicieron para Spectrum) se puede examinar la memoria en tiempo de ejecución. De un vistazo rapidito de puede localizar en la memoria la palabra que estés introduciendo. En el caso de Speccy se halla en la dirección 33052 y la cadena introducida va siempre seguida por un caracter 13

Localizando a ojo el buffer del input en el volcado de memoria del debugger de un emulador de Spectrum.

Lo siguiente es determinar donde se almacenan los mensajes en la base de datos de la aventura hecha con DAAD. Aquí ya tenemos que inventarnos un convenio arbitrario para hacernos la vida más fácil y este va a ser que reservaremos un espacio de 10 caracteres para nuestro propósito (ponerle un nombre al personaje jugador en tiempo de ejecución del juego) en el mensaje número 0 de la tabla de mensajes del usuario.
En DAAD los 2 bytes que hay en la posición 16 de la cabecera de la base de datos .DDB apuntan a una tabla de palabras (valores a su vez de 2 bytes) con la posición en la memoria de todos y cada uno de los mensajes. Como para complicarnos lo mínimo vamos a usar el primer mensaje, el nº 0, nos basta saber a donde apunta el valor al que apunta la posición 16. En Spectrum el DDB se aloja siempre en 33792, por lo que miraremos lo que hay en 33792 + 16, o sea 33808.

Sabiendo todo esto, la ñapa consistirá en pedir al jugador que introduzca el nombre, recibirlo mediante un condacto PARSE 0 y, en la siguiente entrada, invocar con otro condacto EXTERN a una pequeña rutina en código máquina que pase byte a byte el contenido del buffer (hasta 10 caracteres o hasta que encuentre un caracter 13) al espacio de 10 caraceters que hemos reservado en el mensaje 0.

¡Suena más difícil de lo que realmente es! 🙂 aunque hay más detallitos a tener en cuenta:

DAAD enmascara sus mensajes (para que no se puedan leer tal cual haciendo un simple volcado de memoria) mediante un XOR 255, así que hay que hacerle ese mismo XOR 255 a cada byte al pasarlo a la zona de mensajes para que luego se pueda leer adecuadamente. En código máquina de Z80 es más efectivo hacer un CPL (gracias a Sergio The Pope por el apunte 🙂 )

Y aún hay más. Para que todo funcione damos por hecho que el mensaje 0 de la sección /MTX del código fuente de la aventura consistirá en exactamente 10 espacios reservados, que inicialmente pueden ser cualquier cosa, donde se albergará finalmente el nombre introducido por el jugador. Pero ojito !!! Si al compilar usamos la opción de comprimir los mensajes, y la práctica totalidad de veces lo haremos por el bien de la sufrida y escasa memoria de los ordenadores de 8 bits, el compilador la aplicará a nuestro mensaje 0, dándose la posibilidad de que el espacio que ocupe al finalizar sea inferior. En mis primeras pruebas puse confiadamente un mensaje de 10 espacios en blanco para comprobar que nada funcionaba porque el compresor, muy eficientemente, los había reducido a 2. XDD
El truco para evitar esto es afortunadamente muy sencillo. DAAD comprime buscando en los textos apariciones de los tokens de compresión que hay en la sección /TOK del código fuente. Basta con poner en el mensaje 0 una serie de caracteres que no coincidan con ninguno de ellos. Algo como 10 asteriscos dará perfectamente el pego en la mayoría de los casos. En la plantilla por defecto del DAAD no hay asteriscos en /TOK, y si usas una sección /TOK personalizada, ya sea con la propia herramienta que aporta el DAAD o por alguna de terceros, como la incluida en NAPS, todo es cuestión de buscar una sucesión de caracteres que no se comprima.

Nuestro mensaje 0 será una cadena de 10 asteriscos **********

Si hemos llegado hasta aquí y nada se ha torcido, en cualquier momento del juego podremos llamar al mensaje 0 y saldrá lo que haya introducido el jugador. Eso sí, en GLORIOSAS MAYÚSCULAS XDD, ya que el código interno del condacto PARSE provoca esa transformación y en principio no hay una manera sencilla de interceptarlo.

Todo esto no pretende ser un juego nuevo completo sino una pequeña demo que ilustre el proceso y pueda servir de ayuda a quien quisiera aplicarlo a su juego. Sólo se requiere ser un poco manitas con el ensamblador de Z80. En el enlace se puede jugar al Twine original, a la versión de Spectrum en línea, y descargar el código fuente del juego en formato SCE (sorry, no funcionará con Daad Ready ni con Maluva salvo grandes modificaciones en una y otra parte, aunque todo es ponerse 🙂 ). El código fuente también incluye el de la rutina externa en código máquina para Spectrum, detalladamente comentado. Este último sería bastante fácil de convertir para el DAAD de otros ordenadores de 8 bits cambiando unas pocas direcciones (siempre teniendo en cuenta la regla de que la dirección de la tabla de mensajes se halla en la posición 16 de la cabecera de la base de datos) así que no costaría mucho trabajo adaptarlo a MSX o CPC. Yo mismo lo haría, pero sólo haberlo hecho para Spectrum y escribir este post me ha quitado el poco tiempo libre que he tenido en el último mes y medio, así que la cosa pinta muy malita 😦

Podéis mirarlo todo en:

https://zonafi.es/ecm/

Introduciendo el nombre del jugador en la versión Twine.
Haciendo lo propio en la versión de DAAD para Spectrum.

miércoles, 17 agosto

16:08

Conversacionales: séptimo episodio disponible
[El Escritorio de Incanus (Incanus)]

Hace poco más de una semana que está disponible el séptimo episodio de "Conversacionales", una serie dedicada a las aventuras conversacionales y presentada desde el canal "Tormenta de plomo" de YouTube.

Continuando con lo planteado en episodios anteriores sobre el proceso creativo, se aborda en esta oportunidad el tema de agregar elementos visuales y de audio a la aventura conversacional, pasando así de las aventuras de texto "puras" a las aventuras con gráficos (no confundir con las aventuras gráficas o de point & click).

Como en la ocasión anterior, el panel de conversación lo lidera  Ricardo Oyón Rodríguez por parte del canal, en compañía de  Juanjo Muñoz y Tranqui69, aquí conocidos por la factura de la encarnación actual del fanzine del CAAD, quienes harán una franca apología sobre la necesidad de acercar la aventura conversacional al público más moderno, lo que a su entender hace obligado el uso de gráficos asociados a las localidades.

Se plantea que en todo caso sí existe un lugar y un público para las aventura "sólo de texto", sin elementos de multimedia, pero aquello tiene sus propios desafíos, especialmente si el trabajo creativo tiene una intención más literaria como es el caso de la llamada ficción interactiva: sería deseable evitar la saturación de texto con "ladrillos" narrativos y atraer y a la vez mantener el interés del lector, sin el apoyo o impacto que una imagen puede tener.

Quien esto escribe tiene su opinión y estilo creativo al respecto y mis lectores habituales los conocen. En el podcast, por otra parte, se hacen cargo de que incluir imágenes, por deseable que sea, no es cosa baladí precisamente por las dificultades creativas que esto supone.

En efecto, son pocos (si acaso existen) los autores del género que además son buenos dibujantes, lo que hace obligado el conseguir las imágenes ya sea en línea (contenido libre) o bien a pedido, que a su vez implica un desembolso monetario, pues la mayoría de la gente que dibuja profesionalmente requiere de compensación ecónomica por ello, ya que es su trabajo.

Se argumenta si aquello a la postre no es diferente del expendio que cualquier afición implica: el artesano, aunque amateur, compra sus materiales de trabajo y no tendría entonces que ser distinto para el autor de aventuras, especialmente si su encargo tiene un propósito narrativo: no cualquier imagen sirve, ya que el gráfico debe ajustarse a una historia, con su propio tono y contenido, tanto descriptivo como emocional. Aquello tiene su valor y el trabajo que lo da a lugar, como es natural, ha de venir con un precio puesto.

En el apartado de agregar audio a una aventura, se comenta que, aunque deseable, es menos imprescindible que lo visual; más allá de algún sonido incidental que dé tono a una localidad (ruido de olas en el mar, por ejemplo) o un efecto sonoro puntual para algún evento significativo de la historia, en esto del audio para las aventuras conversacionales se cumple aquello de que "menos es más".

Acabado el primer segmento, un autor nos contará de su experiencia personal en estos lances creativos.

Siempre mediante audio puro, el intercambio discurre sin que decaiga el interés ni lo entretenido de los temas tratados, especialmente por la interesantísima reflexión técnica, que no sólo artística, resultante de analizar la incorporación de elementos audiovisuales a un medio que en principio está basado en texto.

Como siempre, una muy recomendable alternativa para los que quieran seguir conociendo sobre los ires y venires de la creación de una aventura conversacional.

lunes, 15 agosto

16:08

Conversacionales: sexto episodio disponible
[El Escritorio de Incanus (Incanus)]

Ya tenemos con nosotros el sexto episodio de "Conversacionales", una serie dedicada a las aventuras conversacionales y presentada desde el canal "Tormenta de plomo" de YouTube.

Siguiendo con el episodio anterior, continuamos con la discusión sobre el testing.

Como antes, el panel de conversación lo lidera  Ricardo Oyón Rodríguez por parte del canal, en compañía de Juanjo Muñoz y Tranqui69 (actualmente los autores del fanzine del CAAD) que prosiguen en su exposición de los distintos modos de testing.

Se aborda además una consideración no menor respecto del compromiso, experiencia o habilidad de los que hacen el test frente al cuidado recíproco (o no) de los autores o programadores del trabajo, una relación que debe estar bien equilibrada para que esta labor sea provechosa para ambas partes.

Haré aquí un paréntesis para señalar que, entendiendo que otras personas trabajan de otro modo, en mi caso yo cumplo con casi todos los roles creativos (incluyendo la programación) y sé perfectamente que tengo mis limitaciones como tester a la hora de ver los defectos, problemas y falencias de mis trabajos. Esas limitaciones sin duda han cambiado según ha crecido mi experiencia como autor, pero no creo que alguna vez quiera o pueda prescindir de la labor de los testers.

Así, como autor con no poca experiencia en esto del testeo, no puedo sino confirmar que en verdad es necesario saber cuidar y cultivar la labor e intercambio durante las pruebas. En mi caso, creo haber sabido ser fiel al tiempo que regalaron mis testers a mis trabajos, dándoles también mi propio esfuerzo, atención y dedicación a la labor de las pruebas; alfa, beta o lo que corrresponda hacer.

Como sea, quiero aprovechar este espacio para enviar mi reconocimiento y agradecimiento a las personas que hacen esta tarea de las pruebas, que tanto bien le hace a la ficción interactiva: o esa ha sido siempre mi experiencia.

Volviendo al podcast, en el primer segmento hay también una muy interesante discusión sobre las conversaciones con personajes de las aventuras conversacionales, tema no siempre resuelto satisfactoriamente, plantéandose algunas posibles alternativas para llegar a un buen puerto (testeo aparte).

Finalizada esta sección del podcast, un invitado (también autor) nos relatará su propia experiencia con el testeo.

Mediante audio puro (no hace falta el video), la conversación avanza a buen ritmo, manteniendo el interés de quien escucha, pese a lo complejo del tema tratado.

Un muy recomendable episodio para continuar creciendo en el conocimiento sobre la creación de aventuras, algo que, como las pruebas, un autor nunca puede dejar de cuidar.

jueves, 14 julio

16:08

50 Years of Text Games: la historia de la ficción interactiva
[El Escritorio de Incanus (Incanus)]

Si bien este blog se ocupa (y no poco) de la ficción interactiva, el hecho es que se trata de un género de interés acotado a un grupo de aficionados.

En el ámbito hispanohablante, una parte no menor de esta afición está asociada a la retroinformática, aunque también hay personas interesadas en formas narrativas nuevas o acaso experimentales. La escena anglo, más numerosa que la nuestra, es de origen (e interés) similares, aunque de más abundante y variada producción en razón de su mayor tamaño: la ley de los grandes números ciertamente aplica aquí.

De entre esa afición en inglés se destaca el estadounidense Aaron A. Reed, autor de ficción interactiva y también teórico de este género. De su abultada producción reseñaré ahora su proyecto "50 Years of Text Games".

Se trata de un boletín semanal en línea en el que, durante el 2021 recién pasado, el autor ha abordado la historia de los juegos digitales de texto, seleccionando, comentando y hasta disectando trabajos que le han parecido significativos. Traduciendo desde las propias palabras de Aaron:

“50 Years of Text Games” es un proyecto que traza un camino a través de la historia de los juegos digitales sin gráficos, eligiendo un juego de cada año entre 1971 y 2021 y analizando en profundidad cómo funciona y por qué es importante. Cada semana a lo largo de 2021, cubrí un nuevo año y juego, avanzando cronológicamente desde The Oregon Trail en 1971 hasta las últimas innovaciones en ficción interactiva.

Las publicaciones de la serie aún están disponibles y se recopilarán en un libro en 2022.

Se trata en efecto de un largo y minucioso periplo por el devenir del medio y que, para mayor provecho de la afición, ha dado lugar a un libro que hace muy poco se ha financiado en Kickstarter, reuniendo la friolera de medio millón de dólares, algo absolutamente inédito en ficción interactiva, ya sea como trabajo interactivo o para una obra de ensayo, como es el caso de “50 Years of Text Games”.

Es del todo imposible intentar abordar aquí lo que el señor Reed ha conseguido levantar con su proyecto, que ha visibilizado (¡y cómo!) una parte no menor de un género que transita de lo lúdico a lo literario, sin que se sepa todavía adónde ha de acabar.

Queda hecha la invitación a cuantos quieran saber más de la historia de este género a conocer este estupendo trabajo de recopilación: ya sea en su versión en línea o en un estupendo libro (impreso o digital) aun por publicar.

Una historia que, como desde sus inicios, se ha escrito en inglés...

miércoles, 13 julio

16:08

No está muerto lo que yace eternamente: noveno episodio
[El Escritorio de Incanus (Incanus)]

El jueves recién pasado ha aparecido en línea un nuevo episodio de "No está muerto lo que yace eternamente".

Como siempre, está disponible en el canal de Textualiza en Twitch y también en YouTube: en compañía de Ruber Eaglenest, Jade y MariaRAhumada podremos saber de lo nuevo que está ocurriendo en el mundillo de la ficción interactiva, tanto en español como en inglés. Se indica que éste es el penúltimo podcast de esta temporada, pues la serie descansará por el periodo de vacaciones europeo, para regresar en Septiembre.

Siguiendo el modelo habitual del episodio anterior, la primera parte nos trae las noticias para a continuación asistir a una partida en directo de un trabajo de ficción interactiva: en esta ocasión le toca el turno a "Encierro", de un tal Incanus ;-)

Sobre esto, un par de comentarios de autor: ha sido una grata sorpresa cuando me he enterado de la selección del canal; misterio, suspenso y bromas del canal aparte, recursos que siempre le dan dinamismo y gracia al podcast, que por cierto son muy del gusto de quien esto escribe y en esta ocasión tanto más, como podrán suponer.

Me alegró el ver que, según ví en el podcast, no han tenido grandes problemas para "sacarle jugo" al relato, particularmente al constatar que (salvo algún tropiezo o humorada) me resultó, como yo pretendía, un relato interactivo sin ripios excesivos: jugable y disfrutable, y que invita a la reflexión y la evocación de esta experiencia que todos (el planeta entero, vamos) hemos vivido, cada uno según le tocó: "Encierro" es apenas una reflexión de tantas posibles... pero es la mía, a fin de cuentas: scriptum est quod scriptum est y todas esas cosas.

Agradezco, en suma, la escogencia y experiencia del podcast con "Encierro" y será buena cosa si anima a quienes ven este canal a disfrutar con los trabajos que produce esta comundidad de ficción interactiva en español, en la que en tan buena compañía me encuentro.

Dicho esto, en YouTube encontraremos los enlaces del temario, que incluyo aquí, según fueron publicados en el foro de la web del CAAD:

Nuevamente podemos deleitarnos con esta estupenda y completísima alternativa para cuanto sucede y está por venir en la escena de la ficción interactiva.

¡Que la disfruten!

Corrigiendo el bug de HABLA en DAAD para Spectrum.
[Ficción Interactiva – La Línea Dura (lineadura)]

El mundo de las aventuras conversacionales se halla dividido desde los felices 80 en dos hemisferios que se dan la espalda el uno al otro: en uno lo común es manejar la comunicación con los «personajes seudo-inteligentes» mediante el comando DECIR seguido de un entrecomillado con la frase exacta que le dices al personaje (DECIR a PERSONAJE «bla-bla-bla»), en el otro el protocolo consiste en usar la fórmula HABLAR con PERSONAJE, pudiendo refinarse con la variante HABLAR con PERSONAJE sobre TEMA para afinar más en el asunto de la conversación en sí. El primero es común en los sistemas basados en condactos, como en la saga de herramientas de Gilsoft (Quill, PAWS, DAAD), especialmente optimizadas para funcionar así, mientras que el segundo se hizo habitual en las obras de Infocom, dada su mejor adaptación a los sistemas de programación orientada a objetos y es por tanto el que se usa comúnmente hoy en día en lenguajes como TADS, Inform, etc…
Sobre las posibilidades de evolución y expansión del segundo se habla largo y tendido en el capítulo dedicado a los personajes del libro Creating Interactive Fiction with Inform 7 de Aaron A. Reed. A su vez se puede leer una comparativa con los pros y contras de uno y otro en este reciente post del blog de Ricardo Oyon.

Sistemas de conversación en el libro de Aaron A. Reed.

Lo cierto es que no hay ninguna razóin técnica para circunscribir exclusivamente ambas tradiciones a un tipo de sistema de desarrollo u otro. Es perfectamente posible «cambiarlas de entorno» a gusto del autor. Así, han sido muchos los casos de aventuras hechas con sistemas de condactos que se decantan por la fórmula de HABLAR con PERSONAJE, pero en el caso de las plataformas de 8 bits se han encontrado sistemáticamente con un pequeño escollo: la incompatibilidad del uso de la forma imperativa de verbo HABLAR («HABLA») con los sistemas existentes de asociar los verbos acabados en LO, LA, LOS, LAS con el objeto de la orden inmediatamente anterior.

Estos sitemas, que permiten el uso de secuencias de órdenes como EXAMINA LIBRO y COGELO no generan ningún conflicto en sus equivalentes ingleses basados en los pronombred IT o THEM (EXAMINE BOOK and TAKE IT) pero en los sistemas españoles de la época clásica que lo implementaban (salvo error u omisión: PAWS y DAAD) tenían un efecto secundario inesperado al entrar en juego la orden HABLA. Si la secuencia de comandos del jugador era algo parecido a EXAMINA LIBRO y HABLA con PERSONAJE, la terminación en LA del imperativo HABLA activaría automáticamente el sistema de tal modo que el parser entendería que en la segunda órden el jugador está intentando hablar con el libro. Este «bug» es ya un «viejo conocido» entre los usuarios de PAWS, pudiendo rastrearse menciones al mismo en los manuales de las primeras aventuras del Doctor Van Halen de Josep Coletas allá por 2004, aunque no hay que descartar que las haya anteriores.

El bug de HABLA en el manual del primer Dr. VanHalen.

Es un hecho inapelable que el sistema funciona codificado «a fuego» en las entrañas del parser de PAWS e igualmente se halla en el interior del código de DAAD que maneja el funcionamiento del condacto PARSE. En principio eso significa que no hay manera de controlar este comportamiento por el autor de la aventura salvo acciones drásticas como usar condactos para eliminar todo el sistema de raíz, una solución claramente insatisfactoria porque supone prescindir totalmente de una característica del sistema simplemente porque falla en un caso concreto. Lo cierto es que el único modo de soslayar el problema pasa inequívocamente por hacer un hack al intérprete.

Vamos a proponer un modo de hacerlo en el caso del intérprete de DAAD para Spectrum. En otros intérpretes de DAAD o en el del PAWS podría aplicarse seguramente un metodo parecido salvando las diferencias de direcciones concretas de memoria en cada caso, pero no tengo tiempo material de ponerme a investigarlo 😦
Para «destripar» el interior del intérprete de Speccy vale cualquier desensamblador, pero por sus facilidades para hacer maniobras de ingeniería inversa he usado SkoolKit, un conjunto de scripts de Python especializado en «meter mano» a software de Spectrum y ponérselo facilito a quienes quieran analizar códigos fuente. A su vez aprovechamos que en DAAD la parte de código que queremos analizar se halla «aislada» en las rutinas que se ejecuten al invocarse el condacto PARSE (en el proceso 1 siguiendo la plantilla por defecto de DAAD) para añadir un pequeño proceso de «debug» que permita echar un vistazo al estado de las banderas justo antes y después de éste.
En las imágenes se puede ver que llamamos a un proceso 12 que nos imprime el estado de unos cuantos flags estratégicos (el grupo 33-36 y 43-47, ver el manual para sus usos concretos). Mediante este truco pudimos determinar que PARSE, al encontrarse con un verbo acabado en LO, LA, LOS, LAS adjudica al flag 34 (nombre) el valor del nobre de la acción anterior y a su vez coloca en 44 (NOUN2) el valor que hubiera correspondido al nombre de la entrada del jugador si no se hubiera detectado la terminación. Esto último es útil para secuencias de órdenes del tipo: EXAMINA LIBRO y DASELO a PERSONAJE, donde en la segunda orden el nombre es el nombre de la primera y el que hubiera sido el nombre original pasa a ser el segundo nombre o NOUN2. Si hubiera habido un NOUN2 en el input original este pasa a ser ignorado (tomen nota del detallito los autores de intérpretes alternativos 🙂 ).

A su vez con la opción de monitorear la memoria del programa durante la ejecución disponible en la práctica totalidad de emuladores de Spectrum es fácil determinar las posiciones exactas de memoria que ocupan las banderas o flags del DAAD. En el caso del Spectrum los 256 flags están entre 32540 y 32795. Sabiendo ésto es fácil deducir que los flags de verbo (33), NOUN (34) y NOUN2 (44) están respectivamente en 32573, 32574 y 32584.

Entra en acción SkoolKit. Podemos rebuscar entre las rutinas del código desensamblado instrucciones que afecten a esas direcciones de memoria o, en su defecto, al valor indicado por el registro IX del procesador más el número de flag, ya que en DAAD de Spectrum, IX almacena la dirección de inicio de estos. Ahora ya es cuestión de ensayo y error, paciencia, y algo de suerte para encontrar algo que resulte significativo para nuestro propósito. Tirando del hilo pronto aparece esta rútina que vemos en la imagen, con comentarios añadidos por mí aprovechando las facilidades de SkoolKit:

SkoolKit destripando a DAAD.

En ella podemos ver que en cierto momento de la ejecución, el parser mira en la zona de memoria donde ha almacenado el verbo del input del jugador y examina desde su final hacia atras. Si los caracteres que encuentra allí se corresponden con LO, LA LOS o LAS, pone una marca en el registro A, iza el flag Z del procesador, y el programa se bifurca hacia otra parte.

Monitoreando, es posible determinar que en ese preciso momento el flag 33 (verbo) ya está establecido, no así los referentes a NOUN, NOUN2, adjetivos y adverbio que continúan en 255 (255 es el valor al que se resetean en cada turno o sentencia lógica). Es fácil deducir que la asignación de estos se hará de una manera si no se ha detectado terminación y de otra en caso contrario. Es… ¡un buen sitio donde intervenir!

Podemos sustituir las instrucciones de salto marcadas en la imagen por una llamada a una pequeña rutina creada expresamente para la ocasión que colocaríamos en algún lugar libre de la memoria. Normalmente éste sería alguna posición indeterminada entre el final de la base de datos del juego y el comienzo de la de los gráficos, que es la zona de memoria que DAAD deja libre en Spectrum, pero eso significaría que tendría que ser una ubicación distinta en cada juego, ya que nunca sabremos a priori donde empezará y terminará ese espacio. Como la rutina va a ser en realidad pequeñita podemos buscarle un sitio estable razonablemente seguro que puede ser un puñado de bytes por debajo del comienzo del intérprete, concretamente la dirección 24560. La única precaución a tener en cuenta en este caso es que el cargador de BASIC del juego ponga la habitual instrucción CLEAR un byte más abajo, es decir 24559 en lugar del 24575 original.
Así que, como decía, sustituimos esas dos instrucciones del código DAAD original por un JP 24560. Las dos instrucciones juntas ocupaban 5 bytes y nuestro JUMP sólo 3 así que los 2 bytes restantes los ponemos a 0. La rutina a la que llamamos hará algo como esto:

ORG 24560
      JP NZ, 27449
      LD A, (32573)
      CP 31
      JP Z, 27449
      LD A, 6
      JP 27677

Veámoslo detenidamente. Hemos tomado nota como si entráramos en el molino del Quijote, o sea, cuidadosamente :-p, del estado de los flags del procesador en el momento de llegar al punto en que nos desviamos del código original. En este se levanta el flag Z si se ha encontrado la terminación verbal (y se carga el registro A con 6). Si ése es el caso, el código se desvía a 27677 y si no (no hay terminación) el desarrollo normal del programa sigue por 27449.

En nuestro hack primero mandamos la ejecución a 27449 si no está puesto el flag Z, o sea, le decimos que continue con normalidad porque no hay nada de LAS ni LOS.

A continuación cargamos en A el valor de 32573, donde sabemos que está el valor del verbo.

Comparamos con 31, que es el valor por defecto en la plantilla de DAAD para el verbo HABLAR. Ésto, por supuesto, será cierto en una mayoría de los casos, pero también podría darse perfectamente el caso de que en un juego concreto el verbo HABLAR tenga cualquier otro valor en la sección de vocabulario (/VOC) de su código fuente. Para esta situación bastará con que el cargador BASIC de la aventura haga, tras cargar el intérprete, un POKE 24567, valor (siendo valor el número que HABLAR tenga en VOC).

Si el verbo era, efectivamente HABLAR (31 o el valor que fuera en su caso) podemos afirmar por eliminación y con un 100% de seguridad que se ha detectado un LA y que el verbo era HABLAR, por lo que sabemos a ciencia cierta que, de seguir el flujo normal del programa, se produciría el cambio de NOUNs. Por eso le decimos que de estar izado el flag Z se vaya a 27449, donde procesará la entrada del jugador como si la terminación NO se hubiera detectado.

Y en caso contrario podemos asumir también con seguridad que se ha encontrado la terminación, pero el verbo NO era HABLAR, así que, tras cargar A con 6 como hubiera hecho en la rutina original, le decimos que vaya a 27677, donde procederá a hacer los cambios de NOUNs igual que hubiera hecho normalmente.

Tenéis el intérprete de DAAD de Spectrum con todas estas modificaciones disponible en esta DESCARGA.

En el archivo ZIP enlazado hay:

-Un binario con el intérprete modificado tal cual, sin ningún tipo de cabecera.
-Una versión alternativa del disco nº 33 de la descarga original del DAAD, el que contenía el intérprete de Spectrum en un disco de Spectrum +3, en la que el intérprete original y el cargdor BASIC han sido sustituidos por la versión hackeada.
-Una imagen de cinta de Spectrum TAP con un pequeño ejemplo.
-Un fichero de texto con las indicaciones básicas para su uso.

El primer juego de DAAD español para Spectrum en incluir la modificación es Torreoscura, de Bieno Marti, cuya versión de Spectrum actualizada ya está disponible en su web habitual: AQUÍ. Podéis probar nada más empezar con PULSA TIMBRE y HABLA con RECEPCIONISTA, algo que no funcionaba en la primera versión salvo que utilizaras el infinitivo HABLAR.

Torreoscura ya entiende HABLA en imperativo.

Y por lo que he podido probar hasta el momento, el hack es efectivo para órdenes tanto del tipo HABLA con PERSONAJE como de la modalidad HABLA con PERSONAJE sobre TEMA. Sabiendo cómo funciona el proceso en Spectrum sería posible buscar el modo de hacer lo propio en PAWS y en el resto de intérpretes de DAAD (pero, al contrario que en el clásico de los Rolling, el tiempo, eer… no está de mi lado 🙂 ).

martes, 12 julio

16:08

CAAD 56: publicado nuevo número del fanzine
[El Escritorio de Incanus (Incanus)]

Está disponible en la web del CAAD un nuevo número del fanzine del CAAD.

Como ya es grata costumbre, se pueden leer contenidos aventureros habituales: noticias, anuncios de proyectos y análisis de trabajos interactivos.

De lo publicado sobresalen, entre otros artículos, informes sobre:

Nuevamente tenemos ante nosotros un excelente trabajo, de una calidad gráfica impecable, con buenas noticias y referencias para los que quieran crear trabajos aventureros y estar al día con el mundillo de la ficción interactiva.

CAAD 56
[CAAD: Club de Aventuras AD - Comunidad de Aventuras Conversacionales y Relatos Interactivos (Incanus)]

Está disponible un nuevo número del fanzine del CAAD.

Como ya es grata costumbre, se pueden leer contenidos aventureros habituales: noticias, anuncios de proyectos y análisis de trabajos interactivos.

De lo publicado sobresalen, entre otros artículos, informes sobre:

Más detalles en su ficha:

http://www.caad.es/fichas/caad-56.html

Enlace para descarga:

https://www.caad.es/sites/default/files/descargas/Fanzines/Otros/CAAD56.pdf

miércoles, 06 julio

16:08

Blog RESCATE 2019: un blog sobre aventuras de texto
[El Escritorio de Incanus (Incanus)]

Uno de los tópicos habituales de Internet es lo ancha y profunda que es esta red.

En efecto, la cantidad y variedad de medios y contenidos disponibles puede llegar a ser abrumadora para quien quiera estar al día en algún ámbito, tanto más si el tema o asunto en cuestión es suficientemente masivo o popular.

Lo opuesto sería entonces igualmente cierto: cuando el área de interés es más reducida, los generadores de contenidos son menos y el seguirles la pista para estar al día debiera ser tarea, sino fácil, al menos abordable con el tiempo libre disponible... por magro que este sea.

Dicho eso, recién he sabido de la existencia del blog "Rescate 2019", que viene publicando contenido aventurero desde fines del 2020: todo esto, por cierto, sin que me diera por enterado.

Siento una tremenda vergüenza y pena, pues si bien quien esto escribe procura retribuir (como puede) al esfuerzo que hacen los miembros de la comunidad, la realidad manifiesta es que no siempre se hace todo lo que se podría hacer, para no hablar de lo que uno querría, especialmente en esto de la difusión de la ficción interactiva.

Dejando de lado este obligado mea culpa, pasemos a revisar este (para mí) nuevo tesoro de información y experiencia creado por Ricardo Oyón. En las palabras de su autor en el debut del blog:

Por si aún no lo he dicho, la temática del blog girará en torno a las aventuras de texto en general y el desarrollo de mi aventura en particular.

No me considero un «maestro» de nada ni vengo aquí a dar lecciones. Si me preguntan si me gustan las aventuras o si me considero aventurero, diré que me gustan los juegos. Y las aventuras son solo un género más. ¿Mi favorito? No necesariamente. Y eso me da precisamente una visión más global que creo que le viene bien al género.

Hay aventuras de texto que no he jugado, parsers que no he utilizado y fanzines que no he leído. Mis opiniones son mías y de nadie más. Simplemente quiero reflexionar en voz alta y tal vez dar pie a un debate.

Se trata, pues, de un espacio dedicado al proceso creativo de aventuras conversacionales, tema que a mí me interesa no poco aunque (juzgue usted, lector) no siempre lo he abordado frecuentemente en estas páginas ni con toda la profundidad que el asunto merece.

Puedo decir que no me cuesta estar de acuerdo con mucho (que no todo) de lo que expone Ricardo en su blog, tanto en lo que refiere al trabajo de la autoría en sí, lo necesariamenre técnico y lo puramente creativo de esta labor, como lo asociado a la difícil relación que luego se plantea con la "vida" de los resultados publicados. Como dije en otro post, un trabajo de ficción interactiva sigue una vida propia, a veces completamente distinta de la prevista por el autor; esto se vuelve relevante en el aspecto motivacional al considerar el tiempo que requiere esta tarea, especialmente si (cosa muy humana) luego se intenta equiparar ese esfuerzo con la respuesta, muchas veces más bien tibia, del público aficionado.

Con una prosa muy ágil, Ricardo nos va presentando en diversos artículos su experiencia, reflexiones y pareceres en esto de crear ficción interactiva: cada post tiene algo de interés o que llama a cierta introspección, especialmente si se está creando o ya se ha creado una o más aventuras de texto.

Quedan invitados a leer y seguir el blog "Rescate 2019", cuya lectura será de especial provecho a cuantos hacen o piensan hacer algo en esto de la autoría de aventuras de texto.

Ahora bien, si el lector piensa que de esto ya sabe lo suficiente, entonces la lectura de este blog va doblemente recomendada.

Rayuela Jam 2022: fin de la Jam y resultados
[El Escritorio de Incanus (Incanus)]

¡La espera ha terminado!

El pasado 30 de Junio concluyó el periodo de votación para la edición 2022 de #RayuelaJam.

En su página están disponibles los resultados, según votaron los propios autores que concurrieron a la Jam. No hablaremos de "ganadores", a pesar de que ya los hay: todos los autores participantes, con la experiencia y conocimiento ganados; y la comunidad, que ha visto acrecentado su catálogo de trabajos interactivos.

Dicho eso, este es el ranking según la votación, destacándose de primer a quinto lugar los siguiente aportes:

  1. Cien Años Después de PRINCESS INTERNET CAFé
  2. whoami de n2n
  3. 1+1 de Clara
  4. Misterios, Drogas y Rock&Roll de Mery
  5. Mal Fario de Xavier Carrascosa

Finaliza así una nueva edición de esta Jam, con una cosecha notable de trabajos ídem.

Invito nuevamente a los aficionados a revisar los 17 trabajos publicados: no sólo los arriba mencionados, que la Jam no es sino la suma de todos sus aportes.

¡Hasta pronto!

Rayuela Jam 2022: fin de la Jam y resultados
[CAAD: Club de Aventuras AD - Comunidad de Aventuras Conversacionales y Relatos Interactivos (Incanus)]

El pasado 30 de Junio concluyó el periodo de votación para la edición 2022 de la #RayuelaJam.

En su página están disponibles los resultados, según votaron los propios autores que concurrieron a la Jam. No hablaremos de "ganadores", a pesar de que ya los hay: todos los autores participantes, con la experiencia y conocimiento ganados; y la comunidad, que ha visto acrecentado su catálogo de trabajos interactivos.

Dicho eso, este es el ranking según la votación, destacándose de primer a quinto lugar los siguiente aportes:

  1. Cien Años Después de PRINCESS INTERNET CAFé
  2. whoami de n2n
  3. 1+1 de Clara
  4. Misterios, Drogas y Rock&Roll de Mery
  5. Mal Fario de Xavier Carrascosa

Finaliza así una nueva edición de esta Jam, con una cosecha notable de creaciones interactivas.

Invito nuevamente a los aficionados a revisar los 17 trabajos publicados: no sólo los arriba mencionados, que la Jam no es sino la suma de todos sus aportes.

sábado, 02 julio

16:08

No está muerto lo que yace eternamente: décimo episodio
[El Escritorio de Incanus (Incanus)]

Ya está en línea el décimo episodio de "No está muerto lo que yace eternamente": último epsiodio de esta temporada, pues la serie descansará por el periodo de vacaciones europeo, para regresar en Septiembre.

Puede disfrutarse en el canal de Textualiza en Twitch y también en YouTube: en conversación con Ruber Eaglenest, Jade y MariaRAhumada nos enteramos de la actualidad y noticias de esta muy activa escena de la ficción interactiva, tanto en español como en inglés.

En su formato habitual, en el primer segmento veremos lo que está ocurriendo y luego podremos asistir a una sesión de juego de una obra de ficción interactiva: en esta oportunidad se interactua con "Alicia en el país de las maravillas", de Luis Enrique de Juan.

En YouTube están los enlaces del temario, disponibles también en el foro de la web del CAAD, y que incluyo aquí para abrir el apetito:

Como siempre, una amena y muy completa ocasión para saber que hay y que habrá en el mundillo de la ficción interactiva.

¡Hasta Septiembre!

Entradas anteriores

Feeds

FeedRSSLast fetchedNext fetched after
// infsp channel // XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Aventuras Conversacionales 2.0 XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
caad – Xavier Carrascosa XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
CAAD: Club de Aventuras AD - Comunidad de Aventuras Conversacionales y Relatos Interactivos XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
El blog de Morgul XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
El Escritorio de Incanus XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
El interlector >_ XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Ficción Interactiva – La Línea Dura XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Fragmentarios XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Informate tú XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Interlecturas XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
La mano parlante XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Las aventuras del arquero XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Pacificaciones XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022
Primavera en los Cárpatos XML 16:08, domingo, 25 septiembre 2022 15:08, lunes, 26 septiembre 2022