Recipientes y soportes
Hasta ahora sabemos como crear objetos por el suelo y decorado, así como objetos que se abren y objetos que se activan. Sabemos abrirlos, cerrarlos, encenderlos y apagarlos, también cogerlos, volverlos a dejar por el suelo, pero ¿deben estar siempre los objetos por el suelo tirados? ¿es el suelo el único sitio donde coger y dejar objetos? La respuesta es no: existen objetos especiales que tienen la capacidad de contener otros objetos, ya sean dentro o encima, y transportarlos. Estos objetos son los recipientes y los soportes.
- Los recipientes permiten guardar objetos dentro, como una caja, un maletín, un cubo de basura, un barril o un armario.
- Los soportes permiten colocar objetos encima, como una bandeja, una mesa o una estantería.
La principal utilidad de estos objetos es que permiten transportar otros objetos, ya que al cogerlos también nos llevamos todo lo que contienen, independientemente de si tienen cosas dentro o encima. Además, el hecho de que un objeto sea recipiente o soporte no es excluyente: el mismo objeto puede ser a la vez soporte y recipiente; por lo que puede tener cosas dentro y encima a la vez, como por ejemplo, un cofre con la superficie plana puede tener encima objetos de adorno colocados y, además, dentro un tesoro escondido.
El jugador, o cualquier personaje, puede ver, coger y manipular los objetos que hay dentro o encima de los soportes y recipientes igual que si estuvieran en el suelo. O lo que es lo mismo, la accesibilidad y la visibilidad de un objeto no varían por estar dentro o encima de un objeto.
| La diferencia básica entre soporte y recipiente es que el recipiente puede, además, ser un recipiente que se puede abrir y cerrar (*abrible*). Cuando esta cerrado, oculta lo que hay en su interior e impide su acceso, por lo que para poder ver y acceder a dicho interior, es necesario abrirlo. También es posible que el recipiente sea transparente, lo que significaría que es posible ver y examinar su contenido aún estando cerrado, pero seguiría sin permitir el acceso a su interior hasta que no fuera abierto. |
Flags recipiente, soporte y transparente.
Veamos algunos ejemplos de objetos reales que se pueden crear:
| flags | Descripción | Objetos de ejemplo |
|---|---|---|
| recipiente | No se puede abrir ni cerrar, por lo que actúa como si siempre estuviera abierto. Se puede acceder libremente al contenido de su interior. | Una papelera, una bolsa de papel, un cubo sin tapa. |
| recipiente + abrible | Se puede abrir y cerrar, por lo que solo permite el acceso a su interior cuando está abierto. Si esta cerrado, su contenido permanece oculto | Una caja de madera, una maleta o un armario no te permitirá ver lo que hay dentro ni tocarlo hasta que la abras. |
| recipiente + abrible + transparente | Se puede abrir y cerrar, por lo que solo permite el acceso a su interior cuando está abierto. Sin embargo, siempre se puede ver su contenido, aunque esté cerrado. | Una caja de cristal o una jaula permiten ver y examinar lo que hay en su interior aunque estén cerradas. Pero será necesario abrirlas para coger lo que hay dentro. |
| soporte | Permite colocar objetos encima a los cuales siempre se puede acceder. | Una mesa o una bandeja |
Nota: Los flags transparente y abrible solo afectan a los recipientes, nunca a los soportes. Y el flag transparente solo afecta a los objetos recipiente + abrible.
Recipientes
Para crear un recipiente donde meter cosas dentro, tan solo tenemos que añadir el flag recipiente a la línea de flags dentro del objeto que vamos a crear, así:
flags recipiente
Si queremos que el recipiente se pueda abrir y cerrar (como una caja), le añadiremos abrible al la línea de flags
flags recipiente, abrible
Por defecto, todos los objetos están abiertos a no ser que se indique lo contrario. Así que si queremos que el estado inicial de nuestro recipiente sea cerrado, debemos añadir !abierto o not abierto a la línea de flags (la admiración ! o el not delante de un flag niega su valor y su significado. Así, si el flag abierto significa que "está abierto", su negación significa "está cerrado")
flags recipiente, abrible, !abierto
Si queremos que el recipiente sea, además, transparente (como una jaula), el flag a añadir es transparente :
flags recipiente, abrible, !abierto, transparente
El flag abrible solo afecta a los recipientes, nunca a los soportes. Y el flag transparente solo tiene sentido en los recipientes que se pueden abrir y cerrar. Si un recipiente no es abrible (como una papelera sin tapa o un cuenco), significa que estará siempre abierto y que siempre se podrá ver su contenido, por lo que sería redundante (y por lo tanto innecesario) indicar que es transparente pues, a todos los efectos, es como si ya lo fuera (ejemplo, no es necesario que un cuenco sea transparente, pues al no tener tapa, ya se puede ver lo que hay en su interior).
Soportes
Si queremos crear un soporte, el flag a añadir es soporte :
flags soporte
Otros
Podemos combinarlos todos juntos:
flags soporte, recipiente, abrible, !abierto
Ejemplos
Un ejemplo completo de una bandeja y una caja cerrada:
object Bandeja dentro:Habitacion
nombre FS:bandeja
flags soporte
def alMirar: "Es una bandeja de metal."
endobject
object Caja dentro:Habitacion
nombre FS:caja
flags recipiente, abrible, !abierto
def alMirar: "Es una caja de madera."
endobject
Situando objetos encima y dentro de otros
Al igual que para colocar un objeto en una localidad se indicaba con dentro:localidad o para colocar un objeto dentro del jugador (y que forme parte de su inventario) se utilizaba dentro:personaje, igualmente se hace para un soporte y un recipiente. Se indica primero la relación dentro: o encima: seguido del identificador del objeto donde queremos colocar el objeto.
Para colocar un objeto dentro de un recipiente se utiliza la relación dentro:
object MiObjeto dentro:objetoRecipiente
Y en un soporte se utiliza la relación encima:
object MiObjeto encima:objetoSoporte
Por ejemplo, una caja con un dado dentro. Primero creamos el objeto caja como recipiente y después el objeto dado, situándolo dentro de la caja con dentro:Caja :
object Caja dentro:Habitacion
nombre FS:caja
flags recipiente, abrible, !abierto
def alMirar: "Es una caja de madera."
endobject
object Dado dentro:Caja
nombre MS:dado
def alMirar: "Es un dado de 6 caras."
endobject
Ejemplo completo
En el siguiente ejemplo tenemos una bandeja (soporte) y una caja (recipiente). Dentro de la caja hemos colocado un boli, aunque no lo podremos ver porque la caja donde se encuentra está cerrada. Encima de la bandeja hemos puesto un mechero, y el jugador lleva encima una foto.
include system/default
object Main:MainBase
def start
Estado.jugador = McAventura
#jugador.accion(Mirar)
end
endobject
/**
* El objeto jugador
*/
object McAventura:Personaje dentro:Habitacion
nombre MS:Mc Aventura
def alMirar: "Eres Mc Aventura, el protagonista de esta historia."
endobject
/**
* Localidades
*/
object Habitacion:Localidad
nombre MS:Habitación
def alMirar: "Estás en tu habitación, cálida y soleada, de donde parten tus primeros recuerdos."
endobject
/**
* Objetos en el inventario del jugador
*/
object Foto dentro:McAventura
nombre FS:foto
def alMirar: "Es una foto tuya de cuando eras pequeño."
endobject
/**
* Objetos en la Habitación
*/
object Bandeja dentro:Habitacion
nombre FS:bandeja
flags soporte
def alMirar: "Es una bandeja de metal."
endobject
object Caja dentro:Habitacion
nombre FS:caja
flags recipiente, abrible, !abierto
def alMirar: "Es una caja de madera."
endobject
/**
* El boli que está dentro de la caja
*/
object Boli dentro:Caja
nombre MS:boli
def alMirar: "Es un boli de plástico, un poco gastado y mordisqueado."
endobject
/**
* El mechero que está encima de la bandeja
*/
object Mechero encima:Bandeja
nombre MS:mechero
def alMirar: "Es un mechero de color rojo."
endobject
Una prueba real de interacción con los objetos sería:
Habitación Estás en tu habitación, cálida y soleada, de donde parten tus primeros recuerdos. Salidas posibles: ninguna. Puedes ver una bandeja y una caja. >> i Llevas: una foto >> ex bandeja Es una bandeja de metal. >> ex caja Es una caja de madera.
Hasta aquí correcto, iniciamos la prueba y vemos que en el suelo hay una bandeja y una caja. Sin embargo las examinamos pero no hay manera de saber si tienen algo dentro o encima. Sin esta información, ¿como podemos usar el boli y el mechero, si no sabemos donde están? Es más, nosotros sabemos que hay un boli y un mechero porque somos los creadores de la aventura y los hemos colocado ahí al inicio, pero un jugador cualquiera, que inicie el juego por primera vez, ni siquiera sabría que existen.
La solución a esto es la orden buscar en, mirar en, mirar dentro o registrar objetos, correspondiente a la acción BuscarEn. Esta acción devuelve un listado con los objetos que hay dentro o encima del objeto registrado, si es posible.
>> registrar bandeja Hay un mechero. >> coger mechero Coges el mechero de la bandeja. >> buscar en la bandeja No hay nada encima. >> registrar caja No puedes ver lo que hay dentro de la caja porque está cerrada. >> coger boli No veo eso que dices. >> abrir caja Abres la caja. >> mirar en la caja Dentro hay un boli. >> coger boli Sacas el boli de la caja. >> mirar en la caja Esta vacía. >> i Llevas: una foto un mechero un boli
Al estar cerrada la caja, el boli que hay dentro no es accesible, por lo que un intento de cogerlo dará un fallo (ni tampoco funciona la orden mirar en, aunque el sistema te avisa de ello, sugiriéndote que abras la caja si quieres saber lo que hay dentro). Una vez abierta, el boli, al igual que el mechero, son accesibles y se pueden coger.
Ahora que tenemos varios objetos, vamos a operar con ellos. Podemos colocar todas nuestras pertenencias encima de la bandeja:
>> poner todo en la bandeja Pones la foto, el mechero y el boli encima de la bandeja.
Y podemos cogerlas de nuevo. Para poner coger todo debemos especificar de donde, ya que si ponemos coger todo a secas, cogeríamos todo lo que hay en el suelo, que en este caso sería la caja y la bandeja.
>> coger todo de la bandeja Coges la foto, el mechero y el boli.
Volvemos a colocar los objetos dentro de la caja, pero esta vez de uno en uno, y utilizando distintas ordenes, todas equivalentes y cuyo resultado final es el mismo: meter un objeto dentro de la caja :
>> poner boli en la caja Pones el boli dentro de la caja. >> meter el mechero dentro la caja Pones el mechero dentro de la caja. >> dejar foto en el interior de la caja Pones la foto dentro de la caja. >>registrar caja Dentro hay un boli, un mechero y una foto.
Ahora que están todos los objetos dentro de la caja, si cogemos la caja, también nos llevamos todo lo que hay dentro:
>> coger caja
Cogida.
>>i ancho
Llevas una una caja (que tiene dentro una foto, un boli y un mechero)
>> i estrecho
Llevas:
una caja
una foto
un mechero
un boli
Podemos vaciar un objeto dentro o encima de otro, que sería equivalente a sacar cada objeto, uno a uno y dejarlo de nuevo, pero sobre (o dentro) de otro objeto.
>> vaciar la caja sobre la bandeja (Primero intentas sacar la foto de la caja) Pones la foto encima de la bandeja. (Primero intentas sacar el mechero de la caja) Pones el mechero encima de la bandeja. (Primero intentas sacar el boli de la caja) Pones el boli encima de la mesa. >>registrar mesa Dentro hay un boli, un mechero y una foto.
Ahora podemos coger la bandeja, con todo lo que tiene encima y meterla dentro de la caja (que llevamos encima y está vacía):
>> coger bandeja
Cogida.
>> i
Llevas:
una caja
una bandeja
una foto
un mechero
un boli
>> meter la bandeja dentro de la caja
Pones la bandeja dentro de la caja.
>> i
Llevas:
una caja
una bandeja
una foto
un mechero
un boli
El resultado final es que tenemos una caja que dentro tiene una bandeja sobre la que hay una foto, un mechero y un boli.
Otro ejemplo
Este ejemplo, más elaborado, tiene los siguientes objetos
En la localidad Cocina
- McAventura es el jugador que está en la Cocina
- Y la Foto dentro de McAventura (es decir, una posesión que forma parte de su inventario)
- La Papelera esta dentro de la Cocina (por el suelo, luego se lista al mirar)
- La Mesa es un componente de la Cocina (al ser componente, no se lista ni se puede coger)
- La Bandeja esta encima de la Mesa (aparece al
mirar en mesa)- El Vaso esta encima de la Bandeja (aparece al
mirar en bandeja)- El Dado esta dentro del Vaso (aparece al
mirar en vaso)
- El Dado esta dentro del Vaso (aparece al
- El Vaso esta encima de la Bandeja (aparece al
- La Bandeja esta encima de la Mesa (aparece al
- El ArmarioCocina es un componente de la Cocina (otro componente, ni se lista ni se coge)
- La Cazuela está dentro del ArmarioCocina (aparece al
mirar en armario, pero solo si lo abrimos antes) - El Microondas esta encima del ArmarioCocina (aparece al
mirar en armario)- El Plato esta dentro del Microondas (aparece al
mirar en microondasaunque esté cerrado, pues es transparente)
- El Plato esta dentro del Microondas (aparece al
- La Cazuela está dentro del ArmarioCocina (aparece al
include system/default
object Main:MainBase
def start
Estado.jugador = McAventura
#jugador.accion(Mirar)
end
endobject
/**
* El objeto jugador
*/
object McAventura:Personaje dentro:Cocina
nombre MS:Mc Aventura
def alMirar: "Eres Mc Aventura, el protagonista de esta historia."
endobject
/**
* Localidades
*/
object Cocina:Localidad
nombre MS:Cocina
def alMirar: "Estás en la cocina de tu casa.\
Al lado tuyo hay una gran mesa para comer y un armario de cocina."
endobject
/**
* Objetos en el inventario del jugador
*/
object Foto dentro:McAventura
nombre FS:foto
def alMirar: "Es una foto tuya de cuando eras pequeño."
endobject
/**
* Objetos en la cocina
*/
object Mesa componente:Cocina
nombre FS:Mesa
flags soporte
def alMirar: "Es una mesa para comer muy grande."
endobject
object ArmarioCocina componente:Cocina
nombre MS:armario de cocina
sinonimos armario cocina?
flags soporte, recipiente, abrible, !abierto
def alMirar: "Es un armario de cocina. Dentro se pueden guardar cosas."
endobject
object Papelera dentro:Cocina
nombre FS:papelera
flags recipiente
def alMirar: "Es una papelera, sirve para tirar cosas dentro."
endobject
object Microondas encima:ArmarioCocina
nombre MS:microondas
sinonimos horno? microondas?
flags recipiente, abrible, !abierto, transparente
def alMirar: "Es un horno microondas, que calienta, descongela y gratina."
endobject
object Plato dentro:Microondas
nombre MS:plato
sinonimos plato de? comida|comer
def alMirar: "Es un plato, sirve para comer."
endobject
object Bandeja encima:Mesa
nombre FS:bandeja
flags soporte
def alMirar: "Es una bandeja, sirve para transportar platos."
endobject
object Vaso encima:Bandeja
nombre MS:vaso
sinonimos vaso de? cristal
flags recipiente
def alMirar: "Es un vaso de cristal."
endobject
object Dado dentro:Vaso
nombre MS:dado
sinonimos dado blanco
def alMirar: "Es el típico dado de 6 caras blanco."
endobject
object Cazuela dentro:ArmarioCocina
nombre FS:cazuela
sinonimos MS:cazo
def alMirar: "Es una cazuela para cocinar."
endobject
Prueba a examinar todos los objetos y buscar dentro o encima, a ver que tienen.
Resumen
- Hemos visto que hay objetos que pueden contener otros: los recipientes dentro y los soportes encima, para ello se utilizarán los flags
soporteyrecipiente. Y que un objeto puede ser recipiente y soporte a la vez. - Para colocar un objeto encima o dentro de otro hay que especificarlo en la definición del mismo con
dentro:sitiooencima:sitio. - Los recipientes pueden ser abiertos y cerrados si se usa el flag
abrible. Por defecto están abiertos, para que empiecen cerrados hay que usar el flagnot abiertoo!abierto. Si un recipiente está cerrado, su interior permanece oculto e inaccesible hasta que sea abierto. - Un recipiente además puede ser
transparente. Esto permite ver lo que hay en su interior aún estando cerrado. Pero para acceder a su interior sigue haciendo falta abrirlo. - Durante el juego, para saber lo que hay en un objeto necesitamos usar
mirar dentro,mirar en,buscar enoregistrarobjeto (accion BuscarEn) - Podemos coger los objetos que hay sobre los soportes y dentro de los recipientes (si están abiertos) simplemente con
coger objeto(accion Coger) , aunque podemos especificar de donde lo queremos cogercoger objeto de sitio. Esto último es necesario si queremoscoger todo, ya que usado a secas, coge todo lo que hay en el suelo donde está el jugador. Usarcoger todo de sitioes la manera correcta de hacernos con todos los objetos que hay dentro o encima de un objeto. - Podemos meter objetos dentro de un recipiente o encima de un soporte usando
poner objeto en sitioy el sistema ya deduce si es dentro o encima en función del tipo de objeto (accion Meter o accion PonerSobre). Si el objeto es un recipiente y soporte a la vez, tendremos que ser más específicos, usandometer objeto dentro de sitiooponer objeto encima de sitio. - No hay limite en los objetos, ni de cantidad, ni de profundidad del almacenamiento: podemos tener una caja grande, donde dentro hay una mesa, donde encima hay otra caja, donde dentro hay un vaso, etc.
- Podemos vaciar objetos dentro o encima de otros objetos con
vaciar objeto en sitio(accion VaciarEn),vaciar objeto encima de sitioovaciar objeto dentro de sitio(accion VaciarSobre). Si ponemosvaciar objeto, el destino del contenido de dicho objeto será el suelo (accion Vaciar).
| Anterior: Objetos por el suelo y decorado | Siguiente: |