Suppose that, contrary to the usual rules of interactive fiction, we want to allow the player to discover the locations of things he hasn't actually seen yet:
"One of Those Mornings"
Understand "find [any thing]" as finding.
Finding is an action applying to one visible thing.
Carry out finding:
if the player is carrying the noun:
say "You're holding [the noun]!";
otherwise:
say "You left [the noun] [if the noun is on a supporter]on[otherwise]in[end if] [the holder of the noun]."
The holder of the noun can be a room, a supporter, or a container: the phrase is not picky. We would want to be a little more careful if it were ever possible for an item to have been "removed from play" in our game, since then the holder could be nothing, and that would have odd results. In this particular example, though, that will not arise.
And that's it, as far as the find command goes. The rest is local color.
The Exhibition Room is a room. It contains a closed locked lockable transparent openable container called the display case. The display case contains a priceless pearl. The display case is scenery. The description of the Exhibition Room is "By far the finest thing in the room is a priceless pearl in a glass display case. It should of course be yours[if key is not visible], if only you can remember where you hid the key[end if]."
The silver key unlocks the display case.
A jade vase, a teak chest, a bronze teakettle, and a child's burial casket are openable closed containers in the Exhibition Room.
After taking the pearl:
say "The pearl rolls into your hand, gleaming in the oblique light; your fortune is made.";
end the story finally.
If we want to have the key found in different places when the game is replayed:
When play begins:
let the space be a random container which is not the display case;
move the silver key to the space.
Every turn:
say "Your watch ticks with maddening loudness."
The time of day is 1:02 AM.
At 1:08 AM: say "The security guard arrives to find you fumbling about with keys. Curses."; end the story.
Test me with "find pearl / find teakettle / get teakettle / find teakettle / find key".
Suppose we want the player to be able to go after characters who are moving around the map. The trick, of course, is that once characters are gone they are no longer visible to "follow [person]", so we need "follow [any person]" to find them.
"Actaeon"
A person has a room called last location.
Understand "follow [any person]" as following. Understand the commands "chase" and "pursue" as "follow".
Following is an action applying to one visible thing.
Check following:
if the noun is the player, say "Wherever you go, there you are." instead;
if the noun is visible, say "[The noun] is right here." instead;
if the last location of the noun is not the location, say "It's not clear where [the noun] has gone." instead.
Here again the best route comes in handy:
Carry out following:
let the destination be the location of the noun;
if the destination is not a room, say "[The noun] isn't anywhere you can follow." instead;
let aim be the best route from the location to the destination;
say "(heading [aim])[line break]";
try going aim.
Corinth is a room. Athens is east of Corinth. Epidaurus is southeast of Corinth and east of Mycenae. Mycenae is south of Corinth. Olympia is west of Mycenae. Argos is south of Mycenae. Thebes is northwest of Athens. Pylos is south of Olympia. Sparta is east of Pylos and south of Argos. Delphi is northwest of Thebes.
Artemis is a woman in Corinth.
We do also have to make sure that whenever we move a person from room to room, we record where they were moved from; otherwise, our clever restrictions about whom the player can pursue will not work properly.
To move (pawn - a person) tidily to (target - a room):
now the last location of the pawn is the holder of the pawn;
move the pawn to the target.
Every turn:
let current location be the location of Artemis;
let next location be a random room which is adjacent to the current location;
if Artemis is visible, say "Artemis heads to [the next location].";
move Artemis tidily to next location;
if Artemis is visible, say "Artemis arrives from [the current location]."
Test me with "wait / follow artemis / follow artemis / follow artemis".