Tales From the Minus Lab - Software Engineer
The Minus Lab project has involved a group of ~25 people taking a game from concept to alpha, beta, and completion. The game is focused around the main character’s ability to grow and shrink in analog from a minimum size of about 6mm to a full size of about 1.5 meters. All gameplay takes place in a single environment, what may appear as a simple object at a large size may just be an explorable level at a smaller size!
The project utilizes an engine written completely from scratch in C++ wrapping common middleware such as Havok and OGRE. A list of engine middleware and tech is provided below.
Our demo day demonstration from December 2010. I recommend skipping to about the 5 minute mark to see the cool stuff!
UPDATE: Read the postmortem article Intel published about parellizing our student project
The game engine is currently in the process of being converted to a threaded framework by me and another engineer, Xin Liu. This monstrous undertaking is an attempt to implement not just a multithreaded solution but an efficient one as well, minimizing mutexes and providing an interface for other engineers to write thread safe code. We are using Intel’s Thread Building Blocks for this process.
Following the Intel Designing the Framework of a Parallel Game Engine Whitepaper we have begun the process of implementing a task manager based solution using data duplication and buffers. The goal by May is to have the rendering, input, and events running on their own scheduled threads with minimum mutex locking. In addition to this we will also be implementing domain decomposition to specific areas that are internal to our game’s update loop to speed up the processing of game related data.
Other Project Duties and Responsibilities
I work mostly as a generalist on the project involved in many aspects of the gameplay implementation, pipeline, and asset integration with both the engine and external tools. My tasks and contributions include but are not limited to:
- Designed and implemented a subscription based event handling system in the game engine to allow game and engine components to communicate with each other.
- Extended multiple portions of the engine to integrate with the above event system at the lowest possible level, allowing nearly anything to send a message to anything else that cares about that type of message. This allows us to keep many areas decoupled since they need no knowledge of each other to operate.
- Extended the Havok Loader by allowing our Havok Rigid Bodies being exported to have additional properties. These properties are utilized for a huge range of things from creating phantom trigger volumes to allowing us to define objects as having special gameplay such as checkpoints, moving shelves, objects with special interaction, switches/buttons, etc.
- Streamlining the process of taking an art asset, prepping it for use with Havok and OGRE, managing the levels constructed with the prepared assets, providing prefabs for special objects and trigger volumes for the designers, and the export process of all of the game’s assets from Maya and many parts of importing them into the engine.
- Making sure the game plays as closely to the prototype as possible!
- On off days I can be found refactoring old code. Our utilization of Havok goes against the very nature of the software so many of our features have to be iterated on and recoded multiple times to get proper behavior and performance. I have touched many areas of this including the Rigid Body construction of objects and the character, trigger volume implementation, and input.
Engine Tech
- C++
- Havok
- Ogre3D
- Intel TBB
- CEGUI
- FMOD
- Boost
- OIS