Whenever I release a text adventure through my Patreon, I also annotate the source text from one of my earlier games as a gift for my top-tier Patreoneers. But these secret annotations can only be kept a secret for so long. One of my top-tier Patreoneers (the same guy who requested that I publicly release the source for The Statue Got Me High) recently asked me about releasing some more annotations. I picked a game with some code that I remain mostly unashamed of even three years after writing it: WINTER STORM DRACO.
I hope you'll give the game a look before you check out this code. Although it's billed as "an interactive documentary" it's far from dry (and arguably not even that educational). It's a very linear game, so the source is laid out to describe the story more or less in narrative sequence.
The more interesting technical features of WINTER STORM DRACO begin with a sequence where normal compass-based text-adventure-style directional movement is suspended to recreate the experience of wandering lost in the woods. This is resolved with a puzzle where the player must construct a compass—a process I attempted to make as painless as possible. Later, there's an action sequence incorporating a fencing-like combat system. The final act of the game uses a few little mechanical tricks to add to the scene's surreality.
Like I said, I feel more or less proud of how I implemented this game—much more so than I do of the Statue Got Me High source! So I won't ask you to actively avoid learning from my work. This is not to say that it's perfect, but...
Anyway:
"Winter Storm Draco"
by Ryan Veeder
The Annotated Source Code Text
Volume 0 - Introduction to the Annotated Source Code Text
[% Comments in brackets and italics, beginning with a % for some reason, are my post-release annotations—some from the 2016 release of this source text to my top-tier Patreon backers, and some from the 2018 general release. Comments in brackets but not in italics are my original comments to the code, which I didn't necessarily intend to publish at the time. The division headings are all original to the source, except for the one above obviously.
On September 2nd, 2015, I was thinking about the storm Winter Storm Draco and what a great name "Winter Storm Draco" was, and I decided to steal that name for use as the title of a game. The game was released on September 28th, got some post-release bug fixes applied the same day, and apparently hasn't required any updates since. I will admit to being PRETTY DANG PROUD of putting this game together in 26 days.
The game's introduction gets into the basics of the source material, which is of course a real storm that really was named "Draco" by The Weather Channel and really did impact Iowa from around the 19th to the 21st of December, 2012. What the game doesn't get into as much is the huge backlash The Weather Channel got for its storm naming practices, not only from the National Weather Service but from everybody in general.
People were so mad that TWC had deigned to call storms by names, and it ticked me off so much that people felt compelled to be so negative about it. I never entertained any illusions that the storm naming system was anything but a publicity stunt, or that it ever actually helped anybody, but it's fun. I will never be convinced that there's anything actually detrimental about TWC's practices, just as I will never be convinced that anybody who opposes them has a heart beating in their rime-encrusted chest.
Besides my defense of fun, there is a philosophical-linguistic aspect to this naming hullabaloo, alluded to somewhat in the introduction. My strong feelings in this general area informed the design of rest of the game to a certain extent, but I couldn't express them succinctly or sensibly right here.
The topography of the game is based on Iowa City, specifically the area where I was living while in grad school, and the player character is perhaps very very loosely autobiographical. When the storm was really happening, however, I was back home in Waterloo. I made a video at the time intended to introduce the concept of snow to my many internet friends who were up to that point ignorant of the subject.
This didactic impulse, based on the understanding that plenty of people have never seen a snowstorm, influenced the game a lot. It's billed as a "documentary," which is of course is mostly a joke, as players quickly learn. But I really did want the game to convey accurately, if impressionistically, the experience of living through one of these blizzards.
At some point in either design or development I realized that the game I was making was very similar to (the fun parts of) Edgar Allan Poe's novel The Narrative of Arthur Gordon Pym of Nantucket. After this influence became conscious, I decided to play it up as much as possible, partly because that book is so great and partly because in this way I'd ensure that the similarities read more as "homage" than "ripoff."
I had previously written an "adaptation" of Pym insofar as I tried to interactivize the book from memory over the course of a couple hours spent in a hotel room on Maui. The resultant work was not one for the ages; it was supposed to entertain me more than anybody else, but eventually it was discovered by Chandler Michael Groover, a big fan of Winter Storm Draco. He added it to IFDB and penned a quick review saying Draco "was built with Arthur Gordon Pym as its thematic foundation. The references to Pym are so central in Draco that if you extracted them, Draco would vanish."
I will try to point out all the references to Pym in these annotations, and you may judge for yourself whether without them Draco would vanish. But I have to contest the former point: The thematic foundation of this game is really the potency of the name WINTER STORM DRACO.
RCV
Waterloo
2016
and also
2018]
The story headline is "An interactive documentary".
Volume 1 - Boring
Use American dialect and serial comma.
Release along with cover art and an interpreter.
Book 1 - Out of World
Abouting is an action out of world. Understand "about" and "credits" as abouting.
Carry out abouting:
say "[italic type]Hi! Thank you for checking out my interactive documentary about Winter Storm Draco![paragraph break][paragraph break]This interactive documentary was supported by my many fabulous Patreon supporters, and I list them to you here in the order in which Patreon sees fit to list them to me: Thomas Bøvith, Janice Eisen, Jeff Lindsay, Stuart Lloyd, Jason Baldus, Maiko Nathalie, Jacques Frechet, Zachary Hodgens, David Simon, Emily Short, Doug Orleans, Steven McKinney, Jason McIntosh, Matthew Zimmermann, Derek Sotak, Carl Muckenhoupt, Alan DeNiro, Rich Cheng, Hamish McIntyre, Jenni Polodna, Juhana Leinonen. At least one person is not in Patreon's list. There are an odd number in this list and there are an even number of supporters. Something screwy is going on.[paragraph break]TESTERS: Emily Boegheim, Janice Eisen, Zachary Hodgens, Jason McIntosh, Hamish McIntyre, Maiko Nathalie, Jenni Polodna, and Emily Short, plus one post-release bug was discovered independently by Hanon Ondricek and Carter Sande.[paragraph break]Some elements of this interactive documentary were furnished by/stolen from the Weather Channel, Edgar Allan Poe, and my dad. To learn more about Winter Storm Draco, replay or continue playing this interactive documentary[roman type]."
[% The elements contributed by my dad consist of selected grave marker inscriptions, which we will see much later.]
Book 2 - Appearance
Include (-
Replace PrintInferredCommand;
[ PrintInferredCommand; ];
-) before "Parser.i6t".
[% This is some Inform 6 code that I think just elides some extraneous disambiguation text—an unhappy necessity arising from my decision to implement some identical objects. I don't know for sure, though, because I don't speak Inform 6. This bit of code was probably contributed by Emily Boegheim.]
Include basic screen effects by emily short.
To say i:
say "[italic type]"
To say /i:
say "[roman type]"
[% This was an attempt to let myself write in Inform 7 with BBCode syntax. The sad fact is that my fingers are completely used to typing stuff like [italic type] and [fixed letter spacing] so I never end up using such shortcuts.]
To say f:
say "[fixed letter spacing]";
Rule for constructing the status line:
center "[player status]" at row 1;
rule succeeds.
To say player status:
if started is false:
rule succeeds;
otherwise:
say "Location: [location] ||| Visibility: [visibility-text]"
Started is a truth state that varies.
[% In Inform 7, you declare a boolean as "a truth state that varies," and if there's a shorter way of doing it you better tell me right the heck now. This business with a "started" boolean just prevents the Location/Visibility status bar from showing up until after the introductory text crawl.]
visibility-text is text that varies.
Book 3 - Response Rejiggering
Parser error internal rule response (H) is "You can't use multiple objects with that verb. I'm sorry, I know this is stupid."
[% One tester got this response and added a note that I should go ahead and fix whatever error I was working around. I thought I had been pretty clear. I guess next time the error response will be "I tried to make this work, but I'm not good enough."]
Book 4 - Verbs
Section 1 - Examining
A thing can be exed.
Before examining something:
now the noun is exed.
[% It's often useful to check whether the player has already bothered to look at something. I think the default I7 syntax for this is "If we have examined..." but I learned about this too late and now I like my dumb "workaround" better.]
Section 2 - Taking
Instead of taking something scenery, say "That is frozen in place."
[% The default message is "That is fixed in place." But I am so funny, I changed it!!!]
Section 3 - Inserting
Understand "pour [something] in [something]" as inserting it into.
Understand "pour [something] into [something]" as inserting it into.
Understand "fill [something] with [something]" as inserting it into (with nouns reversed).
Understand "push [something] into [something]" as inserting it into.
Understand "push [something] in [something]" as inserting it into.
Section 4 - Touching
To feel is a verb.
Instead of touching something, say "[The noun] [feel] cold. Cold like a broken promise."
[% Here's a big secret: I've used this "Cold like a broken promise" sentence in every single one of my games. Or, I'm pretty sure I have. Usually it only applies to touching one thing. See if you can figure out what that thing is in all my games!!!
The syntax "