Jul 27


By the Numbers: How to Write a Long Interactive Novel That Doesn’t Suck

Posted by: Dan Fabulich | Comments (13)

Traditional gamebooks tend to be pretty short. The average story in a 110-page book in the most popular “choose a path” series is only six pages long.

It’s not hard to see why. If each page of a choose-a-path book allows the reader to choose between just two options, a seven-page story requires 128 pages of text. If you want eight pages, the author has to deliver twice as much text, 256 pages. And if you want to write a twenty-page short story, you need a book more than a million pages long. You’d never finish writing a “short story” of that magnitude!

It’s hard to tell a great story in fewer than eight pages. (You can tell children’s stories, which is perhaps why choose-a-path has traditionally appealed to kids.) You’ll have to write longer stories if you want grown-ups to read them.

But how?

One way to write longer interactive fiction is to merge your plot branches aggressively, like this:

Aggressively Merged Branches

Figure 1: Aggressively Merged Branches

But this creates an obvious problem: if your narrative looks like that, then it doesn’t matter to the story what happens in earlier choices. It doesn’t matter at all what you pick in Chapter 1, 2 or 3 . . . nothing else in the rest of the story changes based on those decisions. Merging branches like this robs the interactive novel of its interactivity.

The solution to this problem is to use delayed branching, in which earlier choices don’t branch the story right away; instead, they determine the outcome of later decisions.

For example, in Choice of the Dragon, you decide in Chapter 1 whether your dragon tends toward “Brutality” or “Finesse.” In a later chapter, your dragon faces off against a group of heroes; you can choose whether to fight the heroes in a fair duel, or to set a trap for the heroes instead. Only players who have chosen Brutality will win in a fair duel; players who chose Finesse will lose the duel. On the other hand, dragons with high Finesse will set the trap successfully; dragons with Brutality will set a clumsy trap that the heroes can easily circumvent.

Delayed Branching

Figure 2: Delayed Branching

By delaying branches and aggressively merging branches, authors can design a linear story that’s still highly interactive. Our games are a completely linear series of chapters; at the end of Chapter 1, you always go on to Chapter 2, no matter what choices you made in Chapter 1. But your choices in Chapter 1 can affect Chapter 2.

You can’t replay our games as many times as you can re-read a traditional gamebook, but our stories are orders of magnitude longer and deeper, so we think it’s a good trade off.

Keep Track of Delayed Branches with Numbers

We keep track of delayed branches by using a handful of numeric scores that we call “stats.” We display these scores when the player pushes the “Show Stats” button. Here’s an example from Choice of the Dragon, where our stats are Brutality, Finesse, Cunning, Honor, Disdain, Vigilance, Infamy, Wealth, Wounds, and Blasphemy. (Blasphemy is a secret stat; it’s not visible on the stat screen.)

In early chapters, the player chooses which scores will be high and which will be low; in later chapters, we offer the player some options that require a particular stat to be high; e.g., players may choose to play a game of chess, which requires a high Cunning. If dragons with low Cunning scores choose to play chess, they will lose; dragons with high Cunning scores will win at chess.

A few budding ChoiceScript authors have asked us: why do we need to use numeric scores to keep track of delayed branches? Could we do delayed branching in some other way that doesn’t require any math?

Unfortunately for arithmophobes, there’s no simpler way to handle delayed branching (as far as we know). It’s hard to prove this without listing every possible way to do it; you’ll just have to take our word for it. (Or post your own suggestion in the comments!)

There’s one tempting alternative that I will discuss briefly: instead of using stats, later chapters could refer back to particular choices from earlier chapters. Winning at chess in Chapter 8 might require the player to have chosen to practice chess back in Chapter 3, rather than depending on a high Cunning score.

We do use that technique sometimes, but rarely, because if you use it too much, your story quickly becomes too complex to write.

In a single playthrough of our games, a player typically makes hundreds of individual decisions. By using numeric scores, we can be sure that each choice has meaningful consequences: if the decision modifies a stat, then it has some effect. Without stats, you’d need to keep a list of every decision in the game, and make certain some later chapter referred back to that decision. Imagine trying to draw a diagram of hundreds of bubbles with connecting lines; it’s much more complex to avoid numbers than it is to just live with them.

Fortunately, the kind of numbers we’re talking about here aren’t hard to work with. Give bonus Brutality points when the player is bloodthirsty, subtract Honor for behaving dishonestly, and so on. We keep the scores on a scale from 1 to 100%, so it’s easy to say, “You can only win at chess if your Cunning is 80% or better.”

The Entire Game Is about These Numbers

If you use numeric scores to delay branching, you’ll quickly find that the entire game is about these numbers. Every chapter should change the stats and test them to make earlier decisions meaningful.

The stats will embody the essential conflicts of your story—the main decisions that the players will make as they play your game—so it’s critical that you choose good ones.

Next: 7 Rules for Designing Great Stats


  1. CPFace says:

    From the first time I played Choice of the Dragon, I was blown away by how well you seem to understand interactive fiction design. These “tip” articles are my favorite thing about this blog. :) The insight is invaluable.

  2. Simon says:

    You could also use boolean switches for delayed branching. For example, the player, in the role of a trusted government official, could kill a politician, sell secrets to the enemy or sabotage a research project. All of those actions, while different choices (possibly at different points of the story) could set the “traitor” switch to true. Later on, the traitor switch could determine whether the player is jailed, needs to escape execution, can flee to a rival country, etc.

  3. Dan Fabulich says:

    @Simon Yes, that’s exactly how we do it when we want to refer back to an individual decision. Some math-averse authors have said: “Can I do the whole thing with boolean switches?” to which my answer is still, “Not really; your head would explode.”

    • Jaime Leigh says:

      Actually Dan, that all depends on one’s level of planning. So far, I’ve only reported experiencing minor nose-bleeds to Jason. Then again i’ve 12 stats and probably about 30 booleans so-far. O_o;

  4. [...] Dan Fabulich of Choice of Games writes in this great article - [...]

  5. Netlich says:

    Once again an excellent and informative read…

    I will have to chip in my slight disagreement on the point on boolean vs arithmetic params and which one makes it harder and more headache inducing to write, analyse or debug your game. For I feel that is is with arithmetic skills that problems occur. Your example with chess is spot on. Imagine that the player got the chance to gain “Chess skill” three or four times in a game before coming to the chapter where he has to play it.

    If chess knowledge was a simple boolean parameter then the player either had it or not and they won or lost in the chess game. Debugging this would mean imagining the playthroughs and how many time a player is truly given a chance to learn chess…

    If Chess skill as an arithmetic parameter that got increased or decreased due to player actions throughout the game, to me that would mean more trouble in ensuring the story would come through alright in all possible playthroughs. And if I need to truly balance the game then I would have to define what does constitute a high enough skill in chess to pass through the delayed branch trick…

    Anyway – this is really nit picking and I just wanted to make sure I understood what was being said above correctly. If not then I apologise for the long comment :)

  6. Dan Hemmens says:

    I’m not certain I agree with your suggestion that a game has to be long to hold the interest of an adult audience. “Quality over quantity” is a cliche for a reason, and there is absolutely no reason at all that a 2000 word short story (or for that matter a 200 word poem) is going to be less affecting (or more childish) than a brick-thick novel.

  7. [...] and also about sexism and harassment. The stats you’re managing (this kind of game often involves managing stats, for good reason concern how disgruntled your cast and crew are, and on a pure gameplay level trying to keep [...]

  8. [...] you have alternatives to branching the story completely. For example, sometimes player decisions don’t branch the story right away, but they have an effect on the main character’s attributes (the “stats” on the [...]

  9. Lee Edward McIlmoyle says:

    I think I can see the point of both Boolean and Arithmetic solutions to delayed results. That said, while I’ve conceived of at least one or two projects that would work better with a sophisticated set of stats to track individual progress, particularly in a modular story cycle, I think I’d probably plan out the Boolean strings in a mind mapping program before I’d rely too closely on stats alone to do all the grunt work. That said, you folks have finished games, and I haven’t yet, so you have a valid argument against.

  10. Adam says:

    I will tell you guys one thing, as a published writer I have no skill in programming or any interest in learning. Talking about “boolean” and “aritmetic” etc etc is intimidating.

    I’m intrigued by your concept, as it makes me remember the multiple path novels that I read as a child. However, I think you’d have more talented writers wanting to come to you if you had a GUI programming interface that was very simple to understand.

  11. sp00f says:

    Great article, thanks!

    One way to handle the stat issue is to assign player flags based on certain moral choices. For instance, a player is presented with the options of stealing an item or doing a task. Those who choose to steal get a “theif” flag. In this way, you have a non-numeric tag to check for in a later interaction. Say, if the player has a run-in with the police, you can check to see if he’s carrying a flag that would make the officer respond differently. “Killer” is another example. Both of these techniques are common in PvP MUD games, which commonly tag the player as attackable for the duration of a flag (til death, in some cases!). It could easily be adapted to IF.

  12. […] feel this essay on interactive narrative design by Dan Fabulich provides a good summary of the argument, with a proposed solution. (This essay by Chris Crawford […]

Leave a Comment

Your email is never published nor shared. Required fields are marked *


twitter fb rss

Subscribe by E-mail