Last week I posted a couple Casey’s Contraptions screenshots as intro to yet another Core Animation technical rambling. One of the images, my latest try at designing the “Level Completed” screen, got a few interesting comments from other designers, both in the here and on Twitter. These screens take a long time to get right, and although people playing the game usually spend just a few seconds on them, they make the difference between a seamless experience and one with harsh continuity bumps.

Today I wanted to review a few of my own “failed” designs for Casey’s Contraptions. And I quote failed because these are a normal byproduct of development; to know what works, you need to create, analyze, and finally discard lots of things that don’t. Discarding is hard, but is also going to help me explaining another pet peeve of mine: the widely accepted concept that design is all about the looks. You will notice that some of the discarded designs are prettier than the final ones, and I will try to explain why they were still a failure.

A final disclaimer: Casey’s Contraptions is still pretty much in development. Whenever I say “final”, read it as “current” :)

Continue reading Designing Casey’s Contraptions, Part 1

Progress this week has been slow on most of my projects. Noel and I were working on Casey‘s tutorial, then we started implementing more objects so we can create some more levels and start beta–testing. Sneak peek:

Some of the new objects introduced this week.

I also finished the design of the “Goal Completed” screen! This is a big one for me, mainly because the damn thing has changed so many times during the life of the project I got like a dozen different designs archived! That may require its own post, but here is the final one (as of this week):

Final(?) Level Completed Screen

Since obviously I am not involved in enough projects already, I decided to promote yet another Twitter community project: #iSketchADay is an original idea by Craig Sharpe (the artistic half of Retro Dreamer) to promote more doodling. Join with your own sketches on the Twittverse.

My “DEMAND REAL CHARACTERS” campaign for #iSketchADay

I also continued working on Evil Project #7. After some more Twitter voting it even got a name: Elephant Run!. Owen‘s suggestion, “Elephant Run: A Banana Bonanza” was my favorite by far.

Continue reading Space-Time! (Core Animation Games 2)

So you want to make a 2D game full of real 80s technology: sprites, tiled backgrounds, parallax scrolling, and all that goodness. The last console you played a 2D RPG game in, back when you had hair, is long lost in the rat’s nest behind your TV stand. Your iPhone’s processor can run circles around that old console but you wonder… how do I do it?

Now, if you were that kind of person, you would go to the platform’s documentation site for answers. But instead you check with Google, and after a few visits to random websites and auto–cloning forums you reach the following consensus with the rest of the internets:

  • You need to use OpenGL for the ultimate in both power and beginner’s frustration.
  • Or better, use one of those open source frameworks that will make your transition from ActionScript a breeze. Their forums hopefully will answer any questions that the non–existent documentation cannot. Cocos2D seems popular.
  • The losers that read documentation keep asking about something called Core Animation, but wiser and more anonymous users know better than to trust Apple “technologies”. Core Animation is slow, buggy, and inappropriate for anything harder than a match–3 game.

I say, not so fast. You see, I have a problem with thesis that are never proved. I especially don’t get what in that screenshot you sent me of three bats, a rat, and a stick figure is so sophisticated that requires low–level access to the hardware. So let me present you a different thesis, and then let’s try to prove it:

Thesis A: Core Animation is just fine for most 2D games.

Before we begin: no, I have no idea if thesis A is true or not. I am making it up as I go, so consider it an exploration of the capabilities and limitations of Core Animation and related technologies. If we don’t end up with a whole game, at the very least we will gain some insight into how this fundamental part of any iPhone app actually works.

Continue reading Frame-by-Frame Sprites with Core Animation

It took me a while this year to go through the dozens of Thin Mints, Do-Si-Dos, and Samoas I secured last spring. I remember how hard I fought with empty promises and unconvincing pouts for just “one more box”, how I pleaded and bargained with those little evil cookie-keeper brats and their greedy families. I even stashed my very favorite Tagalongs in various hidden locations around the house so they would last longer. I was not letting anybody else, at least willingly, participate on that forbidden pleasure of licking layer after layer of sugary goodness.

At the very end, just before that last sinful bite, I paused full of doubt. I looked at that delicious cookie with anticipated regret for a while. But I could not help it. I gulped it just like all the ones before it. Just as last year, all good things get to an end. Would they taste as good if I had them all year round? Probably not.

Continue reading Cookies

The other day over breakfast I was telling my wife about a Mac application I was prototyping. I had spent all the previous day making a global hot key bring the app to the front, with its main text field selected so you could start typing right away; then I had another key make it disappear returning focus to the application you were on before, and to whatever text you were typing or had selected at the moment. I made it also behave with Spaces and Exposé, and as you can imagine I was pretty happy about my progress. I then reflected out loud if any Windows developer would even think about all these little but important details. She pointed out that I should be more tolerant towards all the Windows users out there. As usual she was right, but annoyed I said: ‘user interface design is not about tolerance’.

The thing didn’t ring true then, and it has been haunting me since. What is interface design about then?

Continue reading Habits for Better Design

Today is Mystery Coconut’s second year anniversary, so I thought it was as good a time as any to do a recap, and then go through my plans for the immediate future.

Continue reading Going Indie

You have been rejected. Last Friday you thought you had hit bottom when you got rejected by the barista of the day in account of you flirting with the barista of a different day that showed up out of turn to, surprise, have a coffee. What can you say, you got confused.

But things just went down hill from there. On Sunday your main competitor, Mystery Bunny Games, publicly criticized you on their blog! They pointed out that all that Telnet business you were babbling about made your applications waste memory, increased the size of your binary, and misspent time initializing frameworks that were never used in the final release of your app. They called it a disservice to the users, that have to suffer slow, bloated apps cause some lazy developer decided to add thousands of lines of code just for his own convenience. Ouch.

If that was not enough, this morning you got rejected again… by Apple! They discovered they could use your binary to upload Lua scripts and run all kinds of hacks on the device. Somehow they didn’t thought that was cool.

But you have learned the lesson: never follow any advice you get on the intertubes. Now, let me explain you how you can fix two of those three problems.

Continue reading Conditionally Linked

You have been staring at that email for a few days now. Is only 4 lines long, but boy, you are at a loss on how to reply. This has never happened to you before, and no quantity of coffee ingested today, visits to the barista of the day, or cookies stolen from the grasp of old ladies in the grocery store’s free samples isle has helped at all. Is like one of those Choose Your Own Adventure books. You can see your 3 options at the bottom of this page: send (another) polite response, ignore it, or make fun of it on Twitter. But years of practice looking pages ahead tell you all these are going to resolve in a really short paragraph followed by a centered, 14 point, Souvenir Bold “The End”. And you hate Souvenir Bold. The email reads:

I am in love with #nameOfCancelledProjectHere#!
Can you send me a .app or .ipa so I can play it?
I am seriously so mad right now!!!!

There you have it. A true fan of your work. Somebody that got really excited about a 1–day prototype by just reading about it somewhere online and looking at some awful screenshots of programmer art. If you compare it with the crap your friends are giving you lately about your projects this person is the best thing that ever happened to you! And he is seriously so mad right now. Not with one, or two, but with four, four exclamation marks! He was your best fan, but now he is so pissed he will forever be your worse detractor.

Continue reading Shelve it

You are not feeling the love. You keep looking at your creation in the iPhone’s screen, and is not clicking. Your best friend has been checking it out over your shoulder, and be keeps chugging his beer without a word. Finally he mutters something about it not being that bad, then goes to check out what’s all the excitement coming from the table in the back of the bar.

Not that bad! You cover your eyes. “Not that bad” is the kiss of death in the freaking App Store! You can already see your game  disappearing into the tide of forgotten apps, maybe get a few downloads when you finally make it free and it gets featured on And the thing is… you don’t know why! Why is it so bad when it has all this cool stuff in it?

You remember when you started it. You were dating that daycare teacher, and inspired with how her sweet voice was always punctuated by the sudden screech when catching her rugrats doing something behind her back, you added to your game dinosaurs farting rainbows while juggling baby’s heads. That didn’t work out; actually, she got a restraining order. But the next date was such a great cook… you added the fire meatball shooter. Then it was the gothic girl (you added the fatty lipid-vampire), then the one in the military (the terrorist-skewer flag poles), then the veterinary (bi-headed chickens), then the farm girl (beheaded chickens)… Is all there on the screen in all its full-color animated glory.

You turn the iPhone off (for some reason is always running out of battery lately), and go after your friend see what’s up with all the laughing. What the…! Is that a gal wearing a mask that says “Evil”? Oh gosh, they are playing a board game in your bar! Disgusting! You knee your friend and point to the door, but is already too late; he is in perpetual snorting/chuckle mode now. You hurry out before it gets to you.

Wait a moment there buddy! Are you saying you don’t like board games? Aren’t you creating a video game? Not the same, eh? You sir are missing out! There are so many games out there with many interesting mechanics: board games, card games, dice games, role-playing games… They have been around for a while too, so I think they can probably teach you a thing or two about how to make your iPhone video game better, you know. Ah, now you are listening! OK, let me just explain you a few things about board games that can be applied to your designs.

Continue reading Learning from board games

Another week, another iOS release, another multi-gigabyte SDK download. You have been sitting all day in front of nondescript backdrops under the rain, coffee mug attached to your paw. Your doctor left a message saying your liver looks like last year’s filter from the hospital’s coffee vending machine. You lost your Barista of the Day 2010 Tracker Calendar and now every time you show up there is a dude with an apron behind the counter. iPod keeps shuffling once and again over the sad parts of the Start Wars soundtrack. You have to accept it. You are stuck again.

It all started with the interface. You were there positioning buttons, entering coordinates by hand: the score label, the Menu-pause™ widget, the alertness/drunkenness meter… it really started bugging you after having to re-compile for the tenth time just to find your designer (that is, you on Fridays) had decided to change the size of all the graphics. Then there was the turtle. I mean, how difficult do you think it is to calculate the mass of a freaking turtle? But somehow anytime you tried to change it the physics engine either made it go through the floor or bounce like crazy. Gosh man, didn’t we go through this already? Except your fancy level editor was of no help with any of this. You see, I may run the risk of repeating myself, but maybe is time to revisit the advice I gave you. First you need better tools.

Continue reading Tweak away