Tuesday, December 31, 2013

Blobby Volley for Android: Postmortem

It's been two weeks since I released my first full fledged Android game: Blobby Volley. Now it's time to reflect on the creation process and learn from it. I'm very satisfied with the results, but my next game can always be better. Perhaps you can learn something from it as well.

It took me 129 work hours during 8 weeks to implement the game. On average, I worked for 16.125h/week. That's not too bad, bearing in mind the initial assumption that I would commit between 10 and 20 hours a week. I could have probably been more efficient, because I didn't have a full time job at this time, but this amount proved good enough to keep me motivated without making me tired. Also, those 129h don't include reading AndEngine for Game Development Cookbook (I'm still only half way through it) or thinking about design problems (e.g. what the menu should look like, how to implement the AI, etc.).
With my next project, I'd like to stick to some schedule, istead of fitting the work hours whenever I have a free moment. Waking up and starting earlier might help as well. I really enjoy working in the morning and it's usually my most productive time, but getting up after a long evening with friends or a tiring football match is not always easy. I'll have to work on it.

What you're probably the most interested in is how good the game is doing on Google Play and AdMob (note that the data is from two days ago because of the statistics delay on those sites). It has 1266/3044 current/total istalls, which is definitely my best result when it comes to the daily growth. It increased by 178 compared to the previous day.  I already made $10.22 on ads: $4.90 and $5.32 on banners and interstitials respectively. The CPMs are $0.50 and $0.56, which is not too high, but I noticed that they're rising as well, so perhaps the Google's algorithm needs some time to adjust. I want to try AdBuddiz in the near future, because I like their ad style and they promise high CPMs. I'll report on that later.

As to the tools and resources that I used, I'd like to mention every single one with a short description:

AndEngine - an Android engine for 2D OpenGL games. It works really fast and is easy to learn (I didn't know it when I started making the game and I managed to learn it in the process). The bad thing is that it lacks an official documentation. However good the code examples might be, they will never replace a detailed description of how the code should be structured. There aren't even decent JavaDocs. I was forced to read online tutorials, but sometimes they weren't enough or were simply outdated. Finally, I got the AndEngine for Game Development Cookbook, but I kept wondering why they didn't publish it for free as the official specification. As a result of bad instructions, you get errors such as NullPointerExceptions when unpausing the game, which could easily be prevented if you had known the solution beforehand. Don't get me wrong, AndEngine is still a great tool to use. Just bear in mind that it has drawbacks as well.
I might try libgdx with my new project, just to be able to compare the two of them and perhaps release for iOS as well. As for now, I don't have any Apple devices and I'm not ready to pay $100 to be able to publish on Apple Store.

AndEnginePhysicsBox2DExtension - an AndEngine extension letting you simulate a physical world with colliding bodies and joints. It's very useful when you want to have some physical behavior in your game and you don't want to code it yourself. Just apply velocities and forces and everything will work magically... unless you want to create something less standard, like my blob/ball collisions which always make the ball bounce with constant velocity. However, by committing some more time to it, you can do it as well.
It was weird for me that Box2D uses the body's center as its position while AndEngine requires coordinates of the top left corner of a sprite. I'm not sure if I was doing something wrong or if it was supposed to work this way, but it was confusing at times.

AndEngineTexturePackerExtension - an AndEngine extension letting you easily load textures created with TexturePacker described below.

AndEngineDebugDrawExtension - an AndEngine extension letting you draw physical bodies to make sure that they are in the right place. It's a must for anyone using Box2D. Otherwise you never know where your bodies really are and debugging physics becomes a nightmare. Too bad that this extension doesn't support changing the value of the meters to pixel ratio. If you want to use it, you have to keep it at 32 and adjust other parameters (like gravity) to obtain a desirable result.

TexturePacker - a great tool letting you pack your sprites together so that they can be loaded faster. It can also reduce the images' size and significantly simplify the resource loading process by generating the necessary code for you. Its only drawback is the price, which is $40, but I'd still say that it's totally worth it. If you'd rather not pay for it, you can still use the free version. It's somewhat limited, but it has most of the basic functionality and it'll save you plenty of time. If you're a blogger, you can get the license for free (that's what I did). Go to my previous post for instructions.

PhysicsEditor - a tool created by the same company as TexturePacker. It helps you assign physical bodies to sprites, when you use the Box2D extension. I lost so much time trying to do those things by hand that I can't even say how helpful it turned out to be. Unfortunately it still has lots of bugs. I reported 7 of them, but I never got any answer. They make your work somewhat less pleasant, but they are relatively minor and constructing physics bodies in the code is definitely not an option. PhysicsEditor costs $20 and there is no free version (only a 7-day trial). You can buy it together with TexturePacker for $50, getting $10 off the total price. Again, you can get it for free, provided that you have a software related blog. See the video below for a nice example.

Rafał Dorsz - he made almost all the graphics for me (except the icon and the logo). He did a great job and was always on time. He worked for free, because he owed me a favor (I wrote a Python program for him some time ago), so next time I guess I'll have to pay him or find some other way to get the graphic resources. I'll be happy to go with the first option, but I want to be sure that I can at least make the same money on the game.

Photoshop - I used it to make the icon, the logo, and prepare other graphic resources before Rafał made me the final versions. It's a great tool, although a bit costly. Use GIMP instead if you want to save money. I installed Export to Android Photoshop Script to make scaling images for various densities easier.

Crittercism - a mobile apps error monitoring tool. It sends information about all uncaught exceptions that happen in your game. At first I thought that it wouldn't be very useful, because Google Play offers a similar service without any changes to your code, but I'm happy I changed my mind (thank you Marcin). I was able to track several bugs this way, while my Google Play console only noticed one of them. Not to mention that it helped me a lot during the testing process. It only requires one line of code to add. You should try it as well if you haven't done it yet. I will definitely add it to all my apps in the near future.
There are other similar tools that you might want to see: Bugsense and ACRA are the most popular. I chose Crittercism, because I was the most familiar with it, although I had a chance to work with others for a short period of time as well. I might write a longer post about it soon.

What went well

As I said, I'm quite happy with the game. I managed to keep up with my schedule and I finished the basic functionality before Christmas, which I believe earned me a lot of installs. AndEngine wasn't that hard to learn, even without any documentation and it turned out rather pleasant to work with. The biggest achievement though were my graphic resources, which I never expected to turn out so well. At first I wanted to do everything by myself, but this way the whole game would look much, much worse. Thanks to Rafał it became the prettiest Blobby Volley clone on Google Play. Next time I decide to create a game, I'll definitely use his services again or hire another designer. I think that a good design can get you a lot of users, while a bad one will make them reject your game, even if  it's fun to play.

What could have been done better

Some people wrote to me that it was unwise to publish the game and then forget about it for three weeks. I wasn't going to abandon it totally, but I knew that I would have hardly any time to work on it. In fact, even a worse thing happened. I forgot to upload the keystore before I left for my Christmas break. I found out about it when I was ready to publish my first bug fixes. I couldn't sign the apk file with the same certificate, because I didn't have it, so Google Play didn't let me upload it. All the changes will have to wait until I come back hope in nine days...
Still, I don't regret publishing the game so early. Plenty of people downloaded and liked it. I explicitly wrote in the title that it's a beta version, so occasional crashes shouldn't be a problem. The only bad reviews that I got were due to difficulties in controlling the blob. Some of my friends didn't even notice that they can change the controller type in the menu. Perhaps it should be more clear.
I'm aware that the game doesn't offer too many options, but I'm planning new extensions when I regain access to my computer. People say that the other version is still better. I'd say it's just different. My AI is quite good, my GUI is prettier, I don't have functionality that doesn't work (like achievements in the other game). I'm planning to slowly add new features and I hope to surprise my users in a positive way soon.


I really like making games and I'll definitely try to create another one if my Blobby Volley exceeds the level of $100 a month in earnings. Otherwise, I'm afraid I'll have to focus on things that bring me more than $1 for an hour of my work. Judging by the growth rate though, I have a big chance to succeed and break the threshold amount. I have no idea what my next project will be. I want to focus on fixing the bugs first and making sure I can leave it be without supervision. After that I'll start hunting for another oportunity. Wish me luck and go play my game, if you haven't seen it yet!

No comments:

Post a Comment