tutorial de inform 7 sp

Upload: idiopathos

Post on 08-Jul-2015

154 views

Category:

Documents


0 download

DESCRIPTION

Tutorial de Inform 7 en español¿Cómo programar relatos interactivos?https://sites.google.com/site/inform7sp/

TRANSCRIPT

1. Instalacin y primeros pasos. Creacin de objetos y personajesInform PorVersin

7:1.2

Empezando XaviFecha

arevisin:

programar C.16/01/11

Inform 7 es una potente herramienta de autora con la que podrs programar tus propios relatos de ficcin interactiva y publicarlos on-line. Inform 7 posee un lenguaje de programacin parecido al ingls, con el que se pueden crear frases que el programa entiende y ejecuta sin necesidad de grandes alardes en programacin. El siguiente tutorial est pensado para alguien que se inicia en la programacin de ficcin interactiva por primera vez, pero que ya ha jugado previamente a alguno de estos juegos. Todo lo que necesitas lo encontrars aqu, as que manos a la obra! Contenidos1.

2.

1 Descarga del programa 1. 1.1 Material bsico: IDE de Inform 7 + Spanish 2 Instalacin del programa 1. 2.1 Instalacin de las extensiones

2.2 Errores 3. 2.3 Organizacin de material 3. 3 Primeros pasos 4. 4 Creacin del mundo 5. 5 Creacin de un personaje jugador 6. 6 Aadiendo escenarios a nuestro mundo: scenery 1. 6.1 Interactuando con escenarios 7. 7 Personajes y animales: una serpiente 1. 7.1 Matar al jugador o finalizar la historia 8. 8 Personajes y animales: un nufrago 9. 9 Probando el juego sin necesidad de jugarlo: irdonde 10. 10 Crear una conversacin con palabras clave 11. 11 A modo de resumen 1. 11.1 En el siguiente captulo2.

Descarga del programa Material bsico: 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 traduccin al espaol. Ojo! La traduccin al espaol es para el motor del juego, no para el IDE; el Spanish solo traduce al espaol la librera del juego, para que se pueda jugar en espaol. El IDE de Inform 7 est en ingls, as como su sintaxis de programacin, hay que tener esto en cuenta. Para ello debemos ir a la web de Inform 7 y descargar la versin ms reciente en la seccin de "download ": (la actual, con la que se escribe este tutorial, es la 6G60 ).

Despus 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 versin ms reciente del archivo Spanish.i7x (si no ests muy seguro, fjate en la fecha del Uploaded) y la Basic Screen Effects SP.i7x. Con esto, ya podemos empezar a programar, pero adems nos bajaremos el resto de extensiones y las guardaremos por el momento, ms adelante utilizaremos algunas de ellas. Siempre puedes encontrar material actualizado, adems de tutoriales y ms informacin, en el blog oficial de Inform 7 Spanish y en su wiki (una fuente valiossima 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 creacin y traduccin de extensiones para Inform 7, as como en la publicacin de nuestros cdigos fuente. No hay una persona al cargo de Inform 7, toda la comunidad de usuarios colabora para mantenerlo al da. Y ahora, vamos a instalarlo todo correctamente!

Instalacin del programa

Tanto si eres de Windows como de Mac, la instalacin es bien sencilla. Doble click sobre el archivo que nos acabamos de descargar (por ejemplo, en Mac el I7-6G60OSX.dmg y en la ventanita que sale a continuacin, arrastrar el icono a la carpeta Applications). En Windows, simplemente hay que aceptar. Los que tengan Linux, ya sabrn 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 dnde 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.

Instalacin de las extensiones Observars 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 captulos de la ayuda, que podrs consultar siempre que quieras a travs de la pestaa "Documentation". Pero antes de empezar a teclear, habr que instalar las extensiones al espaol. Para ello, ve a File/Install Extension, busca la extensin Spanish.i7x y la Basic Screen Effects SP.i7x que te has descargado previamente, e instlalas.

A continuacin haremos una pequea prueba, para comprobar que todo est instalado correctamente. Escribe este pequeo 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 botn Go! y observa lo que ocurre. A este proceso se le llama compilacin, lo que acabamos de hacer es compilar el juego, o sea, comprobar que no hay ningn error de sintaxis y ejecutar lo programado. Fjate 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 ms que tres lneas de cdigo, la librera de Inform ya trae por defecto

numerosas acciones, "atacar", etc.

tales

como

"cantar",

"saltar",

Si no te ha salido la anterior pantalla, revisa tu cdigo correctamente y asegrate de que has instalado las extensiones ms 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 lnea de cdigo: 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 solucin del mismo, sino que te da la informacin de porqu hay un error, pero en este caso no nos ha dicho "Hey! Parece que quisiste crear una habitacin nueva y te equivocaste en una o". La forma correcta sera: Sala is a room. Es tarea nuestra descubrir el error, y por eso te recomiendo que compiles tu cdigo contnuamente, para descubrir los errores in situ. No esperes a compilar cuando tengas un cdigo muy largo, porque lo ms

normal es que tengas varios errores agazapados, y... da ms pereza arreglarlos todos a la vez! Todos los informes de errores aparecen en la pestaa "Errors" del IDE, y puedes revisarlos en cualquier momento hasta la prxima compilacin. Recuerda que, ante cualquier duda, no ests solo: tienes a toda la comunidad del CAAD a tu disposicin para ayudarte con la programacin de tu juego; puedes plantear tus dudas dirigindote al foro del CAAD dedicado a Inform . Organizacin de material Para empezar a programar es necesario tener algn tipo de organizacin. Ahora que ya sabes cmo compilar y ver la ayuda del programa, querrs empezar a programar tu gran obra maestra, pero para ello se necesita un poco de orden. Para empezar dnde est el juego? dnde 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 vara 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 grficos y sonoros que pongas y que hagas referencia en tu cdigo.

Siempre es bueno, antes de ponerse a programar, tener un primer boceto del relato, un argumento o guin. 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 mltiples finales. Para profundizar en el tema te propongo leer los artculos de Johan Paz sobre "Interactivizacin": Interactivizar I - II III y IV .Nota: Puedes encontrar ms teora 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, adems de la carpeta Materials que por defecto incluye Inform, creo cuatro carpetas nuevas: DOCS (donde pondr el argumento y los dems documentos del juego), LINKS (donde pondr enlaces a temas relacionados con el juego, as como fotos y dems material grfico y sonoro), OLD (donde pondr las versiones antiguas y todo aquello que an no est muy seguro de tirar) y PUBLIC (donde pondr todo aquello que haya hecho pblico a travs de internet, y la ltima versin del juego). Lgicamente, tu puedes crear tu propio sistema de organizacin, lo importante es que no pierdas nada y sepas en todo momento cmo est tu proyecto en caso de que lo retomes ms adelante. Supongo que tienes ganas de empezar a programar. Ahora s, empieza el espectculo! Primeros pasos Inform 7 es un sistema de autora de ficcin 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 difcil, ya irs haciendo cosas ms complicadas cuando sepas moverte con soltura por el editor del programa. Vamos a crear un programa sencillo, pero que es un clsico en el mundo de la programacin, el "Hola, mundo.". Abre un nuevo proyecto (o borra lo que tengas ahora en el editor) y teclea o copia el siguiente cdigo fuente y complalo: "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 ms complicadas. Para empezar, donde pone "nombre" pon tu nombre de autor. Quieres hacerlo ms bonito? Por supuesto! Vamos a utilizar las extensiones instaladas, para que tu juego entienda el espaol y que sepa esperar la pulsacin de una tecla. Borra el anterior cdigo 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 ms chulo? Pues puedes hacer tantas cajas de texto como quieras, solo es ir probando. Entiendes el anterior cdigo? Est en ingls, un ingls un tanto especial, pero es bastante ms entendible que un cdigo de programacin 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 pulsacin de una tecla". Si sabes ingls, 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 ms adelante en el tutorial.

Creacin del mundo Con este pomposo ttulo iniciamos la seccin 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 montaa, una playa y una isla. El jugador debe empezar en el bosque, que est entre la montaa y la playa; la isla ser inaccesible por el momento. El jugador ser un conquistador espaol del siglo XIV. Cmo 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 descripcin, cosa que siempre tenemos que hacer para cada objeto. A partir de este ejemplo, crea la isla. Fcil, no? Ahora lo complicamos! Habr que conectar el bosque con la montaa y la playa, para hacer as un mapa del juego por donde el jugador pueda moverse. Queremos que la montaa est al norte del bosque, y la playa al sur. Adems se ha de tener especial cuidado en no incluir nombres con acentos o ees, aunque esto a veces es complicado, por ejemplo en nuestro juego tenemos una montaa, que lleva ee... 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" montaa, con lo que nos quedara un cdigo 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 "Ests 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 "Montaa". The description is "Te encuentras en una alta montaa 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 extica isla en mitad de la inmensidad del mar."

Complalo y muvete por las localidades, comprueba que las conexiones son correctas... no ha sido tan difcil, verdad? Puedes ver cmo va quedando el juego a travs de la pestaa Index, y en la pestaa Skein podrs ver un rbol del juego. Comprueba qu pasa cuando haces click en los elementos del Skein y familiarzate con todo ello, te ser til ms adelante. Ahora le toca el turno al jugador... Creacin de un personaje jugador Para empezar, examnate en el juego, para ver tu descripcin. Vaya, nuestra descripcin es bastante sosa, vamos a crearnos un buen personaje, copia el siguiente cdigo a continuacin: conquistador is a man in the Bosque. The printed name of conquistador is "Hernn Corts". The description is "Eres un conquistador espaol del siglo XIV, tu nombre es Hernn Corts y te encuentras perdido en una tierra desconocida.". The player is conquistador.

Con este cdigo creamos el objeto "conquistador", que el jugador ver como "Hernn Corts", que est en el bosque y, lo ms importante: "The player is conquistador.", o sea, el jugador es el objeto "conquistador".

Aadiendo 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 montaa. Comenzamos por los rboles, sita el cursor debajo de la descripcin de Bosque y copia el cdigo: 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 estn 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". Comprubalo. Compila y examina los rboles, debera funcionar! Pero ahora cgelos... argh! Cmo es posible? Ests 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 cdigo. Una opcin es asignarle la propiedad de escenario a los rboles; otra sera 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 cdigo siguiente, y complalo: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, tendrs que

conseguirla de otra forma.". Has entendido el anterior cdigo? 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. Despus 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.". Vers 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 ms 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 podras hacer mucho dao.". Instead of taking the piedras: move the piedra to player; say "Coges una piedra.".

Para empezar, he tenido que crear un sinnimo de piedras: "piedra" (puesto que el jugador puede poner "coge una piedra"; esto se consigue con la orden Understand: "Understand "piedra" as the piedras.", podra poner ms sinnimos, separndolos con comas, as: "Understand "piedra", "roca" and "canto rodado" as the piedras.".Nota: tambin podra 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 ningn 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 accin de mover la piedra al jugador cuando quiera coger piedras en la montaa, 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 pequeo 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 nufrago (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 obstculos que se encuentra el jugador a su paso. Veamos el cdigo de la serpiente (copia el cdigo 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, perdindose por entre el follaje del bosque..."; remove the serpiente from play; remove the piedra from play.

Para empezar, vers que a la serpiente le hemos dado una nueva clase: "animal". Esto es muy til, puesto que nos ahorra programar un montn de cosas para hacerle entender al juego lo que es un animal. Despus 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. Observars que para ello hemos utilizado un par de verbos nuevos: going south y throwing (ir al sur y lanzar, respectivamente); es por eso que deca antes que si sabes algo de ingls lo tendrs ms fcil. Tambin vers que para eliminar objetos del juego utilizamos la sentencia "remove... from play" (con esto conseguimos quitar la serpiente y tambin la piedra, puesto que si la hemos lanzado no tiene sentido que aparezca en nuestro inventario).

Matar al jugador o finalizar la historiaEn el anterior cdigo hemos visto como matar al jugador, aunque la frmula no es la ms 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 moras. Aunque en el ejemplo se ha utilizado esta forma para que escriba la frase "Ests muerto", existen otras maneras ms correctas: se puede utilizar "end the story" (que pondr "Fin" a la historia) o mejor an: end the story saying "Ests muerto!", con

As pues, el cdigo de la serpiente que nos mata sera as:lo que conseguimos el efecto que buscamos.

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 "Ests muerto!". Y si quisiramos finalizar el juego con un simple Fin? Ms sencillo, si por ejemplo queremos finalizar el juego cuando el jugador ponga, por ejemplo, "despertar" (como si estuviera en un sueo), pondramos lo siguiente: Instead of waking up, end the story. Tienes ms informacin al respecto en el captulo 9 de la "Documentation" del IDE de Inform 7: 9.4. When play ends, donde se explica ms detalladamente como finalizar un juego y porqu es preferible una determinada sintaxis en lugar de otra. Personajes y animales: un nufrago La programacin de personajes inteligentes (mejor dicho: personajes seudo-inteligentes, llamados normalmente PSI) es mucho ms compleja que la de un animal, pero no es imposible. Eso s, las personas que programes no sern tan inteligentes como desearas, pero s respondern como t las programes. Vamos a crear al personaje nufrago de la isla, que ser un tipo moribundo al cual tendremos que ayudar. Ve al cdigo y copia el siguiente fragmento bajo la sentencia de la Isla: naufrago is a man in the Isla. The printed name of naufrago is "nufrago". 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 dndole un poco de agua.". Instead of attacking naufrago, say "El hombre no representa ningn peligro.".

Veamos la primera parte del cdigo: "naufrago is a man in the Isla.", con esta sencilla pero poderosa sentencia, creamos un personaje masculino llamado nufrago en la isla. Fcil, no? Si fuera una mujer diramos "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 cdigo 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 nufrago, 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 odos y dice: 'Por dios, haz el favor de callarte!'".

Instead of throwing the piedra at the naufrago, say "El hombre no representa ningn peligro.".

Antes de ejecutar el juego, sabrs lo que hacen las dos ltimas sentencias? En efecto, la primera quiere decir que si el jugador canta en presencia del nufrago, 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! Cmo 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 estn ocultas, la orden "irdonde" (en ingls "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 nufrago. Crear una conversacin con palabras clave Una vez que hayamos visto que efectivamente el nufrago esta ah, vamos a probar a darle algo ms de vida, por ejemplo, dndole conversacin. Copia el siguiente cdigo: 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 sonre con debilidad y te dice 'Mi nombre es Antonio Velasco y hace dos das 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 ms complicada, y se ha escrito mucho acerca de cmo programar personajes seudo inteligentes (PSI) y se escribir mucho en el futuro, pero por el momento esta ser nuestra opcin para programar las primeras conversaciones. La primera parte del cdigo 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 ms; cuantas ms respuestas d el personaje ms til y realista ser para el jugador. Fjate que para la palabra "amigo" he implementado una pequea modificacin para el nufrago, 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 cmo se llaman y cambien su nombre por el que nos diga el nufrago.

A modo de resumen Vamos a acabar el captulo 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 pequeas aventuras. A modo de resumen, destacar los siguientes puntos:

Las localidades se pueden programar con la sentencia "is a room" o poniendo su direccin 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 ee se tendr que programar sin acento ni ee, pero tendr que salir correctamente en el juego, por ejemplo: The printed name of Montana is "Montaa". 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 ms 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 tendrn la propiedad "scenery". Si son femeninos tendrn 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, perdindose 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 "Ests muerto!".

El jugador es considerado un objeto ms del mundo del juego, y se puede personalizar con la sentencia "The player is...". Ejemplo: is a man in the Bosque. The of conquistador is "Hernn description is "Eres un espaol del siglo XIV, tu

conquistador printed name Corts". The conquistador

nombre es Hernn Corts 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 segn 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 ningn 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

programacin, 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 programacin del mismo. En el siguiente captulo Aprenderemos a manejar objetos y a crear nuevos puzzles, entre otras cosas, estate atento a sta pgina y no dudes en plantear tus preguntas en el foro del CAAD o escribindome directamente. Mientras tanto, sigue programando el mundo del juego y atrvete a ampliar el vocabulario del nufrago. Tambin puedes ayudarme, cmo 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 captulo que viene!

2. Vocabulario, aleatoriedad, contenedores y cerrojosInform PorVersin

7:

Empezando1.2

a programar XaviRevisin

-

captulo

II C.

16/01/11

En el anterior captulo de este tutorial de programacin en Inform 7 aprendimos a instalar el programa; tambin vimos cmo crear las primeras localidades de nuestro mundo de juego, adems de llenarlo de objetos y decorados y poblarlo con un par de criaturas. En esta ocasin veremos ms propiedades de objetos y aprenderemos a crear objetos con cerrojo. Tambin aprenderemos a crear verbos nuevos y a ampliar el vocabulario del juego, y adems utilizaremos condiciones y sucesos aleatorios para controlar lo que le pasa al jugador. Vamos all! Contenidos1. 2.

3. 4.

5.

6.

1 Cmo crear buenos puzzles 2 Extendiendo el vocabulario 1. 2.1 Verbos nuevos que requieren objetos 2. 2.2 Verbos que no hacen ninguna accin 3 Programando la primera vez: the first time 4 Cambiar de lugar al jugador 1. 4.1 Estilos de texto 5 Sucesos aleatorios 1. 5.1 Advertir al jugador de un peligro 6 Condiciones: aprender a utilizar if, then, else y otherwise

7.

6.1 Objetos contenedores 2. 6.2 Llaves y candados: objetos con cerrojo 7 En el siguiente captulo1.

Cmo crear buenos puzzlesCualquier relato interactivo debe contener algn tipo de puzzle, sea este sencillo o complicado. En la jerga habitual se le llama puzzle a cualquier obstculo que impida avanzar normalmente en el relato, cosa que es muy importante porque dota de interactividad al texto. De otra forma, estaramos ante un texto lineal, cuando nuestro objetivo es que el jugador haga y piense cosas para ver ms cosas de nuestro relato. Antao los relatos interactivos eran llamados comercialmente como aventuras conversacionales, y muchas de ellas son demasiado difciles para los estndares actuales (algo que entusiasma a los ms veteranos del gnero). La compaa ms famosa que comercializ el gnero de las aventuras conversacionales fue Aventuras AD, y muchos de sus ttulos son increblemente difciles, como por ejemplo en el juego del Jabato, que en su inicio debemos salir de una celda donde apenas se nos dan pistas sobre cmo conseguir salir; o en su triloga de Cozumel, con puzzles de extrema dificultad. Pero la realidad es que no hace falta idear complicadsimos puzzles y laberintos para ponerle las cosas difciles al jugador, lo que de verdad importa es que los puzzles sean lgicos. Adems se le deben dar pistas al jugador, para que tenga elementos con los que

pensar su prximo movimiento, no queremos que deambule de aqu para all sin saber qu hacer. Tambin es importante ser honesto con el jugador. En los juegos antiguos sucedan este tipo de situaciones "deshonestas" especialmente injustas cuando, por ejemplo, el jugador mora al cruzar una puerta porque no saba que tras ella haba un peligro... algo que poda haberse arreglado poniendo en la descripcin "una lbrega puerta parece albergar un terrible mal" o similar, con lo que el jugador ya est advertido del peligro. As pues, mi consejo es ser honesto y justo con el jugador, ayudndole en lo posible... pero sin llegar a ofrecerle la solucin!

Extendiendo el vocabularioPero pasemos de la teora a la prctica y fijmonos en nuestro juego. En el captulo anterior habamos programado una playa y una isla, pero no habamos creado una conexin entre ellas. Vamos a programar la opcin ms sencilla, que consiste en que el jugador tenga que ir a nado entre una y otra. Si vamos al juego, observaremos con perplejidad que el vocabulario de Inform no contempla el verbo "nadar", algo incomprensible teniendo en cuenta que otros verbos, como "columpiarse", s que estn contemplados. Tal vez sera mejor decir "acciones" en lugar de "verbos", pues lo anterior son acciones que el jugador puede intentar hacer. En fin, misterios de Inform. No hay problema, podemos definir nuevas acciones siempre que los necesitemos, as pues vamos a crear la accin "nadar" (copia y pega el cdigo siguiente al final de todo):

nadaring is an action applying to nothing. understand "nada" and "bucea" as nadaring. report nadaring: say "No hay suficiente agua aqu, dnde he de nadar?" instead. Aunque suene raro, como Inform est en este seudoingls, tenemos que crear el verbo nadaring (si te suena horriblemente raro, puedes sustituirlo por swimming o lo que te parezca, pero que acabe en ing). Con la sentencia "is an action applying to nothing" le damos a entender que el jugador puede poner simplemente "nadar", sin que tenga que referirse a nada ms. Con "report nadaring" le decimos a Inform "el resultado ser el siguiente", que es la frase que dice que no hay agua, seguida por un "instead"... seguro? Te explicar algo ms acerca de las acciones, pues aunque es correcto poner "instead", no lo es tanto tras un "report". Inform deja que pase el flujo del procesamiento de la accin con el siguiente orden: primero buscar la Rule, despus la Check, luego la Carry out, luego la After y finalmente la Report (no te preocupes si no entiendes toda la jerga, ya la irs viendo a medida que avancemos). Como ves, Report es la ltima, y por lo tanto no hace falta poner el Instead, pero s que sera necesario en la Check para detener la accin ah, por ejemplo: Check nadaring en something: say "No puedo nadar en [the noun], mejor ser nadar en el mar..." instead. Para acabar de entenderlo haz la prueba, copia el

siguiente cdigo: Check nadaring: say "No hay suficiente agua aqu, dnde he de nadar?". report nadaring: say "Aqu acaba la accin". Complalo. Ves que salen las dos frases tras poner "nadar". Ahora, vamos a hacer lo mismo pero con "instead" tras el check: Check nadaring: say "No hay suficiente agua aqu, dnde he de nadar?" instead. report nadaring: say "Aqu acaba la accin". Como ves, ahora ya no sale la frase "Aqu acaba la accin", porque el "instead" ha cortado el flujo de procesamiento de la accin del que te habl antes. Tenlo en cuenta al crear nuevas acciones, as pues sera ms correcto poner: report nadaring: say "No hay suficiente agua aqu, dnde he de nadar?". Porque tras el report no se procesa ms la accin, al ser la ltima de las reglas de procesamiento de acciones. Normalmente se utiliza "report" cuando creamos acciones que no hacen nada, ya que solamente pondremos un mensaje en dichas acciones, pero no tendrn ms

repercusin en el juego.

Nota: Puedes encontrar ms informacin sobre las acciones y cmo las procesa Inform en los captulos 12.7. New actions, en 12.9. Check, carry out, report, en 12.12. Check rules for actions by other people y en 12.13. Report rules for actions by other people. Recomiendo su lectura para acabar de comprender cmo ejecuta Inform las acciones y poder hacer las nuestras de forma correcta.

Verbos nuevos que requieren objetos Bien, pero y si el jugador pone: "nadar hacia la isla"? Hay que contemplarlo todo! El cdigo es ms difcil, pero lo entenders, cpialo a continuacin del anterior (pero no borres el anterior, pues nos servir igualmente): nadaring en is an action applying to one thing. understand "nada [something]", "nada a [something]", "nada en [something]", "nada hacia [something]", "nadia hacia la [something]", "bucea [something]", "bucea a [something]", "bucea hacia [something]" and "bucea hacia la [something]" as nadaring en. report nadaring en something: say "No puedo nadar en [the noun], mejor ser nadar en el mar...".

Como ves, ahora le decimos que "is an action applying to one thing", con lo que el jugador ya puede nadar hacia donde quiera. Tambin se han de escribir las otras posibles salidas, como la de bucear, nadar en, nadar a, etc. Observa que el verbo es "nadaring en", para nadar en algn lado, sino utilizaramos el "nadaring" solo. El "something" entre corchetes es el objeto sobre el cual se intentar nadar (que en la jerga de Inform 7 se llama token), y el "report" esta

vez indica al objeto con "the noun", que en el juego se ver reemplazado por el nombre del objeto en cuestin ("the noun" sera otro token). Prueba por ejemplo a "nadar en serpiente". El resultado es un poco esperpntico, pero es un comienzo.Nota: Si te vas a la pestaa Index y consultas la List of named values vers la lista de tokens disponibles a los que puedes hacer referencia en el cdigo.

Verbos que no hacen ninguna accin Fjate en que puedes crear todos los verbos que quieras, siempre que no estn ya en la librera por defecto de Inform (se pueden modificar si se desea). Vamos a crear un verbo que no va a hacer nada en el juego, pero que el jugador puede intentar hacer... rezar! Copia el cdigo a continuacin: rezaring is an action applying to nothing. understand "reza" as rezaring. report rezaring: say "Quiera Dios que mis plegarias sean escuchadas!".

Este era ms sencillo, pero no por ello menos vistoso que el anterior, puesto que al jugador le gusta comprobar que todo lo que l ha pensado lo ha tenido en cuenta el programador. Como siempre, si te chirra ese "rezaring", puedes optar por escribirlo en ingls "praying"; esto es algo a lo que hay que acostumbrarse en Inform, aunque despus de todo el jugador no tiene porqu saber cmo se ha programado todo esto.

Programando la primera vez: the first timeContinuando con lo anterior, podemos hacer que la primera vez que el jugador reza diga una plegaria de verdad, y en las siguientes diga eso de que ojal sea escuchada, vamos a verlo: Instead of rezaring for the first time, say "Alzas tus brazos al cielo y suplicas al altsimo: 'Padre nuestro, que ests en el cielo, santificado sea tu Nombre; venga a nosotros tu reino...'".

As tiene ms sentido y el resultado es ms redondo. Nunca dejes de poner cosas as en tu juego, pues el jugador siempre puede intentar hacer cosas inverosmiles y probar de todo cuando se encuentra atascado en el juego. Observa que he puesto "for the first time" que significa "por primera vez", esto es, puedes programar una segunda, tercera y las veces que quieras, cambiando "first" por "second", "third", etc.

Cambiar de lugar al jugadorAhora que ya sabemos cmo nadar, habr que programar un mar por el cual hacerlo, no? Empecemos por lo ms sencillo, que es crear un decorado "mar" tanto

en la playa como en la isla (copia el cdigo donde corresponda, que ya sabes hacerlo): The costa is female and scenery in Playa. The description is "Estas aguas son tan bellas como peligrosas, piensas mientras observas la diminuta isla, all a lo lejos.". Understand "isla", "mar", "playa", "aguas", "agua", "linea" and "oceano" as the costa.

The mar is scenery in Isla. The description is "Estas aguas son tan bellas como peligrosas, piensas mientras observas la lnea de la costa, all a lo lejos.". Understand "costa", "playa", "aguas", "agua", "linea" and "oceano" as the mar.

Hay formas ms ortodoxas de hacer esto, pero para empezar est bien as; hemos creado en realidad dos objetos para uno solo que es el mar, al cual hemos llamado tambin como costa. Fjate en que he utilizado muchos sinnimos en los "Understand", esto es porque cuantos ms sinnimos utilices, ms cosas entender tu juego y ms amigable ser para el jugador, adems vers que los sinnimos pueden repetirse en muchos objetos (aunque hay que tener cuidado con esto, porque si se encuentran dos objetos con un mismo sinnimo tendrs problemas de desambiguacin). Pero siempre es preferible dotar a tu

juego

del

mayor

vocabulario

posible.

Si lo pruebas, vers que aunque haya un mar y se pueda nadar... an no funciona nada! Esto es porque falta crear la accin que posibilitar nadar entre la playa y la isla, que la crearemos con un par de "Instead". Y no solo eso, habr que mover efectivamente al jugador entre una y otra localidad. Esta es mi propuesta: Instead of nadaring en the costa: say "Decidido y sin temor te adentras en el mar, nadando hacia la lejana isla... [paragraph break]"; wait for any key; say "Finalmente, y tras un gran esfuerzo, llegas a la costa. Contemplas maravillado la paradisaca isla...[paragraph break]"; wait for any key; now the player is in Isla. Instead of nadaring in Playa, try nadaring en the costa.

Veamos si entiendes todo el cdigo anterior, lo primero "Instead of nadaring en the costa:" significa que si el jugador intenta nadar en la costa haga lo siguiente: diga que "decidido se adentre en el mar"; se espere a la pulsacin de una tecla; diga que ha llegado; se espere otra vez y, finalmente lo ms importante, mueva al

jugador a la isla, con ese mgico "now the player is in Isla.". Tambin puedes conseguir algo parecido con "move the player to the Isla". Por ltimo, se contempla la posibilidad de que el jugador simplemente ponga "nadar" cuando est en la playa, as que le decimos a Inform que si el jugador pone nadar entonces "try nadaring en the costa.", que significa que intente nadar en la costa. La opcin de poner "try..." ser una de las ms utilizadas en tus futuros proyectos, puesto que te permite contemplar multitud de acciones para acabar realizando la correcta igualmente, sin tener que programarlas todas. Estilos de texto Los "[paragraph break]" dentro de una cadena de texto hacen que Inform separe las cadenas de texto en prrafos, lo cual quedar ms esttico. Si quisiramos escribir en una lnea abajo pondramos "[line break]". Si en algn momento queremos cambiar a escribir en cursiva habr que poner "[italic type]", si queremos usar letras en negrita, "[bold type]" (algo muy til si queremos resaltar alguna palabra), y para volver a la tipografa normal pondremos "[roman type]". Prubalo todo y, siguiendo dicho ejemplo, crea la misma accin para nadar de la isla a la playa. Tendrs que utilizar un "now the player is in Playa." y un "try nadaring en the mar.", entre otras sentencias. Vers que no es tan complicado una vez sabes cmo hacerlo; aunque lgicamente hay que acabar de entender bien toda la jerga

propia de Inform 7. Recuerda que siempre tienes la ayuda disponible en la pestaa "Documentation" del editor de Inform 7.

Sucesos aleatoriosPodra suceder que en el plcido mar que acabamos de crear hubieran tiburones. Es algo que podra suceder, pero no es algo seguro. Estamos hablando de un suceso aleatorio, en el que el jugador puede morir a causa de la dentellada de un escualo si por un casual pasa alguno por all. En Inform podemos hacer uso de la aletoriedad, aunque esto a los jugadores no les guste demasiado, puesto que es algo que no pueden controlar. Pero es bueno saber que efectivamente se puede hacer, as que vamos a crear al tiburn que podra (o no) matarnos, y para ello tenemos que modificar las dos acciones de nadar anteriores, incluyendo la aletoriedad y una condicin, veamos: Instead of nadaring en the costa: say "Decidido y sin temor te adentras en el mar, nadando hacia la lejana isla... [paragraph break]"; wait for any key; if a random chance of 1 in 5 succeeds: say "Pero de repente observas una amenazadora aleta de tiburn que se aproxima hacia t... intentas huir con todas tus fuerzas! Pero...[paragraph break]"; end the game in death; otherwise:

say "Finalmente, y tras un gran esfuerzo, llegas a la costa. Contemplas maravillado la paradisaca isla...[paragraph break]"; wait for any key; now the player is in Isla. Instead of nadaring en the mar: say "Decidido y sin temor te adentras en el mar, nadando hacia la costa...[paragraph break]"; wait for any key; if a random chance of 1 in 5 succeeds: say "Pero de repente observas una amenazadora aleta de tiburn que se aproxima hacia t... intentas huir con todas tus fuerzas! Pero...[paragraph break]"; end the game in death; otherwise: say "Finalmente, y tras un gran esfuerzo, llegas a la playa...[paragraph break]"; wait for any key; now the player is in Playa.

Como vers, he incluido una condicin "if... otherwise", que como en otros lenguajes de programacin es de importancia vital, se utiliza constantemente. Las condiciones son muy importantes! O se hace esto, o esto otro; en este caso sirve para el suceso aleatorio del tiburn, le estamos diciendo que "si

sale un 1 en una tirada aleatoria del 1 al 5 ocurrir lo siguiente; y si no, ocurrir lo otro, que es el "if a random chance of 1 in 5 succeeds:" y el "otherwise:". Prubalo e intenta nadar de un lado a otro hasta que el personaje muera.Nota: como en todo lenguaje la aleatoriedad se consigue a travs de una "semilla", que se puede bloquear para que siempre salga la misma secuencia aleatoria, esto se consigue en la pestaa "Settings" clicando en "Ramdomness", aunque esto cambiar cuando hagamos la Release. Tienes ms informacin en el captulo 8.18. Randomness.

Como puedes ver, no ha hecho falta programar tiburn alguno, si no que ha sido cosa del azar el que aparezca, no ha hecho falta crearle un objeto "tiburon" a la condicin aleatoria. Sin embargo, la aleatoriedad en este caso es bastante injusta, puesto que el jugador no tiene opcin a protegerse contra el tiburn. Cmo podramos advertirle al jugador del peligro, sin matarle la primera vez? (porque dado que es un sistema aleatorio, podra ser que muriera la primera vez que nada). Advertir al jugador de un peligro Yo lo que hara sera indicar que en la primera travesa a nado el juego ya nos advirtiera de la presencia de tiburones, y que en la segunda vez (con el jugador ya advertido) el personaje pudiera morir aleatoriamente tal como hemos programado. Entonces habra que incluir la siguiente sentencia en nuestro cdigo, antes que las anteriores: Instead of nadaring en the costa for the

first time: say "Decidido y sin temor te adentras en el mar, nadando hacia la lejana isla... [paragraph break]"; wait for any key; say "De repente, en mitad de la travesa, te das cuenta... el mar est infestado de tiburones! Nadas todo lo rpido que puedes hasta llegar exhausto a la costa... esta vez has tenido suerte! [paragraph break]"; wait for any key; now the player is in Isla.

Ahora el jugador ya est advertido e intentar buscar alguna otra frmula para cruzar el mar, sin tener que ir a nado. Nos ocuparemos de ello ms tarde. Fjate en que con la misma frmula de "for the first time:" se pueden solucionar muchas de las salidas que conduciran a un jugador a la muerte, puesto que siempre se le puede advertir en una primera vez.

Condiciones: aprender a utilizar if, then, else y otherwiseHemos visto ya algo de las condiciones, pero profundizaremos en ellas puesto que son muy importantes. En Inform se utilizan mucho las estructuras de "if...otherwise", aunque hay ms tipos. Ahora nos centraremos en los "if", puesto que con ellos se pueden resolver la mayora de casos condicionales.

Pongamos por caso que en la playa hay un cofre. Lgicamente el cofre estar cerrado, y necesitaremos una llave como no! Al abrirlo encontraremos un mapa del tesoro, y aun ms, para mayor dificultad, si nadamos con el mapa a cuestas se mojar y resultar inservible. En todo lo anterior hay condiciones a mogolln. Vamos a resolverlas empezando por lo ms sencillo: el cofre. Objetos contenedores Un objeto contenedor es aquel capaz de albergar otros objetos, como lo podra ser un cofre. En Inform hay que definir los objetos contenedores aplicndoles la clase "container". Adems podr abrirse o cerrarse, aunque inicialmente estar cerrado. Veamos su cdigo: The cofre is in the Playa. The description is "[if open]El pequeo cofre est abierto. Su interior es impermeable y por lo tanto el agua del mar no ha estropeado su contenido...[otherwise]Un pequeo cofre misterioso, bellamente adornado, aunque algo deteriorado por las inclemencias del mar." It is container, openable and closed. Rule for printing room description details of cofre: if the cofre is open, say " abierto"; if the Playa is unvisited, say " que llega mecido por las olas, por"; if the cofre is closed and Playa is visited,

say " misterioso"; omit contents in listing.

La primera parte del anterior cdigo es la definicin, descripcin y las caractersticas del objeto "cofre". El cofre es un contenedor que se puede abrir pero que inicialmente est cerrado, tal como dice la sentencia "It is container, openable and closed.". Adems podemos utilizar condicionales en una cadena de texto si los ponemos entre corchetes, que harn variar el texto, con un "[if open]" y un "[otherwise]" que nos ahorrarn programar un cofre abierto y otro cerrado. La segunda parte trata de cmo percibir el cofre el jugador dependiendo de si est abierto, cerrado o de si es la primera vez que lo ve, algo que queda ms esttico que si lo dejamos tal cual (haz la prueba omitiendo la segunda parte del cdigo). Para ello nos hemos servido de una regla, una "Activity Rule", que en este caso cambiar la regla por defecto que incluye Inform. Adems he puesto "unvisited", que significa "si an no ha sido visitada", que funcionar la primera vez que el jugador llegue a la localidad. Como observars hemos hecho un uso intensivo de los condicionales en un bloque muy pequeo, pero su importancia ha sido determinante para que todo salga bien de cara al jugador.

Llaves y candados: objetos con cerrojo Sin embargo, no queremos hacer un cofre que se abra as, a las buenas, tenemos que crear un candado en condiciones para el cofre. Y una llave que lo abra. As que habr que modificar el cofre para que solo se pueda abrir con una llave especfica (un puzzle clsico). Esto lo podemos resolver as (sustituye "It is container, openable and closed." por lo siguiente: It is container, openable, lockable and locked. The matching key of the cofre is the llave oro.

Con esto le estamos diciendo a Inform que el cofre tiene un cerrojo que est inicialmente cerrado, y que solo se puede abrir con la llave de oro, gracias a las propiedades lockable y locked. Vamos a crear la llave, que inicialmente pondremos en la Isla, y ahora prubalo todo. A llave oro is female in Isla. The printed name of llave oro is "llave de oro". Understand "llave de oro" as llave oro.

Bien, ahora podemos meter un mapa del tesoro en el cofre: The mapa del tesoro is in the cofre. The description is "Parece un mapa autntico!

Tal vez si logro descifrarlo encontrar un tesoro... y ser rico! Ja!".

En el siguiente captuloY por el momento eso es todo, que el captulo es bastante extenso y hemos tocado muchos temas. Ahora te toca a t ir probando todo lo que puedes hacer con lo que has aprendido. Por ejemplo... cmo haras para que el nufrago te diera la llave, tras preguntarle por el cofre? cmo mejoraras al nufrago para que se diera una descripcin diferente de l tras mirar la localidad? Todo esto puedes empezar a programarlo ya... tenlo por seguro, sabes ms de lo que crees!

3. Organizacin, library card, regiones y backdropsInform 7: Empezando a programar - captulo III Por Xavi C.Versin 1.1 Revisin 14/01/11

En el anterior captulo aprendimos a crear verbos, a programar condicionales, objetos con caractersticas tales como contenedores y con cerrojos y tambin a programar sucesos aleatorios. En esta ocasin veremos como organizar un cdigo fuente en Inform, para que no nos perdamos en l en caso de retomarlo ms tarde, a programar regiones y decorados comunes y a profundizar en la programacin de puzzles ms complejos. Vamos all! Contenidos1. 2. 3. 4.

1 2 3 4

5.

Cmo organizar el cdigo fuente Los datos bibliogrficos Describir personajes en su localidad Planeando puzzles complejos 1. 4.1 Regiones y backdrops 2. 4.2 Un decorado para todas las localidades 3. 4.3 Empezando a programar puzzles complejos: objetos escondidos 4. 4.4 Objetos que cambian de estado 5. 4.5 Comprobando las acciones del jugador: check 5 En el siguiente captulo

Cmo organizar el cdigo fuenteHabrs podido observar que nuestro cdigo fuente se hace cada vez ms largo, y llega un momento en que es difcil encontrar la parte del cdigo que estamos buscando. Inform nos provee de partes y secciones para hacernos la vida ms fcil cuando el cdigo empieza a ser extenso. No hay una nica forma de organizar el cdigo y puedes utilizar la que tu quieras; en mi caso voy a dividirlo en cinco partes, a saber: Introduccin, Escenario, Reparto, Nudo y Vocabulario (una organizacin un tanto teatral, pero til para m). Dentro de cada parte se pueden poner secciones, as por ejemplo dentro de Reparto puedo poner al jugador, a la serpiente y al nufrago, pues son los personajes de mi juego. Vemoslo, copia las siguientes partes y colcalas donde corresponda en tu cdigo (tendrs que reorganizar algunas partes del mismo):

Part 1 - Introduccin Part 2 - Escenario Part 3 - Reparto Part 4 - Nudo Part 5 - Vocabulario

Por ejemplo: Part 1 - Introduccin When play begins: clear the screen; display the boxed quotation "La isla. por Grendelkhan"; show the current quotation; wait for any key; Part 2 - Escenario Bosque is a room. The description is "Te encuentras en un bosque de enormes rboles." ...

Esto puede parecer poco til al principio, pero a medida que el cdigo crezca ser vital. Porqu? Porque puedes navegar por tu cdigo de forma muy gil a travs de la pestaa Index. Vamos a verlo; compila tu cdigo y en la pantalla del juego pulsa la pestaa Index. Vers algo similar a la imagen: aparece un "Contents Index" por el cual podemos navegar si pulsamos las flechitas naranjas que aparecen al lado de cada parte y seccin... nunca ms nos perderemos al revisar un cdigo fuente!

Los datos bibliogrficosSi sigues mirando por el panel Index, vers que ms abajo aparece una seccin llamada "Library Card", que son los datos que proporciona el juego acerca de su ttulo, su autor, su ao de publicacin, etc. Vers que la "Story Genre" es actualmente "Fiction". En Inform los gneros son por defecto los siguientes: Comedy, Erotica, Fairy Tale, Fantasy, Fiction, Historical, Horror, Mystery, NonFiction, Other, Romance, Science Fiction, Surreal.

Bien, yo creo que por el momento es una historia misteriosa, as que le pondr "Mystery", pero... dnde? Todo esto lo podemos editar nosotros en nuestro cdigo, y la mejor forma de hacerlo es modificar la parte de la Introduccin para que muestre algo similar a esto (copia y modifica el siguiente cdigo y reemplaza la parte de la Introduccin anterior de forma similar a la imagen): The story title is "La isla misteriosa". The story author is "Grendelkhan". The story headline is "'Una aventura de impredecibles consecuencias'". The story genre is "Mystery".

The release number is 1. The story creation year is 2011. The story description is "El gran conquistador Hernn Corts se encuentra a merced del peligro en una tierra extica buscando un tesoro perdido... lograr encontrarlo? Solo depende de tu pericia en esta aventura singular!".

Como vers, el "story title" cambia el ttulo anterior, por lo que debers borrar el que haba o te dar error. Asegrate de dejar una lnea en blanco siempre tanto arriba como abajo de las "Part" y "Section" o tambin te dar error. El "[ Datos bibliogrficos ]" es solamente un comentario, puedes comentar siempre que quieras tu cdigo poniendo entre corchetes tu comentario. Asegrate de incluir las extensiones y el mensaje inicial en la Introduccin. Para comprobar que todo ha salido bien, compila tu cdigo y revisa el panel Index, vers que ha cambiado. Tambin puedes teclear "version" para que Inform te de la informacin bibliogrfica. Todo esto ser til posteriormente para la catalogacin de tu juego en las diferentes webs, bases de datos y bibliotecas de ficcin interactiva de la red.

Describir personajes en su localidadY una vez visto esto, vayamos al punto en que lo dejamos en el anterior captulo, que era: cmo haras para que el nufrago te diera la llave, tras preguntarle por el cofre? cmo mejoraras al nufrago para que se diera una descripcin diferente de l tras mirar la localidad? Vamos a posponer la primera cuestin porque es mas complejo programar esto con los personajes, lo veremos ms adelante. Una opcin para la segunda cuestin sera la siguiente:

The naufrago is a man in the Isla. The printed name of naufrago is "nufrago". The description is "Un hombre vestido con arapos est tumbado sobre la arena, moribundo.". Understand "hombre", "arapos", "moribundo" as the naufrago. Rule for printing room description details of naufrago: if the Isla is unvisited, say " moribundo tumbado sobre la arena, por"; if the cofre is carried and Isla is visited, say " mirando con sorpresa tu misterioso cofre, por"; omit contents in listing.

Observa que le hemos puesto "The naufrago", no simplemente "naufrago", para que acompae un artculo al nombre: as ser "un nufrago" (sin embargo, ms adelante le quitaremos el "The" puesto que el nufrago tendr nombre propio, y no queremos que salga "un Antonio", por ejemplo). Por otro lado, en la regla "Rule", le hemos puesto que si llega por primera vez a la isla "if the Isla is unvisited" diga una cosa, y si el jugador lleva el cofre encima "if the cofre is carried" diga otra. Habr que poner el "and Isla is visited" para que no salgan las dos cosas a la vez en caso de que el jugador llegue por primera vez a la isla cargado con el cofre. Algo similar podra hacerse para la serpiente:

Rule for printing room description details of serpiente: if the Bosque is unvisited, say " aproximndose hacia t desde el sur,"; otherwise say " siseando amenazadoramente, impidindote el paso hacia el sur,"; omit contents in listing.

En este caso hemos simplificado las opciones, pues ese "otherwise" significa que "en cualquier otro caso, hagas esto", as de rpido y sencillo.

Planeando puzzles complejosAhora toca programar el puzzle del cofre, el ms complicado, que ser el siguiente: para abrir el cofre debemos conseguir la llave de oro, que nos la dar el nufrago a cambio de agua; el agua se podr conseguir en un riachuelo que habr en el interior de la isla, siempre y cuando la cojamos con un recipiente, pues de lo contrario se nos escurrir entre las manos. Complicado, no? As es, un poco complicado pero lgico y honesto con el jugador, nadie dijo que fuera fcil para l! Recuerda siempre en planificar bien el puzzle: el jugador sabr qu hay que hacer? cmo se resuelve? existe ms de una manera? Regiones y backdrops Empecemos pues por crear el nuevo escenario para el

riachuelo, ahora ya sabes como hacerlo, pero lo que no sabes es hacer regiones. Digamos que la isla es una regin, y tanto la costa como el riachuelo forman parte de la misma. Habr que modificar la isla inicial y crear una regin. Adems, el jugador debera poder nadar en cualquier parte de la isla que d al mar, esto se consigue con los "backdrop" que veremos a continuacin. Aqu va el cdigo (reemplaza la seccin de la isla por la siguiente): Section 4 - La isla The islas is a region. The Isla, the Isla2, the Isla3 and the Isla4 are in the islas. The vegetacion is a backdrop in the islas. The description is "Multitud de rboles frutales y flores de vivos colores te sorprenden a tu paso, es un autntico paraiso!.". Understand "arboles", "plantas", "flores", "flor", "bosque" and "oceano" as the vegetacion. The arena is a backdrop in the islas. The description is "La playa est cubierta de fina arena, que se te escurre entre los dedos.". Isla is a room. The printed name of Isla is "Costa de la isla". The description is "[if unvisited]Has llegado a una extica isla en mitad de la inmensidad del mar. Te sorprende

la singular belleza de estas costas, que se extienden de este a oesta hasta donde alcanza la vista.[else]La lnea de la costa se extiende de este a oeste en esta paradisaca isla, hasta donde alcanza la vista.". Isla2 is west of Isla and east of Isla4. The printed name of Isla2 is "Costa de la isla". The description is "[if unvisited]Continas explorando la isla. Te sorprende la singular belleza de estas costas, que se extienden de este a oesta hasta donde alcanza la vista. [else]La vegetacin es ms densa en esta parte de la isla y te obliga a meterte en el agua hasta casi la cintura. La lnea de la costa contina de este a oeste.". Isla3 is west of Isla4 and east of Isla. The printed name of Isla3 is "Costa de la isla". The description is "[if unvisited]Sigues explorando la isla. Te sorprende la singular belleza de estas costas, pero ms adentro, al norte, te llama la atencin un camino que conduce a un espeso bosque.[else]La isla se extiende en una larga playa de fina arena hasta donde alcanza la vista. Ms adentro, al norte, puedes ver un camino que conduce a un espeso bosque.". Isla4 is east of Isla3 and west of Isla2 and south of Bosque2. The printed name of Isla4 is "Costa de la isla". The description is

"[if unvisited]Continas explorando la isla. Te sorprende la singular belleza de estas costas, que se extienden de este a oesta hasta donde alcanza la vista.[else]La isla se extiende en una larga playa de fina arena hasta donde alcanza la vista.". Bosque2 is north of Isla3. The printed name of Bosque2 is "Bosque de la isla". The description is "[if unvisited]Has llegado a un extico bosque. Las plantas, los rboles y las flores de vivos colores te hacen sentir como si estuvieras en un paraso. [else]Contemplas la gran variedad de vegetacin que hay en la isla, algunas plantas jams las habas visto antes. Ms all, al sur, se vislumbra la costa.". Section 4.1 - El mar The mar is a backdrop in the islas. The description is "Estas aguas son tan bellas como peligrosas, piensas mientras observas la lnea de la costa, all a lo lejos.". Understand "costa", "costas", "playa", "aguas", "agua", "linea" and "oceano" as the mar.

Instead of nadaring en the mar: say "Decidido y sin temor te adentras en el mar, nadando hacia la costa...[paragraph

break]"; wait for any key; if a random chance of 1 in 5 succeeds: say "Pero de repente observas una amenazadora aleta de tiburn que se aproxima hacia t... intentas huir con todas tus fuerzas! Pero...[paragraph break]"; end the game in death; otherwise: say "Finalmente, y tras un gran esfuerzo, llegas a la playa...[paragraph break]"; wait for any key; now the player is in Playa. Instead of nadaring in the islas, try nadaring en the mar.

Esta parte del cdigo es ms larga y ciertamente tiene ms complejidad, pero seguro que la entiendes, primeramente le informamos a Inform que habr una regin llamada "islas" en la que pondremos todos los escenarios y localidades de la isla: "The islas is a region. The Isla, the Isla2, the Isla3 and the Isla4 are in the islas.". Esto es especialmente til cuando queremos que un determinado decorado se repita en muchas localidades, como por ejemplo la arena o el mar. Ahora se podr nadar en cada localidad con mar gracias a la sentencia: "Instead of nadaring in the islas, try nadaring en the mar.", que hemos modificado de la anterior para que surja efecto en

todas las localidades de la regin "islas". Parece complicado? No lo es tanto... una vez que lo sabes, claro.

Un decorado para todas las localidades Para la vegetacin, he optado tambin por un backdrop: "The vegetacion is a backdrop in the islas. ", as resuelvo el tema del decorado con una sola orden, y lo mismo para la arena. Y cmo lo haramos para programar el sol, si queremos que salga en todas las localidades? Haremos uso de la propiedad "everywhere", as: The sol is a backdrop. The sol is everywhere. The description is "El sol se muestra imponente en mitad del cielo azul.".

Con ese "The sol is everywhere." conseguimos meter al sol en todas las localidades de nuestro juego. Fcil, no? Todo es cuestin de prctica, Inform es fcil cuando sabes lo que tienes que poner, ya que no es tan evidente la propiedad "everywhere"; una vez ms te recomiendo que ante cualquier duda consultes la pestaa Documentation del editor. Empezando a programar puzzles complejos: objetos escondidos Vayamos ahora a programar el riachuelo y el recipiente para el agua. Como ya vamos sabiendo un poco ms, hagamos que el recipiente, una cantimplora, est bajo unos tablones de madera de un naufragio, en una de las costas. Ah va mi propuesta:

Some tablones are in Isla4. They are fixed in place. "Unos tablones de madera procedentes de un naufragio se encuentran tirados por la arena.". The description is "Restos de un naufragio, y por su aspecto no hace mucho que llegaron a estas costas.". Understand "tablas", "tablon", "restos" and "naufragio" as the tablones. The cantimplora is female. The description is "La cantimplora est algo roosa, pero parece en buen estado.".

Instead of turning or touching or pushing or pulling the tablones, try taking the tablones. Instead of taking the tablones for the first time: move the cantimplora to Isla4; say "Los tablones pesan demasiado, pero al moverlos has dejado al descubierto una cantimplora.". Instead of taking the tablones, say "Los tablones pesan demasiado para llevarlos tu solo.".

Como vers, aqu tambin hay novedades. Introducimos la propiedad "fixed in place", que difiere de la de "scenery" en que el objeto se mostrar en la descripcin de la localidad, pero no podr moverse de ah (puedes obtener ms informacin sobre los diferentes tipos de objetos en el captulo 3 del manual integrado en el editor de inform: 3.27. Review of Chapter 3: Things). A continuacin he puesto una cadena de texto, as sin "description" ni nada; cuando se pone as Inform lo que hace es escribir esa cadena de texto en lugar del objeto (tambin podramos haberlo usado para la serpiente, el nufrago, etc.). Tambin hemos hecho un uso intensivo de "try" para que el jugador siempre que manipule los tablones lo que Inform entienda es que los quiere coger: "Instead of turning or touching or pushing or pulling the tablones, try taking the tablones.", lo cual

ser muy til para que el jugador entienda que no puede hacer nada con ellos. Por ltimo, hemos vuelto a usar la poderosa sentencia "for the first time" para que la cantimplora solo salga la primera vez. Prubalo y vers que todo funciona correctamente; se trata de un puzzle simple pero efectivo, tan antiguo como el comer, esconder algo para que lo encuentre el jugador siempre se ha hecho y siempre se har en ficcin interactiva!

Objetos que cambian de estado Ahora tenemos que programar el riachuelo, en el que conseguiremos el agua con la que llenar la cantimplora. Vamos a ello, primero crearemos el riachuelo en el bosque y despus contemplaremos las opciones que se pueden hacer con l con la cantimplora y sin la cantimplora, adems tendremos que modificar ligeramente la cantimplora (ya que puede estar llena o vaca). Veamos el cdigo nuevo para la cantimplora: The cantimplora is female. The cantimplora

can be llena or vacia. The cantimplora is vacia. The description is "La cantimplora est algo roosa, pero parece en buen estado, [if vacia]aunque no contiene nada. [else]est llena de agua.".

Observa ese "The cantimplora can be llena or vacia.", pues esto (llena y vaca) lo hemos creado nosotros, son estados definidos por el programador y son muy importantes, as podemos manejar los diferentes estados de un objeto. Adems se pueden utilizar en las descripciones, como puedes ver con ese "[if vacia]". Atrvete a crear tus propios estados, por ejemplo para decir si el jugador est seco o mojado.

Comprobando las acciones del jugador: check Pero ahora vamos a por el riachuelo, que se las trae, puesto que tendremos que implementar las diferentes acciones que puede llevar a cabo el jugador para tratar de llenar la cantimplora. Con check comprobamos que si las condiciones no estn dadas, el flujo de la accin se detenga. Vamos a hacer uso de la sentencia "Check", que comprobar el resultado de una determinada accin, es diferente de "Instead" en que con check realmente se ejecuta la accin, en cambio con instead no llega a suceder. Tal vez lo veas ms claro con el siguiente cdigo, copialo y ejectalo:

The riachuelo is fixed in place in Bosque2. "Un pequeo riachuelo cruza serpenteando el bosque.". The description is "El agua del pequeo riachuelo fluye limpia y clara.". Understand "rio", "agua", "caudal" and "fondo" as the riachuelo. Instead of turning or touching or pushing or pulling the riachuelo, try taking the riachuelo. Instead of putting the riachuelo on the cantimplora, try taking the riachuelo. Instead of llenaring the cantimplora when the player is in Bosque2, try taking the riachuelo. [definimos verbo llenaring en Vocabulario] Check taking the riachuelo: if the player carries the cantimplora: say "Llenas la cantimplora con el agua del riachuelo."; now the cantimplora is llena; rule succeeds; otherwise: say "Coges el agua del riachuelo con tus manos... y se escurre entre tus dedos."; rule succeeds.

Por otro lado, tendremos que definir un verbo nuevo (llenaring) para poder poner "llena la cantimplora". Lo haremos as (cpialo en la seccin de vocabulario):

llenaring is an action applying to one thing. Understand "llena [something]" as llenaring. report llenaring: say "No parece que [the noun] pueda llenarse, qu pretendes hacer exactamente?.".

Comprueba como funciona y despus elimina todos los "rule succeeds" para ver el efecto de los checks, lo ves ms claro?

En el siguiente captuloY ahora s, ya tenemos programada la primera parte de nuestro gran puzzle, solo faltar darle el agua al nufrago, pero eso lo veremos en el siguiente captulo, puesto que ya hemos visto suficientes cosas por ahora. Hemos aprendido a organizar el cdigo, a crear regiones y

decorados comunes e incluso a ver el funcionamiento de las condiciones y los "chequeos" que hace Inform sobre los objetos. Con todo lo que sabes, ya podras programar tu propio juego. Para el siguiente captulo vamos a aprender a programar escenas, a desambigar objetos y a ver... cocodrilos!

4.

Escenas, ayuda, cocodrilos

desambiguacin

y

Inform 7: Empezando a programar - captulo IV Por Xavi C.Versin 1.1 Revisin 14/01/11

En este captulo, un tanto ms terico pero tambin muy prctico, vamos a aprender a programar pensando en cocodrilos (s, has ledo bien), a desambigar y a crear escenas. Tambin vamos a implementar el comando "ayuda" para el jugador, para que sepa qu tiene que hacer. Este captulo es muy importante as que mantn tu mente despejada y tus ojos bien abiertos, la isla misteriosa te espera. Vamos all! Contenidos1. 2. 3. 4. 5.

1 2 3 4 5

6.

Ayudando al jugador Montando una escena Estados de un personaje Desambigacin Cocodrilos 1. 5.1 Acciones que suceden despus: before 2. 5.2 Cocodrilos por todos lados 6 En el siguiente captulo

Ayudando al jugadorVamos a empezar por darle algo de ayuda al jugador, para ello haremos uso de una de las libreras que nos

descargamos en el captulo 1, la "Basic Help Menu SP by Emily Short", que tambin podremos descargar de aqu : (enlace directo ) Una vez instalada, llamaremos a ella en nuestro cdigo fuente en la parte de la Introduccin, as: Include Basic Help Menu SP by Emily Short.

Si lo pruebas tal cual, aunque funciona, el resultado es bastante decepcionante, pero podemos modificar los mensajes de la ayuda fcilmente, vamos a hacerlo modificando la seccin 2 de la Introduccin, el mensaje inicial (porque es donde est el "When play begins", reemplaza el cdigo actual por el siguiente: Section 2 - Mensaje inicial y ayuda extendida When play begins: clear the screen; display the boxed quotation "La isla. por Grendelkhan"; show the current quotation; wait for any key; say "Teclea 'AYUDA' durante el juego para recibir instrucciones.[paragraph break]Bienvenido a..."; choose row 1 in Table of Basic Help Options; now description entry is "[italic

type]El gran conquistador Hernn Corts se encuentra a merced del peligro en una tierra extica buscando un tesoro perdido... lograr encontrarlo? Solo depende de tu pericia en esta aventura singular![paragraph break][roman type]Este es un juego que sirve como ejemplo para el tutorial de Inform 7 de Grendelkhan que puedes descargar desde el CAAD o en www.yonostudio.com". Table of Basic Help Options (continued) title subtable description "Contactar con el autor" -"Si tienes dificultades con [story title], contacta conmigo a travs de mi e-mail: [email protected] o entra en los foros del portal CAAD: www.caad.es. Tambin puedes visitar mi web: www.yonostudio.com" "Pistas" -"A continuacin van unas cuantas pistas para [story title]. [paragraph break][bold type]1. La serpiente odia las piedras.[line break]2. Has probado a nadar en el mar?[line break]3. El mendigo tiene sed.[line break]4. Piensa un poco y lo conseguirs![roman type]". Ms adelante ya aprenders como seguir modificando la ayuda, lo principal es que haya alguna ayuda en tu juego por sencillo que sea, porque sino el jugador lo dejar a las primeras de cambio cuando no sepa qu hacer.

Montando una escenaVamos a crear escenas, como en las pelculas. Te preguntars para qu quiero hacer una escena? Lo primero ser definir una escena como un lapso de tiempo entre un suceso y otro, por ejemplo: un determinado nmero de turnos desde que empieza el juego. Con escenas podemos hacer muchas cosas, como limitar el tiempo para que un jugador escape de una celda o crear sucesos recurrentes como podra serlo un guardia que vigila a un recluso cada cinco minutos. En nuestro juego, una escena podra ser la siguiente: el nufrago tiene tanta sed que solo sobrevivir si le damos a beber agua antes de 30 minutos. Un poco drstico, lo s, pero de momento es la que se me ocurre, ya tendrs tiempo de pensar en mejores escenas en tus juegos. Para no hacer un puzzle injusto, le diremos a Inform que cuente los 30 minutos a partir de que llegamos a la isla y vemos al nufrago, teniendo en cuenta que Inform entiende los minutos como acciones (esto es, el jugador dispondr de 30 turnos). La escena puede tener dos finales: uno bueno y uno malo, el bueno es que le damos el agua en el tiempo justo, el malo es que se muere de sed (y el juego terminar). Para ello vamos a la parte Nudo de nuestro cdigo y ponemos lo siguiente: Section 1 - Escena del nufrago Tener sed is a recurring scene. Tener sed begins when the Isla is visited for the first time.

Tener sed ends happily when the naufrago is recuperado. Tener sed ends sadly when the time since Tener sed began is 30 minutes. When Tener sed begins: change contador to 0. When Tener sed ends happily: say "El nufrago empieza a tener mejor aspecto, te mira agradecido[line break]Gracias, amigo! -te dice el hombre, levantndose con dificultad." When Tener sed ends sadly: end the game saying "El nufrago cae inconsciente en la arena, muerto de sed.'" The contador is a number that varies. Every turn during Tener sed: increase contador by 1; if contador is 1, say "-Tengo sed! Ahh...- le oyes decir."; if contador is 2, say "El nufrago parece estar sediento, apenas puede apoyarse en la arena."; if contador is 7, say "An puedes escuchar los lamentos del nufrago..."; if contador is 15, say "Deberas pensar en darle algo de agua al nufrago..."; if contador is 20, say "Deberas darle algo de agua al nufrago rpidamente, o caer inconsciente.";

if contador is 28, say "El nufrago apenas est ya consciente...".

Como podrs observar, hemos utilizado una variable llamada "contador" que se incrementar en cada turno, gracias al "Every turn", con la que podemos enviar mensajes al jugador para que se d prisa en buscar agua. Puedes cambiar los nmeros del contador, poner ms e incluso aumentar los quince minutos, ya que tal vez sea poco tiempo. Tienes ms informacin sobre creacin de escenas en el captulo 10 (10.1. Introduction to scenes) del manual de Inform 7.

Estados de un personajePor otro lado, tenemos que crear los dos estados posibles del nufrago: moribundo y recuperado, para ello tenemos que aadir la siguiente sentencia en la seccin del nufrago:

The naufrago can be moribundo or recuperado. The naufrago is moribundo.

Has visto? Los estados de un personaje se programan igual que los de un objeto, puesto que para Inform todo son objetos; con el "can be" definiremos los estados para cualquier cosa en el juego. El nufrago empezar moribundo, pero se recuperar cuando le demos agua. Abr que programar, por tanto, la parte en la que le damos el agua, en la que su estado moribundo cambiar a recuperado, y pararemos la escena. Instead of giving the cantimplora to the naufrago when the cantimplora is llena: say "El hombre coge nerviosamente la cantimplora con las dos manos y bebe de ella hasta la ltima gota..."; now the naufrago is recuperado; now the description of naufrago is "Un hombre vestido con arapos, ahora tiene mejor aspecto. Es un tipo alto y delgado que parece haber sobrevivido a terrible naufragio.";

now the cantimplora is vacia. Instead of giving the cantimplora to the naufrago when the cantimplora is vacia: say "El hombre coge nerviosamente la cantimplora con las dos manos... y ve que est vaca![paragraph break]Encolerizado te la arroja, aunque sin fuerzas, y te implora 'Dame agua, por favor!'"; move the cantimplora to Isla.

Comprendes bien el anterior cdigo? Deberas! Le estamos diciendo a Inform que si le damos la cantimplora llena de agua al nufrago, entonces estar recuperado, cambiar su descripcin por otra ms adecuada y adems vaciaremos la cantimplora, cosa muy lgica. Por contra, si le damos la cantimplora vaca, nos la tirar a la cabeza (con lo que la movemos al escenario) y nada ms.

DesambigacinDate cuenta en que el jugador tal vez intente poner "dar agua" en lugar de "dar cantimplora". Es lgico que si sabemos que el nufrago pide agua y tenemos una cantimplora llena de agua, el jugador opte poner poner "dar agua" que "dar cantimplora", as que ser lgico poner un sinnimo de agua para la cantimplora; si ponemos un... Understand "agua" as the cantimplora. ...en la seccin de la cantimplora solucionaremos esto... aparentemente. Porque crearemos un problema nuevo: Inform no sabr a qu agua nos referimos (la cantimplora, el riachuelo o el mar, pues se han utilizado sinnimos de agua para estos tres objetos); esto es un problema de desambigacin y no es un problema fcil de resolver, pero no es imposible, hay que estar atento a los posibles conflictos con objetos y decidir qu accin es la que Inform debe llevar a cabo. Nosotros queremos que el jugador pueda beber agua del riachuelo aunque lleve la cantimplora a cuestas, y que pueda darle agua de la cantimplora al nufrago aunque el agua del mar est presente. Entonces tenemos que indicarle a Inform, con una Rule, lo que el jugador quiere decir, o sea: "Does the player mean". Veamos el ejemplo:

Does the player mean drinking the mar: it is very unlikely. Does the player mean drinking the cantimplora when the player is in Bosque2: it is very unlikely.

Con el "it is very unlikely" le decimos a Inform que esa es la opcin que menos nos gusta, en caso de ambigedad cuando no se sepa claramente a qu se refiere el jugador. As solucionamos el problema de desambigacin con el agua, algo especialmente molesto, como podrs comprobar si eliminas las dos anteriores sentencias, ya que en ese caso el juego nos preguntar a qu agua nos referimos. Te recomiendo que le eches un vistazo al captulo 16.19. Does the player mean... del manual de Inform 7, puesto que te aclarar muchas dudas al respecto.

CocodrilosTodo aqul que empiece a jugar un relato interactivo quiere que le pasen cosas, sean estas buenas o malas, pero no limitarse a deambular por un decorado sin tener nada que hacer. Si te fijas en nuestro juego, a pesar de ser tan corto, hemos incluido algo en cada localidad: una serpiente en el bosque, tiburones en el mar, un cofre en la playa y un nufrago en una isla. Todas estas cosas son cocodrilos, pequeos y visibles, pero cocodrilos al fin y al cabo. Porqu les llamo cocodrilos? Bueno, lo aprend hace tiempo en un taller literario y me hizo gracia. Cocodrilo para m es todo aquello que pueda causar sorpresa al jugador, todo aquello con lo que pueda... jugar! Pero los mejores cocodrilos son los que estn agazapados, acechando al jugador... no son visibles pero sabes que estn ah, esperando su oportunidad! Un enorme cocodrilo acompaa al mapa del tesoro escondido en el cofre, que actuar cuando el jugador cruce a nado el mar: se mojar el mapa y se borrar su contenido. Ese cocodrilo se reir a carcajadas del jugador, y la prxima vez intentar cruzar el mar con el mapa protegido de alguna forma, por ejemplo, dentro del cofre cerrado. Acciones que suceden despus: before Vamos a programar el cocodrilo que mojar al mapa y lo volver inservible. Se te ocurre cmo? Pues definiendo dos estados para l: seco y mojado, o sea: "can

be seco or mojado", y con una comprobacin de si se moja gracias a una sentencia nueva: "before", que es como "instead" pero que sucede despus de la accin. Ten esto claro: "instead" se ejecuta antes de la accin, "before" despus. Lo tendrs ms claro con el siguiente cdigo, elimina el mapa anterior y copia lo siguiente: Section 2 - El mapa del tesoro The mapa del tesoro is carried by player. The mapa del tesoro can be seco or mojado. The mapa del tesoro is seco. The description is "Parece un mapa autntico! Tal vez si logro descifrarlo encontrar un tesoro... y ser rico! Ja!". Before nadaring en the costa: if the mapa is carried: now the description of the mapa del tesoro is "Maldicin! El agua lo ha destrozado... No deb haber nadado con el mapa en la mano! Tendra que haberlo protegido... ahora no sirve de nada!"; now the mapa is mojado. Before nadaring en the mar: if the mapa is carried: now the description of the mapa del tesoro is "Maldicin! El agua lo ha destrozado... No deb haber nadado con el mapa en la mano! Tendra que haberlo protegido... ahora no sirve de nada!"; now the mapa is mojado.

Cocodrilos por todos lados Un cocodrilo puede estar acechando en cualquier rincn, solo es cuestin de programarlo, y puede ser tan pequeo o tan grande como quieras. Por ejemplo, otro pequeo cocodrilo es el que acecha cuando el jugador canta en presencia del nufrago... sorpresa, el nufrago se queja!; ese pequeo detalle lo programamos en el primer captulo y sirve tambin como cocodrilo. As que a partir de ahora tienes que visualizar cocodrilos por todas partes, cuantos ms haya ms divertido ser tu juego... pero ojo! cuidado! Cocodrilo no significa atiborrar tus escenarios de trampas ocultas y muertes inesperadas, esos no son verdaderos cocodrilos. El buen cocodrilo se intuye aunque no se vea; tenlo en cuenta en tus futuros proyectos.

En el siguiente captuloSe me ocurre un gran cocodrilo para mi juego, dado que es un poco incongruente tener a Hernn Corts buscando un tesoro cuando debera estar charlando con Moctezuma, he pensado que todo podra ser un sueo. S, como en Los Serrano y otras series y pelculas... si a ellos les funcion, porqu no a m? Es un buen cocodrilo! As que en mi juego lo que sucede es que un chaval se ha quedado dormido en clase de historia (toma cocodrilo) y en realidad el nufrago es el profesor que da la clase. Todo esto se puede programar en Inform con unas pocas lneas de cdigo y ya sabes como hacerlo, por ejemplo con un "now

the player is in Clase de historia" o algo as. Lo veremos en el captulo que viene!

5. Tablas, listas, conversaciones y cambio de jugadorInform PorVersin

7:

Empezando1.2

a programar XaviRevisin

-

captulo

V C.

14/01/11

En el anterior captulo vimos una aproximacin a las tablas de la mano de la extensin "Basic Help Menu SP by Emily Short", que hace uso intensivo de ellas. En esta ocasin aprenderemos a crear nuestras propias tablas y profundizaremos en la creacin de conversaciones. Contenidos1.

2. 3.

4.

5. 6.

1 Uso de las tablas 1. 1.1 Listando contenidos 2 Cambiar al jugador 3 Profundizando en las tablas: conversaciones 1. 3.1 Dormir al jugador 2. 3.2 Sinnimos para verbos existentes 4 Conversaciones por mens 1. 4.1 Un ejemplo de conversacin por mens 5 Ahora la historia la terminas t 6 En el siguiente captulo

Uso de las tablasEn Inform podemos usar tablas, al estilo de las del Word o

el Excel, para clasificar mejor los diferentes objetos y propiedades. Para qu puede servir esto? Tiene una primera utilidad obvia: el orden. Gracias a las tablas, podemos escribir cdigos ms ordenados y utilizar menos lneas, ahora veremos un ejemplo prctico. En el captulo anterior tenamos al nufrago sediento, y solo si le dbamos agua nos ofreca la llave de oro. Una vez con ella en nuestro poder, podamos abrir el cofre y conseguir el mapa del tesoro. Por el momento, para probar la tabla, empezaremos con el mapa en nuestro poder. En el mapa pondremos una serie de anotaciones para llegar hasta el tesoro, y las pondremos en una tabla. Fjate en el siguiente cdigo: The mapa del tesoro is carried by player. The mapa del tesoro can be seco or mojado. The mapa del tesoro is seco. The description is "Parece un mapa autntico! En el mapa hay varias anotaciones: un dibujo, una cruz, un smbolo y un escrito. Tal vez si logro descifrarlo todo encontrar un tesoro... y ser rico! Ja!". A anotacion is a kind of thing. The plural of anotacion is anotaciones. They are scenery. Some anotaciones in the mapa del tesoro are defined by the Table of tabla_anotaciones. The description of a anotacion is "[if the mapa del tesoro is seco]Bajo [palabra], est manuscrito lo siguiente: [descripcion].[otherwise]El mapa est mojado e inservible. Deberas haber

tenido ms cuidado al cruzar a nado la costa!". Table of tabla_anotaciones anotacion palabra descripcion a dibujo "el dibujo de la isla" "Hay varias islas en este archipilago del infierno, pero la isla del tesoro es la que est ms al norte, y la ms peligrosa..." a cruz "una cruz en el mapa" "El tesoro se encontr en el barco 'Guadalupe', que fue atacado por los salvajes... si encuentro los restos del barco, encontrar la isla" a simbolo "un smbolo tribal" "Este smbolo es la representacin del dios de los salvajes que custodian el tesoro, tal vez si me lo tatuara creeran que soy su dios..." a escrito "un escrito" "Romualdo Guimaraes, que muri persiguiendo un sueo. Si encuentras este mapa,