We begin with the location and its fittings, and we create a kind of value which names the different internal positions we will allow.
"Further Reasons Why All Poets Are Liars"
Nook Obscure is a room. "Above the College kitchens, which make a humming sound, less tuneable than bees, but hardly less industrious, with shrill notes of sharp command and scolding intermixed: and below Trinity's loquacious clock, who never lets the quarters, night or day, slip by him unproclaimed, and tells the hours twice over with a male and female voice. In short, the kind of rubbish room they give to a northern villager. But you get a bed and a high shelf all of your own. And you long to find some Romantic way to look out of the window."
The window, the shelf and the bed are scenery in the Nook Obscure. The shelf and the bed are supporters. The bed is enterable.
Internal position is a kind of value. The internal positions are nowhere at all, over by the window, under the shelf and near the bed.
The box is an enterable supporter in Nook Obscure. The current box position is an internal position that varies. The current box position is near the bed. "Your packing case, stamped W. WORDSWORTH (KENDAL), is [current box position]." Instead of taking the box, say "It is filled with your peerless rock collection and too heavy to lift, but could be pushed." Instead of opening the box, say "It is securely nailed shut."
We create an action, "pushing it over to", for pushing a box around on the floor of a single location. (Calling this "pushing it over to" prevents clashes with the existing "pushing it to" action, which is for pushing things from one room to another.) Almost half of the text which defines the action is concerned with the two action variables, but they make the implementation of everything else so much easier that we end up writing less than if we hadn't used them.
Understand "push [box]" as a mistake ("You can push the box to the window, the bed or the shelf.").
Understand "push [something] to [something]" as pushing it over to. Pushing it over to is an action applying to two things.
The pushing it over to action has an internal position called the old position.
The pushing it over to action has an internal position called the new position.
Setting action variables for pushing something over to something:
now the old position is the current box position;
now the new position is nowhere at all;
if the second noun is the window, now the new position is over by the window;
if the second noun is the bed, now the new position is near the bed;
if the second noun is the shelf, now the new position is under the shelf.
Check pushing it over to:
if the noun is not the box, say "That's not something you can push." instead;
if the player is on the bed, say "You can't reach from here." instead;
if the player is on the noun, say "Not while you are standing on [the noun]." instead;
if the new position is nowhere at all, say "You can only push [the noun] to the window, the bed or the shelf." instead;
if the new position is the old position, say "The [noun] is already [new position]." instead.
Carry out pushing it over to:
now the current box position is the new position.
Report pushing it over to:
say "With some effort, you shove [the noun] from [old position] to [new position]."
Everything which remains simply provides a couple of puzzles to test this arrangement.
Euclid's Elements is on the shelf. Understand "euclid" or "book" as the Elements.
Instead of taking something (called the item) which is on the shelf:
if the player is on the box and the current box position is under the shelf, continue the action;
say "You cannot reach [the item], which is up on the shelf."
Instead of examining the window:
say "This window opens rather unpromisingly onto the chapel wall opposite, so even granted the moonlight it is dark in here. Still, surely there's a poem here somewhere?"
Instead of examining the window when the player is on the bed:
say "Just a blank patch of chapel wall."
Instead of examining the window when the player is on the box:
if the current box position is near the bed:
say "Tantalisingly, you are not quite able to spy the statue.";
otherwise if the current box position is under the shelf:
say "All you can see is the antechapel wall, and the dull silver gleam of the pealing organ.";
otherwise:
say "At last! You can just, standing on tiptoes on the box right up at the window, make out the top of the statue! Of such epiphanies are Poesy born. Let's see now... oh yes...[paragraph break]And from my pillow, looking forth by light[line break]Of moon or favouring stars, I could behold[line break]The antechapel where the statue stood[line break]Of Newton with his prism and silent face,[line break]The marble index of a mind for ever[line break]Voyaging through strange seas of Thought, alone.";
end the story finally.
Test me with "get on bed / x window / get off / x window /get elements / get on box / x window / get elements / push box to shelf / get off / push box to shelf / get on box / get elements / x window / get off / push box to window / get on box / x window".
Sometimes we may want a room to be visible from the outside in one location, but treated as a separate location when we are inside. The simplest way to do this is to make the exterior form of the object into a door object, and to describe it differently from different vantage points. (Doors in general are described more fully in the Doors section of the Things chapter.)
"Starry Void"
The Center Ring is a room.
The magician's booth is a door. "[if the player is in Center Ring]A magician's booth stands in the corner, painted dark blue with glittering gold stars.[otherwise if the magician's booth is closed]A crack of light indicates the way back out to the center ring.[otherwise]The door stands open to the outside.[end if]".
Here we've arranged for the booth to be described in the initial room description in different ways depending on where the player is when viewing it. We might like to do the same if the player takes a closer look:
Instead of examining the magician's booth in the Center Ring:
say "It is dark blue and glittering with gold stars. [if the booth is open]The door currently stands open[otherwise]It has been firmly shut[end if]."
Instead of examining the magician's booth in the Starry Void:
say "The booth door is [if the magician's booth is open]wide open[otherwise]shut, admitting only a thin crack of light[end if]."
And now we put it in place:
The magician's booth is inside from Center Ring and outside from Starry Void.
...and make sure that the booth-and-door object responds to all the names we have used for it in different places:
Understand "door" or "of" or "the" or "light" or "crack" or "thin crack" as the booth.
Test me with "examine booth / open door of the booth / in / examine door / close door / look / examine crack of light".
A final nice touch, if we're so inclined, is to borrow from the Basic Actions chapter and make the player automatically open the booth door before trying to enter:
Before going through the closed magician's booth:
say "(first opening the door of the booth)[command clarification break]";
silently try opening the booth.
For the contrasting case of a space that is nested inside another place and is not its own room -- say a stall at an open-air market, or a rowboat on a lake -- see the example "Tamed".