The configuration framework came about from a need to replace a horrible settings system in OpenSauce. It is a generic node based storage framework wrapped around boost’s property tree library, but without being completly dependant on it.
The example usage code is ripped out of the external shader loading of the OpenSauce’s post processing system, which allows user’s to write their own HLSL post processing shaders and use them in-game. The OS_Settings.PostProcessing.xml files is a simple example of what a user would do to add a single shader to the game.
The code in open_sauce/settings is what we use to handle our global settings. OpenSauce components implement their own settings container and singleton, which get’s registered with the main settings manager. The main settings manager then handles loading/saving the configuration file.
The OpenSauce UI came about from a desperate need to have a way for users to modify their settings in-game, and to display information back to them. We couldn’t use the games UI as that would force users into using an OpenSauce specific UI map file, not to mention the reverse engineering involved to add the functionality we needed would have been unfeasible. So we needed our own system to use on top of the game’s. GWEN fit the bill as a no-nonsense GUI library to use, so I wrote a framework around it to interface with it’s controls and handle building the UI from our layout assets.
The OpenSauce Installer quickly became a necessity as the complexity of installing OpenSauce increased. The installer is written using WiX, with a number of custom actions written in C# and a Unit Test project checking the custom actions are behaving themselves.
Map Download Master Server
The Map Download Master Server is a server side script suite that acts as an alternative map downloading source for the game if the server it is connecting to does not serve the current map. It is written in PHP and involves HTML and CSS, SQL database usage and user account management.
The Model Extractor is part of a newer lightmap rendering process for OpenSauce. It is a tool that allows users to export any of the model’s in Halo to COLLADA format, retaining it’s texture coordinates (both render and lightmap UV’s for BSP) and skinning. Also, because it uses the COLLADA format it can export scenario’s by batch extracting all models used in the level and creating COLLADA files that instanciate the extracted models at the correct position’s and orientation’s. The tool is a sub tool of OpenSauceIDE which a program that contains the various tools for OpenSauce that aren’t integrated into the HEK.
Tools, Tools, Tools
The tools I have written over the years are no longer a representation of the code I can write, however they are still valid examples of functionality and usability.
Lightmap Renderer (MAXScript)
The Lightmap Renderer is a tool I wrote for 3ds MAX that does as it’s name implies. It is used when creating lightmaps for Halo and handle’s setting up a selection of meshes to bake their lighting to texture, rendering each texture and then creating a combined lightmap texture that the HEK’s tool can process. The main reason for it’s creation however was due to 3ds MAX not having any system in place for rendering Directional Lightmaps. I had to write my own, which handles skewing the surface normals of the meshes to accumulate light along the 3 directions required.
Aether is an old term meaning “the medium through which light propagates” which seemed like an appropriate name, as this tool simplifies the process of using external tools (3ds MAX, Maya, etc.) to generate lightmaps for Halo levels. It has been superseded by the latest process that OpenSauce employs but it has been in use for years without much guidance beyond a tutorial of the process, which is a testament to it’s usability.
An odd sounding tool, this is an addition to the HEK’s command line tool, which has been invaluable when reverse engineering the game. It reads the tag memory of a running instance of the game and allows me to display a variety of information that is useful for finding out what code does what.