0% encontró este documento útil (0 votos)
78 vistas186 páginas

Tutorial de Inform 7: Primeros Pasos

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

Cargado por

Idiopathos
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
78 vistas186 páginas

Tutorial de Inform 7: Primeros Pasos

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

Cargado por

Idiopathos
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

1. Instalacin y primeros pasos.

Creacin de objetos y personajes


Inform Por
Versin

7:
1.2

Empezando Xavi
Fecha

a
revisin:

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! Contenidos
1.

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 captulo
2.

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 [Link] 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 "[Link]" (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 historia


En 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 cerrojos


Inform Por
Versin

7:

Empezando
1.2

a programar Xavi
Revisin

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! Contenidos
1. 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 captulo
1.

Cmo crear buenos puzzles


Cualquier 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 vocabulario
Pero 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 time


Continuando 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 jugador


Ahora 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 aleatorios
Podra 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 otherwise


Hemos 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 captulo
Y 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 backdrops


Inform 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! Contenidos
1. 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 fuente


Habrs 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 bibliogrficos


Si 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 localidad


Y 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 complejos


Ahora 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 captulo
Y 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

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! Contenidos
1. 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 jugador
Vamos 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 [Link]". 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: yonostudio@[Link] o entra en los foros del portal CAAD: [Link]. Tambin puedes visitar mi web: [Link]" "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 escena


Vamos 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 personaje
Por 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.

Desambigacin
Date 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.

Cocodrilos
Todo 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 captulo
Se 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 jugador


Inform Por
Versin

7:

Empezando
1.2

a programar Xavi
Revisin

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. Contenidos
1.

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 tablas


En 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, encontrars el tesoro o tu muerte." The cruz is female. Before listing contents while taking inventory: group anotaciones together. Rule

for grouping together anotaciones: say "en el mapa puedes ver el dibujo de una isla, una cruz, un smbolo y un escrito.".

Primero de todo ponemos que el mapa est en nuestro poder con "is carried by player", y que puede estar seco o mojado. Despus, decimos que una anotacin es una cosa cuyo plural es anotaciones con ese "The plural of anotacion is anotaciones", y que estn definidas en la tabla_anotaciones (importante: no uses los mismos nombres para los objetos y las tablas; de ah que haya creado una Table of tabla_anotaciones y no una Table of anotaciones, ya que anotaciones es el plural del objeto anotacion). En la tabla hemos creado cuatro anotaciones: un dibujo, una cruz, un smbolo y un escrito. Estas anotaciones son objetos, pero se han programado en forma de tabla. Como los objetos de la tabla son masculinos, he puesto ms abajo que "the cruz is female" para que Inform trate a la cruz en femenino, ves que es un objeto? Al principio puede ser tedioso lidiar con las tablas, pero es la forma ms rpida de crear este tipo de objetos. Y con ellas se pueden hacer cosas mucho ms complicadas. O podras hacer una tabla de decorados para cada localidad, si as lo quisieras. O mejor an, una tabla de conversacin, en lugar de programar por palabras clave mediante Asking como hemos visto en el otro captulo. Tienes mucha ms informacin en la seccin 15 de la documentacin (15: Tables).

Listando contenidos Por ltimo aplicaremos una regla general: "Before listing contents...", que agrupar los objetos de un mismo tipo. Adems queremos que en el caso de las anotaciones escriba una frase en lugar de una lista. Esto ltimo puede ser muy til, porque por lo general, los inventarios que ofrece Inform son exactos pero textualmente pobres. Aqu va mi propuesta: Before listing contents while taking inventory: group anotaciones together. Rule for grouping together anotaciones: say "en el mapa puedes ver el dibujo de una isla, una cruz, un smbolo y un escrito.". Tienes ms informacin al respecto en la seccin 17.13. Listing contents of something y la 17.14. Grouping together something de la "Documentation" del IDE de Inform 7, te recomiendo que le eches un vistazo, ya que los jugadores continuamente estarn revisando sus posesiones, y queremos que luzcan lo mejor posible.

Cambiar al jugador
En el anterior captulo dejamos un cocodrilo a medias: nuestro hroe era en realidad un alumno dormido en clase. Vamos a aprovechar la capacidad de Inform para crear personajes y asignarlos al jugador. Para empezar, crearemos al alumno y al aula (copia y coloca el cdigo en

sus secciones correspondientes):

The aula is a room. It is female. The printed name of the aula is "Aula de historia". The description is "Ests en clase de historia. Todos tus compaeros te miran divertidos al ver que te has vuelto a dormir en plena clase.".

Sebastian is a man in the Aula. The printed name of Sebastian is "Sebastin". The description is "Eres un alumno de instituto, aburrido en plena clase de historia."

Y por ltimo, vamos a hacer que cuando el jugador "despierte", se de cuenta de que se ha quedado dormido en clase. Para ello utilizaremos un "Instead of waking up:" para decir que cuando despierte salga un texto y finalmente, pase a ser el alumno de la clase con "now the player is Sebastian". Aqu va mi propuesta: Instead of waking up: say "Oyes una voz a lo lejos que te dice: 'Sebastin! Despierta, Sebastin! Otra vez te has quedado dormido en clase... [bold type]Sebastin!'[roman type][paragraph break]";

wait for any key; say "Aturdido, te despiertas de un sobresalto. Te habas quedado completamente dormido en clase de historia, justo cuando el profesor estaba explicando todo el rollo de la colonizacin... a quin le importar, si ya hace tanto de eso?[paragraph break]'Sebastin, me puedes decir de qu estaba hablando?' te pregunta airado el profesor Antonio..."; wait for any key; now the player is Sebastian.

Date cuenta que con la orden "now the player is..." podemos asignar como jugador a cualquier personaje del juego... incluso la serpiente! Haz la prueba, pon "now the player is the serpiente." Qu sucede? Funciona pero no acaba de quedar bien, porque no hemos preparado convenientemente a la serpiente. Pero las posibilidades son infinitas... imagnate lo que puedes hacer con esto, por ejemplo: un mago que convierte a prncipes en sapos, un vampiro que se transforma en murcilago, etc.

Profundizando conversaciones

en

las

tablas:

Aprovechando el gran poder de las tablas en Inform, vamos a ver una utilidad para ellas: crear conversaciones. De esta forma ya sabrs dos formas de crear conversaciones. Te recomiendo que le eches un vistazo a la seccin 15.13. Topic columns de la documentacin, que profundiza bastante en la creacin de conversaciones. Bien, vamos a crear al profesor y su tabla de conversacin. Section 4 - El profesor A profesor is a man in the aula. "El profesor Antonio te mira con severidad.". The description is "Tiene un gran parecido con el nufrago de tu sueo.". Understand "Antonio" as the profesor. After asking the profesor about a topic listed in the Table of profesor_conversacion, say "El profesor dice: [muse entry]." Table of Profesor_conversacion Topic Muse "hola" or "explicacion" or "pregunta"

"'Te he hecho una pregunta! Qu es lo que estaba explicando?'" "colonizacion" "'Exacto, Sebastin... veo que por lo menos saba a qu venas a clase. Quin fue Coln?'" "colon" or "cristobal colon" "'Te he hecho una pregunta, quin fue Coln?'" "descubrimiento" or "descubridor" "'Coln fue un descubridor, Sebastin... y quin fue Hernn Corts?'" "conquistador" or "hernan cortes" "'Hernn Corts fue el que conquist el imperio azteca, lo que hoy es Mxico.'" "no se" or "no lo se" or "ayuda" "'Cmo que no sabes? Hablamos del descubrimiento de Amrica!'" "america" or "continente" "'S, Amrica, lo que descubri Coln te suena el nombre, Sebastin?'" Comprendes el anterior cdigo? Primero creamos al profesor con "A profesor is a man in the aula.", despus llamamos a la tabla de conversacin con el "After asking the profesor about a topic listed in the Table of profesor_conversacion". No te parece ms fcil que como lo hacamos antes?
Nota: Tienes que tener especial cuidado en separar cada Topic y Muse con una tabulacin, no valen espacios: usa el tabulador.

Ahora podemos crear conversaciones de forma ms ordenada y sin tantas lneas de cdigo, pues solo hace falta una tabla. De todas maneras, el uso de las tablas puede ser todo lo complejo que quieras, ahora hemos visto

un par de utilidades, pero a medida que sepas programar ms te dars cuenta de sus mltiples posibilidades.

Dormir al jugador Y para volver al estado anterior? Claro que s! Habr que dormirse. Para ello, nada ms fcil que incluir la siguiente regla: Instead of sleeping: if the player is Sebastian: say "Lentamente tus ojos se cierran de nuevo y te sumerges en tu sueo... [paragraph break]"; wait for any key; now the player is conquistador; otherwise: say "Creo que ya estoy durmiendo...". Complalo y prubalo... todo bien? Sinnimos para verbos existentes Tal vez compruebes que "dormir" o "duermete" no estn de base en el vocabulario de Inform (pero s "duerme"), no hay problema puesto que podemos asignar sinnimos a verbos que ya estn implementados pero que no gozan de suficientes sinnimos. As que podemos poner lo siguiente: Understand "duermete", "dormir" as sleeping. Por ejemplo, podemos crear un sinnimo para "coger" que sea "agarrar", con esta simple sentencia: Understand "agarra [something]" as taking.

Tenlo en cuenta antes de crear verbos nuevos: a veces no hace falta crear ms verbos, sino extender y poner sinnimos a los existentes.

Conversaciones por mens


Es posible una tercera forma de conversacin: la conversacin por mens. Hasta ahora hemos visto cmo decir palabras mediante sentencias o tablas, pero esto requiere que el jugador sepa qu tiene que decir. Podra suceder que el jugador no se estuviera enterando de nada y no supiera de qu hablar con un personaje. Para ello estn las conversaciones por mens, que son ms amigables para los jugadores nveles, aunque un poco ms complicadas de programar. Para empezar, descarga e instala las dos extensiones indispensables para que funcionen las conversaciones por mens: la Reactable Quips SP.i7x y la Quip-Based Conversation SP.i7x, que podrs descargar de aqu . Una vez instaladas las extensiones vamos a crear un proyecto nuevo, ya que no es correcto poner diferentes sistemas de conversacin en un mismo juego (aunque en determinadas ocasiones puede hacerse, depende del contexto del juego). Vamos a crear pues un nuevo proyecto y llamaremos a las extensiones instaladas habituales y adems, a la de conversacin: Include Include Short. Include Michael Spanish by Sebastian Arg. Basic Screen Effects SP by Emily Quip-Based Conversation SP by Martin.

En efecto, la ltima es la que hace posible la conversacin

por mens. Imaginemos que el jugador se encuentra en una tienda de ropa y quiere consultar algo con la dependienta. Vamos a crear la tienda y la dependienta: Tienda is tienda de un regalo empezar a a room. "Te encuentras en una ropa femenina. Tienes que hacerle a tu novia y no sabes por dnde mirar."

a dependienta is a woman in Tienda. The description is "Una impresionante dependienta te observa divertida tras el mostrador." Hasta aqu, nada nuevo, pero incluiremos la siguiente sentencia: The litany of the dependienta is the Table of dependienta Comments. Con la que le decimos a Inform que el discurso o letana de la dependienta, la "litany", es la tabla "Table of dependienta Comments". Ahora tendremos que crear la tabla de conversacin y la tabla de respuestas, pues ambas deben ir juntas. Adems tenemos que especificar cul es la primera opcin de conversacin. He aqu mi propuesta: Table of Quip Texts (continued) quip quiptext atender "'No. Ahora estoy muy ocupada.'"

disculpe "'Ahora no puedo atenderle!'" nada "'Claro que hago algo: estoy hablando con usted!'"

Table of dependienta Comments prompt response enabled "Hola, me puede atender?" atender 1 "Ah! Disculpe, es que estoy..." disculpe 0 "Pero si no est haciendo nada!" nada 0 After quipping when the current quip is atender: enable the disculpe quip; enable the nada quip. Complalo y prueba a hablar con la dependienta. Hemos creado una conversacin sencilla pero efectiva con una dependienta un tanto arisca. Como puedes ver, primero hemos creado la tabla de respuestas "Table of Quip Texts (continued)", donde hemos habilitado una respuesta por cada cuestin o "quip". A continuacin viene la tabla de "quips", en las que vers un 1 o un 0 al final de cada quip, esto quiere decir que si hay un 1 la cuestin est habilitada, y si hay un 0 est deshabilitada. Cmo se habilitan? En el siguiente bloque lo vemos: "enable the disculpe quip;" que significa "habilita la cuestin disculpa". Si quisiramos deshabilitar la cuestin, pondramos "disable".

Un ejemplo de conversacin por mens Existe un ejemplo prctico que se utiliza desde los inicios de las conversaciones por mens en Inform, en el que se incluyen tablas de conversacin que llaman a otras tablas de conversacin y que pueden hacer terminar el juego. He aqu mi traduccin del ejemplo "Joe Schmoe Revisited": "Conversaciones con Juan" The story headline is "Hablar por hablar". Include Spanish by Sebastian Arg. Include Basic Screen Effects SP by Emily Short. Include Quip-Based Conversation SP by Michael Martin. Use no scoring and no deprecated features. Chapter 1 - The Setup When play begins, say "Habla con Juan!" Bar is a room. "Ests en el bar." Juan is a man in Bar. The description is "Aqu est tu colega Juan." The litany of Juan is the Table of Juan Comments. The greeting of yourself is selftalk.

Casting Xyzzy is an action applying to nothing. Understand "xyzzy" as casting xyzzy. Carry out casting xyzzy: deliver the xyzzy quip; run a conversation on the Table of Magic Followups. Chapter 2 - The Script Section 1 - The Text Table of Quip Texts (continued) quip quiptext selftalk "Hablar contigo no es particularmente divertido." who-am-i "'Mal. Inform me odia.'" why-hate "'Intento compilar pero me salen 40 errores.'" yay-inform "'Has hecho un tutorial? Voy a leerlo!" hate-you "'Te odio!'[paragraph break] Juan te mata." hate-you-2 "'Te odio!'[paragraph break] Juan te mata.." hate-you-3 "'Te odio!'[paragraph break] Juan te mata." hate-pedants "'Odio a los pedantes como t!'[paragraph break] Juan te mata." yay-monkeys "'Claro que me gustan los monos.'" yay-you "'Ahora somos realmente amigos!'" say-nothing "Te quedas callado." ehn-apes "'Los gorilas molan, claro que

s.'" ehn-lemurs "'No tengo una opinin formada sobre los lemures.'" xyzzy "Cul es la otra palabra mgica?" Table of Juan Comments prompt response enabled "Qu tal, Juan?" who-am-i 1 "Porqu te odia Inform?" why-hate 0 "Ah... has ledo mi tutorial?" yayinform 0 "No me extraa..." hate-you 0 "Ja ja ja, Inform te odia!" hate-you2 0 "Hey, te gustan los monos?" yaymonkeys 1 "Solo a los locos les gustan!" hate-you3 0 "Pensaba que sabas ms sobre simios." hate-pedants 0 "A m tambin me gustan." yay-you 0 "Mejor me callo." say-nothing 1 Table of Quip Followups (continued) quip option result yay-monkeys "Y los gorilas?" ehn-apes yay-monkeys "Y los lemures?" ehnlemurs Table of Magic Followups prompt response enabled "PLUGH" yay-you 1 "Hay al menos dos ms, cul de ellas?"

hate-pedants

Section 2 - Dialogue affects itself After quipping when the current quip is whoam-i: enable the why-hate quip; enable the hate-you quip. After quipping when the current quip is whyhate: disable the hate-you quip; enable the hate-you-2 quip; enable the yay-inform quip. After quipping when the current quip is yaymonkeys: disable the who-am-i quip; enable the hate-you-3 quip; enable the hate-pedants quip; enable the yay-you quip. After quipping when the current quip is saynothing: enable the say-nothing quip; terminate the conversation. Section 3 - Dialogue affects the game After quipping when the current quip is hate-you: end the story saying "Ests muerto". After quipping when the current quip is

hate-you-2: end the story saying "Ests muerto". After quipping when the current quip is hate-you-3: end the story saying "Ests muerto". After quipping when the current quip is hate-pedants: end the story saying "Ests muerto". After quipping when the current quip is yayinform: end the story finally saying "Has ganado". After quipping when the current quip is yayyou: end the story finally saying "Has ganado".

Como puedes ver, se trata de una conversacin de ejemplo bastante estpida, pero que funciona perfectamente y que puedes modificar para tus propios juegos.

Ahora la historia la terminas t


Llegados a este punto del tutorial, creo que ha llegado el momento de que t mismo termines la historia. Ya tienes los conocimientos necesarios para crear cualquier localizacin, objeto y personaje que imagines, as como todo el vocabulario nuevo que necesites, y tambin las escenas y tablas que precises. La historia que yo haga ser diferente de la tuya, seguramente. Yo intentar cruzar las dos historias enlazadas de alguna forma, pero a partir de ahora mi tutorial se centrar en otros aspectos de la programacin

que no tendrn que ver con la historia de la isla, como podrs ver en el siguiente captulo...

En el siguiente captulo
Vamos a ver la diferencia entre un juego en cdigo Z y otro en cdigo Glulx; y adems vamos a probar ms extensiones, se te ha ocurrido hacer un librojuego con Inform? Vers que es posible...

6. Ms extensiones: personajes mviles, secuencias, mens e hipervnculos


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

En el anterior captulo vimos cmo crear tablas y conversaciones por mens, entre otras cosas. En esta ocasin aprenderemos a crear personajes mviles, secuencias, mens e hipervnculos, gracias a las extensiones disponibles para Inform. Date cuenta que las extensiones tambin tienen su documentacin particular. Si revisas la pestaa de Documentation, abajo de todo vers "Installed Extensions"; si haces click ah te saldr un listado con todas las extensiones que tienes instaladas en tu Inform 7, y si clicamos en una de ellas (por ejemplo la "Basic Screen Effects by Emily Short") nos saldr toda su documentacin y ejemplos, con lo que podrs hacer un mejor uso de la extensin. Y ahora, vamos all! Contenidos
1. 2. 3. 4. 5.

1 2 3 4 5

Extensiones habituales Personajes mviles Secuencias Mens Hipervnculos

1. 2. 3. 4.

5.1 5.2 5.3 5.4

Diferencias entre Z-Code y Glulx Probando enlaces Creando un librojuego Salidas como enlaces

Extensiones habituales
Recuerda que siempre tienes que utilizar la extensin Spanish para que Inform entienda espaol. Vamos a recordarlo. Primero de todo, como siempre, llamamos a las libreras habituales.

La indispensable para que Inform entienda espaol: Include Spanish by Sebastian Arg. La prctica librera para efectos bsicos de pantalla: Include Basic Screen Effects Sp by Emily Short. Y por ltimo, la til librera de ayuda para el jugador: Include Basic Help Menu SP by Emily Short. La primera extensin es obligatoria, las otras dos son opcionales pero altamente recomendables. Y ahora vamos a ver otras extensiones que son tambin muy tiles y que darn un toque de calidad a nuestras creaciones.

Personajes mviles
Vamos a crear un nuevo proyecto donde veremos cmo programar personajes mviles, esto es, que no estn fijos en una localidad, sino que se puedan mover libremente por el mapa del juego, o asignarles una ruta. Para ello vamos a servirnos de la librera "Patrollers" que puedes descargar de aqu (enlace directo ) Primero de todo, llamamos a la extensin o librera: Include Patrollers Sp by Michael Callaghan. Vamos a crear un mapa por donde se mover el personaje. Pongamos que nuestro relato se desarrolla en un centro comercial, he aqu mi propuesta: The centrocomercial is a region. The Centro, the Centro2, the Centro3 and the Centro4 are in the centrocomercial. The tiendas is a backdrop in the centrocomercial. The description is "Multitud de tiendas de todo tipo.". Understand "tienda", "centro", "centro comercial", "comercios" and "comercio" as the tiendas. The gente is a backdrop. The gente is everywhere. The description is "Hay gente por todos lados, entrando y saliendo de todas las tiendas y comercios.".

Centro is a room. The printed name of Centro is "Centro comercial". The description is "Ests en un centro comercial repleto de gente y tiendas de todo tipo.". Centro2 is west of Centro and east of Centro4. The printed name of Centro2 is "Centro comercial". The description is "Ests en un centro comercial repleto de gente y tiendas de todo tipo.". Centro3 is west of Centro4 and east of Centro. The printed name of Centro3 is "Centro comercial". The description is "Ests en un centro comercial repleto de gente y tiendas de todo tipo.". Centro4 is east of Centro3 and west of Centro2. The printed name of Centro4 is "Centro comercial". The description is "Ests en un centro comercial repleto de gente y tiendas de todo tipo.".

Y una vez tenemos localidades por donde moverse, creamos un primer personaje, al que tendremos que asignar la clase "Patroller": The mujer is female in the Centro. The mujer is a patroller. The mujer is aimless. The drive of the mujer is 50. Con "The mujer is a patroller" le decimos a Inform

que el personaje mujer es de la clase patroller. Adems tenemos que indicarle el tipo de movimiento que hace, en este caso es un movimiento aleatorio, por lo que pondremos "aimless", y su frecuencia de movimiento ser del 50% gracias a la sentencia "The drive of the mujer is 50". Por ltimo, queda activar el movimiento del personaje: When play begins: activate the mujer. Siempre podremos activar a un personaje "patroller" con la orden "activate", o pararlo con la orden "deactivate", por ejemplo as: Instead of kissing the mujer: say "Muacs!"; deactivate the mujer. Vamos a ver si funciona, compila el ejemplo anterior y observa cmo la mujer se mueve por el centro comercial y se para cuando la besamos.

Es posible asignar rutas predefinidas para los personajes. Para ello utilizaremos la propiedad "RoomTable" y la clase "RoomLed", vamos a verlo modificando el comportamiento de movimiento actual de la mujer, que pasar del aleatorio "aimless" a la ruta de la tabla "de_tiendas": The mujer is female in the Centro. The mujer is a patroller. The mujer is RoomLed. The RoomTable of the mujer is the Table of de_tiendas. Table of de_tiendas TargetRoom Centro Centro2 Centro3 Importante: en la tabla de movimiento se deber especificar la ruta en la columna "TargetRoom", poniendo en primer lugar la localidad de inicio del personaje.
Nota: Podra moverse tambin mediante la propiedad "DirectionTable", mrate la documentacin de la extensin Patrollers Sp.

Un personaje incluso podra seguir al jugador mediante "Following" de manera muy sencilla; modifica a la mujer de la siguiente manera: The mujer is female in the Centro3. The mujer is a patroller. The mujer is following. Every turn: if the mujer is in location, deactivate the mujer. Compila y ejecuta el ejemplo. Gracias a la sentencia "The mujer is following." el personaje se mueve hacia nosotros. Vers que la mujer llega hasta tu posicin, incluso si cambias de localidad (hasta que llega a tu posicin, en cuyo caso se para). Es importante desactivar a un personaje que nos persigue si llega hasta nuestra posicin, ya que si no Inform nos dar un error, tenlo en cuenta. En mi ejemplo he puesto un "every turn", pero podra poner otra cosa, por ejemplo podra tener lugar una secuencia de amor... lo que t elijas, pero no te olvides de los personajes que pululan por el relato, no los abandones... ellos nunca lo harn y te lo demostrarn con errores!

Secuencias
Es posible crear secuencias en Inform 7, es decir, lapsos de tiempo no-interactivo donde van saliendo textos en pantalla, que pueden servir como introduccin o cambio de escena. Para ello existe la librera Cortos, que puedes descargar de aqu (enlace directo ). Veamos un ejemplo prctico con un nuevo proyecto en Inform. Primero de todo, como siempre, llamamos a la librera que nos ocupa, la "Cortos", para poder hacer secuencias de texto: Include Cortos by Johan Paz. Bien, ahora vamos a crear una secuencia de introduccin para un relato de terror. La forma de crear una secuencia es la siguiente: crear una tabla con, al menos, una columna llamada 'phrase'; bajo esta columna habr que incluir 'texto' a modo de prrafos, que se irn mostrando durante la secuencia: Table of Secuencia 1 phrase "Jams pens que el horror se esconda tras bellas mscaras." "Nunca cre que me iba a suceder algo as." "Pero, a veces, la gente..." "no es lo que parece." Para mostrar esta secuencia basta con invocar el comando

'tell the fragment on', de esta forma: tell the fragment on Table of Secuencia 1 Existen adems dos variantes para este comando: tell the fragment on Table of Secuencia 1, cleaning the screen que limpiara la pantalla al finalizar la secuencia y: tell the fragment on Table of Secuencia 1, cleaning the screen after each phrase que limpiara la pantalla tras cada prrafo mostrado. En la imagen siguiente vemos un ejemplo de introduccin usando la librera "Cortos" y la "Basic Screen Effects":

Mens
Es posible crear mens en Inform 7, para ello haremos uso de la librera Menus SP, que puedes descargar de aqu (enlace directo ) Primero de todo, llamamos a ella: Include Menus SP by Emily Short. Vamos a crear una tabla de ejemplo llamada "Inicio". Cada tabla de men debe llevar invariablemente cuatro columnas: title, subtable, description y toggle. En "title" ir la frase o palabra que el jugador ver como opcin, por ejemplo "Jugar" o "Ayuda". En "subtable" podremos llamar a otras tablas simplemente poniendo su nombre, por ejemplo en Ayuda pondremos la "Table of Basic Help Options" que viene por defecto con la librera "Basic Help Menu SP"; en caso de que no pongamos ninguna subtabla, pondremos "--". En "description" ir el texto de la opcin de men, como por ejemplo una explicacin del juego, y si se deja vaca (porque llamamos a una subtabla, por ejemplo) se pondr "--". Por ltimo, en "toggle" se puede poner una regla del tipo "carry out" como "switch" o "a number", si la dejamos vaca habr que poner tambin un "--". Veamos mi propuesta de men para un empezar a jugar: Table of Inicio

title subtable description toggle "Jugar a [story title]" -"Esto es una demo." quit rule "Introduccin" -"Esto es una introduccin." -"Crditos" -"Esto son los crditos." -"Ayuda" Table of Basic Help Options --Y llamaremos a la tabla desde el inicio del juego: When play begins: change the current menu to the Table of Inicio; carry out the displaying activity; clear the screen; try looking. E incluso podemos crear una accin nueva para llamar a la tabla desde el juego: inicing is an action applying to nothing. understand "inicio" as inicing. report inicing: change the current menu to the Table of Inicio; carry out the displaying activity; clear the screen; try looking. Aqu un ejemplo de men funcionando junto con la librera Cortos:

Hipervnculos Tal vez quieras poner hipervnculos en tu juego, para dar la posibilidad al jugador de hacer click sobre una palabra en el texto. Esto es posible gracias a la extensin Inline Hyperlinks. Descarga e instala las siguientes extensiones: Text Capture y Inline Hyperlinks. Una vez correctamente instaladas, llama a la Inline Hyperlinks: Include Inline Hyperlinks by Erik Temple. Con lo que ya podremos utilizar hiperenlaces. Una forma sencilla de llamar a ellos es con el token "[link]", que har posible el enlace con la palabra que lo lleve. Por ejemplo, podemos examinar con un click, vemoslo: The castillo is a room. "Te encuentras en un castillo espeluznante.". The espada is here. It is female. The description is "Una espada mgica flota en el aire." Before reading a command: say "Quieres [link]examinar la espada[end link]?"

Tal vez te haya dado error al compilar, aunque todo lo

anterior es correcto... porqu? Lo vemos ahora...

Diferencias entre Z-Code y Glulx Bueno, resulta que esta extensin es solo para "Glulx", y hasta ahora estbamos compilando en Z-Code. Las diferencias entre Glulx y Z-Code se basan esencialmente en que el primero usa nicamente texto, y el segundo puede utilizar enlaces y multimedia, como grficos y sonidos. Esto se puede cambiar en la pestaa "Settings", cambiando el Story File Format a Glulx, como muestra la imagen:

Probando enlaces Bien, ahora ejecuta el juego y pulsa sobre el link; el juego lo entender y examinar la espada. Con este sencillo sistema pueden hacerse librojuegos en Inform. Vamos a ver una opcin an ms sencilla pero muy potente, con la que podremos examinar objetos con solo pulsar sobre su nombre. Esto se consigue con el token "[as]" de la siguiente manera: The espada is here. "Una [link]espada[as]examinar espada[end link] mgica". It is female. The description is

"Una espada mgica flota en el aire." Gracias a la cadena de texto "Una [link]espada[as]examinar espada[end link] mgica" conseguimos que el jugador examine la espada con solo hacer click sobre su nombre. Has de tener especial cuidado en poner la palabra en cuestin entre [link] y [end link], y la accin tras el [as], tal como la escribira el jugador.

Creando un librojuego Con todo lo anterior, pasemos ahora a hacer algo ms vistoso. Veamos un ejemplo prctico, con un tpico texto de librojuego, copia el siguiente cdigo: "Librojuego" Include Spanish by Sebastian Arg. Include Basic Screen Effects SP by Emily Short. Include Inline Hyperlinks by Erik Temple. Use no scoring. The castillo is a room. "Te encuentras en el tenebroso castillo del conde Drcula. La dbil luz de tu [link]lmpara[as]examinar lampara[end link] apenas ilumina una lgubre estancia llena de [link]telaraas[as]examinar telaranas[end link]. Unas tortuosas [link]escaleras[as]ir arriba[end link] son la nica salida posible...". The lampara is carried by the player. The description is "Debes darte prisa, se est acabando la luz...". Some telaranas are here. They are scenery.

The printed name of telaranas is "telaraas". The description is "Terrorficas telaraas... un momento! Parece que tras ellas hay una [link]puerta[as]examinar puerta[end link]." A puerta is here. It is female and scenery. The description is "Una enigmtica puerta tras las telaraas parece albergar un mal an mayor... [link]qu se esconder tras ella?[as]abrir puerta[end link]". Instead of opening the puerta, end the story saying "Has encontrado la tumba del conde Drcula!". The escaleras is up of the castillo. "Te sorprende encontrar una habitacin vaca... la nica opcin es volver [link]abajo[end link].".

Como ves, hemos hecho un uso intensivo de los links para crear un librojuego, que por otro lado es perfectamente jugable como relato interactivo. Tan solo habr que tener especial cuidado en poner bien las acciones tras el [as], y programar correctamente todos los links que queramos que sean enlazables.

Salidas como enlaces Veamos ahora un ejemplo ms complicado: hacer que las direcciones sean enlaces. Para ello voy a traducir el ejemplo que incluye la extensin Inline Hyperlinks, pues funciona de maravilla. Vamos a hacer uso de los hiperenlaces para poder hacer click directamente sobre una determinada direccin, en lugar de escribir la salida. Imaginemos que queremos programar un laberinto, y queremos que todas sus salidas puedan ser clickeables por el jugador. Primero de todo vamos a crear la localidad "Laberinto", que nos servir para todas las localidades del laberinto: The printed name of a room is "Laberinto". The description of a room is usually "Un laberinto de oscuros y tortuosos corredores. Salidas: [exits]".

Como ves, es posible poner las salidas de una localidad utilizando el token "[exits]". Sigamos ahora con algo ms complicado, que har que la descripcin de las salidas se ajuste a lo que queremos, que no es otra cosa que poder hacer click sobre ellas. El cdigo siguiente lo consigue: To say exits:

let count be the number of adjacent rooms; if count is greater than 0: repeat with destination running through adjacent rooms: let the way be the best route from the location to the destination, using even locked doors; let dir be indexed text; let dir be "[way]"; let dir be "[dir]"; say "[link][way][as]ir al [dir] [end link]"; let count be count minus 1; if count > 0: say ", "; say ". ";

Fjate en el token "[link]", pues es el encargado de hacer que una palabra sea clickable. Terminanos el laberinto y ejecutamos el juego: R01 is a room. R02 is north of R01. R03 is east of R01. R04 is north of R02 and northwest of R03. R05 is northeast of R02. R06 is north of R05. R07 is west of R06. R08 is southwest of R04 and northwest of R02. R09 is east of R06. R10 is northeast of R06. R11 is east of R10. R12 is southeast of R09. R13 is south of R12. R14 is northeast of R12. R14 is southeast of R11. R15 is up from R03. R16 is east of R15. R17 is north of

R16. R18 is down from R17. The description of R18 is "Oscuros y tortuosos corredores, pero... espera, al noreste... Puedes ver una salida! Salidas: [exits]" Exit is northeast of R18. Exit is outside from R18. The printed name of Exit is "Afuera". "Has salido hacia la luz." Southwest from Exit is nowhere. Inside from Exit is nowhere. After looking in Exit, end the story saying "Conseguiste salir del laberinto".

Aqu una muestra del cdigo anterior funcionando:

En el siguiente captulo... Vamos a aprender a poner grficos y sonidos en nuestros proyectos de Inform 7, gracias a las capacidades de la mquina Glulx, y a probarlos en un intrprete de ficcin interactiva como Gargoyle. Te lo vas a perder?

7. Grficos y sonidos
Inform Por
Versin

7:
1.1

Empezando Xavi
Fecha

a
revisin:

programar C.
18/01/11

Inform 7 es capaz de mostrar imgenes y reproducir sonidos gracias a la mquina virtual Glulx. Veremos cmo en esta parte del tutorial. Contenidos
1.

2.

3.

4.

1 Dos formatos distintos: Z-Code y Glulx 1. 1.1 Z-Code: slo texto 2. 1.2 Glulx: con multimedia 3. 1.3 Intrpretes 2 Cmo poner grficos 1. 2.1 Definir el tamao y la posicin de la pantalla grfica 2. 2.2 Cambiar el color de la pantalla grfica 3. 2.3 Poner una imagen (sin la pantalla grfica) 4. 2.4 Poner una imagen en una pantalla grfica definida por el programador 5. 2.5 Poner una imagen por localidad 3 Sonidos 1. 3.1 Definir sonidos 2. 3.2 Escuchar los sonidos 4 En el siguiente captulo

Dos formatos distintos: Z-Code y Glulx


Como has visto en el anterior captulo, Inform produce

cdigo fuente que puede ser interpretado por dos mquinas virtuales: la mquina Z y la mquina Glulx. De todo esto el programador no debe preocuparse, puesto que simplemente deber seleccionar el tipo de archivo final en la pestaa Settings, asegurndose que est marcada la opcin "Glulx" en caso de que su proyecto tenga grficos, sonidos o hipervnculos. Z-Code: slo texto Para proyectos sin grficos y de corta extensin siempre seleccionaremos la opcin Z-Code version 5. Para proyectos ms largos ser mejor seleccionar la opcin ZCode version 8 (aunque es preferible que sea el propio Inform quien nos avise de que un proyecto es demasiado largo para compilarse en Z-Code version 5). Los proyectos compilados tendrn la extensin .Z5 o .Z8 dependiendo de la versin. No es aconsejable en ningn caso compilar para Z-Code version 6. Existe adems la opcin "Bind up into a Blorb file on release", que si est seleccionada crear un archivo Blorb de nuestro juego. Esto significa que la extensin del juego ser .zblorb, que es ms moderna y por tanto algunos intrpretes no la reconocen an. Lo mejor es crear varias versiones compiladas de un mismo proyecto (Z5 y Zblorb, por ejemplo) y distribuirlas juntas, en la medida de lo posible, para que los usuarios con intrpretes antiguos o mviles puedan disfrutar de nuestro proyecto. La diferencia principal entre Z5 y Zblorb es que ste ltimo aglutina la informacin bibliogrfica del proyecto, adems de su imagen de cubierta, algo as

como las portadas del libro.

Nota: los telfonos mviles con el sistema operativo Android o iPhone pueden leer archivos en Z5, pero no Zblorb, dado que por el momento este formato no es soportado por sus intpretes. Tienes ms informacin al respecto aqu: iPhoneFrotz , Hunky Punk , Twisty . Tambin existen intrpretes de cdigo Z y Glulx para eReaders, como Iliad .

Glulx: con multimedia Para proyectos largos o con multimedia es preferible compilar para la mquina Glulx, dado que es un sistema ms moderno (el Z-Code es herencia del sistema de Infocom). Un proyecto compilado en Glulx tendr la extensin .glx o .blb. De igual manera, si seleccionamos la opcin "Bind up into a Blorb file on release" nos crear un archivo gblorb, con las mismas caractersticas que su versin zblorb. Un archivo Glulx no tiene tanta portabilidad como un archivo en Z-Code, por el momento, por lo que siempre ser mejor ofrecer dos versiones de tu proyecto: uno con grficos y otro sin ellos. Dicho de otro modo, cuando empieces un nuevo proyecto trabaja con l como si fuera slo para Z-Code, y cuando lo tengas acabado complalo en dicho formato; luego aade los grficos y sonidos necesarios y complalo bajo Glulx: as tendras las dos versiones. Intrpretes Existen intpretes de Z-Code y Glulx para cada plataforma, aunque mi recomendacin personal es que tu proyecto lleve un intrprete de serie, algo que veremos en el prximo captulo. Sin embargo, es bueno que en tu ordenador tengas varios intpretes para probar cmo se ver tu proyecto en cada uno de ellos. Los ms populares son el Frotz (para Z-Code/Zblorb), el Glulxe (para Glulx/Gblorb) y el Gargoyle (para ambas mquinas, recomendado).

Cmo poner grficos


Vamos a hacer uso de un par de extensiones que nos facilitarn la tarea de incluir grficos en tu proyecto. Descarga e instala las siguientes libreras: Simple Graphical Window.i7x y Location Images.i7x . Primero de todo, vamos a cambiar las opciones de compilacin, en la pestaa "Settings" selecciona la opcin Glulx. Una vez seleccionada, llama a la primera extensin: Include Simple Graphical Window by Emily Short. Definir el tamao y la posicin de la pantalla grfica Y vamos a hacer una primera prueba dividiendo la pantalla en dos mitades: una para grficos y otra para texto: The graphics window proportion is 50. Mundo is a room. "Un mundo con una pantalla grfica." Y decidimos la posicin de los grficos; si los queremos a la izquierda: The graphics window position is g-left. ...o a la derecha:

The graphics window position is g-right. ...arriba: The graphics window position is g-above. ...o abajo: The graphics window position is g-below. Haz la prueba con todos y observa cmo pone Inform la pantalla grfica. Observa adems que podemos cambiar la proporcin, podemos poner por ejemplo: The graphics window proportion is 15. Aunque tambin podemos definir el tamao de la pantalla grfica por pxeles. Por ejemplo, si queremos que los grficos salgan en la parte de arriba con una extensin de 200 pxeles, pondramos: The graphics window pixel count is 200. The graphics window position is g-above.

Cambiar el color de la pantalla grfica Y podemos cambiar el color de fondo de dicha pantalla grfica: The graphics background color is g-mediumgrey.

Cambiar el color es ms complicado de lo que parece en un primer momento, si necesitas un color distinto de negro, blanco o gris te recomiendo mirar la documentacin de la extensin Glulx Text Effects by Emily Short ya que los colores se definen en hexadecimal. Por defecto se incluyen los siguientes: g-black, g-dark-grey, gmedium-grey, g-light-grey y g-white.

Poner una imagen (sin la pantalla grfica) Vamos ahora a la parte que nos interesa_ cmo poner una imagen? Bien, en mi caso primero voy a buscar alguna imagen por internet libre de derechos, por lo que me dirijo al Banco de Imgenes y Sonidos , y elijo sta:
Nota: Tienes disponibles ms recursos grficos en la wiki del CAAD: Pgina de recursos grficos. : BANCO IMGENES TECNOLOGAS Y SONIDOS DEL INSTITUTO DE NUEVAS

Importante: Inform requiere que el formato de las imgenes sea JPG o PNG. Una vez descargada, voy a ponerla en la carpeta Figures de la carpeta Materials de mi proyecto (tienes ms informacin sobre esto en la seccin 22.4. Gathering the figures de la documentacin de Inform):

Voy a prepar la imagen para que no supere el tamao de 200 pxeles que he puesto antes, cosa que puedes hacer con cualquier programa de retoque fotogrfico, como la Vista previa de Mac o Windows. Y ahora voy a definir dicha imagen para que inform la entienda y la muestre en pantalla: Figure of Mundo is the file "29985__151_a_4.jpg". Y voy a mostrarla, a modo de ejemplo: When play begins: display the Figure of Mundo.

Si ahora compilamos, veremos el siguiente desastre o similar:

Esto es, la capacidad por defecto de Inform de mostrar imgenes deja bastante que desear, pero efectivamente muestra la imagen con un "display"... pero podemos arreglarlo, como veremos a continuacin. Poner una imagen en una pantalla grfica definida por el programador Porqu la imagen anterior no sali en la pantalla grfica? Porque display es la orden por defecto para poner imgenes en Inform 7, pero no la orden adecuada para ponerlas en una pantalla grfica definida por la extensin "Simple Graphical Window". Cmo la pondramos en la pantalla grfica que acabamos de definir? Con la Rule "change currently shown picture to", como veremos a continuacin: When play begins: change currently shown picture to the Figure of Mundo; follow the current graphics drawing rule. As, el cdigo anterior lo cambiaramos por el siguiente, haz la prueba y funcionar: Part 1 - Introduccin The story title is "Una imagen".

The story author is "Xavi C.". The story headline is "'Un ejemplo de grfico dentro de una pantalla grfica'".

Section 1 - Extensiones Include Include Short. Include Include Short. Spanish by Sebastian Arg. Basic Screen Effects Sp by Emily Basic Help Menu SP by Emily Short. Simple Graphical Window by Emily

Section 2 - Definicin de grficos y sonidos The graphics background color is g-white. The graphics window pixel count is 200. The graphics window position is g-above. Figure of Mundo is the file "29985__151_a_4.jpg".

Part 2 - Localidades Mundo is a room. The description is "Un mundo con imgenes.". When play begins: change currently shown picture to the Figure of Mundo; follow the current graphics drawing

rule.

Adems, es aconsejable poner la siguiente Rule: Rule for starting the virtual machine: now the current graphics drawing rule is the standard placement rule.

Y cmo lo haramos para poner la imagen de la localidad actual, en todas las localidades? Poner una imagen por localidad Afortunadamente tenemos extensiones que solucionan todos los problemas. Llama a la Location Images: Include Location Images by Emily Short. Con la imagen anterior en la carpeta Figures, llama a la imagen as: Figure of Paisaje1 is the file "29985__151_a_4.jpg". Con "Figure of Paisaje1 is the file..." le decimos qu archivo de la carpeta Figures es la figura Paisaje1. Y la localidad la programaremos as: Mundo is a room. The description is "Un mundo con una pantalla grfica.". The room illustration is Figure of Paisaje1.

Con el "The room illustration is Figure of Paisaje1" le decimos a Inform que el grfico de la localidad es la figura Paisaje1.

Y ya est! Ahora ya sabes que para mostrar una imagen podemos utilizar la sentencia "display...", y para mostrar una imagen distinta por localidad pondremos "The room illustration is...". Existen otras formas para poner imgenes, te recomiendo que le eches un vistazo al captulo Chapter 22. Figures, Sounds and Files de la documentacin de Inform 7.

Sonidos
Vamos ahora a poner algo de ruido en nuestro proyecto. Primero de todo voy a buscar un sonido en el Banco de Imgenes y Sonidos, y elijo un sonido de tipo OGG:
Nota: Tienes disponibles ms recursos sonoros en la wiki del CAAD: Pgina de recursos sonoros.

Es importante que el sonido est en formato OGG, dado que Inform no soporta ni WAV ni MP3. Tampoco hace falta que te preocupes mucho por esto, puesto que por Internet puedes encontrar programas conversores como el Free Mp3 Wma Converter y programas de sonido que generan archivos OGG como Audacity.

Definir sonidos De igual manera que con las imgenes, los sonidos deben ir en su propia carpeta dentro de Materials, en este caso la carpeta Sounds:

Y en el cdigo fuente, tenemos que definir su nombre: Sound of inicio is the file "[Link]". Y podremos reproducir el sonido mediante la orden "play": When play begins: play the sound of inicio. Si compilas el proyecto, vers que no suena nada, pero el sonido est contemplado: [Sound effect number 3 here.]

Escuchar los sonidos

Para poder escuchar los sonidos, y en general para probar cmo est yendo la programacin de tu juego, es preferible empaquetar el juego y probarlo con un intrprete externo. Vamos a descargar e instalar el intrprete Gargoyle, que puedes conseguir aqu , para todas las plataformas. Una vez instalado, dirgete a Inform y pulsa el botn "Release" (que est al lado de Go!, Replay y Stop). Te saldr una pantalla similar a la siguiente:

Ahora ve a la carpeta Release dentro de la carpeta Materials de tu proyecto y ejecuta el archivo Gblorb que vers ah con el programa Gargoyle. Debera sonar algo!

En el siguiente captulo
Vamos a aprender algo ms acerca de las Releases de Inform, esto es... la publicacin de tu proyecto!

8. Publicacin. Release
Inform Por
Versin

7:
1.2

Empezando Xavi
Fecha

programar C.
17/01/11

revisin:

En esta parte final del tutorial vamos a ver una de las tareas ms importantes de Inform 7: la Release. Hacer una Release significa generar un archivo que puede ser ejecutado por un intrprete de ficcin interactiva, pero Inform 7 adems nos provee de varios aadidos o "feelies" que mejorarn ostensiblemente la publicacin de tu obra. Muchos juegos se quedan prcticamente inditos porque sus autores no han publicado correctamente su proyecto. No es solamente una tarea de promocin, hay que tener en cuenta muchos detalles para que tu obra pueda ser disfrutada por el mayor nmero de personas posible. No es suficiente con enviar un archivo Z a un servidor, hay que escribir unas mnimas instrucciones, hay que ofrecer alguna ayuda e incluso crear una pgina dedicada en Facebook. Todo esto vamos a verlo ahora, vamos all! Contenidos
1.

1 Release 1. 1.1 Opciones adicionales de publicacin 2. 1.2 Publicando tu obra en Facebook 3. 1.3 Crear un ejecutable para Windows

Release
Vamos a hacer una demostracin de Release aprovechando los materiales del captulo anterior: la imagen y el sonido. Te recomiendo encarecidamente que le eches un vistazo al captulo 23. Releasing de la documentacin de Inform 7. Bien, tenemos el siguiente programa:

Part 1 - Introduccin The story title is "Publicando". The story author is "Xavi C.". The story headline is "'Un ejemplo de publicacin'". The story genre is "Tutorial". The release number is 1. The story creation year is 2011. The story description is "Cmo hacer una Release con Inform 7 y no morir en el intento". Section 1 - Extensiones Include Spanish by Sebastian Arg. Include Basic Screen Effects Sp by Emily Short. Include Basic Help Menu SP by Emily Short. Section 2 - Definicin de grficos y sonidos

Sound of inicio is the file "[Link]". Figure of inicio is the file "29985__151_a_4.jpg".

Part 2 - Localidades Mundo is a room. The description is "Un mundo con sonidos.". When play begins: play the sound of inicio; display the figure of inicio.

Fjate en las opciones que siempre estn ah en el editor: Go!, Replay, Stop y Release.

Como tenemos elementos multimedia en el juego, asegrate de tener seleccionada la opcin "Glulx" en la pestaa Settings. Ahora pulsa en Release.

Te generar un archivo Gblorb en la carpeta Release de la carpeta Materials del proyecto. Puedes ir a ella directamente a travs de la ventana Release/Open Materials Folder.

Tu proyecto estar dentro de la carpeta Release:

Una vez all, puedes probar el archivo generado con un intrprete de ficcin interactiva, como por ejemplo Gargoyle.

Opciones adicionales de publicacin Si te has fijado en el informe de empaquetado, habrs visto que te indica otras posibilidades de publicacin: Using 'Release along with cover art', to provide something more distinctive than the default artwork above Using 'Release along with a website' Using 'Release along with an interpreter', for in-

browser play on your website Using 'Release along with the "Such-and-Such" file called "[Link]"', perhaps to add a manual, or a welcoming note Using 'Release along with the source text' Using 'Release along with a solution' Using 'Release along with the library card' Using 'Release along with the introductory booklet'

Por ejemplo, si queremos distribuir nuestro proyecto a travs de una pgina web, lo suyo es incluir un intrprete. Lo haremos as: Release along with an interpreter.

Nos generar una web con un intrprete incrustado, en la carpeta Release, que podremos subir a cualquier servidor de Internet.

Con el siguiente resultado:

Publicando tu obra en Facebook Una de las mejores formas de promocin de tu obra es publicarla en Facebook. Para ello debemos estar inscritos en Facebook y adems estar registrados como desarrolladores, adems de tener los archivos de proyecto subidos a un servidor, habiendo hecho la Release con intrprete, tal como hemos visto en la seccin anterior. Por ejemplo, podramos tener nuestra obra en un servicio de hosting gratuito como el Google Sites, o en Dropbox, etc.

Lo que necesitamos es el archivo Z5, Z8, Blb o Gblorb que hayamos compilado en alguna direccin de internet. Tambin necesitaremos algunos textos para rellenar en los formularios de Facebook. Con todo ello, lo mejor ser leer el tutorial que Incanus escribi en los foros del CAAD:

Tutorial: Publicando Aventuras en

facebook

Crear un ejecutable para Windows Es posible tambin crear un archivo ejecutable .EXE para que se lo descarguen los usuarios de Windows. Es una opcin muy til cuando tienes que distribuir tu obra para un pblico generalista, como podran serlo los usuarios de webs de descargas como ABCdatos , que lo que buscan es un archivo ejecutable directamente, sin ms complicaciones. Para ello haremos uso de una sencilla aplicacin programada por el autor chileno Eliuk Blau : DA Lanzador . Este lanzador es un pequeo programita escrito en NSIS (el sistema de creacin de instaladores gratuito de Nullsoft)

que empaqueta en un nico archivo ejecutable de Windows todos los archivos necesarios para correr una aventura (Intrprete + Aventura + Configuraciones y Otros). Al ejecutar el lanzador, todos los archivos son descomprimidos en un directorio temporal y entonces se lanza la aventura automticamente. Es una forma simple de distribuir un trabajo de ficcin interactiva entre usuarios de Windows que no sepan mucho sobre intrpretes ni sistemas de autora, etctera. Simplemente se hace doble click en el lanzador (que lo trae todo adentro) y la aventura aparecer en la pantalla del jugador, antecedida de una bonita imagen de Splash a eleccin del autor. (Para generar paquetes con este lanzador debes disponer de la herramienta NSIS . Cuando la hayas instalado en tu sistema, descomprime el archivo ZIP, luego da click con el botn derecho sobre el archivo [Link] y en el men contextual selecciona la opcin Compile NSIS Script. Se crear un lanzador de ejemplo llamado [Link]. Puedes ejecutarlo para ver una demostracin de su funcionamiento.)

También podría gustarte