Herramientas de usuario

Herramientas del sitio


cosas_abribles_y_cerrables

Cosas abribles y cerrables

En muchos juegos basados en texto aparecen objetos que pueden abrirse y cerrarse. Puertas, ventanas, baúles, cajas fuertes o maletas son ejemplos típicos de objetos así. El AGE proporciona soporte para crear fácilmente tales objetos, que los jugadores y criaturas pueden abrir y cerrar con o sin necesitar para ello una llave, según cómo están configurados.

Grosso modo, el sistema de cosas abribles y cerrables de AGE funciona de la siguiente manera:

  • En un momento dado, una cosa puede estar abierta o cerrada.
  • Además, una cosa que está cerrada puede estar cerrada con llave o no.
  • La orden cerrar cosa introducida por un jugador sirve para cerrar algo que está abierto, la orden abrir cosa para abrir algo que está cerrado. Es posible definir condiciones para que estos comandos funcionen o no según el criterio que se quiera (por ejemplo, una puerta que no se pueda abrir sin más porque está atrancada, etc.)
  • La orden abrir cosa con llave introducida por un jugador sirve para quitar el cerrojo a algo que está cerrado con llave, y la orden cerrar cosa con llave hace lo contrario. AGE permite definir qué cosa del juego es la llave de cada cosa abrible/cerrable con llave. Asimismo, también se pueden definir condiciones para que estos comandos funcionen o no (además de la condición implícita de tener la llave).
  • En cada cosa, se puede marcar individual e independientemente si es abrible, cerrable, abrible con llave y cerrable con llave. Esto nos permite la flexibilidad de definir, por ejemplo, algo que se puede abrir pero no se puede volver a cerrar una vez abierto; o también de obviar el sistema de llaves si no las necesitamos en nuestro juego.
  • Se pueden crear puertas especificando que una cosa es la puerta asociada a un camino, de forma que no se dejará pasar al jugador por ella cuando esté cerrada.
  • Si una cosa cerrada es un contenedor, no permitirá a los jugadores manipular lo que haya en su interior hasta que se abra.

Definiendo cosas abribles y cerrables

Para definir una cosa abrible y/o cerrable en nuestro mundo de AGE, creamos una cosa en el PUCK de forma normal (rellenando su nombre único, nombres de referencia y demás campos útiles como de costumbre) y a continuación vamos a la ficha llamada “Abrir/Cerrar” de su panel de objeto.

Lo primero que vemos en esta ficha son cuatro cuadros que podemos marcar para determinar si la cosa es “Abrible”, “Cerrable”, “Cerrable con llave” y “Abrible con llave”, respectivamente. Así, por ejemplo, si queremos crear una caja que se pueda abrir y cerrar pero que no necesite una llave para ello, marcaremos los dos primeros cuadros. Si lo que queremos es una puerta que además tenga una llave que tenga una cerradura con llave, los marcaremos todos. Es perfectamente posible marcar cualquier combinación de acciones posibles: por ejemplo, un plástico donde venga envuelto un CD de música podría modelarse como un objeto abrible, pero no cerrable (una vez que lo rompemos, no podemos devolverlo a su estado original).

A continuación vemos cuatro formularios para textos dinámicos asociadas a cada una de las cuatro acciones: abrir, cerrar, cerrar con llave y abrir con llave. Como es lógico, sólo tendremos que cubrir los campos correspondientes a las acciones que hayamos marcado como posibles en los cuadros anteriores (por ejemplo, a abrir y cerrar en el caso de la caja).

El formulario de estos textos dinámicos es análogo al de las descripciones y nombres dinámicos; pero con un añadido: además de especificar una condición y un texto asociado, también tenemos la posibilidad de marcar o no una casilla llamada “Con éxito”. Esta casilla determina si la acción correspondiente (abrir, cerrar, etc.) se llevará a cabo con éxito o no, en el caso de que la condición asociada sea cierta. De este modo, en el formulario de “Texto al abrir” no sólo estamos definiendo el texto en sí, sino también las condiciones que son necesarias para que la cosa se pueda abrir; y lo análogo para “Texto al cerrar” y el resto de formularios similares.

Más en detalle, cuando un jugador teclea una orden abrir sobre una cosa, AGE hace lo siguiente:

  1. Si la cosa no está marcada como “Abrible”, se le dice al jugador que no tiene sentido abrir eso.
  2. Si la cosa sí está marcada como “Abrible”, se recorren las entradas del formulario “Texto al abrir” comprobando si se cumple la condición de alguna de ellas. En el caso de que se cumpla la condición de una de ellas:
    1. Si esa entrada del formulario era de “Éxito” (se marcó la casilla “Con éxito”), entonces se muestra el mensaje correspondiente, y la cosa se abre.
    2. Si esa entrada del formulario era sin éxito (no se marcó la casilla “Con éxito”), entonces se muestra el mensaje correspondiente; pero no se hace ningún cambio en el estado de la cosa.

El funcionamiento de cerrar es análogo, trabajando en cada caso con la casilla y el formulario correspondientes a esa orden.

Las condiciones que se pueden teclear en estos formularios son expresiones booleanas en BeanShell, exactamente igual que para las descripciones y nombres dinámicos. A menudo, para escribir estas condiciones necesitaremos tener una forma de saber si una cosa está abierta o cerrada, y si está cerrada con llave o no. Para ello, podemos usar los siguientes métodos de la clase Item:

/*clase Item*/ boolean isOpen ( )
/*clase Item*/ boolean isClosed ( )
/*clase Item*/ boolean isLocked ( )
/*clase Item*/ boolean isUnlocked ( )

Estos métodos nos permiten comprobar el estado de las cosas abribles/cerrables: son métodos booleanos que devuelven true si la cosa sobre la que los ejecutamos está abierta, cerrada, cerrada con llave o no cerrada con llave, respectivamente; y false de lo contrario.

De este modo, por ejemplo, podemos definir una caja que se abra y se cierre marcándola como abrible y cerrable en la ficha correspondiente, y luego introduciendo lo siguiente en los formularios:

  • Texto al abrir 1:
    • Condición: self.isClosed()
    • Éxito: sí
    • Texto: Abres la caja.
  • Texto al abrir 2:
    • Condición: self.isOpen()
    • Éxito: no
    • Texto: ¡No puedes abrir la caja porque ya está abierta!
  • Texto al cerrar 1:
    • Condición: self.isClosed()
    • Éxito: no
    • Texto: ¡No puedes cerrar la caja porque ya está cerrada!
  • Texto al cerrar 2:
    • Condición: self.isOpen()
    • Éxito: sí
    • Texto: Cierras la caja.

De esta forma, conseguimos una caja que funciona de la manera más normal: se puede abrir si está cerrada, se puede cerrar si está abierta, y las otras posibles combinaciones (como abrirla si ya está abierta) no funcionan y nos dan un mensaje que podemos personalizar. Sin embargo, el sistema de condiciones también nos da la posibilidad de crear cosas abribles y cerrables que funcionen de maneras más extrañas, si es necesario.

Para definir el estado inicial de un objeto abrible/cerrable, podemos utilizar la propiedad closed: si vamos a la ficha “Propiedades” del panel de nuestra caja y añadimos una propiedad closed con valor true y tiempo restante -1 (infinito), la caja comenzará estando cerrada. De lo contrario, empezará abierta hasta que alguien la cierre.

Llaves

Si además queremos que para abrir una cosa abrible o cerrable haga falta tener en posesión otro objeto (que comúnmente llamamos llave), podemos hacerlo marcando la cosa como abrible/cerrable con llave y utilizando los otros dos formularios, que procesan las órdenes de tipo cerrar X con Y y abrir X con Y. Éstos funcionan exactamente igual que los formularios para abrir X y cerrar X que hemos visto antes, con la salvedad de que AGE nos proporciona una manera de definir qué objeto u objetos Y son los que sirven para abrir X.

Para hacer esto, creamos una relación (flecha) que vaya de X (el objeto que se abre) a Y (su llave asociada), y en el panel de la relación, donde se nos pregunta “Relación estructural”, marcamos “Se abre con” para expresar que X se abre con Y. Es posible definir de esta manera varias llaves que abran una misma puerta, o varias puertas que se abran con una misma llave, creando varias flechas.

De este modo, cuando un jugador teclea una orden abrir X con Y, si X e Y son cosas válidas y que están al alcance del jugador, AGE hace lo siguiente:

  1. Si la cosa X no está marcada como “Abrible con llave”, se le dice al jugador que no tiene sentido abrir eso con llave.
  2. Si la cosa X está marcada como “Abrible con llave”, se recorren las descripciones del formulario “Texto al abrir con llave”, procediendo de forma análoga a como se hacía para el formulario “Texto al abrir”; pero con una diferencia, que es la siguiente: si el objeto Y no es una llave válida para abrir X, sólo se considerarán las descripciones “Sin éxito”; mientras que si el objeto Y sí es una de las llaves válidas para abrir X, se considerarán tanto las descripciones “Sin éxito” como aquellas “Con éxito”.

De esta manera, AGE nos comprueba automáticamente que el jugador lleva la llave adecuada, y hace que la acción de abrir con llave no tenga éxito en caso contrario; pero seguimos pudiendo utilizar las condiciones de las descripciones para determinar si hay éxito o fracaso en el caso de que el jugador sí tenga la llave (por ejemplo, tal vez el jugador tiene la llave pero la puerta está atrancada…)

La acción de abrir con llave se comporta de forma totalmente análoga a la acción cerrar con llave, pero usando los formularios correspondientes.

La propiedad 'locked' nos permite definir inicialmente si una cosa va a estar cerrada con llave o no: poniendo dicha propiedad a 'true' y con temporizador -1 en la ficha de “Propiedades” de una cosa, nos aseguraremos de que empiece cerrada con llave al principio del juego.

Nótese que con el sistema de apertura y cierre con llave aquí descrito se implementa por defecto el manejo de llaves típico de los juegos americanos clásicos, en los que para abrir una puerta primero hay que “abrirla con llave” (unlock), que corresponde sólo a girar la llave, y después “abrirla” realmente (open). En el mundo hispanohablante, muchos autores actuales prefieren un sistema más simple en el que al poner “abrir puerta” ya se abra con llave automáticamente (incluyendo las acciones unlock+open) en el caso de que el jugador tenga la llave. Este sistema de apertura y cierre fácil de conseguir en AGE, simplemente ignorando las casillas y formularios de “Abrible con llave” y “Cerrable con llave” y definiendo las condiciones del “abrir” y “cerrar” normales para que miren si el jugador tiene la llave. Otras variantes se pueden definir de forma similar.

Puertas

Un uso común de las cosas abribles o cerrables es que sirvan como puertas de acceso entre una localidad y otra, de forma que haya sea necesario abrir la puerta para atravesar el camino correspondiente.

Para definir una puerta entre dos habitaciones, hacemos lo siguiente:

  • Creamos una cosa abrible/cerrable que represente la puerta. Podemos hacerlo de forma similar a la caja vista en el ejemplo anterior, o podemos hacer cambios (como añadir la funcionalidad de abrir/cerrar con llave) según cómo queramos que funcione la puerta.
  • Hacemos click en el camino o caminos entre las dos localidades y, en la ficha “Relación estructural” de su panel de relación, vamos a donde pone “Puerta:” y seleccionamos nuestra entidad puerta. Lo que hace esto es vincular el camino con la puerta de forma que si el jugador intenta andar por ese camino y la puerta está cerrada, fracasará en su empeño.
  • Añadimos la puerta a las dos localidades (mediante flechas de cada una de las localidades a la puerta). Si no hacemos esto, el camino estaría vinculado a la puerta pero ésta no sería accesible desde las localidades, de manera que no podríamos abrirla o cerrarla, por ejemplo.

Aunque no es necesario para que la puerta funcione, muchas veces será conveniente no ponerle nombres para mostrar. Esto hace que no se muestre tras la descripción de las habitaciones (o sea, que no aparezcan cosas como “Aquí hay una espada, un escudo y una puerta roja”, cosa que suele ser antinatural). Por supuesto, sí que es necesario que la puerta tenga algún nombre de referencia para poder manipularla.

Contenedores abribles y cerrables

Otro uso común para las cosas abribles o cerrables es servir para modelar objetos que hay que abrir para sacar otros objetos de su interior, como baúles o cajones. Para hacer esto, basta con crear un objeto abrible y/o cerrable (como la caja vista anteriormente) y definirlo a la vez como contenedor, y AGE se encargará automáticamente de que sólo se pueda acceder a los objetos que contiene cuando esté abierta. En la siguiente sección, contenedores, veremos cómo se define una cosa como contenedor.

cosas_abribles_y_cerrables.txt · Última modificación: 2011/01/05 17:54 por al-khwarizmi