§4.14. Duplicates

Although it is only useful to a limited extent, we can make any number of copies of something:

paste.png "Polygons"

A shape is a kind of thing. A square is a kind of shape. A triangle is a kind of shape.

The Geometry Lab is a room. In the Geometry Lab are three triangles and two squares.

The description "three triangles" makes three identical things, each of the kind "triangle", and similarly for the squares. When the above is compiled, the player can type TAKE TWO TRIANGLES or TAKE ALL THE TRIANGLES and so forth.

Four caveats. Firstly, a counted-out description like "two squares" is only allowed if it combines a number with the name of a kind which is already known (perhaps modified with adjectives, so "two open doors" is fine). If we say:

Two circles are in the Lab.

without having defined "circle" as a kind in advance, then only a single object will be created - whose name is "two circles". (This is because many natural names start with numbers: "six of clubs", for instance, referring to a single playing card, or "12 Hollywood Close" meaning a single house. We wouldn't want such names to be misinterpreted.)

The second caveat is that excessive duplication is expensive in memory and running time. It is perfectly legal to say

In the Lab are 75 triangles.

but the resulting game may be a little sluggish: and Inform draws the line at 100, refusing to create more duplicates than that in any single place. If we really need more than about fifty duplicated objects - say, a tombola containing raffle tickets numbered 1 to 1000 - it is usually better to find some less literal way to simulate this: for instance, only having a single raffle ticket, but with a randomly chosen number on it.

If there are very many items in the same place, commands like TAKE ALL and DROP ALL may mysteriously not quite deal with all of them - this is because the parser, the run-time program which deciphers typed commands, has only limited memory to hold the possibilities. It can be raised with a use option like so:

Use maximum things understood at once of at least 200.

(The default is, as above, 100. Note the "at least".)

Thirdly, note that Inform's idea of "identical" is based on what the player could type in a command to distinguish things. In a few cases this can make items unexpectedly identical. For example:

The Lab is a room. A chemical is a kind of thing. Some polyethylene and polyethylene-terephthalate are chemicals in the Lab.

results surprisingly in "You can see two chemicals here", because the run-time system truncates the words that are typed - POLYETHYLENE and POLYETHYLENE-TEREPHTHALATE look like the same word in a typed command. So Inform decides that these are indistinguishable chemicals. Typically words are truncated after 9 letters, though (unless the Glulx setting is used) punctuation inside a word, such as an apostrophe, can make this happen earlier. The best way to avoid trouble is simply to use more easily distinguishable names. For example:

Some polyethylene and polyethylene terephthalate are chemicals in the Lab.

works fine, because now only one chemical can be called TEREPHTHALATE, and that means they can be distinguished.

Finally: numbers up to twelve may be written out in words in the source text, but larger ones must be written as numerals. So "twelve" or "12", but "13" only.


arrow-up.pngStart of Chapter 4: Kinds
arrow-left.pngBack to §4.13. Values that never vary
arrow-right.pngOnward to §4.15. Assemblies and body parts

This would be a one-star example if it were not for the repainting:

paste.png "Early Childhood 1"

A building block is a kind of thing. A red block, a blue block and a green block are kinds of building block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

But a kind cannot change during play, so this will not do. Instead, the colour will have to be a property of the block. So we might first try this:

paste.png "Early Childhood 2"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

Which is fine, so far as it goes, but the colour property is not at all visible to the player, who simply sees "eleven blocks". We thought of colour as being something outwardly apparent, but Inform does not know this. To achieve a better effect, we will need features from distant chapters. The first is an activity called "printing the name of":

paste.png "Early Childhood 3"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ".

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

This too, however, is unsatisfactory. The individual blocks are correctly described, but we are unable to distinguish them during play: we cannot type "take a green block", for instance. And because the blocks are indistinguishable in play, they are still massed together as "eleven blocks" in room descriptions. We need to go one step further:

paste.png "Early Childhood 4"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ". Understand the colour property as describing a block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

And now everything works nicely: the blocks are grouped by colour, and can be referred to by colour, and we can even change the colour of an individual block during play, using a bit of extra trickery from later:

Understand "paint [something] [colour]" as painting it. Painting it is an action applying to one thing and one colour. Check painting it: if the noun is not a block, say "Paints are only for blocks." instead. Carry out painting it: now the colour of the noun is the colour understood. Report painting it: say "The block is now [the colour of the noun]."

Test me with "get red block / get blue block / g / i / look / paint blue block red / i / look / paint me red".

***ExampleEarly Childhood
A child's set of building blocks, which come in three different colours - red, green and blue - but which can be repainted during play.

This would be a one-star example if it were not for the repainting:

paste.png "Early Childhood 1"

A building block is a kind of thing. A red block, a blue block and a green block are kinds of building block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

But a kind cannot change during play, so this will not do. Instead, the colour will have to be a property of the block. So we might first try this:

paste.png "Early Childhood 2"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

Which is fine, so far as it goes, but the colour property is not at all visible to the player, who simply sees "eleven blocks". We thought of colour as being something outwardly apparent, but Inform does not know this. To achieve a better effect, we will need features from distant chapters. The first is an activity called "printing the name of":

paste.png "Early Childhood 3"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ".

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

This too, however, is unsatisfactory. The individual blocks are correctly described, but we are unable to distinguish them during play: we cannot type "take a green block", for instance. And because the blocks are indistinguishable in play, they are still massed together as "eleven blocks" in room descriptions. We need to go one step further:

paste.png "Early Childhood 4"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ". Understand the colour property as describing a block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

And now everything works nicely: the blocks are grouped by colour, and can be referred to by colour, and we can even change the colour of an individual block during play, using a bit of extra trickery from later:

Understand "paint [something] [colour]" as painting it. Painting it is an action applying to one thing and one colour. Check painting it: if the noun is not a block, say "Paints are only for blocks." instead. Carry out painting it: now the colour of the noun is the colour understood. Report painting it: say "The block is now [the colour of the noun]."

Test me with "get red block / get blue block / g / i / look / paint blue block red / i / look / paint me red".

This would be a one-star example if it were not for the repainting:

paste.png "Early Childhood 1"

A building block is a kind of thing. A red block, a blue block and a green block are kinds of building block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

But a kind cannot change during play, so this will not do. Instead, the colour will have to be a property of the block. So we might first try this:

paste.png "Early Childhood 2"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

Which is fine, so far as it goes, but the colour property is not at all visible to the player, who simply sees "eleven blocks". We thought of colour as being something outwardly apparent, but Inform does not know this. To achieve a better effect, we will need features from distant chapters. The first is an activity called "printing the name of":

paste.png "Early Childhood 3"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ".

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

Test me with "look / get red block".

This too, however, is unsatisfactory. The individual blocks are correctly described, but we are unable to distinguish them during play: we cannot type "take a green block", for instance. And because the blocks are indistinguishable in play, they are still massed together as "eleven blocks" in room descriptions. We need to go one step further:

paste.png "Early Childhood 4"

Colour is a kind of value. The colours are red, blue and green. A block is a kind of thing. A block has a colour. A block is usually blue. Before printing the name of a block: say "[colour] ". Before printing the plural name of a block: say "[colour] ". Understand the colour property as describing a block.

The Nursery is a room. In the Nursery are six red blocks, four blue blocks and a green block.

And now everything works nicely: the blocks are grouped by colour, and can be referred to by colour, and we can even change the colour of an individual block during play, using a bit of extra trickery from later:

Understand "paint [something] [colour]" as painting it. Painting it is an action applying to one thing and one colour. Check painting it: if the noun is not a block, say "Paints are only for blocks." instead. Carry out painting it: now the colour of the noun is the colour understood. Report painting it: say "The block is now [the colour of the noun]."

Test me with "get red block / get blue block / g / i / look / paint blue block red / i / look / paint me red".