Advertisement

Types of conversation and dialogue in games

Started by September 24, 2002 10:04 AM
7 comments, last by Kylotan 22 years, 3 months ago
I''m about to write another article for GameDev.net, this time about the implementation of conversation and dialogue in games, especially RPGs but also adventure games and so on. I already have several different approaches to consider, all of which are going to be shown to some degree. But I can only play so many games, so I''m interested in hearing about any interesting or novel approaches to conversation that I could mention. So far, I''ve got keywords such as: fully scripted (as opposed to data-driven), zero-choice (aka ''talking signpost''), branching/multiple-choice, branching with back-tracking, adding and removing keywords based on responses and flags, icon-based systems (eg. the old game Captain Blood)... Anything I''ve missed? I''m sure of it. Give me some ideas or feedback. [ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]
Narrative interpolation? (obligatory self-serving plug)
Advertisement
It was an interesting thread but I''m not sure (a) how I could talk about implementation, or (b) how it would apply directly to conversation. Perhaps you could enlighten me?

[ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]
I''m not sure what each of these categories are.

There''s Sacrifice, Diablo, ?, Fallout, Exile, ?.

Are those correct examples?

Fully scripted means that the game makes your character talk. Zero-choice means that your character either doesn''t talk or you don''t get to hear the words. I''m not sure whether or not Fallout falls into the category into which I put it or the one before that, and whichever one it''s not I can''t think of an example of. Exile gives you three words to type in("look", "name", and "job"), and you guess which words in the responses you should type in. Occasionally, one character will tell you to ask another character about something, so you type that in. Lizard hiss is extremely annoying because you don''t know whether to type in "mythhh" or "myth" or "kisssss" or just "kiss".
---New infokeeps brain running;must gas up!
quote: Original post by Kylotan
It was an interesting thread but I''m not sure (a) how I could talk about implementation, or (b) how it would apply directly to conversation. Perhaps you could enlighten me?

Gladly.


Implementing Narrative Interpolation

A fundamental concept in narrative interpolation is that events are sequential, and that conversation is built based on context derived from knowledge about events and knowledge about the knowledge of others. Rather than storing the events on a per-entity basis, we maintain a global record of events that includes witnesses, location and duration. We also maintian a knowledge network (graph) of who knows who that allows us to artificially propagate knowledge of an event, appropriately skewering, fuzzifying or embellishing the event as suits our purposes.

If the user plays a knight in the days of dragons, for instance, and comes to a village believed to be terrorized by one such flying beast, heads off to the supposed dragon''s lair and returns ostensibly victorious - the village never again bothered by the dragon - then we record the event "player fought dragon as location such-and-such." There are, however, no witnesses, so the veracity of the information is suspect. Now, knowing the times, as developers we would like for the tale to be embellished and hyped till legend has it that "Sir User single-handedly fought an entire horder of dragons with nothing other than his trusty shield and mighty sword". To accomplish this, we locate the closest NPCs to the site of the event and give them partial knowledge (a 60% rating, for example) of the event, and then store them as the witnesses. For every person that knows them, the information is passed along only slightly accurately (the accuracy of propagation depends on the character of the informant, another set of percentage ratings). We don''t bother to propagate this information immediately, though, as we''d have hundreds of redundant entries. Instead, when the user arrives at a new locale, we trace for shortest path (where graph edge length is analogous to trust values between entities (nodes)) to event witnesses and then populate the entities in the immediate environment. If no paths are found, we randomly select to leave it as "we''ve never heard of you" or to allow there to have been a "wandering minstrel, who told us of your exploits". We may choose to make the minstrel believable of lacking in credibility, which will be the trust value assigned by the local entities to the minstrel, which affects how they present the story.

Trust relationships are not commutative. I may believe John a lot less than he believes me. For the most part, our relationship networks/graphs are highly localized, with only a few local nodes having ties to nodes in other concentrated locations. This means we don''t have to have the entire graph in memory at once, and can load them by community. Similarly, if there is no (natural or artificial) edge between nodes in different communities, then events known to the one community are completely unknown to the other and can be removed from the event database.


Applying Narrative Interpolation to Conversation

While the preceding comments should make obvious one of the applications of narrative interpolation wrt conversation (legends, "chinese whispers" schemes, etc), another is for day to day interactions. In the case of relationships between two individuals, events would be representations of truth or falsehood. These would influence the trust value between them. eg, As an upstanding customer gets to know the dishonorable merchant better, his trust rating for the merchant plunges. The merchant''s trust rating for the customer, however, can not afford to fall or he loses custom. Besides, the customer has never defaulted. The trust rating could then feed into the nature of communication between them:

"David, I know you''re a greedy thief, but I have no choice but to buy your stolen goods."
"But Master Frederick! How could you even think such of me!"
"Silence, knave, before I have to split you in two. Don''t bother trying to lie to me; I have weightier matters to attend to."




All of this is very theoretical and conceptual, and depends on other systems as well (actual text generation, for example). I''ve never gone ahead to implement this, so it''s very much a case of "this is how it''s supposed to work." If you''re interested, though, I could put some effort into closed-scenario tests and see how it fares.
quote: Exile gives you three words to type in("look", "name", and "job"), and you guess which words in the responses you should type in. Occasionally, one character will tell you to ask another character about something, so you type that in. Lizard hiss is extremely annoying because you don''t know whether to type in "mythhh" or "myth" or "kisssss" or just "kiss".


Err... you might find Exile more enjoyable in the future if you keep this in mind: by clicking on any word spoken by the NPC you are talking to, you get the effect of having typed in that word automatically.

Sorry to interrupt serious conjecture, but I just had to rescue the poor soul who has been trying to type in "mythhh" instead of just clicking on the word "mythhh" in the conversation box.
Advertisement
I prefer Data-Driven communication... And I think I once posted quite a bit about this, so I will look now

EDIT:

Okay. It appears it doesn't exist here anymore... :S Bummer. Oh well, I don't think it was interesting enough to share anyway... I'd better get back to work on my Freeform RPG now, or it will never be finished (as far the communication in there: communication with the player is the same as between AI agents, it's only translated to English and back)

[edited by - Ronin_54 on September 27, 2002 1:34:36 PM]
quote: Original post by Flarelocke
I''m not sure what each of these categories are.

There''s Sacrifice, Diablo, ?, Fallout, Exile, ?.

Are those correct examples?

Beats me Never played Sacrifice, Fallout, or Exile. Never even heard of Sacrifice or Exile.

quote: Fully scripted means that the game makes your character talk. Zero-choice means that your character either doesn''t talk or you don''t get to hear the words.

Nope. Bear in mind I am talking as much about implementation as what you actually say. Some of the methods I describe would look identical to the game player, but different to the designer and programmer. Fully-scripted is the Ultima 7 route - there is no separate ''conversations'' file, but instead all the conversations are placed in the same scripts that power the rest of the gameplay. And a zero-choice conversation style is not zero-conversation - it just means you get no choices. Like Final Fantasy 6, where you click, the person says their stuff, and that''s it. Talking Signpost.

[ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]
quote: Original post by Oluseyi
All of this is very theoretical and conceptual, and depends on other systems as well (actual text generation, for example). I''ve never gone ahead to implement this, so it''s very much a case of "this is how it''s supposed to work."

Hmm... I might be able to mention a cut-down version of this when I get to (very basic) text generation and so on... some way of representing and propagating world knowledge to influence the conversations is certainly something I could talk about.



[ MSVC Fixes | STL | SDL | Game AI | Sockets | C++ Faq Lite | Boost | Asking Questions | Organising code files | My stuff ]

This topic is closed to new replies.

Advertisement