I began working on my first game for the iOS platform approximately four months ago, when a recent international move from Egypt to DC had left me with a lot of time on my hands (read: temporarily unemployed). Even though I had graduated with a Computer Science degree way back in 2006, I hadn’t written any code since about then - so I wanted to use this as an opportunity to not only brush up on my programming skills, but also as a chance to finally make something! It had been so long since I had built something with my own two hands (or fingers, in the case of programming) I thought this would be the best way to utilize my time - and hey - if I got rich in the process I wouldn’t mind that one bit.
The concept was relatively simple - I was going to make a platform style game, set in space (hence with low gravity physics) with the object to get from point A to point B within a given amount of time (i.e. without running out of fuel). After reading several tutorials (if you are just getting started - there is absolutely no tutorials better then on Ray Wenderlich's blog) and familiarizing myself with the development environment and the basics of Objective C- I decided to proceed with the cocos2d game framework - later adding to it the Chipmunk physics engine (written in C) and Spacemanager as an Objective C wrapper for Chipmunk.
(For those starting out, there are several frameworks out there (and please use one of them if you are at all interested in making games) - but if you're coming from a C or C++ background like myself these were absolutely the easiest tools for me to pick up, and I was relatively comfortable with them in about 4 weeks or so. I have heard good things about Sparrow as well but I no experience with it myself.)
Now I realize that every developer out there already understands that the biggest contributor to a game not getting shipped is because they are over ambitious (and if you don’t - it's the truth) - but I thought that with my simple game mechanic - this shouldn’t be a problem for me - right?
Oh how wrong I was.
I coded up the whole core game mechanic in about 6 weeks time (this includes the 4 weeks it took me to become comfortable with cocos2d and all the rest). I was quite happy with my progress, and so I began to look into how I was going to go about implementing multiple levels in my game. I found a great library by Brandon Reynolds that essentially allowed me to provide an Angry Birds like level selection UI which was perfect - but when I started looking around for level builders that would make it easy / quick to create 60 − 80 levels for the game, I essentially fell flat.
From my research - it became apparent that either I would have to pay a few hundred dollars for a level editor that probably didn’t suit my needs, or I would have to roll my own. After quite a bit of research I came across several discussions that keyed me in on how I could go about making my own levels by creating them in Adobe Illustrator, and then parsing the resulting SVG file to output code that could be copy pasted into my program to create a level.
I spent about a week building exactly that, and in the resulting program the process was something along the lines of:
1) Create the initial level art in photoshop
2) Trace the art in illustrator using the pen tool
3) Run the resulting illustrator SVG file through my code parser
4) Copy the resulting code into my program, import artwork and run it in the simulator
5) Level Test - if there are any tweaks required whatsoever return back to step 1
Needless to say - two more weeks and my 3rd level later - I realized this was probably not the best way to go about it.
Essentially - through trial and error I realized something that I probably should have learnt earlier - beyond just the technical aspects of it - making levels is hard! And not the “I can read about this for a few days and code it up” kind of hard - its a combination of skill and art and being very patient with doing a repetitive task again and again and again and again. I now officially have a newfound respect and even a little fear of professional level designers.
For a while I toyed around with the idea of streamlining the level creation process − but eventually I realized that because this was my first game and I was working independently - all of this was just going to really kill my motivation towards shipping it out the door.
Im now well into my second game, this time using procedurally generated “levels” and increasing difficulty - and I have to admit - not only am I making a lot more progress, I am having a lot more fun. One day I will try to come back to this beast of a game - because I think it was genuinely fun to play - but for now, I’m quite happy making my levels in code.
(To read more about procedurally generated graphics, why its good for your game, and an in depth article on level design in general - you absolutely must read Lost Garden's post on the matter.)