This page contains links and small writeups on various pieces of Software I’ve written (or helped write in most cases), alongside links to the GitHub pages for them.
A Mod Manager (more accurately a Mod Installer) for Sonic The Hedgehog (2006). This project is a collaborative effort with Hyper (as in he did 99% of the work beyond my initial proof of concept).
The Mod Manager project was mostly started due to personal frustrations, as modding ’06 pretty much required keeping multiple copies of it and manually replacing files. This led to me having multiple copies in various broken states, with the occasional cross contamination. Eventually I decided to just write a quick thing to copy the files for me.
After a while, we decided to work together to clean up my code and add basic features (like a priority system), with the design of the program taking heavy inspiration from HedgeModManager. The main feature quickly became the ability to merge mod archives, saving mod developers from needing to provide a full archive when they only modify one or two files in it.
The Mod Manager has since had two rewrites (and honestly may be due for a third) thanks to us improving in our coding abilities, both on the back and frontends. As our older code is very sloppy, it became difficult to add new features to the older versions; the patch engine in Version 2.0 was also hardcoded, so every new patch meant a new release pushed. This was replaced in 3.0 with a modular system, allowing new patches to be dropped in without affecting the manager itself.
An injoke regarding certain developers of the Mod Manager is its alternative names, as I once referred to the original design as “The Poundland Knockoff” of Mod Managers, so the first rewrite was considered an upgrade to “The ALDI Knockoff”. While this joke IS present in Version 3.0 (known internally as Project Rush), it never really stuck, as “Tesco Own Brand” doesn’t really have the same humour.
A suite of different randomisers baked into one program, designed to edit various parts of Sonic The Hedgehog (2006). This project was created after being inspired by the Sonic Adventure Randomisers (mainly the one for Adventure 2) and is arguably what truly got me back into writing code.
Initial versions of the Randomiser Suite were based on the SET Data implementation in Radfordhound‘s HedgeLib# library, however, this implementation was never finished, leading to many missing features and buggy behaviour (which would make the game crash; a lot). After quite a while, with more experience under my belt, I worked on hacking in support for the missing features in my trademark messy way, allowing the Randomiser to actually work more than 10% of the time.
The eventual release of the Randomiser Suite was another collaborative effort with Hyper, as my design skills with user interfaces is… Lacking… Shall we say?
Using my updated version of HedgeLib#, which I continued to bodge formats into, we eventually implemented all the features I had in previous, failed rewrite attempts, alongside some new ones. Although the project stagnated for a while due to my own laziness while the Marathon project was developed.
After a while, I decided to revisit the Randomiser Suite with the aim of ripping HedgeLib out of it and replacing it with the cleaner Marathon library, an act which finally caused me to get off my ass and write usage documentation, as well as finally make a release build of the program.
I eventually ended up rebuilding the Randomiser Suite from scratch (again), which became Version 2.0, this version stuck around for a bit before being replaced by another rewrite, which kept most of the underlying randomisation code, but moved the UI to the Windows Presentation Foundation, providing a MUCH cleaner user interface. This is the codebase that is being used to this day, as I actually still understand how it works.
A library for working with various formats in Sonic The Hedgehog (2006).
While Marathon isn’t my project, I have contributed to it, mostly by porting and cleaning up various format implementations from my bodged to hell fork of HedgeLib#. My contributions are things like SET Data support (based on the original HedgeLib#’s unfinished implementation), MST support (based on GerbilSoft‘s MST06 C++ project) and support for the Common Package binary file (done mostly through trial and erroring numbers to try and understand what things do.)