Question from Conrad Cook:
I’m wondering how you mesh variable tracking with conversation.
You’ve mentioned _Alabaster_ tracks a lot of variables, and I can
conceptualize how that would be reflected in, for example, the
artwork. But I’ve been wrestling for a while with how to use the
conversation to move the NPC’s variables, and how to have those
variables be reflected in the course of the conversation, and so far
I’m not winning that wrestling match.
Alabaster’s source is available, so it’s possible just to look at what’s going on there — but possibly more difficult to suss out exactly what the plan is throughout the source. A technical discussion follows.
There are two parts to the question. To start with the first:
I’ve been wrestling for a while with how to use the
conversation to move the NPC’s variables
Alabaster does this with bracketed “say” tags, like “She shows you her pointy teeth[scary].” This invokes a function that increases the scariness variable. Alabaster tracks two kinds of numerical variable: how scary (or pathetic) Snow White seems, and then how friendly (or angry) she is. So she could seem like she likes you, but be really creepy; or she could be harmless and friendly; etc. These variables move independently and in theory could be very large or very small.
Once per move, Alabaster also assesses Snow White’s mood based on the scariness and friendliness axes. Whereas the scariness and friendliness are numbers that can be positive or negative and have any value, the moods are named values, and there are always only eight:
The moods are menacing [pure scariness], aggressive [scary/angry], furious [angry], whiny [angry/pathetic], needy [pure pathetic], harmless [friendly/pathetic], warm [pure friendly], weird [friendly/scary].
If we imagined a cartesian coordinate system with friendly-angry and scary-pathetic as the two axes, then the moods aggressive, whiny, harmless, and weird would each represent a quadrant of that plane — except that being exactly ON the axis earns its own designation. Roughly like this:
Despite what the areas on the chart might suggest, because the values of both axes tend to fluctuate around zero, there’s a fairly good chance that we’ll be exactly at zero and thus on the axis a goodly portion of the time. In any case, the chart mapping is a way to capture the general kinds of mood that Snow White can be in.
Why bother to map to named moods? Well, it’s a lot easier to test “if Snow White is furious” than “if the scariness is less than… and the anger is greater than…”, and in any case I don’t care that much about the absolute values of these variables — just the direction they lie from the center. If Snow White is already scary, then her gaining an extra scariness point shouldn’t drastically affect her apparent behavior to the player. What makes a difference is if she does something that makes her seem friendly as well as scary. The mood system thus better reflects shifts in the player’s intuition about her than it would if we relied only on the numerical variables.
Now, part two of the question:
and how to have those
variables be reflected in the course of the conversation
In Alabaster, Snow White’s current mood affects the text output a lot, but the conversation flow very little. So there are things like
if the mood of Snow White is:
say "[one of]She doesn't look very cooperative[or]She looks downright mutinous[or]She fumes silently, and doesn't grace this with a reply[at random].";
-- menacing: ... [etc., through the rest of the moods]
But there aren’t points in the game where whole major conversation paths are blocked off because she’s not in a receptive mood. That’s because, for this particular game, it didn’t seem fair to the player. The player is already being asked to navigate through the conversation to a point where he has certain facts, and that allows him to produce certain endings. Adding moods as an additional gating feature would have made it significantly more difficult to understand what was happening and why — a complaint often leveled at Galatea. In the case of Galatea, I didn’t mind that her behavior was somewhat opaque because I wasn’t trying to let the player navigate toward a specific narrative goal. I envisaged each separate playthrough of Galatea as its own mini-arc, and the outcomes as surprises; the player might, for instance, try being friendly and see what resulted. (Whether people actually play that way is not the point: we’re talking about what I thought when I was designing it.) In contrast, with Alabaster I imagined the whole set of playthroughs by the player as contributing to one coherent story, and I wanted the player to be able to try to achieve things.
For that to work, I needed the game mechanism to feel more controllable, with reproducible results. So the moods are cosmetic and the fact-knowledge tracking is structural.
It would be possible to design a completely different kind of system, though. Sims 3 conversation is much more about how characters feel about each other. There are conversations which have specific semantic content — you can have a Sim compliment someone’s house while over for a visit, for instance — but each conversational act is important more for its social and emotional force than for conveying facts in a complex web of information. So you can have the goal of making your Sims get along better or worse, or fall in love — and you can choose conversation acts that will advance those goals — but you can’t have them tell each other complicated stories.
It’s possible to imagine IF that treats moods as the structural element and the conversation content itself as cosmetic. But in that case you’d want some story predicated around achieving a relationship result (Suzy likes you!) rather than on reaching a factual conclusion. And there’s some risk that if done poorly such a conversation could sound like conversations in visual novels, where there’s often one “nice”, one “neutral”, and one “mean” thing you can say to a character, and this is so transparent that there’s no particular challenge about establishing the character’s feelings toward you. You’d need some more artful form of gameplay to make this interesting: perhaps, as with Sims 3, different characters would have different preferences. Then some might like to feel listened to and be asked lots of questions, while another found questions intrusive and preferred to stick to neutral topics, and so on. I could imagine a game done this way, but I haven’t written any such myself yet, so I can’t comment too far on how it would work.