Android Game Postmortem – ArkDroid Development
As you might have noticed, we have recently delved into the world of mobile game programming. This was done after creating JCG Studios, an independent mobile game studio based on Athens, Greece.
JCG here stands for Just Cool Games, it is our other acronym, except for Java Code Geeks of course.
Our platform of choice is Android and our first attempt of developing a game from scratch resulted in the creation of ArkDroid. As its name suggests, ArkDroid is an Arkanoid clone for Android. It is what we would like to call “Brick Breaker Evolved”.
ArkDroid features cinematic story line, appealing visual effects, deep space music themes, campaign and free play modes and sophisticated weaponry system among others. We would love it if you took a look at it and let us know what you think about it.
Having finished the development of ArkDroid a while ago, I would like to share some of the experiences I gathered while being a member of the development team. Consider this as a basic game postmortem, similar to the ones you might have read if you have some experience in game programming.
Let’s begin with a short overview of the game creation. The development team consisted of two people, Byron and me. The development lasted about 4 months, each of us dedicating about 15 hours per week during that period. It was actually a side project running along with our regular jobs and Java Code Geeks. We followed the usual approach of creating both a full version and a lite version.
Following are some insights regarding game programming in general and more specifically about programming for the Android platform.
R.T.F.M. (Read The Fine Manual)
Do yourself a favor and make sure you have a good grasp of the Android fundamentals before embarking on the journey of making an Android game. Check out the developer’s guide and make sure to bookmark the Javadoc pages. These are also available in the Android SDK for offline browsing. It would be quite easy to get started if you have previous experience into making games, but make sure you dedicate the appropriate time before delving into the magic world of Android game programming. Our Android tutorials could be of help for this. We also recently introduced Android Game Development Tutorials.
Collaboration is critical when a distributed team is involved. Don’t worry, nothing fancy is required. For our online communication, we used Skype and for a loose “project management” we played with Google Docs. A text document and a spreadsheet should be more than enough for two people in order to track bugs and assign new features. Regarding the code itself, a versioning system goes without saying. We decided to go with good-old Subversion, since this is what we have the most experience with, but any modern source management tool would be fine. There are also a bunch of sites that provide private repositories, do your search.
Rev up your engine
Resist falling victim of the “Not Invented Here” syndrom and embrace the power that a game engine can give you. When starting development, we evaluated some of the available Android game engines and we decided to go with the very nice AndEngine. AndEngine is quite mature, provides an abundance of features and shortcuts and I guarantee that it will help you kick-start your project in no time. It should definitely be noted tha libgdx was a close second and we decided to skip it because it is a bit low level for us. We decided in favour of the lower development time that AndEngine ensures. That being said, if performance is critical to your game’s success, libgdx is a no-brainer. As an added bonus, libgdx is cross-platform, meaning that it can be used to write both desktop and mobile (Android) games.
Know thy engine
As stated above, AndEngine was used to provide the core framework for building our game. Before writing a single line code however, we made sure to got through all the available tutorials. Unfortunately, there are no Javadocs (weird) so you will have to rely only on the examples and the public forums. And hey, you got the source code available, right?
Hit that device
One of the most major issues we had during development was the ridicuslouly slow time that the applications take in order to be deployed into the SDK’s emulator. I mean come on, I have a cutting edge laptop and it takes forever (ok about a minute and so) to redeploy the game on it. For this reason, Byron and I made sure to purchase real devices for ourselves and perform the majority of debugging and testing on them instead of the emulator.
Test, test, test
And yes, as you might have guessed, I mean test in the real device. You have to test the game in every possible way. Act as a non-experienced mobile user. Provide random input and witness how your game is going to react on that. Make sure that all corners are covered. Be warned, due to the nature of games, it might be difficult to even reproduce a bug, let alone debug the game and fix it.
Cover the spectrum
Android fragmentation is a real thing and it can be a major PITA. Different resolutions, screen sizes, CPU powers and the list goes on. So, if you are thinking of Android game programming in a more professional way, you will have to get more that one device in order to cover all bases, from low-end to the high-end devices.
GC is your enemy
Good games provide first of all a smooth experience to their players. You have to avoid hiccups during game play and as you might have guessed, hiccups are caused by Garbage Collections in Android. It is really a “stop the world” procedure which unfortunately gets noticed by the users. The best advice on this is to make absolutely sure that you do not create unnecessary objects. Your game consists actually of a main loop, that is executed multiple times per second, so this makes things worse. The resources are rather scarce in the mobile world, so proceed with big caution.
You probably have heard all those stories about creating a “game” in a weekend or a “few hours” time. Yeah, right… Let me warn you, creating a non-trivial game requires a great amount of effort and above all, patience.
Assets? What is this?
Ok, Byron and I are programmers at heart. Hardcore. Creating “art” sounds a bit bizarre to us. I believe that the term programmer’s art is a very successful and representative one. If you can afford to hire someone to create your graphics and sound, do it without thinking twice. Otherwise, you will have to make the most out of the available tools. We used GIMP for our image editing needs and I think that we actually managed to create some decent art work (mainly Byron).
Beta testers wanted
When near the end of development, make sure to beta test your game. Find some friends or relatives and let them experiment with your game. Ideally, you should be around when they play with it. Watch them and see what they liked, what troubled them and what felt weird to them. This feedback is invaluable, trust me on that. We were lucky enough to have some great beta testers which helped us track some bugs and gave helpful advice (thank you Pelagia, Eleftheria, Ben).
It is quite common among developers to find unfinished projects. Applications that could have changed the world and games that could have written history, but instead they gather dust forgotten inside old hard disks. Fight all excuses and take the dive:
– I cannot ship yet, it is not done…
– Just ship…
– Hey, this function does not perform as well…
– Just ship!
– But I haven’t finished feature X…
– Just ship!!
– Yes, but my competition has feature Y…
– Just ship!!
– With only 100 levels?…
– Just ship!!!
Just ship the thing, get your user’s feedback and build on that.
Don’t quit your day job just yet
This is a very common advice but I would like to repeat it here. Don’t rush into making quick decisions like quitting your day job. Mobile market is a very strange beast and while it could make you a millionnaire, it could also leave you scratching your head as why your super-duper game does not make a damned sell.
Game development is life changing
I personally come from a hardcore enterprise programming background (JEE to the max). You probably know the drill: persist some data, commit that transaction, generate some reports, move the data again, etc etc. This can get boring after a while. Game dev however is a totally refreshing change, a brave new world that I am happy to have found.
Enjoy the game
Finally, make sure that you make something you actually like yourself. If you get bored by your very own game, it is almost certain that you will drop out midway… or that you will end up with a horrible game. We decided to start our endeavor with an all-time classic. Who does not love Arkanoid?
So, that’s all folks… Don’t forget to share! And of course, do not forget to check out our new Android Game, ArkDroid. You feedback will be more than helpful!
Related Articles :
Good write up. You learn so much from your first experience. It’s not making the same mistakes again that’s the hard part. I am writing an app in Android at the moment and it’s my first app and it’s a real challenge. (coming from more than 7 years dev experience in mostly java too). One of the smallest changes that can make dev life a lot easier with android is creating a standard java libary project used by your app. You get all the niceness of standard java like faster unit tests and fast builds. I am pretty much treating… Read more »
Thank you Steven! Nice pointers too!
Good effort from Byron and Ilias Tsagklis. And Engine is really a good choice for Android game development.
Nice article and I think you will also learn lot of things which shows in your writings.
you din’t develop any other game after this?
Hi Guys! I recently made this one: its was made without any libs or frameworks. Whole rendering and menu elements were made from scratch: https://play.google.com/store/apps/details?id=pl.abductedpiggy.games.paddleclash.lite.
I know its not perfect(unfortunately i made textures myself too and I aint no artist), but i tried to compensate with humour. Let me know what you think!:)
Amazing effort. Keep it up!!