Choice game writing tips

Over the past month of writing, I started keeping a list of tips, shortcuts, and concepts from my experience writing choice games for those who may be interested. It is very basic and a bit stream of consciousness.

Feel free to ask questions, add your own, or suggest better ways of doing things.

Keep a file of common code you use. For example, I keep a list of common stats that change and variables I use a lot:

 *set morality %+10
  *set humanity %-10
  *set honor %-10
  *set impulse %+10
  *set truth %+10
  *set ideal %+10
  *if group_leader = firstname
  *if group_leader = "Rachel"
  *if group_leader = "Jaime"

If you code long scenes or long vignettes, create sections in a temporary file. It makes testing, especially Quicktest, much faster to run.

For most choice games, you should have stats with specific mechanics. For simplicity, keep in mind two major ones: establishing and secondary.

  • Establishing stats define your character, get set early in the game, and rarely change once set. You should check these stats throughout the game to determine whether an MC succeeds or fails. You track that outcome by changing a secondary stat.
  • Secondary stats reflect the choices and actions of the MC throughout the game, change frequently, and generally use fairmath. They can be personality (morality, honesty, impulsiveness), resources (health, money, mana), or relationships with characters, groups, factions, etc.

Save files with an underscore at the front (prefix) if it is a code reference or a temporary scene. It will be easier not to bundle these for publishing.

For every option in a choice, change or track some variable. Any time you ask a player to make a choice is an opportunity to gather info about their character. Make it count. Add or subtract from a numeric stat. Set a flag. Do something.

In that frame of mine, as you set up a choice, ask if you can test any stats. For example, if you want to convince the guard to release you from a cell, what stat can I check to assess whether he agrees or not? For more info, reference Axes of Success and Axes of Choice.

Give player’s agency. Before you present a choice, provide some details on why those choices may benefit the MC and possible outcomes if selected. Don’t let a player make uniformed choices. Here is a good write-up on Agency.

As you’re writing choices, keep a list of characters in mind who you expect represent a range of people who would be MCs. For example, if your game is a modern crime thriller, MCs may be Jack Bauer (24), Olivia Pope (Scandal), Jack Ryan, Clarice Starling (Silence of the Lambs), Luther, Nikita, Sydney Bristow (Alias), Alex Parrish (Quantico), etc.

Before you ask for beta-testers, play your game. A lot. I fail at this far too often. I am so excited to share my latest scene that I release it with obvious bugs. This takes time and energy away from testers, who should be helping you to find overlooked and nuanced errors.


Nice collection JimD, and great idea to share.

Would you mind expanding on this one for me? I’d have thought having to load more files would make quicktest slower, not faster. I’d love to know what’s happening here.

1 Like

I recently coded a 70k vignette addition to a 200k word scene. Instead of adding it altogether, I made _temp.txt with only that scene in my scene_list. Quicktest treats that one scene like the whole game, only finding simple errors (e.g. indentation). If I just added that 70k chunk into my 900k-word game, it would take 5 minutes to reach that new scene.

1 Like

Ah, as if quicktesting individual chunks?

1 Like

Ah! Apologies, I think I get you now. So it’s just a matter of “if you want to test a new scene/section quickly”, put it in a separate scene? Not so much, that QT itself will end quicker?

1 Like

Right, and only have QT check the specific file you’re working on. If chapter 1 passed, take it out of the scene list, so it isn’t retested every time test new sections of code.


Nice list :). I agree moving problem chunks of text out into their own file for debugging helps.

I’ve started to get into the habit of commenting below tricky to remember *create variables in the startup file so it’s an easy reference on how the variables can be set and I don’t have to search the text for it. For example if you can gather supplies to make a weapon to defend themselves, I find it helps to put a comment that the player might have chosen rocks, vines or sticks. Otherwise I have to check back to see if I’d called them rocks, stones, pebbles etc when I try to remember half a dozen chapters later or else risk the *if statement being messed up.