Chapter 7: Other Characters
7.15. Goal-Seeking Characters

Goal-seeking characters are the most advanced IF life-form: they want to achieve specific outcomes, and they are able to work out plans of approach in order to bring these things about. They walk to rooms, open containers to search for things, use keys and tools, and ask leading questions in conversation.

A really advanced implementation of goal-seeking behavior is beyond the scope of our examples (though extensions exist that treat the problem more thoroughly). We can accomplish a surprising amount without heavy customization, though, if we keep in mind three points of technique:

First: it helps to think abstractly and to create broadly-defined actions as a first step to more specific tasks. For instance, a character's goal might be to eat some dinner. He'd be equally satisfied with spaghetti carbonara or with braised lamb shanks, but he needs to figure out which is available. So we might have our every turn rule (or whatever we're using to activate the character) say something like

Every turn when Clark is hungry:
    try Clark dining.

Dining would then be an action we've defined specially, which looks around Clark's environment for suitable food; if it finds food, it issues a

try Clark eating the suitable food;

command; but if not, it sends Clark off to look for something likely. The Man of Steel demonstrates the use of this.

Second: though it doesn't actually contribute to the goal-seeking per se, lively reporting brings characters' generated behavior to life.

Clark eats a donut.

doesn't characterize Clark very much, even though the eating may be part of a subtle, intelligent plan to seduce Lois Lane. We'll do better if we replace a lot of the character reporting rules: to that end, see the example Reporting rules for other characters' behavior.

Third: goal-seeking characters notice when something is in the way of the action they want to perform. When that happens, they form a plan about how to remove the obstacle. We've already seen this kind of implementation on the player's behalf: the player will pick up items before eating them, say. We can use Before rules to do similar things for other characters, as in

Before Clark eating the wrapped candy:
    try Clark unwrapping the candy;
    if the candy is wrapped, stop the action.

Here we've set things up so that if Clark tries to eat the wrapped candy, he'll be interrupted by this other command; and if his unwrapping-the-candy attempt fails, he won't go on and eat the thing. IQ Test demonstrates a character who shows this kind of planning intelligence.

Because before-rules chain neatly, we can trigger whole plans of behavior if we have a sensible set, as in

Before someone entering a closed container: try the person asked opening the noun.
Before someone opening a locked container: try the person asked unlocking the noun.
Before someone unlocking a locked container: ...

We must exercise a little bit of care if it is possible for the chain of actions to produce an endless loop - e.g., the character trying to take a key that is inside the transparent, locked box that it opens might repeatedly try to open the box, first unlocking the box, first taking the key, first opening the box, ... Boston Cream is a fully-worked scenario that deals with such a set of conundra.

* See Traveling Characters for characters who plan routes to locations and travel towards them

* See Event Scheduling for characters who follow a pre-written schedule of activities

* See Plot Management for having a central function direct all the characters in order to further the plot


203
** Example  The Man of Steel
An escaping action which means "go to any room you can reach from here", and is only useful to non-player characters.

WI
208
* Example  Reporting rules for other characters' behavior
Elaborating the report rules to be more interesting than "Clark goes west."

WI
189
* Example  IQ Test
Introducing Ogg, a person who will unlock and open a container when the player tells him to get something inside.

WI

We have already seen how Before... rules can generate implicit actions for the player, so that the player will, for instance, open doors before trying to walk through them. The same can be done for characters other than the player; so for instance:

"IQ Test"

The Donut Shop is a room. "Vibrantly decorated in donut colors: pink, brown, and cream."

Ogg is a man in the Donut Shop. "Ogg is slumped in the corner[if Ogg carries something] with [a list of things carried by Ogg][end if]. He wears a nametag which says 'HELLO MY NAME IS OG.'" Understand "og" as Ogg. Ogg wears a nametag. The description of the nametag is "Sadly misspelled."

The Donut Shop contains a transparent closed openable locked lockable container called a case. The case contains some cake donuts. The donuts are edible.

The matching key of the case is a silver key. The silver key is carried by Ogg.

A persuasion rule for asking someone to try doing something:
    persuasion succeeds.

Before someone opening a locked thing (called the sealed chest):
    if the person asked is carrying the matching key of the sealed chest, try the person asked unlocking the sealed chest with the matching key of the sealed chest;
    if the sealed chest is locked, stop the action.

Before someone taking something which is in a closed container (called the shut chest):
    try the person asked opening the shut chest;
    if the shut chest is closed, stop the action.

The block giving rule is not listed in the check giving it to rules.

Test me with "open case / get donuts / og, get donuts / og, give me the donuts / eat donuts".

(A more detailed set of before rules for people using doors and locks is provided in Emily Short's Locksmith extension.)

190
**** Example  Boston Cream
A fuller implementation of Ogg, giving him a motivation of his own and allowing him to react to the situation created by the player.

WI


PreviousContentsNext