Parabellum is my senior DigiPen project. I made this game on a team with Derrick Readinger and Jason Kilkenny. The video above is one of our final project. The game is much more of a casual game than our teams' previous efforts. There aren't any dangerous enemies or technical platforming sections. The mouse cursor moves the avatar, a snakelike creature, through the world. In the center of a world is the seed of a tree that has withered and needs to be rejuvenated. By moving about the world and collecting fireflies, then delivering the fireflies back to the tree, the player heals the tree and restores life to the world. There are red fruits in the world that make the player grow in length when eaten. Earlier designs of the game offered more actual reasons to want to grow yourself, but even in the current design it's helpful - it makes it easier to collect fireflies, and just plain looks cooler.

Parabellum screen 1 Visually the game turned out very nice. The world is covered in dark fog that is repelled by objects that can emit light. Fireflies do, of course, and there are also plants in the world that emit light when the player moves near them. We were able to use our entire engine from the previous year that we built for Dusty. For Parabellum I added a few features to the renderer, namely post-proc effects like bloom. Parabellum uses deferred shading, which I think was a good decision considering the game design. It allowed us to have all of the fireflies emit their own light and render holes in the fog without too much extra work. Unfortunately there are a few graphical features we weren't able to get in that would have really looked nice. Firstly I would have liked to have actual terrain beneath the player instead of just scrolling textures. Having terrain in the background that was lit by all of the game's light sources would have looked really nice. Secondly, I would have liked to have nicely textured and animated fog. All we really did for the fog was darken the things underneath it. I got about halfway towards some kind of animation using perlin noise but that didn't get far enough to see the light of day.

What really makes the game visually appealing is our spline system. The technique for rendering is pretty simple. We use a basic triangle strip mesh with multiple subdivisions, then send the spline's control points to the shader and use the bezier formula to form a spline out of the mesh points. With just that one technique we're able to achieve all of the vector graphics style effects in the game, from the springy seaweed to the awesome jellyfish. Of course the main tree uses it as well, and Derrick wrote the system for creating the splines and animating both the spline growth and the little leaves that grow out on the sides. It was all hard-coded, but it looked good!

I was responsible for the game's level editor. It was the first editor I wrote that had do and undo, the most indispensible tool of any kind of editing software. Its capabilities were basically just placing entities and lights within the world. Derrick used it to make the level we presented with our final. It was actually a fairly significant amount of code when all was said and done, but the structure turned out well, and it was all in-engine. We only had to run a separate game state from the main game state to run it.

My other main contribution to the project was our organic ship growth system. Originally our game was supposed to be focused on combat and arcade-style action (whatever that means.) By destroying other ships you would gain their essence and by doing that your ship would grow out based on a rule system. The basis for our rules is L-Systems which are used mainly for modeling growth of organic things like plants. They seemed like a natural solution. However L-Systems by themselves lack certain pieces of information necessary to maintain a hierarchical structure and remember relationships between generations, so I expanded it into what I rather uncreatively called M-Systems for Modified L-Systems. The main part of M-Systems that made them usable for heirarchical relationships is that depth information is saved with each node. The generation strings are saved in a heap-like ordering such that an element's parent is always the element before it with a depth equal to the child's depth minus one. From that it's possible to construct a tree from an M-System string, and back from a tree to a string without any data loss.

The system itself worked just fine. You can sort of see it in action in the previous video, and actually it's still in use in the vinal version where you simply grow out in a chain. The fact that we were only able to demonstrate extremely simple rulesets belies the problem with our design - making interesting ship designs with procedural techniques is really hard. Especially without artists. I've learned that lesson many times thoughout my DigiPen career. Procedural content always seems so wonderful when first conceived, but its implementation is has rarely been better than hand-made assets. The procedural textures in Dusty were definitely my best use of procedural asset generation. Despite the fact that the system wasn't really used, I am happy with how it turned out. It was actually pretty fun to write.

I'm happy with how the game turned out in the end. It felt like a unique idea that could have been even more awesome had we had more time to work on the other things we wanted to get into the game. Maybe we'll revisit it sometime in the future.

Above is a quick video of the parabellum alpha build. The game as it appears in this form and style didn't really exist until a few weeks before alpha. This is the point where the game turned in the right direction and we found a style and game feel that we wanted to continue building upon.

This video is the Parabellum Pre-Alpha build. Here we're still foolishly trying to fit combat and shooting into our game. With the ship growth and mouse cursor controls it really doesn't make a whole lot of sense. I'm glad we didn't try to stick with this because it probably wouldn't have ended up being much fun.