16.5.18

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

Retomemos el tutorial. En la última entrega teníamos definidas varias tinajas (seis) con sus tapas y sus textos de descripción variables. Pero si lo habéis probado habréis visto un efecto bastante desagradable con el  comando más básico de todos 'examinar'. Si examináis una tinaja todo funciona como esperamos, pero si intentamos 'ex tinajas' nos encontramos con una respuesta muy inadecuada: "No puedes especificar objetos múltiples con ese verbo." Si probáis con otros comandos como coger veréis que sí que acepta múltiples objetos. 

Algunos comandos de Inform 7 simplemente no funcionan por defecto con múltiples objetos, y los que lo hacen generan una lista de respuestas, una por cada objeto con el nombre del objeto delante, y eso tampoco nos viene muy bien.

Siempre hay más de una forma de resolver los problemas cuando trabajas con un parser, por ejemplo se nos puede ocurrir resolver esto interceptando el mensaje de error que está saliendo. Esto se puede hacer incluyendo una regla como esta:
Rule for printing a parser error when the player's command includes "ex tinajas":
    say "Amontonadas unas sobre otras esperan ser rescatadas. 
         [if the number of open tinajas is 1]Hay una tinaja abierta.
         [otherwise if the number of open tinajas is  0]Ninguna está abierta aún.
         [otherwise]Hay [the number of open tinajas in words] abiertas.[end if]". 

Aquí vemos cómo siempre podemos interceptar el comando del jugador tal cual y comprobar su contenido (leer la sección del manual de 'Advanced Text'), también podemos ver que el texto se puede hacer variables con condicionales [if <condición>]...[end if], así como vemos que I7 nos permite calcular números de conjuntos definidos por una propiedad 'the number of open tinajas', e incluso permite que ese número se escriba con palabras 'in words'.

Pero esta no es una manera muy apropiada de resolver esto, ¿no sería posible simplemente indicarle a I7 que examinar soporta una lista de objetos múltiples? Sí, basta con añadirle una nueva regla sintáctica de acción sobre objetos múltiples para examining, de esta forma:
Understand "examina [things]" as examining.

Instead of examining conjunto tinajas:
 say "Amontonadas unas sobre otras esperan ser rescatadas. 
             [if the number of open tinajas is 1]Hay una tinaja abierta.
             [otherwise if the number of open tinajas is  0]Ninguna está abierta aún.
             [otherwise]Hay [the number of open tinajas in words] abiertas.[end if]".  
Esto mismo lo podéis hacer para el resto de los verbos comunes, como romper:

Understand "rompe [things]" as attacking.

Instead of attacking conjunto tinajas:
 say "Tendríamos que ser mucho más respetuosos con 
             los restos de nuestros antepasados. Abrirlas con cuidado.".  
 
Instead of attacking tinaja:
 try attacking conjunto tinajas. 
De paso hemos aprendido cómo se puede redirigir en I7 una acción hacia otra con 'try'.

Seguimos en la siguiente entrega.