No actor in any story has complete knowledge of the dramatic events. Much drama revolves around the lack of crucial knowledge by key actors. The lack of such knowledge often provides some of the most dramatic moments in drama:
“No. I am your father.” [Darth Vader to Luke Skywalker]
“Romeo is a fucking Montague?!?!?!” [Juliet to her nurse]
But Odysseus shouted back to them, ‘Ye dogs, ye that said in your hearts that Odysseus would never return to his home, ye that wasted my substance, and troubled my wife, and injured my servants; ye who showed no fear of heaven, nor of the just judgements of men; behold Odysseus returned, and know what death is being loosed on you!’
How does information move around in a storyworld? In linear stories it is usually divulged to an actor at the most dramatic moment; that’s difficult to set up in a storyworld. Still, absence of knowledge plays such an important role in narrative that its transmission is important. I recommend use of a “grapevine” in the sense of “I heard it through the grapevine”.
The Historybook
The starting point of the grapevine is the Historybook. The Historybook is simply the list of all events that have taken place, ordered by their time of execution. As you will recall, the basic data structure of an event is a sentence: subject, verb, and all the objects required by the verb. There are a few additional terms we must add to flesh out an event. The first of these is the time of execution. The second is the stage on which the event took place. Third, we must record the sequence number of the event that was the causal event of the event being recorded. Fourth, we need to specify which actors witnessed the event or have been told about it; I call this array WhoKnows. It is a boolean array.
The simplest way to implement gossip is as follows:
1. Fred meets Joe and decides to share gossip with Joe.
2. Fred searches the Historybook for an event to share with Joe.
a. The Acceptable value for the search is (Fred knows about the event) AND (Joe does not)
b. The Desirable value is the import of the verb for the event. If you want to get snazzy, you could include consideration for how much Fred cares about the subject and direct object of the event.
3. After identifying the event, Fred tells Joe about it.
4. The record for the event in the Historybook is modified to show that Joe now knows about it.
Headlines and stories
One weakness of this approach is that it leaves out useful associate information. Suppose, for example, the Historybook includes this sequence of events:
Tom greets Mary.
Mary calls Tom an idiot.
Tom calls Mary a slut.
Mary calls Tom a poopyhead.
Tom punches Mary.
Mary bursts into tears and runs away.
The verb with the highest value of import would be “punch”, so if Fred wants to share this with Joe, Fred will simply say “Tom punched Mary”. Without the preceding events, however, the gossip doesn’t make much sense. Therefore, a better solution traces the causal events backwards from “Tom punches Mary” to “Tom greets Mary”, then presents the entire story.
Certainty
If you want to get really complicated—which I do not recommend—you could take into account the pFaithless_Honest relationship and establish a certainty value for each piece of gossip that an actor knows. To do this, you replace the boolean WhoKnows array with a BNumber WhoKnows array. You enter an initial value of, say, -0.999, for the WhoKnows value for each actor. An actor who directly witnesses an event gets a WhoKnows value of +0.9999. An actor who is told about an event gets a WhoKnows value equal to their pFaithless_Honest value for the actor providing the information.
If you want to get even MORE complicated, then you can calculate the plausibility of a reported event based on the recipient’s expectations of the subject of the verb. You can then use that plausibility to modify the pFaithless_Honest value, as well as the certainty value that the recipient assigns to the reported story. I mention this only for use in the far future.
Lies
If people can gossip, why must they tell the truth? Malicious gossip is part of drama (See “Othello” by William Shakespeare). This is another recommendation for the future, but if you decide to implement it, then you’ll need a rather complex verb called “concoct lie” which must include among its objects the entire false clause. Example:
{Joe} {concoct lie} about {Mary} that she {said} that {Tom} {has Bad_Good value} {very negative}.
When this plan is executed, the engine places into the Historybook the false event “Mary said that Tom has Bad_Good value very negative.” The only person WhoKnows of the event is Joe. Joe can then gossip about it anybody else.
Tracing Lies
The existence of lies necessitates the ability to track them down. Suppose, for example, that Tom hears the gossip that “Mary said that Tom has Bad_Good very negative”. Tom will be indignant, and he will confront Mary about that. Of course, Mary will know the gossip to be false, so her response is to ask “Who told you that?” This in turn requires that Tom be able to consult the causal event for his knowledge. When he reports that to Mary, she can then confront the person who told Tom, and trace the lie back to Joe. This gets into some real complexities, especially if you add the uncertainty factor. Although the Storytron technology included all these features, I do not recommend its inclusion in future interactive storytelling technology until we are much further advanced.