Guitar Hero Encore: Rocks the 360

So, I guess it’s officially Musical March. For TCRF, I’m still collecting stuff on the GH:80s press demo, and the other disc that leaked, the GH1 demo, I’m not even touching since it’s a fucking gigantic project I’m fully expecting to need a team of people putting it together. So in the lull while those get worked on, never knowing how to pass up an “easy” project, I’ve instead elected to port a bunch of perfectly good songs as a way to prime the hole for marfGH. Let me explain…

So there’s been ports of PS2-exclusive GH content to GH2 360 for ages now. Someone put together a DLC pack of GH:80s material, and some of the early demo charts (“I Want Candy”, “Metal Health”, etc), 360 people are always looking to get in on. Yet, the 360-exclusive songs sit generally forgotten by both camps. There were 22 totally exclusive tracks and 12 GH1 ports with separated bass. Naturally, the GH1 ports have always been of interest to “GH1 remaster” sorts, but the other 22 are barely even brought up.

And really, I think that’s kinda sad. The on-disc stuff is all pretty damn good (got “The Trooper” and “Hush” for covers and “Possum Kingdom” and “Dead!”–yes, the MCR song–for masters, among others), and while the DLC leans a bit heavily on the 2000s metal (I hope you like Atreyu!), there’s also some otherwise spirited picks–Dropkick Murphys, a whole pack of other MCR songs, fucking “Sin Documentos”! (Plus some of that 2000s metal, I like–“Seeeeeept feeeemmes ont versés trois cents larmes”…)

Now, stuff from GH2 360 is pretty much interchangeable with stuff from GH2 PS2. Charts are identical. Vocal files are identical. Song definitions in the songs.dtb script are mostly identical. The part where stuff differs is in the audio encoding–360 uses MOGG, PS2 uses VGS. Audacity also takes MOGG without a problem (as far as I know, it’s just Vorbis with a different header, or maybe even just a different extension), so really, it was more tedious than difficult to port every single 360 exclusive, tier them, and get a disc going with them. Sorta.

Let’s talk about Guitar Hero Encore: Rocks the 360 and the process of debugging a crashy game.

GH Encore: Rocks the 360 final tier
I even got six songs to a tier like in the 360 version! (“Trippolette” and “Graveyard Shift” seemed to fit with the other GH1 + bass ports, and I needed two more to make an even 36.)

At this point, all songs in all the tiers are playable. The holdup on this disc is partially polish and cosmetic (would like a custom splash and a custom main menu, mostly, thinking about recoloring the existing ones perhaps), and partially some debugging. As it stands today, GHE:360 isn’t beatable. I only have six tiers here versus the normal eight tiers. The game will actually auto-detect what the last song in Career is, giving that “beat [x] to win” string in place of the normal “beat the encore to continue your Career” string, but it crashes after the song as the game can’t quite navigate the post-final encore flow.

This is where a little gift from the heavens comes in, something that was dropped in our lap on accident thanks to the Project Deluge leaks: a fully debug-enabled GH2 executable. Before, we had zero way of telling how the game was crashing, only that it was crashing. With this, benign errors pause the game and ones that cause crashes and TLB misses give us not just an error, but a full stack trace.

Debug GH2 crashing with a stack trace
Yes, this is what that debug executable looks like when it crashes. It’s a little eerie, but it’s a godsend.

To give you two different examples of how this thing helped me navigate bugs in GHE:360, I was getting TLB misses on startup ever since I started testing the game, albeit benign ones. Now, if you get TLB misses when the Activision logo appears at startup, that means the game is having trouble loading song data. There’s three places the game loads song data from, songs.dtb (for song definitions), campaign.dtb (which defines tiered songs and their order), and store.dtb (which defines bonus tracks and their order).

Previously, I just had to guess what could be causing said TLB misses. Normally, it’s a song definition that gets referenced in campaign.dtb and I screwed something up. Problem being, all the songs on the disc play perfectly fine. I was looking at a situation where this disc would crash on console without any way of knowing why or how to fix it.

With the debug executable, it told me that it couldn’t find an array in gh2.dtb, which is the game’s main “include” script. DTBs have node numbers, which was also listed, and the function at that node number in that file referred to the store…and in my haste to clear the disc of store songs, removed the bonus song array entirely. (Checking with GH:80s, which also has no songs in the store, indeed, it’s simply a defined array with nothing inside it.) TLB misses solved.

The other example, and the one you see listed in that error up there, is that I didn’t have the last two tiers defined in the campaign, since they weren’t being used. This is actually an error the retail game suppresses, at least on emulator, so it was good to dig into it and make sure I wasn’t getting another console-only crash. Turns out, this too was defined in gh2.dtb, where the venues are defined in a venues array, (venues battle small1 small2 big theatre fest arena stone) like so. Killing the last two items in the array fixed the crash altogether and gave me a lead on potentially being able to skip any venue I don’t want to play on further custom discs.

To say this is a boon for the scene is an understatement.

Me and Scott marveling at the wonders of the debug GH2

Back to the “Bark at the Moon” crash, however, it’s gonna take some reverse-engineering to figure out. Turns out it crashes the game so hard that it doesn’t even have time to throw up a stack trace.

Thankfully, I’m not out of options. I have a feeling the shortname the game is looking for as the “final song” isn’t defined in script, but in the game’s executable itself (joy). One of the new guys in MiloHax, an absolute legend by the name of Zeddikins, actually has experience disassembling the assembly the PS2 uses and is able to get much closer to the code than we could before. (It’s through disassembly that the strum limit was able to be patched.) He was suggesting some places for me to look earlier today, so hopefully, this bug too shall fall.

And hopefully, this disc will be out sometime before the summer. I really aim to have this one prime the way for how I’ll eventually release marfGH. Sending it out to testers with access to actual hardware (unlike me), having something to announce to MiloHax and the world at large, making a rambling demonstration video, and showing off some of the polish and tricks I’ve picked up over the years (custom save icons? Full practice mode audio? Tweaked Career flow in the future?)

I was always really fond of Rock Band‘s track packs, those packs of 20 or so DLC songs you could get for your PS2 that didn’t take DLC, and I consider this sorta thing to be of the same vein. Even if Harmonix doesn’t give a shit anymore, I’m happy to carry it on.

Comments are closed.