Modeling conversation flow: beginnings and endings using scenes

[This is part of a series of discussions on the craft of modeling conversation. For previous installments, see my original Homer in Silicon article which lays out the basic elements of the model, and previous blog posts on the issue.]

The convention that characters should greet one another before launching into other discussion is now pretty well established in realistically conversational IF; for Inform, Eric Eve’s Conversation Framework extension provides this functionality and I’m planning to use something compatible with his work.

There’s no reason, however, why the player should always get to dictate when a conversation begins and ends. Alabaster is not a very good demonstration of conversation beginnings and endings because there are relatively few transitions, but consider, say, Blue Lacuna: other characters move around, begin and end conversations, and generally behave as full partners in talky scenes.

In Inform 7, I rely a lot on the scene mechanism to manage conversations, because they allow me to write natural lead-ins and lead-outs, to set up lists of planned conversation in rules like “when heist planning begins”, and to set complicated conditions for when a scene should end. The conversation system also has a feature that allows quips to be set only to occur within a specific scene, which is a good way to protect against accidentally out-of-context remarks.

Some particular cases:

Begin when the player walks into the room where the NPC hangs out. The NPC acknowledges the player’s arrival and greets him, opening the possibility of conversation. This works especially well when the NPC is in his own home or shop.

Begin when the player does something that attracts attention. The NPC might be a guard, for instance, and speak when the player tries to go through a door or pick up a guarded object.

(Incidentally: I don’t have any special features built into the system for guarded doors or objects; I’ve been assuming that the author can write something like “Instead of going through the Imperial Bedroom door when the guard is unfriendly: try the guard discussing stay out here.” This is something I have gotten asked about several times because some authors regard the guard character as kind of the minimum level of chatty NPC, and they figure it ought to be specifically accounted for. To my mind, though, using the instead rule is at least as easy as any alternative form I’m likely to come up with and more likely to be easy for the new user to remember. So I’m not sure whether I ought to revisit this.)

Begin at a scene break. The NPC comes into the player’s presence for some story reason and a conversation begins immediately.

And of course there’s always

Be in progress when the game begins (or a scene within the game begins). The in medias res approach eliminates the conversational niceties and has the narrative pick up partway into a conversation, giving just enough information to make it clear who the parties are and what they’re talking about. This is a little risky, perhaps, but on the other hand it gets right to the meat of a conversation rather than wasting the player’s first moves of a game on saying hello.

Beginnings depend on game state; endings may depend on either game state or the state of the conversation in progress, so they can be a little more delicate.

End at a fixed time. If we want a conversation to last only a certain number of minutes and feel rushed or interrupted, we might use a scene of set length. In most cases, though, there’s a risk that this will leave the player with something important still to say or without accomplishing the goals of this conversational scene.

End when the player knows everything he needs to know (or the NPC knows everything she needs to know). Another approach, especially if we’re closely tracking the exchange of factual knowledge in the conversation, is to set up the end of the conversation when certain facts are known to one party or another. This accomplishes the functional goal of making sure we don’t go on from this conversation scene without laying important narrative or gameplay ground.

End when the conversation runs out. Set a conversation scene to conclude when the current conversation topic is dead-ended (the point at which the NPC would usually change the subject) but there are no more quips on the NPC’s planned conversation list. At this point, both the player and the NPC can be construed to have run out of relevant things to say, so it makes a natural point for a scene to conclude. I find this method feels more relaxed than the others and gives more of an impression of a friendly rather than a utilitarian conversation, because the conversation seems to wind to a close when both characters have run out of things to say.

End on a dramatic moment. Conversations in books or movies sometimes stop as soon as one of the characters says something especially dramatic, since we then cut away to a new scene. (This is especially noticeable with movie telephone calls, where characters very often hang up the phone without nailing down the details of a planned meeting or saying goodbye as they would have to in real life. But it would just be too tedious to make the audience sit through that trivia, and the movie has other things to get on with.)

The question of whether to show continuous action (as in many, many old-style IF games) or to cut up the narrative and move the player to new times and places as the story demands (as in Photopia, e.g.) is important, and there are more pros and cons than can be listed here. But one of the positives about the discontinuous format is that it allows the game to skip over many actions that might be boring — including the dull and ritualized business of ending a conversation. So we might set up our scene to end when the conversation reaches some peak of mood or emotional content, and then move the action ahead to a new time and place.

4 thoughts on “Modeling conversation flow: beginnings and endings using scenes”

  1. The convention that characters should greet one another before launching into other discussion is now pretty well established in realistically conversational IF; for Inform, Eric Eve’s Conversation Framework extension provides this functionality and I’m planning to use something compatible with his work.

    It’s great than you want to use Conversation Framework for this, but just one word of warning: I’m not yet 100% confident that it’s quite as robust as I’d like. I had some issues with it in my latest I7 WIP, and though I’ve dealt with them more or less, and supplied an updated version for the I7 Extension page, it’s a bit of baroque workaround (and thus, I suspect, potentially buggy).

    The main root of the problem is that Conversation Framework defines:

    The current interlocutor is a person that varies.

    But then I7’s typechecking won’t let the current interlocutor be set to a non-person (or, ideally, nothing), which means the extension lacks a completely watertight way of saying “there isn’t a current interlocutor right now”.

    I suspect the best fix may to make the current interlocutor an object that varies so that it can take the value nothing, though I might suggest to Graham that any object-derived value should be allowed to take the value nothing. As the DM4 says (page 49), “It turns out to be useful to have a constant called nothing and meaning ‘no object at all'”, and that remains true in I7, I think, but it would nice to be able to define a variable that, for example, is either a person or nothing (so there’s no risk of it being set to some other kind of thing).

    But my real point is that you might want to hold off going too far with incorporating Conversation Framework into your own conversation system till I’ve made it a bit more robust in this respect, which is something I must get round to doing.

    That said, the current version defines the phrase “to reset the interlocutor” to mean “now there isn’t a current interlocutor”, and I’ll ensure that any future version continues to define that phrase, however it implements it under the hood. I think I might also add a phrase for testing whether there is a current interlocutor which will then remain a stable part of the interface however I go about implementing it.

    There are also one or two other oddities I encountered which may have been side-effects of the no interlocutor problem, or may have been due to the way I wrote some other rules; I also need to look into those (they’re related, I think, to how and when Conversation Framework decides that there is no longer a valid current interlocutor).

    1. I hit that problem too, Eric. I just edited your extension so it’s an object that varies. Simple, and I have the option to talk to tape recorders and religious icons if need be.

      1. I hit that problem too, Eric. I just edited your extension so it’s an object that varies.

        I’ve now made that change and a few others to Conversation Framework and sent the updated version to the I7 Extensions page.

Leave a Reply to Eric Eve Cancel reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s