Programming projects
On this page you will find some of my programming projects I have made or worked on. If you have any questions concerning these projects or if you would like to see some sample code. Feel free to e-mail me at: timo.vh@gmail.com
Drunk Puppy Engine
This is a project I have been working on since October 2007. I started writing an engine that we could use for our Imagine Cup entry, which was a game called "Future Flow".
This is an ongoing project so I am constantly trying to implement new and interesting features to the engine.
- Language: C#/C
- Technology: XNA, HLSL, .NET
- Supports Windows and Xbox 360.
- Scenegraph:
- Based on the composite pattern.
- Can be used for Parent-Child structure of objects. Transformations on a parent will automaticly be applied to its children.
- A scene also has a separate collection of references sorted by shader and will draw all the objects using this collection. This can be usefull for shaders with transparency that need to be drawn last.
- GameStateManager:
- A game state management system that uses the power of delegates. This allows users to plug-in there own functions into the delegates of the GameState Class (onUpdate, onDrawWithPostPorcessing, onDrawWithoutPostProcessing). The functions that were added to the GameState will be called when the GameState is activated by the GameStateManager.
- This approach gives us the ability to add or remove functions to a GameState instance at runtime
- Post-Processor:
- I have implemented bloom post-processing based on an example of the XNA creator's club
- I've also created a simple PostEffect class which can be used for custom PostEffects like Invert, Blur, ... This class is best used for simple post-processing effects because it only supports one render target.
- XML based Material System:
- I have created a material system that checks if a certain model has a corresponding material XML file. This XML file contains all the data the engine needs to draw the model (shader name, technique, parameters). This file will be parsed and the resulting material will be assigned to the model.
- I created a "default" shader that already supports diffuse, ambient, specular and normal mapping. It also has a lot of tweakable parameters.
- This system makes it easy to add custom shaders (as long as they use correct naming for world, view and projection parameters).
- The Material System has 3 types of Exceptions:
- DPMaterialFileNotFoundException: Thrown when no XML file is found. Object will use default material.
- DPMaterialParameterException: Thrown when parameter is not found in the given shader. The Material will not use this parameter.
- DPMaterialXMLParserException: Thrown when XML file contains errors. Object will use default material.
- Parallel Split Shadow Mapping:
- I have implemented Parallel Split shadow mapping while trying to keep the support for custom shaders as good as possible. Objects that use a custom shader will be able to cast shadows but not receive them. If you want a custom shader to receive shadows, you will need to add the necessary HLSL code.
- Menu Manager:
- I have implemented a Menu Manager that contains multiple menu's. Each menu can contain buttons. These buttons have a delegate function "OnExecute(Button caller)" that can be used to add or remove functions to a button.
- The concept and use of delegates here, gives us an elegant way to implement the observer pattern.
- Buttons support tooltips
- Particle System:
- I have implemented a particle system based on an example of the XNA Creator's club. Users can easily inherit from the DPParticleSystem class to create there own custom particle effects.
- Camera Manager:
- a camera manager class that manages the 2D/3D camera's in the engine
- Light Manager:
- The engine currently supports a maximum of 3 lights
- Skybox:
- Skybox that uses a DDS cubemap
The trailer for "Future Flow", a game made with the Drunk Puppy Engine. It is available on the XNA Creators club beta and won 2nd place in the Microsoft Imagine Cup:
ScreamAimFire racing game
A project I made together with Laurens Corijn. We made a small racing game with working car physics using Jiglib as physics library. I was responsible for implementing the physics into the game and I also implemented a scenegraph which we also used for our levelbuilder of the game.
- Language: C++
- Technology: DirectX
Verlet Integration
A project I made for myself implementing verlet integration using only basic distance constraints. It was created using a 2D game engine written by Kevin Hoefman.
- Language: C++
- Technology: Win32
1941: Counter Attack
A project in my first year of Digital Arts and Entertainment were we had to make a remake of an old arcade game.
I made a remake of "1941: Counter Attack". It was only a small part of the first level, but most of the game logic was there.
It was created using a 2D game engine written by Kevin Hoefman.
All sprites, names and game concepts copyrighted by Capcom.
- Language: C++
- Technology: Win32
