The Abject Emptiness of ‘Everything’

The philosopher Slavoj Zizek is distressingly fond of a rhetorical trick we’ll call Confirmation By Negation. The idea is that by searching carefully through seemingly contradictory notions we arrive at some fundamental truth. You tell me you want to drink this latte, but what if the opposite were true!? You may want to hold the latte, to sip from the latte, but never would you want to finish it! Never would you desire to grow fat from its milk and sugar, or to suffer the negative effects of its caffeine! In this notion of the dairy-free, sugar-free, caffeine-free latte we discover the truest ideals of postmodernity! And so on.

So it is with many of today’s open world videogames. They seek to let you do anything, which of course means there is nothing to do!  Their attempts to regulate your rise to power flatten them to an exercise in exchanging meaningless junk for the means to accrue more meaningless junk, and their deluge of tiny consequences for all your tiny actions of course renders them consequence-free. Their unique storyworlds—immersion in which is supposed to be the entire point of playing—somehow become completely external to them, since of course every ‘open world’ from Middle Earth to Mad Max manages to be exactly the same. You say you want an open world, but my god, don’t you actually want the opposite!?

We can view these games as a sequence of empty gestures designed to mediate our experience of the dreadful Other who lurks on the opposite side of their ending cinematics. We climb many instances of essentially the same tower to reveal wide swathes of essentially the same territory, in which we perform essentially the same regimen of busywork. We do this so that many instances of the same Orwellian super-presence will pass ‘control’ over this territory from itself unto us. In Assassin’s Creed we transact with the evil and mysterious Templars; in Batman it’s the evil and mysterious Arkham Knight. In The Elder Scrolls: Oblivion, perhaps most tellingly of all, we transact with hell itself. The game opens scores of its Oblivion Gates—all of which are essentially the same Oblivion Gate—and invites us to close them one at a time. By investing many hours of our labour, we sew shut the bursting seams of eternity! What better way to relieve ourselves of boredom?

What is boredom, if not fear of our inevitable death?

Within each of these games we pilot the same walking contradiction: something that is at once us, and not us. Where our real world body cannot have very much of what it wants, our open world body can have everything that is available, which of course is many instances of the same thing. But you see, it is also more! Confirmation By Negation tells us that ‘possession’ is predicated both on what we have and what we can’t have. When there is nothing in the universe we can’t have, the idea of ‘possession’ does not meaningfully exist; there is, in fact, nothing to possess. Thus when Fable II’s Orwellian super-presence permits us to transact from it marriage with every character in the world (each of whom is essentially the same character and thus a non-character), we discover little point in marrying anyone in particular. We discover the very essence of the open world system: a machine permitting us to learn, by manipulating it, precisely how and why manipulating it can have no effect.

The ‘open world’ is a mirror through which we can view, indirectly, the abject emptiness lying beyond our realm of experience. Within its reams upon reams of collectible things, we recognize and find comfort in the absence of any particular thing; we enact the ritual of collecting junk until there is no more junk to collect, at which time we discover triumphantly that we have succeeded in gathering the pure, distilled essence of nothing. We hold it in our hands, we add it to our gamer score, then we reach for a second world that is in truth another instance of the first. Here is Zizek’s dairy-free, sugar-free, caffeine-free, never-ending latte! Drink as long as you please, for your stomach can never fill.

The Joy and Tragedy of Flash Programming

The phrase ‘Flash is dead!’ isn’t so much a declaration of fact as it is an expression of one’s political alignment. To discover the nature of this alignment we need only ask ourselves: if indeed Flash were dead—if, somehow, a medium for creative expression were capable of experiencing death—who would we say had killed it? Was it Steve Jobs in the hardware biz with the iPhone? Or was it the front-end web person in tech services, scheming to fix the broken relationship between HTML and CSS? Was it Google Chrome, whose commitment to ‘openness’ has predictably come to preclude any software its parent company can’t manipulate? Or was it JavaScript, that mangy nightmare of a programming language whose hunger will consume the world?

Should we rejoice in our ever-impending freedom from all of Flash’s dreadful security problems (to be replaced, one assumes, by every other platform’s dreadful security problems)? Or the tremendous memory management and performance benefits made possible by… uh… cross-compiling to JavaScript? Shall we shower ourselves in the splendour of CSS3 on Chrome, then shower ourselves in the splendour of CSS3 on Firefox, then shower ourselves in the splendour of CSS3 on IE 10.0 and up, then media query into a set of stylesheets that works on more than fifty percent of recent android phones?

As I said, it’s very much a question of politics.

What gets lost in the ideological shuffle, though, is how wonderful a programming language Flash’s ActionScript 3 is. It’s both powerful and flexible, which is nice; yet beyond that, AS3 is fun. Where Java is verbose, consistent and largely insufferable, AS3 gives you getters and setters to break up the monotony. Where C# gives you a giant kitchen sink in which to deploy any programming pattern ever conceived by humankind, AS3 lends itself to a more particular, off-beat style of code.

Most centrally, AS3 provides all “The Good Parts” of JavaScript while at every turn being worlds better than JavaScript. You of course get all the whacky closure-based nonsense you’d find in JS and any other function-y language; yet AS3 provides syntax for strongly-typed variables, permitting software devs to write honest-to-goodness APIs with coherent, half-readable method signatures! You get IDEs capable of auto-completion, tool-assisted-refactoring and reference lookups! You get the gift of sanity! Do you know what sort of creature writes software in Notepad++ with naught but some crummy syntax highlighting plugin? A WILD ANIMAL. Possibly a rabid one.

Then when it comes time to program some ambiguously-typed, data-structure-melting atrocity, it’s as simple as casting all your variables to * and hacking away the night. I must concede that kitchen-sink languages like C# present all sorts of interesting rope with which to hang yourself in these situations—generics, operator overrides, reflection, occult contracts and so on—yet I’m not certain a jungle of generics has ever proven much more comprehensible than a few AS3 dictionaries packed full of mystery meat. In neither case is anyone going to understand anything you just wrote two months from now.

Speaking of dictionaries: AS3’s dictionaries are obtuse and absurd and absolutely marvellous. For some reason you use ‘for(x in dict)’ loops to iterate through keys but ‘foreach(x in dict)’ loops to iterate through values. Anything can be a key, and anything can be a value; strict typing is not permitted, so the language almost begs you to do something cool/weird. Astonishingly, dictionaries can use weak-referenced keys! In fact, any AS3 event dispatcher can use weak-referenced callbacks! Not even C#, that notorious syntactic sugar thief, is able to do that!

There is a sublime quality to Flash’s outrageous RAM and CPU overhead that doesn’t quite come across until you’ve used it to program games. I once built a Flash game that streams hand-painted full-resolution environment art from the internet and loads all of it into memory at once:

I once programmed a dynamic 2d lighting engine that renders circular gradients into a bitmap every frame, blitting it back across the screen as an overlay:

I wrote all this using Flash’s excellent 2d graphics API, which treats me like a human being by asking for shapes, fills and gradients rather than vertices, triangle maps and my first-born’s blood. I never had to explain the foreign notion of a ‘line segment’ to some illiterate thousand-threaded polygon pump, futzing with triangle fans and clipper libraries and “programmable” shaders. The libraries I used were entirely CPU-based—which is to say slow as hell—and I still got away with murder.

To use my favourite Bogost-ism, I find certain a squalid grace in hogging 2 gigabytes of RAM and 3 gigahertz of computing power just to draw a 2d videogame. It speaks to a promise fulfilled: a world where we can make sprawling, beautiful, outrageous software without fear of over- or under-utilizing the hardware against which we labour. A world free of scarcity, in which computers serve programmers rather than the other way around. A world without limits.

Yet in the shadow of Flash’s ever-impending death—an era of innovation for its own sake, leaving everything behind amidst our fumble for the bleeding edge—that world cannot exist. The hardware will always be too slow; the software will always be half-broken and impliable. This is not cause for celebration; if anything, it’s cause for sorrow. There is value in the old and the venerable. There is culture. There is expressiveness. There is joy. We’d be wise to treat it with respect.