Has anyone else done this sort of thing to much success?
Could you explain a bit further how you structured your game? I'm using LibGDX too but find the Actors, Scenes, etc. a bit confusing, are you using any of these?
How did you learn LibGDX? With the official documentation and wiki, it seems very complete, but not sure if there's a better resource.
Thanks, and I hope you keep making games!
I also used Sprites for some stuff, but I also have a lot of pure batch.draw() calls for one-off copying directly from texture. When you use the Sceen model, you use Actors instead of Sprites.
I used to make games using SDL, so I'm used to blitting the graphics purely by coordinates and just build my own stuff over it, but Scene-Actor stuff is very well done, I will use it for my next game for sure. It also comes with some nice UI elements, which I also had to invent myself in mine code.
The best resource was asking questions at Stack Overflow. You can also google for some stuff, but beware, some of the code out there is suboptimal as you can see in my post about making screenshots.
Really great that you documented your progress, I imagine it not only helped inspire others, but also serves as a great refresher if you step away for a few months and come back.
There where other stuff I also did, like doing a lot of testing and bugfixing, or reading the docs, but those were too boring to blog about.
The main problem is googlability (did I just invent a word there?) of cocos stuff. Google is indexing all the old cocos iOS stuff higher and it's really hard to find anything, especially if you never did develop for iPhone and have no clue if the article you're reading is about old or new cocos. The docs are great, but often you need to find examples of different specific topics and those are usually on someone's blog or similar page where only Google can take you. Also, on some forums I found this way, people were trying to help cocos2d-x devs, but those helping were iOS devs and answers were like "this is the way it works on iOS but YMMV", as they were unsure if the API has changed or not.
Maybe it's a great library, but all this left me with too much confusion, and I picked something that was rather straightforward and still supports desktop and iOS if I decide to port.
My own judgment is that it's relatively difficult to get a Cocos2d project to work across all platforms (HTML5, iOS, Android). But once it works, the development iteration loop is very comfortable and fast, because you just refresh the browser to try the current version of the game.
At least for game development all the APIs that matter are available, with the remarkable exception of the new Google Play Services.
(just kidding, great work and a good read!)
I got stuck on Wave 70 – the grow-when-shot boss just wouldn’t die. I think it is a bug. At first the boss grew when I shot it, but after a while it didn’t change, and always stayed the same size and pinky-purple colored. I kept shooting it for 3 to 5 minutes and it still didn’t die, though none of the previous bosses took longer than 40 seconds to defeat. All the while, the boss kept dropping minions, which I was able to kill normally. I could only just see that when I shot the boss, a “10” points indicator floated up from the boss, partially cut off by the top of the screen. I’m on a Samsung Galaxy Nexus.
Also, I lost my progress in the game when I tried to change Settings in the middle of the game. This was because of a UI problem. The pause screen has buttons at the bottom for “Exit game”, “Settings”, and “Continue current game”. After continuing to the Settings screen and looking it over, I pressed the bottom-left button with the left-facing arrow. But that turned out to be the “Main menu” button, which dropped me out of the game completely, making me lose my progress. (Luckily, I didn’t mind too much in that game, since I couldn’t progress past level 70 anyway.) I see that if I press my phone’s Back button instead, I can return to the pause screen and then press Resume – but there should be an explicit button for this too. I think the best fix for this is to replace the “Main menu” button with a “Back to pause screen” button if you got to the Settings screen from a pause screen.
I also noticed that I can’t press the Reload button while my other finger is still touching the screen just after shooting a bullet. That is, multitouch doesn’t work. It is a little annoying to have to stop shooting completely to reload. But then again, having to reload manually at all is also annoying, and it’s part of the game, so you could call this behavior a feature, since it makes reloading harder.
Finally, I was a bit confused about the name of your game when I read your blog on my phone, since the Play Store link ends with “com.bigosaur.backyardpanic”. Maybe it’s too late now, but it would be less confusing to change your app’s package name to “com.bigosaur.droneinvaders”.
Apart from those problems, your game seems like a fine phone game, with enough gameplay elements to make it interesting. Having to manually reload is not as bad as it could be, since you give feedback that you are out of ammo and have to reload from multiple sources – flashing Reload button, missing ammo bar, small “Out of Ammo” white text, and click-click sound effect. And it’s impressive that this game was put together in so short a time.
Wave 70 is not a bug. The trick is in the Grows When Shot description. This boss gains energy when shot, but loses when he releases a drone. You really shouldn't shoot at it at all, just destroy its minions until he shrinks to zero. Hmmm, maybe this was a design error on my part, mixing deep thinking in a shooter game, I'm not sure?
As for the settings going back to main menu, you're right, this is a bug. It used to work properly, but I refactored some code just before releasing and this got broken. I'm uploading a fixed version as I write this, it should be up in the Play Store in a couple of hours.
Having to pause shooting to Reload is deliberate. At first, there were no Reload button, but adding it added a dimension of difficulty to the game, and made it more interesting.
As for the package name... it's complicated. As you can see in my blog at Day 1, I choose this name at first, and then I built a libGDX project using it. At some point when I finally decided on Drone Invaders name, I tried to refactor and Eclipse was not able to do everything. libGDX projects are set up by some kind of a setup wizard, that does some find/replace of strings and whatnot, so it seemed impossible that I would be able to do this manually. Although, not that I think of it, maybe I could create a new empty project using the wizard, and then copy all the source code there. However, I would lose all the ratings and stats I have so far on Google Play as it would be treated as a completely new game. :(
And I guess I will have to make e-mail clickable now ;)
Not at all, sounds like a classic final boss achilles heel to me. I haven't played the game so I don't know how blatant the clue to defeat the boss is.
The only thing is that this is not the final boss. This is the boss on level 70. Next one where you need to figure out the message meaning is on level 120, and there are even more bosses after that.
Then I enlarged the background nebulas and stars textures and the game adapts to the screen. If you have 16:10 screen it fits perfectly. If you have wider screen, there would be some free space at the sides. On Nexus 7 and 10, that's just some 10% and it's hardly noticable.
On devices that are wider than 16:10, say some phones with 480x854 resolution, I simply extend the playing field upwards. So it's actually a little bit easier to play on those devices as aliens have more space to travel before they reach the bottom. I thought about increasing the initial speed modifier for those devices from 1 to 1.0675, but I did not do it. I somehow wanted to speed of the game to be constant.
Using libGDX as a library makes testing all this very easy, because you can run in on your desktop as a regular Java application and you can resize the window to whatever you like. I have 1680x1050 monitor, so all phones and most tablets fit the screen.
The only thing I regret is not having Nexus 10 at the very start and make the game optimal for 2560x1600 resolution. There are many popular Android games that do not support this fully (graphics get blurred). The only 2D game I've seen so far is Angry Birds Star Wars II. So maybe if I supported this high resolution, I would have a better shot at being featured in the Play Store, since competition is low. If this version goes well, maybe this is exaclty what I will do next: build a HD version.
original mac version took a week, ported at weekend, polished following week. i did have help on the art side (i.e. almost all of it is not mine) and the audio track was composed by someone else
the thing is though, then once you have a good stock of code to work from. this sort of thing shouldn't even take a week (!)
Here is an HTML5 demo with the current state of the game: http://smartician.com/hexathon/
I hope you'll be able to run it.