Since the last blog, I’ve been busy doing all sorts of things...
I finally got annoyed enough that a lot of our debug tools and console output were not working correctly…that I fixed them! Namely, they weren’t scaling for 4K so it either made them too hard to read or they would overlap things. The QA team also wanted a single “debug claw” for each game’s debug menu (the combo used to open the menu) which I saw to.
Another dev-only quality of life improvement I’ve been working on was making each game’s various logs all go in their own folders, instead of stepping on each other’s toes. That way it’s clear you’re looking at the network_debug.txt for Halo 3 and not say Halo 4.
There’s some Halo 3 fixes that I’m working on that kind of all tie together indirectly. I’ll start with what started it all. So, some may know that the Forgeable cardboard boxes on the map “Orbital” aren’t really Forgeable right now. Somehow, someone modified the asset for this object and deleted its properties, which the Forge system requires in order for you to be able to interact with it. That’s why they drop out of your hands as soon as you place them.
Then, on the map “Sandbox” the Golf club doesn’t actually have a HUD or backpack icon. Turns out, those assets were deleted. This prompted me to perform a folder comparison with MCC’s H3 assets and those that shipped with the “blue disk” release (the MP disc that came with ODST on the 360). That’s when I realized that there was another missing file. The map “Cold Storage” is supposed to have Flood infection forms running around outside the map. Except the creature asset is missing.
“So”, you say, “just add all of those missing files, ship it, #FixedMCC, the fight’s finished”. Well, not so fast. It’s not that simple. Nothing about MCC is ever simple. The Arbiter should really be our spokes…errr, person.
The problem with adding or removing assets to Halo 3 is that you run the very high risk of breaking map variants. Since the 360 days, and up until my fixes go live, Halo 3 map variants embedded content IDs for the things which are placed in them. Content IDs are dependent on the order in which content is linearly added to a map file. Modders know these as “tag indicies”. To ship MCC originally, a hard coded table was made to map a 360 content ID to the content ID which it is assigned to in MCC. That lets you ship, but that doesn’t solve the problem. If you add or remove content those IDs shift. Here, I’m trying to add back content to make Halo 3 be Halo 3 again. So we have to be more…indirect.
Think of the problem using websites and the internet. We use domain names like Google.com because they’re far easier to deal with than IP addresses. And what if the IP address changes? What’s the IP address of the site that lists all the new IP addresses?
Thankfully, it’s more or less straightforward to build this kind of indirection. The content which you can place in a Halo 3 map variant can be derived from about 10 or so “palettes” in the level data. These palettes are fixed, and the order of their elements are also fixed. Well, so long as no one does something like open the level data and go and remove entries or insert new ones. Adding new entries could be done (eg, if we wanted to expand the Forge palettes).
But, let’s not and say we did for this next release which is about #FixinMCC. So all that we need to do is now map either an old 360 content ID, or an old MCC content ID, to an ID that is the combination of a palette type and an index within that palette. Simple to say, but not as simple to do. We still need a hard coded table for all of this, since we cannot rely on the map data being loaded. Plus, while working on these fixes I also spent time adding additional sanity checks to the map build process to ensure all Forgeable content actually has the properties defined in order to be truly Forgeable, and not behave like the cardboards on Spacecamp- errrrr, “Orbital”.
I fixed some extra flavor stuff in Halo 2’s tutorial level. What kind of stuff? Play, and maybe you’ll see.
Halo 2 players should also find their FOVs to be a little more tolerable, especially in splitscreen. Oh, and player names will now be shown in the death camera instead of just service tags. Halo 1 also received some touch up for player name shenanigans.
Oh, and I think there’s one or two Halo 2 players that wanted to be able to melee-cancel (which still applies the physics impulse, but not the damage). They may be pleasantly surprised.
Some players should find a few control schemes in Halo 3 and H2A behave as expected or diagrammed.
Lock & Load
I spent a bit of time addressing Halo 1 and Halo 2 loading issues, namely around co-op situations. For example, a Xbox One X loads much faster than a regular Xbox so in Halo 1 it would start cinematics before the client finished loading, causing the client to miss the start of a cinematic once they did finish.
It also came to light that in Halo 1 co-op if a host or a client timed out waiting on one another, they would try and return to the main menu but end up crashing. It just wasn’t the right time to try and shutdown the Halo 1 engine. Fixing that was not straightforward and was caught kind of late.
Another Halo 2 co-op loading issue related to entering the next level while in remastered mode - Since the Xbox One X loads faster, they would generally finish loading and be looking at an arbitrary location in the level. The fix for this ended up being rather straight forward I think. I just force the engine to classic mode. This way the network transition screen properly renders (ie, the “Connecting to Session…” pop up) instead of random geometry.
Late Breaking Update (ske7ch's Note: As this blog was going to print, Sean followed up with a real time update on the issue noted above...)
Remember that Halo 1 co-op loading bug I mentioned earlier, then I said I fixed it? Heh, didn’t work. So, the Centurion Bond Broth-errrrr, wrong franchise... Turns out, part of the fix introduced a very serious bug. BUT! It, it didn’t cause Halo 1 to crash. Whilst not crashing is an improvement, there was no way we could leave the bad fix in the build, no matter how many laughs the bad fix’s behavior got among the team (see the video down below).
So at the 11th hour today, Monday, July 2nd, I had to strip out my bad change, do some more deep scrubbing of the code and figure out a fix that worked for both Xbox One and Xbox One X consoles, when either one was the host or the client. Timing issues, and debug-only edge cases caused this to be immensely troublesome to fix before I ran out of time to make our build submission. While I may have lost a bit more of my sanity, you all gained what should be a that-much-more-stable Halo 1 co-op experience and a new bug video from the trenches. Enjoy!
#FIXINMCC Blooper Reel
A few changes were made while trying to fix a crash with Halo 1 co-op loading. One of the changes caused this bug below, where various objects in Halo 1 remastered would become attached to other objects. That change was reverted and further work was done to fix crashing.
I’m not sure how many, or if any players have noticed, but the PCGR (I think since Flight 1.0…or maybe 2.0) now auto focuses to your entry. Or if you’re playing splitscreen, it will focus on the primary player first. I came out of a playtest one day really mad that it was always snapping to the first entry. It’s the little things, sometimes. Who knows, maybe the person that first implemented the PCGR also happened to be the best player in the universe and was always first?