Github’s game off is over and the winners have been announced. Unfortunately my game, The Moonening, didn’t place. Sad face. The whole process was fun and I know what went well and what went wrong, which gives me a good idea of what to do next…
What went wrong
Animation & Events
My canvas framework, bang, doesn’t yet support animations like sprites, so I experimented a little with the way I would represent the characters. I did this by creating a base Sprite object that takes an image path and a list of rectangles, one for each frame of the animation. This essentially limits a sprite to having one animation. I then created another object called Toon that is a collection of Sprites. The character objects can show certain animations by specifying a Sprite in the Toon, and a frame in the Sprite. This ended up being problematic once I wanted to use certain frames for other animations, or trigger events after an animation played.
Events were handled by Action objects that bind an object to an event handler. I liked this pattern, but often I wanted an Action to trigger other actions, wait for those, then finish doing something else. This didn’t work correctly because half of the Actions ended the current turn so triggering them meant that the turn is over and now other Actions will soon be triggering. I’ll fix this in the future by making all async game actions use callbacks.
Sound is almost non-existent. My friend Jimmy wrote three kick ass songs but I could only include one and the game has no sound effects.
The user controls some number of astronauts in a turn-based puzzler. This seemed really cool at first but once the player is controlling more than one astronaut it can be quite confusing. I like it, but I’m biased. The next version will probably not be turn based but will instead see the user playing a group of astros all at once, using some sort of flocking algorithm in a more action-adventure (zelda style) setup.
What went right
Editor & Levels
Even though ONLY ONE PLAYER found the level editor, which is mentioned in the readme and linked on the main page, it was the best part of the game. The most fun I had during the jam was sitting around at my friend Bryce’s house drinking beers making levels (and bug fixes). That and listening to Jimmy’s songs. The way you can create a level, save it as an image in your browser’s local storage and then navigate to the game page to play said level was in my opinion pretty novel. But alas – I guess I didn’t stress it enough on the main page. A link was not enough.
Art & Music
My roommate Alex Whitehurst helped with the art and I think it looks great. He drew the faces of the astronaut, the blob animations and the crate. He also did a bunch more, but I couldn’t program as fast as he can draw. The art gives the game a cute feel and I’d like to go further down that road.
Another friend, Evan Johnsen, created some tile art but unfortunately like Jimmy’s songs I didn’t have time to code them into the game. The next round will see additions from all three.
Every part of the game code was written by hand by myself. There was no external code. The entire game consisted of a module loader, a display list system, an event system and animations, with an audio tag thrown in for good measure. It was a lot of work, but I enjoy knowing a little bit about every step in the process, even if I didn’t place in the comp!
All in all it was a great experience and it all ends just in time to continue working on the game for Mozilla’s 2013 Game On. So be expecting updates!