Twine: Some Impressions

For someone who likes both writing and programming, it took me a long time to try out interactive fiction. See, I love prose fiction, and I enjoy narrative-heavy video games (such as Gone Home or Heavy Rain), but in-between was a no-man’s land. I never cared for text-based adventure games, and visual novels (not to be confused with graphic novels) didn’t have much appeal.

So it was with some reluctance that I tried out Twine. It’s designed to mimic the “choose your own adventure” books of yesteryear, using HTML as a compile target. Creating something like this had tickled my brain occasionally, but I didn’t want to take the time to build an entire engine from scratch. Luckily, someone had already done that.

It’s very appealing in some ways. The editor is reminiscent of Scrivener, with a blueprint-esque background and a UML-like structure. Each project is separated into “passages,” distinct chunks of prose mixed with code, that the user navigates to finish the story. In truth, it’s not much different than using PHP or a similar server-side scripting language, except the execution all takes place within the browser.

To try it out, I adapted The Lady, or the Tiger? by Frank R. Stockton. I took some liberties: I updated the setting to 1st-century Rome, changed the mad king into an unnamed Emperor, and made more explicit ending scenarios. I’ve linked to my version at the end of this post. Here’s the story structure, as displayed in Twine’s story editor mode:

Twine Screenshot

The plot strands aren’t very divergent, but there’s only one real choice in this story: pick door 1, door 2, or (and this I added to the original) beg for mercy. It’s just enough story to get a feel for what Twine’s capable of, and to discover some stumbling blocks along the way.

Here’s where it gets kind of messy.

I wrote my adaptation in Twine 2, the newest version. However, the interactive fiction community appears to prefer the older version of Twine. Nearly every tutorial I’ve found on Twine is for 1.x, not 2.x. Many of the entries for TwinyJam, a contest to create a 300-word Twine story, were written in 1.x. I had to figure out a lot of Twine 2’s little gotchas through trial and error, relying on a foreshortened readme that assumes the user already knows Twine 1.

Twine 2 has some advantages, such as being entirely platform-agnostic and browser-hosted. There are multiple rendering engines, which can be added or swapped out, depending on the writer’s programming preference. (I stuck with Harlowe, the default renderer.) There’s more flexibility in determining start and end points, and there are built-in fields for custom CSS and JavaScript.

However, Twine 1.x has some serious advantages, from what I can tell. Besides the numerous tutorials based on it, you can also include embedded images stored in your project file, which would make it much more versatile use. For instance, you could do visual novel-style stories, or make headers with background images that set the mood for each scene. Twine 2 also relies on the browser’s internal cache for saving projects, although it has a manual file archive utility. If you have to delete your browser’s data (or do so accidentally), and if you didn’t make a recent archive of your stories, you’re SOL. There’s also a more descriptive sidebar in published stories, negating the need for a title screen. (It’s possible there’s a way to make this in Twine 2, but I haven’t figured it out yet.)

I’m loathe to create anything longer in Twine until I resolve some of these issues. I shouldn’t need to be a manual process to auto-save stories to my local filesystem. It would be great if there were an image macro included in Harlowe by default, even if it just links to remote files that I have to upload manually. (I’m a web programmer; it’s not difficult to FTP a .jpg to a server.) It’d be nice if there were good documentation, not just a cursory overview of changes from the last version, which I’ve never used.

Door 1, or door 2? Twine 1, or Twine 2? Or is there a third option?

The Lady or the Tiger