Immediate local events: those which are happening now within sight of the characters.
Current non local events.
Historical events.
Discourse: that which has been said during the current conversation.
Conversation seeks to:
Inform.
Query.
Entertain.
Conversation often:
flows from one topic to another.
Now, let''s assume the goal here is not to build an actual conversing agent based on a full AI, because it ain''t gonna happen. So, instead, let''s tap into those elements of a game which can aid us in building a reasonably entertaining and believable conversation engine with some value.
The first thing we can do is have the general game engine flag to the conversation engine the context of the existing situation. For example, the game engine should be able to identify the following states (among others) to the conversation engine:
A companion has just been seriously wounded.
A companion has just died.
An interesting object has just been discovered.
Something interesting is happening nearby. It could be a brawl, a chase, a discovery, a natural disaster, an argument, etc.
The player character is not following prior agreed upon actions.
The current actions of the player character appear to be putting everyone in peril.
A member is committing a crime.
An object of extreme value is nearby.
The situation is a passerby on the street.
The situation is a beggar on the street.
The situation is a vendor/scam artist on the street.
The situation is a merchant and customer in a store.
The situation is related to consulting a map or book.
Once the situation has been flagged, a conversation may be initiated by an NPC, or an existing conversation can flow from the existing topic to the new one. Each situation can have a number of opening lines based on the relationship between the initiator and the receiver, the context of the situation, and the general mood. Each statement quanitifies the information content for discourse modeling in subsequent statements in the conversation.
Ok, that''s a start. Now, the point here isn''t necessarily to make the be all end all conversation engine, but to get something which doesn''t seem canned, stupid, or boring.
_______________________________ "To understand the horse you'll find that you're going to be working on yourself. The horse will give you the answers and he will question you to see if you are sure or not."
- Ray Hunt, in Think Harmony With Horses ALU - SHRDLU - WORDNET - CYC - SWALE - AM - CD - J.M. - K.S. | CAA - BCHA - AQHA - APHA - R.H. - T.D. | 395 - SPS - GORDIE - SCMA - R.M. - G.R. - V.C. - C.F.
Damn, that''s pretty cool! =D But here''s some more thoughts. Make the responses able to customize a little bit to the personality of the character. Like if a member steals something, and there is a thief in your party (not the one stealing) he could go "tsk tsk tsk, naughty naughty, heh heh!" or "Nice work." And then another party member might say somehting like "Don''t encourage him!" as they have more principles. Of course that requires another level of complexity, but... Also, it might not always be appropriate for your party members to respond at all.
Also, the messages of course should be different. It would get annoying if every time you pass a beggar, your clerical priestess or whatever says "Oh that poor thing!" Especially if you just happen to be in a slum where there are beggars on every corner. A symbolic system might need to be made for all this though.
Let's look at the An intertesting object has just been discovered by a party member scenario. The game engine notifies the conversation engine of the event, including the discoverer, and the party members.
The conversation engine, which keeps track of things which happen between the players, takes it from here. We might have the following data in the conversation engine: (never mind the syntax, it's just pseudo data)
// ok, the above says that when Spock addresses Kirk, 80% // of the time, Spock calls Kirk "Captain", and 20% of // the time, Spock calls Kirk "Jim".
// Similar stats for when Spock addresses McCoy.
ObjDiscoveredByCompanion { companion:is(intelligent) & is(loyal) { addressee = companion:loyalTo sayOneOfTheFollowing: "‹addressee›, I have discovered something interesting.", "‹addressee›, I think you should come look at this.", "‹addressee›, I think you should see this.", "‹addressee›, come see what I have found.", "‹addressee›, I think you should take a look at this.", "I have found something interesting, ‹addressee›.", "I have discovered something interesting, ‹addressee›.", "I think you should come look at this, ‹addressee›.", "I think you should see this, ‹addressee›.", "Come see what I have found, ‹addressee›.", "I think you should take a look at this, ‹addressee›.", "I have found something interesting, ‹addressee›.",
Now, addresee is calculated among other things, and one of the statements is selected to be uttered by Mr. Spock. From there, the situation evolves into the situation where the discovery of the object has been communicated to the other party member.
[edited by - bishop_pass on April 15, 2002 3:52:40 PM]
_______________________________ "To understand the horse you'll find that you're going to be working on yourself. The horse will give you the answers and he will question you to see if you are sure or not."
- Ray Hunt, in Think Harmony With Horses ALU - SHRDLU - WORDNET - CYC - SWALE - AM - CD - J.M. - K.S. | CAA - BCHA - AQHA - APHA - R.H. - T.D. | 395 - SPS - GORDIE - SCMA - R.M. - G.R. - V.C. - C.F.
quote:
Original post by Lohrno Also, the messages of course should be different. It would get annoying if every time you pass a beggar, your clerical priestess or whatever says "Oh that poor thing!" Especially if you just happen to be in a slum where there are beggars on every corner. A symbolic system might need to be made for all this though.
That''s all a given. It falls into discourse: knowledge of what has been said and what is relevant to say now. I would never venture to suggest a concept that mimics the stupidity one constantly encounters in many existing games.
_______________________________ "To understand the horse you'll find that you're going to be working on yourself. The horse will give you the answers and he will question you to see if you are sure or not."
- Ray Hunt, in Think Harmony With Horses ALU - SHRDLU - WORDNET - CYC - SWALE - AM - CD - J.M. - K.S. | CAA - BCHA - AQHA - APHA - R.H. - T.D. | 395 - SPS - GORDIE - SCMA - R.M. - G.R. - V.C. - C.F.
Basically as I see it conversation in general''s first purpose is to transfer information. So let an NPC have a list of items, people and the information he knows about them saved for him in a list. Information will have different values, like how the npc feels about it, like if he knows that someone robbed from him the topic angers him, also the things come with a relative interest level. He can learn things about objects and people by interacting with them (I believe this goes somewhat with that annotated object driven behavior idea you had, or a similiar idea I had). For example a chef who has just been robbed by a thief who he knows, he queries a set of possible actions and finds out the best one is to inform the guards. So the system sets out an action plan and he walks to a guard and tells him that his bread was stolen by Roger the thief. The guard asks questions that get information about roger the thief and the bread, like "Where did this occur". The NPC will then check rogers information history and find out that he learned that it occured at his store. He then goes on to give the guard as much information as possible. Then the guard goes out to try to find roger and may have conversation with him later.