Allegro in C major

This is a much longer piece than the ones I’ve written about so far — it’s a full three minutes and twenty-three seconds, so there’s a lot of time for it to develop themes and stuff. It was also apparently the first piece in the Nannerl Notenbuch inscribed by young Wolfgang, as Wikipedia so eloquently puts it.

The Allegro is eloquent too: it has a great sort of arpeggio bass line going that becomes a counterpoint to the melody a little further on, and they’re kind of like this conversation between people, echoing each other, interrupting, backtracking to earlier thoughts, like good friends. I think this is the first piece of Mozart’s that I really like. I’ve listened to it now about six times, and it has yet to get old.

There’s also some interesting bits of tension in here, though it’s not held for any length of time. At least at eight years of age, Mozart doesn’t seem to have been a fan of long periods of discomfort.

Shall it stop now?

My brother’s robot was really starting to get on my nerves. Shall it stop now? it kept asking, as it grabbed my wrist in its pincers and made me hit myself. Jamie must have been experimenting with natural language generation again.

Jamie, can you get this robot off me? I yelled in the general direction of his bedroom. I was trying to do homework at the dining room table before dinner, but it was hard with only the use of one hand, and the constant, metronomic slapping was, like I said, really getting on my nerves.

Finally, Jamie slinked out of his bedroom. He was all curly hair and bottle-cap glasses, not that anyone would catch my reference any more. I was the only person I knew who read those old, mid-twentieth-century kids’ books from the library, with tattered covers and ripped pages. Sometimes I had to look up scans of missing pages on the libronet, even though that didn’t always work, either: if the scans were of a different edition and were, themselves, missing pages, I might miss the part of the story that overlapped voids. Anyway, Jamie was fiddling with something in the robot’s access panel on the back of its neck. It kept slapping me, but changed what it was saying.

Shall it stop now?

Now it stops, yes?

Will you be stopping?

Stopping is an action?

You are stopping?

I can’t make it stop asking questions, sighed Jamie, under his breath. He wasn’t thinking of me at all.

Just make it let go of my hand! I slapped him on the arm with my non-robotted hand.

He looked at me, surprised I was even there. Oh, right. Haha.

He flipped a couple of switches and pulled something (Jamie never made things easy), and the robot stopped hitting me.

Finally, I said, and tried to pull my hand away. It wouldn’t move. The fingers were still wrapped, vise-like, around my wrist.

Make it let go! I was panicking a little bit now. Was the robot’s hand tightening, or was it my imagination?

Working on it — Jamie pulled a foldable keyboard from out of his pocket and plugged it into the robot’s access panel. He started typing.

Why don’t you just have an off switch? I asked. This thing is really starting to hurt!

Just relax, Jamie said. He seemed totally unfazed that his robot was about to break my wrist. I grabbed its fist in my hand, tried to pry its fingers open. They wouldn’t budge. I couldn’t get the hand loose —

With a puff of air, the robot’s grip loosened. I slipped my wrist from its metal grasp and rubbed it. What is wrong with you?! I screamed, pushing Jamie.

I’m sorry! he said. It was just the hydraulic controller on the fritz again —

Again? I yelled. This happened before?!

Jamie stammered. Well —

Forget it! I never want to see this thing again! I stood up and stormed out of the room, shoving the robot’s head as I did so. I threw the door to my room open, stepped inside. As I was about to slam it I looked back at the kitchen, at Jamie, fussing with the robot’s neck panel, muttering to himself. The robot’s red eyes stared at me as I closed my door.

Breakfast at the house

I haven’t eaten breakfast in days. Waffles no longer hold
an appeal for my tongue. Cereal and milk, old favorites,
have betrayed my sensibilities and left my mouth dry. I eat
lunch now, and dinner, but breakfast at neither of them.
I’m not sure how to feel about this development, if my body
is changing underneath me or if my mind is, above me.
I want to say, this is how the mornings go from here on out.
I want to cry. I see a desert before me stretching
as far as it can, to the stormclouds in the south. There is
no way out. The only vehicle was black coffee, toast,
scrambled eggs, a glass of orange juice: and it’s broken down.

I worry.

The storm is coming, and I worry. Even though it’s just a Category 1, and it’ll be okay, really, I worry. I wonder if worrying is my default state of being. I wonder if I’ll stop worrying. Do I worry about it? Probably.

Barry is slower than they thought he’d be. He’s strolling up to us leisurely, but of course all hurricanes are leisurely, aren’t they? I’ve never met one before, I just have second-hand accounts.

We woke up this morning and it wasn’t raining. It’s started now, but it’s still not too bad. The TV is talking about it in Ascension, in Morgan City, all south of here. It’s coming. We have nothing to do but wait. And worry.

Am I becoming a Louisianan? Am I learning how to live in this halfway house of land and gulf, this waystation between cultures and languages and times? I worry I don’t get it, that I never will, that I’ll never belong here and that I’ve given up my citizenship of home.

I worry that if the hurricane blows it all away nothing will have changed.

Swans and geese

They’ve invaded the liminal spaces, the ones
between everything, they’re stuffing the cracks,
they’re filling up alleyways, they’ve roosted
between automobiles, no one can move or even
think with all of them everywhere, someone asked
what’s the difference, anyway, between swans
and geese? but nobody paid attention, no one
really knew, and besides, who cared, it’s not like
you could tell them apart, unless maybe you
tore them apart, peered deep within their bodies
to the cores of their beings, saw the geese within
the swans, the swans within the geese, sitting
on their cell walls, in the viscera between
their stomachs and their crops, their wings and
their feathers, and what good would it do, you still
wouldn’t be able to move or think or anything,
they’d still be everywhere, in fact there’d be more
divisions for them to squeeze between, their feathery
bodies puffing up in the differences, their honks sounding
out the hours of the night, their feet in the water,
their wings in the air, flapping needlessly, tirelessly
beating out the seconds to the end of everything, or
what, we know, would end up being the beginning
of everything else, waiting somewhere to actually begin.

The heavens that compose them

Tonight, the birds turn into stars.
They waver in the sky like candles
in the second-story window. Tonight,
the leaves shiver, wondering what
they’re in for. Behind the candle,
behind the curtain, over the table, leaning
on the refrigerator: you commune
with your phone, a new rite. You open
a conduit between the heavens and
your body. You listen to vibrations
circling the earth seven times a second,
bristling with metal shavings under
the fridge’s cooling coil. So religion
is made and lived, so the faithful drink
of the heavens that compose them, so
the birds, the stars, the leaves, the table,
the door, and you are all of one substance.

Crocodiles

Often confused for their cousins the alligators
they are not the same they are the svelter relative
they have large teeth yes which is similar
but they do not live in America like alligators
do but rather they live elsewhere how obvious is it
I ask you now how obvious is it I did no research
whatsoever about crocodiles before now and in fact
am still doing no research how clear to your mind
is the fact that crocodiles are to mine as muddy
as the mud they probably reside in probably lie in
all day long or maybe at night probably they lay
eggs and surely they care for them though again
I can’t be sure can you can anyone for that matter
who are we to assume we know the inner workings
of crocodiles if we can’t even know our fellow
human beings as we walk on the earth I mean our
motives are at least understandable most of the time
to each other but crocodiles are enigmas mysteries
fall through their mouths and never emerge again

Writing "Vault guard," a short interactive fiction story

Over the weekend, I wrote Vault guard, a short interactive fiction story about a vault, its guard, a man in black, a sword, a lunch, a tavern, and a treasure. I’ve never written anything in the IF genre before, so I wasn’t aware of the tooling that’s availableor rather, I should say I was aware, but couldn’t be bothered to install it and figure it out for a quick one-day authoring session, which includes Twine and others. This post, then, is about how I authored Vault guard in plain HTMLerr, Markdown — but it converted to HTML, and made it work as an IF story.

Light on <details>

The first thing I thought to try was to use HTML5’s <details> element, which is for text that can optionally show, well, details:

Like this (click me!) You can see the details of this section here. It can include arbitrary block-level content, including other details.

When I’m writing this post, here’s what I writeI’ll be adding little code snippets throughout this post, but you can also view the source for this and all the pages in this site by clicking the source link on the left sidebar:

I thought I could nest <details> within each other to allow the reader to branch the narrative, and it would’ve worked, except for two things:

  1. It was too hard to see which branches had been chosen, which hadn’t, and which were yet to be chosen
  2. There was no way to build a more complex relationship of branches — nesting <details> only allows for a descendent-tree-type structure, where each branch has one and only one parent, whereas true IF story-branches are able to have multiple parents

So I realized that I couldn’t use the <details> element for my storyI still haven’t been able to find a good use for this element, by the way, even though it seems like it’d be extremely useful..

Remembering pandoc

Then I remembered that I write this blog using Hakyll, which uses Pandoc under the hood to convert Markdownand a ton of other markup languages, to; it’s great software and I highly recommend it to HTML. And the great thing about Pandoc is that it has an option (--section-divs) to wrap each section (delineated by a heading) in an HTML <section> tag — and give those <section>s custom IDs and classes!

Remembering CSS

I also remembered that CSS has (with decent adoption) the :target pseudoclass, which denotes

a unique element (the target element) with an id matching the URL’s fragment. Mozilla Development Network

The upshot is that you can style elements that are explicitly linked to differently than other elements on the page, like having them displayed instead of hidden.

Working within the system

Hakyll builds a website by mapping a set of input files to a set of output files, transforming them in a variety of ways, such as running them through Pandoc and placing the generated HTML in templates. Pandoc’s Markdown has a great feature where the author can just include vanilla HTML in a file, and it’ll be passed through verbatim to the underlying templatevanilla Markdown allows this as well. So I just included a few inline CSS styles at the beginning of my filein my source, I minimized these little blocks to save space, and if I write any more, I’ll add them to my templates in Hakyll:

See, Pandoc, when run with --section-divs, not only gives the ID of the header as the ID of the section — it also sets each section’s class to the level of the header (i.e., a <h1> header will be class="level1", etc.). So the first two rules of CSS above first hide all level-two headers and their respective content, and then show the level-two sections that have been linked to.

Start button

I realized I needed a way to show the first section of the story, since it would be hidden unless linked to directly — and most URLs would just link to the bare page, not directly to the first fragment. So I set up a start button, a great big link that says BEGIN, linking to the firstThe link goes to the full page, instead of just the fragment, so that if someone clicks BEGIN from my index page, they won’t mess up the rest of the index. segmentThis method takes advantage of Pandoc’s fenced-div syntax. You could also use plain HTML.:

And I styled that button, including this with the other style at the top of the page:

Of course, now I had a new problem: a great big BEGIN link at the top of every page. Unfortunately, I couldn’t figure out a way to hide it automatically by just using CSS, so I had to use a bit of javascript:

Now my game could be played. There was just one more step: I had to write the damn thing!

Writing

WARNING: Spoilers ahead! Play the game first, if you don’t want to know how it ends before you do!

I began Vault guard with the title. It’s post number 6 of my year-long Moon photos series, where I pull a random title from a list of 400 AI-generated titles every day. I was pondering how to write something called Vault guard and I realized it could be an interesting IF story. So I began sketching out the (easier) tech-related bits, above, while writing the bare minimum of the story to test them on. I wrote the first two or three sections that way.

Soon, I realized that I’d need to actually sketch out, visually, the paths the story could take, or I’d get hopelessly lost in the branches. So I tore out a piece of paper and sketched what I had, and added where I could go.

A hand-drawn outline of the plot of “Vault guard”
A hand-drawn outline of the plot of Vault guard

Writing from the outline was much easier than trying to hold everything in my head (though I surprised myself with just how much did fit in there).

The rest of the story flowed from there, and the writing of it was much like the writing of a linear narrative.

Challenges

There were two major differences, and so challenges, of writing this story as opposed to a traditional linear one: I had to make sure that loop-backs weren’t jarring and that all the branches closed.

For an example of the first challenge, there are a few Outside sections, where our Vault guard is just outside the antechamber to the Vault. They’re all pretty similar, but I had to make sure they would all work from wherever the reader could come to them from. If the reader had just gone outside after yielding to the man in black, for example, they shouldn’t be able to go back in and know, at least, that he’d be dead from the trap. Or if they met him outside when he first arrived to the Vault, then went to the Two Bucks, and then came back, they shouldn’t be able to meet him again.

The second challenge is exemplified in this Reddit exchange I had with a playtester. I’d gotten so busy finishing the story toward the end that I completely forgot to add a section! I’m really grateful to /u/evil_tugboat_capn for pointing out that issue.

Of course, I know the second challenge is mitigated by dedicated IF-authoring software, and I bet that programs like Twine have tools to help with the first. For my next story, I’m going to be looking into those tools to make it easier on myself.

Conclusions

Overall, writing an IF story was challenging, but like a fun challenging. I don’t write a lot of fiction, usually because it doesn’t really hold my interest — but the short scenes of IF and the nonlinear narrative allow me to be more associative, and dare I say, lyrical, which I really enjoy.

/u/evil_tugboat_capn told me that the IFComp is coming up this year, so I think I’m going to enter that (of course, I found out too late that Vault guard is ineligible, since it’s already published!) and see how I do.

Finally, writing it all by hand was actually pretty simple, and didn’t require I learn any new software. I’m continually impressed with the power Hakyll affords me, and how complex I can make a static webpage. I will try Twine and friends out (especially if I want to try making a parser-based IF game), but it’s also good to know that I can use plain Pandoc and CSS to get it done too. I’d just need to write a little helper script to check I don’t have any dead ends.

Minuet for Harpsichord in Fmaj

This one is really fun — it’s got a great interplay between the bass and treble, with a tripping sort of interplay where the bass’ll hit a note and the treble will play part of an arpeggio. Then the triplets come in, and all bets are off. It’s apparently very easy to play too — which I can buy, since the sheet music doesn’t look too hard. Not that I’m going to be learning to play it on the piano. Though maybe … I should?

Read more...