Projects

Well…Projects is something of a misnomer. Most of what I put here will be features that I have added to OpenSauce which sounds like it’s all going to be the same stuff, but you’d be suprised at the variety a video game mod project can provide.

As time goes on I may write short blog posts about these projects, which I will link to from here.

User Interface

The OpenSauce UI is a framework built to interface with the GWEN GUI library (which is used in GMod), though it isn’t wholly dependant on it. I wasn’t a fan of GWEN’s UI factory and such so I wrote my own to fully control the UI layout.

OpenSauceUI_MainMenu OpenSauceUI_InGame

 Diffuse and Specular Directional Lightmaps

This feature add’s directional lightmaps to the engine for diffuse and specular static normal mapped lighting. The shader side work for the diffuse lighting is a typical implementation of the technique, however, with some modification I came up with a shader that uses the directional lightmaps as the source for the specular component as well which is a technique I haven’t seen used elsewhere.

StandardDiffuseDirectionalDiffuse DirectionalSpecular

Per Pixel Object Lighting

The stock Halo engine has no support for normal mapped lighting or specular reflections on in-game objects, since it uses per vertex lighting. After a significant amount of reverse engineering of both the game and it’s shaders I managed to changed this so that all game objects now use phong based per pixel lighting. The resulting system has no noticable effect on the original game content, but allows new shaders to add a base normal map, two detail normal maps and specular lighting with a specular colour map.

Halo1_CE_Comp_SpecularHalo1_CE_Comp_Reflection  Halo1_CE_Comp_Lighting Halo1_CE_Comp_Final

Geometry Buffer

The geometry buffer (GBuffer) was something I added whilst I was writing the post processing system. I wanted to have a go at doing depth of field and motion blur, and created the GBuffer after reading I would need depth and per pixel velocity buffers to do so. The final GBuffer creates 4 render targets containing the scene depth, per pixel velocity (for BSP only unfortunately), the scene space normals and an index buffer with miscellaneous information such as the mesh type, team, etc.

GBuffer

Post Processing

The post processing feature was my first real foray in C/C++, where I implemented the DirectX 9 sample into OpenSauce. That code is long gone though, as the system went through a number of re-design’s and re-writes until the system we have today was produced. The system is highly configurable, with a tag based implementation for map makers to use, an extenal shader implementation for users to add their own shaders and develop with, plus a number of built in systems for bloom, motion blur and anti aliasing.

PostProcessing

Soft Particles

Soft particles was once of the easier shader additions to add since the scene depth was already available in the GBuffer.

NoSoftParticles SoftParticles

Map Downloading

Map downloading was a major feature missing from the game which forced people to manually search for the maps they needed prior to playing. The system I wrote involved embedding an HTTP server into the Halo dedicated server and designing a protocol for querying whether a map is being served and then downloading it. I also wrote a PHP server-side suite to act as a globally available server of maps, which the game will download from if the dedicated server isn’t serving the map.

MapDownloadActor Variant Transforms

Another developer who worked on OpenSauce for a short while wrote a system called unit infections specifically so that an object type can be changed when melee’d by a particular object type (i.e. the flood infection mechanic we see in Halo 3), but the system wasn’t ever fully finished. A while after the original developer left I revisted the system to try and get it working but saw that there was an opportunity to greatly expand on the idea, make it more generic and provide a lot more options to map makers, so I ended up re-designing and re-writing the system and actor variant transforms are what came out of it.

Vehicle Boarding and Assassinations

The same developer who wrote the unit transform system also wrote a system to do vehicle boarding. I also had to work on finishing up this system and decided to re-write and expand upon it to provide as much flexibility as I could. The resulting system enabled all of the boarding types seen in later Halo games as well as basic assassinations.

WARNING: Blindness and vomiting may occur from the crudity of this video, I only had stock animations to work with.

Lightmaps and Sky Switching

A feature that had been asked about was the ability to change lightmaps and skies at runtime using HaloScript. A basic system had been implemented when I started work on directional lightmaps but due to that requiring a different lightmap setup I took over implementation of the system.

Leave a Reply

Your email address will not be published. Required fields are marked *