Páginas

30.9.16

Tutorial de creación de ficción interactiva - Huesos (7)

Si algo tenía Squiffy era su simplicidad. Una única secuencia de texto en dónde sólo había secciones separadas por [] y [[]] cada una con su nombre y los enlaces entre ellas. Como ya empezamos a ver en la anterior entrega en Inform 7 la cosa va a ser algo más complicado y merece la pena que empecemos desde el principio a ordenar nuestro código. Por supuesto podríamos hacerlo con comentarios, ya que Inform 7 proporciona una herramienta muy sencilla para incluir comentarios que es rodear una parte del texto con corchetes.

Por ejemplo podríamos empezar con poner un comentario indicando las circunstancias de la creación de esta obra, con una especie de mínima ficha que explique al que se la encuentre en el futuro de qué va todo esto. Claro que Inform 7 ya proporciona un mecanismo para incluir información 'bibliográfica' de la obras, como podéis ver en este enlace. Si añadimos esta información y además ponemos un comentario de contexto de la obra nos quedaría una cabecera como la siguiente:

"Huesos" by Johan Paz (in spanish)

[==============================================================

 Huesos - ejemplo de historia interactiva creada en Inform 7
 
 Parte del tutorial de 'huesos':
  
  http://pacificaciones.blogspot.com.es/search/label/tutorialhuesos
  
 Creado en 2016 por Johan Paz con motivo de la competición:
  
  http://wiki.caad.es/M%C3%A1s_all%C3%A1_de_la_Comp
  
==============================================================]

The story title is "Huesos". 
The story author is "Johan Paz". 
The story headline is "Una historia de fantasmas en la edad del bronce". 
The story genre is "Horror". 
The release number is 1. 
The story description is "Sin casi apoyo de tu comunidad, tú, una pobre anciana 
vas a lograr que los huesos de tus antepasados no sean profanados." 
The story creation year is 2016. 

Estos cambios no modifican la obra absolutamente en nada, pero ayudarán a los que se encuentren la obra en el futuro y en su 'publicación' y propagación como explica la sección de la documentación que he enlazado anteriormente.

Otra herramienta que tiene Inform 7 para hacer más claro el código es la capacidad de hacer secciones mediante las palabras claves 'Part', 'Chapter', 'Section', numeradas y con un título. Estas secciones además sirven para navegar por nuestro código tanto en el IDE como cuando se publica la obra incluyendo el código.

Creemos una 'parte' para cosas técnicas -que de momento dejaremos vacía-, otra con el modelo del mundo. En la parte del modelo del mundo separaremos en capítulos la parte de mapeado y la parte de objetos. Finalmente crearemos una sección para cada lugar o cosa existente. El código nos quedaría de esta forma:

"Huesos" by Johan Paz (in spanish)

[==============================================================

 Huesos - ejemplo de historia interactiva creada en Inform 7
 
 Parte del tutorial de 'huesos':
  
  http://pacificaciones.blogspot.com.es/search/label/tutorialhuesos
  
 Creado en 2016 por Johan Paz con motivo de la competición:
  
  http://wiki.caad.es/M%C3%A1s_all%C3%A1_de_la_Comp
  
==============================================================]

Part 0 - Referencia bibliográfica

The story title is "Huesos". 
The story author is "Johan Paz". 
The story headline is "Una historia de fantasmas en la edad del bronce". 
The story genre is "Horror". 
The release number is 1. 
The story description is "Sin casi apoyo de tu comunidad, tú, una pobre anciana 
vas a lograr que los huesos de tus antepasados no sean profanados." 
The story creation year is 2016. 

Part 1 - Herramientas y apaños técnicos

Part 2 - Modelo del mundo

Chapter 1 - Mapeado

Section 1 - Túmulo

Tumulo is a dark room. The printed name of tumulo is "Interior del túmulo".
The description of tumulo is "Piedras enormes te rodean levantadas por tus 
antepasados para proteger a los restos de sus muertos. Montones de tinajas, 
algunas en hileras, la mayor parte desordenadas, contienen esos restos a tu alrededor.".

Chapter 2 - Objetos

Section 1 - Lámpara de aceite

A lampara (f) is a switched on device carried by the player. The lampara is lit.
The printed name of lampara is "lámpara".
The description of lampara is "Arcilla roja con pequeñas decoraciones en 
arcilla blanca que representan los signos sagrados de los dioses. Una lámpara 
muy adecuada para esta misión sagrada.".

Instead of switching on the lampara:
 say "Con dificultad enciendes la lámpara.";
 now the lampara is lit.
 
Instead of switching off the lampara:
 say "Soplas sobre la trémula llama de la lámpara, apagándola.";
 now the lampara is unlit.

Si compiláis este código veréis que el IDE ya os crea un índice que nos facilitará mucho la localización del código que nos interese cuando estemos depurando el comportamiento de la obra. Sé que parece un poco excesivo poner todas etiquetas pero es mucho más importante de lo que parece y en realidad es bastante sencillo hacerlo.

Ahora que tenemos la obra un poco más ordenada, sería necesario añadir 'niveles de examinado'. ¿Qué es un nivel de examinado? Llamo nivel de examinado a la existencia de mensajes de detalle -accesibles por el comando 'ex' o 'examinar'- de todas las 'cosas' que aparecen en los mensajes de los lugares por donde pasará el interlector y los objetos que lleva encima o se encuentren en estos lugares. Por ejemplo, en la descripción del único lugar de esta obra, el túmulo, se habla de 'piedras', 'antepasados', 'muertos', 'tinajas', 'hileras' y 'restos'. Disponer de una respuesta adecuado a los examinas de todos esos conceptos sería tener el primer nivel de examinado completo. Personalmente no me doy por satisfecho hasta que esté completo el tercer nivel de examinado, es decir, respuestas correctas para los conceptos mencionados en las respuestas de los conceptos mencionados en las respuestas de los conceptos mencionados por la descripción de inventario y de lugares. Pero es que yo soy un poco demasiado exigente, con que lleguéis al primer nivel ya estará bastante bien.

De la lista de concepto anterior no todas las cosas son lo mismo, por ejemplo, 'piedras', 'tinajas' e 'hileras' son cosas que 'realmente' estarán ahí, mientras que 'antepasados', 'muertos' y 'restos' no van a estar realmente, al menos no hasta que empecemos a abrir tinajas. Las respuestas no pueden ser lo mismo. El comando 'examinar' es mirar con los ojos, así que un 'ex piedras' debería dar detalle de las piedras tal y cómo sea que sean en la realidad del mundo de la obra, pero un 'ex muertos' debería decir que están dentro de las tinajas, poco más... excepto si las tinajas están abiertas. Cuidado con estos detalles variables que es lo que finalmente dará calidad a vuestra obra interactiva.

Trataremos con las tinajas (y sus hileras) más adelante, ya que van a ser los objetos más importantes de esta obra, pero, ¿cómo incluimos la descripción de las piedras del túmulo? Una primera aproximación es simplemente incluirlos como un objeto más en el túmulo, es decir:

Section 2 - Piedras

Some piedras (f) are in the tumulo. 
The description of piedras is "Enormes como caballos. Amarillentas como las colinas cercanas 
a la aldea, pero las historias dicen que fueron traídas de tierras sagradas lejanas, 
allá en el lejano sur de nuestros orígenes.".

Esto proporciona el objeto piedras, al que podemos referirnos más adelante y nos da la descripción que buscábamos, pero hace aparece el texto:

Interior del túmulo
Piedras enormes te rodean levantadas por tus antepasados para proteger a los restos de sus muertos. 
Montones de tinajas, algunas en hileras, la mayor parte desordenadas, 
contienen esos restos a tu alrededor.

Puedes ver unas piedras aquí.

Y ese 'puedes ver unas piedras aquí', no es precisamente lo que queremos. Además estas piedras 'grandes como caballos' resulta que pueden cogerse con el comando 'coger piedras'. No, esto no queda bien. Por suerte Inform 7 contempla esta clase de objetos de 'decoración' y los llama 'escenarios'. Si cambiamos el código por:

Section 2 - Piedras

Some piedras (f) are scenery in the tumulo. 
The description of piedras is "Enormes como caballos. Amarillentas como las colinas cercanas 
a la aldea, pero las historias dicen que fueron traídas de tierras sagradas lejanas, 
allá en el lejano sur de nuestros orígenes.".

Veréis que el comportamiento cambia totalmente y sólo por una palabra. Es una de las magias de Inform 7, es un sistema que tiene tanta historia tras de sí que ya contempla mucho de lo que podemos necesitar.

En el siguiente capítulo veremos como incluir el resto de las decoraciones y cómo simplificar un poco este código.

28.9.16

Tutorial de creación de ficción interactiva - Huesos (6)

En la anterior entrega ya completamos la versión de nuestra historia 'Huesos' en forma de una hiperficción realizada con Squiffy. Hasta ahora hemos transformado un texto lineal en una historia que se puede explorar a través de varios caminos, lo que es la base de una narración interactiva. Pero un relato interactivo basado en comandos -nuestras viejas conocidas las aventuras conversacionles- son algo bastante diferente, es una historia que surge de forma emergente de un 'modelo de mundo'. Un relato interactivo por lo tanto tiene necesariamente una coherencia interna que una hiperficción -o un librojuego- no tiene porqué tener, necesita esa coherencia porque el interlector en este caso no sólo controla el discurrir de la historia sino que puede interactuar con el 'mundo' en el que está con una plétora de comandos -acciones- diferentes que deben contestar adecuadamente. Y si estas respuestas no son coherentes, perderemos la credibilidad.

En algunos aspectos hacer un relato interactivo basado en comandos es mucho más difícil que hacer una hiperficción o que un librojuego, porque el autor aquí pierde aún más control de su obra y hay que hacer un enorme trabajo de programación para incluir todos esos comandos posibles así como las respuestas adecuadas... o había que hacerlo, en el pasado. Por suerte las herramientas actuales para crear aventuras conversacionales están muy evolucionadas y con muy poco código es posible obtener modelos del mundo coherentes y complejos. En el resto de este tutorial vamos a usar una de estas herramientas avanzadas: Inform 7.

Esta herramienta contiene en su interior un ingente universo de capacidades que no tenéis porqué conocer en un principio -que se pueda usar muy por debajo de sus capacidades es también parte de su magia- pero que os servirá para tener modelos de mundo muy avanzados en el futuro. Hay un tutorial de Inform 7 que merece la pena hacer antes de programar ninguna aventura y os animo a hacerlo, ya que este tutorial no va -como ya habéis visto- tanto de la parte técnica de las herramientas, como de la parte de escritura.

¿Cómo es el código más básico que podemos crear con Inform 7? Pues tan simple como el que podéis ver aquí abajo:

"Huesos" by Johan Paz (in spanish)

Interior del túmulo is a room.

En dicho código tan sólo hemos puesto el nombre de la obra y del autor, hemos indicado que es en español y hemos creado la primera -y en este caso única- habitación en la que se desarrollará la historia. Nada más empezar ya tenemos entre manos algo totalmente diferente, ya estamos creando un mundo en el que nuestro interlector va a 'estar'.

Pongamos algo más de detalles a este mundo. El túmulo debería estar a oscuras, y deberíamos iluminarnos con una lámpara de aceite. Esto se logra en Inform 7 de la siguiente forma:


"Huesos" by Johan Paz (in spanish)

Interior del túmulo is a dark room.

A lámpara (f) is a switched on device carried by the player. The lámpara is lit.

Instead of switching on the lámpara:
 say "Con dificultad enciendes la lámpara.";
 now the lámpara is lit.
 
Instead of switching off the lámpara:
 say "Soplas sobre la trémula llama de la lámpara, apagándola.";
 now the lámpara is unlit.

Hemos indicado que el interior del túmulo está oscuro, pero que tenemos un artefacto que se puede encender y apagar que empieza como encendido -la (f) le indica al sistema que es femenino. Además hemos incluido nuestras primeras dos reglas para encender y apagar la lámpara. Si copiáis el código anterior en el IDE de I7 y lo corréis veréis cómo el sistema de creación se encarga de proporcionaros toda la coherencia que necesitáis. Probad a dejar la lámpara mientras estáis en la oscuridad. Intentad encenderla o simplemente cogerla después de haberla dejado en la oscuridad. Ahí tenéis todo un nuevo conjunto de puzles, de dificultades coherentes que surgen por si mismas cuando trabajamos con un modelo de mundo en lugar de sólo con enlaces y párrafos de texto.

Pero Inform 7 no es perfecto. Por ejemplo la adaptación al español, aún es un poco regular, y si usáis 'lámpara' con acento como en el ejemplo el juego no aceptará 'lampara' sin acento -sí es una falta de ortografía pero si lo incluis podrán jugar con más facilidad chavales que escriben sin acentos sus Whatsapps. Para lograr esto tenemos que dar un poco de vuelta y escribir el siguiente código.

"Huesos" by Johan Paz (in spanish)

Tumulo is a dark room. The printed name of tumulo is "Interior del túmulo".

A lampara (f) is a switched on device carried by the player. The lampara is lit.
The printed name of lampara is "lámpara".

Instead of switching on the lampara:
 say "Con dificultad enciendes la lámpara.";
 now the lampara is lit.
 
Instead of switching off the lampara:
 say "Soplas sobre la trémula llama de la lámpara, apagándola.";
 now the lampara is unlit.

En el que hemos separado la declaración de los objetos y lugares del nombre que deben mostrar cuando se ejecute la obra. Es una buena práctica hacer eso para los juegos en español y aunque es incómodo es algo que recomiendo tal y como está de momento la versión para español de Inform 7.

Nos faltaría ahora añadir descripción tanto para el lugar como para la lámpara, y es fácil, no muy diferente de lo de indicar el nombre.

Tumulo is a dark room. The printed name of tumulo is "Interior del túmulo".
The description of tumulo is "Piedras enormes te rodean. Levantadas por tus antepasados para proteger a los 
restos de sus muertos. Montones de tinajas, algunas en hileras, la mayor parte desordenadas, 
contienen esos restos a tu alrededor.".

A lampara (f) is a switched on device carried by the player. The lampara is lit.
The printed name of lampara is "lámpara".
The description of lampara is "Arcilla roja con pequeñas decoraciones en arcilla blanca que representan los 
signos sagrados de los dioses. Una lámpara muy adecuada para esta misión sagrada.".

Corred la obra y observad las diferencias. Bien, tenemos un inicio de mundo creíble, pero ya empezamos a ver que vamos a necesitar bastantes más textos para la misma obra. Toda cosa que pongamos debe poderse examinar y hay que incluir el texto correspondiente.

Pero vayamos poco a poco.

22.9.16

Tutorial de creación de ficción interactiva - Huesos (5)

Pues ya hemos llegado al evento principal del relato. Ya estamos frente al sacerdote. El resto del relato está enfocado en incrementar progresivamente el terror en el lector, hasta provocar la huida, tras la cuál ya sólo queda el giro final.

¿Cómo logramos ir incrementando la tensión en el interlector y a ser posible transmitirle un poco de terror? Probablemente un autor más cercano al terror que yo tenga mejores ideas, pero en mi caso lo que haría no es muy diferente lo que ya hace el relato original. Intentar secciones breves, sin demasiadas ramificaciones, para transmitir inevitabilidad. E intentar que en cada sección haya un giro que incremente la tensión, que complique la situación. Se pueden poner secuencias descriptivas pero estas deben ser cortas, concisas, deben invitar a regresar a la trama principal y la espiral de preocupación.

Aquí habrá que probar una y otra vez hasta que quede bien, así que conviene que nos saltemos el resto de la obra y probemos directamente empezando en la sección de la apertura de la tinaja del sacerdote. Esto en Squiffy es tan sencillo como cambiar el nodo de inicio, o más concretamente en nuestro caso es incluir al principio:

@start tinajax

Primero ocultamos un poco la sección dentro de la exploración del sacerdote, ya que tenemos que sugerir al interlector que está 'profanando' la tumba. Esto se logra con (podéis descargarlo de aquí):

[[tinajax]]:
La siguiente tinaja la dejó confundida. En ella había un [sacerdote]. Los sacerdotes ya no 
se enterraban en el pueblo. Vivían apartados, en su propia colina y por lo que ella sabía 
los enterraban allí mismo, en los cimientos del templo dedicado a [Potnia]. Pero éste estaba 
allí, y estaba casi entero, casi sin corromper. ¿Por qué estaba en el túmulo tan lejos 
del resto de los suyos? 

[sacerdote]:
Su piel estaba [seca], como costra salada, pero aún tenía cara, una cara de sonrisa excesiva 
y amenazadora que le había hecho soltar un breve grito al destapar la tinaja.

[Potnia]:
La diosa de los animales es adorada por todo el que tiene juicio, pues de ella depende toda 
prosperidad, así como la suerte en los partos o que las tormentas y las heladas no destruyan 
las cosechas. Hasta la luz nace de ella, al menos si está de humor.

[seca]:
Con algo de temblor se atrevió a tocar la piel del sacerdote. Áspera. [Escalofriante]. 

[Escalofriante]:
A su edad casi nada le asustaba, pero el tacto del sacerdote le hacía pensar en maldiciones, 
en enfermedades, en ovejas estériles y cabras de ubres secas, en todo lo negativo que 
la [diosa](Potnia) podía llegar a desatar a los que no respetaban las tradiciones


Y ya queda tan poco, que con un poco de esfuerzo podemos completar la historia. Aquí podéis descargaros el programa fuente.

Y aquí podéis jugarla.

En la próxima entrega lo intentamos con Inform 7.

8.9.16

Tutorial de creación de ficción interactiva - Huesos (4)

Los relatos escritos deben poseer un buen 'ritmo'. El ritmo es la 'sensación' que se tiene al leerlo. Esta sensación puede ser más o menos rápida, agresiva o por lo contrario pausado o aún soporífero. Es importante que el ritmo del relato sea el adecuado para aquello que cuenta. Al imprimir el ritmo adecuado el lector se 'contagiará' de las sensaciones de los protagonistas de forma más intensa y por lo tanto disfrutará mucho más de la experiencia lectora.

El ritmo es uno de los elementos más complejos de conseguir en un relato, ya que no hay reglas demasiado fijas sobre cómo conseguirlo, aunque hay elementos que se pueden usar para lograrlo, como los tiempos verbales, la longitud de las frases, etc... pero que el ritmo sea realmente adecuado es una suerte de 'baile' entre la morfología del texto, el léxico y la semántica. Un hermoso y salvaje baile.

¿Se conserva el ritmo en los relatos interactivos? En realidad sí, pero es mucho más difícil de 'controlar'. Si quieres transmitir una sensación de urgencia, por mucho que escribas con frases cortas o ultra cortas, si el interlector no pulsa de forma frenética los enlaces el 'ritmo' de urgencia no se mantendrá. En la ficción interactiva el interlector es siempre el que controla el discurrir y por lo tanto puede afectar muchísimo al ritmo.

Si quieres que más o menos se mantenga el ritmo que tienes pensado para cada parte del relato puedes jugar con algunos trucos. Un hecho interesante es que muchos interlectores son 'impacientes', al menos en la primera lectura. Muchos se precipitan a 'clickar' los enlaces que parecen lógicos para avanzar en la acción. Si quieres meter a tu interlector en un frenesí de urgencia, crea textos de escena cortos, déjale muy claro cuáles de los enlaces son de acción, y ponle bien visible aquellos que te conviene que crean que son la solución, y, encima, borra el texto cuando pulse en el enlace. De esta forma el interlector impaciente -que son muchos- se verá en una secuencia de textos cortos enlazados por acciones y se volverá más y más frenético, hasta llegar a la angustia que la sensación de urgencia que querías expresar requiere. Si requieres transmitir una sensación de meditación, algo lento y muy pausado, haz lo contrario. Textos algo más largos -nunca demasiado largos, porque los interlectores impacientes simplemente se lo saltarán- y en los primeros párrafos no incluyas ni una sola acción, por sólo enlaces a pasajes de exploración y varios niveles.

Estas diferencias tienen al menos una ventaja. En un relato tradicional simplemente no puedes pasarte con la cantidad de información y de texto. Eso destruye el ritmo y aburre al lector, sin embargo en el caso de la ficción interactiva puedes dejar información adicional en niveles de descripción que el interlector simplemente puede ignorar para ir a lo concreto, a la acción. Para ilustrar este hecho he creado esta versión de Huesos que avanza un poco más en el relato, pero sobre todo que mete bastante más información que no estaba en el relato original, pero que al estar conectado de forma periférica simplemente no rompe el ritmo de lectura, ya que es el propio usuario el que ha solicitado ampliar la información.

Bien, esto va cogiendo forma, pero aún no hemos atacado la parte más complicado del relato original. Los dos siguientes párrafos del relato son básicamente un elipsis encubierta. El autor nos engaña -sí soy malvado- y parece hacernos ver cómo la anciana va abriendo tinajas, remueve los restos dentro de ellas y rescata lo que puede en los dos primeros sacos. Incluso se permite sacar a la anciana del túmulo en un fragmento de texto que probablemente es bastante redundante, no muy bien conseguido, y todo es para trasmitirnos la sensación de tiempo, de acción repetitiva sin que haya en realidad ninguna acción repetitiva en absoluto en el texto. Al tiempo que nos produce un poco de sopor, de normalidad, de rutina, que puede así contrastar más adelante con la tensión y la extrañeza de encontrar el cadáver del sacerdote.

Transcribir tal cual esta elipsis simplemente no funcionaría aunque es tentador. Necesitamos provocar al interlector el mismo tipo de sensación de normalidad, de rutina, que crea el relato. Una forma de generar esa sensación en un interlector es llevarlo a pensar que está 'resolviendo un juego'. Si lo situamos ante lo que parece un puzle a resolver, estamos jugando con las convenciones de lo interactivo y el interlector se olvidará del contexto pasando a 'modo de resolución', que es equivalente a lo 'rutinario' en un lector normal. Así que tenemos que intentar presentar el vaciado de las tinajas como un 'juego' de alguna clase, algo a resolver.

Para lograr esto vamos a tener que hacer un poquillo de código, algo que permita 'repetir' la acción de 'abrir tinaja' y que, sin embargo, de un resultado diferente y preferiblemente uno que varíe de una lectura a otra, de forma que si el interlector relea la obra le de algo más de sensación de realismo. Evidentemente esto se puede lograr con un cuidado diseño de enlaces fijos, pero mejor veamos un poco de cómo se codifica en Squiffy.

En la documentación de Squiffy podéis ver varias secciones que hablan de cómo se puede incluir código en Squiffy. La forma más habitual de hacerlo con esta herramienta es añadiendo javascript a la estructura de nuestro relato interactivo, como se explica aquí, jugando con atributos, como se explica aquí y/o haciendo 'saltos' programados de unas secciones a otras como se explica aquí.

Una estructura simple que podemosa usar es tener una sección que contenga una llamada a función de javascript que haga un salto a una sección u otra de forma condicional, esto se hace de esta forma:

@start Inicio

[[]]:
@clear

[[Inicio]]:
@set count = 0
Estamos en una panadería repleta de hogazas de pan. Cojo una hogaza de [[pan]].

[[pan]]:
    var count = squiffy.get("count")
    var next = "pan" + count
    squiffy.set("count", count + 1)
    squiffy.story.go(next)
    
[[pan0]]:
Es una hogaza de pan negro fragante y ácida. ¡Quiero [[más]](pan)!

[[pan1]]:
Es una hogaza de pan blanco deliciosamente tierno. ¡Quiero [[más]](pan)!

[[pan2]]:
Es una hogaza de pan de semillas. Llena demasiado. ¡Ya basta de pan!

En este caso estamos usando un contador de squiffy que se incrementa cada vez que se pulsa en 'pan' y se salta a una sección numerada. Lo que se consigue con esto es separar el texto de cada clase de pan de la lógica que llega a la siguiente. De hecho el código de antes da un resultado bastante obvio, siempre el mismo y que no merece la pena hacerlo con código. La gracia es que podemos cambiar ese comportamiento cambiando sólo la lógica escrita en pan para dejar por ejemplo un avance aleatorio, como este:

@start Inicio

[[]]:
@clear

[[Inicio]]:
@set count = 0
Estamos en una panadería repleta de hogazas de pan. Cojo una hogaza de [[pan]].

[[pan]]:
    var count = squiffy.get("count")
    var next = "pan" + Math.floor(Math.random() * 3);
    squiffy.set("count", count + 1)
    squiffy.story.go(next)
    
[[pan0]]:
Es una hogaza de pan negro fragante y ácida. {if count< 3:¡Quiero [[más]](pan)!}{else:¡Ya basta de pan!}

[[pan1]]:
Es una hogaza de pan blanco deliciosamente tierno. {if count< 3:¡Quiero [[más]](pan)!}{else:¡Ya basta de pan!}

[[pan2]]:
Es una hogaza de pan de semillas, crujiente y deliciosa. {if count< 3:¡Quiero [[más]](pan)!}{else:¡Ya basta de pan!}

Este ejemplo ya se acerca bastante a lo que queremos, una secuencia más o menos aleatoria de secciones que representen el buscar entre las tinajas y que nos lleve a un determinado final. Pero en nuestro caso no vamos a querer que una misma tinaja se repita, para ellos sustituiremos la lógica central del ejemplo por esta otra:

[[huesos belaiska]]:
@set count = 0
@set tinajas = 012345x
Dejó la lámpara sobre la tinaja de al lado y, con cuidado, pero con toda la prisa que podía darse, los 
introdujo en el primer saco. Hueso a hueso. Bien colocados casi no ocuparon nada. Aun así allí había 
muchos cuerpos que recoger. Todos los muertos desde la fundación de la ciudad. Muchas más [[tinajas]](abrir tinaja) 
que abrir y revisar.

[[abrir tinaja]]:
    var count = squiffy.get("count")
    var cadena = squiffy.get("tinajas")
    if ( cadena == "------x" ) {
        next = "tinajax" 
    } else {
        var rango = 6
        if ( count > 2 ) { rango = 7 }
        var seleccionado = "-"
        while ( seleccionado == "-" ) {
            var index = Math.floor(Math.random() * rango)
            seleccionado = cadena[index]
        }
        var next = "tinaja" + cadena[index];
        cadena = cadena.substring(0, index) + "-" + cadena.substring(index + 1)
        squiffy.set("tinajas", cadena)
    }
    squiffy.set("count", count + 1)
    squiffy.story.go(next)

En la que usamos una variable de squiffy -tinajas- como una cadena en la que vamos marcando las que ya hemos abierto hasta que llegamos a la del sacerdote por suerte o porque no queda ninguna otra. Además hemos añadido una condición para que al menos abra tres tinajas antes de que aparezca como alternativa la del sacerdote. Por fin tenemos un texto variable, que da la sensación de mostrarnos el trabajo de rescatar los restos y al tiempo no es excesivamente larga como para aburrir.

Aquí podéis ver el resultado final.