Those who have been following me on Twitter have been aware for a while of GBJam, an online games jam, and of course, I’ve been working on a game for it. Therefore as today marks the end of the third GBJam, this article will be a part-summary, part-showcase and part-post mortem of the GBJam.
What is GBJam?
GBJam was created by retrostark and first ran from 8th – 15th July 2013, where several developers built gameboy themed games. I was there as well, in a team where we made the game Star Runner. There has since been other jams of similar theming such as NESJam and SpeccyJam, and there was even a second GBJam in November, however I couldn’t take part due to my day job. The third GBJam started on 1st August and ran until today, with a total of 173 games as of writing.
Showcase – Some of my favourites from the Jam
With 173 games, it’s hard to go through all of them, but I was able to look at as many as I could and play a few, and these are some of my favourites, whether they were really fun or really interesting.
My Game – Post Mortem of Galaticus
To be honest, I’ve had the idea of Galaticus for a while, as I’m a fan of shmups and have played a lot of different ones and I’ve been experimented with a few different shmup mechanics on projects that either never left the concept stages or were abandoned due to personal issues and experience, few of them I’ve mentioned online (such as Siegfried and Ruby). Galaticus originally started out as an unnamed project I used to practice using the original flixel, where the basic concept was me figuring out how I could make a game similar to an underrated Konami shooter called Gyruss. Sadly I don’t have that project anymore but the first GIF I posted to Twitter pretty much matches the stage my original concept was at:
The original concept also had a starfield, using PhontonStorm’s original FlxStarfield plugin from their power tools.
Despite abandoning the concept over a year ago, it somehow crept up back to the front of my mind when thinking about what I could make for GBJam3. So on August 1st, after moving house the day before, I booted up my PC, set up a HaxeFlixel project and after an hour or so I got back to the stage I was at with my prototype…so what was next?
Developing the game
First thing was get a grid designed, this was important as I wanted to have a guide so the player will know how close and far away they are able to travel. I also wanted the ability to shoot from both front and sides, so having a grid would help players with lining up their shots. I originally wanted to go with drawing primitives using Flixel’s Sprite Utility class, however I eventually switched to drawing out the grid myself because I discovered that you cannot draw lined circles and (as the GIF below shows) that you cannot have pixel lines without anti-aliasing, and in order to keep the four colours rule you shouldn’t use anti-aliasing.
Next was getting the basic game structure in, I went with a Robotron style structure: shoot all the enemies in one level -> transition -> go to next level -> repeat. This required creating enemies (of which I ended up creating six enemies with unique moving patterns) and a state to handle the transition between levels. Originally there was only one state that performed differently depending on whether you died or not, but I later separated them out to handle the scenarios much more easily.
The UI was a simple lives and score, no need for anything complex because you are supposed to be limited to gameboy visuals and there’s already the grid, the icon I used for the lives is actually a downscaled version of the player ship.
Quick mention of the enemy movement, majority of them use sin-based movement in some way or another, except that it wasn’t as easy as just setting the distance to sin. Extra challenges were setting up the enemies so that I could initialize them to appear in exact positions, and adding bullets for one of the enemies. For player it was straightforward bullet pooling, but in order to get the enemy to fire their own bullets that would destroy the player, I ended up creating my own bullet class and rewrite the tube movement class so that every object using it would have its own bullet pool.The main challenge I’d say was designing and implementing levels. I was stuck between either somehow procedurally creating levels using numerous variables or writing in my own level loader. I ended up deciding to throw up my hands and say “Okay I’ll do both…sorta”. The game ended up having two game modes, normal and random, one using a text file loader (thank you OpenFL’s Asset Manager) and a hand written method for parsing said text files into individual levels, and the other using HaxeFlixel’s random generator class.
Then there was getting the extra menus sorted, although I didn’t come up with the name Galaticus. I asked on Twitter and the GBJam forums and Andrew Stewart suggested the name, although it was actually a typo of Galacticus, but I thought Galaticus was just as good, both sounded like cheesy names for 80s arcade shooters like Galaga or Burn Fighter!
I also had a hand at creating a music this time around, using Linux Multimedia Studio. While getting retro sound effects is easy enough (BFXR is any game dev’s best friend). Issue was trying to get the right sounds, but thankfully there are some awesome plugin developers to handle creating the right sounds for chiptune, and so I used Matt Montag’s Nintendo VST for all my sound needs. You can download my soundtrack here and hear for yourself to see how well I did.
Well GBJam was so much fun to get through, and I’m glad I had plenty of free time to do this! While the game can still be tweaked here and there (namely the levels in normal mode and the sprite sorting), I’m happy with how much I’ve accomplished in a little more than a week. I felt like I added so much to Galaticus that I uploaded the game only five days into the jam, and while that was premature, the feedback I got from people on the GBJam forums, Reddit and friends through Skype did help getting a few additions in place, not to mention integrating the GameJolt API so I could also add in highscores and achievements.
If you’ve had a go at Galaticus, please leave a vote wherever you can. Thanks to all those involved with GBJam and I hope to return soon!