Sunday, November 6, 2011

The next title: Bubble Bob

I started thinking of new game ideas quite soon after releasing Marble Manager. I wanted to implement some kind of puzzle game. I had previously downloaded Trainyard and it worked as an inspiration for me since it was also developed by a single indie developer. I thought that doing a proper puzzle with 100+ or so levels is possible even with as little time as I have.

I had already thought about an idea of splitting and combining bubbles with swipes. It fits perfectly to touch screen devices but I was not quite sure how the game mechanics would work. I needed to do some testing. First, I needed some kind of platform for the physics. Doing one yourself didn't sound like a good idea and I decided to go with Box2D that is used in Angry Birds and numerous other titles. It provided me the engine for collision detection and basic physics for the bubbles. I needed to tune it a bit since my bubbles did not have any gravity. I could have set the gravity to zero but then the other objects would not behave properly.

The next thing was to start analyzing the swipes. I built a sample setup where I had a couple of bubbles, some walls etc. I implemented the mechanics for analyzing the swipes and got the splitting of bubbles working. I also added some logic for merging the bubbles and there it was: the very basic part of Bubble Bob. I started adding some graphics for the bubbles, some backgrounds and created a couple of levels and it started to look like a game.

At this point I realized that I won't be able to create the levels I wanted with a text editor and raw XML files. I implemented a very simple and ugly Java editor for my levels and started creating new levels for the game at more rapid phase. I added the required elements to my editor as I implemented them to the game: fans and switches, bubble shooters, spikes etc. I decided that the game will have four worlds, 25 levels on each. I should have paid more care and attention on the level design though since I guess that was one of the weak points of my game. Some of the levels are a bit boring and some of them are too difficult for an average gamer.

One of the problems with my game development is the graphical side. I had picked Cocos2d as my graphics engine for Bubble Bob. It is an amazing library of functionality for animations, transitions, sprite handling... It was so easy to develop a beautiful game with it - in theory. I don't have an eye for good graphics and more certainly can't draw them. This became an issue with Bubble Bob since the story behind the game required an animated character, nice backgrounds etc. I decided to give it a try after all. I used Inkscape to draw the sprites and got the animations working on some level. One of the comments I got for my game later proved that I should not do the graphics myself:

"I got excited thinking it was a clone of this:
http://en.wikipedia.org/wiki/Bubble_Bobble

But what you have here does look like a very interesting game, I personally haven't seen this mechanic used before in an iPhone game.

I believe you could improve the game by redoing or hiring someone to do the graphics, there needs to be some kind of connection between all the graphics, at the minute you have this flat cartoon character, againist a 3d effects shaded wall background and then some red plastic buttons in the top corner, its all a bit confusing. It needs one central style to pull it all together and you could have the next Cut the Rope on your hands."

I have to say that after the release I was a bit tired and the cycling season had just started. I didn't want to spend more time on Bubble Bob at that point since the number of downloads was painfully low. I provided the game for free for some time to get some users for it. It would have been a shame if so few played it after all the work I had done. :) And hey, I was now a proud publisher of two iPhone games. I was ready to start my long summer of cycling and other activities.

At some point I considered doing something else than iPhone games. It's not the money (although I have to say it would be nice to earn some extra with it) but the fact that it is not very satisfying to make a game and see a couple of players playing it. Bubble Bob has been downloaded for 10k+ times (mostly while it was free). I did learn a lot from my mistakes with Bubble Bob: I definitely need someone else to do my graphics, I need to get more test players if I do any kind of puzzles and I need to create a game that is fun to play. Bubble Bob had some unique game mechanics in it but in the end it is way too difficult for an average gamer.

Right now, after a long cycling season, I'm already developing a new game. This time it will be much more on the action side. Someone said that you'll need to create ten games before you get it right. This is my third title so there is a long way to go... :)

The tale of Marble Manager

I wanted to try developing something on iOS and originally I wanted to do something like Enigmo. However, I shortly discovered Pangea Software had already done it and I skipped the idea. I also realized quite soon that it would be too big a challenge for a single developer to develop something of that magnitude. I wanted to do something simple enough to get it finished in reasonable time without sacrificing the rest of my personal life entirely - I still had my day job.

The idea for Marble Manager started to emerge: a simple bubble shooter game with some personal and unique twist. I didn't want to make yet another copy of the oh-so-popular bubble shooters - or at least I wanted to have something that makes it different. I came up with an idea of plus/minus signed bubbles (or marbles in my case). The point of those is that a player can build huge piles of marbles without removing them and the control of the removal is in the hands of the player as long as right type of marble pops in on time.

I started to develop the game using OpenGL on top of the iOS platform. Why OpenGL even if it is a 2D app? Well, it is relatively easy to render the marbles with OpenGL and I was already familiar with it. I also learned how to build user interfaces using the Interface Builder that comes along with the iPhone SDK. It was a bit painful first since I have a strong anti-WYSIWYG background and all the crap with Objective-C but I got used to it quite soon. After a while I got really comfortable with the editor (and more surprisingly with Objective-C) and making new UI screens was really smooth.

I found out relatively soon that the OpenGL approach I used was not good enough. The performance on iPhone 3G (or even on simulator) was not very satisfying once there were tons of marbles lying around. I could have optimized my initial approach a lot with sprite sheets etc. but I decided to learn something new: Cocoa and its animation support. I needed to change my approach on the core level since I was calculating the marble positions per frame and now I needed to find the path for the marble beforehand. I did the changes, optimized some parts and the marbles were flying around smoothly enough like I hoped for.

I wanted to add some other twist to my game and I came up with an idea of a level bonus: each time you get to a new level, you get one level bonus marble that has a number on it (the number of the level). All you need to do is to get rid of the marble as part of a group that has exactly same number of marbles as the number states. For example on level four, you'll have to build a group of the bonus marble and four other marbles when they disappear. This will give you a bonus that is really worth trying. There is a catch though: you may screw the rest of the game really easily if you start hunting those level bonuses. I received some credit for this feature and my test players thought it was the most addictive aspect of the game.

Alright, I was almost a publishing game developer but I had two problems: graphics and sounds. I wanted to do the graphics myself. I just picked one free texture for the background and used some Gimp magic to create the marbles. I also learned some beautiful Gimp tricks on scripting side and implemented an elegant solution for creating different colors of marbles. I had one script that takes the colors as arguments and one script that creates a set of marbles using the other script and the base image of a marble. This made it really easy to iterate the colors since I didn't need to modify them by hand in Gimp. I just ran the script again and I had a folder full of new and shiny marbles. This proved to be really useful in later phases as I figured that I'll need over 20 different colors to get the game difficult enough. I also decided to add a colorblind mode to help people with difficulties in seeing the differences between "blue" and "blueish".

Meanwhile, I started struggling with Finnish tax system and bureaucracy to get things right and avoid potential issues with the Finnish IRS. I was still optimistic that I might even earn something with this. :) As I got things ready and the game got its final polish, I also got my Appstore account working properly and was ready to launch. I learned about the retina graphics and decided to add them on the last meters. I didn't have an iPhone 4 at my disposal those days but I decided to count on the simulator results.

Finally, I got my game through and it was available in Appstore. I was so excited as I started getting some results from the sales. The first couple of days proved how difficult the market is (or how crappy my game was). I got twenty-something sales on the first 2-3 days and I have to admit it was disappointing. I still had my faith on the lite version I was about to release but it didn't change the things much. I don't know the exact figure but I guess the total sales of Marble Manager are lying around at 150-250 area so far. About 100 new games per day makes it very difficult to get noticed and as an indie developer I don't have any marketing resources. Well, Marble Manager didn't make me rich but it did teach me a lot on the new platform. :) More importantly, it gave me a chance to express myself in the area of gaming. I had finally published my first title!