fuzzy notepad

Atom feed [blog] blog

[blog] Fair warning: minor restructuring ahead

I started using Tumblr some time ago to publish sporadic shorter writing, as a way to combat the feeling that everything I wrote in this “real blog” had to be long and semi-formal. The short writing more or less migrated to Twitter, but Tumblr remained for some community-specific griping. When I started learning to draw, it was an obvious place to stick my doodles as well.

But Tumblr is a frustrating platform that I’ve never found myself particularly enjoying. Plus, it seems a shame to have this amazing domain hack and only use it for one kind of thing.

So I’m going to try expanding the purview of my tiny platform. Pelican isn’t quite designed for this, but I’m going to turn its concept of “categories” into more like content types, whatever that ends up meaning. “Blog” is now its own category; I’ve put all my old posts in it and will put other long-form writing in it in the future. (I also cleaned up the tags I use, merged the old categories into tags, and hid single-use tags from the sidebar.)

I haven’t decided exactly what else will go here yet. Posting art is an obvious start, and I might even backfill all my doodles since I started drawing in January. I might write some shorter and more “disposable” things. I might write short updates on particular projects. I might post tons of cat photos, and backfill those too. I might try keeping a “dev journal”, where every single day I write a quick paragraph or two about what I did.

I mention this mainly as a heads up to any techies who’re following via the feed. If you want to see anything and everything I publish, it’ll all be in the same global Atom feed, so you don’t need to do anything. If you only want to follow my blog, there should be a new feed just for blog posts. Every category gets its own feed, so you can also mix and match as you please, once I get some other categories started.

Are you excited? I’m excited.

[blog] Next steps for beginning programmers

Last month @zandrmartin asked me on Twitter:

i would love to read a post about things you would recommend newish programmers learn, esp those coming from a php web background

not even tutorials as such, just like ‘you should learn about x and how to implement it effectively’ would be great

like when you were talking about bit masks a while back, i have no idea what those are or why you’d use them, but i want to

I’ve opined on this sort of thing briefly in various impermanent places, but somehow never tried to consolidate it at all. So here you go, some stream of consciousness on being more better at computers.

[blog] My search history is now full of illegal drug terms

Someone has generously pledged a pile of money and asked me to write about the War on Drugs. Preliminary research reveals that this is not actually anything to do with programming, which confuses and bewilders me, but I’ll give it a try anyway.

My gut reaction is to say “it’s bad”, on the basis of victimless crime and right to private action and all that, but that doesn’t make for a very interesting post, and there are plenty of thinkpieces along those lines anyway. I’ll try to do a teeny bit of research, so I’m not just paraphrasing Wikipedia.

[blog] Dark corners of Unicode

I’m assuming, if you are on the Internet and reading kind of a nerdy blog, that you know what Unicode is. At the very least, you have a very general understanding of it — maybe “it’s what gives us emoji”.

That’s about as far as most people’s understanding extends, in my experience, even among programmers. And that’s a tragedy, because Unicode has a lot of… ah, depth to it. Not to say that Unicode is a terrible disaster — more that human language is a terrible disaster, and anything with the lofty goals of representing all of it is going to have some wrinkles.

So here is a collection of curiosities I’ve encountered in dealing with Unicode that you generally only find out about through experience. Enjoy.

Also, I strongly recommend you install the Symbola font, which contains basic glyphs for a vast number of characters. They may not be pretty, but they’re better than seeing the infamous Unicode lego.

[blog] Security through misanthropy

I love programming. It’s like playing with Lego — here are some blocks, see what you can build with them.

That sounds a bit less impressive now, but when I was a kid walking uphill both ways, I only had a very generic Lego set where all the pieces were cuboids. If I wanted to build a house with a sloped roof, well, that was too bad. I could cheat a little, though, by making several layers in a terrace pattern. It wasn’t actually sloped, but it did the job well enough by making creative use of the tools I had within the constraints I was given. You might call it a hack.

Self-identified hackers will often lament how “hack” now has two meanings and everyone assumes the wrong one. I think there’s really only one meaning, and the “break into computers” sense is a special case. It’s not like breaking into a system is magic, or done by running hack.exe; it’s just a creative use of the tools you have within the constraints you’re given. Like when the constraint is “your username is placed in a string of SQL” and you decide to place a couple quotation marks in your username.

So I’m always a little surprised when programmers don’t get security issues or how to defend against them, because to me, it requires exactly the same mindset as programming. And I suspect the problem is a quiet assumption most people tend to make: no one is that much of an asshole.

That’s not entirely unreasonable. Every stranger you pass on the street could be a hired assassin, but that’s fairly unlikely, and we have punishments to discourage that sort of thing. Ultimately we have to have some level of trust in other people in order to be around them at all.

And yet.

[blog] Frozen peaches, sour grapes

I’ve started and restarted writing this post so many times. I’ve spent a week agonizing over it. It’s so hard to write. There’s so much I want to say, and I don’t know how to say most of it or how to thread it together sensibly or how to draw any useful conclusions.

The hardest part is that I want to give examples — and I have loads in mind — but I don’t want to pick on anyone in particular. It’d be sort of counter-productive, given the subject matter.

I considered abandoning it altogether and just compressing the thoughts into an example-free tweetstorm, which sounded much easier. But it occurred to me I could just do that in vim and call it a blog post, and maybe it would end up less wordy besides. So here goes the somewhat compressed version. Ahem.

Something is very wrong with Internet discourse. It rapidly devolves into being bitter and spiteful and hostile, and this is only becoming more frequent. I don’t know where this is leading us or what to do about it. I don’t know dick about sociology but here are my perceptions anyway.

[blog] Text editor rundown

As part of my experiment to monetize my personal brand, or however we’re describing this now, I have a milestone that lets a patron impose a blog topic of their choosing on me. What could possibly go wrong?

And so, this month, Russ brings us:

You should totally write about text editors.

I totally should. I mean, wait, no I shouldn’t. I haven’t seriously used a text editor other than Vim for years.

Thankfully this was a moderately vague request, so here’s what I’ve done: I’ve subjected myself to all these hip shiny text editors that I haven’t been bothering with and taken notes of my initial impressions. I only had a few hours to devote to each, so this won’t really be a fair comparison… but you know, life isn’t fair, so eat your peas and do your homework.

[blog] I stared into the fontconfig, and the fontconfig stared back at me

Wow! My Patreon experiment has been successful enough that I’m finally obliged to write one post per month, and this is the first such post. Let us celebrate with a post about something near and dear to everyone’s heart: fonts. Or rather, about fontconfig.

fontconfig is a pretty impressive piece of work. If you’re on Linux, it’s probably the thing that picks default fonts, handles Unicode fallback, and magically notices when new fonts are installed without having to restart anything. It’s invisible and great.

And unfortunately once in a great while it’s wrong. There is no common GUI for configuring fontconfig, so you’re stuck manually editing XML configuration files — for which the documentation is atrocious.

Lucky for you, and unlucky for me, I have twice now had to delve down this rabbit hole. Here is my story, that others may be saved from this madness.

[blog] Just enough Git to be (less) dangerous

Do you just hate Git? Are you perfectly happy with Mercurial (or, yikes, Subversion) but once a month you have to brave Git because everyone and their damn dog is now using GitHub? Are you vaguely aware that about half of all Git commands will probably delete all your work forever, but you don’t know which ones and you don’t want to spend three weeks poring over the documentation?

Good news! I wrote you this amazing Internet post. I hope I can mash just enough Git into your face that you will be less likely to set things on fire, and also less terrified that you might set things on fire. This should also be enough to make the Git documentation a little more comprehensible; it’s extremely thorough, but also overwhelming and nonsensical if you haven’t already read half of it.

I’m trying to keep this brief but also potentially useful to people who have never touched version control at all, so there are some 101 bits sprinkled throughout. Fear not! I don’t actually think Mercurial users have no idea what a patch is.

[blog] Sylph: the programming language I want

Creating a programming language is apparently all the rage these days, and it’s got me thinking about what I would really like to see in one. I’m starting to suspect the things I want are either impossible or mutually incompatible, so I’d better write them down and let smarter people tell me why I can’t have everything and also a pony.

I’m strongly influenced by my love of Python, my aversion to C and C++, my fascination with Rust, and the bits of Haskell I understand. I very recently read an overview of Nim, which is part of what got my juices flowing. Also I have a lot of fond memories of what Perl 6 could have been, so, fair warning.

This is a brain dump, not a linear narrative, so some of this might be mutually referential or causally reversed or even complete nonsense. Please pardon the dust.

[blog] Starbound airlock

Starbound is a 2D exploration and building game currently in development. Yes, yes, it’s like Minecraft, except 2D, and with actual art, and fun.

A recent update added wiring (or perhaps upgraded it into being useful?), which lets you wire anything into anything. A notable feature of Starbound’s wiring over Terraria’s or Minecraft’s is that logic gates are actual objects, not emergent behavior. So you don’t have to build everything out of goddamn NANDs. Also, the wires aren’t physical objects; they’re just straight lines connecting an input to an output, they take up no space in the world, they don’t participate in any form of collision detection, and they appear on a separate layer that you only see when you’re using the wiring tool.

There’s not a whole lot you can do with the wiring in Starbound yet. The devices you can control are, for the most part, lights and doors. Other players can just destroy anything you build, anyway. So it’s really only useful for visual effect right now, much like everything else you can build.

Still, there are a couple mechanisms of interest. Last night I built an airlock, and while it’s not an astounding feat of electrical engineering, I thought it was an interesting enough problem that someone else might enjoy reading about it. So here I am, blogging for once. I hope you’re happy.

[blog] Eevee gained 2269 experience points

Eevee grew to level 28!

I’m a bit late; my birthday was on the 12th. Oh, well.

I don’t know what to say about 2014, really, so let’s just start typing and see what happens.

  • Bought the house, finally divorced myself of the old one. Paid half of it off.

  • I made some (one and a half?) ZDoom maps. I first got into the ZDoom community over a decade ago — I found articles on the ZDoom wiki with my own edits in them from that long ago — and only now have created a map that’s actually playable. By which I mean it has an exit.

    In the course of doing this, I also wrote a bunch of patches for SLADE, the editor I’m using and the only one that really exists for Linux.

  • I released a couple more tiny modules on PyPI: cgettext, classtools.

  • I actually got my dream roguelike, flax, to the point that it’s playable.

  • I started trying to draw, on and off, again. I’ve recently gotten in the habit of doing a little daily comic, since my partner is doing the same.

  • I learned Inform 7 and wrote some of a text adventure. I also made a whole lot of aborted attempts at writing fictional prose for my partner’s Flora universe; it turns out fiction is hard, maybe.

I feel like I’ve grown a lot, but I can’t quite explain how. I tried a lot of things I haven’t really tried before, and they’re all informing how I think about things now. I don’t feel like I have a lot to show for all of them, though. Hm.


For once, I’m also considering what I would like to do this coming year.

  • Write more. I only wrote six posts last year! I blame this mostly on my emphasizing this as a “real” blog — I’m now unsatisfied with posting anything that isn’t as long and informative as, let’s face it, the PHP post. I need to knock that off. Back in my LiveJournal days, I once wrote a post every day for a month; perhaps another such month is in order.

  • Do a bit more with this domain. Ever since I bought it, I half-intended to also host separate pages for things I’ve made, and I don’t mean just cramming them onto a single “projects” page. I don’t know what form this will take yet, but as long as the domain is actually my name, I’d like for it to be something that more accurately reflects me.

  • Finish a game. Probably not flax, but hopefully this text adventure. It would be great if I had a website where I could host a text adventure, too… hmm…

  • Write a book. Or at least a significant chunk of one. I have a lot of ideas for a programming book (series?).

  • Make money. I have a salary from a “real” job, of course, but I would really like to prove that I could someday support myself with my own endeavors. Any of the above are possible candidates.

Only five things in a year. How hard can it be?

[blog] Maybe you’re just not very funny

Jeez. Seems like everyone’s outraged over something these days.

Take for example this guy:

Why don’t you try focusing your civil unrest at something that dearly needs it, like the fact that today the Israeli air force struck a school with a missile killing 10 people, most of which were children. I suppose you’re all ok with that, as long as the missile didn’t call the school ‘retarded’ first, right? … I encourage you to look at yourselves and think about what really matters.

He’s outraged that people could ignore his pet issue in favor of something he doesn’t think is important. God, why can’t he shut up about it and go on with his life like everyone else?

So, the clown above is “jontron” (some YouTube celebrity, famous for playing video games or something?), who only recently appeared on anyone’s radar because of this exchange:

The quote is from his Twitter response, in which he doubles (triples?) down on the use of the word “retarded”. It also contains this bit:

My job as a comedian is to make people laugh and feel better about their lives.

Ha, get it? I’m laughing and feeling better about myself because at least I’m not retarded, like those peop— err, like the PlayStation 4. What a knee-slapper!

Along with various other comedians who have recently become outraged over discovering that not everything they say is comedy gold, jontron is missing what actually happened here. When I read the above sequence of events in order, I see:

  1. Some Internet funny man makes a joke that hinges on the word “retarded”. That’s kinda gross. But a lot of people do gross things sometimes. Alas.
  2. Funny man responds to polite criticism by throwing the same word back in the face of the person who asked him not to use it.
  3. Funny man responds to resulting crapstorm by going on about the REAL problems in the world, which he doesn’t talk about either. Oh, and then he thought maybe a Hitler joke would show how hilarious he is.

Look carefully. What happened immediately before the mention of a crapstorm? It wasn’t the use of the word! It was the part where he responded to “hey this is a sore spot for me” by punching the other person right in the sore spot. Because that’s when he shifted from maybe, accidentally, being a bit of an asshole… to conclusively and deliberately being a total asshole.

Why? What’s the fear here? That if you break the flow to say something serious like “Oh, my bad” or even “I’m aware but I’m not willing to stop” or even just nothing, you’ve failed at being funny? Here’s a hot tip: if someone is upset at what you said, you already fucked it up, at least for that person.

Because, here’s the thing: you can tell jokes about horrible and tragic things. It really is possible. The trick is that they only work if the audience finds them funny; otherwise, you’re just being horrible. You take that gamble when you decide to go for that flavor of joke. If you lose the gamble, it doesn’t mean everyone else is super sensitive; it just means you lost the gamble. Or maybe you’re not as funny as you think you are.

He also did an interview in which he quadrupled-down, with gems like this:

I can guarantee you, without naming names, that every big YouTuber or Hollywood celeb that apologizes for saying a ‘bad word’ does NOT mean it 99 percent of the time. It’s all public relations nonsense. Unless something truly hateful is said in an definitively hateful context, like in the case of Michael Richards at the Laugh Factory, I would take their apologies with a grain of salt.

See, he didn’t double down and aim a slur directly at another person. He doubled down and aimed a slur directly at another person. It’s completely different, and that’s why he’s way better and doesn’t deserve any of this. Also, even if he did apologize, he still wouldn’t mean it, and no one else does either, so there, neener neener, he still wins.

Way to make me laugh and feel better about my life!

But maybe there’s a good reason for all this. Maybe there’s a good reason this guy decided to repeat his failed joke, rather than turn the failure into a better joke. Maybe there’s a reason he defends “retarded” as though he literally can’t imagine how to tell jokes without it.

Maybe he’s just not very funny.

Sorry, bro. But don’t take it out on everyone else when you suck at your job.


This is, of course, something of a running theme. Jim Norton, the man who had plastic surgery to get his frown permanently etched onto his face, semi-famously went on a TV show to debate the merit of rape jokes with a token feminist, and subsequently earned the world record for saying “free speech” the most times in ten minutes.

He was right, of course: he is perfectly allowed to joke about rape all he wants. No one is proposing we make it illegal. But maybe, hey, uh, could you think twice before cracking jokes about things other people are sensitive to that you only personally experience via other people’s jokes?

Again, you’d think Jim literally cannot find anything to tell jokes about besides rape. Why else would he go on national television to argue why he really really really needs to be allowed to tell rape jokes?

Hey, speaking of Jim Norton, I got this awesome fan tweet from him earlier:

. @eevee You don’t tweet enough. You should weigh in more often because you say such important, interesting things.

Thanks for the shoutout, Jim! I’ll be sure to let you know what I think more often. But you replied to the wrong tweet. This is what I said to you:

i’m reminded of Guy Who’s Really Offended When Not Everyone Thinks He’s Really All That Funny, @JimNorton

True to form, Jim was offended enough that he felt the need to supertweet1 a complete nobody to his third of a million followers. Damn. You really need to learn to take a joke, Jim.


To round out the trifecta, today I also bumbled upon an article in Playboy written by Gilbert Gottfried, in which he advises his readers to not apologize for being offensive, and also calls them all cunts. I’m led to believe that latter part is funny, because it has a naughty word in it.

He summarizes:

Ninety percent of my speech was devoted to making jokes about Anderson’s vagina and whether it would ever be tight again. …

… Afterward, when the show was over and everybody was shaking hands and pretending not to be pissed off, Anderson gave me a hug and whispered in my ear, “I hate you.” That’s all she said. She didn’t demand an apology or tell me she was going to ruin my career. All she said was “I hate you.” And that was the end of it. …

Do you have the same emotional maturity as somebody with gigantic fake breasts whose main cultural contribution is running in slow motion on the beach?

Perfectly reasonable. Why can’t we be subtle and mature about these things? There’s no need to, I don’t know, get a two-page article published in a magazine with five million readers when you’re offended over something. Exercise some discretion!

Like Jim Norton, Gilbert Gottfried is a comedian who chose to make a name for himself being “controversial”, which is a cutesy way of saying “offensive”. Now, when it turns out some of their jokes are offensive, they get outraged at the people who have the audacity to not find them funny. How dare these Internet people! Why can’t the entire world just sit and be quietly uncomfortable, like the audience members I want them to be? Don’t you know who I am?

The funny thing is that this article has an entire paragraph of self-deprecating Jew jokes. It might be the only funny part of the article. Because when someone makes jokes about themselves, there remains a shred of empathy, of shared understanding of a tragedy. Someone in this conversation actually knows what the experience of being a Jew is like, and we can laugh at his ha-ha-only-serious jokes together.

That’s pretty different from jokes about recent tragedies, or serious handicaps, or rape. With the self-deprecating Jew jokes, “Jewish” is the setup. With those other things, the terrible thing is usually the punchline. There’s no empathizing there: it’s just playing Mad Libs with problems you’ve never had to worry about.


If you didn’t notice, I’ve been calling these people “offended” or “outraged”. Let me drive that home, because it kinda grinds my gears.

Why, exactly, is it “outrage” when someone finds a joke distasteful, but not when the comedian takes that reaction personally? It’s still a person feeling something was a personal slight, or that something broke social rules, or however you want to define these terms. But the writhing masses are outraged, whereas I guess the poor celebrities only have righteous fury, which is funny beause I’m pretty sure “rage” and “fury” mean basically the same thing.

This leads to some really fucked-up interpretations of events, too. Earlier on The Twitter someone hypothetically defended jontron to me, essentially saying “maybe he reacted poorly because people yelled at him”.

Well, wait, hang on. Even if they had, who fucking cares? Presumably those people thought using “retarded” as a joke was super fucking rude, so why would yelling at a rude person be inappropriate? And if it is, why doesn’t that apply to him?

This is a recurring pattern, I don’t understand it, and it’s complete bullshit.

  1. Person A does some dickish thing, possibly directed at person B.
  2. Person B calls out person A for it.
  3. Multiple onlookers rush to admonish person B for being so rude.
  4. Why aren’t you yelling at A? And how are you idiots not being rude as well? What the fuck is going on here?

If you only ever harp on “nice” people to stay nice 100% of the time, you’re giving assholes a free pass to be assholes. That makes you an asshole. Knock it off.


OK that’s all I got and I am bad at conclusions. Also honestly I only wrote any of this to see if Jim Norton will reply to me again.


  1. you know, the opposite of subtweet, i.e., reply to someone with junk in front so all your followers see it 

[blog] Braid

There was a shooting, but this post is not about that shooting.

This post is about what we tried to do to stop thinking about the shooting, because the deluge of apologists can wear on a person after a while. So we got some lunch and sat down to watch some funny Internet videos. We enjoy the vidcons, so I scrolled back through retsupurae looking for something that caught my eye.

I found “Braidple Story“, which sounded promising because I would still gladly call Braid the best vidcon I’ve ever played.

Spoilers: the game is terrible, like you do. More spoilers: the game is a hamfisted attempt at recreating Braid’s theme that falls completely flat, because 99% of it is the protagonist’s overt creeping on this girl (with totally believable voice acting and horrifying dialogue) and then right at the end she goes “Leave me alone ugh!” and that’s the end of the game.

All told, that didn’t really help get my mind off of Gender Stuff. But it did put my mind on something else, which is: Braid.

A brief recap of Braid

Since time-travelling platformers are not everyone’s cup of tea, let me go over the game’s “plot” real quick here. If you haven’t played it yet and want to, you might want to just bail on this post until you’ve cleared out your Steam queue.

Braid is a simple platformer, complete with overt Mario homages, including the chasing of a princess. The game is split into six chapters, and before each one, you get few paragraphs of flavor text about what your protagonist Tim is thinking. (Wikiquote has it all quoted in its entirety if you care to read it.)

World 2 (Time and Forgiveness) opens with the plot of the game: “Tim is off on a search to rescue the Princess.” But not just any princess; the narrative makes clear that the two were in a relationship, and Tim made some (perhaps many) mistakes, and now feels he ought to be forgiven for having learned from them. Tim’s memories are muddled, but very clear in his mind is the sight of the princess turning sharply away, her braid waving at him. (Ah! That’s the game’s title!) This chapter is the introduction to the controls: you can walk around, jump, and activate switches. You then run across a platforming puzzle that requires almost inhuman timing to get right, and this is where you discover the core mechanic of the game: you can reverse time, at will, whenever you want, all the way back to when you entered the level if you so choose. And so, quite appropriately, you can undo any mistakes you’ve made and learn from them.

World 3 (Time and Mystery) reveals that Tim was the one who left, and now he’s trying to go back to her. Apparently he felt trapped by her expectations, which he himself had preserved by undoing all of his own missteps, and felt that he could never escape beyond the person she thought he was. Sometimes, he needed to be immune to her expectations, to preserve some other part of himself even as he undid his mistakes. And so we have the new mechanic for World 3: in each level, some objects glow a sparkly green, and these objects aren’t affected by the reversal of time. If you use a sparkly green key to open a door and then reverse time, the door will close, but the key will remain broken. Everything else is the same, but this makes your power vulnerable.

World 4 (Time and Place) remarks on how certain places remind us of memories of those places — of other times. Tim sets off wandering to various places where he has memories of his princess, in the hopes that he will find her there, or even be transported back to when he was with her. In this world, the levels literally link time with place: time advances forwards as you move to the right, and backwards as you move to the left. You can still reverse time, but only for yourself; time for everything else in the world is linked to your horizontal position.

World 5 (Time and Decision) hints that Tim is leaving another lover to search for his princess, the obsession is so strong. Here, whenever you reverse time, a shadow of yourself is left behind to act out whatever you had last done from that point forward. You can see your former decisions play out alongside your current ones.

World 6 (Hesitance) mentions a ring, and strongly suggests that it’s an engagement or even marriage ring from the princess. He still wears it, and it makes it harder to romance other women — so he’s learned to approach slowly when he wears the ring, or forego wearing it entirely whenever he can bear it. In this world, Tim can place his ring anywhere he wishes, and time will be slowed down within a small radius of it. He can, as usual, still rewind time, but slowing it down in only part of the level can make patterns go out of sync. Curiously, this is the first world to have a black background and break with the naming scheme. The music is, as I recall, also significantly darker than before.

This brings us to the end of the story. But as this is a game about going backwards, the final part is World 1.

World 1 has no title. The intro text paints Tim as eerily calculating, and explicitly names him as moving contrary to everyone else — or everyone else contrary to him.

World 1 begins with three simple levels, each one removing more platforms from the last. The gimmick here is simple: time moves backwards. When you enter a level, you see a series of events play out backwards. You can still reverse time, but that makes everything else move forwards. This has funny implications for cause and effect: if you jump on a monster, it can’t die, because the next moment it experiences is the preceding moment and it hadn’t yet been jumped on. Wacky platforming abounds.

After these few simple introductory levels, we have the final boss, in a sense. Tim emerges into the catacombs of a castle; above him, the princess is in the arms of a knight yelling “I’ve got you!” She gets away from him and yells “Help!”; he calls to her to get back to him. And the chase is on: the knight has a stomping fit which starts to bring down parts of the ceiling above you, and a wall of flame starts to approach from the left. Both Tim and the princess run to the right, running from the fire and the knight respectively, and occasionally the princess stops to throw a switch that clears an obstacle for Tim. After some excellent platforming, assisted by the occasional time reversal, she finally reaches her bedroom, and he finally escapes the catacombs and climbs a lattice to arrive outside her window.

The screen flashes, and the player loses control. Seemingly nothing has changed.

But now the music is running backwards, and everything the player just did with Tim is running backwards as well. And as you watch the level unplay itself, a horrible realization creeps up on you.

Remember, this is still World 1, and everything but Tim has been playing out in reverse.

As Tim runs backwards through the catacombs, events take on a completely different meaning. Tim is now chasing after the princess, not running ahead of her. The princess isn’t clearing obstacles out of the way; she’s closing off all the escape routes out of the catacombs. And she never escaped from the knight — rather, the last we see of her is as she jumps into his arms, and he takes her away from the madman in the basement.

Perhaps we should’ve seen this coming. The level, the only one in World 1 that has a title at all, is called simply “Braid” — the last thing he remembers seeing when she turned away from him.

The shift in perspective is absolutely, beautifully, perfect. The intro levels are simple so the mechanic doesn’t stick in your head too hard, and the entire castle level is designed to let you forget that everything else is moving in reverse.

There’s an epilogue. It has some simple platforming, but for the most part it’s just more flavor text. This stuff is a bit more abstract; it speaks of moments of Tim’s childhood, of an experimenting scientist, of the birth and death of the world.

The interpretation

After I played Braid, I was fascinated by the somewhat more mysterious passages in the epilogue. I scurried to the Internet to see if anyone else had made any deep sense out of them.

I was pretty disappointed with what I found. The epilogue quotes “Now we are all sons of bitches”, and uses the words “radiated” and “ashes”. So it became something of a widespread consensus that the game was clearly one big metaphor for the Manhattan Project. That interpretation has never made any sense to me, yet everyone who said it seemed to feel very clever for having figured it out. (The game’s author has refused to say what the game is about.)

If you haven’t read through the script, now might be a good time. Remember, this is all the text in the entire game. There are no NPCs, no dialogue; just these glimpses of a story.

I always thought the game was about two things. The first: time, which you have to really stretch to relate to the development of a nuclear bomb. The second: Tim, who is after all the protagonist of both the game and most of the plot text.

It all seems pretty cut and dry to me. The game is entirely about undoing what we’ve already done, and Tim wishes to return to the arms of his “princess”. The various worlds are the ways he dwells on her and imagines how things might have gone differently. Consider also that the prose, despite being written in third-person, is written from Tim’s point of view — and we already know Tim is an unreliable narrator. He said he left the princess, but we watched her run away from him.

Thus I have slightly different interpretations of what the worlds were actually about. World 2 is the obsession with reliving mistakes, trying to see where he went wrong, and feeling like figuring that out means he’s undone the mistake entirely. World 3 is the uncomfortable discovery that not everything can be so easily undone. World 4 is his aimless drifting through the world, as time passes him by. World 5 is confusion between what he did and what he might have done, so intertwined that there’s no telling which is real. World 6 is a final memento he obsesses over, a trinket that no longer holds any real meaning but still distorts everything around it from Tim’s perspective.

World 1 is the actual breakup. His princess was stolen away by a knight in shining armor. He remembers it backwards, because his perspective is just that warped, and that’s the only way to preserve his view of events.

This all seems pretty reasonable, right? Tim is a creep. You’ve been playing as a creep the entire time. Reading through the transcript again now, I can’t believe I didn’t think he was ten times creepier at the time. Were they even dating, or was he just stalking her? If he stalked her, why did he have a wedding ring? He left other women to go pine over her some more, and they missed him? Crrrreepy.

But everyone chose to focus on the couple lines about the Manhattan Project, which need some severe contorting to relate to the rest of the game. Why?

Why

Watching that longplay of the Braid ripoff, in the context of everything that’s happened in the last couple days, I realized something.

Nobody wants to be Tim.

Well, sure. But it’s stronger than that: nobody wants to believe Tim could exist.

We played as Tim. He was just a platformer guy, but we identified with him on some basic level. He was our little avatar, solving cool time puzzles with us. We were Tim.

But we don’t want to be Tim. Nobody wants to be Tim. So instead we want to reach out for something, anything else that will let us not be the Tim the game appears to be presenting to us. And the epilogue provides us an escape hatch: if the entire game is a metaphor for the atom bomb, then we aren’t Tim. We aren’t who the game tells us Tim is, anyway. We’re something else, something fuzzier, something we don’t really have to think about.

It doesn’t matter that the metaphor doesn’t make any sense. It doesn’t matter that more of it is about plain old daily life than about nuclear explosions. It only matters that it’s not Tim.

And this, I believe, is the heart of the backlash against #YesAllWomen and anyone expressing any real outrage about the UCSB shooting. Because these things drive home that some people just might be Tim, or worse. Maybe some of us are Tim. And we don’t want to be Tim, whatever the cost.

So we paint the shooter as “just” mentally ill, crazy, depraved. We’d call him a religious fundamentalist (read: nut) if we could, or a terrorist if we could, or just a plain old natural criminal if we could. But we’ve only got so much to work with here.

We paint lines around him. Thick, hard lines. Lines to make it clear that he’s nothing like us. Even the people who fueled his rage, the people who practically identify themselves as antagonists, the people he seemed to identify with, draw these lines. Not one of us. Nope. Never heard of ‘im.

Because even they, fundamentally, recognize that they don’t want to be Tim. They want to put Tim as far away from themselves as possible. They don’t want to think about how many other Tims might be in their midst; that’s deeply unsettling, and the human mind is great at rationalizing such things away. So instead of using this as an opportunity to root out the Tims and make the group better by pushing them out, we distance ourselves from this particular Tim, and just don’t think about it further.

And that’s why Tim was free to do whatever he wanted. In his whole tale, he never remembered anyone telling him no, or pushing back. The only time we see anyone really resist Tim in a meaningful way is when the final level runs in reverse and the princess runs away from him — something he doesn’t even believe happened.

The most striking part of the epilogue, for me:

The candy store. Everything he wanted was on the opposite side of that pane of glass. The store was decorated in bright colors, and the scents wafting out drove him crazy. He tried to rush for the door, or just get closer to the glass, but he couldn’t. She held him back with great strength. Why would she hold him back? How might he break free of her grasp? He considered violence.”

They had been here before on their daily walks. She didn’t mind his screams and his shrieks, or the way he yanked painfully on her braid to make her stop. He was too little to know better.”

She picked him up and hugged him: “No, baby,” she said. He was shaking. She followed his gaze toward treats sitting on pillows behind the glass: the chocolate bar and the magnetic monopole, the It-From-Bit and the Ethical Calculus; and so many other things, deeper inside. “Maybe when you’re older, baby,” she whispered, setting him back on his feet and leading him home, “Maybe when you’re older.”

Every day thereafter, as before, she always walked him on a route that passed in front of the candy store.”

Does this sound familiar? Tim wanted the candy, but she wouldn’t let him have it. He felt entitled to it, he got violent over it as best he could. And when he couldn’t have it, he grew to resent her for taunting him with it, even though to her it was just the usual route home.

How far is it from Tim to hands that are a bit too grabby? To rape, murder, a mass shooting?

Violence is not a simple question of yes or no; plenty of cultural factors affect it. How many Tims are we enabling by refusing to acknowledge that he already exists, that we’re creating and nurturing Tims all the time?

Even one is too many. In our world, everything has green sparkles.

As for Tim

Enough heavy stuff. Let’s talk about World 1 a bit.

Trick question: where does the story end? Is it where the game ends, in World 1, or is it where the numbering ends, in World 6?

Or… is it both? Is this one big cycle, as Tim hops from princess to princess, and the game begins anew? Is it his own cycle, of reliving his time with her over and over?

Ah, but there’s something else about World 1.

The game has 8 stars hidden throughout it, generally not even visible without some outrageously finnicky puzzle solving. But if you manage to find 7 of them, something changes in the final level. Two of the switches in the catacombs now have green sparkles.

It’s a very subtle change, but it means that Tim can throw a switch, reverse time, and now go through the passage he opened earlier than he could’ve otherwise. It’s a small difference, but it’s enough to let Tim run so far ahead that the wall of fire, the wall of causality, falls off the screen entirely.

In fact, he gets so far ahead that he gets ahead of the princess before she reaches her bedroom. He’s already nearby and waiting when she springs her last (actually first) distraction on him: dropping a chandelier. And with some well-timed jumping, Tim can hop on the chandelier as it un-falls upwards, and ride it up to the ceiling.

Tim catches up to the princess.

The screen whites out, more violently than before. When it returns, the princess is gone. The music is gone.

In her bedroom, directly above her bed, Tim finds the final 8th star. Then there’s nothing left to do but run back to the beginning, leave through a previously inaccessible door, and see the epilogue again.

I love this, by the way. The slightest change in the level design changes absolutely everything.

If World 1 truly is the beginning of a cycle, then getting all the stars is the end of it. Because there is no princess after that. He caught up with her, and she was a phantom. And since it’s World 1, where time moves backwards, this last level is really the first level of the game. Even the levels are numbered in reverse in World 1. Without a princess, none of the rest of it needs to happen. Tim is free.

You can only find the stars by replaying the game at least one more time, and the original 360 version had a speedrun achievement to encourage you to play it a few more times. So you really do get to see Tim jump through the same hoops over and over again.

But the stars are different. The stars are new. The stars are things you — and thus Tim — never noticed the first time around. The stars require patience and careful thought to find. And only once you, and Tim, have found all these moments hidden away in Tim’s romanticized memories, can Tim get a different ending.

I can’t know what the game’s author was truly going for, but I’m content to believe that it’s this: maybe we can’t undo what we’ve done, but there’s always hope for Tim going forward, with a little help from someone willing to stick through it with him.

I leave you with the very end of the epilogue:

He cannot say he understood all of this. Possibly he’s more confused now than ever. But all these moments he’s contemplated — something has occurred. The moments feel substantial in his mind, like stones. Kneeling, reaching down toward the closest one, running his hand across it, he finds it smooth, and slightly cold.”

He tests the stone’s weight; he finds he can lift it, and the others too. He can fit them together to create a foundation, an embankment, a castle.”

To build a castle of appropriate size, he will need a great many stones. But what he’s got, now, feels like an acceptable start.”

If you’re interested: Braid’s climax, and Braid’s secret climax.