Weird City Interloper is a parser-based conversation game by Pacian. Like some of Pacian’s previous work, especially Castle of the Red Prince, it largely does away with the traditional object and room hierarchy: here instead of navigating between places, you are moving from one interlocutor to another. As you go, you accumulate an inventory of characters you know about and topics you can discuss, and the point of the game is to discover the story by asking the right people about the right sequence of things. Because those options are always enumerated (and initially the list is pretty short), it feels as though the game could easily have been executed as a choice-based experience instead; this is an interesting one to look at if you’re studying the parser-choice borderlands.
The business of applying your topic inventory to different speakers sounds a bit mechanical, perhaps, and at some points it did seem as though I was just running around trying all my topics on all the characters. But at its best moments it felt much more organic than that, and several times it rewarded puzzle-solving leaps of intuition in a very satisfying way. The game also includes some well-timed help to give you hints if you seem to be lost, and this helped me past the couple of spots where I was feeling a bit stuck.
We now have two more meetups scheduled for the Oxford/London IF group:
2:15 PM, March 30, in Oxford: a session on IF tools. Graham Nelson will present his most recent changes to Inform 7, and Eric Eve will introduce his adv3lite library for TADS, and we’ll open to a general discussion of IF tools.
7 PM, April 8, in London: a session on character modeling, led by Nicholas FitzRoy-Dale. We’ll look at what has been done and what current mechanics support, and talk about possibilities for the future.
Chris Conley has now released Threaded Conversation, a much updated and revised edition of the Inform extension I used for Alabaster and Counterfeit Monkey. You can download it here.
Threaded Conversation’s purpose is to create prompted dialogue for conversation-rich games, and to deal with parsing ask/tell input intelligently. It also comes with an extension called Conversation Builder that allows for developing conversation dynamically, the way Alabaster did in its input-gathering stages. Chris has added significant amounts of new work past where I was able to take the project, though: beta-testing, cleaning up code, and in particular revising the icky bit of code that handles parsing input when the player types a conversation command but the conversation hasn’t officially started yet, which has to figure out who’s being addressed and then restart the parsing process afresh once it has the proper context for reading the subsequent speech keywords. (Trust me, this is icky, and it was pretty broken in the code iteration I handed off to Chris.)
I’m very grateful to Chris for taking this over for me at a point where things became too busy for me to keep up, and putting so much of his own thought and effort into it. I hope folks will find it useful.
via Threaded Conversation.
This is one of several design articles about the new interactive narrative platform Versu, which Richard Evans and I have been building with a team at Linden Lab.
Any platform focused on social interaction needs strong conversation handling. The following article goes into a certain amount of technical detail about what the system does and how it works, and Richard kindly agreed to write about the sections on which he had the most design influence.
“Threaded Conversation” is the extension I used to build Alabaster: a large and complex piece of work implementing a lot of my ideas about conversation modeling for use with Inform 7.
Threaded Conversation is capable of handling several styles of interaction: old-school ASK/TELL, something closer to menu conversation, or (the default) a prompted ASK/TELL similar to the default TADS 3 conversation system. It dovetails with some of Eric Eve’s conversation extensions to automatically handle greeting and saying goodbye to characters. Without implementing anything as rigid as a dialogue tree, it has a concept of conversation topics, recognizes when the player significantly changes the subject, allows for NPCs to direct conversation towards areas of their own interest, and is capable of tracking character knowledge separately from the way the character might choose to express that knowledge. I’ve successfully used it for both two-person and multiple-person conversation modeling.
It does not include any built-in features for artificial intelligence on the part of the NPCs, but because it has a concept of “things the NPC wants to say urgently/at some point in the future” that can be freely adjusted, it dovetails reasonably well with author-designed code to determine what the NPCs should want to say next.
The intention had always been to polish and revise this extension and its documentation, then release it for use by the rest of the community. In practice, what happened was that I got it a good way towards the finish line and had an extension that I myself was happy to use, but that was probably incomprehensible to other humans. Occasionally someone would ask me for a copy and I would send it off… and never hear anything more about it, presumably because the people receiving the code weren’t able to do much with it.
Then I changed careers and life paths into one that leaves me a lot less spare time (and where I’m doing enough coding in my day job that my energy when I’m done winds up in other places). The good news, however, is that Christopher Conley stepped forward and volunteered to do the work needed to adapt Threaded Conversation into something other people could use.
He’s revised the code and documentation, and is now looking for volunteers to beta-test the extension and its documentation. If you’re interested, check out his posting on the intfiction forum for contact details.
One of the more interesting GDC talks I saw was a Friday afternoon presentation by Elan Ruskin, talking about how dialogue snippets are matched to a continually changing world state in Left 4 Dead 2 and other Valve games.
It’s a neat rule-based system, designed to meet a couple of specific important requirements: easy for the writers to author a lot of content, responsive to a wide variety of different situations (what if we want a character to have a special quip if attacked while in the circus environment as opposed to elsewhere?), interruptible (characters should be able to exchange quips, but should sensibly break off if one of them comes under attack). Like Inform, it prioritizes rules and applies the most specific one it can find, using less-specific ones as fall-backs.
The resulting system is very well tuned to the specific case of having NPC dialogue that’s highly reactive. Characters aren’t planning or trying to achieve goals via dialogue, but they present a strong illusion of situational awareness, which is what those games require. (And there’s often a place for purely reactive NPC quips in IF, too.)
The talk also goes over a number of optimization strategies for speeding the lookup on these sorts of tasks, and argues for the importance of making tools that writers find comfortable to use. Solid stuff, both technically and in terms of project planning.
Elan has posted the slides and video here.
(Bonus: there’s a shout-out to Inform in the middle.)