BlamLib has finally been added to the OpenSauce source-depot!
(Note: Not a programmer? You should probably just move along now)
BlamLib is composed of a series of .NET assemblies (one C++/clr, the rest C#) used for interoping with Blam Engine (the stuff that powers the Halo series and a couple other things) data. Data interop ranges from tag files (the engine's asset storage) to cache files (the engine's storage for release/shipping level builds) and all the little odds and ends that compose both facets.
BlamLib provides the building blocks needed to deal with tag files so you can create\edit\read\etc information without having to worry about various underlying details of the tag system. It allows you to open a cache file (ie, a level's monolithic data storage file) and perform various operations, eg, gathering build details, listing string ids, listing tags which compose the cache file, extracting tags, etc.
BlamLib also powers OpenSauceIDE. This IDE provides users with a somewhat automated tool interface for various OpenSauce operations. The IDE includes the CheApe tool which you use to create an optimized data storage (built from source XML files) which the OS HEK will use to interop with your new tag/scripting definitions that you've created in your game extension. Without building this data storage, the OS HEK would have no knowledge of your modification's new additions to the game.
The IDE also includes a tool for "applying" the patches to HEK EXEs which are needed to run the CheApe modifications. This makes it so that you can apply it to an already customized (albeit, unpacked) HEK program. It also makes it so that you don't have to download even more EXEs. You get to see what changes are being applied to each HEK program's EXE as they're maintained in OpenSauceIDE's project code.
Future tools could eventually make it into OpenSauceIDE. Like say, it's powered by BlamLib so it's really meant to act as the UI for all the functionality found in it.
Just like the current status of OpenSauce, this is in-development (read: beta) code. Nothing is final. I've only put it up now for programmers to get a feel for the library which I've been [growing tired of] developing in some way since 2004/2005. Some parts really need to be rewritten to make use of advances in .NET tech and also just because they're not very good (lived/learned over the past 6+ years). However, as each new game came out I had to adjust some of the library to include functionality (that wasn't there to begin with!) to interop, and interop in a standard way, with the new engine. BlamLib began development with only Halo 1 and Halo 2 (Xbox) interop in mind. Now it has support for the Halo series and even Stubbs. Albeit, I didn't always fully flesh out each engine's support as much as others.
So buyer beware. While I have no intention of doing anymore major changes (ie, code interface changes) to this specific codebase, things could change down the road. Right now, the road I'm on detours from BlamLib's for quite a few miles so I didn't want to be sitting on this code for any longer than I've already been.
Bookmarks