Chapter 4: Kinds
4.14. Assemblies and body parts

In the previous chapter, we saw that it was possible to make sub-parts of things. For instance,

The white door is in the Drawing Room. The handle is part of the white door.

creates a door with an attached handle. But what if we want to say that not just this door, but every door, should have a handle? To do this we first need to create a kind called "handle", since there will clearly need to be many handles. The solution is:

A handle is a kind of thing. A handle is part of every door.

"Every" is a loaded word and best used sparingly. A sentence like "A handle is part of every handle" would, if taken literally, mean that a handle takes forever to make and is never finished. Inform will reject this, but the moral is clear: we should think about what we are doing with "every".

We will usually want to work with smaller collections - not literally every room, but with a whole set of them all the same. We can do that like so:

A silver coin is a kind of thing. A banking room is a kind of room. Five silver coins are in every banking room.

The effect of sentences like these is to make what we might call "assemblies" instead of single things. When a banking room is created, so are five more silver coins; when a door is created, so is another handle. Such sentences act not only on items created later on in the source text, but also on all those created so far.

This is especially useful for body parts. If we would like to explore Voltaire's suggestion that history would have been very different if only Cleopatra's nose had been shorter, we will need noses:

A nose is a kind of thing. A nose is part of every person.

Of course, if we make an assembly like this then we had better remember that the player is also a person and also gets a nose. In fact slightly odd things can happen if we combine this with changing the identity of the player. This works:

Cleopatra is a woman in Alexandria. The player is Cleopatra.
A nose is a kind of thing. A nose is part of every person.

but if those lines are in reverse order then Cleopatra's nose is assembled before she becomes the player, with the result that it ends up called "Cleopatra's nose" rather than "your nose" in play - which is very regal but probably not what we want. To avoid this, settle the player's identity early on in the source text.

All of the assemblies above make objects. Most make these new objects "part of" existing ones, but as we saw, they can also be "in" or "on" them. In fact, though, assemblies work in much more general ways: they can assemble values of almost any kind, placed in almost any relationship. To make use of that, we need to create a new verb, a topic which won't be covered properly until a later chapter, but here goes:

A colour is a kind of value. The colours are red, green and blue.

Liking relates various people to various colours. The verb to like (he likes, they like, it is liked) implies the liking relation.

Every person likes a colour.

Now every time a person is created, so is a colour which that person will like. If there are two people in the world, the player and Daphne, then we now have five colours: red, green, blue, Daphne's colour and the player's colour. Alternatively, we can assemble the other way around:

A person likes every colour.

Now we're telling Inform that every time a colour is made, a new person is also made - someone who will like that colour. So this sentence effectively makes three new people, one who likes red, one who likes green, and one who likes blue.


54
* Example  Being Prepared
A kind for jackets, which always includes a container called a pocket.

RB
55
** Example  Model Shop
An "on/off button" which controls whatever device it is part of.

RB
56
*** Example  The Night Before
Instructing Inform to prefer different interpretations of EXAMINE NOSE, depending on whether the player is alone, in company, or with Rudolph the Red-nosed Reindeer.

RB
57
*** Example  U-Stor-It
A "chest" kind which consists of a container which has a lid as a supporter.

RB

Suppose we want to write a game in which there are a number of chests. Each of these chests will be a container, but have a lid which is a supporter.

"U-Stor-It"

Section 1 - Assemblies and Supporters

A chest is a kind of container. A chest is always openable. A chest is usually fixed in place. A chest is usually closed. The specification of a chest is "Represents a container with a separately implemented lid; the lid is itself a supporter."

A lid is a kind of supporter. A lid is part of every chest. The specification of a lid is "A supporter attached to a chest, which can only support things when the chest is closed."

(The "specification" of a kind is not really a property, and is used instead to describe the kind in the Index. So the text of these specifications is never found in the game.) Of course, this doesn't get us very far. We will also want the game to correctly interpret variations on "open the chest" and "close the lid", redirecting actions appropriately.

Section 2 - Opening and closing

Before opening a lid which is part of a chest (called the item):
    try opening the item instead.

Before closing a lid which is part of a chest (called the item):
    try closing the item instead.

Before opening a chest when something is on the lid (called the obstruction) which is part of the noun:
    repeat with item running through things on the obstruction:
        say "(first removing [the item])";
        try taking the item.

Instead of opening a chest when something is on a lid (called the item) which is part of the noun:
    say "You'd have to remove [the list of things on the item] from the lid first." instead.

Instead of looking under a lid which is part of a chest (called the item):
    try opening the item.

We may also want to be able to deal with "put in" and "put on" appropriately, even if the player names the wrong part of the object:

Section 3 - Insertion and Support

Before inserting something into a lid which is part of a chest (called the item):
    try inserting the noun into the item instead.

Before putting something on a chest when a lid (called the item) is part of the second noun:
    try putting the noun on the item instead.

Furthermore, we don't want the player to be able to put things on the lid while the chest is open:

Before putting something on a lid which is part of an open chest (called the item):
    say "(first closing [the item])";
    try closing the item.

Instead of putting something on a lid which is part of an open chest (called the item):
    say "[The item] would need to be closed first."

And then we may also want a couple of rules for describing our assembled object nicely:

Section 4 - Description in Rooms

Instead of examining a closed chest when something is on a lid (called the top) which is part of the noun:
    say "[The noun] is closed, and there [is-are a list of things on the top] on top."

After printing the name of a chest (called the item) while listing contents of a room:
    if a lid (called the second item) which supports something is part of the item:
        say " (on which [is-are a list of things on the second item])";
        omit contents in listing.

Now we are free to create entire treasure rooms at a single blow:

Section 5 - U-Stor-It Facility

The U-Stor-It Facility is a room. The sea trunk, the shipping crate, and a metal box are chests in the U-Stor-It Facility. The metal box contains a sapphire, a gold coin, and a signed photograph of Babe Ruth.

Even though we have never explicitly defined it, the metal box has a "metal box's lid", which we can use at need.

The metal box's lid supports a small card. The description of the small card is "It reads, 'Back in 5 mins - Pandora.'"

Test me with "open trunk / x card / open metal box / put all in metal box / get card / put card on box".


PreviousContentsNext