Gemini Falcon (formerly Major Bob / Bonnie Bee) (last updated July 28, 2014)
This game is based on the comprehensive 2D game framework in the book, Beginning Android Games, 2nd edition. I had to study the code of the sample game and then re-read the chapters describing the code several times to understand what was going on. But once I understood it well enough I was able to create most of the game mechanics in one weekend. After that I started enhancing, adding features, and tweaking the code to make it work the way I wanted it to work -- which took about a month of evenings and long weekends. This game is turning out rather nicely so spent more time on polishing it and getting it ready for the Google App Store than I spent on the first two games I wrote which were primarily for learning.
In the first version of this game, the game Major Bob and the game Bonnie Bee were the same game with different artwork. The underlying code was the same, but it was interesting to see how different each game feels.
I wanted to call this game complete and move on to my next project, but now that I've read the book Designing Games I feel inspired to make this game as good as I can, even if it takes the rest of the year (or longer). I wanted to move on to learn other topics, but I can continue to learn using this game as the context instead. I think I just wanted to put something on the Google Play Store to validate myself as an app developer, but now that Ay Caramba! has been published, that itch has been scratched.
Below are several screenshots from Major Bob and Bonnie Bee set next to the Super Jumper game from the book. In Super Jumper, the character jumps up from platform to platform, gathering coins and avoiding nasty flying squirrels. In Major Bob, now Gemini Falcon, the rocket ship flies and avoids all moons, asteroids, and other items in space. In Bonnie Bee the objects to avoid are jars, birds, golf balls, a leaf and a fly swatter.
In the first version of this game, the game Major Bob and the game Bonnie Bee were the same game with different artwork. The underlying code was the same, but it was interesting to see how different each game feels.
I wanted to call this game complete and move on to my next project, but now that I've read the book Designing Games I feel inspired to make this game as good as I can, even if it takes the rest of the year (or longer). I wanted to move on to learn other topics, but I can continue to learn using this game as the context instead. I think I just wanted to put something on the Google Play Store to validate myself as an app developer, but now that Ay Caramba! has been published, that itch has been scratched.
Below are several screenshots from Major Bob and Bonnie Bee set next to the Super Jumper game from the book. In Super Jumper, the character jumps up from platform to platform, gathering coins and avoiding nasty flying squirrels. In Major Bob, now Gemini Falcon, the rocket ship flies and avoids all moons, asteroids, and other items in space. In Bonnie Bee the objects to avoid are jars, birds, golf balls, a leaf and a fly swatter.
Here is the interface for Bonnie the Bee...
As you can see, I had to change the interface and game play quite a bit from Super Jumper. An interesting game design change was to make the "2D camera" from moving up with the jumping Bob to putting it in a fixed location. In Major Bob the objects come to the player, the player doesn't go to them as the character in Super Jumper does.
Here are a few sample help screens from Major Bob... (Bonnie the Bee is similar, but bee-based).
Here are a few sample help screens from Major Bob... (Bonnie the Bee is similar, but bee-based).
Creating the artwork for the game took a lot quite a bit of time. I always feel vaguely guilty working on artwork when I could be coding instead, but artwork can make or break a game. This something I need to work on and get better at.
I also used Public Domain sound effects just to avoid all licensing and attribution issues.
I also used Public Domain sound effects just to avoid all licensing and attribution issues.
Game Play
This game is not innovative or ground-breaking, but it wasn't designed to be. It's a learning experience. But that doesn't mean I didn't want it to be as entertaining as it could be. I went through several concepts before settling on:
- Letting objects come to the player rather than having the player go to the objects.
- Allowing the player to unconsciously set the angle of their device to play the game.
- The playing experience is like slaloming down a ski run dodging flags and rocks, or riding a bike and weaving between objects. The experience should be gentle in most levels, but rather hectic in the more challenging missions.
- This game is a gentle experience that dodges objects without causing harm. Players cannot shoot objects to get them out of their way. It should almost lull the player into a trance (or flow!).
- 60 missions instead of unlimited. Actually the number of missions is unlimited, but I think most players will want an end point. After 60 missions, a random mission generator will take over and alternate easy and more difficult missions.
- Earning coins for completing a mission.
- Earn more coins for tougher missions.
- Earn a coin or 10 while flying a mission.
- Allow the player to use coins to purchase shields, more efficient energy use, or to use solar power and never need fuel again.
- Random missions are interesting at times, but well crafted missions gives the player confidence in playing the game.
- Give the player as much visual and auditory feedback as possible: how much time is left, how much fuel is left, and how many shields they have left.
- I reduced the time for each mission from 2 minutes to 1 minute. An arcade-type game should be quick.
- Allow players to restart at any mission to gather more coins to upgrade shields and get solar power. By mission 40, the player had better bought the solar upgrade. If not, then they better replay some missions to get enough coins to purchase a few shields and the solar power upgrade or they won't live long.
- I wanted to allow players to purchase coins for upgrades with real money (a game developer has bills to pay, right?), but the learning curve to do that is longer than I want to tackle right now. I can see coming back to this game and adding functionality and in-app upgrades at a later time.
- Making the final missions so difficult that the average player will have to have several of shields and the solar power upgrade to survive.
- The game keeps track of how the player is doing and awards shields to players who are stuck, and bonus coins to players who complete a mission without losing a shield.
- I found and reported a bug in the underlying game framework. When the player dies, if they use two fingers to touch the screen instead of only one, the program crashes.
Thoughts on Encryption...
Since I'm enabling players to purchase coins for upgrades in this game, the data file where everything related to a player's game is stored needs to be encrypted. I don't want someone hacking into the file and adding 100 shields and solar powered engines to their rocket without either playing the game or buying upgrades through the game.
So I came up with a neat little algorithm that should thwart any casual players out to gain unfair advantage. The cool thing is that the text file is a finite state machine that changes completely every time it's saved. The same underlying data values could be represented by many versions of the encrypted data files, but still has to be absolutely accurate and correct. The 'key' to decrypt the data is included in the file and changes every time the file is saved -- and it's divided and buried within the data it's encrypting!
Well, I think it's cool anyway. This is the kind of thing I find interesting.
2014 June 13:
I like writing my own encryption routines (it's fun!), but I think I'll research using the Java Android APIs available for encryption/decryption. I think that will be a better long term strategy anyway. Sigh. No reason to reinvent the wheel, I guess.
So I came up with a neat little algorithm that should thwart any casual players out to gain unfair advantage. The cool thing is that the text file is a finite state machine that changes completely every time it's saved. The same underlying data values could be represented by many versions of the encrypted data files, but still has to be absolutely accurate and correct. The 'key' to decrypt the data is included in the file and changes every time the file is saved -- and it's divided and buried within the data it's encrypting!
Well, I think it's cool anyway. This is the kind of thing I find interesting.
2014 June 13:
I like writing my own encryption routines (it's fun!), but I think I'll research using the Java Android APIs available for encryption/decryption. I think that will be a better long term strategy anyway. Sigh. No reason to reinvent the wheel, I guess.
Next Steps... (last updated June 13, 2014)
The game play is in good shape, but there is still a lot to do before this game is ready for prime-time. And since this is the first time I've done most of this, I have to learn how to do it as I go. Here are some tasks still to do:
And I have 3 pages of ideas, but ideas are a dime a dozen. It's the implementation that counts. Time to get crack'in!
- Let the player upgrade things like type of ship and the ship's forward and backward speed. Basically, give the player lots of opportunities to upgrade and think about the game when they are not actually playing. Each decision will change how they play the game.
- Add In-App Purchases. Perhaps use an existing framework like SOOMLA. I need to do some reading and research...
- Decide if I want to add banner ads or not.
- Add more adaptive responses to the player.
- Add objects that are attracted to the player and go towards them (slowly, slowly, always coming, slowly).
- Add power-ups, invisibility, mega-shields, black holes, and more.
- Add the ability to upgrade the ship to fire lasers or rockets at objects. Enable in-app purchase of ammo!
- And lots more....
And I have 3 pages of ideas, but ideas are a dime a dozen. It's the implementation that counts. Time to get crack'in!
Update (last updated July 23, 2014)
This app continues to evolve. It is no longer called Major Bob and there is only one interface.
Game design is an iterative process that when I keep open to the changes invariably improve the final product. After I read the books Game Frame: Using Games as a Strategy for Success and Designing Games: A Guide to Engineering Experiences, I realized I had to change my direction to make this game as good as it could be. No sense in publishing a game that I know is not as good as I could make it.
For this new iteration I've added lots of upgrades and tightened up the design of the game quite a bit. The tightening of the code will not be apparent to the end user, but it will make the coding, testing, and maintenance of the app easier in the future. And I like clean code. Reading Code Complete 2 has inspired me to refactor several classes, methods, and routines -- which has made the program even more awesome.
Game design is an iterative process that when I keep open to the changes invariably improve the final product. After I read the books Game Frame: Using Games as a Strategy for Success and Designing Games: A Guide to Engineering Experiences, I realized I had to change my direction to make this game as good as it could be. No sense in publishing a game that I know is not as good as I could make it.
For this new iteration I've added lots of upgrades and tightened up the design of the game quite a bit. The tightening of the code will not be apparent to the end user, but it will make the coding, testing, and maintenance of the app easier in the future. And I like clean code. Reading Code Complete 2 has inspired me to refactor several classes, methods, and routines -- which has made the program even more awesome.
Published! (last updated November 17, 2014)
Gemini Falcon is finally published on the Google Play Store! Woo-hoo! On the one hand I'm happy it's finally finished and other people can enjoy playing the game. On the other hand, I'm sure I could have improved the app if I had kept working on it longer. It's been a long process, almost a year, but I've learned a lot about programming in the Android environment, programming games, and publishing an app to the Game Store. Overall, I've enjoyed the process and I look forward to working on my next project!
Post-Production updates
11/20/14 - There appears to be a problem with Nexus phones... the artwork is not being displayed. I'll have to do some research. It may have something to do with GLES 10 vs GLES 20 and the artwork not being a multiple of two. Hummm. I have some work to do...
12/2014 - The issue was that some of my texture files (the artwork) was not a multiple of two (and perhaps was not square). So I made most art 512x512 and the largest texture map 1024x1024. And it all works now!
1/2015 - I unpublished this app since Gemini Falcon: Asteroid Miner is a superior game and they are not that much different.
12/2014 - The issue was that some of my texture files (the artwork) was not a multiple of two (and perhaps was not square). So I made most art 512x512 and the largest texture map 1024x1024. And it all works now!
1/2015 - I unpublished this app since Gemini Falcon: Asteroid Miner is a superior game and they are not that much different.