You are currently viewing “Knobs and Levers and Stories:” A Q&A on How and Why to Make Interactive Fiction for Writers and Programmers

“Knobs and Levers and Stories:” A Q&A on How and Why to Make Interactive Fiction for Writers and Programmers

It’s almost the New Year, so what better way to start 2020 than picking up a new hobby? How about game writing? Hold up, don’t leave the page! It’s easier to get started than you think.

Two weeks back, I published a short “choose your own adventure” interactive fiction game on my website. A reader on Reddit referred to it as “evocative and heart-breaking” and, seeing as I usually try and shoot for that last one in my work, I was pretty happy with the review.  

The game was built in Twine Harlowe, which I’ll be diving into more deeply in a minute. Twine is built for accessibility—anyone can jump in and make a game with next to no coding, and little time investment. But, after I’d finished a draft of the game, a friend of mine by the name of Chad Finch decided to play around with the Twine engine, add some fancy coding flourishes, and push the system around to see what he could get it to do.

His work and our discussions got me thinking about game writing, “choose your own adventure” games as a storytelling format, Twine as a development engine, and the nature of interactive versus non-interactive fiction. Likewise, the divide between our two skill sets—mine focused on narrative with some coding, and his focused on technology and coding with some narrative—got me thinking about the accessibility of Twine and the answers I wish I’d had in front of me when I first started getting into game writing.

So, to help all those writers out there who want to try their hand at game writing—or “choose your own adventure” stories in particular—I decided to interview Chad and give a Q&A that could serve as a solid introduction for fiction writers and storytellers interested in interactive fiction, while giving a bit of insight into our game. Enjoy! 


C.J.: Alrighty, I’m here with Chad Finch. I guess I’ll start with a softball question: Chad, in your own words, why don’t you explain Twine for us? And add in anything you really love about it.

Chad: So, Twine would be a text-based way to write interactive fiction with as little barrier to entry as possible.

“Interactive fiction” being?

Text-based stories where the person reading them can make choices that affect the outcome in some way.

So, like “choose your own adventure” books?

Yes, but digitized and awesome. I think my favorite thing about it is it’s extremely low barrier to entry; that someone with minimal to no coding skills or programming knowledge can jump in and make something. It may not be the most polished, complicated, or technologically impressive, but it’s a story and it’s interactive.

Okay. Why did you decide to work on a story written by someone else, especially in a game format heavily focused on story? Did you have something you were working on, too?

Not really, no. I heard about it from you, I poked around in it to learn it. I like to take these new toys, twist all the dials, pull all the levers. I think by coming into a written work and focusing more on the programming and presentation side let me focus my energies into a part that was more familiar to me, having more of a technical-nerd-computer history. I could leave the story stuff to you. Rather than worrying about the whole thing, I could just focus on my part and you could focus on yours. I hope that the whole thing came out better for each of us working in our area of expertise.

A while back, you mentioned how complex the actual passages and story flow was. You spent a sizable amount of time just cleaning up the passages section of the story, which can’t actually be seen by the player. Why’d you decide to start with that?

The idea was to make sure it was in as clean as a place behind the scenes as it could be, so that it could be tweaked and edited by you, later. That way, we could make sure that there was enough regular structure to it that we could easily find any bugs in testing, so that we could easily change them. See, your original prototype was functional but…

An absolute shit-show to work with?

The original draft is on the left. Chad’s reorganized edit is on the right. While perfectly functional, the original would have been hard for any outsider to deal with.

Yeah. Not to use your words, but there’s no way you could have gotten it to the point I did. No, you could have, but it would’ve taken much longer.

For the benefit of the recorder, I am aggressively shaking my head “no.”

(Laughs) I just wanted to take that roughness and smooth it out to the point where the programming side wouldn’t be hindering our ability to test it and didn’t hinder your ability to tell the story you wanted.

So, to use a completely janky analogy, it would be a bit like coming into a new machine shop or woodworking shop and starting by making sure all the machinery was working right and organizing all the tools so that, whatever project you decide to work on, you know where everything is and you know it’s all going to work properly?

Yeah, and I don’t think that’s too janky of an analogy. To go with a woodshop; by the time someone’s looking at an armoire or chest of drawers or whatever, they have no idea what the factory floor looked like. But the more organized, regular, safe, and understandable that factory is to the woodworker, the better quality they’re going to turn out and the quicker they’ll be able to turn it out. So, that effort may not be visible in the end, but it’s a critical part of the process.

So, you figure the time investment was well worth it?

I think so. I hope so. Otherwise, what did I do all that for?

Practice, at the very least. Alright, there was a trick you came up with in the first chapter you were really proud of. Mind explaining what it was, because I still don’t entirely get it (laughs).

So, you had a part of the story in there where a character is in a kind of magical library, and they’re trying to look through different books to solve a puzzle. And there was a bit in the actual prose where every time you put a book away to check another one, there was a bit of memory manipulation, where you lost track of where you were in your research/investigation. I thought it would be really cool if the gameplay experience could reflect that.

So, I was able to make it so that each time you checked a book—if it was the wrong one—and went back to choose another, the whole list was scrambled. You couldn’t just go “first link, nope, second link, nope.” There was no predictability to it. I thought that was a really nice way to make the gameplay match the narrative, to make you as the player feel some of that confusion as the options shuffled like the books shuffled and you forgot about them on the shelf.

Only one of those options is “right.” But, click the wrong one, and the list gets shuffled.

Follow-up question to that: how did you accomplish that trick and, more importantly, how did you figure out how to pull it off?

Because [Twine] is so newbie friendly, that kind of advanced structuring becomes a little more complicated because of the way that this system interweaves the final output text (the prose that the player reads) with the code within each book that got shuffled. I had to do two versions of that. The first was very janky and convoluted, and it sat there while I did other stuff. Then, one day, it just came to me that the original way was quite awful, and I was able to come up with a much cleaner, simpler way of doing it that had less code repetition, was more robust.

But in essence, it was just a data table with one book on each line and then the bits of information about it—the title, the contents, the bit of code attached to each one to either advance or reset the puzzle—then, a secondary bit of code that scrambled that data up and spat it back out for the player.

Okay. There were several times you got stuck in programming puzzles in a format that was not originally built for hardcore programming. But, you still said “let’s push this format to the lips.” So, what were some of the resources you used to resolve these problems when you got fancy with the programming? Were they easy to find, or did you have to piece together a lot of disparate bits of information?

I think the thing to understand is that, while [Twine’s] not really designed to do super complex tasks, it’s capable of it. It’s designed as a very flexible format that, if you want to take the time, you can get those kinds of results. As far as resources? I didn’t find a whole lot of specific sites or tutorials or anything, but I wasn’t really looking. I would say the biggest thing to anyone wanting to do more than a simple if-else branching storyline is to just step back and think about everything you want to do, then think about a way to get there. A lot of what I did was perseverance and testing. I broke the original work as often as I fixed it and gave myself more problems that I had to figure out how to solve, and it was just a matter of going back to the editor, changing some code, and going back into test mode to see what I did.

Don’t let it intimidate you… don’t try to add in every little trick and option. Just jump into it, go make something.

Knowing a little bit more about the programming tricks you can pull off with these “choose your own adventure” games, do you feel there’s anything unique about the format for writers or gamers that would be difficult to replicate elsewhere?

I think, depending on how it’s structured on the programming side, you can do things that you could never get out of a book or TV show or movie. That seems obvious, but I think it can be very interesting to explore all the possibilities because, as creative, you’ll have a million ideas: should the character do this, should the character do that, should I put the camera here or there. All those possibilities can be explored in this format because you don’t have to choose one canonical version of the story.

And, as the person reading or playing the story, that becomes really fun; the replayability. You can come in, push all the knobs, pull all the levers and try to get an understanding of how the story’s structured and what choices affect things in the future. It lets you explore that space a lot more. I think it lends itself to dealing with certain themes of emotion or consequence more than other formats would allow. Movies are great for things like spectacle or getting a close view of a specific version of a person. Games are great for giving the player freedom to run around and do whatever they want. But this middle ground lets you play with the what-ifs.

So you feel it focuses more on the branching parts of the story rather than the agency of the player or the movements of the story?

Yeah. I think, in general, not as many people replay story games as you might think. I’ve seen post-mortems from AAA game devs. They’ve got a lot of numbers on this and it shocked me, even on these big, popular choice-driven games like any of the Telltale games. It’s shocking how many people even finish them, let alone play them multiple times. But a piece of interactive fiction, if it hits a sweet spot at maybe less than an hour to play through, opens up the ability and desire for people to do multiple playthroughs and start building their mental model of the story space and the options.

So you feel that their almost short-story level of time investment helps get people more interested in the branching aspect of it?

I think so. I’m sure there’s examples of interactive fiction out there that are novel length, but I don’t think that’s the majority of interactive fiction. I think the short form versions help you explore the strengths of the format.

What’s some advice you’d give to anyone hoping to learn Twine? Especially those coming at it from a storytelling perspective, more than a programming one.

Don’t let it intimidate you. If you’re coming at it from a more author-focused perspective, don’t try to add in every little trick and option. Just jump into it, go make something. That’s cliché advice, but I think it holds true here. Just make new stories and new games with it. And if you find something that appeals to you, some core of interactive fiction that you wanna keep exploring, you can come up with some really amazing stuff.

Do you think Twine and its choose-your-own-adventure brethren are good introductions for writers who want to try their hand at game writing?

Absolutely. [In regular stories], you still wind up with the canonical version of the story in the end. Video games, with exceptions, aren’t about that. They’re about player agency. So this is a really low-investment way to play in that space.

This would function as a very brief passage, and took thirty seconds to make.

In a way that short stories or novels couldn’t let you?

Exactly. Because that interactiveness is built in, and you don’t have to worry about graphics or audio or special effects. Twine supports all of those, if you want, but they’re not necessary. So, it really boils down to that most basic player interaction: choice, without all that fluff.

Do you have anything else on your mind before we finish up?

Yeah: one thing I really appreciated about this project was that it let me take some of my hobby reading and casual interest following game development and programming and apply it to something. I recognize that in the scheme of things this is a fairly small project, but to be able to sit down and wrap my head around somebody else’s code and try to optimize and restructure something with a deadline to work against… it’s not like I’m spending 80 hours a week on it, but it was more than I had been to try and finish it. I’d been able to see the things I’d been reading about gamedev, writ small to be sure, but to gain that insight into the process behind it all. And beta testing it, sending new versions to people. I think that last Sunday there I sent three versions in as many hours.

Four. We were trying to track down that bug.

That was bugging me. Pun not intended but accepted. I think we noticed it a couple weeks before, but I convinced myself it didn’t matter, it was only in the test environment and I couldn’t get it to reproduce in mine. I was stressing trying to figure that out, I wasn’t sure I could. But, like I said earlier, persevere, change the code, run it again until you can build your mental model up and run it through.


A good comment to end on. Big thanks to Chad Finch, as well as some of the game’s beta testers, including Jordan Ayala, Grant Wilson, and Tara Sweeney. I hope you learned something new here that you can use. Happy writing, happy game making, and Happy New Year!

Chad Finch is a senior network technician and aspiring programmer with a strong knowledge of game design theory and a work history that gives him insight into the technical side of game development. He loves nature, and can often be found soaking in the forest, somewhere. You can connect with him on his LinkedIn page, linked above.

This interview has been edited down from the original transcription in the interest of time and clarity. None of the substance has been changed.

Featured image courtesy of Negative Space!

C.J. Wilson

C.J. Wilson (formerly Connor D. Johnson) is freelance writer specializing in game writing, journalism, and non-profit work. He's also a writer of character-focused literary fantasy and sci-fi.