This is “String Theory.” That link will bring you to my story and you can play it there as many times as you’d like. I encourage you to try it a few times because it changes, especially as it goes on. Below you’ll find an explanation of what I did and how I did it and why, but don’t read that until after you’ve tried the story out a few times because I’ll reveal some secrets there that would be better experienced for the first time within the story itself. Just know that if things seem weird, they’re supposed to. It isn’t broken even if it seems like it might be. Oh, and please try to play it in Chrome because that’s the only browser that I know works for sure.
What this is
It’s a work of e-lit, the final project for my Digital Humanities class. I wrote everything here myself and figured out how to get Twine, the tool/platform I used to create the story, to do what I wanted it to do. It wasn’t easy! I had initially planned on just remediating a story I had written before (and posted here!), perhaps expanding it a bit in the process, but I quickly realized that my previous story, which was written with a kind of nothing-protagonist and in a very purposefully vague way would not work within the structure of the Twine story. Here I needed a definite protagonist with a real life and ambitions and stuff, he couldn’t be an everyman. He’s still a pretty boring guy, but at least he has some personality. I also made the dog a more integral part of the story, gave him a winking name, and even used him as a POV character in a few passages. That was fun.
The story starts off linearly as Jake grows old and discontented. When he takes his dog out for a walk in the woods behind his apartment he stumbles across a long piece of string which brings him to a line of trees, each of which has a peep-hole in a door which opens onto an alternate version of Jake’s life. The first tree is always the same, but the next three can come in any order. They change minor things, mainly his income level as he sees a very rich version of his house and a very poor one, and one in which his interests have shifted slightly. Like I said, you will visit all three of them, but the order will change depending on the random choices in the program. After those first four doors, the fifth through the fifteenth are any random selection of 9 possible passages. Because of how the numbers work out there, you will see at least one door more than once, and you’re likely to see a few doors multiple times while you miss out on other doors entirely. Your fifteenth door triggers a concrete next passage, one which sees Jake think about what he’s doing and determine to take it further.
After another ten doors, you’ll trigger another concrete passage which has Jake determine that he’ll go on for forever if he needs to. The next few passages are likely to lead to some repeated doors and I hope that some readers will just give up, convinced that the story will just loop on these nine passages for forever. But if they make it to their 30th door, they’ll see that Calvin, the dog, takes matters into his own hand. He rescues Jake from his demented mission and brings him back to the apartment. The end!
How this is
This is the full map of the Twine story. Each box is a different passage except for one, “doors visited” in the upper left corner which keeps track of the number of doors you’ve visited and outputs the phrase “Doors visited: ##” and increments each time it is called.
This is the first use of what Twine calls variables and I use that number to trigger the three concrete events later in the story after the 15th, 25th, and 30th doors. You can see the highlighted box which starts the story and how it progresses through many passages to get you into the rhythm of clicking to move on to the next part of the story. This isn’t a traditional branching narrative, you’ll never have a choice except to go on or leave the story mid-way through, so I decided to have each passage end with the link to the next one. It also helped when I had to write modular bits of the story which needed to work in any order. I could start each passage with a version of “at the next door” and end with a version of “he moved on to the next door”. After the linearity ends, you can visit any of three doors, which will randomly be displayed in the passage which is at the end of the reverse-C at the top of the map. After that first door, yet another random selection of the two remaining doors would happen, which is why it forks again in each of the three initial forks. See, it is a branching story! The branches are just hidden.
As you can hopefully see on that map, each of the last of those 3 random doors leads you to door 5, or the hub of the remainder of the story. I kinda stumbled into a way of displaying a random passage inside another passage, so the contents of door 5 are not really there. They are just the container for an “if” statement which tells the program to output any of the 9 individual doors I wrote so long as the door count isn’t at 15 or 25 or 30. If it is at any of those numbers it will display a specific passage, titled “Introspection,” “Forever,” and “Calvin” respectively. It will also display the “doors visited” passage underneath the randomly or specifically chosen passage which will let the reader know where they are in the story.
The story ends linearly, just as it began. Calvin interjects after readers have proven that they’ll keep going and snaps Jake out of his weird loop, quite literally in terms of the program itself. The penultimate page has Jake grasp the door handle to open into his apartment. This links to the “The End” passage which displays one last door count, again incremented to 32 to account for the door he almost entered back at the woods and his apartment door here and the words “The end”.
There are two things that I haven’t yet talked about yet here as far as the programming goes. The first is that two words or objects get text effects in the story. The first is the string which leads the two to the line of trees, which is always red and has a strike through it to indicate the twine itself and to call attention to the danger it poses. By the end of the story though, it has turned back into a regular piece of string and I did not give it that effect on purpose to indicate that the danger had left thanks to Calvin’s interjection into the story. The other is the piece of ice which makes the peep-hole that Jake peers through before he enters each door. I made that a kind of icy blue color and I wanted it to actually shiver but it wasn’t working, so I condensed the text there to at least give the impression of a kind of huddled up word trying to keep warm.
The second is “Door 13” which I conceived of as a kind of Holodeck experience. There is an entirely empty room which transforms into one of two pretty extreme situations (a jungle attack and a space explosion) randomly. It’s hard to demonstrate where these two experiences are separated in the program itself, but I’ve circled the comma which separates one version of the passage from the other. I used the same “either” function as I did in “Door 5” to randomly display a passage but this time I knew I wanted it to start and end in the same way so I knew I should keep the two passages that will get swapped out within the actual passage itself rather than writing them within their own boxes and just calling them out on their own. It was pretty fun to think of this idea and implement it. I hope that people notice what is happening there and see the two different versions of the room for themselves!
Why this is
I’ve already explained most of my decision making process up there, but here I’ll cover some loose ends. Firstly, my motivating force here was first to do a DH assignment, a fun assignment, but an assignment nonetheless. Because I was doing schoolwork, technically speaking, I knew I had to push myself a little more than I might have if I were just messing around. Figuring out the text effects, for example, was surprisingly difficult and was the first big hurdle I had to face. Then I knew that I wanted to demonstrate at least two kinds of randomized storytelling, so I had the more structured bit early on where the order of the three passages might change but you were forced to see each of the passages. Later, I experimented with having the passages be more random, which would inevitably lead to repeated passages appearing in the story. This would happen even if I had more passages than I had doors to open by the end of the story (30, remember, is the trigger for the end of the story, so there are around 23 passages which appear totally randomly from a pool of 9 written passages) which I don’t. And that’s where the other end of the school assignment bit comes in. If I had my druthers and more creativity in my bones I would write 50 (or more!) passages to have the experience be even more varied for each reader. That would certainly reward people’s efforts to read the story a few times, and it would make repeats less likely (though not unlikely or impossible given how random selection works). Heck, if I wasn’t going slightly crazy trying to finish this whole thing before tomorrow’s deadline I would write 5 more passages just to get some more stuff in there. But it’s also nice to have to finish. The story lends itself to the desire to keep improving, but that’s also kind of the point. Sometimes it’s ok to be done.
Perhaps a better way of changing things up would be to use the “either” command how I used it in the Holodeck tree. I could mix up some wording in each passage to say the same thing in slightly different ways. That way each repeated passage would have a chance to be a bit different every time you see it. This fix is both easy and daunting, because while the programming and writing aspects of it wouldn’t be too difficult to implement, the sheer amount of text already there is more than it seems and writing slightly different versions of it would only lead to a kind of crazy multiplication of effort. Certainly a version two of this project would have that kind of mutability in it, and now that I know how to do it I could implement it from the get go rather than go back and edit it in later.
Another thing I wanted to do but didn’t have the knowhow nor the time to figure it out was changing the look of the story more. This is pretty much the standard look of Twine’s most popular version, and only the text effects really change anything. See “Even Cowgirls Bleed” for a heavily edited CSS which totally changes what is still “just” a Twine story. I have visions of a background picture which appears once you get to the trees and some fancier things. But also, text on a page has been pretty good for writers throughout history. It’s not terrible to let a reader imagine their version of a location or what a character looks like without me imposing my own vision. Besides, I’m not sure a picture exists that would fit the story as written, and I don’t know where to go to find an infinite line of trees to take it myself. And I certainly don’t have the artistic talent to draw or paint one myself! Perhaps this is where the DH collaborative spirit could come in. Well, next time.
The last thing I want to do is share a bit of backstory which might explain what I was going for, if that matters to you. I wrote the first, vague version of this story a few years back when several of my friends and I were wandering around the post-college world, free of any real ambitions beyond a vague (aha!) sense of letting our lives drift away and a paralyzing sense that there were so many things that we could be doing so anything we did decide to do would mean giving up the possibility of something better. I noticed both within myself and my friends this strange paradoxical view and wanted to write myself a way out of it. I’m not sure I achieved that end either in that early version, which ends very differently than this one does, or this one, but I think this is a better version of the story. I opened myself up a bit more, having recently taken a big, concrete step towards a definite future when I entered grad school this semester, and examined some other identity questions a bit through this writing process. It was fruitful to examine myself as I wrote for Jake, who is not me but a conglomeration of a bunch of people and ideas.
And we’ll end with the dog, who readers familiar with Italian magical realists might recognize as the inspiration for this kind of story. Italo Calvino wrote a bunch of stories called Cosmicomics which took scientific ideas and weaved fantastic fairy tales and hilarious sci-fi stories out of serious scientific principles. I wanted to participate in the same kind of science-kickstarted storytelling, so I settled on the multiple universe idea that, at least at some point, was a part of string theory to my rudimentary understanding. It opened the possibility of an infinite number of worlds and here, finally, I was able to feint at that idea with the Twine platform allowing both the possibility of randomized storytelling and the ability to use that storytelling to touch on some science-y ideas like the fact that there would be a bunch of universes where nothing noticeable is different from Jake’s own universe, which would also be true for any of the noticeably different universes as well. So the repeated passages would have some grounding in scientific theory, it’s not just me being frustrating!
Ok, I think 2.5K words about this project is enough, don’t you? Finally, if you would like to see in more detail how this project was put together, you can download the full HTML file here and open it with your own (free!) copy of Twine. It’s a pretty fun program to mess around in and I’m glad I was pushed into doing it by my professors. I hope it did something for you, too!