fun fact:
This game I'm trying to reverse engineer defines one thousand, one hundred, and fifteen v-tables!

second fun fact:
I'M ABOUT TO PULL OUT ALL MY HAIR

on the positive side, I think I've discovered built-in modding capability that's gone unnoticed for 13 years

I've moved on to ADVANCED reverse engineering techniques.

I emailed the company that made the game asking them for the specs/SDK for their engine.

oh sweet lord this code uses TEMPLATES.
like C++ reverse engineering isn't bad enough, now I have to deal with TEMPLATES?
vtables, templates, and a compiler that aggressively inlines.
this is SO MUCH FUN

OH GOODY they have a sentinel value in their vector implementation.
is it NULL?

nope. it's '#EOF'. as a pointer.
(void*)0x23454f46

This is safer than it sounds: The Wii's virtual addresses are in the 0x80000000 - 0xD3FFFFFF range, with 32 kb of registers up in 0xCD000000.

Nothing is ever mapped at 0x23000000.

I want to ask the developers so many things.
like why they're calling getBinaryData on a GuiAssetProvider (and providing a GuiResourceLock) to load a TEXT FILE.
I wonder if there's a way to get a zlib chunk to compress into a specific size. like a harmless way to pad it out? because otherwise I'm gonna have to figure out some more info about the format of these bundles, as any changes I make will make the file-regions change size.

turns out to be a non-issue. I modified the data to have more redundancy (overwrote one filename with another) and now it got bigger

what

it's mocking me. I swapped "classic" for "hawaii" and it got 2 bytes bigger.
so I tried "ny" instead. much shorter!
now the file is 6 bytes bigger.
boo. patching doesn't seem to work.
I'll have to understand the BundleManager system a lot better to figure out why that is, or if I am simply wrong. Anyways, I can always patch the files on the disc.
hot take: if "(int*)(this + 0x56990)" ever appears in the decompiled code, YOUR CLASS IS WAY TOO FUCKING BIG
@foone that's insane. The worst I had was a class hitting a 64k limit when adding a bunch of logging support. This ran in the 80286 protected mode. The os, OS/2 was odd that many drivers were still 16-bit while the OS was 32-bit.