En sus pantallas gracias a la letra ContenidosCréditosUna introducción a Glulx Inform

Una introducción a Glulx Inform

¿Qué es una "Aventura Conversacional"?

Las aventuras conversacionales, o AC (Interactive Fiction en inglés), son un tipo de relato en el cual el oyente (lector) es un participante activo. Una aventura conversacional (generalmente llamada un "juego", incluso si no hay nada similar a un juego en ella) comienza típicamente presentando al jugador un breve escenario ("Aqui hay un estrecho callejón sin salida, con muros que se elevan opresivamente altos en tres direcciones. Una puerta de metal liso se enfrenta a tí al este, cerca del final del callejón. Está firmemente cerrada.") Entonces, el jugador decide qué quiere que el personaje a quien encarna en el juego haga - abandonar el callejón, quizás, o llamar a la puerta. Se entera de lo que pasa, dice qué hacer después, y así sigue este toma y daca hasta que el juego llega a su fin (a menudo con una horrible muerte del personaje). ¡Es divertido! Si el autor estuviera realmente ahí, como el master de un juego de rol, el jugador podría decirle qué quiere hacer, y el autor podría pensar sobre ello un rato, quizás lanzando algunos dados, y responderle cuál fue el resultado. Pero si los cientos de personas que visitan regularmente el IF-archive (depósito de aventuras inglesas) necesitaran que los autores fueran a sus casas para poder jugar los juegos, seguro que tendrían para una larga espera. Por suerte, el medio no es tan dependiente de un contacto cara a cara. En lugar de ello, el autor codifica el juego de antemano - cada descripción de cada localidad, cada posible respuesta a cada petición del jugador - en un fichero. Los jugadores copian el fichero a su propio ordenador, leen el texto que fluye en sus pantallas, esperan a que aparezca un prompt (normalmente un ">"), escriben su orden, leen la respuesta, obtienen otro prompt, escriben otra orden, etcétera. El apartado siguiente detalla el proceso por el cual una AC va desde la cabeza del autor hasta la pantalla del computador del jugador.

AC, de la granja al mercado

De la idea al código fuente

Tras jugar algunas aventuras, mucha gente decide que le gustaría intentar escribir la suya propia. El primer paso es traducir tus ideas en código fuente. El código fuente es un conjunto de instrucciones, escritas en un lenguaje de computador, que definen cosas como qué objetos hay en el juego, qué hacen, cómo reaccionan si el jugador intenta hacerles cosas, etc. Hay muchos lenguajes de computador diseñados específicamente para escribir aventuras (de ahora en adelante ACs), como TADS, Hugo o ALAN. Pero el lenguaje para IF más ampliamente usado, en el momento de escribir esto, es el llamado Inform. Inform es un lenguaje de bastante alto nivel, lo que significa que está más cerca de la forma en que los humanos procesamos la información ("Si el jugador intenta alejar la galletita del loro, el loro debe morderle") de la forma en la que lo hacen los computadores ("001001101110010"). Un fragmento del código Inform que representaría el ejemplo del loro sería este:

   Object loro "el loro Polly"
      with nombre 'loro' 'pajaro' 'polly',
         antes [;
            DejarSalir: 
               if (uno == galletita) 
                 "Polly te muerde la mano cuando intentas mangarle la
                 galletita ~¡Groook! ¡Esa maano!~ declara.";
         ],    
      has animado propio;

Incluso si no sabes Inform, puedes hacerte una buena idea de lo que hace el código anterior sólo mirándolo. Ciertamente es mucho más fácil convertir las ideas a esta forma, que directamente a una secuencia de números. (Y si quieres aprender Inform - lo que necesitarás hacer antes de entrar en la sección dos - un buen sitio para comenzar es la , mantenida por el creador del lenguaje, Graham Nelson.) Algunas piezas de un juego Inform, serán específicas para ese juego (no todos los juegos tienen un loro, por ejemplo). Pero un buen número de piezas serán bastante similares de un juego a otro. Por ejemplo, prácticamente todas las ACs necesitan un parser, la parte del juego que lee complejas frases como "PON TODO EXCEPTO LA GALLETITA EN LA JAULA DEL LORO", y lo rompe en una lista de acciones más sencilla de manejar para el programa ("ejeuta la acción Insertar con los objetos loro, alpiste y periodico, pero no con el objeto galletita, y con la jaula como destino"). Escribir un parser desde cero es extremadamente complejo - la mayoría de los parsers "cocidos en casa" (y unos pocos que suelen aparecer en cada competición de ACs) son terribles. También es una pérdida de tiempo: si una persona ha codificado un parser realmente bueno, y tú quieres que tu parser haga prácticamente lo mismo ¿por qué no puedes usar el código de esa otra persona? Respuesta: sí puedes. El parser, así como al sistema de manejo de objetos y prácticamente cada uno de los elementos típicos de las ACs que reaparecen de un juego a otro, están incluidos en la librería InformATE. Una librería es un grupo de ficheros, escritos en el mismo lenguaje en que tú estás programando, que pueden ser incluídos en tu programa para realizar algunas funciones, sin que tengas que codificarlas por tí mismo. En inform, la cosa es tan fácil como escribir:

   Include "EParser";
   Include "Acciones";
   Include "Gramatica";
 

Programa los objetos y rutinas específicos de tu juego, añade esas tres líneas en los lugares adecuados, y tu programa está completo. Sin embargo, ningún ordenador puede ejecutar código fuente Inform directamente: el código fuente debe ser traducido a código máquina.

Del código fuente al código de máquina virtual

En el corazón de cada ordenador, está la unidad central de proceso, o CPU. El trabajo de la CPU es ejecutar instrucciones, que le llegan en código máquina, que simplemente es una secuencia de dígitos binarios. Por ejemplo, "1101011010010001" nota1.html puede significar "vete a la posición de memoria número 106 y súmale 1 al número que encuentres allí". ¿Cómo sabe la CPU lo que significa esa secuencia de dígitos? Porque los chips de silicio de los que está hecha, están construidos de tal forma que al enviarles una secuencia de impulsos que representan ese número, producen el efecto deseado. ¿Cómo sabes tú, el programador, lo que esa secuencia de dígitos significa? A menos que estés trabajando con un lenguaje de muy bajo nivel, no necesitas saberlo. Para eso están los compiladores. Un compilador es un programa que toma el código fuente escrito en un lenguaje de alto nivel, asequible a las personas (como Inform), y lo convierte en código máquina. Sin embargo, aquí aparece un problema. Cada tipo de máquina es diferente. Una secuencia de bits que para una máquina (como un Pentium) signfique "suma estos dos números", puede significar algo completamente diferente - o no significar nada de nada - para un computador Apple. Una solución a este problema sería coger tu código fuente, buscar una máquina que ejecute Windows, y compilarlo para obtener un fichero ejecutable para Windows - esto es, un programa que puede ejecutarse por si solo, como cualquier otro programa que puedas usar. Después, buscar un Mac y compilar un ejecutable para el Mac. Después pillar una Palm Pilot y compilar una versión para ella. Y después otra para el Acorn, y otra para el Amiga, y después otra cada vez que aparezca un nuevo tipo de ordenador... es fácil ver por qué esta no es realmente la mejor solución, si quieres que gente con diferentes tipos de máquina puedan jugar tu juego. En cambio, la solución usada por la comunidad de ACs, es compilar sus programas para máquinas virtuales. En lugar de compilar para el Mac, o el DOS, los usuarios de TADS compilan para la "máquina virtual TADS". Los usuarios de Hugo compilan para la "máquina virtual Hugo", y los usuarios de Inform compilan para la "máquina Z". Los documentos con la especificación de la máquina Z son como los documentos que especifican cualquier otra máquina real: explican a los creadores de compiladores cómo es el código máquina que la máquina Z es capaz de comprender. La única diferencia es que nunca se han construido realmente máquinas Z: ninguna fábrica conecta chipZ de ZiliZio a una placa baZe, y no encontrarás portatileZ en venta en las tiendas de ordenadores. Pero aún así, puedes compilar programas para ella. Así que has tenido una idea para un juego, has aprendido Inform, has escrito el código fuente, y lo has compilado. Lo que tienes ahora es un fichero con el juego, diseñado para ser ejecutado en una máquina que no existe. ¿Dónde está la gracia? Sigue leyendo.

Del código máquina virtual a tu pantalla

Puede que te sea familiar el concepto de emulador. Un emulador es un programa que te permite ejecutar programas compilados para un ordenador diferente del tuyo, mediante la traducción del código máquina extranjero en el código máquina nativo de tu ordenador. Muchos usuarios de Mac tienen un emulador llamado "Virtual PC" que les permite ejecutar Microsoft Windows, por ejemplo. Las ACs (sobre todo las inglesas) hacen un intenso uso de este concepto: cada máquina virtual, tiene una serie de intérpretes asociados, que son programas que permiten que los ficheros compilados para esa máquina virtual puedan ser jugados en un tipo concreto de ordenador. MaxTADS, por ejemplo, es un intérprete que toma los juegos hechos para la máquina virtual TADS y los ejecuta en el Macintosh. WinFrotz es un intérprete que toma juegos en código para la máquina Z y los ejecuta en máquinas Windows. La máquina Z en particular tiene intérpretes para un asombroso número de plataformas, incluyendo la GameBoy (!). Así que, aunque algunos juegos para máquina Z se distribuyan en forma de ejecutables (usando un programa como JZEXE que junta el fichero del juego con un intérprete específico para una plataforma), la forma más habitual de jugar ACs es bajarse por separado el fichero con el juego que quieres jugar, y el intérprete que puede ejecutarlo en tu máquina, arrancar el intérprete, cargar el juego en él, y empezar a jugar. Y así es como el juego llega desde la cabeza del autor a tu pantalla. Puede que te preguntes ¿pero el paso intermedio de especificar una máquina virtual, no ocasiona simplemente un trabajo extra? Cierto, significa que no tendrás que compilar tu juego para docenas de plataformas diferentes - pero tienes que compilar intérpretes para todas estas plataformas diferentes, de modo que ¿es esto más eficiente? La respuesta es: no lo es, si sólo se va a escribir un juego para la máquina virtual en cuestión. Pero tan pronto como escribas un segundo juego, resulta obvio que usar una máquina virtual merece la pena: compilas tu nuevo juego para la máquina virtual, y el fichero resultante puede ser jugado en todos los intérpretes que ya habían sido creados. Así que si haces un juego con Inform, no necesitas molestarte en compilarlo para Windows, para Macs, para Acorns y para GameBoys - simplemente lo compilas para la máquina Z, y toda la gente con Windows y Mac y Acorn y GameBoy pueden instantáneamente jugarlo, a través de sus intérpretes escritos hace años. Y hasta hace poco, esto habría sido el final del cuento. Pero recientemente, ha sido introducido un nuevo elemento para ahorrar esfuerzos, que recibió el muy denigrado nombre de Glk.
En sus pantallas gracias a la letra ContenidosCréditosUna introducción a Glulx Inform