SSB64 - Vs. Mode Final Destination via GameShark, At Long Last!
HTML-код
- Опубликовано: 16 сен 2024
- This video showcases a GameShark hack that enables the "Final Destination" level to be played in a Vs. match on the Nintendo 64 version of Super Smash Bros.
The usual level switch code for the North American release of the game is as follows:
800A4D09 00XX
Where XX is:
00 = Peach's Castle
01 = Sector Z
02 = Kongo Jungle
03 = Planet Zebes
04 = Hyrule Castle
05 = Yoshi's Island
06 = Dream Land
07 = Saffron City
08 = Mushroom Kingdom
0D = "Metal Cavern"
0E = "Battlefield"
10 = "Final Destination"
The problem is, trying to load level 0x10 in Vs. mode crashes the game. This has been the bane of the Smash community for eons now, and people have jumped through some serious hoops to get around this problem. Up until now, the best solution known was to hijack the 1P Master Hand encounter to inject additional players and remove the boss character. It's not elegant, and the match doesn't necessarily end when it's supposed to, but it works, and for many people, that's A-OK.
The short version of the story is that the value at 0x800A4D09 is read a number of times while loading the level, and one particular read is executed at address 0x80104C14. For whatever reason, if a 0x10 is read prior to the ensuing function call in Vs. mode, the game crashes. It likely has something to do with the Master Hand scenario's behavior, likely due to the graphics being tied to the boss's damage meter. In the event some bland, featureless level's index is loaded at this point instead (such as 0x0E, Battlefield's index), the level loads just fine in Vs. mode, but without the sparkly stars or changing background.
Fortunately, N64 games tend to load code into RAM and execute from there, so it's ripe for the GameShark picking. If 0x10 is in the level index variable, the instruction at 0x80104C14 can be replaced wholesale by something else that won't break. So instead of doing what it does--loads the value from RAM--how's about it just always loads 0x0E in the event the actual level index is 0x10? The CPU instruction can be overwritten by the GameShark, and the game program will reload it from ROM before the next match, so it won't break doing it this way.
There's also the matter of the music. By default, the level uses the "Master Hand is approaching" tune, which isn't the one you'd want to battle to. The tune has an index of 0x18, and the formal Master Hand battle music is 0x19. So, easily enough, a GameShark code can detect one and replace it with the other.
So for the main attraction... The following code is a fix-only code that enables Final Destination to be used through the usual stage switch code. It does not, in of itself, cause Final Destination to be loaded in Vs. mode:
D0099113 0018
80099113 0019
D00A4D09 0010
81104C14 2002
D00A4D09 0010
81104C16 000E
I've tested this on the hardware (as this video shows), and Project64, and it works swimmingly on both. Let it be known that this was made possible by Nemu64's outstanding debugger, which is what all emulators should strive to have.
Happy battling, everyone! I'd like to think this puts to rest one of the longest-standing enigmas of Smash history.