Mr Speaker

The simple genius of Flappy Bird

One week ago I would have sworn that Flappy Bird was a case of beautiful dumb luck: some guy threw a bunch of out-of-the-box elements on a screen, and accidentally created a world-wide phenomenon. But after subjecting it to scrupulous analysis during the process of "accurately" cloning it, I discovered so many fundamentally important details that I’m no longer sure it was luck. I'm starting to suspect that Flappy Bird is a minimalist work of gamedev genius.

Hear me out. The magic lies in the way the developer, Dong Nguyen, so sublimely twisted the normal "rules" of game development. He took a handful of well-known, irrefutable game-making adages and threw them to the birds... discarding the usual "must-implements" and implementing the usual "nice-to-haves". But which rules to break, and which to follow? That's the $50,000-dollar-a-day question!

A quick overview of Flappy Bird, and its commercial release:

  • Frustratingly steep learning curve
  • Questionable collision detection
  • Overly heavy gravity
  • Terrible graphics
  • Completely static, unchanging game play
  • Downloaded millions of times, earning $50K-a-day.

Breaking bad

Aside from the whole "zillions of dollars" thing, that's a pretty nasty list of gamedev noobie mistakes. Any one of them will doom your game to failure. All of them together and you've got a potential "Big Rigs: Over the Road Racing" on your hands. There was powerful wizardry or witchcraft at work to transform such horrible flaws into addictive features.

Teeth-grinding pain is really the core mechanic of the game - it's what makes you instantly giggle, then start swearing. Thanks to the "questionable collision detection and overly heavy gravity" it's really tough to get the bird through the pipes.

The twist is that it's only so nasty because most games cheat for the player. "Normal" games make things easier by having collidable areas that are smaller than their visible boundaries: if you're overlapping an obstacle by a couple of pixels then the game says "Nah, you skillfully avoided that!" and the player feels like they just did some awesome ninja-move and that they are special snowflakes...

Flappy Bird offers you no such false niceties.

Same with the gravity: games will never serve up Earth's 9.8 meters-per-second-per-second... real life is heavy, you know. Games like to let things float and drift and give you more time to react and breathe. None of this nonsense hand-holding in Flappy Bird. This is the real world, with real gravity - you grind and you grind and you grind. Make one tiny mistake, you pay for it. It's that simple. No one to blame but yourself.

But what about those graphics? Very basic, to be sure. But the most important visual element - Flappy Bird himself (I think it's a him) - still manages to work on an aesthetic level that enhances the core mechanic of making things difficult.

Before the action begins, Flappy Bird is just an expressionless duck-bird-thing. But during game play he becomes a duck-bird-thing that is reaaally struggling. He's trying so hard to keep his head up high, he's on a slight angle that makes it look like he's doing a sad face, his little wings flap double-y fast when you tap, and stop flapping completely in free fall, and they're so small that they aren't very effective at facilitating flight.

All of these are aesthetic choices that reinforce the mechanic: life is tough. Every inch you gain in a real achievement.

Send in the clowns

Unimaginative, plagiaristic gamedevs everywhere saw how simple the game looked (and how much cash it was netting) and predictably concluded "Hey, I should make a clone!". So I made a clone (But with typing instead of tapping). Then me and a couple of awesome guys at work decided to run with that and create a clone that felt really close to the original.

After making several iterations of improvements we had something that looked good, was aggravating, but was not satisfying or fun. The more I tweaked, the worse it seemed to get. I decided it was time to delve further to see what made Flappy Bird flap so high.

The dollars are in the details

Though it broke a lot of rules in establishing its core gameplay, Flappy Bird didn't go completely rogue. To the contrary, it superbly executed some of the oldest tricks in the gamedev book:

  • "Easy to learn, difficult to master"
  • Satisfying and precise controls
  • Incentives to replay and improve
  • A whole bunch of "juice"

Like chess, or the Macarena, Flappy Bird is easy to learn but hard to master. It throws you out of the nest with a single instruction consisting of a finger with the prompt "TAP" and an iconic flapping bird taking flight. Follow this simple guide and the game starts - your command sends the bird into the sky and it's on! Though you plummet straight to your death.

Then the fantastic part: you see what just happened and say "Ah. I get it." and play again. This time you fly a few flaps until you hit your first pipe. Again you say "Ah. I get it.". Already you've played twice and already you've had a big win - you figured out this entire game all by yourself, really quickly. Man, you're good at this!

If you've ever played thousands of games over your lifetime you can probably guess that one of the hardest parts game design is effectively teaching your users to play. Seriously hard. Flappy Bird does it p-e-r-f-e-c-t-l-y.

The only thing harder than teaching a user to play, is giving them good controls.

Flappy Bird might be no Super Meat Boy, but it does give the player the similar feeling of control... if they die then it's not the game's fault. The way this is accomplished is via the bird's reaction to a tap. Where as the developer implemented Earth's gravity when falling, he breaks the laws of physics when flapping. There is no slow-down, just an immediate upward force - the bird leaps the millisecond you tell it to.

Next, gravity starts to do it's work. Flappy Bird slows down, seems to hover for a second, rotates, and begins to fall head-first towards the ground. The hover-then-rotate action is not a cosmetic enhancement: it's integral to the feeling of control and the playability of the game. It's what allows the player to very precisely predict the "fast-falling-tap" without banging your head.

Even when you do bang your head there are a bunch of incentives to make you try again.

By the time you reach scores of 2 or 3 you start to notice the game over screen. 50% of the board is reserved for a huge blank space under the caption "medal". Despite all your achievements you still don't deserve a medal. As you struggle to new highs: 3, 5, 8... still no "medal"s... you may not know what one is, but you know you want one.

The first time you claim your shiny gold prize you're feeling pretty awesome. You're champion of the world! It's only some time later, when reach 20, that you realise that your original "gold" was nothing but cheap bronze after all. There's still a long way to go.

Even after you've claimed the penultimate platinum medal (gold wasn't the best! It was another trick!) it's not over. You now face the real challenge: yourself. Knowing you've passed your own high score in the middle of a game is exciting, and when you die your score starts tallying up from zero - your previous best is still displayed at the bottom. You watch with smug satisfaction as your new score rips by, and the old "best" joins in the animation. You're filled with that winning feeling.

This is a tiny feature I missed from the first version my clone. Beating your ex-high-score seemed deeply unsatisfying.

There are a couple of other nice little touches that I didn't notice until I was doing some side-by-side comparisons too. Did you know that there's a random distance between your start point and the first pipe? It's not a big range (give or take a screen-width of pixels) but makes things imperceptibly more interesting, even after you've played it a lot.

Finally, a feature that I think it very considerate: when you score a 0 there is no pause between the "Game Over" popping up and the replay button appearing. No time for wallowing in shame... just get straight back up on your horse. Or bird. or duck, or whatever it is.

Certified genius or authentic wacko?

In the end our "Wafty Man" clone was close. Didn't nail it - but close. Currently I have a lower high score in Wafty Man than Flappy Bird (88, in case you're wondering). Though that's in version 1.0: only after pushing to the App Store (and completing this exhaustingve analysis) did I notice a couple of important and rage-reducing features.

That's why I think Flappy Bird is quite brilliant. It was heavily criticized for ripping-off other games: but similarities to games living or dead is purely coincidental. If you change even the smallest detail it's no longer Flappy Bird. It's just horrible and aggravating without being strangely satisfying and addictive.

So in conclusion, the fact that this myriad of tiny pieces worked so well together makes Flappy Bird either a stroke of unfathomable luck, or a symphony of gamedev genius. Whichever, I gotta go... today I break 100.

4 Comments

  1. Good job on it, you’re really close.

    The version in iTunes doesn’t yet have the feature where the old “best” joins in the animation, correct? I hadn’t noticed that with the original, but I’ll be paying attention to it now!

    Anyway, like I said, good job on what you’ve done so far. I hope you keep up trying to perfect it, and it would be awesome if you open sourced it as a learning tool.

    Thursday, February 27, 2014 at 6:07 am | Permalink
  2. Good catch Bill! Yeah, it’s version 1.0 in the app store at the moment, but version 1.1 is “in Review” – so it should be up soon. That fixes the animation, annnd I made the pipes 2 pixels further apart. 2 pixels changes everything ;)

    I’ll be putting the code up on github sometime today, after I do a 10 minute “clean up the most awful rushed parts”

    [Update: source code on github, yo!]

    Thursday, February 27, 2014 at 6:01 pm | Permalink
  3. This is good Sir.

    Thursday, February 27, 2014 at 9:44 pm | Permalink
  4. Since you asked, Electra for Android:
    https://github.com/Wizcorp/Ejecta-X
    https://github.com/yoyeung/Ejecta-android

    Monday, March 3, 2014 at 4:19 am | Permalink
Captcha! Please type 'radical' here: *
How did you find this thingo? *