14.6.18

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

Si probáis a abrir una tinaja veréis dos cosas: primero que el texto de respuesta es bastante inadecuado, porque no te dice nada de lo que encuentras y además podréis comprobar que si intentas repetidamente 'abrir tinaja' va a intentar abrir la misma tinaja una y otra vez. El comportamiento no se parece en nada al que obtuvimos en la versión Squiffy, ni tampoco a la idea del 'flujo de acción' del relato original (una anciana que va abriendo tinajas y vaciando el contenido con respeto y cuidado en un saco). Necesitamos que la secuencia sea algo parecido a: 'abrir tinaja', 'examinar tinaja', 'vaciar tinaja', 'abrir tinaja', 'vaciar tinaja'... Dado que no hemos 'nombrado' (ni queremos) cada una de las tinajas, podría parecer todo un reto crear un mecanismo de interacción que resulte fácil y al mismo tiempo intuitivo para el interlector; pero no lo es. Sé que alguno estará pensando, "pero, pero... ¿no tenemos que nombrar cada tinaja de una forma diferente para que el interlector pueda decir vacía esa tinaja y luego aquella otra?".

:)

Pues la verdad es que no. La solución tradicional a este problema en un 'juego de aventuras' sería pintar cada tinaja de un color, o hacer que cada tinaja sea de una arcilla diferente, o decir que unas están descascarilladas mientras que otras están agrietadas. A fin de cuentas hay hasta una obra inglesa que usa tal solución como puzle: 69105 keys. En esta obra hay literalmente 69105 llaves pero sólo hay un formato de llave que sólo tiene una copia, ¡encuéntrala si puedes!. En el fondo esta obra lo que contiene es un 'meta puzle', es algo que tiene sentido por el medio que se usa y por la forma en la que se resuelve 'habitualmente' la ambigüedad. Para abrir la puerta de la obra tendrás que escribir algo tan chungo como 'abre la puerta con la llave pequeña de hierro con mango azulado, cabeza ovalada y diente cuadrado'. 

:)

Salvaje. Como puzle. Pero, ¿no sería posible resolver el puzle escribiendo 'simplemente': > probar con una llave, probar con una llave, probar con una llave, probar con una llave.... [69101 veces más]?  Y la obra debería responder con:

> probar con una llave. probar con una llave...
Pruebas con la llave pequeña de hierro con mango azulado, cabeza ovalada y dientes cuadrados. No funciona.
Pruebas con la llave pequeña de hierro con mango azulado, cabeza ovalada y dientes triangularas. No funciona.
Pruebas con la llave pequeña de hierro con mango azulado, cabeza ovalada y dientes redondeados. No funciona.
Pruebas con la llave pequeña de hierro con mango azulado, cabeza rectangular y dientes cuadrados. No funciona.
....
¡Vaya la llave mediana de hueso de dragón con mango dorado, cabeza triangular y dientes redondeados sí que logra abrir la puerta!

Como solución a ese puzle pierde toda la gracia, pero para nuestra obra sí que tendría sentido. Y diría más, para gran parte de las obras de ficción interactiva la distinción usando adjetivos diferenciados es un auténtico dolor para el interlector que tiene que teclear una y otra vez los 'adjetivos' que identifican al objeto concreto con el que quiere interactuar y, sin embargo, la usamos una y otra vez. Va siendo hora que nos liberemos de ella, veamos cómo.

Lo primero es cambiar el mensaje estándar que devolvemos al abrir una tinaja, esto se logra mediante las reglas 'After' de esta forma:

Chapter 5 - Abrir tinaja

After opening tinaja :
 if there is a contenido (called content) in the noun:
  say the description of the content;
  say paragraph break;
 otherwise:
  say "Esta tinaja ya no contiene más que polvo.".

Podéis ver que hemos incluido una respuesta útil para las tinajas que no contengan nada. Esto nos permite subir el número de tinajas por encima del número de contenidos, como a 12 por ejemplo -no nos pasemos o el interlector pensará que se han acabado las tinajas que vaciar y que el resto está vacía. Como ya sabéis para lograr esto basta con subir el número de tinajas y de tapas.

There are twelve tapas.
There are twelve tinajas.

Si probáis la obra ahora veréis, que 'abrir tinaja' insiste en usar una y otra vez la misma tinaja, ¿cómo resolvemos esto? Pues es brutalmente sencillo, incluyamos es única línea extra de código.

Does the player mean opening a tinaja which is open: it is very unlikely.

Ahora le hemos explicado al parser que es muy poco probable que el interlector quiera abrir una tinaja que ya está abierta. Probadlo. Magia negra, ¿eh? Inform 7 tiene cosas realmente maravillosas en su interior. Podemos hacer lo mismo a la hora de examinar tinajas, para que 'ex tinaja' no nos de el mismo resultado una y otra vez.

Chapter 6 - Examinar tinaja

A tinaja can be examined. A tinaja is usually not examined.

Does the player mean examining a tinaja which is examined: it is very unlikely.

After examining or opening a tinaja:
 now the noun is examined.

Fijaos lo fácil que resulta añadir una cualidad nueva a cualquier objeto o clase de objeto, darle un valor inicial y hacer que dicha cualidad cambie tras una acción o varias. Daos cuenta que podría haber puesto el cambio de la propiedad en la anterior sección, ya que ahí hemos definido lo que pasa 'después de abrir una tinaja', pero me ha parecido más fácil de entender si lo ponía aquí y funciona. Inform 7 os permite añadir el código cerca de la sección que determina un comportamiento, y eso en obras grandes es realmente útil. Por supuesto podemos hacer lo mismo con las tapas, de esta forma:

Chapter 7 - Examinar tapa

A tapa can be examined. A tapa is usually not examined.

Does the player mean examining a tapa which is examined: it is very unlikely.

After examining or opening a tapa:
 now the noun is examined.

¡Pero es el mismo código! Mejor hacerlo de forma algo más general:

Chapter 6 - Examinar rotativo

A thing can be examined. A thing is usually not examined.

Does the player mean examining a thing which is examined: it is very unlikely.

After examining or opening a thing:
 now the noun is examined.

Mucho mejor. En Inform 7 si veis la forma de hacer algo de forma general, hacedla de forma general, e incluso os diría que si no veis como hacerlo de forma general pasaos por textualiza o por el caad y preguntadnos. Muy pocas veces implementar el caso concreto en lugar del general sale rentable, y el caso general os dará un rico y, a veces, agradablemente sorprendente resultado cuando interactuéis con la obra por hilos raros de la historia.

Pero seamos un poco críticos. ¿Queremos realmente este comportamiento en el caso de examinar? Está genial para ir examinando tinajas cerradas y ver un poco todo lo que hay, pero si el interlector está haciendo de la anciana que acaba de abrir una tinaja concreta, ¿el comando examina no debería referirse a esa tinaja? Desde luego el comando vaciar debería hacerlo. ¿O tal vez deberíamos tener un comportamiento diferente con las tinajas abiertas o cerradas? ¿O es que deberíamos distinguir entre la propia tinaja abierta y su contenido? Uff... habrá que escoger y no es una elección obvia. Al final tendréis que escoger en vuestras obras una interacción que os parezca la más lógica e intuitiva para el interlector, y eso no es algo que sea independiente de la obra misma.

En la próxima entrega os explicaré cuál ha sido mi decisión a ese respecto y cómo lo he implementado. ¡Por cierto nos olvidamos en la anterior entrega que la anciana también lleva un saco! ¿Sabríais incluirlo? Venga incluidlo vosotros mismos y si no siempre podéis mirar cómo lo he dejado yo aquí.

No hay comentarios: