P.I.P.E. is a Arcade Game for two players, which fly their ships through a randomly generated pipe-like maze, avoiding various obstacles. The can collect powerups which are scattered trough the tunnels for effects like shields or speed ups. Every collision with obstacles damages players and when the health bar of both players reaches zero, the game ends. Points are awarded depending depending on how long and how fast players managed to move to the maze before dying.
What makes P.I.P.E. special is, that players control their ships using a Microsoft Kinect and the Game is displayed on a back-projection Wall in stereoscopic 3D.
The binaries of the game can be downloaded here.
The game was created by a team of 6 people.
We used MOGRE as 3D engine for this game, which is a C# Wrapper for the popular OGRE engine. Consequently all programming was done in C#. Assets were mostly build using 3ds Max and Maya, with textures being taken from CGTextures. We developed a custom object hierarchy, basic GUI management, custom animation and collision detection systems. The mid-air hand gestures for controlling the ships are recognized with the help of the Microsoft Kinect and custom gesture recognition framework.
Details and Contribution
As a starting point, I implemented the overall scene node system, so that we could create complex, nested object hierarchies for player ships, tunnel segments, obstacles and so on. To speed up loading times, I implemented a binary serialization system for asses and their corresponding config files. The basic system for power ups and level asses was also designed by me and specific power ups and effects were created by the team as needed.
To enable moving obstacles I also ended up designing and implementing a simple animation system. An animation is defined by a set of keyframes with time intervals and the position and orientation of the object, between which is than interpolated. The effort proved to be worth it, as the result made the game much more dynamic.
Designing the level generation system for the randomized mazes turned out to be more complicated that originally anticipated, because the maze kept intersecting with itself when appending random curves. I finally solved this calculating how much the maze is already curved and tweaking the random generation of new tiles to add curves to the opposite directen when it got to extreme. I even implemented randomly calculated transition between different tile-sets to simulate progress in the game by having the maze be composed out of different art styles
Furthermore, I also developed a collision detection system so that we would know when players collide with objects. Originally planned as a much more sophisticated system. But as we were running out of time at the end of the project, it ended up using simple sphere-sphere collision tests with objects who needed them simply having more collision spheres instead of a more complex shape.
Due to having some experience in 3D modeling with 3ds Max, I also created a fair share of the 3D assets we used in the game. This includes the player ships (without texturing) and roughly half of the level assets. Even though a professional 3D artist would probably laugh about the quality of the models, I nevertheless learned quite a lot in the process.