Here's a little story that I'd like to tell...
by Ted Southard · 01/03/2008 (8:23 am) · 4 comments
So there's been these discussions in the forums lately about game ideas, and how they're stale. Agreed. And how games would benefit from more openness. Agreed. And then the discussion revolves around the "end-game" of that gameplay- what you can do:
example: In my game, you'll be able to do anything you want! It's gonna be awesome! You can be a thief, a cop, a barbarian, a farmer, and you can talk to the NPC's, and they'll talk back!
Okay, fine. How do you go about that?
example: Don't crush my dreams!
Right. So I was at the laundrymat last night (where I do a lot of my game development thinking/sketching), and thought about new ways to represent chatting with NPC's. The problem is that other ways that I've been thinking about, including a Fuzzy Cognitive Map-based method of personality traits (below), are not yielding good results.

A less complicated version holds slightly more promise, but I'm starting to feel that it lacks the depth of the former plan:

So the problem is two-fold:
1) How does one construct dialog in a game in such a way as to allow interaction with NPC's in a more freeform way than the usual script-driven dialogs that are currently used, while allowing for realistic dialog?
2) How does one tie that dialog system in to the AI in such a way as to allow "soft" skills and actions by the player (as well as "hard" ones) to influence the course of dialog?
In other words, how do you make NPC dialog actually part of the gameplay, rather than just a way to get canned information from the NPC's? The answer is not the least bit clear, at least for the first question. Researching where research is at for the structure of dialog, you won't find a consenus for how conversation occurs. With that in mind, I had to sit down and decide not how conversation occurs outside of the game, but the way that conversation should best occur in the game.
Approaching the problem from this angle, I blocked out conversations with NPC's in my head and on paper where conversations took different turns, and accomplished different ends. This was done to help solidify the types of "dialog types" that would be used, such as "question", "acknowledgement", etc. These generic headings make it so that, instead of using natural language processing (NLP), I can use more generic "dialog actions" such as "thank NPC for his time". In this fashion, you can avoid having to parse a player's language (especially if their grammar is not perfect, which means wasting cycles on spellcheck, or asking for repeated inputs).
Remaining problems are how exactly to reference the branching between dialogs, and how to encapsulate the information (though I think I have some information groupings that mimic the real world more closely than just having all the information scattered in a database). There will still need to be some heavy AI behind this, and I look forward to seeing my first server failure from the stress ;)
As for the second question... It's a good question, isn't it? Just how do you describe a personality in so many words, when the words we use are not at all sufficient in and of themselves to do the job? I'm leaning towards a combination of personality traits and emotions, but the list is so up in the air right now that I won't even write too much about it. Suffice it to say that the list is going to have to reflect both the influences of dialog actions as well as physical actions in the world. If it doesn't, then you can have an NPC get angry at you for an insult, but you can go upside his head with a monkey wrench and he'll still be happy to see you. As amusing as that would be, it makes for very bad gameplay ;)
On other fronts, I've been learning Visual Basic, which I really like! It's fast to prototype with, and when used with Excel (as you're seeing in the screenshots), you can easily track all the data and the results with ease. Here's two shots of worksheets I'm using to simulate dice rolls, combat, skill level score calculation (because I went the hard route and did away with experience levels), etc.
Dice Rollin':

RPG Sim (not fully coded out yet):

I should have the RPG Sim page working after this weekend, but it's not a priority since it's mainly geared towards making sure that inventory combinations don't have adverse reactions on the player, balance-wise. The Dice Sim page was more important in that it helped prove to myself (in about 5 minutes) that the skill level system worked the way that I envisioned on paper.
And in yet other news:
1) I'm happy to say that I'm not only going to the IMGDC this March, but my company is also a sponsor this year!
2) trueScape 2.5 and mapExporter are confirmed working with trueSpace 7.5 (basically because trueSpace 7 is just a wrapper with some fancy tools around trueSpace 6). With that said, I am probably going to rerelease trueScape 2.5 through my store. mapExporter may or may not be rereleased, depending on it's relevancy (Constructor kinda puts it to shame like nobody's business right now).
3) Still working on textures, which I'm accumulating faster than I can work on. A recent trip to Ethiopia has yielded one or two hundred more source photos that I need to comb through.
example: In my game, you'll be able to do anything you want! It's gonna be awesome! You can be a thief, a cop, a barbarian, a farmer, and you can talk to the NPC's, and they'll talk back!
Okay, fine. How do you go about that?
example: Don't crush my dreams!
Right. So I was at the laundrymat last night (where I do a lot of my game development thinking/sketching), and thought about new ways to represent chatting with NPC's. The problem is that other ways that I've been thinking about, including a Fuzzy Cognitive Map-based method of personality traits (below), are not yielding good results.

A less complicated version holds slightly more promise, but I'm starting to feel that it lacks the depth of the former plan:

So the problem is two-fold:
1) How does one construct dialog in a game in such a way as to allow interaction with NPC's in a more freeform way than the usual script-driven dialogs that are currently used, while allowing for realistic dialog?
2) How does one tie that dialog system in to the AI in such a way as to allow "soft" skills and actions by the player (as well as "hard" ones) to influence the course of dialog?
In other words, how do you make NPC dialog actually part of the gameplay, rather than just a way to get canned information from the NPC's? The answer is not the least bit clear, at least for the first question. Researching where research is at for the structure of dialog, you won't find a consenus for how conversation occurs. With that in mind, I had to sit down and decide not how conversation occurs outside of the game, but the way that conversation should best occur in the game.
Approaching the problem from this angle, I blocked out conversations with NPC's in my head and on paper where conversations took different turns, and accomplished different ends. This was done to help solidify the types of "dialog types" that would be used, such as "question", "acknowledgement", etc. These generic headings make it so that, instead of using natural language processing (NLP), I can use more generic "dialog actions" such as "thank NPC for his time". In this fashion, you can avoid having to parse a player's language (especially if their grammar is not perfect, which means wasting cycles on spellcheck, or asking for repeated inputs).
Remaining problems are how exactly to reference the branching between dialogs, and how to encapsulate the information (though I think I have some information groupings that mimic the real world more closely than just having all the information scattered in a database). There will still need to be some heavy AI behind this, and I look forward to seeing my first server failure from the stress ;)
As for the second question... It's a good question, isn't it? Just how do you describe a personality in so many words, when the words we use are not at all sufficient in and of themselves to do the job? I'm leaning towards a combination of personality traits and emotions, but the list is so up in the air right now that I won't even write too much about it. Suffice it to say that the list is going to have to reflect both the influences of dialog actions as well as physical actions in the world. If it doesn't, then you can have an NPC get angry at you for an insult, but you can go upside his head with a monkey wrench and he'll still be happy to see you. As amusing as that would be, it makes for very bad gameplay ;)
On other fronts, I've been learning Visual Basic, which I really like! It's fast to prototype with, and when used with Excel (as you're seeing in the screenshots), you can easily track all the data and the results with ease. Here's two shots of worksheets I'm using to simulate dice rolls, combat, skill level score calculation (because I went the hard route and did away with experience levels), etc.
Dice Rollin':

RPG Sim (not fully coded out yet):

I should have the RPG Sim page working after this weekend, but it's not a priority since it's mainly geared towards making sure that inventory combinations don't have adverse reactions on the player, balance-wise. The Dice Sim page was more important in that it helped prove to myself (in about 5 minutes) that the skill level system worked the way that I envisioned on paper.
And in yet other news:
1) I'm happy to say that I'm not only going to the IMGDC this March, but my company is also a sponsor this year!
2) trueScape 2.5 and mapExporter are confirmed working with trueSpace 7.5 (basically because trueSpace 7 is just a wrapper with some fancy tools around trueSpace 6). With that said, I am probably going to rerelease trueScape 2.5 through my store. mapExporter may or may not be rereleased, depending on it's relevancy (Constructor kinda puts it to shame like nobody's business right now).
3) Still working on textures, which I'm accumulating faster than I can work on. A recent trip to Ethiopia has yielded one or two hundred more source photos that I need to comb through.
About the author
Started with indie games over a decade ago, and now creates tools and tech for games. Currently working as a contractor for startups and game studios.
#2
So I did a little bit of sketching out of the idea (it was after bedtime, so I only did enough to remember what I was thinking of the next day), and here's the theory I'm putting to the test this weekend:
Besides renaming the WMEs to GIPs (Game Information Packets) because of the new functionality that I'm adding over the idea in the book, I'm hoping to abstract the data in these packets enough so that no matter what the GIP containts, it can always be serialized the same way in the database. This is so that I would have to worry more about the DB structure from a game perspective rather than trying to make data talk to each other, which is wasteful.
What these GIPs contain are representations of data (conversation or otherwise) for the NPCs and PCs to use for communications, and for the NPCs to use for memory. These GIPs can hold incomplete information, be modified, created, destroyed, queried against, decay (destruction of some information to simulate memory loss), merged, coallated (an internal merge, or organizing operation), compared, and transferred (the visual method could be called conversation).
These GIPs contain fields (typed, since they're part of a database), such as category (top-level field specifying the packet's main function such as "Query", etc), type (sub-category such as "Where found", which represents the question fragment "Where could I find?"), object/target (haven't decided all the field names, but this represents that referenced by the Query of Where Found), context (this denotes a "coloring" tag for the conversation such as "Polite" when asking where to find what you're looking for), score (some influence is made by skills on conversation against NPC's who may not otherwise give you information, and is a numeric score from a diceroll), and print (contains what is actually displayed on the screen).
The process (ideally) would be the following:
1) Player initiates a conversation with an NPC by asking where to find books.
2) GIP is sent to NPC:
Category: Query
Type: Where Find
Target: Books
Context: Polite
Score: 50
Print: "Excuse me sir, but I am looking for books. Can you tell me where they are?"
3) NPC receives GIP, rolls less than PC scores, and searches for info, to no avail.
4) GIP is sent to PC:
Category: Response
Type: No Information
Target: Books
Context: Polite
Score: 43
Print: "I'm sorry, son, I have no idea..."
5) Conversation either breaks off or continues.
So, the bulk of processing information in these GIPs gets off-loaded into database functions if the dicerolls are fine, and if the information is still unavailable, the NPC can return an error that falls in line with conversation, just like we do, and without breaking suspension of disbelief.
Work still needs to be done on this towards a few other things:
1) Memory models
2) Scoping of information (which I already have ideas for)
3) Exactly what will influence conversation and what won't (I'm thinking that I may have to scope personality traits and emotions in some way to do this effectively)
4) When to use the dicerolls and when not to (obviously, not everyone is out to evade your questioning)
5) How to facilitate conversation interacting with other action events
6) Listing generic conversation pieces
7) Displaying said pieces to PC in a way that won't make them seek therapy
Once all of that is hammered out, it should be a neat enough system that the NPCs will seem much more lively than before. I'm also playing with the idea of making it into a content pack (extended thought: It could probably be tied into the dialog resource out already, with a small amount of work, but I get ahead of myself).
Hopefully this all makes sense...
01/04/2008 (10:23 am)
@Roberts: You're ramblings are very welcome! I agree with what you say, and I think I've gotten a bit closer to how to implement that as of last night. I was taking a look at a book, "Believable Characters for Computer Games", perusing the language sections. Since it mainly dealt with Natural Language stuff, I skipped it, because it's too processor heavy and I'm leaning towards canned statements. However, I happened upon a section talking about "Working Memory Elements" and how they can be used in certain AI structures for NPC's to retain and modify data.So I did a little bit of sketching out of the idea (it was after bedtime, so I only did enough to remember what I was thinking of the next day), and here's the theory I'm putting to the test this weekend:
Besides renaming the WMEs to GIPs (Game Information Packets) because of the new functionality that I'm adding over the idea in the book, I'm hoping to abstract the data in these packets enough so that no matter what the GIP containts, it can always be serialized the same way in the database. This is so that I would have to worry more about the DB structure from a game perspective rather than trying to make data talk to each other, which is wasteful.
What these GIPs contain are representations of data (conversation or otherwise) for the NPCs and PCs to use for communications, and for the NPCs to use for memory. These GIPs can hold incomplete information, be modified, created, destroyed, queried against, decay (destruction of some information to simulate memory loss), merged, coallated (an internal merge, or organizing operation), compared, and transferred (the visual method could be called conversation).
These GIPs contain fields (typed, since they're part of a database), such as category (top-level field specifying the packet's main function such as "Query", etc), type (sub-category such as "Where found", which represents the question fragment "Where could I find
The process (ideally) would be the following:
1) Player initiates a conversation with an NPC by asking where to find books.
2) GIP is sent to NPC:
Category: Query
Type: Where Find
Target: Books
Context: Polite
Score: 50
Print: "Excuse me sir, but I am looking for books. Can you tell me where they are?"
3) NPC receives GIP, rolls less than PC scores, and searches for info, to no avail.
4) GIP is sent to PC:
Category: Response
Type: No Information
Target: Books
Context: Polite
Score: 43
Print: "I'm sorry, son, I have no idea..."
5) Conversation either breaks off or continues.
So, the bulk of processing information in these GIPs gets off-loaded into database functions if the dicerolls are fine, and if the information is still unavailable, the NPC can return an error that falls in line with conversation, just like we do, and without breaking suspension of disbelief.
Work still needs to be done on this towards a few other things:
1) Memory models
2) Scoping of information (which I already have ideas for)
3) Exactly what will influence conversation and what won't (I'm thinking that I may have to scope personality traits and emotions in some way to do this effectively)
4) When to use the dicerolls and when not to (obviously, not everyone is out to evade your questioning)
5) How to facilitate conversation interacting with other action events
6) Listing generic conversation pieces
7) Displaying said pieces to PC in a way that won't make them seek therapy
Once all of that is hammered out, it should be a neat enough system that the NPCs will seem much more lively than before. I'm also playing with the idea of making it into a content pack (extended thought: It could probably be tied into the dialog resource out already, with a small amount of work, but I get ahead of myself).
Hopefully this all makes sense...
#3
I agree, very interesting reading. I can offer some thoughts on this. What Robert above was mentioning is a piece of AI that you might call Motive - an NPC has a need to do something. Language can be tied to that, as well as your personality construct and your NPC's gameplay stats (health, inventory, etc). Begin with small talk like a 2 or 3 year old might blab about seemingly unimportant crap.
Here's how - think of it in terms of modes:
1) Expository mode - You have an opinion or fact about yourself (can tie into your own health/inventory stats), someone else, or something else. This is expository, and would lend itself to a huge dynamic array of statements like:
(thing) is __________.
Then substitute the verb "is" for feels, likes, loves, hates, is annoyed by, etc. This list can really go on.
This NPC "range of knowledge" database can be prefilled or assimilated with visible (public, if you will) class data, that an NPC can read in just by having an object in its field of view or aural range. This is likely to be the cause of your first server crash, unless you limit your first try to one small room. Expository mode can be informed by the next mode...
2) Ignorant or Questioning mode - The NPC has no opinion about something. It asks a question to you or another NPC. The response would go into the "range of knowledge" database in such a way as:
(they) think/know (thing) is _theiropinion_.
and also as (depending on the trust level between the NPC and player/other NPC) like this:
I'll go along with (his/her) take on (thing).
which could be then translated to:
(I) think/know (thing) is _theiropinion_.
Asking a question is a matter of
This could be fun to play with - imagine what happens when someone likes to spread misinformation! Make a weight score on certain pieces of knowledge, and if someone disagrees, a barroom brawl ensues? I would tend to think that you might draw connections from heavily weighted knowledge to motives like "NPC go there and get that". This is where the game Facade made use of ABL (A behavior language), which you can google too for more info.
The other issue you mentioned is that of response parsing. In Facade, Natural Language Processing has a small context of a room with 2 married folk, who invite their friend over for dinner. Look into this article (http://aigamedev.com/reviews/facade-ai) , and you'll see why games don't do this more often. Facade characters usually clarify your response against their database by asking a question (e.g., Do you mean to say (thing) is (description)?) and you reply yes/no.
3) Command mode - giving orders if the NPC has that tendency to do so. This seems to me pretty easy.
(you)(action)(that)
I hope that gives you something to go with.
01/04/2008 (10:34 am)
Ted - I agree, very interesting reading. I can offer some thoughts on this. What Robert above was mentioning is a piece of AI that you might call Motive - an NPC has a need to do something. Language can be tied to that, as well as your personality construct and your NPC's gameplay stats (health, inventory, etc). Begin with small talk like a 2 or 3 year old might blab about seemingly unimportant crap.
Here's how - think of it in terms of modes:
1) Expository mode - You have an opinion or fact about yourself (can tie into your own health/inventory stats), someone else, or something else. This is expository, and would lend itself to a huge dynamic array of statements like:
(thing) is __________.
Then substitute the verb "is" for feels, likes, loves, hates, is annoyed by, etc. This list can really go on.
This NPC "range of knowledge" database can be prefilled or assimilated with visible (public, if you will) class data, that an NPC can read in just by having an object in its field of view or aural range. This is likely to be the cause of your first server crash, unless you limit your first try to one small room. Expository mode can be informed by the next mode...
2) Ignorant or Questioning mode - The NPC has no opinion about something. It asks a question to you or another NPC. The response would go into the "range of knowledge" database in such a way as:
(they) think/know (thing) is _theiropinion_.
and also as (depending on the trust level between the NPC and player/other NPC) like this:
I'll go along with (his/her) take on (thing).
which could be then translated to:
(I) think/know (thing) is _theiropinion_.
Asking a question is a matter of
This could be fun to play with - imagine what happens when someone likes to spread misinformation! Make a weight score on certain pieces of knowledge, and if someone disagrees, a barroom brawl ensues? I would tend to think that you might draw connections from heavily weighted knowledge to motives like "NPC go there and get that". This is where the game Facade made use of ABL (A behavior language), which you can google too for more info.
The other issue you mentioned is that of response parsing. In Facade, Natural Language Processing has a small context of a room with 2 married folk, who invite their friend over for dinner. Look into this article (http://aigamedev.com/reviews/facade-ai) , and you'll see why games don't do this more often. Facade characters usually clarify your response against their database by asking a question (e.g., Do you mean to say (thing) is (description)?) and you reply yes/no.
3) Command mode - giving orders if the NPC has that tendency to do so. This seems to me pretty easy.
(you)(action)(that)
I hope that gives you something to go with.
#4
I think "chunking" canned and generalized conversation dialogs are the way to go- at least for what I have in mind. A few of the constraints that I'm looking at for my RPG are:
1) Ease of use: I don't want people to puzzle over it for too long, and any system put in place will have more of a learning curve than people are used to in ORPG's now, which puts it at a disadvantage.
2) Comprehensive: The system needs to be able to reflect conversation ability with any NPC in the system.
3) Lightweight: The system needs to be as light on the CPU and database as possible, which rules out any parsing of text, which is by default CPU intensive.
4) Integration: The system needs to be as tightly integrated as possible to AI and other gameplay elements.
I've got hope for this system :) The GIPs should allow for the situations you discuss without the processing overhead that text parsing requires, as long as the AI/AE (Artificial Intelligence/Artificial Emotion) system I am developing responds in the manner that it needs to. It also allows for commands, as you stated in #3.
To this end, my thoughts are to develop around the AI/AE system, and then when all the other inputs are done, look at what they require of the AI/AE, and build that accordingly. Of course, that doesn't stop me from doing a running-revision of the AI/AE as I go, but that's just futile hopes that I'll stumble onto the best representation of AI to work with everything else- sometimes I'm just hopeless ;)
To address the situation of the barroom brawl you were talking about, the way I would implement weighted knowledge would be to weight the knowledge (in the context of an opinion) against the other NPCs goals and "beliefs" (probably represented by goals?). In that way, the opinion would be taken as a threat or insult, causing a brawl. NPCs would be smarter than that in general (but dumber when cinematics call for it) so as to not throw the gameworld into chaos.
01/04/2008 (11:57 am)
@Daniel: Actually, I did read that Facade article yesterday afternoon, and it does illustrate just why you don't want to use ABL. Facade's conversation structure was very massaged by the authors to prevent problems and designed to get the conversation "on track", even though it showed flexibility. I tinkered with it for about 2 minutes at IGC some years back (it kicked my ass, I walked away ashamed at my communication skills, lol).I think "chunking" canned and generalized conversation dialogs are the way to go- at least for what I have in mind. A few of the constraints that I'm looking at for my RPG are:
1) Ease of use: I don't want people to puzzle over it for too long, and any system put in place will have more of a learning curve than people are used to in ORPG's now, which puts it at a disadvantage.
2) Comprehensive: The system needs to be able to reflect conversation ability with any NPC in the system.
3) Lightweight: The system needs to be as light on the CPU and database as possible, which rules out any parsing of text, which is by default CPU intensive.
4) Integration: The system needs to be as tightly integrated as possible to AI and other gameplay elements.
I've got hope for this system :) The GIPs should allow for the situations you discuss without the processing overhead that text parsing requires, as long as the AI/AE (Artificial Intelligence/Artificial Emotion) system I am developing responds in the manner that it needs to. It also allows for commands, as you stated in #3.
To this end, my thoughts are to develop around the AI/AE system, and then when all the other inputs are done, look at what they require of the AI/AE, and build that accordingly. Of course, that doesn't stop me from doing a running-revision of the AI/AE as I go, but that's just futile hopes that I'll stumble onto the best representation of AI to work with everything else- sometimes I'm just hopeless ;)
To address the situation of the barroom brawl you were talking about, the way I would implement weighted knowledge would be to weight the knowledge (in the context of an opinion) against the other NPCs goals and "beliefs" (probably represented by goals?). In that way, the opinion would be taken as a threat or insult, causing a brawl. NPCs would be smarter than that in general (but dumber when cinematics call for it) so as to not throw the gameworld into chaos.

Torque Owner Robert Brower
1) How does one construct dialog in a game in such a way as to allow interaction with NPC's in a more freeform way than the usual script-driven dialogs that are currently used, while allowing for realistic dialog?
I considered this for a moment and the first thing that came into my mind was Morrowind. I like this game a lot but interactions with NPC's are somewhat, as you put it, "canned". The next thing I thought of is the question, "How does information get from one person to another?" Because it seems to me that over the course of any game people would know, in the beginning of the game, less about events, each other, and the world around them than they would towards the end. Here's what I mean. Take for example a keyword search mechanism. With this I mean, if you ask an NPC, "Where is the bank?", then a game might look for key words such as 'where', 'bank' and the question mark '?'. If this NPC has just entered this city for the first time then he doesn't have this knowledge yet. So the obvious response is, "I don't know". Now consider that a lot of games, at least from my experience, do not come with very inquisitive NPC's. What I mean by that is that they tend to walk around and don't really do much except show off their fancy clothes and wait for someone to approach them. In Morrowind, some NPC's will follow you and help you out. But in general, I have not seen a lot of NPC's that ask questions. And why would they since they're just milling about looking fancy. So they need something to do. An example might be that an NPC needs to walk to the next nearest city (which he has never been in before) to deliver some silk to the tailor there. He knows which road to start out on and can read road signs but if he gets into trouble he may have to run off into the forrest to escape a predator. In this case he might become lost or come to a section of a road with which he is unfamiliar with where you might be standing. If he hasn't finished his mission yet, and he is "lost" then his obvious question to you would be "Excuse me, but I am lost. Do you know how to get to New York?". The basic gist of what I am trying to say is that I think knowledge can be broken up into two groups. The first group is what we know. The second is what we don't know. As we travel through life what we know increases while what we don't know is infinite. In a computer game, what we don't know is finite. So perhaps you could use this in your approach to NPC dialogs in the following manner.
Each NPC has finite knowledge. You can ask them questions that they may or may not be able to answer based on keyword search (similar to script driven dialogs but with capability to search his knowledge base). Example:
You step into a pub and ask the bartender, "Do you know John?". The bartender replies, "Yes, he's the tailor who comes in here for lunch every day." Now you can mix it up a little bit here with those personality traits you are keeping. Does the bartender trust you enough to give you the answer to your question, etc. What about if you ask the bartender, "Do you know Ted Southard?". If the bartender met Ted yesterday then based on his trust for you, etc. he might reply, "He came in yesterday.", or "He came in last week." If it was a month ago, he might not even remember!
Each NPC can learn new knowledge which expands the possible list of questions you can ask an NPC over the course of the game. You can organize knowledge into categories:
1. People (by name, when they last saw them, what they do if they know this yet, whether or not they like a person, etc.)
2. Places (by name, which road to take, key people if any in that place they know)
3. Events (when they met someone, when someone dies, when someone got robbed ***)
***Tony, the barber, doesn't know that Todd, the fletcher, was robbed because he hasn't met anyone yet from which this information could have flowed to him.
Each NPC has a mission or a set of timed or event driven missions. Allows an NPC to learn over the course of the game. For example, John, a tailor has 7 missions. They are temporally ordered in this way:
1. Leave the house and go to the shop
2. Sell goods
3. Leave the shop and go to the pub for lunch
4. Leave the pub and go to the shop
5. Sell goods
6. Leave the shop and go home
7. Sleep
During the time that John's executing his missions he is susceptible to being asked questions. Obviously his knoweldge will include the names of the places and people he goes to and meets everyday. You should preadd this to his knoweldge. Every time he meets someone new, e.g. a player, add their name to his knowledge. Whenever he does business with a player, add their name to his knowledge. You get the idea.
Anytime an NPC is obstructed from a mission, e.g. he's lost, he lost his money (was robbed) and needs to beg so he can afford to buy what he went to buy, he is stopped midtracks by you, he can start asking questions, e.g. "Where am I? Do you know how to get to New York City?", "Got any spare changed?", & "What do you want?".
This is a complex issue and I've probably rambled on enough. I completely agree that talking to NPC's should not be canned and I agree that something must be done! But I would not try to adapt conversation soley based on the personality traits of a person but would place an emphasis on how information flows from one person to another over time while people go about their normal day to day activities then apply the personality traits on top of the aforementioned layer of growing knowledge / lack of knowledge.
Regards,
Robert