Search This Blog


On Games, Violence & Censorship

True to form, Congress has reacted to the recent horror at Sandy Hook Elementary School with a moral panic, spearheaded by Senator Jay Rockefeller, seeking to blame video games for the massacre.

I worry that we game developers shoot ourselves in the collective foot (pun intended) when we engage would-be government censors on their own terms. Our argument, "You can't prove a causal link between our art and our audience's behavior, so we're safe!" essentially invites censorship as soon as such a link can be established.

Censors almost always justify their bans on the basis of public safety, stability, harmony, etc. The idea behind a free society with a free press is that we sacrifice those conveniences for the sake of individual liberty and the pursuit of happiness. That is, we believe that the free flow of information, the ability to discuss ideas (and to disagree) is better than any tyranny, no matter how benevolent.

Even though a work of art cannot directly cause behavior, certainly it can promote an idea. For example, reading the Bible doesn't make one a Christian; an individual bears the full responsibility of choosing whether or not to be a Christian, even in countries where the Bible is against the law.

While I am opposed to censorship in all its forms, I would also advocate for any artist to maintain a mature awareness of the ideas and values promoted by his or her work.

My own game, Elk Murder, uses humor and cognitive dissonance to convey an anti-hunting message. Gameplay-wise, it's an arcade-style shooting gallery replete with all the zoom animations, flashing lights, and floating digits gamers have grown accustomed to over the years. The surrounding narrative, however (particularly the deliberate substitution of the word "murder" for "hunting" throughout) continually reminds the player of the darker elements behind the game's commonly-accepted overt premise.

Free (ad-supported) versions are now available for iOS devices (in the iTunes Store) and Android 2.2+ devices (in the Google Play Store and Amazon App Store).

Rather than try to convince gamers to take a sudden, about-face interest in non-violent games, I believe we as developers can accomplish more with respect to unmasking the violent aspect of games through deconstruction and reduction to absurdity.


Elk Murder for iOS updated!

Check out the latest version of Elk Murder iOS, now available at your favorite price: GRATIS!

As far as we know, it runs great on the latest iPhones, iPads, and iPod Touches.

Elk Murder v.2.2 may be obtained for free in the Apple Store.


Super Elk Murder 2012 for iOS v.2.2 released!

Be sure to download the latest version of Super Elk Murder 2012 for iPhone, iPad, and iPod Touch!

As with all of our previous updates, we've not only further enhanced/optimized our own code, but also have taken advantage of some significant recent improvements to Adobe's AIR mobile platform.

Version 2.2 of Super Elk Murder 2012 can be found in the Apple Store:


Stage Orientation, iOS 6, and AIR 3.3+

Good stuff to be aware of if you're developing with the latest from Apple and Adobe:

This post on Varun Bhatia's AIR-o-Dynamics blog explains how iOS 6 doesn't send auto-orientation callbacks anymore, which means AS3's StageOrientationEvent listeners are worthless on the iPhone 5 and preventDefault() no longer works for ORIENTATION_CHANGING events.

Anyway, let's say you've designed your app with a landscape aspect ratio in mind, and let's also say you want your user to be able to hold the device in either the ROTATED_RIGHT or the ROTATED_LEFT position.

Previously you may have written an entire class full of listeners and preventDefault() handlers... but since iOS 6, that class doesn't work anymore. Turns out that since AIR 3.3 there's a much better easier way to do it.

In the application descriptor .xml, set the following:


Then, in your AS3 code, call:


Piece of cake! Works like a charm on my iPhone 4 with iOS 6 and AIR 3.5 (beta)... please comment if your mileage varies. Here are those links again, which I highly recommend for further explanation:

StageAspectRatio Enhancements in AIR 3.3
Orientation Changes in AIR 3.5


Remembering the Atari Lynx

Dear Jeff Gerstmann (c/o Giant Bombcast):
"The Atari Lynx is awesome -- I will not hear otherwise."
Thank you for the Lynx love in the latest bombcast.

I grew up in a Lynx family and credit her as the system primarily responsible for me becoming a game developer. The Lynx was the first 16-bit handheld (video and audio!); she was the first handheld to feature a backlit color monitor; she drew on Atari's impressive catalog of immortal games, and originated several brilliant IPs of her own; you could network her with like 17 other Lynxes (HA!); and she was designed to function not only in "portrait" mode (as with Gauntlet), but could even be turned upside-down and played left-handed!

Of course, she also GUZZLED batteries, and her AC/DC input jack (especially on the first model, the larger one, my personal favorite) was woefully flimsy and unreliable.

I truly loved the Lynx... sadly, the Big Guys with deeper pockets and better marketing won out in the end, and she died in humble obscurity.

Her passing broke my heart and I didn't touch another console until the Xbox came out.

It makes me very glad to hear her remembered fondly and with the respect she deserves. Thank you.

Matt Duffy


Olympic Badminton's Broken Meta-Game Design

Readers are probably already aware of a recent Olympic badminton scandal involving several teams intentionally throwing games and subsequently suffering various punishments and humiliations for it.

Without getting into too much detail about the strict definition of what a "game" is, let's just assume we can all agree on the idea that a game can at least sometimes be described as an activity involving players who attempt to achieve a goal while constrained by rules.

Bearing this in mind, we see how the players' desire for the goal, or intention to win, or drive to compete, or whatever you want to call it, provides the essential fuel driving the course of the game's events from start to finish.

badminton = broken
Players make games... and players can also break games, in several specific ways: by cheating (i.e., attempting to gain an advantage by breaking the rules), by being unsportsmanlike (i.e., attempting to gain an advantage by some means which may or may not be governed by the rules), or by being spoil-sports. As Johann Huizinga writes in Homo Ludens,
"The spoil-sport is not the same as the false player, the cheat; for the latter pretends to be playing the game and, on the face of it, still acknowledges the magic circle... the spoil-sport shatters the play-world itself. By withdrawing from the game he reveals the relativity and fragility of the play-world in which he had temporarily shit himself with others."
Obviously, being a spoil-sport is totally wack and represents a form of sabotage, an existential threat to the game itself. But I contend the following: in this badminton case, (a) the players were NOT being spoil-sports, and even if they were, (b) spoil-sports cannot and should not be punished except within the game itself.


With regard to the first point, the real problem here lies in the design of a meta-game that, in this particular case, served to undermine the foundations of the game by discouraging players from achieving the goal. That is to say, the reason these teams threw their matches was to give themselves a preferable position in the rankings for the next round of play -- what the hell's wrong with that? I call that "being smart." The way I see it, these players should be lauded as heroes for grasping the difference between tactics and strategy, for knowing when to lose a battle in order to win the war.

It isn't right to blame players when game designers screw up, and it isn't reasonable to expect players' sense of ethics or sportsmanship to pick up a designer's slack. Unfortunately, this kind of thing happens in video games all too often: a friend of mine, for example, was banned for life from XBox Live because he discovered a clever way to position himself outside the zombies' reach in Call of Duty, and the authorities elected to give him the boot instead of owning up to their failure of level design.

Granted, exploitation of the rules can and often does border on "unsportsmanlike" territory, but ultimately it's a game designer's responsibility to anticipate or discover those holes and figure out how to close them. A good design doesn't punish players for being clever. A good design trusts its rules to limit players and doesn't expect them to police themselves according to some nebulous, implied spirit of intent. Game design is a means to the players' end of achieving the goal, which means designers serve players -- not the other way around.


My second point is a corollary of sorts to the idea that a game ceases to be a game when the players are compelled to want or to try to win, or even to participate. Motivation for achieving the goal in a game is axiomatic; it is presumed, taken for granted. By way of historical analogy, you can put a Christian into the gladiators' arena, but you can't make him fight. Perhaps this final descriptor, that a game be voluntary, is equally as important as involving players and goals and rules.

Now, if I intentionally lose a baseball game or a boxing match in order to win some money, I deserve to be punished for that. But that isn't because I'm a spoil-sport -- it's because I'm cheating at a different game, the game of gambling! Obviously there should be sanctions against that sort of thing. But what if I'm just in a bad mood and I'm not playing my best? Do I deserve to be disqualified for that?

The choice to compete is the very essence of the player's prerogative in a game, and it's also at the heart of any significance that championships, victories, triumphs, and so on may have. When an athlete ascends to the top of the Olympic podium, it should be because he or she made the free choice to do whatever it takes, to put everything he or she had, into being the best in the world -- not because he or she was ordered or forced to do so by authorities.

Anyway, shame on the various governing bodies that have mishandled this whole badminton affair, and let's try to get the sport fixed in time for Rio 2016.


Elk Murder (FREE!) Now Available

Elk Murder icon
Duffy Games is proud to announce that there's now a FREE version of Elk Murder for mobile phones and tablets!*

You can find it in...
the iTunes Store -
the Google Play Store -
and the Amazon App Store - (real soon!)

While it’s obviously not as good as the $0.99 version (Super Elk Murder 2012) at least it’s FREE. Go on and download it, play it, click on the ads, review it, make your friends download/play it, make your friends review it, get sick of the ads and buy the Super version, review the Super version, etc.

We at Duffy Games hope you enjoy Elk Murder and sincerely appreciate your support!

* Available for Android (2.2 +) and iOS devices. If you don’t have a fancy mobile phone or tablet, see if you can borrow one for a few minutes.


Bring Me A Rock

Once upon a time, there was a Master and a Servant.

"Bring me a rock!" the Master commanded.

And so the Servant went out, got a rock, and brought it back to the Master.

"This rock is no good! Bring me a different rock!"

And so on.

Research as I might, I couldn't figure out the origin of this little story. My first exposure to it was the article "13 Ways To Be A Better Lead Programmer" by Jelle Van Der Beek, printed in the April 2012 edition of Game Developer magazine. Jelle calls it "the classic example of leading from behind."

Apparently the story is well known in business circles. I have even seen business types abbreviate the phrase "Bring Me A Rock" into an acronym ("BMAR-style management"). I guess for people who have actually studied business or management or leadership or whatever, it may seem like old news.

But if you're like me, and you hadn't heard the story before... it really resonates, doesn't it? I mean, in my experience, this is basically how the entire entertainment business works. "Pitching" may as well be called "rock-bringing". There are people out there, let's call them "executives," who get paid big money for what amounts to rock-rejecting.

Perhaps it's because a lot of executives in the entertainment business lack formal management training that they don't see a problem with their BMAR system. Perhaps creative types actually like playing the BMAR game because executives don't always know what kind of rock they're looking for until they see it, or at least until they've seen a few options, and hey, as long as you're getting paid by the rock, you may as well bring in a few.

But the whole point of the story is that BMAR is stupid. Obviously totally stupid! The Master and the Servant would both be much off if either (a) the Master laid out some clear specifications about the sort of rock desired, (b) the Master trusted the Servant's judgement about what sort of rock would suffice, or (c) some combination of (a) and (b).

Of course, this all depends on the Master changing his or her behavior. Servants just gotta do what they're told, make the best of what they've been given. My only suggestion for Servants is to rise up in some sort of glorious (but ultimately doomed to fail) Slave Rebellion.

Enjoy getting crucified, suckers!


Mute (an Adobe Native Extension):
The "Missing" API Doc

[UPDATE: As of AIR 3.4, you don't need an ANE to get the iOS mute switch to work -- just use the following:


and then

SoundMixer.audioPlaybackMode = AudioPlaybackMode.AMBIENT;

See this Adobe blog post for more.

(Original post follows anyway)]

In the interests of adding iOS mute switch functionality to Super Elk Murder 2012, I have begun digging into AIR Native Extensions, or "ANEs," a new feature as of AIR 3.

Basically, ANEs are little packages of native code that can be imported into a .swf just like an external .swc and may then be implemented like any other AS3 class. This is wonderful because it gives developers access to device-specific features that aren't included in AIR's platform-agnostic API.

Since I don't speak "native" and can't write the extension myself, I had to do what every programmer does from time to time: leech off the internets. And when it comes to the iOS mute switch (technically, Apple refers to it as the "Ring/Silent Switch"), the internets seem to agree on this ANE by a Spanish dude named Enrique David. ¡Muchas gracias, Señor David!

Mr. David was even kind enough to provide formal-looking API documentation for his ANE. As you can see, the class contains a single method, .Enable(), that takes one of three string parameters: SOLO_AMBIENT_SOUND (default), AMBIENT_SOUND, and MEDIA_PLAYBACK.

Unfortunately, Mr. David's English is terrible, and his descriptions of these parameters range between confusing and incomprehensible (hence "Missing" in this post's title). I decided I could give something back by posting the results of my own tests using these various options, with plain English explanations of what each one does -- YMMV.

Parameter Descriptions for
Mute ANE by Enrique David

Test Platform = iPhone 4 running iOS 5.1
"App" = Super Elk Murder 2012, an Adobe AIR app written in ActionScript 3
"Music" = the iPhone's built-in music player app
"Switch" = the iPhone's hardware "Ringer/Silent" switch, located on the upper-left side of the device.

  1. Standard Operation (i.e., without Mute.Enable())
    • Switch has no effect on App audio
    • If Music is playing when App starts, Music audio plays simultaneously with App audio

  2. Mute.Enable(SOLO_AMBIENT_SOUND) (default):
    • Switch mutes/unmutes all App audio
    • If Music is playing when App starts, Music audio fades out and pauses

  3. Mute.Enable(AMBIENT_SOUND):
    • Switch mutes/unmutes App audio, but only works once -- it has no effect on the first sound generated after Switch is flipped, nor on any subsequent sounds
    • If Music is playing when App starts, Switch has no effect on Music audio, and behaves as described above for App audio

  4. Mute.Enable(MEDIA_PLAYBACK):
    • Same result as 1. Standard Operation (i.e., without Mute.Enable())

  5. Bugs:
    • Switch has no effect if app is "backgrounded" and then "foregrounded" again -- this is obviously a pretty serious bug, and at time of writing I have no idea if there is any ActionScript workaround.
    • MEDIA_PLAYBACK appears to be completely useless.
    • Switch has no effect when headphones are plugged in -- probably not really a bug, but I thought it was worth noting.

Anyway, there you have it -- I hope this info can prove useful for somebody out there.


Extending Adobe Air by Oliver Goldman
Native Extensions for Adobe Air
Google Translate