In Galatea, one of the things I wanted to do, but managed very badly, was to have Galatea continue the conversation herself if you stopped to listen to her rather than talking. But the number of such things she had to say was pretty sparse, so it wasn’t worth stopping to wait after every turn, and there wasn’t always any clear sign when she was likely to continue. Moreover, the mechanism for this was very hacky and didn’t allow her to have more than one thing planned to say at a time.
Alabaster does this much better. Instead of having the NPC’s speech be part of the player’s action, the NPC actually has a separate action in which he speaks, and he has a list of quips to say next. He will go on saying things from this list if the player is silent, or if the current conversation thread has come to an end and it’s time to change the subject to keep conversation flowing. (Galatea has no model of when conversation threads have ended, either.)
New quips added to the list have two kinds of priority. They can be marked either “obligatory” or “optional”, and either “immediate” or “postponed”. Obligatory quips are things the NPC definitely means to say sooner or later, even if the player interrupts with some other comments first; optional quips are things he might say, but is equally happy to skip if the conversation moves in another direction instead. Similarly, “immediate” means he’ll say this next even if there are other things on the list — it goes in at first position — while “postponed” means the quip should instead go at the end of the list.
Between them, these cover a number of different ways an NPC could want to go on with the conversation:
Continue reading “Modeling conversation flow: types of NPC Initiative”
But one day in his early teens, Fred had a mishap: he tried to take a bath when already extremely tired. This led to a strange, locked-in cycle: he kept passing out from exhaustion, then resuming his bath, then passing out again… and he never seemed to finish either task. Eventually he also needed to use the bathroom and get something to eat, but these other needs couldn’t overpower the bath/passing out cycle. I tried various things to snap him out of it — gave him different instructions, tried to cancel some of his orders, sent Dandelion in there to talk to him (and, I hoped, rescue him). No good. After a solid day or so of bathing, Fred started to starve to death, and I reconciled myself to his doom. I did throw Rose a birthday party, hoping that that would at least catch his attention — Sims seem to come running from all over when there’s birthday cake to eat — but instead there was just the rather ghoulish spectacle of the family and friends partying down while upstairs Fred scrubbed and splashed away his last three hours, his starvation clock ticking away.
Alas, that bricking up turned out to be all that was needed to snap Fred back to awareness. He got out of the tub and died in his tiny, airless, lightless enclosure. I had to sledgehammer a hole in the new brick wall so that he could be found by his relatives and laid to rest properly.