Threaded Conversation Public Beta

“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.

Alabaster status

GothPrincessesCurrently there’s a release 3 available here. Release 3 addresses several bugs and adds new vocabulary for certain actions. It also plays significantly faster on slow machines, especially under Windows.

(I haven’t built a Windows installers for this yet, so that installer still contains release 1. I’ll update that when I have a chance.) (All the installers now contain release 3.)

Jay is Games kindly carried a review. There’s also a discussion on the Legendary blog (which covers various forms of mythical creature) on the game’s premise. (Image by Claire Beauchamp.)

Official Release


The Queen has told you to return with her heart in a box. Snow White has made you promise to make other arrangements. Now that you’re alone in the forest, it’s hard to know which of the two women to trust. The Queen is certainly a witch — but her stepdaughter may be something even more horrible…

There are some eighteen possible endings to this fairy tale.

Some of them are even almost happy.

A fractured fairy tale by John Cater, Rob Dubbin, Eric Eve, Elizabeth Heller, Jayzee, Kazuki Mishima, Sarah Morayati, Mark Musante, Emily Short, Adam Thornton, & Ziv Wities.

Illustrated by Daniel Allington-Krzysztofiak.

Available now from

(Changed because the old site went over its traffic allowance.)

Please note — as the site also points out — that you’ll want the latest available Glulx interpreter to play (Git 1.2.4 for Windows, Zoom 1.1.4 for Mac). Alabaster is processing-intensive and makes use of the latest Inform optimizations.

Another warning: some of the comments here get spoilery.

Achilles and the Tortoise

So Alabaster lately has really been feeling like that Zeno’s paradox in which Achilles can only run 1/2 of the remaining distance, and then 1/2 again, and the finish line always remains right where it was…

However. Had a really miserable bit last night/this morning when I thought that a beta-tester had turned up a deep-seated bug in the way Alabaster (and the core library) parse quip names, and that this bug was so heinous that the only way to fix it was going to be to meddle with the parser template at the I6 level, and that, besides, this showed something rather discouraging about I7′s flexibility, and in general ARGH.

But no, actually, the problem was something completely stupid (but hacky and baroque) that I’d done a few months ago to try to reduce the number of times I7 had to consult grammar lines when parsing quips. I took the ugly machinery out again and now it all parses right.

Have also implemented a bunch more of the art program. It is starting to look a lot more coherent to my eye, while retaining a number of subtle ways of communicating changes in the underlying game state.

Added two of Aaron Reed’s extensions for newbie-friendliness, Smarter Parser and Poor Man’s Mistype.

Edited the game’s help text.

Added a tutorial mode to offer a new player some detailed hints here and there — I mean, Alabaster’s conversation system is already giving a lot of hints about the kinds of things that the player can do, but the tutorial mode gives additional guidance about non-conversational commands.

Still outstanding: run the current version past the artist, incorporate any additional material from him; rebuild the website as appropriate for a finished release of the game; provide links to accelerated Git for different platforms, so that people can play the most streamlined possible version of the thing.

More on Graphics in Alabaster

picture-1 So I’ve been working more on the Alabaster graphics — really the main thing that is still left before release.

(Re my complaints back here, I think I have fixed the very worst speed hangup with optimizations in my own code, and then David Kinder has awesomely put in some work that will lead to the acceleration of all Glulx games produced by I7. Graham and I have discussed some further optimizations in the way I7 handles relations that might streamline the behavior of the underlying conversation library yet further, but that will have to wait until later builds of Inform. I am hopeful that the result will be something that remains usably fast even for fairly large games. As I suspected, that involves approaching the problem at all three levels — terps, I7, and the individual library.)

Anyway, about the graphics, I’ve been thinking more about what graphics should do in this game, and about what I like in successful uses of graphics in other IF.

Continue reading

Alabaster Graphics and Collage

The remaining significant work on Alabaster consists of building the graphical status line on the left side of the screen. My original idea was that this image should give hints about Snow White’s current state of mind (or your state of mind about her), by showing her with different expressions. Daniel Allington, who is contributing the line drawings we’re using, offered a considerably more interesting suggestion:

What if there were just half-a-dozen freehand line drawings that were then collaged in different ways? (eg. zoomed in, zoomed out, combined with other images, superimposed, folded in on themselves, washed-out, erased, over-written, etc.) Cropping the same images in different ways to achieve the 1×4 ratio would be another way of using them to contribute to the storytelling. I like the way that collaging and re-collaging can create continuity – a bit like the illustrations in City of Secrets, incidentally.

I really liked this idea that the status line would be procedurally developed and dynamic in the same way that the conversation itself is. Besides, this idea allows for considerably more movement and change in the window than if we were sticking only to literal-minded facial portrayals. So I’ve been working on some code to place, zoom, and superimpose the images that Daniel sends my way.

There’s a lot of work still to go in order to get the diversity of effects I really want to see here, and a certain amount has to be done by creating effects in Photoshop rather than applying them procedurally in Glulx (given the narrowish set of graphical tools Glulx provides), but it’s coming along.