The middle beast, a tremor of trepidation in his words, said, “You aren’t from a dark planet, are you?”

“No.” Calvin shook his head firmly, though the beast couldn’t se him. “We’re–we’re shadowed. But we’re fighting the shadow.”

(Madeleine L’Engle, A Wrinkle in Time)

Twine 2.1.1 released

This was originally posted at my Patreon.

Here’s what’s inside!

  • Thanks to contributions by users like you™, Twine now speaks German and Czech, and speaks Italian better
  • The SugarCube story format has been updated to 2.14.0
  • The Harlowe story formats have been fixed so that syntax highlighting while editing passages works correctly again
  • Using Twine on Internet Explorer 11 and mobile browsers has been improved (though there’s still room for improvement on iOS)
  • A bug where renaming passages with some punctuation in their names didn’t update incoming links correctly has been fixed

Defaults, standards, and Harlowe

For this post, I’m going to steal an excellent idea Emily Short had and answer a question Jeremiah McCall, a historian who maintains Gaming the Past, asked me over email with a blog post. He wrote:

Since [the story format] Harlowe is the default [in Twine 2], I am using Harlowe and I understand that SugarCube [another story format bundled with Twine 2] is a bridge from Twine 1.x.  I have scoured the net for a description of the strengths of Harlowe and why it is now default, but I don’t seem to be able to find anything. The few comparisons of Harlowe and SugarCube seem to favor the latter — though here and there are comments that Harlowe is more robust. I’m guessing (and hoping) that Harlowe will continue to develop and continue to be the default, but am I right in that? There seems to be a fair amount of resistance. Since I’m teaching Harlowe to others in hopes they will continue to use it, I’d be grateful for a quick insight. Right now I am under the vague impression that you and Mr. Arnott intend for Harlowe to be the standard from here on. Is that true and is there a quick reason why?

A quick explanation: a story format is essentially a runtime engine for works built in Twine. It takes the passages created in Twine and displays them in a Web browser. I intended the name ‘story format’ to a bit friendlier than ‘engine,’ and formats in Twine 1 were indeed more about formatting than behavior. In Twine 2, the situation has become a bit more complex, and thus the term ‘story format’ a bit dicier. Instead of choosing colors and whether clicking a link causes the story to expand or instead replace the existing text with new text, changing story formats in Twine 2 changes the entire approach an author takes to interactivity.

There are three story formats bundled with Twine 2. People tend to think of Twine and its story formats as a monolithic development effort, but that isn’t the case — each one is developed by different people on a volunteer basis. The formats are:

  • SugarCube, maintained by Thomas Michael Edwards. As Jeremiah alludes to, this is also available for Twine 1, is very mature, and has a ton of documentation, official and otherwise.
  • Harlowe, maintained by Leon Arnott. In my opinion, it’s a daring re-imagining of how to add interactivity to text that leverages a generous spoonful of functional programming. It’s a lot younger than SugarCube, which means that there isn’t as much documentation on how to do stuff with it.
  • Snowman, maintained by me. It does the absolute minimum in terms of functionality, instead leaving that to the stalwart libraries jQuery and Underscore. It’s great if you already know JavaScript and CSS, or are interested in learning them. If you aren’t, it’s a terrible choice.

(By the way, anyone can create a story format for Twine, and adding one is as easy as copying and pasting a URL. I really enjoy Illume, for example, when proofing work.)

Anyway, Harlowe is the default story format in Twine 2. I decided to make it the default for Twine 2 not only because I had, and continue to have confidence in Leon’s skills and vision, but I also saw Twine 2 as a chance to re-examine the assumptions Twine 1 made.

There are two things in particular that I think Harlowe gets right:

  • It’s succinct and readable. I think Leon has worked out a very simple syntax for code that doesn’t interfere with the flow of reading passage text.
  • It allows you to separate code from text. Harlowe allows you to mark a section of text as a “hook” which then can have code applied to it. This means that you can keep text and code compartmentalized — which I find really handy, because the mindset I bring to writing and editing prose is vastly different from the one I bring to code.

Harlowe may be the default, but in my opinion, it’s not a standard. I say that because there is no standard. I realize this makes Twine a little bit confusing; a system like Undum has a distinct, singular look and feel. But right now, I think the compromise is worth it. SugarCube, Harlowe, and Snowman serve different audiences, which means that Twine as a whole can be useful to that many more people.

Twine 2.1.0 is released

This was originally posted at my Patreon.

At long last! I’m pretty excited about letting people at it. We spent a lot of time in beta, but I’m hoping that investment will pay off.

You can download it from the home page. If you’re upgrading, please read the release notes carefully. A lot has changed. I think you will like what’s new and I’ve tested the upgrade path as best as I could — but I still worry that there will be bumps in the road.

Two things you might enjoy: what Birdland, one of my favorite Twine works, looks like in the new version , and (if you are a webdev nerd) how technology choices have changed between 2.0 and 2.1.

Life comes at you pretty fast in the frontend world

Putting the finishing touches on the Twine release tonight, I realized we have basically changed everything in our quote-unquote stack:

Twine 2.0.0 (2014) Twine 2.1.0 (2017)
ES5 ES6 + Babel
Grunt npm scripts
Backbone + Marionette Vue + vue-router + Vuex
Browserify Webpack
Selenium Karma + Sinon + Chai

Still Alive But On Borrowed Time: Font Awesome, jQuery, SVG.js
Still Alive, Not Going Anywhere: CodeMirror, Jed, JSZip, Underscore

The prospect of linking all of these things is overwhelming, so, uh, if you don’t know what I’m talking about, try npm? And honestly, each row could be a post in itself, but I already have a blog backlog– so…

Near miss

In a recent IFTF blog post, I mentioned I hoped to get Twine 2.1.0 out by the end of the calendar year. Well… that hasn’t happened, obviously. The main cause was me coming down with two minor illnesses nearly back-to-back over the winter break — one head- and throat-based, one stomach-based. So most of my free time ended up being allocated to lying in bed with a fever instead of, you know, actual fun stuff.

We’re still in pretty good shape. There are a few bugs that need addressing before the release, but not too too many. I’m thinking mid- to late-January right now as a revised date.

In sort of related news, I think I’m now in good enough shape that I’ll still be able to do my presentation on gamebook history at MAGFest this year (it’ll be Thursday 1/5 at 4:30 PM). This is a reprise of the presentation I did last year with some added information here and there, so if you missed it last year or this will be your first year at MAGFest, consider stopping by. It’s not a super Twine-focused presentation, but I do think people into Twine would find it interesting, and I’m always happy to talk to folks afterwards.

Murder at Colfax Manor

I found this gamebook because not only is it one of the few modern-day gamebooks that has its own page on TVTropes, but said page is linked directly from the TVTropes page on the entire genre. Clearly someone’s a fan.

You can download this as a PDF for free, but I shelled out the $4 for a paper copy because the angel on one shoulder whispered: support the author and the genre and the devil on the other whispered: it’s really annoying to flip through the pages in a software reader. It’s one of those gamebooks, like the Fighting Fantasy or the Lone Wolf series, where each passage is only about a paragraph long, so you’re constantly changing pages. Even reading on an iPad, where you can flip through pages rapidly, felt awkward.

S. C. Cunningham, the author of Colefax Manor, does something a little bit odd with their book. Perhaps 80% of it, where you-the-protagonist explores a manor in the English countryside in the wake of a murder, is nearly static. There are characters — suspects, I suppose — who can be questioned but never move from their initial location or take any meaningful action at all. The butler is always polishing a bust in the library; the maid is always seated on a bed in the service hall; the gamekeeper is always napping in the stables. There are boxes you tick in your detective’s notebook that keep track of various clues you’ve found, similar to the approach the Sherlock Holmes gamebooks take, but they serve almost exclusively to unlock dialogue.

It’s impossible, so far as I know, to make anyone confess. Instead, like the Sherlock Holmes board game, I think you’re meant to put together the means/motive/opportunity in your mind and then call back to headquarters with your solution, and you find out whether your case is strongly-supported.

It feels a little like a thinly-implemented parser game, which in my opinion plays against the strengths of the gamebook genre. A gamebook will never be able to match the simulation possible in a parser game, so why not lean hard into plot and character?

There is also a finale — perhaps one could regard it as the Best Ending — where you can take a more active role in resolving the murder mystery. It drops the investigative mood for more of a straight adventure feel, but it still feels parserlike — the main decisions to make are avoiding instant-kill situations (which are adequately clued) and how long of a fuse to use on a bomb (the answer to which you can guess right now).

Despite the shortcomings I found in it, I would recommend Colefax Manor to someone designing choice-based interactive fiction, particularly if they’re working in the gamebook genre. To me, it represents a particular school of thought of design; one I don’t agree with, but one that helped bring my own beliefs into sharper relief.

Comments on

After the election, I began taking a break from Twitter on my personal account.It was just — a bit much, is the simplest way to put it. I still read and post on @twinethreads because apart from poor souls trying to get tech support in 140 characters and a few random ranters, it’s been a nice experience. Seeing photos like this makes my heart grow two sizes.

In the meantime, I’m trying to blog more. Blogs still make sense to me too. Obviously, this site has not exactly turned into a wellspring of posts, but I’m going to keep trying.

I initially left comments off when I started this blog because, as everyone knows, comments are evil. But since I have cut out the possibility of a social media conversation for now, I’m going to try them out.