13.6.18

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

Vamos a redondear algunas cosillas básicas antes de meternos con lo que queda de narrativa principal -nos queda el bucle de ir abriendo vasijas hasta que encontramos al sacerdote, apagamos la linterna que se cae en la oscuridad, miedo, etc...

Ya teníamos una lámpara, un entorno oscuro y ya se podía encender y apagar la lámpara, pero la verdad es que lo hemos simulado todo de una forma muy superficial. Para encender fuego es necesario un yesquero que normalmente está compuesto por algo 'metálico', un pedernal que produce chispas al chocarlo con el metal y algo de yesca o que prenda con facilidad. Todo eso estaba en el relato original y en la versión de Squiffy, así que deberíamos incluirlo en el inventario inicial de la protagonista. No es muy difícil ver como sería:

Section 5 - Objetos para encender la lámpara

A piedra de chispa (f) is a thing carried by the player.
The description of piedra chispa is "Gris oscura con vetas casi blancas. De bordes duros, cortantes, 
fácil de afilar. Los hombres del sur las usaban para crear sus armas en tiempos remotos. Es la que 
crea el fuego cuando se la golpea contra la piedra del sol, como si la piedra del sol le prestase 
el calor.".

A piedra de sol (f) is a thing carried by the player.
The description of piedra sol is "Dorada sin ser oro.  Dicen que cayeron del sol en el lejano norte.".

A yesca (f) is a thing carried by the player.  The indefinite article of yesca is "algo de".
Understand "algo de yesca" or "poco de" as yesca.
The description of yesca is "Hilos de sus mejores vestidos viejos, mezclado con hongo de árbol seco. 
Recibe la semilla del fuego y crea la llama.".

Algo interesante que podemos ver en se código es cómo tratar incontables (algo de yesca, un montón de harina, un poco de agua...). La parte importante es que es muy incorrecto que se refieran a ellos como 'un/una' algo al describirlo, por eso le decimos al compilador que su artículo indefinido es otro diferente: "algo de".

Con esos tres objetos creados ya podemos enriquecer la regla del encendido requiriendo los tres objetos para poder encender la lámpara. Una primera aproximación sería:

Instead of switching on the lampara when lampara is carried and piedra de chispa is carried 
      and piedra de sol is carried and yesca is carried:
 say "Con dificultad tus viejos dedos entre chocan las dos piedras para hacer una pequeña 
             llama en la yesca con la que  enciendes la lámpara.";
 now the lampara is lit.
 
Instead of switching on the lampara:
 say "Necesitas la piedra de sol y la piedra de chispa, así como algo de yesca para enceder 
             la lámpara.";
 stop the action.

Aquí podemos ver en funcionamiento la magia de las reglas que se ejecutan según orden de 'especificidad'. La primera regla requiere que se cumpla una condición así que se ejecutará primero, la segunda, sin embargo, se considerará después. Si lo probáis veréis que funciona estupendamente y en esta clase de cosas está la magia y dificultad de I7. El que las reglas tengan prioridad según como de concretas sean es lo que nos permite separar nuestro código en pequeños fragmentos manejables, distribuidos incluso entre extensiones y que todo funcione.

Pero la verdad es que nuestra aproximación es un poco horrible con todos esos 'and' tras el 'when', habría que organizar esto un poco mejor. Para empezar encapsulemos esas condiciones en una sola de esta forma:

To decide if the player can lit a fire:
 if piedra de chispa is carried and piedra de sol is carried and yesca is carried:
  yes;
 otherwise:
  no.

Instead of switching on the lampara when the player can lit a fire and lampara is carried:
 say "Con dificultad tus viejos dedos entre chocan las dos piedras para hacer una 
             pequeña llama en la yesca con la que  enciendes la lámpara.";
 now the lampara is lit.

Con lo que hemos aprendido como 'definir nuevas condiciones' en I7 usando 'To decide if'. Este procedimiento permite utilizar parámetros de esta forma:

To decide if (actor - a person) can lit a fire:
 if piedra de chispa is carried by actor and piedra de sol is carried by actor and yesca is carried by actor:
  yes;
 otherwise:
  no.

No está mal y para esta historia es más que suficiente, pero ya que nos hemos puesto a generalizar, ¿podríamos cambiar el código para que cualquier cosa que se pueda encender con fuego pueda ser encendido por cualquier PNJ además del interlector? ¡Sí! Tenéis que definir adecuadamente las cualidades de esos objetos o la 'clase' a la que pertenecen... y os lo voy a dejar como ejercicio.

Hablando de la protagonista. Inform 7 permite examinarte a tí mismo con comandos como 'examináme' ó 'exme' y la respuesta por defecto no puede ser más inadecuada para una anciana, ¡probadlo! (hay que probar todo lo que se os vaya ocurriendo). ¿Cómo se cambia esto? Es fácil el jugador no es diferente a cualquier otro objeto de la obra así que:

Chapter 4 - El interlector

The description of the player is "Los años han hecho mella en tí, pero aún mantienes cierta compostura.".

Y vamos a dejarlo aquí por hoy. El estado actual de la obra podéis descargarla aquí.


No hay comentarios: