informa
/
Programming
Featured Blog

A Defense and Condemnation of Flash

Why indie game developers will lose out when the web's most notorious exploit vector finally dies.

(Reposted from my game development blog)


If last week’s uproar is any indication, Flash’s tenure on the web is drawing to a close. And while few will mourn its passing, I’m worried that Flash’s eviction from the browser will also mean the loss of one of the best tools for cross-platform game development for indies.

The Cheerleader Part

Adobe AIR is the standalone Flash runtime: it’s still Flash, but uncoupled from a browser plugin. AIR is  the framework behind a bunch of really good indie games, including IncredipedeRebuild 3, and 1849. (It’s also what I’m using to develop Antihero.) An AIR game includes the Flash runtime in its executable - much the same as Unity games bundle Mono - and the AIR runtime is compatible with Windows, Mac, iOS, and Android, significantly reducing the amount of legwork needed to get a game on all the major non-console platforms.

AIR and Flash games are written in ActionScript, which is basically JavaScript with static typing and the ‘class’ keyword. As a language, it’s fine - not something you’re likely to fall in love with, but certainly not hateful to use. A while back, making a game in Flash entailed using the “display list”, Adobe’s vector-based 2D scene graph - which is not GPU-accelerated and is therefore horrifically slow - but that’s no longer the case. Flash is the delivery mechanism for “browser features that Adobe would like to have control over” (like video), and a number of years ago it grew a new tentacle called Stage3D, which is a hardware-accelerated layer for drawing textured triangles and running shader programs, in much the same vein as OpenGL and DirectX. Using Stage3D, Antihero runs at an easy 60 frames-per-second on desktops, iPads, and iPhones – it’s no showcase of graphics wizardry, but it’s pleasantly animated and styled. An indie game, in other words.

Frequently, when another game developer asks about the tools I’m using to develop my game, they’re surprised when I say Flash - because for most people Flash means “slow games that run in the browser,” and because Steve Jobs’ Thoughts on Flash letter closed the door on the Flash plugin - though not AIR; they’re not the same thing - ever appearing on iOS. And this brings me to the “condemnation” part of the post: Adobe has been an absolutely horrendous steward of Flash and AIR.

The Ranty Part

I like their product, but I have no warm feelings for Adobe. Their developer relations are basically non-existent; the fact that “I’m using Flash” is bewildering to most other game developers I speak with is some evidence of this, but much more damning are the mixed signals Adobe has been sending to the developers who already use their tools. The strongest sentiment Adobe communicates vis à vis their commitment to Flash is that they have no fucking clue what they want to do with it, but they’ll be delighted if you’ll continue to buy their expensive software. (Lars Doucet wrote a great post about this over a year ago.)

The AIR “AOT compiler” is the tool that translates Flash bytecode into iOS-native code - it’s a critical component of the stack. I have some game code that crashes the compiler - with a very clear stack trace! - 100% of the time. And like a responsible developer, I filed a bug, posted in the support forums, and put together a small test case to demonstrate the error. This is an issue that a programmer should be able to fix in, like, an hour - but almost a year has gone by without any resolution. (The Adobe “support” staff who have gotten in touch with me about the issue have been comically inept - losing my emails in spam folders, closing the bug incorrectly as a duplicate of an unrelated issue, and finally just… ceasing communication entirely.)

This is just one example, but it’s representative of my experience with Adobe over the past 7 years that I’ve been using their tools. I came to Flash development after several years developing games in C++, and with a preconception that Flash was just a toy. But I quickly came to tolerate and then like it, not least because it was really the only game in town for getting keyframed animation into 2D games - something taken for granted in the 3D space, and that makes a world of difference when developing an animation-heavy game. I got work done faster in Flash than I’d ever been able to with any C++ engine. And so I would be totally happy to be a cheerleader for Flash… except that Adobe treats it like an unwanted child that they’d love to just be rid of, but have the sense that just killing it would be, like, kind of a faux pas and so are resigned to just neglect it until it goes away on its own. I’m not going to recommend those parents to anyone else.

Why it Matters

I’ll be happy to see Flash-the-browser-plugin disappear - lord knows we need fewer potential attack vectors living inside everyone’s web browser. But it’ll be a shame to lose AIR, because it’s a complete cross-platform 2D game development platform (“complete” because, in addition to the fundamentals like the compiler toolchain, it has solid code editors, a source-level debugger, and a good profiler) - and there aren’t enough of those. 2D only recently became a first-class citizen in Unity, and still has a ways to go by most accounts; and while there are other good-looking tools like Flambé and PlayN, none that I’ve seen have a large, committed community of game developers behind them.

And, you know, maybe Adobe will publicly recommit to keeping Flash/AIR alive, provide a solid development roadmap and stick to it, respond to bug reports in days instead of months or years (or never), and otherwise demonstrate that they give a shit. I’m not counting on it - it’s hard to imagine how any of that would fit into their business of selling subscriptions to Creative Cloud - but I’d be willing to forgive past grievances and be friends again.


(If you’re interested in running your own thieves’ guild, you can read more about Antihero, my in-development game, or follow me on Twitter.)

Latest Jobs

Sucker Punch Productions

Bellevue, Washington
08.27.21
Combat Designer

Xbox Graphics

Redmond, Washington
08.27.21
Senior Software Engineer: GPU Compilers

Insomniac Games

Burbank, California
08.27.21
Systems Designer

Deep Silver Volition

Champaign, Illinois
08.27.21
Senior Environment Artist
More Jobs   

CONNECT WITH US

Register for a
Subscribe to
Follow us

Game Developer Account

Game Developer Newsletter

@gamedevdotcom

Register for a

Game Developer Account

Gain full access to resources (events, white paper, webinars, reports, etc)
Single sign-on to all Informa products

Register
Subscribe to

Game Developer Newsletter

Get daily Game Developer top stories every morning straight into your inbox

Subscribe
Follow us

@gamedevdotcom

Follow us @gamedevdotcom to stay up-to-date with the latest news & insider information about events & more