miércoles, 19 de mayo de 2010

Código Capítulo 3

import 'palante.i'.

------------------------
-- Bareto
------------------------
The bareto Isa location
  Name Bareto.
  Description
    "Un viejo y maloliente bareto de mala muerte... tu favorito. Junto a la vieja y sucia barra del bar está la única silla, de plástico cutre.$nAl norte está el lavabo.$n"
  Exit norte To lavabo.
End The bareto. 

The barra Isa object At bareto
  Name barra del bar.
  Name barra.
  Name bar.
  Name bareto.
  Is femenina.
  Is Not tomable.
  Description
    ""
  Verb examinar
    Does Only
      "La vieja barra del bar está pegajosa por los innumerables líquidos y comidas 
      que han ido cayendo y nadie se preocupó de limpiar correctamente."
    End Verb.
End The barra.

The silla Isa object At bareto
  Name silla.
  Is femenina.
  Is Not tomable.
  Description
    ""
  Verb examinar
    Does Only
      "Una incómoda silla de plástico barato blanco de bar."
  End Verb.
End The silla.

The jarra_cerveza Isa object In hero
  Name jarra de cerveza.
  Name jarra.
  Name cerveza.
  Is bebible.
  Is femenina.
  Description
    "Una jarra de cerveza que ya no está fría."
  Verb examinar
    Does Only
      "La jarra de cerveza caliente está medio vacía."
  End Verb.
  Verb beber
    Does Only
      Locate jarra_cerveza At Limbo.
      Locate jarra_vacia In Hero.
      "De un aburrido trago te bebes el resto de la cerveza caliente. Sabe a orina."
  End Verb.
End The jarra_cerveza.

The jarra_vacia Isa object At Limbo
  Name jarra de cerveza.
  Name jarra.
  Name cerveza.
  Is femenina.
  Description
    "Una jarra de cerveza vacía."
  Verb examinar
    Does Only
      "La jarra de cerveza está vacía... algún desalmado se la bebió..."
  End Verb.
End The jarra_vacia


------------------------
-- Lavabo
------------------------
The lavabo Isa location
  Name Lavabo.
  Description
    "De este infecto lavabo sale el olor característico del bareto.$nAl sur puedes volver al bareto.$n"
  Exit sur To bareto.
End The lavabo.


Start At bareto. 
schedule ini_terms at limbo after 0.
Show 'parao.png'.
"$n$tParao: un tutorial para Alan en castellano.$n$n
Estás en paro, y tu novia te ha echado de casa diciéndote que no vuelvas hasta que
no tengas un trabajo y dinero. Ahora te encuentras en tu bar favorito con una cerveza
en la mano...$n"

Desarrollando una aventura en Alan, capítulo 3: Objetos y gráficos

anterior | índice | siguiente


Alan tiene una capacidad gráfica limitada. Básicamente, es capaz de mostrar imágenes, pero solo mezcladas con el texto. No tiene frames. Para ello, utiliza la instrucción
Show 'nombre.jpg'.
Lo normal es tener el gráfico en el mismo lugar que el código de la aventura .alan, luego al compilar este se incluye automáticamente en el archivo de recursos de alan .a3r

En este ejemplo, incluiremos una carátula para nuestra aventura. Concretamente esta:

Para ello, añadimos la instrucción Show a la sección Start.
Start At bareto.
schedule ini_terms at limbo after 0.
Show 'parao.png'.
"$n$tParao: un tutorial para Alan en castellano.$n"


Por ahora nuestra sencilla aventura consta de dos lugares: un bareto maloliente y el lavabo, el origen de ese malolor. Vamos a añadir tres objetos. Una jarra de cerveza que se puede beber, una silla (para ver más adelante como definir nuestros propios verbos, por ahora no se puede hacer nada excepto cogerla) y la barra del bar, que no podemos cogerla.

Utilizaremos el template de objetos del capítulo anterior, y editamos los xx e yy para tener nuestro objeto básico:

The silla Isa object At bareto
  Name silla.
  Is femenina.
  Description
    "Una cutre silla de plástico."
  Verb examinar
    Does Only
      "Una incómoda silla de plástico barato blanco de bar."
  End Verb.
End The silla.


De este código, destacaremos que hemos añadido la instrucción Is femenina. Esta es una definición de la librería española, para saber que un objeto es femenino. En la sección Description aparece lo que vemos en la descripción del lugar. Por ahora, con lo que tenemos, nos aparece lo siguiente al ejecutar la partida (más adelante veremos como mejorarlo):

Bareto
Un viejo y maloliente bareto de mala muerte... tu favorito.
Al norte está el lavabo. Una cutre silla de plástico.

> coger silla
Tomas la silla.

> i
Tienes una silla.

Como podemos ver, en la descripción aparece exactamente lo que pusimos en description. Como dice la palabra, Description, es eso... la descripción que aparece en el mundo del objeto cuando no lo tenemos. En cambio, al coger el objeto (como pusimos Has femenina) sabe que es femenina, y en el inventario también sale correcto.

Si no queremos que la silla se pueda coger, simplemente hemos de añadirle la propiedad Is Not tomable.

Añadiremos el objeto barra (la barra del bar).
The barra Isa object At bareto
  Name barra del bar.
  Is femenina.
  Is Not tomable.
  Description
    "Una vieja y sucia barra de bar."
  Verb examinar
    Does Only
      "La vieja barra del bar está pegajosa por los innumerables líquidos y comidas 
      que han ido cayendo y nadie se preocupó de limpiar correctamente."
    End Verb.
End The barra.

Por ahora no hemos añadido nada especial. Si ejecutamos la aventura vemos que la descripción de la aventura incluye "Una cutre silla de plástico. Una vieja y sucia barra de bar." Alan muestra los objetos en el orden en que están en el código.

Como estos dos objetos no se pueden coger, la descripción la incluiremos en la descripción del lugar (el bareto). Para ello, en los objetos cambiaremos Description "xxx" por Description "". Y en el bareto, añadiremos el texto " Junto a la vieja y sucia barra del bar está la única silla, de plástico cutre"

Ahora nos encontramos con un problemita... como el nombre de la barra del bar es literalmente "barra del bar", Alan solo entiende exactamente esta construcción. La solución es o bien añadir sinónimos al lenguaje (lo veremos más adelante), o añadir más secciones Name. Alan puede tener más de un Name.
Name barra del bar.
Name barra.
Name bar.


Por último, definiremos una jarra de cerveza que el jugador puede beberse (cambiándo el objeto por una jarra vacía, un clásico en las aventuras)

El código con los dos objetos:
The jarra_cerveza Isa object In hero
  Name jarra de cerveza.
  Name jarra.
  Name cerveza.
  Is bebible.
  Is femenina.
  Description
    "Una jarra de cerveza que ya no está fría."
  Verb examinar
    Does Only
      "La jarra de cerveza caliente está medio vacía."
  End Verb.
  Verb beber
    Does Only
      Locate jarra_cerveza At Limbo.
      Locate jarra_vacia In Hero.
      "De un aburrido trago te bebes el resto de la cerveza caliente. Sabe a orina."
  End Verb.
End The jarra_cerveza.

The jarra_vacia Isa object At Limbo
  Name jarra de cerveza.
  Name jarra.
  Name cerveza.
  Is femenina.
  Description
    "Una jarra de cerveza vacía."
  Verb examinar
    Does Only
      "La jarra de cerveza está vacía... algún desalmado se la bebió..."
  End Verb.
End The jarra_vacia

Hemos añadido la propiedad Is bebible a la jarra llena. Además, podemos ver que incluye el Verb beber (de la librería española), que realiza las acciones Locate jarra_cerveza At Limbo y Locate jarra_vacia In Hero, para después mostrarnos el texto de que te bebiste la cerveza.
Limbo es un lugar definido en la librería donde colocar objetos que todavía no están en el mundo, o los que haremos desaparecer durante la partida. Hero es el personaje. Nótese el uso correcto de las preposiciones At Limbo, In Hero (Hero es un contenedor con una cierta capacidad definida en la librería en la sección Hero.i). Cuando movemos a un lugar, usamos Locate At lugar; si movemos a un contenedor, Locate In objeto.

Código fuente de este capítulo

anterior | índice | siguiente

jueves, 22 de abril de 2010

Desarrollando una aventura en Alan, capítulo 2: Diseño de la aventura y primeras habitaciones

anterior | índice | siguiente


Vamos a diseñar la aventura a implementar en este tutorial.

La idea básica es que estás en paro, y tu novia te echa del piso y te dice que o bien vuelves con un trabajo y dinero, o que no vuelvas. Por lo tanto, el objetivo de esta aventura es conseguir dinero y un trabajo.

La aventura transcurre en el siguiente mapeado:


En este sencillo mapeado colocaremos los elementos básicos que nos interesan:
  • lugares: las habitaciones del mapa
  • objetos: con los que interactua el jugador
  • PSIs: personajes con los que interactuar
  • scripts de eventos: que hacen que pasen cosas en el tiempo


Por comodidad, yo utilizo templates básicos de lugares y objetos que voy copiando y editando. A continuación tenéis los códigos:
----- templates --------------------

The xx Isa location
  Name xxx.
  Description 
    ".........."
  Exit norte To xx1.
  Exit sur To xx2.
  Exit este To xx3.
  Exit oeste to xx4.
End The xx.

The yy Isa object At xx
  Name yyy.
  Description
    ""
  Verb examinar
    Does Only
      ""
  End Verb.
End The yy.


Una localización necesita un nombre interno, xx, el nombre que muestra el intérprete, xxx, una description, la que ve el jugador, y las conexiones. Como veremos más adelante, se pueden incluir condiciones a las conexiones para hacerlas más complejas.

Un objeto es similar. Consta de un nombre interno yy, es de tipo object, se encuentra en xx. Tiene un nombre yyy (el que el jugador utiliza para cogerlo, examinarlo, etc). En Description va la descripción que aparece del objeto inicialmente en la habitación donde se encuentra, por ejemplo, si fuese una silla Description "Junto a la mesa hay una silla.". La descripción del objeto cuando el jugador lo examina, se da sobreescribiendo el verbo examinar, en la sección Verb examinar.

El Does Only es importante. Hay varios tipos de Does:
  • Does: realiza la acción especificada y después la original del verbo en la librería. (equivalente a un Does Before)
  • Does Only: ignora la librería y solo realiza esta acción.
  • Does After: realiza la acción tras realizar la de la librería

Ahora añadiremos una segunda localización, el lavabo. Y veremos como limitar el acceso con puertas.

Para añadir una dirección, contamos con la instrucción
Exit dirección To lugar
donde dirección es una de las usuales (norte, sur, este, oeste, etc.) y habitación el nombre de uno de nuestros lugares.

The bareto Isa location
  Name Bareto.
  Description
    "Un viejo y maloliente bareto de mala muerte... tu favorito.$nAl norte está el lavabo."
  Exit norte To lavabo.
End The bareto. 

The lavabo Isa location
  Name Lavabo.
  Description
    "De este infecto lavabo sale el olor característico del bareto.$nAl sur puedes volver al bareto."
  Exit sur To bareto.
End The lavabo.

Si ejecutamos la aventura, ahora ya podemos movernos entre los dos lugares por medio de norte y sur.

En el siguiente capítulo, dedicado a los objetos, veremos como añadir un objeto típico de todo bar que se precie: la jarra de cerveza. Y en el cuarto capítulo, aprenderemos a crear puertas y demás objetos similares que afectan a la movilidad entre lugares.

anterior | índice | siguiente

Desarrollando una aventura en Alan, capítulo 1: instalando Alan

índice | siguiente


Vamos a desarrollar una aventura en ALAN con la librería pALANte para ver como se hace.

Lo primero será preparar nuestro entorno de trabajo. Necesitamos:
-Nos bajaremos de la web de ALAN el AlanIDE, y la última versión del compilador (para desarrollar, nos conviene bajarnos el Command line compiler and interpreter).
-La librería española, que la encontramos en el CAAD.

-Instalamos el AlanIDE en el directorio que nos interese, por ejemplo: C:\util\AlanIDE y el command line compiler en C:\util\AlanIDE\alan.
-Instalamos la librería española en C:\Util\AlanIDE\lib_es.
-Configuramos AlanIDE:

En el menú edit -> preferences



En el menú Alan -> Selected compiler seleccionamos el compilador alan.exe, en nuestro caso, C:\Util\AlanIDE\Alan\alan.exe.
El campo path to standard library por ahora escogemos la librería en castellano standard. En nuestro caso, C:\Util\AlanIDE\lib_es. Cabe notar que la forma en que está pensado ALAN para trabajar incluye copiar la librería al proyecto que desarrollamos, y modificarla según nuestras necesidades.

Vamos a probar que hemos instalado bien. Para ello, crearemos un nuevo proyecto, en nuestro caso Parao, y añadiremos un archivo fuente alan, parao.alan.

En el IDE, creamos lo básico para una aventura en castellano. Podemos utilizar el menú File -> New Wizards -> Alan Main File. Le llamamos Parao.alan . Los tipos de archivo de Alan son:

  • .alan : archivo fuente
  • .a3r: archivo de recursos (gráficos, etc)
  • .a3c: archivo compilado


import 'palante.i'.
The bareto Isa location
Name Bareto.
Description
"Un viejo y maloliente bareto de mala muerte... tu favorito."
End The bareto.


Start At bareto. 
schedule ini_terms at limbo after 0.

"$tParao: un tutorial para Alan en castellano.$n"

Para grabar este código, en AlanIde pulsamos CTRL+S. Esto graba y compila automáticamente y nos indica si hay errores. Si acabamos de crear el archivo, es posible que no veamos lo que ha creado, y debamos refrescar el proyecto (botón derecho sobre la carpeta Parao en el Ide, opción Refresh). Nos aparecerá entonces además de parao.alan el archivo parao.a3c, que es el compilado.

Básicamente, tenemos un lugar, en este caso el bareto.
Definido con la instrucción:
The bareto Isa location

bareto: el nombre interno del lugar
location: tipo al que pertenece bareto, en este caso, location, un lugar.

Name Bareto.
El nombre de la entidad (lugar bareto) que se muestra en el intérprete.

Description "Un viejo..."
La descripción que muestra el intérprete.

End The bareto.
Cerramos la entidad bareto.

La sección de código:
Start At bareto. 
schedule ini_terms at limbo after 0.

"$tParao: un tutorial para Alan en castellano.$n"
Es la introducción.

Con Start At especificamos en que lugar empieza la aventura.
El schedule ini_terms at limbo after 0. es fundamental en castellano. Lanza un script que traduce opciones internas.
índice | siguiente

Desarrollando una aventura en Alan, índice

Vamos a desarrollar una aventura en alan en los siguientes capítulos:

jueves, 15 de abril de 2010

¿Qué es ALAN?

ALAN es un lenguaje de programación de ficción interactiva. Por defecto, permite generar ficción interactiva (o aventuras) en inglés, alemán y sueco.

Para poder desarrollar ficción interactiva en castellano, Marcos Donantuonni inició la librería en castellano pALANte, y este inestimable trabajo inicial fue ampliado hasta contar con toda la librería inglesa en castellano por el autor de este blog.

La página web de ALAN.
La librería de ALAN en español, pALANte 0.6.0e.
La aventura Vampiro para ALAN, del proyecto vampiro.