After a few days of Nexus One ownership I began looking for games, preparing to be hypnotized by games as amazing as the Nexus One itself. After my first search, the list of games I found was the following: Robo Defense Lite (an ok tower defense game), Labyrinth Lite, Poke A Mole, Pinball and BreakTheBlocks Lite. The list of games after the top five were similar and included many more brick breaker, whack-a-mole, snake and pong games.
Underwhelmed hardly describes how I felt…
Being a computer programmer with notable skillz, I thought “I will make an amazing 3d game on Android and show these other Android developers how its done!”. After a weekend of tinkering, researching and compiling code, I can with 100% certainty say the reason why there are so few good games for Android is because it is nearly impossible to program good games without losing your sanity. I felt like the Charles Bukowski of computer programming by the time I was done.
While iPhone, webOS and Windows Mobile all have OpenGL ES 2.0 available, Android is stuck with openGL ES 1.0. The recommended way to write a string onto a 3d object is to make the text you want to draw a texture. So “game over” could be one texture and “press start to continue” would be another. But to display something that changes, like your score, onto the side of a rotating cube you need to write your own text renderer (ugh).
Android exposes OpenGL ES 2.0 which makes drawing text easier, but you need the NDK (Native Development Kit) to do that. Working with the NDK reminded me of working with Symbian v3 five years ago; lots of config files and directory structuring, like it was designed by engineers who spend far too much time in a terminal and think GUI’s are “nice to have”. Because I was running Windows, I needed to install Cygwin to build the native libraries.
After an hour or so setting up the NDK and prepping and catching up on this Java JNI business, I was ready to run the openGL ES 2.0 demo that came with the NDK on the emulator. But for some reason, I kept getting an error that simply said “The application xyz has stopped unexpectedly. Please try again”. After the relatively tedious process of setting up the NDK and running the sample app and getting vague errors, I retraced my steps. I thought I screwed up my NDK during install or I somehow screwed up the sample’s build process. I spent hours trying to resolve this only to find on a forum that the emulator doesn’t do openGL ES 2.0. I had to test the app on my Nexus. No debugging and a longer than necessary process getting my .apk onto my phone (not to mention the number of times I would crash the phone testing my .apk).
That was bad enough, but the kicker was that after hours of hair pulling frustration, the sample app only showed a static 2d green triangle and a background that went from black to white. A 2d sample to demonstrate openGL ES 2.0, the defacto mobile 3d library. It would be nice to have a few Nehe demos included instead (though props to INsanityDesign for putting some together for openGL ES 1.0)
Am I going to be developing an amazing 3d game that is going to make people feel like they were punched in the face because it’s so amazing? Not on Android anytime soon.
[a Cobworks commentary]