Friday, December 23, 2011

Revenge of the Christmas tree

With some people of the GameLab Karlsruhe, we made the game Revenge of the Christmas tree for the exhibition Oh Tannenbaum! which takes place in the Karlsruhe University of Art and Design. The development was especially interesting since we made it within five days with a dozen of person with a very relaxed project management.

Download the game for Windows or Mac.

The game is a beat'em up, where players control Christmas trees fighting against students. At the end, player characters face the Übertree, a huge, nasty Christmas tree, who set university's directors in captivity. Well, don't consider the story that much! Nonetheless, we won a special award for merits in ecological sustainability and deceleration, but I guess it's a joke from the jury ;)

The game has been created with OpenBOR. It's a game engine specialized for beat'em ups, having ports on Windows, Mac... and several consoles such as Dreamcast, Wii and PSP! In addition, it does not require coding skills (though coding C-style scripts improves engine's default behaviors), so it may be a good start if you want to make games on such platforms. Although I have to say that you'll need good pixel artists...

Programming a level is quite easy: basically it consists in defining the position of each entity (enemies, obstacles, and so on) in plain text files. The engine already handles the AI for the enemies. But the supertree had predefined attack patterns and required a script to completely bypass the movements given by the engine. We coded a simple finite state machine, allowing it to move, to switch animation or to drop bombs.

The graphics are GIF files. Images for an entity must have the same color palette to save ROM space and processing time (the engine focuses a lot on performance because it targets limited platforms). As always, an entity is defined in a text file and basically contains a list of available animations (which are themselves defined as a list of images). An offset can be declared with each image, that way they are consistent with the logical position of their entity. In the same way, images can have bounding boxes, attack boxes... While a simple image editor may suffice for these images, cut-scenes are animated GIF and an animation editor would be useful.

We really lacked communication. It began as a classic Waterfall project (I was not the manager!) where artists deliver assets to be used by coders to build the game (by the way, coders design the level). The first graphics we received were PNG and as I said we needed GIF. Shadows were drawn on the images, but the engine already has its own ones! Even after that all artists have switched to GIF, the palettes were not coherent and I had to handle this problem until the end. Well, it would have been better when the artists would have asked to the coders details about what they have to do before (agile!). Hopefully, after figuring out these issues, the project ran better and we achieved to release the game for the exhibition.

By the way, Jen and Jan have made their own game, Schmück-Shooter, playable online. It's a third-person Christmas tree shooter, where the player has to decorate Christmas tree with a gun throwing Christmas balls and gifts. Nasty trees appear randomly and quickly move toward the player character. Sadly, nothing highlights these appearances and the players were very confused. It has been developed with Unity3D, allowing to make it quickly... and Playmaker, to develop even faster. Playmaker is a visual state machine editor, allowing to drive logic with blocks and arrows instead of lines of code. I haven't tried it yet, but visual scripting is so more convenient for game designers... Available in the Unity Asset Store.


  1. Hello, can you make it work for OpenBor Dreamcast port too ?

  2. Hmmm we haven't though about that... but I think it's enough to take the PAK file from any archive above, and put it inside your OpenBor Dreamcast /paks directory. Sorry I can't test I don't have any console :) tell me whether it works. And take a photo! :D