Let us start with the simplest emotional states: binary,
And example might be a fish, with one emotional dimension, hunger,
and two emotional states: hungry and not-hungry.
This could produce the following sort of transcript:
Fish looks hungry.
Fish gobbles up the food.
Fish no longer looks hungry.
Fish seems uninterested.
Fish looks hungry.
A slightly more complex example can be created by moving away from
a binary value towards a greater degree of quantization; say,
any value from 1 to 8. This can produce something like:
Fish appears to be on the brink of starvation.
Fish can barely muster the energy to eat, but eventually manages
to gobble down some food.
Fish eagerly eats some of the food you give it.
Fish appears to be relatively well-fed.
Fish gorges himself on the food.
Fish is so stuffed with food it can barely move.
We can get exponentially (literally) more complex by introducing
another dimension. Let's give Fish another emotion: sleepiness.
For the purposes of illustration, let us also go back to a
binary scale. This produces the following sort of emotional two-space:
We can label areas of this vector space as follows:
Sleepy High | Drowsy Irritable
| Content Starved
Low Hungry High
This could be represented by the following sort
of data structure:
Sleep: 0 1
0 Content Drowsy
1 Starved Irritable
We can put some limitations on how Fish can move between
emotional states (ie alter the topology of the vector space.)
For example, let us say that Fish, with time, moves from
a Content state (or Starved state, for that matter)
to the Irritable state. Feeding Fish will move Fish from
Irritable to Drowsy, or from Starved to Content. Fish will
move from Drowsy to Content by taking the action of sleeping.
This produces the following sort of space:
Sleepy High | Drowsy /-> Irritable
| | /(time) /\
| |(sleep) / |
| | / |(time)
| \/ / (feed) |
| Content <------------ Starved
Low Hungry High
This graph hopefully makes it clear that some transitions are
forbidden; for example, when Fish is Irritable, it cannot
reduce it's Sleepiness without first reducing it's Hunger, which
can only be done by Feeding it (which is probably why Fish
is so Irritable in the first place.)
Please keep in mind that this is, really, a pretty simple example!
A somewhat realistic human might have as many as seven or eight
seperate dimensions, each with a quantization level of eight.
This produces 256 distinct emotional states. As many as half
might be forbidden states (for example, you might rule that
a given NPC will never be Very Hungry, Very Tired, Not at all
Angry, Very Jealous, and Very Happy.) Transitions will
probably be ameniable to simplification (for example, the
action of hitting the NPC will always lead to a Very Angry
state, regardless of initial conditions.)
Problems: Perhaps one of the biggest problems with this sort
of approach is exactly the same problem which exists in Real Life
(and this sort of emergent behaviour is promising, I believe.)
The player may not have complete access to the internal emotional
states of the NPC. It might be easy to tell if Fish is hungry by
looking at it; telling whether Widow Parks is Depressed might
be an entirely different story. The typical solution to this
is to try to reveal the character's emotional state through
conversation, but this can be tricky at best. Furthermore,
people tend to be bothered by other people 'experimenting' with
them in order to determine their emotional state.
Hopefully this has been somewhat elucidating. These sorts
of conversations are at the root of all advancement in IF,
Roger Carbol // uq...@freenet.Victoria.BC.CA // no, the other Roger
If you found that article interesting, you may find an article
by David Gerrold in this month's (May 1996) of Visual Developer
magazine interesting as well.
He discusses a hierarchy of emotional states in varying degrees
mul...@vivanet.com <== Please use this address.
>Please keep in mind that this is, really, a pretty simple example!
>A somewhat realistic human might have as many as seven or eight
>seperate dimensions, each with a quantization level of eight.
>This produces 256 distinct emotional states. As many as half
>might be forbidden states (for example, you might rule that
>a given NPC will never be Very Hungry, Very Tired, Not at all
>Angry, Very Jealous, and Very Happy.) Transitions will
>probably be ameniable to simplification (for example, the
>action of hitting the NPC will always lead to a Very Angry
>state, regardless of initial conditions.)
Surely, just eight 'binary' emotions would give you 256 different states.
If each has eight levels, you could have 8^8 = 16 million of them.
Or have I misunderstood?
BTW, I'm not saying that 16 million states is really a problem. I don't
think it is.