Bugfest is an addictive 2D bug squishing game designed primarily for mobile devices. The goal of the game is to survive the incoming waves of bugs for 90 seconds, squishing the red ones and letting the green bugs go through unharmed. While the game is mostly designed to be family-friendly, it also features some game mechanics for the more competitive players such as squish streaks, achievements and leaderboards.
It was developed in my spare time with the Unity engine and runs on iPhone and iPad in HD graphics, with Android support coming very soon. A free web player version is also available on popular gaming sites such as Kongregate.
One of my main objectives with this project was to create a small but highly polished game from start to finish and learn more about the process of releasing a game on the AppStore.
The initial development team consisted of a 2D artist and myself as programmer. We worked on the game during our limited spare time for a period of six months. In November 2010, I left my previous job at EA/Dice to join Fabrication Games, a small but rising mobile game studio in Stockholm.
I made a publishing deal with them which included marketing costs and extra budget and resources to give the finishing touches of polish to Bugfest. We submitted the game to the AppStore three weeks later, on December 21st. At the time of writing, Bugfest has been downloaded over 3000 times in about two weeks.
In this postmortem, I would like to share with some highlights of the development of Bugfest that I hope you will find interesting. First, I will address the positive notes such as Unity, scope management, polish and online features.
In a second part I will cover the main challenges and roadblocks we encountered, ranging from game design and technical performances to marketing woes. In the conclusion, I will reflect upon my goals and achievements with this project and share some extra tips and takeaways that I collected throughout the development period.
What Went Right
1. Using the Unity Engine
I chose to develop Bugfest with Unity for several reasons. First of all, I was quite familiar with it and, I admit, quite in love with it. It's simple, fast, flexible, stable and offers a fantastic iteration speed.
We had a working prototype of the game up and running on my iPhone in less than a week. Unity took care of all the Objective-C and XCode plumbing I didn't care about and allowed us to focus on polish very early on. The stability on device was rock solid, and performances were great once I got more familiar with the limitations of the iPhone and iPad hardware (*cough* fillrate! *cough*).
Now it wasn't all perfect of course. Unity doesn't natively support 2D rendering (no dedicated sprite rendering system). I had the possibility to use a commercial plugin called SpriteManager2 for that purpose, but since I didn't need animated sprites I simply wrote my own sprite batch renderer with Unity's API and saved a few extra bucks. In retrospect, I should probably have chipped in and saved a couple of days instead! :)
The ability to deploy to other platforms with Unity was also a great advantage. It took us less than an hour to get a test build of the game up and running on an Android phone. We also released a free web-browser version of the game on Kongregate that we hope will bring more visibility to the game.
2. Scope Control
Having succumbed to feature creep quite a few times in past projects, I paid particular care to keep the scope of the project under control throughout development. I had to constantly remind myself that Bugfest was a $1 game meant to be small and simple.
Some well known software design wisdom such as “Keep It Simple Stupid”™ and “Don't Repeat Yourself” turned out to be quite helpful in making some game design choices. Whenever I was tempted to add a new feature, I would first ask myself how much more it would contribute to the end user experience and would discard it if it would require any kind of special explanation. I would also check if this apparently new game mechanic wasn't already present in some other form.
Of all the initially planned features, only the squish streak system was added halfway through the project as a mean to reward players for being accurate and not spamming the touch-screen mindlessly. It also provided an extra challenge for the more competitive audience.
3. Level of Polish
Offering a polished game experience was one of our main goals and I am quite happy with the results we achieved. The overall look and feel of the game seems to be appealing to everyone who has tried the game, and it looks particularly nice on iPhone4 and iPad thanks to the high resolution textures. The hand-drawn loading screen and main menu background were added quite late in the project's lifetime but definitely contributed to the quality of the final product.
The animated logo and buttons in the main menu were implemented effortlessly with Unity's built-in key-frame animation system. I find this extra bit of polish paid off as it made the menu feel much more alive and helped bring attention to the various interactive UI elements in an ordered fashion.
We also made several iterations on the icon of the application, as we believe it is a critical piece of the AppStore puzzle. It's literally the first element of the game people see when browsing the store, and you definitely want to do everything you can to grab their attention there. The human brain easily picks up on eyes and faces, so we put particular emphasis on this. We experimented with different color schemes and tried them out in context by overlaying the icon on several screenshots of the AppStore and selecting the versions that stood out the most.
4. Achievements & Leaderboards
For a rather small-scoped game like Bugfest, achievements and leaderboards can add a lot of replayability for the more competitive players. It was quite fun to come up with some original achievement names, with Bugabaisse du Chef and Disgruntled Entomologist being my personal favorites.
The implementation of achievements and leaderboards was quite straightforward with both OpenFeint and GameCenter.
What Went Wrong
1. No Lite Version
Due to the streamlined design of the game, we could not find any non-core gameplay element to remove in order to make a demo/lite version for promotion purposes. This is certainly hurting our sales and visibility in the AppStore.
2. Rendering Performances on iPad
The quite limited pixel fillrate and alpha blending performances on the iPad were a bit of surprise and forced us to do some aggressive optimization of our art assets and rendering code. Thankfully we managed to solve these performance issues by doing the following:
Using more compressed textures
Turning off alpha-testing (it seems to be a performance killer on iOS devices)
Simplifying the user interface to reduce some draw calls
Using a tighter mesh instead of a simple quad to render the grass on each side of the map. This mesh more tightly follows the boundaries defined by the grass, thus minimizing the impact of fully transparent pixels on the fillrate
Removing some fullscreen effects
3. App Size above 20MB at launch
We got a bad surprise on the launch day when we saw 27MB as the size of the binary in the AppStore. We were aware of the 20MB limit to download applications over 3G, and took steps to keep it under 20MB before launch as it supposedly has a big impact on sales.
However, our method to estimate the final size of the binary was flawed: we were using the zipped size of the whole application bundle. It turns out that the correct formula was: size of the unzipped binary + size of the zipped content.
We then quickly tried to find what we could cut out in order to get back under the 20MB limit. Initially, we were quite worried as it was quite difficult to find anything to cut. Bugfest being built as a universal app turned out to be a problem as Apple wouldn't allow us to go back to a separate iPhone and iPad version. OpenFeint seemed to be the only candidate for removal, as it was taking up quite a bit of space due to its requiring both the iPhone and iPad assets to function as a universal app.
We were about to switch from OpenFeint to GameCenter until we found out that supporting both the ARM6 and ARM7 architecture was doubling the size of our executable. Switching to ARM6 only allowed us to get back under 20MB without sacrificing texture quality or functionality. After a quick small update, Bugfest is now weighting in at a comfortable 15MB on the AppStore.
This must be a common one! Here's a list of some of the main things that we did wrong:
Very weak PR build-up before launch
The trailer video was made in one day just before launch. That wasn't much time for polish for something so important.
Didn't land any previews/reviews on the major review sites
Launched very close to Christmas with the AppStore being literally swarmed by EA titles and advertising. We did however benefit of a nice sales spike of 450+ downloads on the 25th of December
We also didn't include features such as a dialog box prompting the user to rate and review the game or more viral functionalities that reward users for inviting their friends to the game. These features are quite important to help the game market itself and it was a mistake to leave them out.
Bugfest was definitely a labor of love for me. I am proud of having developed a project to completion and created a final product that was very close to my initial vision in terms of gameplay and polish. It was also a great learning opportunity: I got to work with the iOS platform for the first time and got a taste of how important good marketing is. The Unity engine proved to be as rock solid and pleasant to use as I expected and was definitely central in enabling us to deliver a polished game in a short amount of time.
Here are some personal tips and takeaways I gathered from this project, in no particular order:
The current AppStore market is really tough and competitive. Don't come in expecting to make millions on your first try, or make sure you bring your marketing genius (and rich) cousin along!
Start building PR a few weeks before launch. Build some hype, have some sites make previews of your game.
Your game should be able to market itself. Add viral features, such as various types of rewards for inviting friends.
Developing the user interface takes a lot of time, and it's really boring! Don't underestimate it when planning your schedule.
Adding some telemetry can help you get better clues of what your users do with your game, so that you can do good data-driven decisions on what to improve in your next updates. This is something I plan to add to Bugfest and future titles.
A lot of sites pick up on price-drops. It could be interesting to launch at a price higher than $1 and go down from there.
When assigning point rewards to your achievements, don't assign all of them on your first version! Save some for future updates where you may want to introduce new achievements. Once your game is released, it's too late to change!
If you are doing a $1 game, keep this in mind when working out your budget and developing your game. Given the current state of the AppStore, I believe it's smarter to release 10 games in 10 months than a big one in 10 months.
I hope you enjoyed this post-mortem and I look forward to reading your comments. You can contact me at email@example.com. And make sure to give Bugfest a try, it really shines on iPad! :)
You can find the original postmortem on my website.