Jul 27


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

Posted by: Dan Fabulich | Comments (28)

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 […]

  13. […] overall structure is a Branch and Bottleneck, with stats-based delayed branching, as Choice of Games advocates. (That one lone trip back up to the top of the chart is really something like a flashback, and you […]

  14. […] The standard ChoiceScript format is delayed branching (I’m not even extrapolating here; this is an official statement by the CEO of the company). […]

  15. […] Choice of Games – Wiring Interactive Fiction (06.11.2015) […]

  16. […] Here, I was trying to merge the reflective choices (similar to what I did in Solarium) with the “branch and merge” (or branch and bottleneck) pattern used in many Choice of Games works. Needless to say, this is on a much smaller scale! But […]

  17. […] writing about how to make branching narrative thematically powerful, incorporate stats, and avoid combinatorial explosions, as well as just minimizing the amount of branching relative to the number of choices offered. Jay […]

  18. […] By the Numbers: How to Write a Long Interactive Novel That Doesn’t Suck […]

  19. […] Live the Queen works, and is the guiding principle of Choice of Games (Dan Fabulich uses the term delayed branching). It’s also a common plot structure in non-IF games that allow significant plot […]

  20. […] narratives in ebook form (Choice Of the Dragon is personally beloved). They have two posts (here and here) about their format that are worth checking […]

  21. […] Patterns in Choice-based Games is a go-to article defining some useful terms; it pairs well with Choice of Games’ article on how to use stats to create long-term consequence without combinatorial explosion, and Jon Ingold’s talk on […]

  22. Kelly says:

    Questions… Why do you choose to display the stats to players? Won’t that be too obvious? Players can constantly check stats to see what’s the influence of a certain choice. Won’t it make more sense to hide them?

  23. […] came across this concept in this blog post, and it is the one that resonated most strongly with […]

  24. […] ChoiceScript is a javascript-based scripting language developed by Adam Strong-Morse and Dan Fabulich of Choice of Games. It can be used to write choice-based interactive narratives, in which the reader has to select among multiple choices to determine how the story will unfold. The simplicity of the language makes it possible to create Choose-Your-Own-Adventure-style stories without any prior coding knowledge. The ChoiceScript SDK (Software Development Kit) is available to download for free on the Choice of Games website. Once your story is complete, you can publish it for free online. Otherwise, Choice of Games offer the possibility of publishing your work with them (they publish to various platforms, including iOS, Android, Kindle and Steam) and earn royalties from it There is a tutorial that covers the basics, including a Glossary of ChoiceScript terms. The Choice of Game blog also includes some articles with tips on how to design and write interactive stories, especially long ones. […]

Leave a Comment

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

Subscribe by E-mail