One month ago I didn’t have a finished game and I just kept randomly reading articles and books on game development. Now, one month later I have two finished games where one is already published on the AppStore and the other is on the AppStore too (Universal app, Retina graphics, Game Center). How?
Those who procrastinate are doomed
I kept reading everyday #iDevBlogADay posts, game development postmortens, tutorials and books. Also studying new technologies and deciding which next technology should I choose.
All that without going to action and assuming that reading and understanding the others actions and errors would make me a game.
On one side there are the ones that use something on their benefit while getting better learning and understanding as they progress. On the other side are the ones that just procrastinate thinking that one day they will make the perfect game because they have read enough to start making a game.
Let’s take this advice from millionaires:
“[...] in today’s markets, regardless of the industry, you’re going to get bombarded with information overload. Massively so. And its dead easy to get lost in it and never get started. It’s even easier to convince yourself that while you’re consuming more information, you’re doing yourself a favor.
But here’s where you’re dead wrong.
Many people I interviewed were very strategic with their learning. Why? Because most of the time, they were on the playing field, PLAYING. Their lessons came not from a book, audio or dvd seminar, but from putting their ego on the line and testing it out in a real world scenario.”
The year is already finishing and I didn’t have a game. While the AppStore is everyday flooded with games from people that actually do something. Well… it was time to get to action.
The need to close 2010 with a game on the AppStore
Works on LH still in the first phase. According to my rough schedule it will take more 4 months to finish and polish the game – but I wanted to start the new year with a game on the portfolio. I tried to do a game on the 360iDev Game Jam, but finishing and polishing that game is going to take more than a month, and I don’t have that time, it’s almost 2011!
Game ideas
It was November 16th when me and my wife came to the idea of making a simple Christmas game with probably the most common and non original concept: presents and every kind of trash fall from sky while you move Santa Claus trying to get only the presents. Well, I thought: “that will be easy, just some programming, let’s do it!”.
But before I even started the catching presents game, I thought on another concept: why not a super original game where you control Santa riding his sleigh and drop presents on top of houses? Well, after a unique “christmas game” search on the AppStore I found 4 games with this concept. Not so original.
After some more searches, I realized there were no racing game involving Santa! So was born “Santa Race”: control Santa Claus riding his sleigh and race against other Santas. But not only that! The game would include a multiplayer, so players could chose a different color Santa and race while dropping presents.
Alright, game ideas decided but a hard task ahead: just a little more than one month left for Christmas and the challenge of having the game approved before iTunes Connect is frozen. If the game is published after Christmas, I could consider the project a fail. But luckily that didn’t happen.
Right decisions
Hiring an artist and early marketing
Since I had little time (Christmas was approaching and I was going to travel for 1 week) I wouldn’t try to make the art myself. After posting a freelance job on elance.com and odesk.com I ended up hiring one artist from odesk.com. I made a simple art requirements and assets table and sent to the artist. One day later she sent me the finished main character to Santa Race. On 19/11 I made a simple hotsite and wrote a post about the games (remember, Marketing before, during and after development). I also started a topic on the Touch Arcade forums to create some hype (oh well, is it possible to have hype on a Christmas game? Anyway anything is valid). The topic grabbed 880 views.
Programming
Due to some client work I only started programming on 20/11. By this day the artist already had sent me some more assets, so I wouldn’t need to prototype with black boxes, I could start to develop the actual game.
But before I started programming I realized that I wouldn’t have time to write a racing game. I would need to write the AI and path finding of the opponents. I also needed to write the multiplayer module. And wow, I never wrote a complete game by then and never dealt with AI. It would take more time studying than actually writing the game itself. It was time to rethink the game concept again. Well, the art assets fitted perfectly the concept of flying a sleigh and dropping presents. But the art style I asked from the artist was very different from the other Christmas games on the AppStore. Why not making it then? Even if it’s a common concept, it would be MY game. Ok, new concept decided, name changed to “Santa in a Hurry”.
On the same day I had a flying Santa with nice tilt controls, thanks to the amazing source code released by Alex Okafor (the developer of Tilt to Live) here: Lessons Learned in Tilt Controls.
I also decided to use Box 2D (with Cocos2D as the graphics engine), because the scenarios were basically going to be composed of trees and houses with irregular geometry, hence Box 2D was needed to deal with the collisions. I ended up using the technique described by Ray Wenderlich on his tutorial How To Use Box2D For Just Collision Detection with Cocos2D iPhone: Box 2D just for collision detection purposes, without gravity activated – you update your objects position manually and then tell Box 2D where they are and not the opposite.
Obstacles, present dropping spots and presents itself are all Box 2D boxes that moves with Cocos2D actions. Cocos2D makes this task very easy.
Ok, the game core was almost finished. But I still didn’t have a game, just framework elements.
Wrong Decisions
Level based
After I had the main framework set, I had to go travel for a week. When back the feeling of “no time left” was consuming me, and I decided to make a level based game instead of infinite gameplay one, because I thought it would be easier to write a level structure instead of writing a good random generator.
I chose Tiled as the level editor and I wrote an engine to read and load Box 2D data I set as properties on a Tiled map. I spent a full day writing this engine (I may use it for other projects, it works nicely. One of the best features is adding physical materials properties via Tiled which are correctly loaded as Box 2D attributes).
The only thing left was the UI. I didn’t have a Cocos2D project with a complete game workflow, so I had to write one from scratch that dealt with pause, resume, level loading, level browsing, main and options menu. This was the most time consuming part. The programming was finished, but I had no content because I chose a level based game.
I designed 10 levels by hand on Tiled and I tried to make them balanced enough. Some small ones and some long ones. Every level introduces something new or different. The game is fun and enjoyable, but an infinite gameplay and a race to an always higher highscore would be more appealing (and this feature is on its way while everyone is still trying to beat the levels).
After I worked on the level engine and the making of the levels I came to the conclusion that writing the infinite gameplay mode would take less time. That’s why I consider the “level based” a wrong move, because I will have to write the infinite mode now.
Worrying about music and sound too late
I decided to worry about audio just on the end and this was a terrible mistake. First: I didn’t have a music and second I didn’t have the sound effects. Googled for some time and found some amazing royalty free music from Kevin MacLeod and tons of royalty free sound effects in different sites.
Then the pain started: I just loaded the music and the game lagged completely. Then I added the first sound effect (dropping a present): it lagged even more. That almost killed my expectations with releasing the game before Christmas.
After some research I realized it was the format and sample rate. I sampled the music and effects to 22Hz and exported them to IMA4:
/usr/bin/afconvert -f caff -d ima4 {INPUT} {OUTPUT}
Audio fixed and the game was finished!
Marketing is the hardest and most time consuming task
On the end, I spent only 8 days making Santa in a Hurry. After submission, it went “In Review” in 5 days and then it was approved after 4 days. So far it sold a few copies and had only 5 star reviews, I can’t complain.
But since that day I haven’t stopped working on marketing the game: I made a gameplay video, I keep dealing with twitter, forum threads, trying to get reviews, and I’m running an iTunes Gift Cards giveaway (details on the official site). With a crowded AppStore and with big names going crazy on prices, Marketing is the most important and constant action.
Present Catcher in two days
Remember that I decided to make two games? When I hired the artist I gave her tasks to both games, so I already had the assets to the second game, which by the way was the original idea. The name? Present Catcher.
Since now I had a working gameflow framework and Present Catcher is all about random presents and “enemies” falling, I finished and polished it in 2 days. I also managed to make it Open Feint and Game Center enabled with Leaderboards and 14 achievements! (Santa in a Hurry is Open Feint enabled with Leaderboards for each level).
It also is an Universal application and has Retina Graphics! All that in two days.
Present Catcher is on the AppStore too, so I have two games in time for Christmas!
Mission accomplished
And that’s how I turned from “I want to make a game” to “I made a game! I made two games!”. Although I made holiday themed games that have short windows of attention (they are seem and valuable just for some days of the year), I’m completely satisfied. I learned a lot in just 10 days and now I stopped the frustration of just trying to make a game and actually MADE A GAME.
And that’s the final lesson I want to share: Stop talking, start doing.
Buy the games, please :D
This post is part of iDevBlogADay, a group of indie iOS development blogs featuring two posts per day. You can keep up with iDevBlogADay through the web site, RSS feed, Twitter.