Abstract: One plausible design-paradigm for interactive fiction might be to supply IF authors with an extensive library of intelligent objects that 'know' how to interact realistically, including a rich model of human behavior. Doug Lenat's Cyc project is already attacking this task from a traditional AI perspective, but for IF this knowledge may be more simply collected in the form of stories-- in fact, a new mailinglist on the Internet is devoted to compiling such a story-library. If this library also tags all the most interesting possible plot-lines, the computer's task might be extended to "confabulating" the player's reality, on the fly, simultaneously arranging both past and future so as to open as many interesting plot-directions as possible.
A couple of issues ago (IED 7.4), Chris Crawford discussed the basic known 'topologies' for interactive fiction (IF)-- each of which he showed to contain intractable fatal flaws. Basically, interactivity implies that the user is making choices, which implies that the story is branching into a tree-like topology. But Chris showed that storytrees must either be folded back on themselves in a very limiting way, or have most of their branches trimmed to (violent) dead-ends. If they don't, they'll necessarily expand exponentially... so consequently, within these design paradigms, even high-budget efforts are doomed to produce only simplistic and uninvolving games....
The fantasy for the distant future, of course, is that the computer should offer an infinitely-various Virtual Reality, full of objects and characters whose behavior mimics 'real life' in great detail. In the ideal future, one should be able to step into the pages of a Dickens or Tolstoy novel and interact with its characters as freely as in 'real' life....
But how do we get there from here What sorts of design strategies might make these new forms of IF possible?
Certainly, one step in the right direction will be to teach computers the basic laws by which real objects interact, which is one of the traditional challenges of artificial intelligence (AI). In this article, I'll first explore the AI-world's leading contender for a truly intelligent program-- the Cyc project. Then I'll look at how Cyc's models overlap with those of traditional text-adventure games. I'll discuss a potentially-simpler strategy for compiling a 'Cyc' for IF, using a text format called a "meta-story", and offer some examples of how these can capture knowledge in an intuitive way. And finally I'll explore a new paradigm for IF-- the confabulating-arranger model.
But for the last ten years, a highly ambitious (and surprisingly low-profile!) effort has been underway in Austin, Texas, to spell out the entire range of human commonsense knowledge. The goal of this Cyc (for enCYClopedia) project is a program that can read a newspaper, and 'understand' what it has read, well enough to detect violations of common sense, just as human readers can. But to the extent that it succeeds at this, it should be equally useful, at least in theory, for maintaining internal consistency in a virtual world....
The Cyc team, led by Doug Lenat, has been trying to break down human understanding into thousands of subdomains that they call "micro-theories", like ailments, food-preparation, communication, and corporate behavior, and then trying to translate the basic 'rules' of each such domain into the language of symbolic logic. When they need to say, "If someone is asphyxiating, they cannot breathe," for example, they write:
(LogImplication
(LogAnd
(allInstancesOf $AIL Asphyxiation)
(bodilyInvolved $AIL $AGT))
(holdsIn $AIL
(LogNot (behaviorCapable $AGT Breathing bodilyInvolved))))
where $AIL and $AGT are the variables for ailment and agent,
LogAnd, LogNot, and LogImplication are simple logical connectives
and "holdsIn" defines the context within which this 'axiom' holds.
According to the Cyc model, if an adventure game needed to know
what-happens-next at any particular point-- say, when a person drops a
delicate vase-- it would send a query to Cyc and in a matter of
seconds, Cyc should return with the news that vases dropped on hard
surfaces usually shatter...
Unfortunately, if you multiply that plausible retrieval-time times the thousands or hundreds of thousands of deductions that would be needed to keep an interactive fiction realistic from moment to moment, you're forced to the conclusion that Cyc just isn't going to be fast enough to support IF, anytime soon.
Probably the worst problem here is that Cyc-- unlike any other largescale project in history-- didn't evolve by starting with a simpler version of the whole, and gradually filling in the less-important details. Rather, Cyc is being built by the much riskier strategy of accumulating detailed subsections, one by one, with no known overall pattern... and later streamlining it down to a "core knowledge base". To make that streamlined enough for IF may turn out to be the hardest challenge of all!
So Cyc offers a good startingpoint for IF-theory, with regard to the knowledge it hopes to embody, but perhaps not so good a model with regard to the performance constraints of realtime IF. But we know for certain that some level of realtime IF is possible-- Zork and Hitchhiker's Guide (etc) have proven that! But is there a way to build an "IF engine" that includes something more like Cyc?
TADS (The Text-Adventure Development System) by Michael J. Roberts is probably the most popular environment, because games created in TADS can be run on almost every major hardware platform. TADS offers a modest range of predefined object-types that have at least a minimal level of intelligence about their own behavior. Containers and vehicles, for example, understand that objects placed within them will move with them, and will be invisible unless the container or vehicle is transparent. Characters automatically grow hungry if they don't eat, and even eventually die.
TADS is object-oriented, with the objects themselves containing most of the code embodying such "story elements":
class openable: container
contentsReachable = { return( self.isopen ); }
contentsVisible = { return( self.isopen ); }
isopenable = true
ldesc =
{ caps(); self.thedesc;
if ( self.isopen )
{ " is open. ";
pass ldesc;}
else " is closed. "; }
[etc]
The TADS object-hierarchy is firmly grounded in story-telling pragmatics:
Thing Item: vehicle, surface, lightsource, key, food, container, clothing FixedItem: switch, dial, button, decoration, actor, chair RoomCyc, by contrast, offers at the highest level the following, rather less pragmatic, partial object hierarchy:
Thing
Intangible
IndividualObject
Event
Stuff
Process
SomethingExisting
TangibleObject
The name for the mailinglist-- Wisdom FAQ-- is derived from the Internet tradition of Frequently-Asked-Questions files (FAQs), which try to condense, into the most accessible format possible, all the most useful information on any given topic. The "Wisdom FAQ" can be seen as a (rather grandiose!) image of a FAQ that tries to contain all the wisdom of the world, on every topic... starting, of course, with those truths most useful for interactive fiction. (To subscribe to the list, send me a request at wisdom-request@mcs.com. The accumulated archives can be ftp'd from ftp.mcs.com in mcsnet.users/jorn/wisdom/. If you need me to email them to you, let me know how many kilobytes your emailbox can handle at once.)
The mailinglist is grappling simultaneously with the task of simply accumulating 'story elements' or axioms, and the more difficult task of agreeing on a standardized way of expressing them. Because the latter task is more technical and less interesting to many people, it will likely be spun off into a second list of its own sometime soon.
The task of enumerating story-elements, though, is not so much a question of technical as of storytelling expertise. For this reason, the Wisdom-list eagerly welcomes non-technical contributors who nevertheless have a knack for spinning out plotlines, or a gift for clever plot twists...
The food meta-story: A person tended a garden or farm raising plants or animals to eat or sell. They harvested the food when the time was right and sold it or preserved it or prepared it and ate it or fed it to friends or family. If it was well-prepared, their hunger was satisfied and they were happy. The food travelled thru their intestines and had to be excreted. If they didn't get enough good food, they got thin and died. Maybe the person preparing the food put poison in it to injure the person who ate it. They might have to disguise the flavor of the poison. Maybe they prepared it poorly and it tasted bad.
The bottle meta-story: A person heated up some sand in an oven and blew air into it with a straw until it became a bottle. When it cooled, they could pour liquids into it and put a cork or cap on it to keep the liquids from spilling or evaporating. They could also fill it by dipping it into a larger body of liquid. When they took the cork out they could pour out the liquids, or drink from the bottle. Two or more people could pass the bottle around and share the drink. If they dropped the bottle on something hard, it probably broke, and any liquid in it spilled out. The broken glass could cut a person when they touched it, if they weren't careful. It could make a car tire flat. If a barefoot person stepped on it they would get cut. The broken base might act like a lens to focus light and start a fire, or magnify something tiny. (The bottle with clear liquid in it might also be a lens.) The person could knock someone unconscious by breaking the bottle over their head. They could use the bottleneck to make their guitar play better. They could roll dough flat by using the bottle like a rollingpin. (etc)
So one approach the Wisdom-list may use could be to accumulate a sort of 'children's encyclopedia' of these meta-stories, elaborating each of them to whatever level of detail our creativity allows.
But simply enriching the supply of intelligent objects won't necessarily make the IF-author's job easier. For one thing, the more pre-existing behavior that's been supplied for the game's objects, the harder it will become for the author to anticipate every possible solution to the game's puzzles. In fact, the farther we move in this direction, the less attractive the whole idea of puzzle-oriented IF begins to seem...
The classic analysis of literary plots is George Polti's "Thirty-Six Dramatic Situations". Polti analysed a huge range of classic plotlines in literature, and declared these to be the basic ones: Supplication, Deliverance, Revenge, Vengeance by Family upon Family, Pursuit, Victim of Cruelty or Misfortune, Disaster, Revolt, Daring Enterprise, Abduction, Enigma, Obtaining, Familial Hatred, Familial Rivalry, Murderous Adultery, Madness, Fatal Imprudence, Involuntary Crimes of Love, Kinsman Kills Unrecognised Kinsman, Self Sacrifice for an Ideal, Self Sacrifice for Kindred, All Sacrificed for Passion, Sacrifice of Loved Ones, Rivalry Between Superior and Inferior, Adultery, Crimes of Love, Discovery of Dishonor of a Loved One, Obstacles to Love, An Enemy Loved, Ambition, Conflict with a God, Mistaken Jealousy, Faulty Judgement, Remorse, Recovery of a Lost One, Loss of Loved Ones
Only a few of these will normally turn up in the course of applying the meta-story approach to story objects, because the most important 'objects' in literary plots tend to be psychological ones, like emotions and motivations.
The meta-story approach can still work fine as a way of accumulating story-elements, though, even if you choose a totally arbitrary startingpoint (for example, hypnosis), so long as you're comfortable with the storytelling aspect of things:
The 'hypnosis' meta-story: Once a person learned they could control others by hynosis. So they hynotized others into giving away their money and power and their health and their self-respect. And these people didn't even realize what had happened to them. Eventually things got so bad they were desperate to discover the source of their situation. Then one person got a glimpse of the truth, and then lost it, and then saw it again, and tried to tell others, and got dismissed as crazy, and attacked, but finally figured out how to lead others to see the truth, and they rose up together and overthrew their oppressors.
The intuitive familiarity of the story-format allows almost any topic to be productively explored...
So even something as simple as Maslow's hierarchy of needs (physiological, safety, belongingness and love, esteem, cognitive, aesthetic, and self-actualization needs), which might seem like a plausible startingpoint for a simple set of a-life laws, leading to emergent behavior, reveals some extremely inobvious patterns (at least from a mathematical point of view), when analysed for meta-stories:
The physiological-needs meta-story: Every so often, a person gets a craving to consume food and drink. They usually arrange to have a source of these nearby, that they can rely on for purity. They may prepare the food and drink, cooking things, cutting them up, mixing them together, adding flavorings to make the experience pleasant. Or maybe they expect another person to do that for them. Usually, a group of people who live together will sit down together to eat, at a table with plates and silverware and glasses. Afterwards, someone must clean up. Sometimes they may eat at restaurants, or in a vehicle as they travel. They may carry a container of water to drink (perhaps flavored or mixed with nutrients or stimulants or intoxicants), or stop at a vending machine or drinking fountain or coffee machine. If a person's daily calories consumed don't equal their calories burned, they lose weight. If they consume more, they gain weight. If they lose too much weight, or fail to drink enough, they can die. Water-plus-wastes is excreted by urination, food-after-nutrient-absorption by defecation.
The safety-needs meta-story: A person felt unsafe, and they didn't like it. Maybe there were other people or animals around, untrustworthy ones, and their home wasn't secure. Maybe they had to leave the safety of their home during the day, and risked being attacked. Maybe it was nature that threatened them, in the form of high cliffs, deep holes, quicksand, dangerous bodies of water, weather that's too cold, hot, or violent, etc. Maybe it was poorly maintained technology that was the danger. The person changed the environment or changed their behavior so that the danger was lessened and they felt safer.
The belongingness-and-love-needs meta-story: A person felt lonely. They sought out others' company and acted charming so they would be welcome. Or they acted domineering so that others would be afraid to reject them. Or they acted hurt so that others pitied them.
The esteem-needs meta-story: A person felt that no one respected or appreciated them. So they tried to do something admirable, and then made sure that others knew about it. Or maybe they lied about doing something admirable.
The cognitive-needs meta-story: A person needed to know something, or was just curious. They sought out a book and read it, or a teacher and took a class or asked them questions. Or they just observed the thing they didn't understand, and thought deeply about it, maybe doing experiments. If they discovered something new they probably published their findings.
The esthetic-needs meta-story: A person was oppressed by a boring or ugly environment, so they made or acquired or sought out objects that were pleasing to their senses. Maybe they recorded the process of creation, so that it could be reexperienced later, by others. Maybe they positioned these creations within their environment so they could experience them often. Maybe they grew bored with them after a time.
The self-actualization-needs meta-story: A person had everything they needed, but didn't feel fulfilled. So they looked within themselves to discover what their heart wanted most, and followed their bliss...
One way to keep these meta-stories somewhat 'grounded in reality' is to visualize them as being acted out on a computer screen, using even the fairly primitive existing standard for graphics adventures like King's Quest and its ilk. If your stories are too abstract for this technology, you probably haven't thought them through in enough detail!
I like to imagine a sort of SimCity-like environment where a community of little NPC's go through their daily routines of life, in a completely rote fashion, with no emergent behavior expected or desired. (In honor of Normal, Illinois, I call this world "SimNormal".)
Looking again at the belongingness-needs meta-story above, it's clear that before you can visualize it as a SimNormal animation, you have to break it down further, according to certain typical patterns of how these needs are satisfied:
The casual-acquaintance meta-story: A person gets to know another by being introduced, or by introducing themselves, or by crossing paths occasionally. When they meet they exchange mild greetings and smalltalk about weather, news, gossip, entertainment they've seen. If nothing divisive turns up, they may gradually open up and trust each other more.
The simplest way to encode this might be to give each person an intimacy-level toward each other one. Zero would mean total strangers, but each time they noticed a given person it might increase by one. When it reached five, say, they'd shift to casual-acquaintance mode, and greet each other. If they're introduced, on the other hand, they might reach five right away. As this number continues to grow, their greetings should become more extended in time, stopping to chat if they're not in a hurry. (There could be a chatting animation that's designed to be cycled continually, for whatever duration they've reached.) Discovering common interests may cause the intimacy-level to skyrocket. Discovering incompatibilities, or failing to see each other for a long time, can cause the intimacy-level to drop.
The best-friend meta-story: A person gradually gets to know someone else, and enjoys spending time with them. (Or maybe it's a sudden strong connection.) They arrange to spend time together, do things together, maybe talk on the phone. They tell each other their private worries, and try to help each other. These exchanges make them feel better. Sometimes they fight, and reconcile or not. Maybe one of them gets an S.O. and that causes them to break apart. Maybe it just stops being so fun, and they drift apart.
A person may maintain a 'short list' of those with the highest intimacy rating, and when they're bored or upset they'll look to these for support. A person-soothes-person2 story could be very simple-- time is consumed and person2 feels better. (Person1 may or may not feel worse-- if they do, it bodes ill for the friendship!) There may be a certain potential for conflict at each point, which should depend on the sorts of personalities they are, and whether they're in competition for scarce resources.
The pals meta-story: A person has one or more best friends, and that group grows larger as others are allowed to join their get-togethers. Maybe they're invited or maybe they just show up and tag along. If someone doesn't like them they may be driven off. Several times a week, at least, they arrange to meet together. Maybe there's a power struggle between two who both want to lead. Maybe one by one they drop out; maybe others take their places.
The planning-logistics of getting a group of free-thinking individuals together are a lot more complex than for just two. Maybe any of them can invite the others-- there'll need to be be a 'get-together meta-story' to handle this.
The housemates meta-story: A person moves into a living-place with one or more housemates, sharing common areas. Usually, the housemates play the role of friends to some degree, listening to each others' daily stories. Some housemates are neater than others, and this will lead to conflicts. When bills arrive, they sometimes have to be split up unevenly and this may cause tensions. One person is probably the most responsible, signing the checks, etc. Each probably has one or more annoying traits that try the patience of the others. Maybe one by one they move away, and are replaced by others, or maybe they all leave at once.
The co-workers meta-story: A person gets a job at a workplace, with others. Some of these become friends, others maybe casual acquaintances. Some become enemies. Even when they fight, they still have to work together, or quit, or ask for a transfer. Their enemies may try to make them look bad to their bosses.
If the computer 'knows' all the most interesting sorts of dramas in literature, one strategy could have it be continually, unobtrusively revising the virtual world behind the scenes, so as to open up as many interesting plotlines as possible.
So the game might open with a person in their apartment, waking up in the morning, and if they go outdoors they may be presented with a series of neighbors whose dramas they can become involved in... but none of these dramas needs to have been worked out in detail beforehand. Rather, the computer will continually improvise new possibilities based on the player's choices, and the view of reality they've been allowed thus far. If the player chooses not to follow up any given opening, that's no problem... there will be many other options to explore.
This way, the past is as undetermined as the future, and can be molded to any extent, limited only by what the player has already been shown and told. So the computer is actively arranging that new developments will be as interesting as possible-- "confabulating" reality, to use a psychiatric term.
And in this, the "confabulating-arranger" model perhaps most closely resembles the activity of the brain, during dreams...!