Ramblings of a Tampa engineer

This post is nothing more than a memory of a previous project. For context, during my middle school and high school years, the modification (modding) of console Halo games was my hobby. While this may make zero sense to some people, I hope to explain the more complicated things along the way.

Halo 2 modding was a huge boom online in a variety of communities. The rise of online forums and instant messaging was home to this universe of community knowledge, tools and more. These modifications allowed you to change anything about the game (assuming the tool and knowledge existed to do such things).

This led to crazy creations such as this

This was the ever classic and replayed Soccer Mounds by Freakazoid. As you can see the modification took things to a crazy level introducing a soccer field into the game. These mods attracted attention due to the wide variety of features they brought to what was originally a first person shooter.

Others in the online Halo communities took a more professional approach and created works of art that could be released and published in the game themselves.

This was Nightwinder 2 by MrMurder. This modification had new models for weapons, new skins and an entire new balanced sandbox of weapons. It wasn't triple AAA game standard tested, but the map was polished and excellent to play with friends.

As time went on and the population dwindled, few extremely talented creators remained. They pushed modifying the game to its limits.

Biodrop by Darkshallfall took particle editing, object editing and HUD manipulation to the next level. A masterpiece showing what careful work and excellent tools could accomplish.

There were literally hundreds of maps released by talented creators. It could be an entire blog post in itself talking about these maps. Unfortunately the test of time have taken the proof and record of most of these maps which now only live in the memories of those who saw them.

Before links died and years passed, there were too many maps to play and the idea of "mappacks" began to form. Downloadable Content (DLC) is how official companies provided additions to the game, but through the power of modifying these DLC packs mappacks were created.

Except how did one distribute a modified (arguably illegal) build of Halo 2? This is where patches came into play. A patch was a file that had the differences between a clean (unmodified) file and the dirty file. You were left with a smaller file that could be reapplied to a clean map to reproduce the creation. This allowed people to stand in a gray area as it was okay to transfer those patch files between friends. They were also a lot smaller than 50mb .map files that the game had.

The first patch tool used around the communities was PPF-O-MATIC. This little tool allowed map creators to distribute .ppf patches.

These weren't perfect patches as they were originally designed and purposed for patching PlayStation ISOs (PlayStation Patch Format). So SuperPPF was invented with the goal of creating a patch format for .maps and used 4 blocks instead of 1 internally. This meant that switching a byte wouldn't cascade changes through the entire file in PPF. It would stop after the first block, which kept full byte shifting isolated to blocks.

Besides obviously blinding you with colors and Comic Sans, it was actually designed with Halo map patching in mind. This led to a faster, quicker and more optimized patch file. However, moving from a binary single block patch meant that bugs were discovered in the handling of the Halo .map file as it had to read and understand the .map file in order to create a proper patch. Bugs due to hardcoded locations vs reading the file header and a crazy design led to Serenity.

Correction (April 2020) - SPPF did not launch after PPF, Serenity did and then SPPF. Details can be found here.

Serenity was the 3rd iteration of Halo .map patching and was crucial to the sharing and patching of mods.

It packed a modern and professional layout and worked quicker with smaller patch files than its previous predecessors. Technically, it broke the patch into 35 blocks plus a block for every tag in the map. This required the map to be flawless though, as any mistakes in the tags would break Serenity as it couldn't find the proper locations to begin creating patches.

With these tools any new user to the Halo modding community could follow some steps and play any mod. He or she simply had to obtain a clean map and apply a patch to it. Creative minds already had ideas to package a bunch of patch files together and release a mappack.

This led to some amazing creations such as Killtrocity Mappack v1.

This was a highly modified build of Halo 2 with all modified maps. The distribution of this mappack was downloading a 408MB zip file and starting a script that would build the modified maps from the clean maps present on the host's computer. Once finished the user could burn or install this modified build of Halo 2 on their xbox. This leveraged the power of Serenity v3.1 and SPPF for patching maps.

First off, uploading a 408MB file in 2006-2008 was not easy. All the popular upload sites had a max file size for the free tier and torrents were just hard to seed. I thought I was smart buying a 2.95$ a month shared hosting plan at Bluehost to help share the file. The instant I started uploading files, it got suspended because Bluehost was a "web host" and not a "file host".

After the above mappack was released, people were hooked and this led to the release of Killtrocity v2, and Killtrocity AI Mappack and the reason of this blog: Halo 2 Phantom Mappack.

I created Phantom Mappack which had 90 maps. This mappack had all Serenity v3.3 patches, fully automatic patch system, custom video intro and an extensive help document that included information on how to create an .iso and build the mappack.

I had no idea what I started when I began this project (In early 2007), so much so that it wasn't until January of 2010 when the mappack was released. So what caused the delay?

In short: I was in over my head.

Creating a mappack that

  • had custom mainmenu pictures
  • custom mainmenu design
  • automatic patch program
  • documentation
  • Working System Link support
  • and more

was simply too much for one person, especially for someone who had no real idea what he was doing. I had started this project simply to launch a mappack off the success of popular Killtrocity mappack series.

The first daunting task was to create mainmenu pictures for every map. With the release of Serenity, the mainmenu image for mods could be embedded into the patch format. So the general flow was to patch a map, install it on xbox, launch Yelo (A trainer to take screenshots of xbox) and load the map to find a good screenshot. Once obtained, you could use a plugin for Photoshop and a template to obtain an image that looked something like this.

This preview image was from Nightwinder2 and was more than just a screenshot cropped into a template. I did not create this one.

This .dds file was picky as it required a specific size in addition to maintaining the border and special black lines. My lack of organization and constant failures made creating 90 of these quite annoying. Thankfully some of the more popular mods already had a mainmenu image embedded in the patch, which was an amazing feature of Serenity.

After months passed, I had 90 mainmenu pictures. I was ready to make the mainmenu. This was another nightmare as the tools we used to modify mainmenu.map might corrupt the map. There was no version control or Dropbox, so I learned quickly to save versions of my file between any operation because I feared corruption on every save.

After the long task of creating a 90 map main menu, I was presented with my first large problem. Launching this main menu only had pictures for the first 60 or so maps even though all 90 were injected. Thinking it was a mistake, I recreated the main menu and the problem was there again.

I asked for help and apparently there was a limit of images/assets and the tools available at the time could not handle that for some technical reason that I don't know or remember. A mappack without preview images was like browsing a furniture magazine with no pictures.

So I gave up.

Months and months passed and Prey released a tool called "Menu Menu Menu" which was an advanced mainmenu.map editor. While still unable to save all 90 maps in one file and retain images, it had such an improvement over the previous tools.

The ordering, description and images in this tool made adapting and inserting new maps a breeze. Crashes were rare and corruption even rarer. This new tool gave me the drive to split the mappack into 2 parts both at 45 maps.

Learn about all the map editors from that time in this related blog about Halo 2 Map Editors

45 maps was still pushing it. DLC and official maps used a different format for adding new maps as they couldn't patch the original .map file, so I believed I was encountering issues that the original file simply wasn't meant to do.

After creating a highly modified mainmenu, I had to "theme" or skin it so it wouldn't look like the original. This was another nightmare. Modifying regular Halo 2 maps was easy, but for some reason attempting to modify an already highly adapted mainmenu.map file led to corruption and failure. This was probably because tools probably couldn't handle the uniqueness of my two mainmenu files. Attempting to add custom backgrounds or reorganize the screen ended badly. Occasional tests worked but mostly failed, so I made a pretty basic mainmenu.map theme with nothing more than a color tint and different logo. After so long, I just wanted to be done.

I was still about a year and half away.

After this, it was time to build the patch system for this mappack as sending .map files was not allowed nor feasible. This was another stroke of idiocy from myself. I quickly found that I needed to know programmatically what clean map a .serenity file was hooked to. Since my brain couldn't wrap the concept I began writing the worst code possible that would read the filename to determine the .map file it needed to patch and then execute Serenity via command line.

A friend quickly stopped me and instructed me how to do it cleaner. Now we simply iterated through the .serenity files reading those for the maps needed. At this point I simply required the user to have all those files in a certain directory.

Failure to do so would have my little application scream at you. I had so much fun making layouts in Visual Studio and creating this application. I was becoming addicted to my hobby which would soon lead to my college career and job.

After months of testing, debugging and fixing. My auto patcher was complete.

Users had full control to build either all 90 maps or v1/v2 separately. It was ready to be tested. I wasn't ready to send this to any remote friend, so I had my good local friend PyroSquirrell take it for a spin. Some bugs and flow problems were discovered and he became my QA tester for the project.

We were ready to try it out and play. We got on XBConnect and joined each other. We played some maps and encountered another nightmare. Some maps froze the xbox on load. This was known as SLC bugged or System link broken. While my memory on this is fuzzy, you had to take certain steps when building modified maps to ensure they were SLC compliant. Otherwise you were left with a .map that would freeze xboxes when loaded in a System linked environment.

I remember crashing our xboxes to find all maps that failed. It was sadly more than 10. Research began on how to fix this problem. It was easier than I thought for some maps and impossible for others. It involved cloning tags that existed on the map in order to use those as the reference for objects that were cloned or used from a non-local .map source.

Entity became my tool for this with Insolence to fix the reflexives and idents that some items needed to have fixed.

Entity has been updated by troymac1ure on Github if you are interested.

This was a slow process of modifying the .map file and recreating the .serenity patch and retesting it with a friend. It took months, but I slowly fixed some mods. Some were removed from the mappack in favor of others who had no problem with SLC, as my knowledge wasn't there to patch all the broken maps.

Things were looking good at this point. It was just a painful process of writing documentation, recording a video, grabbing screenshots and making sure the final .zip file was without error.

Sifting through hours of footage and learning how to use a video editor took some time, but I wanted the release of my mappack to be perfect. The install guide was an HTML file added in the final .zip. I did this so no matter what happened online or how the project was shared documentation would follow it.

I'm a bit embarrassed of the design of it, but CSS was still being learned and rounded corners were amazing in early 2009.

After final tests and deleting and repatching my project too many times, I created a fake box art image like the mappacks prior.

This was the last thing before I zipped up the final package and sent it to the world. It was released January 8th, 2010 on multiple sites which unfortunately was pretty late in the cycle of Halo 2 modding. The "boom" period had passed and those remaining had already played all the maps in the mappack.

It however provided a huge learning experience and was amazing to finally get released. For a few months after the release I occasionally saw a lobby on XBConnect where people were playing Phantom Mappack. It felt great that people could use my project (which was a collection of others great work) and have fun with friends remembering all the great mods that were made throughout the history of Halo 2 modding.

If you are still in a Halo 2 modding mood. RemnantMods still exists. Technically, so does my site but it hasn't had registration enabled in 6 years.

You’ve successfully subscribed to Connor Tumbleson
Welcome back! You’ve successfully signed in.
Great! You’ve successfully signed up.
Success! Your email is updated.
Your link has expired
Success! Check your email for magic link to sign-in.