Storylets Play Together

Storylets encourage narrative designers to think in terms of systems, and allow story arcs to affect one another in memorable ways.

In my previous post on storylets, I showed how storylets can replicate standard interactive narrative structures that are familiar from video games or CYOA.

This post gets into the other things storylets can do for your narrative structure that would be harder to achieve with a conventional method. Specifically, storylets let you build a system where

  • episodic stories can feed into a larger narrative arc, and it’s easy to add new episodic content without ripping out all the existing stuff
  • the player is guided within, but not constrained to, a story they’re currently playing
  • different episodes interact with each other in fictionally and mechanically interesting ways

To take those one at a time:

Large and small narrative arcs

A big storylet-based story might have a long narrative arc and then a bunch of smaller internal stories inside it.

Bee was written for the Varytale platform, which is, alas, no longer available.

My game Bee, for instance, takes place over several years of the protagonist’s life. There’s an overall arc about her growing up until she’s no longer eligible for any more spelling bees, and the changes in her life that go alongside that. Within each year of her life, she experiences traditional holidays, trains, does chores, and develops relationships with the members of her family.

To track where the player is in this story, I tracked several different progress stats:

  • How many years have passed?
  • What month is it?
  • How far has she progressed with character relationships and their associated story arcs?

“How many years have passed?” controls high level progress through the story. When it reaches a high enough number, we’ll get to the endgame, a story about her last spelling bee ever.

“What month is it?” makes seasonal content available, and of course advances the year count. This means that

  • A storylet about Christmas has “month=December” as a prerequisite
  • Every storylet advances the month after it’s played, as an effect
  • If the month is December, the new month becomes January and the year stat is also advanced by 1

The character relationships, meanwhile, are mostly detached from those temporal measures. A player might progress rapidly through all the stages of a character story during the first “year” of the main narrative.

To generalize from that a bit, we can have episodic progress stats that track where we are in a small story (like the character relationships) and other stats that rise more slowly, or have much larger values, that track our progress through the main narrative arc:

In some games, completing an episode is what drives the main arc forward. Neo Cab works a bit along these lines: you can pick up 3-4 passengers a night, and it’s up to you which ones you want to drive.

But when you’ve ended your shift, the day ends and your overall progress ratchets forward, opening up new elements in the main storyline.

Guided but not constrained

A branching narrative struggles to tell the player more than one story at a time. Typically, the player has a tightly defined set of options at any given moment.

Conversely, parser-based text adventures and a lot of open world games can confront the player with a bewildering amount of freedom, leaving them unsure what they ought to do.

A storylet system can offer a happy medium here: contextually relevant options from all the stories you’re currently in the middle of, plus any “always available” elements. Making this comfortable for the player depends on some good UI design, as well, but the underlying system supports it.

Stories that interlock

Month, year, and character story progress are not the only stats in Bee. The game also tracks spelling skill, motivation, and family poverty.

These other stats aren’t progress stats, though. Motivation and spelling skill are resources. The protagonist needs motivation to be able to play certain storylets that improve spelling skill. And she needs spelling skill at a certain level to be able to pass the end of year spelling bee.

Meanwhile, poverty is a menace — something the player doesn’t want to increase, but which may rise as a result of events in the story. When poverty is too great, certain storylet options become unavailable, and others open up.

Seasonal events in Fallen London introduce new happenings in existing game locations, and unlock new elements within existing storylines.

This is still a fairly systems-light representation — other storylet games have lots of resources and menaces in play. In Sunless Skies, for instance, gaining too much terror unlocks Nightmare storylets that plague the protagonist with unspeakable visions.

Thanks to these abstractions, one story can meaningfully affect what happens in another.

Here’s the branch and bottleneck storylet diagram from last post, except this time we’re including the idea that the player will sometimes need to go outside the episodic story she’s in if she wants to get the means to unlock the next episode. And conversely, sometimes she might need to do some other, unrelated activity to prevent a menace stat from going too high:

Some lovely storytelling dynamics can arise from systems like this, dynamics that echo the effects you find in long-running series television.

Suppose this episode is about tracking down a family of werewolves, but in order to unlock a midgame storylet, Mulder needs clues from an informant. That’s his source stat. Fortunately, he already has an informant available, unlocked through earlier play. He does have to go back through a familiar action or two of putting a signal in his apartment window in order to get his informant to show up — but that’s the kind of content reuse that feels fictionally justified.

Now suppose that in the midgame, one storylet has Mulder insist on sitting out in the woods in a convertible to watch the full moon. But nothing happens all night long except they get a lot of mosquito bites, and in the morning the menace stat “Agent Scully’s Exasperation” ticks upward a little. Or a lot.

Now Scully’s exasperation score unlocks a whole new episode when this one is over, a Mulder-and-Scully-fight episode. Alternatively, Mulder realizes he’s gotten himself into trouble and engages in a menace-reducing activity of buying her an apology gift, as a beat between the plot beats of continuing to hunt werewolves.

All of those are elements that someone could bake into a traditional branching narrative as options at the critical points. But building the system of storylets means that there’s a whole reusable economy of menaces and resources.

It means that I could have holiday seasonal events where Mulder has extra options for cheering Scully up on her birthday, or where she’ll read his intentions differently if it’s around Valentine’s Day.

Or maybe the identity of Mulder’s informant changes depending on what has happened in the top-level narrative progression. Maybe any informant will do for getting the Information resource commodity, but the costs of doing so and the fictional tonality of the interaction shift a lot.

In fact, we might have a scenario where there are multiple sources available for information, and the player has to decide how long Mulder will spend investigating each of the sources before trying to move on from this point — the more intel-gathering storylets he plays, the better the outcome he can unlock:

…but other things might be happening at the same time. Menaces might be climbing; a time stat might be counting down.

At its core, this is standard game systems design advice: make sure your systems affect each other.

It’s possible to design with this kind of systems thinking in mind for (say) a branching narrative system, but storylets make it particularly natural to do so because they foreground the stats — what are you tracking? Which storylets become available, and which are locked, as a result?

This presentation by Tadhg Kelly, and this post on his blog, talk about four kinds of numbers in games — currencies, metrics, tools, and territory. Some of his definitions feel a little alien to me — I wouldn’t think of a tennis ball as a currency in the game of tennis. But using these broad categories and thinking about how they apply to stats in narrative design, we might divide them like this:

Progress stats, menaces, reputation, and relationship stats are metrics, advancing the storyline and opening up optional events.

Money, inventory items, consumable “favors owed” by other characters, and subtler items like energy are all currencies. Currencies are most fun if they have a backstory: the currency of Hell might not be acceptable to churchgoers. Creating fungible, convertible rewards allows different storylines to affect each other in fun and fictionally surprising ways.

Most of the storylet-based games I’ve played have at least some metrics and some currencies.

Some, but not all, also have a sense of territory — a stat representing the player’s location in the game universe, for instance. Territory works well with investigation or exploration gameplay where the player needs to figure out where to look next for something.

Tools, we might understand as things that open up new affordances and actions that wouldn’t otherwise be there.

Some storylet games use personality traits or skills this way, for instance by letting the player learn lockpicking in order to defeat any forthcoming locks. The challenge is that, to pay off properly, this really requires the content creators to be disciplined and make sure that there are regular opportunities to show off a particular skill or trait throughout the rest of the content. (There are procedural ways to help make sure that’s the case; that’s a more advanced design solution, though.)

Another interesting but less common way to design “tools” in a storylet system is to have something that affects how other options play out.

  • Reduce risk. Fallen London gives the player a supply of “second chances”, a resource the player can spend to guarantee herself a second roll of the dice on a risky attempt where she wants to increase her chance of succeeding.
  • Modify core metric stats. Inventory items and outfits might increase the player’s stats in particular areas, temporarily making certain storylets accessible.
  • Multiply / divide consequences. Make a storylet produce double the currency that it otherwise would! Make a compliment twice as effective on your relationship stats with the Countess! Etc.

End of November Link Assortment


December 2 is the deadline if you’d like to submit a talk proposal or an exhibition piece (interactive fiction might very well be suitable) for the Electronic Literature Organization’s next conference, July 16-19 2020 in Orlando. Details of the call here.

December 7 is the next SF Bay IF Meetup.

December 10 is the next meeting of the People’s Republic of IF in the Boston/Cambridge area.

The Oxford/London IF Meetup does not get together during the festive season, so we’ll not be together again until 2020.

The NarraScope organizers have announced that there will be a NarraScope 2020: specifically, May 29-31, in Urbana-Champaign, Illinois. If you’re interested in speaking there, the call for proposals is now open.

Last year was the inaugural year for this conference, focused on narrative games from classic IF and text adventures through point-and-click adventures to VR games, interactive audio, and mobile story games, TTRPGs and LARP, and quite a bit more. Meanwhile, if you missed this year’s event, or would just like to revisit its glories, there is a new podcast, Through the NarraScope, that discusses some of the talks and content.

New Narrative Games

Tender Claws is the company behind the amazing PRY. They have a new piece out now for Oculus Quest, The Under Presents.

Meanwhile, Choice of Games has a new line of romance IF coming out, under the imprint Heart’s Choice. The first three titles will be available on Steam shortly, and consist of A Pirate’s Pleasure, Dawnfall (science fiction), and Jazz Age.

And this one isn’t a new release, but new accessibility for old releases: David Welbourn continues to release a steady stream of verbose, friendly walkthroughs for parser IF games from the 1990s and 2000s. His walkthroughed games can be found on IFDB via the lists that he publishes each month. Recent walkthroughs include Dr Dumont’s Wild P.A.R.T.I., a formerly commercial game.


Aaron Reed’s every-version-is-different novel Subcutanean is funding for a couple more days.

Competitions and Exhibitions


IF Comp 2019 has closed, with Steph Cherrywell winning first place for Zozzled. The full set of rankings and results is available on the competition website.

SubQJam is open now through December 16 for submissions of short interactive fiction, and winners will be featured in SubQ Magazine next year.

Ryan Veeder has announced his Second Quadrennial Exposition for Good Interactive Fiction, an event whose purpose is to create games that are pleasing to Ryan Veeder. Fortunately, Ryan’s IF tastes tend to elicit games that appeal to a lot of other folks as well. Last time around, the winner was the highly entertaining Foo Foo. As a taster of the sort of thing to expect, here is how Ryan describes his preferences:

Entrants should be advised that I like games that are funny, cute, elegant, spooky, friendly, dumb, and/or sincere. Entrants should be advised that I dislike games that are cynical, depressing, gory, horrifying, serious, and/or important.

Entries to the Second Quadrennial Exposition are due… well, at potentially several different times in early 2020. Rather than confuse matters by trying to summarize here, I refer interested parties to Ryan’s own site.

If you’re hankering to write a long game, or a game you don’t think is going to appeal to Ryan Veeder, or a game that is just going to take a bit longer to complete, Spring Thing 2020 is accepting intents from authors now, and through March of next year.

Finally, Green Stories is a competition for stories about building a sustainable future. The competition includes an interactive fiction division.

Articles and Videos

Jon Ingold talks to Meghna Jayanth about her work, the upcoming project Sable, and her presence in the game industry at AdventureX 2019.

Ed Fear talks about challenges around representation in games, and about writing gay characters in particular. Also from AdventureX. (Several other videos from AdventureX are now available as well.)

Jimmy Maher on Digital Antiquarian writes about the Z-Machine and the early days of Inform and Curses, with quite a bit of input from Graham Nelson. (Introductory thoughts about the Z-Machine, Graham’s personal account, Jimmy’s take on the IF Renaissance)

Those interested in the problems of teaching an ML agent to play interactive fiction may like these articles courtesy of Prithviraj Ammanabrolu: Interactive Fiction Games: A Colossal Adventure – formalizing the task of playing text games with reinforcement learning agents, a software platform ( and series of baseline agents designed to play a wide variety of text based games. Transfer in Deep Reinforcement Learning using Knowledge Graphs – answering the question of how well an agent can play a text adventure by learning to play other text adventures within a genre. Toward Automated Quest Generation in Text-Adventure Games – looking at the other side of the problem, instead of playing a game, how can we use AI to help generate content for a game (here in the form of a quest within a given world).

Storylets: You Want Them

Storylet systems are a way of organizing narrative content with more flexibility than the typical branching narrative.

Very frequently, when I’m called in to suggest a narrative delivery system that will work for a particular game, I find myself sketching out some form of storylet-based solution. Storylets are simple, atomic, robust, and recombinable.

Here’s my basic definition of a storylet (though many systems may call them other things: events, snippets, etc):

  • there is a piece of content. It might be a line or a whole section of dialogue, it might be narration, it might be an animation or scrap of film
  • there are prerequisites that determine when the content can play
  • there are effects on the world state that result after the content has played

I’ve written some before about how this structure lets one get beyond standard branching narrative, with quality-based and salience-based structures. It is the concept underlying StoryNexus. It also underlies Threaded Conversation, the conversation library I wrote for Inform (eventually released, and now maintained, by Chris Conley).

You could even understand conversation elements in Versu and in Character Engine as a type of storylet. In those cases, there is quite a lot of other procedural work determining what content should be presented next and how it should vary. Quite a few procedural narrative systems work by defining some kind of model for stringing storylets together — so this can be an approach that will support an ambitious AI-driven concept.

At the same time, this design method isn’t only for the procedurally ambitious. You can make and explore the affordances of a rudimentary storylet system by writing your storylet content and quality rules on a set of index cards. And in fact I do sometimes do exactly that as a paper prototyping exercise.

This definition leaves a lot else out. It doesn’t say how much content is inside a given storylet, how that content is structured, or how it’s selected. Max Kreminski’s overview work explores a lot of the nuances here.

But for the present article, I’m looking chiefly at how many standard ways of structuring game narrative content can be rendered in storylets.

Common Branching Structures and Storylets

Storylets can be used to replicate a lot of classic structures from branching, Twine, or Choose Your Own Adventure contexts, if you give yourself a progress stat or quality to count how far you are through the story, and perhaps also allow for a menace stat to represent how much trouble the player is in.

For instance, here’s a gauntlet storyline, linear except where the player makes a mistake, as it might be represented in Twine and then as it might be represented in storylets:

Continue reading “Storylets: You Want Them”

Neo Cab (Chance Agency)

Neo Cab tells the story of Lina, a gig economy driver about ten years in our future and in a slightly-alternate reality. In that world, a company called Capra — part Uber, part Teslahas rolled out a fleet of self-driving cars that make human drivers largely obsolete. Lina can just about make ends meet, barely, but she’s been invited to Los Ojos to live with her old friend Savy, and that seems like a very welcome life change.

Surprise surprise, though: when she gets there, Savy’s situation is not quite as straightforward as she’d hoped.

The story plays out passenger by passenger: the loop consists of deciding what passenger to pick up next, having a conversation with them in the car, and dropping them off. There’s some light gameplay around trying to keep your passengers happy enough that your driver star rating remains above 4, and not spending so much money that you can’t afford to recharge your car or get a bed for yourself at night.

Some of the passengers are a little more out there than others. Agonon here runs a cult worshipping the Pain Worm that lives beneath the city.

But mostly, the substance of the game is conversation, very lightly animated. The things you’re allowed to say depend partly on the mood you’re in, with conversation options tinted different colors if they happen to be unlocked by your current frame of mind:

…and on the rare occasions when you’re not talking to a passenger in your car, then you’re probably talking to someone by chat.

It’s not always obvious how your conversation choices are going to drive your mood, and occasionally my passengers reacted to me with less than a 5-star rating when I thought I’d treated them just fine. But the system is forgiving enough that I didn’t find that aspect too frustrating; it felt more like it was representing the reality of a gig economy situation, namely that you don’t always know or control exactly how someone is going to respond to you, and there’s a little bit of arbitrariness in the experience.

Continue reading “Neo Cab (Chance Agency)”

Narrative States

Understanding how player stats map to story outcomes can be a challenge. This article looks at some strategies for simplifying and visualizing complex state spaces, including the use of ternary plots.

Last week I tweeted about the concept of narrative states and how to plot and think about them. This post is a bit of an expansion on that tweet thread. Thanks to everyone who responded there. I’ve answered some of the questions I received, and added some extra resources and images.

Suppose we have a dating sim where outcome is decided by the player’s relationship stats to three characters, and the player has loads of chances to increase relationship with any/all of them. It can be tricky to reason about the design of this.

However, we might choose to make the outcome of our story depend on which suitor we currently like best. Now we can collect a score every time we do something that indicates liking a particular character, and then calculate percentage of interest in each character, thus:

darcy_percentage = darcy_likes / (darcy_likes + wickham_likes + collins_likes)

Needless to say, this value is undefined until the player has expressed an interest in at least one character. Do not divide by zero.

Darcy’s percentage, Wickham’s percentage, and Collins’ percentage have to add up to 100%, which means that we can plot these three variables in two dimensions, with a ternary plot. Three suitors, four story outcomes.

We have four outcomes — one for if the player is more than 50% invested in each suitor, and a fourth outcome if they’ve not given a majority preference to anyone.

Immediately this chart shows us where the player might get confused or frustrated about why they got the outcome they did — because there are some points of really abrupt state transition.

At the corners between states, a single player action could flip the outcome to another suitor or to the solitude action. This can feel abrupt and confusing.

We can tweak this a couple of ways.

Continue reading “Narrative States”

Mid-November Link Assortment


November 23 is the next Baltimore/DC meetup.

Dec 7 is the next SF Bay IF Meetup.

The Oxford/London IF Meetup does not get together during the festive season, so we’ll not be together again until 2020.


Aaron Reed’s horror novel Subcutanean, where each copy is unique, is now available for backing on IndieGoGo.  This is a cool procedural text project, and Aaron has also created a number of making-of posts that explain what he’s doing and why.


IF Comp has just ended, and the winners should be announced shortly. (In fact, if you click that link, they may already have been announced — though they have not been at the time of this writing.) Meanwhile, there’s a huge spreadsheet tracking the various reviews written for the Comp, if you’re feeling like you’d read about some of the games.

Ectocomp, the Halloween-themed IF jam, received 22 entries this year. Voting is open through the end of the month, if you’d like to participate and rate the games.

ProcJam, the jam for making things that make things, is also recently over, having brought together 134 entries.

If the thought of all these competitions makes you want to write and share some IF, SubQJam is open now through December 16 for submissions of short interactive fiction, and winners will be featured in SubQ Magazine next year.

If you’d rather compete with something a bit more long-form, or just need more time to put it together, Spring Thing 2020 is accepting intents from authors now, and through March of next year.

Finally, Green Stories is a competition for stories about building a sustainable future. The competition includes an interactive fiction division, which has been described to me thus:

The Interactive Fiction competition is looking for entries from both individuals and creative teams, consisting of a complete story or demo of a longer piece, no longer than 30 minutes worth of gameplay in total. It may be the whole piece, the opening section, or a subsequent chapter or scene.

Winners will receive cash prizes and editorial feedback. Entries are due February 3, 2020.