Duuuude! Fresh off the plane, konnichiwa. First-time post here.
I'll just dive right into it. A couple weeks ago, the N64 gameshark 3.3 I ordered arrived, and of course the first cheats I entered were the SSB64 stage modifiers that allow you to play on Battlefield and Metal Mario's stage. Everyone knows these cheats and they're great, but I feel they aren't enough. What I want is to change the actual Stage Select screen so that, (for example) if I replace Planet Zebes with Battlefield, instead of the Zebes background showing up, it's the Battlefield background, and furthermore, it loads a mini version of Battlefield in the preview box on the bottom-left instead of Planet Zebes. I couldn't find any such codes online, so I decided to flex my very rusty GS hacking muscles and try to find a code myself (seriously, the last time I tried something like this was more than 10 years ago...in elementary school). Using Cheat Engine, PJ64 2.1, and the rerecording Mupen (the TASing one), I actually made some progress. To clarify, I'm not talking about texture hacking here, I just want to swap a couple image files (or really just the pointers to them). Here's what I got.
I traced the following relevant variables through the code. These values are for SSB (U) on Mupen, not actual memory addresses on the cartridge. More on that later.
00A20658 (runs from 0-9; is 0 when the cursor/red box is over Peach's Castle, 9 when it's over Random)
012ABFE0 (where this is defined the disassembled code, replace the memory swap with an NOP)
0092F69C
012AC008
012AC018
[012ABFE8
[0092F644 (both these variables seem to contain the value for every texture that the game loads at some point)
012AC000
I'd like to draw attention to 0092F644. Using TAS Mupen in Cheat Engine, go to the Stage select screen, and pause the game. Input a direction (to change the stage) and advance one frame. On cheat editor, select Add Address Manually and add 0092F644. Then right click on it and select "Check what accesses this address" or whatever it's called. Go back to Mupen and advance one more frame. Four lines should pop up. Right click on the second one and select "View in Disassembler", and replace the line of code with "mov eax,8015BD68". Go back to Mupen, unpause it, and move arouond the stage select screen. You will a lot of "Sector Z" where other images should be.
To me, this means that at that particular line of code, the value for the next texture to be loaded passes through. So I got all excited, and went to make a cheat for it, which is a difficult process because Mupen doesn't support gameshark. So i had to find where 0092F644 is located in PJ64 (Pretty sure it's 4C683BC4) and then I had to find the actual cartridge memory. The bytes don't line up perfectly but it seems to be about 277442. I then made the following cheat.
D1277444 BD68 (If the least two significant bytes are equal to BD68)
81277444 BFA8 (Change them to BFA8)
I never really explained those values. You can get the (address value? I don't think so but maybe) image identifier from the formula 504+576n+0x8015B930, where n is the decimal value of the stage modifier. Sector Z is 1, which yields 8015BD68, and Congo Jungle is 2, which yields 8015BFA8.
In any case, the code didn't work. It's possible I got the address wrong (I did have to change it twice, from Mupen to PJ64 and PJ64 to actual), but my bigger fear is that the Gameshark doesn't update values fast enough. After all, this all takes place in less than one frame.
So my questions for the Smashboards community are:
1. How exactly does the Gameshark work, and what are its limitations?
2. Has someone already succeeded in making a texture swap code and its just not well publicized?
3. If not, can someone more knowledgeable than me finish what I started so I don't have to keep doing it?
Thanks, and sorry for TL;DRness
EDIT: Cheat Engine, not Cheat Editor lol. Also if my instructions don't make sense, just ignore them I guess
I'll just dive right into it. A couple weeks ago, the N64 gameshark 3.3 I ordered arrived, and of course the first cheats I entered were the SSB64 stage modifiers that allow you to play on Battlefield and Metal Mario's stage. Everyone knows these cheats and they're great, but I feel they aren't enough. What I want is to change the actual Stage Select screen so that, (for example) if I replace Planet Zebes with Battlefield, instead of the Zebes background showing up, it's the Battlefield background, and furthermore, it loads a mini version of Battlefield in the preview box on the bottom-left instead of Planet Zebes. I couldn't find any such codes online, so I decided to flex my very rusty GS hacking muscles and try to find a code myself (seriously, the last time I tried something like this was more than 10 years ago...in elementary school). Using Cheat Engine, PJ64 2.1, and the rerecording Mupen (the TASing one), I actually made some progress. To clarify, I'm not talking about texture hacking here, I just want to swap a couple image files (or really just the pointers to them). Here's what I got.
I traced the following relevant variables through the code. These values are for SSB (U) on Mupen, not actual memory addresses on the cartridge. More on that later.
00A20658 (runs from 0-9; is 0 when the cursor/red box is over Peach's Castle, 9 when it's over Random)
012ABFE0 (where this is defined the disassembled code, replace the memory swap with an NOP)
0092F69C
012AC008
012AC018
[012ABFE8
[0092F644 (both these variables seem to contain the value for every texture that the game loads at some point)
012AC000
I'd like to draw attention to 0092F644. Using TAS Mupen in Cheat Engine, go to the Stage select screen, and pause the game. Input a direction (to change the stage) and advance one frame. On cheat editor, select Add Address Manually and add 0092F644. Then right click on it and select "Check what accesses this address" or whatever it's called. Go back to Mupen and advance one more frame. Four lines should pop up. Right click on the second one and select "View in Disassembler", and replace the line of code with "mov eax,8015BD68". Go back to Mupen, unpause it, and move arouond the stage select screen. You will a lot of "Sector Z" where other images should be.
To me, this means that at that particular line of code, the value for the next texture to be loaded passes through. So I got all excited, and went to make a cheat for it, which is a difficult process because Mupen doesn't support gameshark. So i had to find where 0092F644 is located in PJ64 (Pretty sure it's 4C683BC4) and then I had to find the actual cartridge memory. The bytes don't line up perfectly but it seems to be about 277442. I then made the following cheat.
D1277444 BD68 (If the least two significant bytes are equal to BD68)
81277444 BFA8 (Change them to BFA8)
I never really explained those values. You can get the (address value? I don't think so but maybe) image identifier from the formula 504+576n+0x8015B930, where n is the decimal value of the stage modifier. Sector Z is 1, which yields 8015BD68, and Congo Jungle is 2, which yields 8015BFA8.
In any case, the code didn't work. It's possible I got the address wrong (I did have to change it twice, from Mupen to PJ64 and PJ64 to actual), but my bigger fear is that the Gameshark doesn't update values fast enough. After all, this all takes place in less than one frame.
So my questions for the Smashboards community are:
1. How exactly does the Gameshark work, and what are its limitations?
2. Has someone already succeeded in making a texture swap code and its just not well publicized?
3. If not, can someone more knowledgeable than me finish what I started so I don't have to keep doing it?
Thanks, and sorry for TL;DRness
EDIT: Cheat Engine, not Cheat Editor lol. Also if my instructions don't make sense, just ignore them I guess
Last edited: