June 30th, 2020
The most fundamental dramatic verbs are statements of affinity. The simplest form of these is “I like DirObject”. In normal human discourse, people seldom say this; instead, they use an immense number of substitutes such as “DirObject is a creep”, “You should make friends with DirObject”, or “DirObject is such a nice person!”. The core of any storyworld should be statements of affinity. Start your storyworld with your statements of affinity, and expand from there. For an example, look at Gossip 2013. Example: Gossip 2013.
Radial Relationships (2D)
The basic level is the first-person level, in which each character states only their own perceived affinity values pBad_Good[speaker, DirObject]. The best way to express the variable is with a graded form of the verb, like so:
There are other ways to handle such variability; the SWAT program permitted the use of tables ranging in length from 5 rows to 11 rows.
Circumferential relationships (3D)
The next level of complexity is obtained by using circumferential relationships. These take the form p3Bad_Good[Perceiver, Perceived, Object]. They represent what Perceiver believes that Perceived thinks about Object. They would be expressed in the form “Tom hates Mary”. Beleive it or not, the original Gossip program way back in 1983 had these three-dimensional relationships. The full form of the sentence is actually “Joe declares to Fred that Tom hates Mary.” You can trim it down a little by conflating the DirObject of the main clause (declares) with the Object of the second clause (hates): “Joe declares to Fred that Tom hates him (Fred).”
3D relationships don’t work with groups larger than about seven characters. The problem is not the computer, it’s the player. If you have a dozen characters, the player will never be able to figure out all 132 values of the matrix. With only seven characters, the player must needs learn only 42 values.
Circumferential values permit you to utilize a simple algorithm that inserts an element of conflict:
“People like people who like people they like.”
There are three other variations on this statement. They permit each character to manipulate other characters by saying things likely to ingratiate them to the interlocutors.
False_Honest
Of course, this also permits lying. A player can go around telling everybody exactly what they want to hear, but that requires lying—what’s to stop a character from doing this? The answer brings us into a new personality trait: False_Honest. The pFalse_Honest values can be used to counter a strategy of lying. You need to add algorithms that compare what a character already knows about a value of p3Bad_Good with what another character is saying. If there’s too much discrepancy between the existing value and what another character is saying, then a character should reduce the amount of trust that they have in the speaker: pFalse_Honest.
This does suffer from an initialization problem. That is, if you start the story with all pValues initialized to 0.0, then the first player to declare a value of p3Bad_Good gets a free pass. A subsequent player relating the true value of p3Bad_Good could be penalized for telling the truth. Therefore, it is important to initialize the p3 values with values that are approximately correct. A good way to do this is to initialize all p2 values using accordance values.
All of these ideas are implemented in Gossip 2013.