Parabellum
Senior Project
Team: uSquid
- Jason Kilkenny
- Jordan Massey
- Derrick Readinger
Download coming soon!
Parabellum is the final game I'll be making at Digipen. It's a game in the style of flOW and PixelJunk Eden. The object of the game is to collect the colored wisps to grow the tree in the center of the world. We aimed to create a very relaxing experience with a focus on exploration.
The original idea was that of a top-down evolving shooter that relied heavily on procedural content. The player started off as a small ship that would grow with each enemy that was defeated. The would also be enemies that grew the same way the player did, so you might see a ship that ran away earlier come back a lot stronger than when you saw it. All ship growth was based on L-systems, which are strict rule-based systems. Subsequent generations of enemies would be based off of previous generations by using genetics. The enemies chosen through a fitness function would have their parts and weapons combined to form new enemies. Most of the first semester was spent building the genetics, weapons, L-systems, and AI for this idea.
Unfortunately, we realized at the end of this semester that the game wasn't very fun at all. So after much brainstorming and the advice of one of our game teachers, we went for a the minimalistic design we now have. While much of what we developed in the previous semester doesn't fit with our current design, it was definitely worth the sacrifice.
Responsibilities:
As there are only three coders on this project in addition to using an engine from my teammates' previous game, I had a variety
of things to get done. I was tasked to redesign the particle engine, as well as implement the weapons system and all weapons, all
genetics related functionality, and enemy AI utilizing our behavior tree implementation done by Derrick. I also created the spline
rendering system which is used by many of the entities in our game.
Particle Engine
Using the experience from my previous game, I redid the existing particle engine by adding hardware instancing and a data-driven
structure. The hardware instancing was done mainly to allow support for massive amounts of particles on screen at once, without
harming the framerate of our very action-oriented game. With the design change, we're trying to find other uses for them. All
particle systems are now loaded in from an xml file that lets you fine tune the look and feel of the systems, with support for
linear, spherical, and cylindrical particle updates. The engine also utilizes a texture atlas to eliminate texture switching
and allow for larger batches of particles to be drawn at once.
Spline Renderer
The spline renderer uses a triangle strips to draw Bezier splines using shader instancing. By copying the triangle strip
multiple times into the vertex buffer and assigning each copy an index, I can draw multiple triangle strips at once by
indexing into a buffer of control points set as constants in the shader. The user can set a variety of properties at each
control point, such as width and diffuse color in addition to texture scrolling.
The original plan for the spline renderer was to use it for drawing the laser beam weapons. We wanted to have "sticky" lasers that attached to enemy ships and did continuous damage. Once the engine was done, Derrick made a seaweed using his spring physics implementation. After seeing how good it looked, he continuted by creating the squids, trees and plants in the game.