12.8.18

Rayuela de Arena - 9 y 12 de Agosto

El jueves 9 preparé mi primera y, tal vez única, aportación a la Rayuela de Arena: Ananké, un juego print and play con mucha aleatoriedad y muchos dados, como a mí me gusta.

:)

He tenido más bien poco tiempo para probarlo, así que tan sólo espero que no esté demasiado desbalanceado. Lo que sí que tengo claro es que tiene una buena cantidad de color y 'cosas chulas', como decía Rubén hace tiempo. Así que, al menos, espero que sea divertido. ¡No os olvidéis de comentar aquí mismo vuestra experiencias con Ananké, que tengo mucha curiosidad!

Y ahora vamos con 'La Torre y el Mar'. Dadas las circunstancias médicas de mi madre ya me queda claro que no puedo implementarlo con Inform 7, así que hoy he decidido pasar el proyecto a Squiffy. Ya he traspasado textos y también he estado recopilando efectos sonoros adecuados.

Tal vez intente localizar efectos visuales para el fondo, pero no sé si me dará para tanto...

Y... ¡¡Suerte a todos los participantes!!

7.8.18

Rayuela de Arena - 7 de Agosto


La cosa va avanzando pero demasiado lento. Al final estoy teniendo mucho menos tiempo de lo esperado, pero al menos ya casi tengo la primera versión de 'Ananké', el Print and Play que dije que iba a presentar. Han quedado una reglas chulas, complejillas, pero fáciles de entender (espero) y creo que puede dar bastante juego.

Me falta terminar de maquetar y diseñar las fichas/cartas del juego, supongo que esta semana estará para subirlo. Así me olvidaré de él y podré intentar centrar mi cabeza en 'La torre y el mar', aunque... la verdad es que por alguna razón se me va el pensamiento en el relato que se me a ocurrido para esta convocatoria de Editorial Cerbero y al relato que he empezado a hacer con Gema Moratalla.

2.8.18

Rayuela de Arena - 2 de Agosto

Hoy no he tenido casi tiempo, así que ha sido sobre todo un día de reflexión y revisión. He estado seleccionando algunas imágenes para "Ananké", y viendo si queda mejor en forma de documento o de powerpoint. Normalmente hago un powerpoint para los Print and Play, pero no queda nada profesional, así que esta vez creo que haré un documento, como cuando Rubén me obligó a montar unas instrucciones independientes para "Kala". 

En cuanto a "La torre y el mar", he hecho algunas pruebas con Squiffy (sí, realmente lo voy  reescribir), porque tiene mucho componente de diálogo y en Inform 7 siempre me quedo insatisfecho con las conversaciones. No me gustó nada como quedó en El Anillo 3 el diálogo final por menús. En lo que hice de Berg al menos el menú tenía gracia, pero seguía por ser insatisfactorios. En el mundo anglo se usa mucho las conversaciones por 'tema', pero siempre me ha parecido que es una forma de elección 'ciega'. Incluso en Alabaster, que es de las mejores conversaciones que he visto por 'tema' en realidad queda regular.

Así que le he estado dando muchas, muchas vueltas; y muy cerca he estado de pasarme a Squiffy, pero las pruebas de hoy no me han convencido, quiero que el interlector tenga más libertad. Así que al final lo que he decidido es usar masivamente las librerías AKI y mezclar los 'temas' de conversación entre los diversos enlaces del texto disponible, y tal vez cree un comando '>> temas'.

Ya iremos viendo.

1.8.18

Rayuela de Arena - Inicio

Ya empieza la Jam de ficción interactiva de este año. De hecho dado el número de inscritos se puede decir que es la Comp de esta década, es más, con ochenta inscritos es sin duda la de mayor éxito de la historia desde el concurso de aventuras de MH, que tuvo cien participantes.

Sí señores ya empieza la Rayuela de Arena y si alguna vez habéis estado en esto de la narrativa interactiva no deberíais perdérosla, ya que la cosa promete marcar un antes y un después.

Sinceramente estoy muy sorprendido. Cuando Edu Sánchez apareció por euphoria diciendo que iba a crear una Jam que lo iba a petar, sinceramente no le creí. ¿Por qué iba a creerle? Yo mismo he organizado unas cuantas comps a lo largo de los años, incluso poniendo premios o dinero como acicate y el resultado ha sido reguleras. Nunca he logrado atraer a más de veintipocos inscritos y no sé si alguna vez hemos llegado a las diez obras participantes.

¡Así que congratulémonos!

Voy a preparar dos obras, como hice en la Jam del Mar: un juego P&P que he estado bosquejando estos días y si hay suerte subiré La torre y el mar. El juego P&P es porque me conozco y sé que en Agosto me entierro en partidas de rol del viejo Akaram y lo mismo... en fin, es para que al menos haya algo mío en este evento que espero que sea histórico. Os puedo adelantar el título 'Ananké'. En cuanto a "La torre y el mar", muchas han sido las cosas que han cambiado desde que la inicié, incluyendo la muerte de mi padre, así que básicamente la voy a reescribir por completo y además he decidido no hacer nada hasta hoy, el día de comienzo de la jam.

Es por una tontería romántica.

La verdad es que siempre he querido ser capaz de hacer esto. Sólo cuando cree desde cero en un fin de semana Pronto me acerqué a ello; y sin duda "Pronto" es mi obra más extraña y personal. Y necesito que "La torre y el mar" lo vuelva a ser. Y, claro, también envidio a Blue Lacuna en muchos otros aspectos, empezando por su sorprendentemente hermosa web (¿no veis, no sé, cierto parecido con mi blog?, pues ya sabéis), pasando por su longitud y terminando en el impacto que tuvo lo conseguido de su sistema de comandos de una palabra, que me hizo crear una librería a partir de la de Aaron y modificar Anillo 3 con ella.

Pero no nos engañemos, aunque empiezo mis vacaciones el viernes, sé que muchos días no tendré tiempo ni para sentarme aquí. Y la verdad, ahora mismo sufro un 'síndrome' (o una realidad) del impostor (parece que ni en 200 palabras soy capaz de detectar todos los gazapos), bastante chungo, así que... es más probable que no veáis esta vez tampoco "La torre y el mar".

No voy a hacer una web tan chula, ni grabar un video chulo como el de Blue Lacuna, pero al menos intentaré mantener un diario de mis avances en la Rayuela del Siglo en este blog.


26.7.18

Tutorial de juegos 'rpg' para Inform 7 - Acero (5) - Acciones

Hasta ahora tenemos una forma 'crear' personajes, obtener sus características, niveles de grupo de habilidad y porcentaje de habilidades, así como hemos creado lo necesario para poder hacer las tiradas; pero nos falta relacionar lo que 'ocurre' en la narración con las tiradas y sus resultados.

Desde luego podríamos usar las funciones que hemos creado hasta ahora para incluir verificaciones en cada una de las tiradas necesarias en todos 'Instead of' de la obra, de una manera similar a cómo informábamos del lanzamiento de flechas por parte de nuestro lagarto. Pero entonces tendríamos un código bastante feo y nada propio de Inform 7. ¿Cómo podemos hacerlo más natural?

Lo primero sería relacionar las acciones con la tirada que les corresponde, podríamos pensar en tablas para hacer esto, pero las 'acciones' en las tablas de Inform 7 están limitadas a definiciones de acciones concretas y nosotros necesitaríamos una relación con acciones genéricas, tal abiertas como sea necesarias. De forma que vamos a organizarlo mediante unas reglas nuevas 'validate roll', y así de paso aprendemos cómo usar libros de reglas nuevas. Nuestro objetivo será lograr algo como esto:

The last roll result is a skill roll result that varies.

Before doing anything:
  now last roll result is the skill roll result produced by the validate roll rules.
 
Before a character (called the actor) doing anything:
  now last roll result is the skill roll result produced by the validate roll rules.

Podemos usar una variable global porque Inform 7 sólo va a verificar una acción cada vez y 'doing anything' va a cubrir todas las acciones. Se puede ver que Inform 7 tiene acciones para el jugador y para los PNJs, así que tenemos que cubrir las dos. Las reglas de 'validate roll' se declaran de esta forma:

Validate roll rules is a rulebook producing a skill roll result.

Es decir, son reglas que actuarán sobre una acción y generan un resultado de tirada. Los valores por defecto serían:

Validate roll doing anything:
 rule succeeds with result success.
 
Validate roll a character (called actor) doing anything:
 rule succeeds with result success.

Es decir, si no definimos una verificación concreta a hacer cualquier acción tiene un éxito como resultado. Una verificación básica podría ser:

Validate roll jumping:
 rule succeeds with result the normal roll jump for the player. 
 
Validate roll a character (called actor) jumping:
 rule succeeds with result the normal roll jump for the actor. 

Y ya aquí nos encontramos con una dificultad, si corremos el juego e intentamos '>> salta'  os dará un error. Se debe a que el jugador ahora mismo no es un character y por lo tanto no tiene porcentajes en sus tiradas.

No es posible simplemente decir que el jugador es un personaje de tal o cual tipo porque el jugador y nace como un person y no se puede redefinir sobre la marcha. Para dar cualidades especiales al jugador en Inform 7 hay que crear un objeto de personaje nuevo y cambiar tras el inicio del juego el objeto del jugador por el que hemos creado para él, por ejemplo con:

The selected player is wolferm human in the explanada.

When play begins:
 let old player be the player;
 now the player is the selected player;
 remove old player from play.

Fijaos que lo he llamado 'jugador seleccionado', porque en realidad en el juego habrá que crear alguna clase de introducción que nos permita seleccionar o crear dicho personaje. Con esto ya funcionará el verbo salta para el jugador, claro que si queréis que se use la tirada del salto tendréis que crear reglas específicas sobre lo que pasa con el jugador cuando da un saltito. Eso os lo voy a dejar como ejercicio. Hagamos ahora que el lagarto dispare de 'verdad'. Lo primero es que en S3 cada arma tiene una dificultad de disparo diferente, así que tendremos que adelantar un poco del futuro capítulo de armas para poder definir la categoría de arco que el lagarto va a usar:

Chapter - Weapons

A weapon is a kind of thing.
A projectile weapon is a kind of weapon.
A bow is a kind of projectile weapon.
A long bow is a kind of bow.
A short bow is a kind of bow.
A composite bow is a kind of bow.

Y ahora ya le podemos dar al lagarto un arma haciendo esto:

El arco blanco is a long bow.
Sherack is carrying arco blanco.

Y ya podemos hacer una versión simplificada de las reglas de 'disparar', para el caso de 'arco largo' de esta forma:

 
Validate roll shooting a long bow:
 rule succeeds with result the difficult roll use bow for the player. 
 
Validate roll a character (called actor) shooting a long bow:
 rule succeeds with result the difficult roll use bow for the actor. 

Dado que disparar con el arco largo  en S3 es una acción dificil. Si añadimos un poco de maquillaje para verificar el resultado de la acción con:

Chapter - Definition for simplified the when for Insteads

To decide if success:
 if the last roll result is success:
  decide yes;
 decide no.
 
To decide if success completely:
 if  the last roll result is special success:
  decide yes;
 decide no.
 
To decide if failed:
 if  the last roll result is failure:
  decide yes;
 decide no.
 
To decide if failed completely:
 if  the last roll result is disaster:
  decide yes;
 decide no.

Ahora ya podemos escribir:

To say Sherack disparando:
 say "Sherack dispara contra la diana".

Instead of Sherack shooting when failed completely:
 say "[Sherack disparando], pero tan sólo consigue golpearse con la cuerda del arco en la mejilla.".
 
Instead of Sherack shooting when failed:
 say "[Sherack disparando], pero la flecha pasa por encima del muñeco.".
 
Instead of Sherack shooting when success:
 say "[Sherack disparando] y acierta en el muñeco de entrenamiento.".
 
Instead of Sherack shooting when success completely:
 say "[Sherack disparando] y acierta justo en entre los ojos del muñeco de entrenamiento.".

Véase como se pueden escribir frases de 'To say' para no repetir texto. Y ahora ya sólo tenemos que decirle al lagarto que dispare cada turno:

Every turn:
 try Sherack shooting arco blanco.

Pues ya tenemos una forma de añadir las tiradas necesarias para cada acción que ya podemos usar en nuestra historia. En la próxima entrega hablaremos de armas y, tal vez, armaduras.

El estado de 'acero' es este y el de la librería este.

24.7.18

Relatos del cuarto de hora - Edición Twitter 2018. Ventrículos cerebrales asimétricos.

16:10

"Ventrículos cerebrales asimétricos."

No podía sacarme la frase de la cabeza. ¿Qué diablos significaba eso exactamente? Hasta que me lo dijo especialista sólo sabía de los ventrículos del corazón. ¿Es que el cerebro bombeaba algo? ¿Pensamientos? ¿Amor? ¿Deseo? ¿Envidia? Desde luego en aquel momento el mío no paraba de bombear ansiedad; aunque según lo que me acaba de diagnosticar el doctor, seguro que lo hacía asimétricamente. 

Tal vez por eso siempre había sido un raro. Mi cerebro no latía correctamente, y las ideas andaban por ahí entrechocando un poco al azar, de forma incorrecta. Seguro que las personas de bien que siempre me miraban raro en la calle, o en las fiestas, tenía los ventrículos cerebrales perfectamente simétricos y equilibrados. A ellos no les pasaría lo de tener siempre la sensación de no estar en el mundo adecuado, de no encajar, ni saber realmente qué es lo que quieren. No, seguro que la mente de la gente con el cerebro bien compartimentado tiene una circulación de ideas correcta. Por eso no tenían problema para ir al trabajo cada mañana, por eso sonreían a su jefe y hablaban de fútbol con toda normalidad. Claro, así les resultaba fácil, con sus hermosos ventrículos cerebrales perfectamente simétricos. ¡Quien los tuviera!

Todo eso cruzó mi asimétrica cabeza, el tiempo que tardó el médico en verificar el resultado. Lamentablemente la máquina estaba mal calibrada, mis ventrículos eran normales y simplemente yo era el capullo de siempre.

16:23

18.7.18

Midiendo la agencia

Debido a la cercana jam de narraciones interactivas religiosas-mitológicas, se ha estado hablando de la 'agencia' de los relatos interactivos. De su importancia o falta de importancia —en realidad la 'agencia' en casi todas las obras interactivas que ha creado el mundillo en décadas es muy baja—, y de cuánta 'agencia' tienen las obras que son interesantes. ¿Y qué es eso de la 'agencia'?

La definición filosófica como puedes leer en la wikipedia es: "[...] la capacidad que posee un agente (una persona u otra identidad) para actuar en un mundo [...]". Podéis ver que en realidad es un concepto muy abstracto y que para los que no creemos en el 'libre albedrío', pues casi que es cháchara, pero en el contexto de las creaciones interactivas tiene un significado muy concreto: la agencia es la capacidad que tiene el 'interlector' de seleccionar el devenir de la historia. Si estamos hablando una ficción interactiva es evidente que el 'interlector' va a hacer elecciones y que el detalle del discurrir de la historia será diferente en 'extensión', pero si resulta que la historia tiene una estructura como esta:



¿Realmente ha habido alguna capacidad de "actuar sobre el mundo"? Más bien no, de hecho podemos decir que con ese esquema de historia la 'agencia' es de 1: sólo hay un destino final posible hagas lo que hagas. No tienes elección real, no tienes capacidad para modificar el mundo.

Hay un montón de artículos que intentan clasificar 'topologías' de historias, analizando la 'forma' de estos árboles de branching. Por ejemplo este es un artículo interesante sobre el asunto. Y más allá, hay mucha gente intentando escapar de diversas formas de estos modelos de bifurcación y buscando alternativas que dependen del estado del mundo, o de bifurcaciones 'retrasadas', etc... pero este artículo no va a ir de nada de eso.

Este artículo va de algo más 'numérico', ¿podemos medir la agencia? y... ¿podemos evaluar la utilidad de desarrollar una determinada rama o es preferible podarla? Para ello usaremos siempre el mismo ejemplo, que debemos detallar primero. Imaginemos una historia muy corta que tiene esta árbol de escenas:


En esta historia empezamos con la escena I (de inicial) que nos permite escoger entre A y B. A nos permite escoger entre los finales C y D, mientras que la B siempre nos lleva al final E. ¿Cuál es la agencia de esta historia? Una respuesta simple sería 3. Hay tres finales posibles, ¿no? Así que el interlector puede escoger entre 3 destinos diferentes según escoja a lo largo de la historia. Pero eso es una respuesta en realidad demasiado simplificada. Imaginemos que nuestra historia tiene 'tirón' y podemos hacer estadísticas y nos encontramos con que cada final tiene una probabilidad muy diferente, por ejemplo esta:


Seguir diciendo que la agencia de la historia es 3, sería bastante ingenuo ya que la mayor parte de los interlectores 'ven' el mismo destino podríamos inclinarnos por pensar que la agencia es más bien 1; pero eso tampoco es muy 'correcto'. ¿Podemos dar un número más objetivo al número de 'destinos aparentes' de la historia y por lo tanto más cercano a la 'realidad' de su agencia?

Sí, podemos.  Podemos recurrir a la teoría de la información de Shannon, que nos indica que el número de bits mínimo que necesitamos para codificar un símbolo de un sistema de comunicación (¿y no es una historia interactiva un sistema  de comunicación con mensajes potenciales diferentes?) tiene como valor:


Li=log2(1/Pi) = -log2(Pi)

Y que por lo tanto el total de bits que proporcionan todos los símbolos posibles del sistema de comunicación (en nuestro caso los finales) es la suma ponderada de esos bits, o sea:


{\displaystyle H=\sum _{i=0}^{n}-P_{i}\log _{2}P_{i}}

Que no es otra cosa más que la 'entropía' del sistema de comunicación, y en nuestro caso la entropía de nuestra historia. Dado que esa métrica está en número de bits necesarios para saber cuánto es la 'agencia' en 'destinos diferenciables' nos basta con elevar dos a ese número. Daos cuenta que en el caso de que las probabilidades de elección de los diversos finales estuviese perfectamente equilibrada el valor de agencia obtenido coincidiría exactamente con el número de finales posibles.

¿Cuánto valdría la agencia en el caso del ejemplo? Pues:


H = - 0.05 * log2(0.05) - 0.8 * log2(0.8) - 0.15 * log2(0.15)
H =  0.216 + 0.257 + 0.410
H = 0,883

Agencia = 2^H = 1,84

Es decir, en realidad hemos escrito una historia que se percibe como de 'agencia' algo inferior a 2. En esta historia, como es muy simple, sólo con la estadística de los finales escogidos podemos reconstruir cuál a sido la preferencia de elección del interlector en cada nodo.


Con todos los porcentajes de elección a la vista resulta evidente que la elección A --> C no es nada deseada por nuestros interlectores, ¿ha merecido la pena gastar el tiempo en hacerla? Veamos la agencia percibida sin la existencia de C.

% de D sería 85% y el de E 15%
H = -0.85 * log2(0.85) -0.15 * log2(0.15)
H = 0.199 + 0.410
H =0.609 

Agencia = 2 ^ H = 1,5

La diferencia entre poner y no poner C es de 0.3 finales, mientras que el coste se ha incrementado... ¿en cuanto? Suponiendo que cada nodo cuesta lo mismo habríamos incrementado el coste de la historia en un 1/6 para incrementar su valor de agencia en un 0.3/1.84, o sea un 17% de incremento de coste para un 16% de incremento de valor. Aún es un ratio razonable, pero ya bajo (Daos cuenta que si todos los finales fuesen equivalente estaríamos pasando de agencia 2 a 3 y de coste 5 a 6, es decir un 17% de incremento del coste para un incremento de un 33% del valor percibido).

¡Parece que hemos obtenido una herramienta para calcular si merece la pena o no crear un serie de ramas en una ficción interactiva! 

¿O no?

Alguno estará pensando que he usado las estadísticas finales, es decir, lo que de verdad piensan los usuarios sobre nuestra historia y que cuando la estemos creando no hay forma de saber eso. Bueno... el total es difícil, pero podemos hacer una buena estimación, ya que no es tan difícil hacerse una idea de qué podría escoger un interlector enfrentado a cada elección dada. Hagamos el ejercicio hipotético...

La historia empieza en I y el interlector tiene que escoger entre A y B. Pensándolo un poco vemos que es bastante más probable que escoja A, usando los porcentaje podemos usar por ejemplo que el 80% escogerá A y el 20% escogerá B. En B ya no hay más elecciones, pero A hay que escoger entre C y D, y D parece mucho más probable que C. Siendo generosos (ya que creemos en nuestra historia) asignamos un 10% a C. Para calcular los porcentajes de cada final basta con ir multiplicando hacia el origen y sumando cuando se junten ramas, y nos quedan estos valores:




Los porcentajes no son los mismos, pero se parecen y nos dan una buena idea de que los finales están bastante desequilibrado!! De hecho la agencia que nos sale es de:


H = - 0.08 * log2(0.08) - 0.72 * log2(0.72) - 0.20 * log2(0.20)
H =  0.292 + 0.342 + 0.466
H = 1,1


Agencia = 2^H = 2,1

Como veis, incluso con nuestra estimación demasiado generosas con la elección B y la elección C, parece claro que algunas de los finales y ramas están sobrando, y viendo los porcentajes que salen queda claro qué rama/elección es la que sobra.

Este cálculo lo podríais refinar más si en cada punto de decisión tenéis en cuenta cuántos nodos/trabajo hay bajo la decisión que os parece improbable, y recordad que si añadís una rama de 'baja popularidad', excepto que se una mucho más adelante con una de mucha popularidad la probabilidad de los finales que vaya a generar no hará más que bajar y bajar a medida que avance la historia.

Una última anotación: la forma de la función H(p) = -p * log2(p) es la de la gráfica de abajo...




Podéis ver que el máximo de esta función está entre el 0.3 y el 0.4, así que cuando vayáis a bifucar vuestra historia deberías pensaros bien si merece la pena incluir alguna opción que tenga menos del 30% de probabilidad de ser escogida por parte de los interlectores.

Espero que este articulillo lleno de logaritmos os haya resultado ilustrativo y os sea de utilidad a la hora de decidir cuántas y qué elecciones ponéis en vuestras historias.

Nota final sobre el valor de los finales: todo lo que hemos argumentado aquí puede verse significativamente modificado si algunos de los finales aunque sean muy improbables son muy impactantes. Puedes ajustar los cálculos del valor de las ramas añadiéndoles un valor del impacto de tal final improbable, pero ¡cuidado!, piénsate muy bien si quieres realmente gastar tu tiempo en crear un final muy muy chulo pero que muy poca gente vaya a ver, ya que eso, más que parte integrante de la obra, será un 'huevo de pascua'.