§8.4. Furniture

Most domestic furniture consists of supporters and containers of one size or another. This means that the simplest furniture needs no elaborate instructions:

The candlestick is on the dining table. The dining table is fixed in place.

The silver salt cellar is on the serving trolley. The serving trolley is pushable between rooms.

The pillow is on the bed. The bed is enterable and fixed in place.

The examples below are therefore mostly ways to get around the usual restrictions on containers (that they only have one interior) and supporters (that they cannot simultaneously be containers as well).

Yolk of Gold provides a set of drawers, that is, a container with multiple interiors.

U-Stor-It provides a way to have containers with a lid which is also a supporter.

Swigmore provides a supporter which holds up the player, but has no top surface as such, and cannot hold up anything else. Kiwi demonstrates a kind of high shelf, whose objects cannot be seen or used unless the player stands on a ladder.

Princess and the Pea shows how a pile of supporters, each on top of the last, could be managed.

Tamed demonstrates furniture large enough to get inside, or on top of.

Circle of Misery demonstrates a conveyor belt, which can hold multiple items but only brings one of them within the player's reach at a time.

* See Position Within Rooms for a box that can be positioned and used as a stepping stool

* See The Human Body for letting the player take different postures on furniture or on the floor

* See Room Descriptions for tables and other furniture whose content listing is suppressed or modified in a room description

* See Entering and Exiting, Sitting and Standing for making the player automatically rise from a seat before leaving the room

* See Clocks and Scientific Instruments for a grandfather clock

* See Kitchen and Bathroom for a mirror the player can look into


arrow-up.pngStart of Chapter 8: Vehicles, Animals and Furniture
arrow-left.pngBack to §8.3. Animals
arrow-right.pngOnward to §8.5. Kitchen and Bathroom

*ExampleTamed
Examples of a container and a supporter that can be entered, as well as nested rooms.

*ExamplePrincess and the Pea
The player is unable to sleep on a mattress (or stack of mattresses) because the bottom one has something uncomfortable under it.

Suppose we want there to be some high shelves in our game, which the player can't get at unless he's standing on a prop of some kind. (This is a pretty hoary and over-used puzzle, but there may still be occasions when it becomes useful again.)

In order to resolve this, we want to set up a raised supporter kind. When something is on a raised supporter, it should be mentioned to the player only if the player is in the right position (i.e., standing on something) and otherwise omitted from the description entirely.

paste.png "Kiwi"

Section 1 - Procedure

A raised supporter is a kind of supporter.

For printing a locale paragraph about a raised supporter (called the high place):
    if the player is on a supporter (called the riser):
        say "Up on [the high place] (and only visible because you're on [the riser]) [is-are a list of things on the high place].";
    otherwise:
        say "The [high place] is above you."

Note that here we don't continue the activity because we want to completely replace the normal behavior of describing what is on supporters.

Definition: a thing (called target item) is out of reach:
    if the player is on a supporter, no;
    if the target item is on a raised supporter, yes;
    no.

Now we also need to prevent the player from interacting with things that are out of reach:

Before doing something:
    if the noun is out of reach or the second noun is out of reach:
        say "You can't reach from down here." instead.

...or restoring things to the shelves while the player is in the wrong position...

Instead of putting something on a raised supporter when the player is not on a supporter:
    say "You can't reach from down here."

And raised supporters shouldn't be searchable from the ground either:

Instead of searching or examining a raised supporter when the player is not on a supporter:
    say "You can't see from down here."

Finally, we need to tackle the case where the player types GET ALL FROM SHELF, because we don't want to list the objects up there if the player can't even see them. We use a rule for deciding whether all includes in order to tell Inform not to consider items that can't be reached, and then we adjust the parser error so that it's a little more instructive than "There are none at all available!", which is what the response would otherwise be:

Disallowed-all is a truth state that varies. Disallowed-all is false.

Rule for deciding whether all includes an out of reach thing:
    now disallowed-all is true;
    it does not.

Rule for printing a parser error when the latest parser error is the nothing to do error and the player is not on a supporter:
    if disallowed-all is true:
        say "Whatever might be up there, you can't see or reach from down here.";
    otherwise:
        make no decision.

A first action-processing rule:
    now disallowed-all is false.

Section 2 - Scenario

The Bottom of the Nursery is a room. "Ever since you ate that mysterious cake, you've been even shorter than usual."

The high shelf is a raised supporter in the Nursery. It is scenery. On the high shelf are a kiwi-green ball and a stuffed dodo.

The step-ladder is an enterable supporter in the Nursery. Understand "ladder" as the step-ladder.

Test me with "x shelf / search shelf / get dodo / get all from shelf / stand on ladder / get all from shelf / search shelf / get off / put all on shelf / get all from shelf / stand on ladder / put all on shelf".

*ExampleKiwi
Creating a raised supporter kind whose contents the player can't see or take from the ground.

Suppose we want there to be some high shelves in our game, which the player can't get at unless he's standing on a prop of some kind. (This is a pretty hoary and over-used puzzle, but there may still be occasions when it becomes useful again.)

In order to resolve this, we want to set up a raised supporter kind. When something is on a raised supporter, it should be mentioned to the player only if the player is in the right position (i.e., standing on something) and otherwise omitted from the description entirely.

paste.png "Kiwi"

Section 1 - Procedure

A raised supporter is a kind of supporter.

For printing a locale paragraph about a raised supporter (called the high place):
    if the player is on a supporter (called the riser):
        say "Up on [the high place] (and only visible because you're on [the riser]) [is-are a list of things on the high place].";
    otherwise:
        say "The [high place] is above you."

Note that here we don't continue the activity because we want to completely replace the normal behavior of describing what is on supporters.

Definition: a thing (called target item) is out of reach:
    if the player is on a supporter, no;
    if the target item is on a raised supporter, yes;
    no.

Now we also need to prevent the player from interacting with things that are out of reach:

Before doing something:
    if the noun is out of reach or the second noun is out of reach:
        say "You can't reach from down here." instead.

...or restoring things to the shelves while the player is in the wrong position...

Instead of putting something on a raised supporter when the player is not on a supporter:
    say "You can't reach from down here."

And raised supporters shouldn't be searchable from the ground either:

Instead of searching or examining a raised supporter when the player is not on a supporter:
    say "You can't see from down here."

Finally, we need to tackle the case where the player types GET ALL FROM SHELF, because we don't want to list the objects up there if the player can't even see them. We use a rule for deciding whether all includes in order to tell Inform not to consider items that can't be reached, and then we adjust the parser error so that it's a little more instructive than "There are none at all available!", which is what the response would otherwise be:

Disallowed-all is a truth state that varies. Disallowed-all is false.

Rule for deciding whether all includes an out of reach thing:
    now disallowed-all is true;
    it does not.

Rule for printing a parser error when the latest parser error is the nothing to do error and the player is not on a supporter:
    if disallowed-all is true:
        say "Whatever might be up there, you can't see or reach from down here.";
    otherwise:
        make no decision.

A first action-processing rule:
    now disallowed-all is false.

Section 2 - Scenario

The Bottom of the Nursery is a room. "Ever since you ate that mysterious cake, you've been even shorter than usual."

The high shelf is a raised supporter in the Nursery. It is scenery. On the high shelf are a kiwi-green ball and a stuffed dodo.

The step-ladder is an enterable supporter in the Nursery. Understand "ladder" as the step-ladder.

Test me with "x shelf / search shelf / get dodo / get all from shelf / stand on ladder / get all from shelf / search shelf / get off / put all on shelf / get all from shelf / stand on ladder / put all on shelf".

*ExampleCircle of Misery
Retrieving items from an airport luggage carousel is such fun, how can we resist simulating it, using a list as a ring buffer?

**ExampleYolk of Gold
Set of drawers where the item the player seeks is always in the last drawer he opens, regardless of the order of opening.

**ExampleSwigmore U.
Adding a new kind of supporter called a perch, where everything dropped lands on the floor.

***ExampleU-Stor-It
A "chest" kind which consists of a container which has a lid as a supporter.