I've been working on a role-play engine in Flash and thinking a lot about how to interact with characters within a role-play game.
I'll rewind somewhat and put this in context. Back in my old school days, I used to play AD&D with a group of friends. I was normally the DM, the guy who designed the quests and took on the role of the monsters and other characters that the heroes would interact with. This was great fun, and led to some memorable scenes that even today, over a decade later, we will still sometimes discuss fondly. So why have those imaginary experiences stood the test of time within this group of old friends?
I believe that part of the reason is that, being an intelligent human being, I could react to their interactions with the characters in the adventures in a believable way. I had to improvise a lot, going off-script, and inventing back stories as we played. Now computer based role-play games do not really try and tackle this tricky problem in a believable way. Probably the best, most believable characters I have come across are in the computer game Mass Effect, which (like the classic Baldurs Gate series and numerous other RPGs) use conversation trees. Now these work well, but you cannot stray from the possible options that the game's designers have come up with and so when you run out of possibilities (or just want to say something else that hasn't been scripted), well, um, you can't - it's just a game. So there isn't too much role-playing actually going on in computer based role-play games, unless you involve real people like MMRPGs do, but then again, I don't think too many people are staying in character in those games. Correct me if I'm wrong.
So this brings me back to single player games and how conversation trees are good but don't really allow you much freedom. In discussing this with a work colleague a while ago, he alerted me to an old Ultima game that would allow you to free type keywords in to the characters. This (and the excellent Facade AI demo) got me thinking about the possibilities of this approach. Of course, the problem with this is that you have to know the keywords which will trigger the correct reactions in the NPC's, but this can be solved by involving synonyms and also if you know the issue of second time around playing, where if you know the keyword you can get the correct response right away (my colleague gave the example of a grappling hook that you needed to scale a wall, when you know this, you just said grapple to the NPC and he gave it you right away whether or not you'd even discussed it with him), but this is solvable using an unlock list on the topics themselves.
So here is the results of about four days work in experimenting with this approach. V1.1 of my demo is available here. It is extremely basic; there is no preloader (wait a few seconds and something will actually appear). Type in the light grey box and click the dark grey box to send your query. Treat it as a query engine, where you can ask the character various things. I'd love to solicit feedback on this, so if you have any thoughts, feel free to share them.