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