Archivo por meses: mayo 2007

FIC.tion : Creador de Aventuras conversacionales

¿Qué es FIC.tion?

FIC.tion es un proyecto orientado a crear aventuras conversacionales de forma relativamente sencilla. Su núcleo es el lenguaje SFL.

¿Por qué motivo surge este proyecto?

Necesitaba un tema para la realización de la práctica especial de la asignatura de Compiladores, que requiere el uso de uno o más elementos de un compilador (scanner, parser, generador de código, etc.). Era deseable que la idea fuese original y amena de llevar a cabo, características que reúne ésta.

¿Cuánto has tardado en acabarlo?

Primero aclarar que no está acabado, sino en un estado lo suficientemente avanzado como para que la gente no se ría (mucho) de mí.
La idea inicial surge alrededor de Febrero de 2007, pero no es hasta Marzo que me pongo manos a la obra, dedicándole un par de horas a la semana más a pensar que a implementar. FIC.tion alcanza un estado aceptable a mediados de Mayo tras dedicarle un par de semanas de manera más intensiva.
Así que la respuesta corta a la pregunta es: poco.

¿De dónde viene el nombre de FIC.tion?

Es un juego de palabras entre dos conceptos: el primero, el lugar donde estudio (Facultad de Informática de La Coruña, o FIC); el segundo es que a las aventuras conversacionales también se les conoce como ‘ficción interactiva’.

Entiendo, pero… ¿qué es una aventura conversacional?

Es quizá el primer género del mundo de los videojuegos. Su nacimiento se remonta a la década de los 70, cuando Will Crowther escribe en 1975 Adventure (después llamado Colossal Cave) en Fortran para el PDP-10. Más tarde en 1979, miembros del MIT Laboratory for Computer Science finalizan Zork, que sería uno de los muchos juegos de la compañía por excelencia del género, Infocom.
Una aventura conversacional es básicamente una historia contada en primera persona, en su estado más puro sin gráficos ni sonido, en el que la interacción entre el hombre y la máquina se basa en la escritura de comandos en lenguaje casi natural. En base a estas frases, el avatar investiga su entorno, se desplaza o usa objetos.

Antes hablabas del lenguaje SFL, ¿puedes hablar algo más de él?

Claro, SFL es el acrónimo de Structured Fiction Language. Es un lenguaje declarativo al estilo SQL, del cual coge parcialmente su nombre (Structured Query Language). Se basa en la definicion de salas, objetos y personajes con sus características.

SQL, SFL… desde luego no te has mucho estrujado las meninges…

Podría haberle llamado SIFILIS (SImple FIction Language for Interactive Software), pero quizá era algo controvertido.

¿Qué herramientas has usado para este proyecto?

– Flex, el generador de analizadores léxicos de GNU, en su versión para Linux que genera código C.
– Bison, el generador de parsers de GNU, en su versión para Linux que genera código C.
– GCC, el compilador de C de GNU en su version Linux, para generar el ejecutable en C que lee un archivo SFL.
– Javac, el compilador de Java de Sun para Linux, para generar el bytecode de la traducción desde SFL y de las clases auxiliares.

Conozco GCC y Javac, pero… ¿para qué sirven Flex y Bison?

Flex se encarga de comprobar que una cadena de entrada es léxicamente correcta, por ejemplo en C:

for(i=0;i<10;i++), es una cadena correcta desde el punto de vista léxico.
for i++ ; ( i<10 ; i=0), también lo es, ya que sus elementos pertenecen al lenguaje (for, i=0…).
fir(i=0;i<10;i++), no lo es.

Bison comprueba que una cadena es sintácticamente correcta; la primera de las anteriores lo es pero la segunda no. Además, una vez que reconoce una tira (o parte de ella) como válida, puede realizar acciones (asignar un valor a una variable, imprimir algo por pantalla, etc.)

Muy educativo, sí… ¿qué características soporta FIC.tion?

Actualmente:

* Hasta 64 habitaciones distintas por juego, con hasta 4 vecinos cada una.
* Hasta 8 items y personajes por sala.
* Conversaciones con 32 preguntas y respuestas diferentes.
* Hasta 16 interacciones diferentes por objeto, cada una de las cuales puede desencadenar 4 eventos.
* Inventario de hasta 8 objetos.
* Items con estado, que puede ser cambiado debido a eventos.
* Interacciones con objetos dependientes de interacciones previas o de estado de objetos.
* Eventos dependientes de acciones previas.
* Objetos ocultos desocultables.
* Contabilización de puntuación y número de movimientos.
* Finalización por alcance de sala u obtención de objeto.

No parece muy potente, ¿no? ¿Piensas mejorarlo?

No es muy potente teniendo en cuenta que Zork tiene casi 30 años y le da mil vueltas a éste… De todas formas, sí, tengo previsto añadirle más funcionalidades como:

* Aumentar los límites en el número de salas, objetos, etc. quizá hasta un límite infinito (o el que permita la memoria).
* Añadir nuevos tipos de eventos, incluso algunos de tipo condicional.
* Implementar condiciones de terminación compuestas más complejas.
* Hacer más flexible la interpretación de los comandos desde teclado.
* Añadir nuevas características a los objetos como peso, género, número, sinónimos…
* Implementar una sencilla interfaz para mostrar imágenes estáticas y tocar música.

¿Vas a poner FIC.tion a disposición del público?

Sí.

¿Cuándo?

Pronto.

¿Incluído el código fuente?

No.

¿Por qué no?

Odio que la gente critique mi código :] Además, tampoco es una obra magna de la ingeniería que merezca ser admirada. Así que solo distribuiré los binarios con un sencillo juego de ejemplo.

¡Pero eso va a contra del software libre!

Cierto. ¿Alguna pregunta más?

Eres un borde. ¿Al menos responderás a preguntas sobre su implementación, etc.?

Por supuesto, sin problema.

Algo es algo… ¿qué se necesita para poder crear y/o ejecutar juegos hechos con FIC.tion?

Necesitas un ordenador con Linux, un compilador de Java y mis binarios. Para crear un juego antes tendrás que haber escrito un archivo SFL correcto y para jugar a uno ya creado necesitarás su SFL o su traducción o compilación Java (.java/.class).

¿Linux? ¿Y qué pasa con Windows?

Quizá algún día portee FIC.tion a Windows, si hay gente que me lo pide y me veo con ganas :]

Una última pregunta: ¿cómo funciona SFL?

En unos días incluiré un breve tutorial del lenguaje basado en el juego que incluiré en el paquete.

Perfecto.

Pues sí, ¿puedo irme ya?

Claro, ya hemos terminado. Pero una última curiosidad, ¿ha visto el profesor de la asignatura el proyecto?

Todavía no.

¿Y si no le gusta la idea?

Buena pregunta…

Reproduciendo archivos NSF en Linux

¿NSF?

NSF es el acrónimo de NES Sound Format. Un formato de sonido de la consola de Nintendo, NES (también conocida como Famicon por otros lares). Estos archivos de sonido fueron “extraí­dos” de los cartuchos originales, sólo la música, no el juego. Este formato fue inventado por Kevin Horton (atención al tutorial de cómo cocinar beicon :-P) y hay muchas guí­as sobre cómo extraer las musiquillas de los cartuchos en este formato.

Reproductores

El motivo de este artículo es poder reproducir estos archivos. Como no es un formato muy “popular”, lo normal es que la mayoría de los reproductores de audio o multimedia no puedan reproducirlos, no por sí­ solos. Entran en juego los plugins, añadidos para determinados reproductores para hacerlos capaces de reproducir otros formatos que originalmente no pueden. Para los sistemas Windows hay muchos plugins para el reproductor Winamp. Pero nosotros queremos reproducirlos en nuestra máquina con GNU/Linux.

Seguramente conozcáis el reproductor XMMS, un clon de Winamp, y podría decirse que es el reproductor de música más recomendable por su sencillez y tamaño. Por defecto, no reproduce los archivos .nsf, pero también hay plugins para el XMMS 😉 El plugin se llama xmms-festalon. En sistemas Debian está incluido en los repositorios oficiales, así que bastará con hacer, como root: # apt-get install xmms-festalon y lo tendríamos instalado y configurado.

Ahora toca activarlo en el XMMS. Para ello, abrimos el reproductor y pulsando la combinación Ctrl + P, accederemos a las preferencias. En la primera pestaña podemos ver los plugins de audio instalados. Buscamos el Festalon, lo marcamos y pulsamos sobre Habilitar plugin. Aceptamos y tendremos un XMMS capaz de reproducir mí­ticas canciones de NES 😀

Como nota, existe también un reproductor de .nsf para Linux llamado festalon (de hecho, primero fue el reproductor y luego a partir de él crearon el plugin para el XMMS). Pero es en línea de comandos y no es tan cómodo como reproducir desde el XMMS, pero ahí­ os queda el dato 🙂

¿Qué tal unas musiquillas?

Debo confesar que el motivo real de este artí­culo es recomendar una web con una gran colección de archivos nsf para descargar, directamente (chivatazo de Arxel): Akumu’s NSF Archive. Podéis navegar por directorios para descargaros las canciones una a una o bien, descargarlo todo. [ 12,1 MB – ZIP ]

-MODE nostalgia OFF-

Enlaces relacionados