-
Notifications
You must be signed in to change notification settings - Fork 8
WiiU ROM Layout Notes
The table at 424648
seems to be a "record id to level data" pointer table. By default it is
1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 0 0 0 ...
Which corresponds nicely to the 38 levels.
The location of the number seems to decide what level will get played. For example, if you swap 1
and 3
, then choose to play Classic World 1-1, you will actually play Classic World 1-3. It seems like what the game is doing is searching this table for the chosen RecordId (in this case, assumed to be 1), once found, its index is the index of the level that will be loaded from the level data section.
It seems to require uniqueness. Duplicating a number often makes the corresponding level unplayable. For example, replacing a value with 1
such that there are two 1
s in the table makes Classic World 1-1 unplayable, while the other levels remain playable.
Removing a record id from the table makes that level unplayable. This makes sense, it looks for the current record id, doesn't find it, so doesn't know what level to load.
Telling it to load a level beyond 38 locks the game up. I have a VC patched rom with 39 levels. Sticking 0
index 1 (to wipe out the existing 1
), then a 1
index 38 does not cause level 39 to load as you might expect. But I think this is just because levels beyond 38 are just not playable for other reasons.