Chapter 2: Adaptive Prose
§2.1. Varying What Is Written; §2.2. Varying What Is Read; §2.3. Using the Player's Input
§2.1. Varying What Is Written
Before getting to actual recipes, many recipe books begin with intimidating lists of high-end kitchen equipment (carbon-steel pans, a high-temperature range, a Provencal shallot-grater, a set of six pomegranate juicers): fortunately, readers who have downloaded Inform already have the complete kitchen used by the authors. But the other traditional preliminaries, about universal skills such as chopping vegetables, boiling water and measuring quantities, do have an equivalent.
For us, the most basic technique of IF is to craft the text so that it smoothly and elegantly adapts to describe the situation, disguising the machine which is never far beneath the surface. This means using text substitutions so that any response likely to be seen more than once or twice will vary.
M. Melmoth's Duel demonstrates three basic techniques: an ever-changing random variation, a random variation changing only after the player has been absent for a while, and a message tweaked to add an extra comment in one special case. (Random choices can be quite specifically constrained, as Ahem shows in passing.) Fifty Ways to Leave Your Larva and Fifty Times Fifty Ways show how a generic message can be given a tweak to make it a better fit for the person it currently talks about. Curare picks out an item carried by the player to work into a message, trying to make an apt rather than random choice. Straw Into Gold demonstrates how to have Inform parrot back the player's choice of name for an object.
Another reason to vary messages is to avoid unnatural phrasing. Ballpark turns needlessly precise numbers - another computerish trait - into more idiomatic English. (Likewise Numberless, though it is really an example demonstrating how to split behaviour into many cases.) Prolegomena shows how to use these vaguer quantifiers any time Inform describes a group of objects (as in "You can see 27 paper clips here.").
Blink, a short but demanding example from the extreme end of Writing with Inform, shows how the basic text variation mechanisms of Inform can themselves be extended. Blackout demonstrates text manipulation at a lower level, replacing every letter of a room name with "*" when the player is in darkness.
Inform's included extension Complex Listing allows us more control over the order and presentation of lists of items.
For how to change printed text to upper, lower, sentence, or title casing, see Rocket Man.
| ExampleAhem Writing a phrase, with several variant forms, whose function is to follow a rule several times.
|
|
| ExampleNumberless A simple exercise in printing the names of random numbers, comparing the use of "otherwise if...", a switch statement, or a table-based alternative.
|
|
| ExampleResponsive Altering the standard inventory text for when the player is carrying nothing.
|
|
| ExampleProlegomena Replacing precise numbers with "some" or other quantifiers when too many objects are clustered together for the player to count at a glance.
|
|
| ExampleCurare A phrase that chooses and names the least-recently selected item from the collection given, allowing the text to cycle semi-randomly through a group of objects.
|
|
| ExampleBlink Making a "by atmosphere" token, allowing us to design our own text variations such as "[one of]normal[or]gloomy[or]scary[by atmosphere]".
|
|
Some of our default actions establish relations between items in the world, and reporting on the relation ("You are now carrying the fedora") can be a valid response alongside reporting on the action itself ("You take the fedora").
To do this, we need to teach Inform explicitly which relations are the results of actions, then check this when reporting on actions:
"Variety 2"
Section 1 - Descriptive Functionality
Describing relates various verbs to various action names. The verb to describe means the describing relation.
Table of Action Results
related action | relation |
the taking action | the carrying relation |
the wearing action | the wearing relation |
the taking off action | the carrying relation |
To take is a verb. To acquire is a verb. To get is a verb.
The verb take describes the taking action. The verb acquire describes the taking action. The verb get describes the taking action.
To drop is a verb. To put down is a verb. To discard is a verb. The verb drop describes the dropping action. The verb put down describes the dropping action. The verb discard describes the dropping action.
To sniff is a verb. To smell is a verb. The verb sniff describes the smelling action. The verb smell describes the smelling action.
To jump is a verb. To leap is a verb. To pirouette is a verb. The verb jump describes the jumping action. The verb leap describes the jumping action. The verb pirouette describes the jumping action.
To don is a verb. The verb don describes the wearing action.
To doff is a verb. The verb doff describes the taking off action.
After an actor doing something when the noun is nothing and a verb describes (the action name part of the current action) (this is the apply random verbs to describing nounless actions rule):
say "[The actor] [verb rendering applied to a random verb that describes (the action name part of the current action)].";
rule succeeds.
After an actor doing something to something when a verb describes (the action name part of the current action) (this is the apply random verbs to describing actions rule):
let current action name be the action name part of the current action;
if a random chance of 1 in 2 succeeds and the current action name is a related action listed in the Table of Action Results:
choose a row with the related action of current action name in the Table of Action Results;
let R be the relation entry;
let subject be the actor;
let chosen object be the noun;
say "[The subject] [are] now [present participle of a random verb that means R] [the chosen object].";
else:
say "[The actor] [verb rendering applied to a random verb that describes (the action name part of the current action)] [the noun].";
rule succeeds.
To decide which text is the rendering of (V - verb) (this is verb rendering):
decide on "[adapt V]".
To say infinitive of (V - a verb): (- {V}(1); -).
To say past participle of (V - a verb): (- {V}(2); -).
To say present participle of (V - a verb): (- {V}(3); -).
Section 2 - Scenario
Lab is a room. The fedora is a wearable thing in the Lab.
Test me with "wear the fedora / take off the fedora / wear fedora / take off fedora".
|  ExampleVariety 2 This builds on the Variety example to add responses such as "You are now carrying the fedora" that describe relations that result from a given verb, as alternate responses.
|
Some of our default actions establish relations between items in the world, and reporting on the relation ("You are now carrying the fedora") can be a valid response alongside reporting on the action itself ("You take the fedora").
To do this, we need to teach Inform explicitly which relations are the results of actions, then check this when reporting on actions:
"Variety 2"
Section 1 - Descriptive Functionality
Describing relates various verbs to various action names. The verb to describe means the describing relation.
Table of Action Results
related action | relation |
the taking action | the carrying relation |
the wearing action | the wearing relation |
the taking off action | the carrying relation |
To take is a verb. To acquire is a verb. To get is a verb.
The verb take describes the taking action. The verb acquire describes the taking action. The verb get describes the taking action.
To drop is a verb. To put down is a verb. To discard is a verb. The verb drop describes the dropping action. The verb put down describes the dropping action. The verb discard describes the dropping action.
To sniff is a verb. To smell is a verb. The verb sniff describes the smelling action. The verb smell describes the smelling action.
To jump is a verb. To leap is a verb. To pirouette is a verb. The verb jump describes the jumping action. The verb leap describes the jumping action. The verb pirouette describes the jumping action.
To don is a verb. The verb don describes the wearing action.
To doff is a verb. The verb doff describes the taking off action.
After an actor doing something when the noun is nothing and a verb describes (the action name part of the current action) (this is the apply random verbs to describing nounless actions rule):
say "[The actor] [verb rendering applied to a random verb that describes (the action name part of the current action)].";
rule succeeds.
After an actor doing something to something when a verb describes (the action name part of the current action) (this is the apply random verbs to describing actions rule):
let current action name be the action name part of the current action;
if a random chance of 1 in 2 succeeds and the current action name is a related action listed in the Table of Action Results:
choose a row with the related action of current action name in the Table of Action Results;
let R be the relation entry;
let subject be the actor;
let chosen object be the noun;
say "[The subject] [are] now [present participle of a random verb that means R] [the chosen object].";
else:
say "[The actor] [verb rendering applied to a random verb that describes (the action name part of the current action)] [the noun].";
rule succeeds.
To decide which text is the rendering of (V - verb) (this is verb rendering):
decide on "[adapt V]".
To say infinitive of (V - a verb): (- {V}(1); -).
To say past participle of (V - a verb): (- {V}(2); -).
To say present participle of (V - a verb): (- {V}(3); -).
Section 2 - Scenario
Lab is a room. The fedora is a wearable thing in the Lab.
Test me with "wear the fedora / take off the fedora / wear fedora / take off fedora".
|
|  ExampleVariety Suppose we want all of our action responses to display some randomized variety. We could do this by laboriously rewriting all of the response texts, but this example demonstrates an alternative.
|
|
|  ExampleFun with Participles Creating dynamic room descriptions that contain sentences such as "Clark is here, wasting time" or "Clark is here, looking around" depending on Clark's idle activity.
|
|
|  ExampleHistory Lab We create phrases such as "the box we took" and "the newspaper Clark looked at" based on what has already happened in the story.
|
|
|  ExampleRelevant Relations An example of how to create room descriptions that acknowledge particular relations using their assigned verbs, rather than by the heavily special-cased code used by the standard library.
|
|