Mr. Bland
Smash Rookie
- Joined
- Oct 12, 2014
- Messages
- 10
One or two pardons if I'm not posting this in the right spot. Feel free to move it as needed.
Hi guys! Like the thread title no doubt informed you, I've been working on getting Final Destination to actually work in Vs. Mode without crashing the game. And I did it. And then I uploaded a video to YouTube and... well, only a handful of people have seen it. Considering the implications, I wanted to make sure the information got to the right people, and so I came here.
I actually registered this account in order to download some files posted by other users while researching for this project. I didn't intend to post anything, so I picked Mr. Bland as a placeholder name. Oops. (-: My name is actually Guy Perfect, and I do a lot of game hacking. So that's me!
__________
This is basically a repost from a different site:
The usual level switch code for the North American release of the game is as follows:
Where XX is:
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, presumably because of 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:
I've tested this on the hardware and in Project64, as seen above, and the technique was discovered using Nemu's wonderful debugger. A link to a YouTube video demonstrating this on the hardware is as follows:
EDIT:
Heeeey, would you look at that. I can embed YouTube videos into my posts. Joy!
Hi guys! Like the thread title no doubt informed you, I've been working on getting Final Destination to actually work in Vs. Mode without crashing the game. And I did it. And then I uploaded a video to YouTube and... well, only a handful of people have seen it. Considering the implications, I wanted to make sure the information got to the right people, and so I came here.
I actually registered this account in order to download some files posted by other users while researching for this project. I didn't intend to post anything, so I picked Mr. Bland as a placeholder name. Oops. (-: My name is actually Guy Perfect, and I do a lot of game hacking. So that's me!
__________
This is basically a repost from a different site:
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 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, presumably because of 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
80099113 0019
D00A4D09 0010
81104C14 2002
D00A4D09 0010
81104C16 000E
I've tested this on the hardware and in Project64, as seen above, and the technique was discovered using Nemu's wonderful debugger. A link to a YouTube video demonstrating this on the hardware is as follows:
Heeeey, would you look at that. I can embed YouTube videos into my posts. Joy!
Last edited: