Chapter 12: Advanced Actions
12.10. Action variables

For some complex situations, it can be useful to keep track of a few values throughout the processing of the action. This is not an everyday occurrence: in the Standard Rules, for instance, only two or three out of 90 actions need to do this. But suppose we want to write a more deluxe version of our "photographing" action. This time, rather than having a single thing called the "camera", we will provide a whole range of possible cameras, varying in quality:

Photographing is an action applying to one visible thing and requiring light. Understand "photograph [something]" as photographing.

The Studio is a room. Sally is a woman in the Studio. A foam-lined tote bag is in the Studio.

A camera is a kind of thing. A camera has a number called picture quality. The digital SLR camera is a camera in the tote bag. The player carries a camera called the instant one-shot camera. The picture quality of the SLR camera is 10. The picture quality of the one-shot is 2. Definition: a camera is sharp if its picture quality is 5 or more.

And we will want the photographing action to have the player use the best-quality camera which comes to hand. We will give the action a variable called the 'camera photographed with', thus:

The photographing action has an object called the camera photographed with.

Every action's variables must be named differently from those of all other actions, because there are some "before" rules (for instance) which take effect for many different actions, and which might need access to any of their variables. So action variables should be named in a way marking out to which action they belong. The best way to do this is to include the past participle of the action name - just as "camera photographed with" contains the past participle "photographed" of the action "photographing".

This value is created when the action begins, and disappears when the action ends. (If the action should happen a second time before the first time was completed, a second copy of the value is created, leaving the original undisturbed.) When the action begins, the value starts out as something neutral - so if it is a number, it starts out as 0, if a text, it starts out as the blank text "", and so on. Here it is an object, so it starts out as nothing - the value meaning no object at all. But of course we want to give it a value ourselves. We can do that using the "setting action variables" rulebook. For instance:

Setting action variables for photographing:
    now the camera photographed with is the sharpest camera which is carried by the actor.

The "setting action variables" rulebook is run through before even the before rules, and it has no power to stop or change the action. Its rules should say nothing and do nothing other than to set rulebook variables like this one. Note that it is intended to work for any actor, not only the player: so rather than referring to the player as the performer of the action, we need to write "the actor", as in the example above. (See subsequent sections for more on actors.)

We can now write rules such as:

A check photographing rule:
    if the camera photographed with is nothing:
        say "You can hardly photograph without a camera, now can you?" instead.

Only rules to do with the photographing action - before, instead, after, check, carry out, or report rules, and so on - are allowed to see the 'camera photographed with' value: it's the private property of the action.

A further elaboration allows us to make rules about photographing neater to write. If we create our variable like so:

The photographing action has an object called the camera photographed with (matched as "using").

...then we are now allowed to add an optional 'using ...' clause onto a description of the action. The clause has to be introduced with a single word: here, it's 'using'. For instance, we could write rules such as

Instead of photographing something using the one-shot camera:
    say "But you promised to give this to Sally's nephew."

Check photographing something using the noun:
    say "That would require some sort of contraption with mirrors." instead.

Report photographing something using a sharp camera:
    say "You feel cool and important as the shutter clicks."

(This is the method used by the Standard Rules to attach optional clauses such as 'to', 'with' and 'through' to the going action.)


198
* Example  Further Reasons Why All Poets Are Liars
The young William Wordsworth, pushing a box about in his room, must struggle to achieve a Romantic point of view.

RB
199
* Example  The Second Oldest Problem
Adapting the going action so that something special can happen when going from a dark room to another dark room.

RB
200
* Example  Removal
TAKE expanded to give responses such as "You take the book from the shelf." or "You pick up the toy from the ground."

RB
201
** Example  Puff of Orange Smoke
A system in which every character has a body, which is left behind when the person dies; attempts to do something to the body are redirected to the person while the person is alive.

RB
202
*** Example  Croft
Adding special reporting and handling for objects dropped when the player is on a supporter, and special entering rules for moving from one supporter to another.

RB

Suppose that we have a design in which the player spends lots of time on enterable supporters, and in which we want to report certain actions -- dropping things onto those supporters, or leaping from one to another -- in a new way. We might begin by adding some action variables to help us keep track of the situation:

"Croft"

The dropping action has an object called the container dropped into (matched as "into").

The dropping action has an object called the supporter dropped onto (matched as "onto").

Rule for setting action variables for dropping:
    if the actor is in a container (called C), now the container dropped into is C;
    if the actor is on a supporter (called C), now the supporter dropped onto is C.

Report dropping a heavy thing onto a metallic thing:
    say "You drop [the noun], and [the supporter dropped onto] clangs protestingly." instead.

Report someone dropping a heavy thing onto a metallic thing:
    say "[The actor] drops [the noun] onto [the supporter dropped onto], which clangs protestingly." instead.

A thing can be heavy or light. A thing can be metallic or ordinary. A thing is usually ordinary. A thing is usually light.

The Ancient Cambodian Temple is a room. "A vast space built for ancient and forgotten rituals. The stone floor crawls with vermin. Well above the floor, and separated by some feet, are twin platforms built into the wall: the one carved of jointed wood, the other of sheets of graven bronze."

A platform is a kind of supporter. A platform is always enterable. A platform is usually scenery.

The bronze platform is a metallic platform in the Temple. Lara is a woman. She is on the bronze platform. She wears safari pants and a tank top. She carries a gun and a map. The gun is heavy.

The wood platform is an ordinary platform in the Temple. The player is on the wood platform. The player carries a rope, an Ancient Cambodian/English Phrasebook, a pickaxe, and a precious idol. The idol and the pickaxe are heavy.

Persuasion rule: persuasion succeeds.

The entering action has an object called the place left (matched as "from").
    Check entering a platform from a platform:
        if actor is the player, say "You leap into midair to cross the distance...";
    otherwise say "[The actor] leaps gracefully across the distance...";
    move the actor to the holder of the noun, without printing a room description.

Because this rule occurs before the "implicitly pass through other barriers rule", that rule will not occur when we move from platform to platform; we'll use our own custom rule instead.

Rule for setting action variables for entering:
    now the place left is the holder of the actor.

Report entering a platform from a platform:
    say "You land in a cat-like crouch on [the noun]." instead.

Report Lara entering a platform from a platform:
    say "Lara lands soundlessly on [the noun][if the noun supports the player] beside you[end if]." instead.

Report entering a platform from the location:
    say "You jump, catch the edge of [the noun] in your hands, and -- exerting considerable upper-body strength -- pull yourself up onto it." instead.

Report Lara entering a platform from a location:
    say "Lara jumps, catches the edge of [the noun], and is standing upright on it, all in less time than it takes to tell."

Instead of examining a person who is not the player:
    say "[The noun] carries [list of things carried by the noun] and wears [list of things worn by the noun]."

Instead of climbing a platform, try entering the noun.

Test me with "Lara, drop map / lara, drop gun / drop idol / enter bronze platform / drop pickaxe / get off / climb wood".


PreviousContentsNext