1. Instalación y primeros pasos. Creación de objetos y personajes

Inform 7: Empezando a programar
Por Xavi C.

Versión 1.2 - Fecha revisión: 16/01/11

Inform 7 es una potente herramienta de autoría con la que podrás programar tus propios relatos de ficción interactiva y publicarlos on-line. Inform 7 posee un lenguaje de programación parecido al inglés, con el que se pueden crear frases que el programa entiende y ejecuta sin necesidad de grandes alardes en programación. El siguiente tutorial está pensado para alguien que se inicia en la programación de ficción interactiva por primera vez, pero que ya ha jugado previamente a alguno de estos juegos. Todo lo que necesitas lo encontrarás aquí, así que ¡manos a la obra!



Descarga del programa

Material básico: IDE de Inform 7 + Spanish


Para poder escribir nuestros propios relatos interactivos con Inform 7, previamente deberemos instalar el programa junto con las extensiones para la traducción al español. ¡Ojo! La traducción al español es para el motor del juego, no para el IDE; el Spanish solo traduce al español la librería del juego, para que se pueda jugar en español. El IDE de Inform 7 está en inglés, así como su sintaxis de programación, hay que tener esto en cuenta. Para ello debemos ir a la web de Inform 7 y descargar la versión más reciente en la sección de "download":  (la actual, con la que se escribe este tutorial, es la 6G60).

Después de descargar Inform 7, procederemos a descargar las extensiones hispanas para poder empezar a trabajar con él. Vayamos pues al repositorio de INFSP7 (Inform 7 Spanish) y descarguemos la versión más reciente del archivo Spanish.i7x (si no estás muy seguro, fíjate en la fecha del Uploaded) y la Basic Screen Effects SP.i7x. Con esto, ya podemos empezar a programar, pero además nos bajaremos el resto de extensiones y las guardaremos por el momento, más adelante utilizaremos algunas de ellas.

Siempre puedes encontrar material actualizado, además de tutoriales y más información, en el blog oficial de Inform 7 Spanish y en su wiki (una fuente valiosísima para programar de forma ordenada). Date cuenta que en la wiki, al ser comunitaria, todos los programadores y usuarios de Inform 7 podemos colaborar, por ejemplo, en la creación y traducción de extensiones para Inform 7, así como en la publicación de nuestros códigos fuente. No hay una persona al cargo de Inform 7, toda la comunidad de usuarios colabora para mantenerlo al día. Y ahora,  ¡vamos a instalarlo todo correctamente!

Instalación del programa



Tanto si eres de Windows como de Mac, la instalación es bien sencilla. Doble click sobre el archivo que nos acabamos de descargar (por ejemplo, en Mac el I7-6G60-OSX.dmg y en la ventanita que sale a continuación, arrastrar el icono a la carpeta Applications). En Windows, simplemente hay que aceptar. Los que tengan Linux, ya sabrán lo que hacer.


Una vez instalado el programa, lo ejecutamos y nos saldrá una pantalla de bienvenida:


Haremos click en "Start a new project" y creamos un nuevo proyecto, al cual daremos nombre...


...por ejemplo para empezar creamos el proyecto "Prueba".
Nota: En Windows te preguntará dónde guardarlo, por defecto el programa elegirá la carpeta "Mis documentos" del usuario.


Aceptamos y entraremos en el editor, donde vamos a estar la mayor parte del tiempo programando.


Instalación de las extensiones

Observarás que la pantalla se divide en dos mitades: el editor y la ayuda (Source/Contents), y podremos dividirlas a nuestro gusto. La parte derecha de la pantalla aparece repleta de contenidos: son los capítulos de la ayuda, que podrás consultar siempre que quieras a través de la pestaña "Documentation". Pero antes de empezar a teclear, habrá que instalar las extensiones al español. Para ello, ve a File/Install Extension, busca la extensión Spanish.i7x y la Basic Screen Effects SP.i7x que te has descargado previamente, e instálalas.





A continuación haremos una pequeña prueba, para comprobar que todo está instalado correctamente. Escribe este pequeño programa:

Include Spanish by Sebastian Arg.
Include Basic Screen Effects Sp by Emily Short.

Sala is a room. The description is "Esta es la primera sala del juego."

Dale al botón Go! y observa lo que ocurre. A este proceso se le llama compilación, lo que acabamos de hacer es compilar el juego, o sea, comprobar que no hay ningún error de sintaxis y ejecutar lo programado. Fíjate que la pantalla de ayuda ha cambiado y ahora muestra el juego, con el que podemos empezar a probar cosas. Por ejemplo, aunque no hayas programado más que tres líneas de código, la librería de Inform ya trae por defecto numerosas acciones, tales como "cantar", "saltar", "atacar", etc.



Si no te ha salido la anterior pantalla, revisa tu código correctamente y asegúrate de que has instalado las extensiones más recientes.

Errores

¿Y qué pasa si hay un error? Vamos a forzar un error, para que veas lo que sucede. Imaginemos que te equivocas en "room", y que escribes la siguiente línea de código:

Sala is a rom.

Observa que te has dejado una "o" en "room" (hemos puesto rom). Pero no nos hemos dado cuenta, y le damos a compilar. ¡Inform 7 da error! En efecto, nos sale un texto que lo confirma: "Problem. The sentence 'Sala is a rom'   appears to say two things are the same - I am reading 'Sala' and 'rom' as two different things, and therefore it makes no sense to say that one is the other: it would be like saying that 'House is Wilson'. It would be all right if the second thing were the name of a kind, perhaps with properties: for instance 'Princeton Plainsboro is a lighted room' says that something called Princeton Plainsboro exists and that it is a 'room', which is a kind I know about, combined with a property called 'lighted' which I also know about."



El anterior texto dice algo así como "Problema. La sentencia 'Sala is a rom' parece que diga que dos cosas son lo mismo - Yo leo que 'Sala' y 'rom' son dos cosas distintas...". ¡Claro! Porque "rom" no lo entiende, no está en su sintaxis ni tampoco es algo que hayamos programado nosotros. Lo que no te dice Inform 7 en sus informes de error es la solución del mismo, sino que te da la información de porqué hay un error, pero en este caso no nos ha dicho "¡Hey! Parece que quisiste crear una habitación nueva y te equivocaste en una o". La forma correcta sería:

Sala is a room.

Es tarea nuestra descubrir el error, y por eso te recomiendo que compiles tu código contínuamente, para descubrir los errores in situ. No esperes a compilar cuando tengas un código muy largo, porque lo más normal es que tengas varios errores agazapados, y... ¡da más pereza arreglarlos todos a la vez! Todos los informes de errores aparecen en la pestaña "Errors" del IDE, y puedes revisarlos en cualquier momento hasta la próxima compilación. Recuerda que, ante cualquier duda, no estás solo: tienes a toda la comunidad del CAAD a tu disposición para ayudarte con la programación de tu juego; puedes plantear tus dudas dirigiéndote al foro del CAAD dedicado a Inform.
 

Organización de material

Para empezar a programar es necesario tener algún tipo de organización. Ahora que ya sabes cómo compilar y ver la ayuda del programa, querrás empezar a programar tu gran obra maestra, pero para ello se necesita un poco de orden. Para empezar ¿dónde está el juego? ¿dónde guarda Inform nuestro proyecto de prueba? El programa guarda todos los proyectos que inicies en su carpeta de proyectos, en este caso con nombre "prueba.inform" (esto varía si eres de Windows o de Mac). Lo primero es encontrarla y localizar, a su vez, la carpeta de materiales, que se llamará "prueba Materials". Ambas deben ir siempre juntas, pues el programa buscará en la carpeta Materials todos los elementos gráficos y sonoros que pongas y que hagas referencia en tu código.



Siempre es bueno, antes de ponerse a programar, tener un primer boceto del relato, un argumento o guión. La tarea de ponerse delante del ordenador será la última, una vez que hayamos creado previamente sobre el papel nuestro esbozo. Y no es lo mismo escribir un relato lineal, con un principio y un final establecido, que un relato interactivo, con un principio y múltiples finales. Para profundizar en el tema te propongo leer los artículos de Johan Paz sobre "Interactivización": Interactivizar I - II - III - y IV.
Nota: Puedes encontrar más teoría en el SPAC y en la wiki del CAAD.

Una buena carpeta de proyecto debe incluir varias subcarpetas que organicen todo el material. Personalmente, por cada proyecto nuevo, además de la carpeta Materials que por defecto incluye Inform, creo cuatro carpetas nuevas: DOCS (donde pondré el argumento y los demás documentos del juego), LINKS (donde pondré enlaces a temas relacionados con el juego, así como fotos y demás material gráfico y sonoro), OLD (donde pondré las versiones antiguas y todo aquello que aún no esté muy seguro de tirar) y PUBLIC (donde pondré todo aquello que haya hecho público a través de internet, y la última versión del juego). Lógicamente, tu puedes crear tu propio sistema de organización, lo importante es que no pierdas nada y sepas en todo momento cómo está tu proyecto en caso de que lo retomes más adelante. Supongo que tienes ganas de empezar a programar. Ahora sí, ¡empieza el espectáculo!

Primeros pasos

Inform 7 es un sistema de autoría de ficción interactiva bastante potente, y en ocasiones puede parecer muy complicado. Sin embargo, es posible empezar con poco e ir subiendo gradualmente el nivel. Así que empieza con un proyecto corto y no demasiado difícil, ya irás haciendo cosas más complicadas cuando sepas moverte con soltura por el editor del programa. Vamos a crear un programa sencillo, pero que es un clásico en el mundo de la programación, el "Hola, mundo.". Abre un nuevo proyecto (o borra lo que tengas ahora en el editor) y teclea o copia el siguiente código fuente y compílalo:

"Hola mundo" by "nombre"
 
  Mundo is a room.
  When play begins, say "Hola, mundo."

¡Ahí lo tienes! Tu primer programa, solo dice "Hola, mundo." pero es un comienzo. Vayamos a cosas más complicadas. Para empezar, donde pone "nombre" pon tu nombre de autor. ¿Quieres hacerlo más bonito? ¡Por supuesto! Vamos a utilizar las extensiones instaladas, para que tu juego entienda el español y que sepa esperar la pulsación de una tecla. Borra el anterior código y compila el siguiente:

"Hola mundo" by "Xavi"

Include Spanish by Sebastian Arg.
Include Basic Screen Effects Sp by Emily Short.
 
When play begins:
clear the screen;
display the boxed quotation
"Hola, mundo.";
show the current quotation;
wait for any key;

Mundo is a room.


¿A que queda más chulo? Pues puedes hacer tantas cajas de texto como quieras, solo es ir probando. ¿Entiendes el anterior código? Está en inglés, un inglés un tanto especial, pero es bastante más entendible que un código de programación de un lenguaje como Java o C. La orden "When play begins:" quiere decir "Cuando el juego empiece:", "clear the screen;" significa "limpia la pantalla" y "wait for any key;" es "espera a la pulsación de una tecla". Si sabes inglés, evidentemente tienes una ventaja con Inform, si no, bueno... siempre puedes acudir al traductor de Google.
Nota: "When play begins:" es una Rule (una regla), que la ejecutará al inicio del relato, no es propiamente una orden, aunque esto se verá más adelante en el tutorial.

Creación del mundo

Con este pomposo título iniciamos la sección dedicada a crear y conectar las habitaciones y escenarios de nuestro juego. Pongamos por caso que tenemos que crear un mundo en el que hay un bosque, una montaña, una playa y una isla. El jugador debe empezar en el bosque, que está entre la montaña y la playa; la isla será inaccesible por el momento. El jugador será un conquistador español del siglo XIV. ¿Cómo se programa todo esto? Empecemos por el bosque:

Bosque is a room. The description is "Te encuentras en un bosque de enormes árboles."

Con la sentencia "is a room" le estamos diciendo a Inform que el objeto creado es una localidad; con "The description is" le daremos una descripción, cosa que siempre tenemos que hacer para cada objeto. A partir de este ejemplo, crea la isla. ¿Fácil, no? ¡Ahora lo complicamos! Habrá que conectar el bosque con la montaña y la playa, para hacer así un mapa del juego por donde el jugador pueda moverse. Queremos que la montaña esté al norte del bosque, y la playa al sur.

Además se ha de tener especial cuidado en no incluir nombres con acentos o eñes, aunque esto a veces es complicado, por ejemplo en nuestro juego tenemos una montaña, que lleva eñe... por lo que tenemos que llamarla "montana", ¿esto como lo arreglamos? Afortunadamente Inform nos provee de la orden "The printed name of...", gracias a esto podremos llamar a la "montana" montaña, con lo que nos quedaría un código similar al siguiente:


Bosque is a room. The description is "Te encuentras en un bosque de enormes árboles.".

Playa is south of Bosque. The description is "Estás en una larga playa desde la que se divisa una lejana isla. Puedes ver muchas palmeras por aquí.".

Montana is north of Bosque. The printed name of Montana is "Montaña". The description is "Te encuentras en una alta montaña con multitud de piedras. Desde aquí se divisa un bosque y una playa, allá a lo lejos".

Isla is a room. The description is "Has llegado a una exótica isla en mitad de la inmensidad del mar."


Compílalo y muévete por las localidades, comprueba que las conexiones son correctas... no ha sido tan difícil, ¿verdad? Puedes ver cómo va quedando el juego a través de la pestaña Index, y en la pestaña Skein podrás ver un árbol del juego. Comprueba qué pasa cuando haces click en los elementos del Skein y familiarízate con todo ello, te será útil más adelante. Ahora le toca el turno al jugador...

Creación de un personaje jugador

Para empezar, examínate en el juego, para ver tu descripción. Vaya, nuestra descripción es bastante sosa, vamos a crearnos un buen personaje, copia el siguiente código a continuación:


conquistador is a man in the Bosque. The printed name of conquistador is "Hernán Cortés". The description is "Eres un conquistador español del siglo XIV, tu nombre es Hernán Cortés y te encuentras perdido en una tierra desconocida.". The player is conquistador.


Con este código creamos el objeto "conquistador", que el jugador verá como "Hernán Cortés", que está en el bosque y, lo más importante: "The player is conquistador.", o sea, el jugador es el objeto "conquistador".


Añadiendo escenarios a nuestro mundo: scenery


Si todo funciona bien, vamos a poner decorados a este nuevo mundo. Empezaremos por poner algunas palmeras en la playa, varios árboles en el bosque y piedras en la montaña. Comenzamos por los árboles, sitúa el cursor debajo de la descripción de Bosque y copia el código:

Some arboles are here. The printed name of arboles is "árboles". The description is "Los árboles son tan altos que apenas dejan pasar la luz del sol.".

La orden "Some arboles are here" significa que "algunos árboles están aquí" (por eso hay que situar esta orden justo debajo de la localidad bosque). Si quisieramos poner esto en otro sitio tal vez sea mejor poner "Some arboles are in the Bosque". Compruébalo. Compila y examina los árboles, ¡debería funcionar! Pero ahora cógelos... ¡argh! ¿Cómo es posible? ¡Estás cargando con todos los árboles del bosque! Mira tu inventario (teclea "inventario" en el juego). Llevas varios árboles. Eso no puede ser, así que habrá que poner algo que lo impida en nuestro código. Una opción es asignarle la propiedad de escenario a los árboles; otra sería que ante la orden "coger árboles" el juego dijera que no es posible, e incluso se pueden implementar las dos. Borra lo anterior y copia el código siguiente, y compílalo:
Nota: siempre tiene preponderancia la Rule "Instead of...".

Some arboles are in the Bosque. They are scenery. The printed name of arboles is "árboles". The description is "Los árboles son tan altos que apenas dejan pasar la luz del sol.".
Instead of taking the arboles, say "¡No puedes cargar con todos los árboles del bosque! Si quieres madera, tendrás que conseguirla de otra forma.".

¿Has entendido el anterior código? La sentencia "They are scenery" significa que "los árboles son escenario, y por tanto no se pueden coger". La sentencia "Instead of taking the arboles, say..." significa "En lugar de coger los árboles, di lo siguiente...". Prueba el juego con una o con otra, y con las dos opciones.

Después programa de forma similar el resto de decorados del mundo: las piedras, las palmeras... aquí está mi ejemplo para las palmeras:

Some palmeras are in the Playa. They are female and scenery. The description is "La playa está repleta de palmeras, que se inclinan hacia el mar a causa del viento.".
Instead of taking the palmeras, say "¡No puedes cargar con todas las palmeras de la playa! Si quieres madera, vete al bosque.".

Verás que he puesto una propiedad nueva para las palmeras: "female". Esto significa que Inform tratará a este objeto en femenino, ya que por defecto trata a los objetos en masculino.

Interactuando con escenarios

El ejemplo para las piedras es más complicado, puesto que el jugador sí que puede coger una piedra (pero no todas), así que esta es mi propuesta:

Some piedras are in the Montana. They are female and scenery. The description is "Puedes ver numerosas piedras por aquí y por allá.". Understand "piedra" as the piedras.

The piedra is female. The description is "Una piedra con la que podrías hacer mucho daño.".

Instead of taking the piedras:
    move the piedra to player;
    say "Coges una piedra.".


Para empezar, he tenido que crear un sinónimo de piedras: "piedra" (puesto que el jugador puede poner "coge una piedra"; esto se consigue con la orden Understand: "Understand "piedra" as the piedras.", podría poner más sinónimos, separándolos con comas, así:  "Understand "piedra", "roca" and "canto rodado" as the piedras.".
Nota: también podría utilizarse la sentencia "The plural of...", pero se verá mas adelante.

Lo siguiente ha sido crear un nuevo objeto: una piedra cualquiera. La piedra no está en ningún lado, esto es, existe pero no tiene asociada ninguna localidad, así que no le ponemos lo de "in the Montana". Y por último creamos la acción de mover la piedra al jugador cuando quiera coger piedras en la montaña, esto se consigue con la sentencia: "move the piedra to player;" que significa "mueve la piedra al jugador".  Con estas sencillas reglas ya tenemos preparado un pequeño pero eficaz mundo creado. ¡Vamos a poblarlo con criaturas!

Personajes y animales: una serpiente

He pensado en crear dos criaturas en mi mundo: un animal (que nos atacará si intentamos ir a la playa) y un náufrago (que estará en la isla). Para el animal, lo suyo es poner a una serpiente que nos corte el paso, a la cual haremos huir con la ayuda de la piedra de antes, ¡será nuestro primer puzzle!; se llama puzzle a los obstáculos que se encuentra el jugador a su paso. Veamos el código de la serpiente (copia el código y ponlo bajo las sentencias del Bosque):


The serpiente is here. The serpiente is female and an animal. The description is "Una serpiente se aproxima hacia tí desde el sur, con aspecto amenazador...".

Instead of going south in the presence of the serpiente:
    say "Intentas rodear a la serpiente para ir al sur, pero esta se abalanza hacia tí con los colmillos y...";
    end the game in death.
    
Instead of throwing the piedra at the serpiente:
    say "Lanzas la piedra a la serpiente, que retrocede asustada, perdiéndose por entre el follaje del bosque...";
    remove the serpiente from play;
    remove the piedra from play.    


Para empezar, verás que a la serpiente le hemos dado una nueva clase: "animal". Esto es muy útil, puesto que nos ahorra programar un montón de cosas para hacerle entender al juego lo que es un animal. Después hemos puesto un par de rules "Instead of...", la primera hace que si el jugador quiere ir al sur en presencia de la serpiente, este se muera, gracias al "end the game in death."; y la segunda hace que si lanzamos la piedra a la serpiente, esta huya. Observarás que para ello hemos utilizado un par de verbos nuevos: going south y throwing (ir al sur y lanzar, respectivamente); es por eso que decía antes que si sabes algo de inglés lo tendrás más fácil. También verás que para eliminar objetos del juego utilizamos la sentencia "remove... from play" (con esto conseguimos quitar la serpiente y también la piedra, puesto que si la hemos lanzado no tiene sentido que aparezca en nuestro inventario).

Matar al jugador o finalizar la historia

En el anterior código hemos visto como matar al jugador, aunque la fórmula no es la más correcta actualmente, ya que está desaconsejado utilizar "end the game in death" o ""end the game in victory", porque es una forma de acabar un juego que bebe de los antiguos juegos de aventuras, en los que o ganabas o morías. Aunque en el ejemplo se ha utilizado esta forma para que escriba la frase "Estás muerto", existen otras maneras más correctas: se puede utilizar "end the story" (que pondrá "Fin" a la historia) o mejor aún: end the story saying "¡Estás muerto!", con lo que conseguimos el efecto que buscamos. Así pues, el código de la serpiente que nos mata sería así:

Instead of going south in the presence of the serpiente:
    say "Intentas rodear a la serpiente para ir al sur, pero esta se abalanza hacia tí con los colmillos y...";
    end the story saying "¡Estás muerto!".

¿Y si quisiéramos finalizar el juego con un simple Fin? Más sencillo, si por ejemplo queremos finalizar el juego cuando el jugador ponga, por ejemplo,  "despertar" (como si estuviera en un sueño), pondríamos lo siguiente:

Instead of waking up, end the story.

Tienes más información al respecto en el capítulo 9 de la "Documentation" del IDE de Inform 7: 9.4. When play ends, donde se explica más detalladamente como finalizar un juego y porqué es preferible una determinada sintaxis en lugar de otra.

Personajes y animales: un náufrago

La programación de personajes inteligentes (mejor dicho: personajes seudo-inteligentes, llamados normalmente PSI) es mucho más compleja que la de un animal, pero no es imposible. Eso sí, las personas que programes no serán tan inteligentes como desearías, pero sí responderán como tú las programes. Vamos a crear al personaje náufrago de la isla, que será un tipo moribundo al cual tendremos que ayudar. Ve al código y copia el siguiente fragmento bajo la sentencia de la Isla:


naufrago is a man in the Isla. The printed name of naufrago is "náufrago". The description is "Un hombre vestido con arapos está tumbado sobre la arena, moribundo.". Understand "hombre", "arapos", "moribundo" as the naufrago.

Instead of touching naufrago, say "El hombre sigue vivo, tal vez puedas ayudarle dándole un poco de agua.".
Instead of attacking naufrago, say "El hombre no representa ningún peligro.".


Veamos la primera parte del código: "naufrago is a man in the Isla.", con esta sencilla pero poderosa sentencia, creamos un personaje masculino llamado náufrago en la isla. Fácil, ¿no? Si fuera una mujer diríamos "naufrago is a woman", si estuviera en el bosque "naufrago is a man in the Bosque". Así de sencillo, pero la cosa se complica cuando queremos interactuar con el personaje. Por ejemplo, si lo queremos tocar (touching), o atacarle (attacking) deberemos describir lo que sucede; esto en mi código lo he solucionado con las reglas "Instead of...". Puedes crear nuevas, por ejemplo "kissing" (besar), "singing" (cantar) o adaptar el puzzle de la piedra con el náufrago, veamos los dos últimos supuestos:
Nota: en realidad no estamos creando reglas nuevas, sino que estamos modificando el resultado por defecto que asigna Inform 7 a la acciones, para darle nuestro sello creativo.

Instead of singing in the presence of the naufrago, say "El hombre se tapa los oídos y dice: 'Por dios, ¡haz el favor de callarte!'".
    
Instead of throwing the piedra at the naufrago, say "El hombre no representa ningún peligro.".


Antes de ejecutar el juego, ¿sabrás lo que hacen las dos últimas sentencias? En efecto, la primera quiere decir que si el jugador canta en presencia del náufrago, éste le dirá que se calle; la segunda nos dirá que no tenemos porqué lanzar la piedra al mendigo, pues no representa una amenaza.

Probando el juego sin necesidad de jugarlo: irdonde

Bien, ahora ejecuta el juego. ¡Vaya! ¿Cómo podemos probar lo que acabamos de programar, si no podemos llegar a la isla? Inform nos provee de una útil herramienta para acceder a partes del juego que están ocultas, la orden "irdonde" (en inglés "gonear"); si durante el juego ponemos "irdonde isla" el juego nos llevará inmediatamente al primer objeto que se llame isla. Así podremos probar a nuestro náufrago.

Crear una conversación con palabras clave

Una vez que hayamos visto que efectivamente el náufrago esta ahí, vamos a probar a darle algo más de vida, por ejemplo, dándole conversación. Copia el siguiente código:


Instead of telling someone about something, try asking the noun about it. Instead of answering the noun that something, try asking the noun about it.

After asking naufrago about "hola", say "El hombre te observa detenidamente y te pregunta '¿Eres amigo o enemigo?.'".
After asking naufrago about "amigo": say "El hombre sonríe con debilidad y te dice 'Mi nombre es Antonio Velasco y hace dos días arribé a estas costas, tras un naufragio...'";
now the printed name of naufrago is "Antonio".
After asking naufrago about "naufragio", say "'Los piratas nos abordaron y hundieron el barco, creo que soy el único superviviente...'".
After asking naufrago about something, say "El hombre no atiende a lo que dices, prueba con otras palabras".


Esta parte es más complicada, y se ha escrito mucho acerca de cómo programar personajes seudo inteligentes (PSI) y se escribirá mucho en el futuro, pero por el momento esta será nuestra opción para programar las primeras conversaciones. La primera parte del código es un conglomerado de reglas que aplicamos para decir que si el jugador dice o responde lo que sea, pruebe a preguntar lo que sea. Solo se tiene que poner una vez, y es mejor ponerlo al inicio de todo. Esto es muy útil, puesto que en Inform se puede decir, preguntar y responder (algo complicado y que yo tampoco acabo de tener muy claro, puesto que para el jugador es un engorro, así que prefiero simplificarlo).

La sentencia "After asking naufrago about "hola" quiere decir "si el jugador preguntó "hola" haz lo siguiente; y puedes crear tantas palabras como quieras, yo he programado "hola", "amigo"... pero puedes crear más; cuantas más respuestas dé el personaje más útil y realista será para el jugador. Fíjate que para la palabra "amigo" he implementado una pequeña modificación para el náufrago, que al decirnos su nombre pasa a llamarse Antonio: "now the printed name of naufrago is "Antonio"; prueba a hacer algo similar pero para la isla o el bosque, para que nos diga cómo se llaman y cambien su nombre por el que nos diga el náufrago.

A modo de resumen

Vamos a acabar el capítulo aquí, puesto que ya hemos visto muchas cosas. Hemos aprendido a programar localidades, objetos y personajes; por el momento es suficiente para empezar a programar tus pequeñas aventuras. A modo de resumen, destacaré los siguientes puntos:

  • Las localidades se pueden programar con la sentencia "is a room" o poniendo su dirección cardinal "is north of", "is south of", "is west of", "is east of", etc. Por ejemplo: Bosque is a room. Montana is north of Bosque.
  • Una palabra con acento o con eñe se tendrá que programar sin acento ni eñe, pero tendrá que salir correctamente en el juego, por ejemplo: The printed name of Montana is "Montaña".
  • Cualquier objeto que esté en una localidad puede programarse con "here" si está bajo la localidad indicada, o "in..." si está programado en otra localidad; o incluso puede no estar en localidad alguna y aparecer más adelante con "move". Ejemplos: "The serpiente is here." "The serpiente is in the Bosque." "move the serpiente to the Bosque."
  • Para eliminar objetos del juego, utilizaremos la orden "remove". Ejemplo: "remove the serpiente from play."
  • Los objetos son partes del escenario que pueden estar al alcance del jugador o ser decorados. Si son decorados tendrán la propiedad "scenery". Si son femeninos tendrán la propiedad "female". Si son varios, diremos "Some". Por ejemplo: "Some piedras are in the Montana. They are female and scenery.".
  • Una sentencia siempre debe acabar en punto cuando ésta se termine, o en punto y coma si forma parte de un bloque de sentencias. Al inicio de una regla tipo "Instead..." con varias sentencias pondremos dos puntos. Ejemplo:
Instead of throwing the piedra at the serpiente:
    say "Lanzas la piedra a la serpiente, que retrocede asustada, perdiéndose por entre el follaje del bosque...";
    remove the serpiente from play;
    remove the piedra from play.
  • Para terminar la historia, es preferible utilizar "end the story" o "end the story saying...", en lugar del antiguo "end the game in death" o "end the game in victory". Ejemplo:
Instead of going south in the presence of the serpiente:
    say "Intentas rodear a la serpiente para ir al sur, pero esta se abalanza hacia tí con los colmillos y...";
    end the story saying "¡Estás muerto!".
  • El jugador es considerado un objeto más del mundo del juego, y se puede personalizar con la sentencia "The player is...". Ejemplo:
conquistador is a man in the Bosque. The printed name of conquistador is "Hernán Cortés". The description is "Eres un conquistador español del siglo XIV, tu nombre es Hernán Cortés y te encuentras perdido en una tierra desconocida.". The player is conquistador.
  • Hay dos tipos de personajes: animales y personas. Los animales tienen la propiedad "animal", las personas tienen propiedad según su sexo: "man" o "woman". Por ejemplo: "The serpiente is female and an animal." "naufrago is a man in the Isla.".
  • Se pueden modificar acciones por defecto con la regla "Instead of...", entre otras. Ejemplo:
Instead of attacking naufrago, say "El hombre no representa ningún peligro.".
  • Se pueden crear conversaciones simples con las sentencias asking, telling o answering, pero es preferible simplificarlas en una sola con la orden siguiente:
Instead of telling someone about something, try asking the noun about it. Instead of answering the noun that something, try asking the noun about it.
  • Para crear palabras clave que pueden decirse en conversaciones, tendremos que crear una orden "After asking..." para cada una de ellas, por ejemplo:
After asking naufrago about "hola", say "El hombre te observa detenidamente y te pregunta '¿Eres amigo o enemigo?.'".
  • Para ir a lugares remotos en el juego, durante su programación, utilizaremos la orden "irdonde". Por ejemplo: "irdonde isla". Esta sentencia tipo "debug" dejará de estar disponible cuando se distribuya tu juego, solo tiene efecto durante la programación del mismo.

En el siguiente capítulo

Aprenderemos a manejar objetos y a crear nuevos puzzles, entre otras cosas, estate atento a ésta página y no dudes en plantear tus preguntas en el foro del CAAD o escribiéndome directamente. Mientras tanto, sigue programando el mundo del juego y atrévete a ampliar el vocabulario del náufrago.  También puedes ayudarme, ¿cómo crees que nuestro personaje puede llegar a la isla? Si se te ocurre alguna idea, intenta programarla o exponerla para ver si es posible llevarla a cabo. Y de momento eso es todo, ¡hasta el capítulo que viene!


Comments