§7.8. Saying Complicated Things
As we saw in the overview, there are challenges in choosing the commands with which the player will communicate to the game. Two common approaches are ASK/TELL conversation, where the player can ask or tell characters about keywords, as in ASK JILL ABOUT JACK or TELL FARMER ABOUT CHICKEN COOP, and menu-based conversation, where the player is offered a list of things to say and must pick one (often by number), as in
1) Ask Jill where Jack went.
2) Tell Jill that the chicken coop was robbed.
or, sometimes,
1) "Jill, have you seen your no-good layabout brother Jack anywhere?"
2) "Look, Farmer Jill, I think a fox got into the chickens."
The problem with ASK/TELL conversation is that it can feel undirected - if the player doesn't know which keywords to ask or tell about next, he gets stuck. It also doesn't always provide much sense of ongoing context or conversational flow, since the player can ask lots of unrelated questions and jump around a lot. What's more, sometimes the thing the player character asks isn't quite the question the player had in mind. If we type ASK JILL ABOUT JACK, Jill could wind up answering any of a number of questions - where Jack is, how old Jack is, whether Jack committed the recent murder, and so on. The player doesn't have much fine control over the conversation. Nonetheless, this is sometimes just what we want: Farewell implements a moderately sophisticated system along these lines, which keeps track of what the player has already said and allows him to review past conversation.
Menu-based conversation solves most of these problems: a branching tree of conversation choices maintains a consistent flow of discussion, it's hard for the player to run out of things to say, and the player always knows what his character is about to say. But there are compensating flaws. For one thing, a menu doesn't allow for many surprises. The player can see all the conversation the game has to offer by working methodically through all the menu branches. (This problem is sometimes referred to as the "lawnmower effect", since the process of seeing all the conversation is like the process of running a lawnmower over every inch of the lawn. It becomes a chore rather than an entertainment.) Menu systems can be long-winded to set up and therefore none are exemplified here, but several have been released as extensions for Inform.
Since about 2001, more and more IF has used a sort of compromise method: the player is allowed to ask or tell about keywords, but he's sometimes given prompts about things to say that follow naturally on the conversation he was just having, as in
You could ask where Jack is.
Moreover, when he asks about a topic where many comments are possible, he'll be allowed to clarify, either using a menu or through a disambiguation question such as
>ask Jill about Jack
Do you want to ask where Jack is, how old Jack is, or whether Jack committed the recent murder?
Sweeney implements one such hybrid type of conversation.
A third option is to take away almost all the player's expressiveness and give him just one command, TALK TO. The player can TALK TO characters whenever he wants, and the game will pick the most appropriate thing for him to talk about. This works best in works with few or simple puzzles and a fast-moving, constrained plot, where the player will keep having new things to talk about. Cheese-makers demonstrates this.
Finally, a few extreme games try to fake natural language understanding by looking for keywords in the player's input, rather than an exact grammar. This is perilous, because it is all too easy for the game to completely misunderstand what the player meant to type. Nonetheless, for the sake of example, see Complimentary Peanuts, in which the incomprehension is partly excused by the fact that the player is talking to someone a bit hard of hearing.
We begin with the idea that each person comes with his own table of things to say:
"Farewell"
A person has a table name called conversation.
Instead of asking someone about something:
let the source be the conversation of the noun;
if topic understood is a topic listed in source:
if there is a turn stamp entry:
say "[The noun] has already told you that [summary entry].";
otherwise:
now turn stamp entry is the turn count;
say "[reply entry][paragraph break]";
otherwise:
say "[The noun] stares at you blankly."
For the sake of simplicity, we'll conflate asking and telling here, though it would certainly be possible to have a more complex implementation if we want the characters to be told things as well.
Instead of telling someone about something:
try asking the noun about it.
Now we might want to add a recap command to review conversation that has already occurred.
Definition: a person is other if it is not the player.
Understand "recap" or "recall" or "review" as recalling conversations.
Recalling conversations is an action applying to nothing.
Since we've been recording the turn count of each conversation bit, we can even present these in order by sorting the tables first.
Carry out recalling conversations:
repeat with speaker running through other people:
let source be the conversation of the speaker;
sort source in turn stamp order;
say "[The speaker] has so far told you: [line break]";
let index be 0;
repeat through source:
if there is a turn stamp entry:
let index be 1;
say " [summary entry][line break]";
if index is 0, say " absolutely nothing[line break]";
say conditional paragraph break.
Now it remains only to create a couple of characters and provide them both with something to say:
The Farewell Bend Cafe is a room. "Beautiful Farewell Bend, Idaho -- or is it Oregon? An almost-abandoned truckstop, in any case, on one of those interminable American east-west highways."
Tina is a woman in the Farewell Bend Cafe. The conversation of Tina is the Table of Tina's Chatter. "Tina the waitress is slowly pouring coffee from the pot with a black neck into the pot with an orange neck."
George is a man in the Farewell Bend Cafe. The conversation of George is the Table of George's Chatter. "There is also a large man at table five. The tattoo on his arm says George. For the moment we will assume that it is his own name and not someone else's."
Table of Tina's Chatter
topic | reply | summary | turn stamp |
"aasvogel" | "'Oh, it's a vulture.'" | "that an aasvogel is a vulture" | a number |
"acaudate" | "She shrugs, mid-pour. 'Means something doesn't have a tail.'" | "that acaudate means 'tailless'" | -- |
"absorptiometer" | "'It's a thing that measures the solubility of gases in a liquid,' she explains gently, as to a child." | "that an absorptiometer measures solubility of gasses in a liquid" | -- |
Table of George's Chatter
topic | reply | summary | turn stamp |
"baccaceous" | "'Something that has or bears berries,' says George, without looking up." | "that baccaceous means berry-bearing or berry-like" | a number |
"bagheera" | "'Oh, that'd be a velvet-like textile.'" | "that bagheera is a velvet-like textile" | -- |
"balistarius" | "'That's a crossbow-man,' George replies instantly." | "that a balistarius is a crossbow-man" | -- |
A word of warning: this system does assume that every person in the game has a conversation table defined. If that were not the case, we would have to be a bit more careful.
As always, we can override specific words, too:
Instead of asking Tina about "advertisement" for the first time:
say "Tina looks embarrassed. 'Of course! I almost forgot.' She hands you a brochure.";
move the brochure to the player.
The encyclopedia sales brochure is a thing. The description is "A glossy flyer indicating that you can receive a free Volume A-Aalto of the New Idahoan Encyclopedia Set if you send back the business reply card, and then have the option of purchasing the remaining volumes at a very very reasonable price."
Test me with "recap / ask tina about aasvogel / recap / ask george about baccaceous / ask tina about absorptiometer / recap / ask tina about advertisement / read brochure".
|  ExampleFarewell People who respond to conversational gambits, summarize what they said before if asked again, and provide recap of conversation that is past.
|
We begin with the idea that each person comes with his own table of things to say:
"Farewell"
A person has a table name called conversation.
Instead of asking someone about something:
let the source be the conversation of the noun;
if topic understood is a topic listed in source:
if there is a turn stamp entry:
say "[The noun] has already told you that [summary entry].";
otherwise:
now turn stamp entry is the turn count;
say "[reply entry][paragraph break]";
otherwise:
say "[The noun] stares at you blankly."
For the sake of simplicity, we'll conflate asking and telling here, though it would certainly be possible to have a more complex implementation if we want the characters to be told things as well.
Instead of telling someone about something:
try asking the noun about it.
Now we might want to add a recap command to review conversation that has already occurred.
Definition: a person is other if it is not the player.
Understand "recap" or "recall" or "review" as recalling conversations.
Recalling conversations is an action applying to nothing.
Since we've been recording the turn count of each conversation bit, we can even present these in order by sorting the tables first.
Carry out recalling conversations:
repeat with speaker running through other people:
let source be the conversation of the speaker;
sort source in turn stamp order;
say "[The speaker] has so far told you: [line break]";
let index be 0;
repeat through source:
if there is a turn stamp entry:
let index be 1;
say " [summary entry][line break]";
if index is 0, say " absolutely nothing[line break]";
say conditional paragraph break.
Now it remains only to create a couple of characters and provide them both with something to say:
The Farewell Bend Cafe is a room. "Beautiful Farewell Bend, Idaho -- or is it Oregon? An almost-abandoned truckstop, in any case, on one of those interminable American east-west highways."
Tina is a woman in the Farewell Bend Cafe. The conversation of Tina is the Table of Tina's Chatter. "Tina the waitress is slowly pouring coffee from the pot with a black neck into the pot with an orange neck."
George is a man in the Farewell Bend Cafe. The conversation of George is the Table of George's Chatter. "There is also a large man at table five. The tattoo on his arm says George. For the moment we will assume that it is his own name and not someone else's."
Table of Tina's Chatter
topic | reply | summary | turn stamp |
"aasvogel" | "'Oh, it's a vulture.'" | "that an aasvogel is a vulture" | a number |
"acaudate" | "She shrugs, mid-pour. 'Means something doesn't have a tail.'" | "that acaudate means 'tailless'" | -- |
"absorptiometer" | "'It's a thing that measures the solubility of gases in a liquid,' she explains gently, as to a child." | "that an absorptiometer measures solubility of gasses in a liquid" | -- |
Table of George's Chatter
topic | reply | summary | turn stamp |
"baccaceous" | "'Something that has or bears berries,' says George, without looking up." | "that baccaceous means berry-bearing or berry-like" | a number |
"bagheera" | "'Oh, that'd be a velvet-like textile.'" | "that bagheera is a velvet-like textile" | -- |
"balistarius" | "'That's a crossbow-man,' George replies instantly." | "that a balistarius is a crossbow-man" | -- |
A word of warning: this system does assume that every person in the game has a conversation table defined. If that were not the case, we would have to be a bit more careful.
As always, we can override specific words, too:
Instead of asking Tina about "advertisement" for the first time:
say "Tina looks embarrassed. 'Of course! I almost forgot.' She hands you a brochure.";
move the brochure to the player.
The encyclopedia sales brochure is a thing. The description is "A glossy flyer indicating that you can receive a free Volume A-Aalto of the New Idahoan Encyclopedia Set if you send back the business reply card, and then have the option of purchasing the remaining volumes at a very very reasonable price."
Test me with "recap / ask tina about aasvogel / recap / ask george about baccaceous / ask tina about absorptiometer / recap / ask tina about advertisement / read brochure".
|
|  ExampleSweeney A conversation where each topic may have multiple questions and answers associated with it, and where a given exchange can lead to new additions to the list.
|
|