Knowledge Transfer ------------------ I am a strong proponent of actually creating knowledge transfer. If a player tells an agent where an object is, the agent actually receives this information. Knowledge of spatial relation plays a part in the effective processing of this information. In other words, agents should be able to reason about 'on top of', 'inside', 'next to', etc.
This would add a great amount of dynamics to a social system for any game. I remember a friend who tried to do a reversal of this sort of thing written in basic. He tried to put together a data base of words and have them organise themselves logically so they could make a sentence when putting them together. But back to this idea. What my friend was doing would also have to be apart of this system i think *scratching chin*. If the NPC code can recognise individual words then it should also be able to put them together as well for a reply, yes??
As far as i can see you would have to start with objects like a chair. Firstly, the chair would have to be separated from the environment so you can associate a word with it which could then be placed into the NPC code. The name "chair" could be handled the same way in the code in the same manner as tiled graphics - given a reference number. So you basically create reference numbers for ever object that can be interacted with by any NPC in the game. Next would be assimilating verbs into this system. You could treat this in the same way as a combat system handles character fighting - eg tekken combo's. Each object that is given a reference number would then be associated with uses within a database. Eg reference # 00122433 (item index) associates to reference # 34347829 (action index - movable) and reference # 95432589 (action index - liftable) etc.
Now we get to the crunchy bit which is what you conversation is all about. The npc can know that Reference # 00122433 is liftable and movable, they can also know how to get to it, this can be used now in a dynamic conversation, i think. How am i sounding so far??
One more time for the dumbies ar+gu+ment n. A discussion in which reasons are put forward in support of and against a proposition, proposal, or case; debate.
Edited by - Paul Cunningham on November 18, 2000 11:30:30 AM
As far as i can see you would have to start with objects like a chair. Firstly, the chair would have to be separated from the environment so you can associate a word with it which could then be placed into the NPC code. The name "chair" could be handled the same way in the code in the same manner as tiled graphics - given a reference number. So you basically create reference numbers for ever object that can be interacted with by any NPC in the game. Next would be assimilating verbs into this system. You could treat this in the same way as a combat system handles character fighting - eg tekken combo''s. Each object that is given a reference number would then be associated with uses within a database. Eg reference # 00122433 (item index) associates to reference # 34347829 (action index - movable) and reference # 95432589 (action index - liftable) etc.
This is basicaly what I am saying about symbol processing. Let''s say you have a chair which is represented by #00122433. And you also have liftable = #95432589 madeOf = #00000333 wood = #00000876 inside = #20000001 yes = #00000001 den = #00000555 And then we have these triplets or augmentations in the agent''s memory: 23: #00122433 #95432589 #00000001 78: #00122433 #00000333 #00000876 698: #00122433 #20000001 #00000555
This translates to: 23: chair liftable yes 78: chair madeOf wood 698: chair inside den
Anytime the character learns something new like ''the chair is brown'' it is added to his memory by adding another augmentation.
Each ''symbol'' exists in memory with a linked list of facts it has: #00122433: 23, 78, 698 ... #00000555: 698 ...
Now, this knowledge can be used to answer questions. But, becasue it is knowledge, it can also be used to solve problems, satisfy goals, etc. And it is flexible and expandable.
_______________________________ "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.
These relationships would have to be hand defined, but this ''realization'' code deosn''t have to happen very often, or all at once. Learning is a gradual process that you could break up into many frames.
Here''s a thought:
What''s the point of synthesizing discussions in real-time if the user has almost no input to what is being said? until voice recognition gets to the point where you can talk to NPC''s through a microphone, a good and prolific writer would probably be a wiser decision.
bishop_pass: Heh. Looks like smalltalk. And it sounds like an idea that has been used before. Got any links to references?
I agree with your thinking, but I think it''s a little too general. For now, I''m focusing on the conversation engine at this point. I think what you''ve got is necessary, but not sufficient.
ball color blue ball size 100
Rather than have to ask what color is the ball and how big it is separately, they could both be included under appearance.
ball appears? -> "It''s blue, about 100 units big"
But I might only know it''s blue or it''s size and not both. So add a new column:
ball appears color blue ball appears size 100
So now if the player asks about the appearance, he can get both at once, and if he looks for it in a notebook, it''s nicely organized.
Now what if this ball has a monkey carving that is only noticeable on close inspection? Something you wouldn''t see across the room, but would notice if you picked it up. Let''s add another column, indicating the level of detail. You could create another object (detail) and control this by the object hierarchy, but in this case I''m assuming this is a trivial bit of info.
ball appears 1 color blue ball appears 1 size 100 ball appears 2 detail "monkey carving"
With the caveat that anything at depth 0 is assumed to be known by everyone.
The knowledge of the ball''s appearance is separate from the ball itself. So If I changed the color of the ball outside of the view of the NPC, they would still think the ball is blue. Which means we could hide the additional details I added as a property of the attribute, and only use them when we spawn a knowledge object, and spend most of our conversation simply trading knowledge objects around.
To build a network of the conversation nodes, we need to have some better organization. Some sample knowledge nodes for discussion:
ball appears 1 color blue ball appears 1 size 100 ball appears 2 detail "monkey carving" ball location 1 city Ankh-Morpork ball location 2 building DiscTheatre
cape appears 1 color blue cape appears 1 material cloth
As mentioned above, I think the conversation node would potentially encompass more than one knowledge node. It would be centered on say { ball appears 1 }. An NPC could make statement about the color or size, or both. The other NPCs then acquire the appropriate knowledge node. We would need a way to flag the knowledge node as already talked about so we don''t get stuck.
Note: If we focus on single player games we could cheat by comparing the info tho the player''s list, so they don''t get repeat info even if they acquired it from a different source.
So the current conversation is {ball appears 1}. NPC1 volunteers that it''s blue, NPC2 volunteers that it''s size 100. NPC 3 doesn''t have anything to add, so they will try and move the conversation elsewhere.
The conversation object would have (as previously posted) some measure of the level of familiarity. In general, the NPCs shouldn''t move to a level of detail greater than the current level of familiarity. So NPC3 might not move to a greater level of detail.
The other thing is that the conversation may move to a node that has no corresponding knowledge nodes. For example, say neither the player nor the NPCs know about the monkey carving. The player can still move the conversation from {ball appears 1} to {ball appears 2} by asking for more information. They just won;t get anything out of it, and the NPCs will shift the conversation elsewhere.
The conversation should be able to move from {ball appears 1} to {ball location 1} easily as well. It probably shouldn''t move from {ball appears 1} to {ball location 2} in one step, though.
Moving from talking about a ball to talking about a cape is normally a big jump. We can''t simply move from {ball appears 1} to {cape appears 1} without it being awkward. We need a transition or else the character loses some status. We should be able to move from {ball appears 1} color blue to {cape appears 1} color blue fairly easily though.
Player: "What does the ball look like?" NPC1: "If I recall, the ball is blue in color." NPC2: "Blue you say? The cape is blue in color too. I wonder if they would clash."
So the character can move to another topic only if no other attribute in the knowledge node is different.
We could even allow the NPC to move to the cape if there was a space of one topic between the two. In other words, NPC1 mentions that it''s blue, NPC2 mentions the size, NPC3 could still move to the fact that the cape is blue, perhaps with a small penalty in status.
The NPC shouldn''t be able to move smoothly to the cape if no one has mentioned the color of the ball. Nor should they be able to move if they don''t know that the cape is blue.
One other way they should be able to move things is to swap object and subject. So it should be a smooth transition from {ball location 1} city Ankh-Morpork to {Ankh-Morpork location 1}. This shouldn''t work for all objects, I can''t see creating an entire dialog tree for every attribute (no go for the color blue, for example).
If you like this, then all we need are the rules on status, mood, familiarity.
One other way to handle repeating conversation info is to create a "knowledge recieved depth tree". The conversation will continue until one of the characters have learnt X amount from one of the other characters.
It should also be possible to have it so that when 2 or more character are engaging in conversation that when they start a conversation they can jump parts in the conversation by comparing knowledge data. These jumps would appear big in code but reasonable in size from the players perspective.
quote:
So the character can move to another topic only if no other attribute in the knowledge node is different.
But there will have to be knowledge that one character will not want to pass on to another.
I just realized that you could make npc''s gossip with this system, hehe.
One more time for the dumbies ar+gu+ment n. A discussion in which reasons are put forward in support of and against a proposition, proposal, or case; debate.
Right, right. I didn''t have anything written in for NPC motivations or desires, which would influence when and how they tried to move the conversation.
What I meant by the quote was a rule about when you could switch subjects (identifiers) without incurring a status penalty. That it is difficult to move from one subject (identifier) to a different one unless you have a clear transition (the rest of the data are the same).
So moving from
ball appears 1 color blue
to
cape appears 1 color blue
is legal (without penalty), but you couldn''t go from
ball appears 1 size 100
to
cape appears 1 color blue
without incurring a status penalty. It''s the difference between:
"The ball is blue" "Blue, you say? The cape is blue too."
and
"The ball is 100 units big." "I see. Did you know the cape is blue?"
The sentences are unrelated, so they should be discouraged.
JSwing, Now you''re getting into belief systems. This gets really scary real fast!
Here''s a sample belief: ----------------------- I believe that you believe that in the hypothetical world of Star Trek Captain Kirk believes that Bones believes Spock is too damn logical!
Here''s another one that deals with revised beliefs: --------------------------------------------------- I believe that you believe that in the hypothetical world of Star Trek Captain Kirk believed that Scotty believed he couldn''t get any more out of the engines. But later, when Scotty persevered, I believe that you believe that in the hypothetical world of Star Trek Captain Kirk believed that Scotty no longer had this belief, yet Scotty was aware that he did not have faith in himself at some earlier time.
Basically, what we do is project our own knowledge and beliefs into another''s belief system and then subtract out what we know shouldn''t be there and add in what we believe should be there but we don''t hold true ourselves.
If you really really want to explore this, and I think it gets just too darn complicated, I would try it like this:
We classify knowledge as being default knowledge or not, and apply some sort of heuristic to determine if we can project it into someone else''s belief system. We then encode specifically what is contradictory to what we believe vs. what we know someone else believes.
It''s sort of doable, but it just gets overwhelming.
_______________________________ "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.
You can always use the Levels of Perception as ground for working this system. Lvl 1. I know something Lvl 2. You know i know something Lvl 3. I know that you know that i know something. Lvl 4. We both know that i know something.
I think that''s as far as it goes. You could use these levels as converstaion pointers/ref # possibly to control conversation status, or something else more appropriate. It just off the top
One more time for the dumbies ar+gu+ment n. A discussion in which reasons are put forward in support of and against a proposition, proposal, or case; debate.
I trimmed my last message to focus on some of the other important elements. I''m a bit on thefnece abou thtem.
There is a measure of casualness to the conversation.
1) Beer & Pretzels - subtlety is almost useless - insults and flatter cost you less status but also have less effect
2) Casual, like an office party - Force has a large status cost
3) Formal, business mtg - humor should be used sparingly ? - insults have a large cost
4) Very formal - rituals, and what not - humor is counterproductive - subtlety has reduced effect ?
There is also a measure of intimacy, or how comfortable the characters in the conversation are with each other.
Somehow, these combine to give you the default depth for the conversation.
So you could have a bar that is beer and pretzels but no one knows each other -> they talk only abou trivial crud if they talk at all. And you could have an office party where the folks know each other, and talk at the same depth as the bar example.
So should there be a separate scale for each person in the conversation? You know, where one person is habitually more formal or less restrained (Uncle Larry with the lampshade on his head) ? Or just keep the one index in the conversation object?
And any thoughts on NPC personalties would be useful too. I can brainstorm a few, like:
The nosy type who tends to want to acquire new knowledge nodes and push things to a greater depth.
The braggart who wants to talk about himself.
The windbag who always tries to be on top of the initiative stack.
The joker who tends to use insults with humor.
Should these just be some probability tables, or is there something better?