Procedural Text Generation in IF

In the Missing Tools discussion some time ago, one of the things people mentioned wanting more of in IF was procedural text generation, which here is meant specifically as the ability to have the computer describe complex world model states or story events without having to hand-author every possible variation.

This is an area where there’s a lot to learn from work going on in academic research, but as far as I’m aware there’s relatively little communication. As I mentioned in my ICIDS writeup, James Ryan at UCSC and Dr. Boyang Li at Georgia Tech’s Entertainment Intelligence Lab are doing work on a) how to better represent a richly complicated world model and b) how to procedurally alter narrative features such as the tone of narration. One of the things we particularly don’t seem to do in hobbyist IF, perhaps for lack of resources, is experiment with large word databases such as WordNet or crowd-sourced work in particular areas like that used on Scheherazade.

Speaking for myself, I’ve also tended to stumble towards solutions in this space based on trial and error and the needs of my own projects, rather than having a strong grounding in the relevant academic work. Most of what we’ve needed — and most of what we’ve done — is pretty much work in the shallowest end of this pool.

And, of course, text generation for parser IF comes with special additional challenges, in that the player usually expects to be able to refer to any generated noun or noun phrase element; therefore if we generate a description of a thing as “blue”, the system also needs to remember how we described that object and accept the input “blue” to refer to it.

Here are the things I’m currently aware of. Unfortunately, I’m inevitably more aware of the internals of my own libraries and games than I am of other people’s work, so if I left out something cool that you did, please by all means say something in the comments: I am eager to know about it. In particular, there may be a lot I don’t know about under the hood in Kerkerkruip.

Continue reading

On Time Units and Narrative Pacing in CYOA and Parser IF

two-star says, “Well, novels are capable of conveying widely different scales of passing time. Parser IF considers time at the pace of individual actions. Choice IF can do time at different scales pretty well though.”

— from the last meeting of the IF discussion group.

This is the contention that we’re going to be discussing at our next meeting (April 5).

Continue reading

Events: Phrontisterion, WordPlay Festival

For some years, Chris Crawford has run a mostly-yearly convention on interactive storytelling called Phrontisterion. This year, he changed this a physical gathering to a virtual one, in which participants can get together online to discuss projects they’re working on or have just recently become aware of in the interactive story world. Last session I did a presentation on Versu. Future sessions will cover other areas of interactive story, which might include conventional IF, video games with a story focus, academic narrative experiments, etc. Sessions are designed to take one hour and meet the third Wednesday of the month at 9 AM Pacific (a time picked to accommodate the maximum number of current participants, given how people are spread over many time zones and many jobs). If you’re interested, there’s a blog and sign-up form.

Also: if you’re in Toronto on November 16, you might want to check out the WordPlay festival, put together by Jim Munroe and the Hand Eye Society. There will be an IF workshop with Christine Love. There will be a talk by the creators of Kentucky Route Zero. There will be many games on display, including my pieces First Draft of the Revolution and Counterfeit Monkey.

Versu: Content Structure

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.


Behind the scenes of a particular gameplay experience, Versu content comes in three forms: genre files, which specify a lot of details about behavior in a particular social milieu; story files, which provide an extrinsic narrative arc; and character files, which specify individual behaviors and personal character arcs.

Genre definitions are the most low-level element of the system. They specify things like: what are the ways that people in this genre judge one another? What are their main concerns and interests? What are standard, baseline ways of reacting to simple stimuli in this genre? An Austen genre file might supply a lot of ways to react to improper behavior, while a spy-novel genre file might offer ways to evaluate the patriotism of other characters. Each character belongs to a particular genre and relies on that genre file to supply baseline interactions, even if that character is placed into a story of another genre.

Story files contain premises, situations, and provocations. They lay out locations and objects that characters might encounter, and provide narrative turning points that might depend on how characters currently relate to one another. Story files create opportunities for characters to change their views of one another, come into conflict, and have to make difficult choices, or perhaps to discover what is going on in the narrative scenario.

A story file includes a list of roles that can be played in that story, such as “a traveler on the road at night” or “a guest at a ball,” together with some restrictions about how those roles might be cast: for instance, the ball guest might need to be an upper-class character rather than a servant.

The reader of the story can then “cast” those roles from any appropriate characters to which she has access. Maybe she chooses to combine two characters she thinks will hit it off romantically, or throw a couple of natural enemies together and see the fireworks.

The reader can also choose to play any of the roles that are marked as playable. (A few roles in a story are typically excluded because they’re basically support roles, or because they have seriously restricted options available: it might not be very interesting to play a dog or the butler in a story where that character has little access to the main content of the story.)

Character files contain character descriptions, preferences, traits, habits, props unique to that particular character (does this character have a quizzing glass through which he stares at people he finds inferior? an umbrella she unfurls in the house?). Character-specific dialogue also goes here: anything that character might have to say about his backstory, amusing incidents that recently happened to him, etc. In the currently available content, for instance, the character of Lucy has certain flirtation actions that are unique to her, but that create openings for relationship change that use the standard underlying mechanisms for changing relationship state. This means that other characters who have unique strategies for responding to flirtation can react appropriately, even if the two characters have not explicitly been coded to interact with one another.

Character files contain information about what the character hopes to achieve and how he might respond to blockages or problems along the way. Some characters need to make money, or marry well. Some like to make friends, or have some long-standing self-image issue that is preventing their happiness. These arc elements can be satisfied in a variety of ways: for instance, a character who needs to increase her income might stumble across a chest of gold in an adventure plot, or marry a rich man in a high-society plot.

Upcoming creation tools will allow readers to make their own files of all types, but we’re planning to start by letting people build new characters.

Character creation will mean writing new jokes and quips, building up alternative behavior patterns and methods of resolving relationships — and then sharing these characters with friends. Using Versu’s conversation model to tag the meaning of utterances, reader-creators can add dialogue that doesn’t just re-skin existing interaction options, but offers new possibilities for character response: if you create a character with a gift for insulting people, that new, more-abrasive personality will shift the way the story can flow, perhaps creating more animosity with other characters and leading to more broken or angry relationships. (I’ll talk more about how the conversation model works in a future post.)

The aim of this system is to provide the reader with the pleasure of remixing stories, exploring their outcomes from multiple perspectives, discovering surprising juxtapositions of character and plotline, playing with crossover stories where characters from different genres meet up, and scouting out some of the creative range of fanfic, satire, roleplay, and improv theater as well as writing.

It’s an ambitious hope, and I’m looking forward to discovering new corners of the system as it comes in contact with more readers and authors.

Making of Counterfeit Monkey: Puzzles and Toys

This is the first of a couple of making-of posts about Counterfeit Monkey, in case people are interested: these are a bit like some of the making-of material I’ve published about Bronze and other games, but I’m splitting it up between story discussion and puzzle discussion.

We’ll start with puzzles. This is going to be spoilery, so if you’re still planning to play, I recommend finishing the game first.

Continue reading