Browser-based promotional game for Anderson's Coffee.
The game features 24 levels, 3 modes of play, and a variety of pickups and hazards.
The gameplay is powered by the open source Actionscript Physics Engine, originally developed by Alec Cove. Using the constructs of this engine as a starting point was a huge step in setting up the runtime. From there, it was all about modeling the different types of objects and how they interact with each other.
The user moves their coffee bag with the mouse, which seems straight forward to implement. After the very first test, it was obvious that the bag needed a slight delay with momentum to feel right. This took a lot more fine tuning that I expected, but was an important mechanic to get right.
Items and Hazards
Creating the beans was obvious, but it wasn't much fun without some form of challenge. The inclusion of bombs helped it feel more like a real game. It's probably possible to make a decent game with just these items, but who doesn't like powerups? The health pickup was a pretty easy one to implement, and it helped balance the game in some of the more challenging levels. Next was the shield. This one wasn't too tough either, basically invincibility with a larger hit area for the bag and the animation of the force-field. The next idea was a little trickier to develop - the twister. That's the blue pickup that turns bombs into beans. It boils down to looping through all the bombs, storing coordinates & rotations, removing them, then drawing new beans and applying the stored transforms. Everything together helped the game have a little more variety, and in the end more fun.
There are a few variants that comprise a level - the layout of the blocks, the number of items/hazards, and the amount of gravity in the room. It seems like with such basic elements to work with it would be easy to put together the levels, but it was very challenging to find the right balance and incrementally go from easy to hard. I invested time in developing a level editor, and a data exchange format to export/import level data back to the game. With the amount of iteration necessary to finish the levels, this turned out to be a huge time saver.
The menu system ties it all together. I designed the menu system to be very flexible for future projects. It collects the desired settings from the user, then initializes the chosen level in a gameplay container. Then it listens for events to store gameplay data, close the container, and go to what's next.