Oh snaps.
I still love that gif though.
I still love that gif though.
Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!
You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!
----------------------------------------------------------------
Debug Menu Replaces Tournament Mode (1.02) [Magus, donny2112]
-Selecting Single Button Mode takes you to the Tournament Melee mode instead
Gecko Code:
0422D638 38000006
0422C644 3800002C
ASM:
lis r4, 0x8022
ori r4, r4, 0xD638
lis r5, 0x3800
ori r5, r5, 0x0006
stw r5, 0(r4)
nop
lis r4, 0x8022
ori r4, r4, 0xC644
lis r5, 0x3800
ori r5, r5, 0x002C
stw r5, 0(r4)
nop
Hex:
3C808022
6084D638
3CA03800
60A50006
90A40000
60000000
3C808022
6084C644
3CA03800
60A50006
90A40000
60000000
----------------------------------------------------------------
Debug Menu Default Language [SypherPheonix]
DOL Mod
1.02 ────── 0x3F725B ─────── 00 -> ??
Values:
00 - Japanese
01 - US English
02 - UK English (PAL Only)
03 - German (PAL Only)
04 - French (PAL Only)
05 - Italian (PAL Only)
06 - Spanish (PAL Only)
Gecko Code: [SypherPhoenix, Apathy]
043FA258 00000001
ASM:
lis r4, 0x803F
ori r4, r4, 0xA258
lis r5, 0x0000
ori r5, r5, 0x0001
stw r5, 0(r4)
nop
Hex:
3C80803F
6084A258
3CA00000
60A50001
90A40000
60000000
-------------------------------------------------------------
Normal C-Stick Functionality in 1Player Modes (1.02) [Zauron]
Gecko Code:
0416B480 60000000
ASM:
lis r4, 0x8016
ori r4, r4, 0xB480
lis r5, 0x6000
ori r5, r5, 0x0000
stw r5, 0(r4)
nop
Hex:
3C808016
6084B480
3CA06000
60A50000
90A40000
60000000
Is there somewhere where wParam's hack is documented other than the Crazy Mod thread?Also, don't know if this'll be of any particular use to anyone that understands it, but I've been rewriting Gecko codes to their hex equivalent in order to load them off the memory card.
The ASM itself is not particularly optimized, but it works, and I'm not going to fix it until I come up with a system to write these to the memory locations quick and easy. Would Dolphin memory patches (via ini) work for that? Haven't actually tested, and I'm sure @ Dan Salvato or someone else has a better system for it than I.
Code:---------------------------------------------------------------- Debug Menu Replaces Tournament Mode (1.02) [Magus, donny2112] -Selecting Single Button Mode takes you to the Tournament Melee mode instead Gecko Code: 0422D638 38000006 0422C644 3800002C ASM: lis r4, 0x8022 ori r4, r4, 0xD638 lis r5, 0x3800 ori r5, r5, 0x0006 stw r5, 0(r4) nop lis r4, 0x8022 ori r4, r4, 0xC644 lis r5, 0x3800 ori r5, r5, 0x002C stw r5, 0(r4) nop Hex: 3C808022 6084D638 3CA03800 60A50006 90A40000 60000000 3C808022 6084C644 3CA03800 60A50006 90A40000 60000000 ---------------------------------------------------------------- Debug Menu Default Language [SypherPheonix] DOL Mod 1.02 ────── 0x3F725B ─────── 00 -> ?? Values: 00 - Japanese 01 - US English 02 - UK English (PAL Only) 03 - German (PAL Only) 04 - French (PAL Only) 05 - Italian (PAL Only) 06 - Spanish (PAL Only) Gecko Code: [SypherPhoenix, Apathy] 043FA258 00000001 ASM: lis r4, 0x803F ori r4, r4, 0xA258 lis r5, 0x0000 ori r5, r5, 0x0001 stw r5, 0(r4) nop Hex: 3C80803F 6084A258 3CA00000 60A50001 90A40000 60000000 ------------------------------------------------------------- Normal C-Stick Functionality in 1Player Modes (1.02) [Zauron] Gecko Code: 0416B480 60000000 ASM: lis r4, 0x8016 ori r4, r4, 0xB480 lis r5, 0x6000 ori r5, r5, 0x0000 stw r5, 0(r4) nop Hex: 3C808016 6084B480 3CA06000 60A50000 90A40000 60000000
wParam's own site (which was posted in that thread, I believe.) I can't post links, but his site is wparam dot com and the directory is /ssbm/.Is there somewhere where wParam's hack is documented other than the Crazy Mod thread?
Buffer Overflow [wParam]
Starts at 8045D850 (Nametag start), places 0xD4 bytes of garbage in Nametag to overflow, sets the stack pointer, then points to address for shim function
Hex:
DD064BDD
...
DD067FDD
804EE8F8
8045D930
00000000
Buffer Overflow Shim Function to loc [wParam]
Sends to arbitrary code location (8045E030)
ASM:
lis r23, 8045
ori r23,r23, E030
mtlr r23
blr
Hex:
3EE08045
62F7E030
7EE803A6
4E800020
The Buffer Overflow Return [Apathy]
Returns to 80239E9C
ASM:
lis r23, 8023
ori r23,r23, 9E9C
mtlr r23
blr
Hex:
3EE08023
62F79E9C
7EE803A6
4E800020
If you’re not talking about custom asm functions to “free space” in the RAM, and only concerning yourself with single line overwrites, it’s probably most efficient to use a table setup like wParam did. A table of memory addresses, one right after another. And another table of 32-bit words to write to these memory addresses, in the exact same order. And then have your table end with a void to know when to stop.Also, don't know if this'll be of any particular use to anyone that understands it, but I've been rewriting Gecko codes to their hex equivalent in order to load them off the memory card.
The ASM itself is not particularly optimized, but it works, and I'm not going to fix it until I come up with a system to write these to the memory locations quick and easy. Would Dolphin memory patches (via ini) work for that? Haven't actually tested, and I'm sure @ Dan Salvato or someone else has a better system for it than I.
Code:---------------------------------------------------------------- Debug Menu Replaces Tournament Mode (1.02) [Magus, donny2112] -Selecting Single Button Mode takes you to the Tournament Melee mode instead Gecko Code: 0422D638 38000006 0422C644 3800002C ASM: lis r4, 0x8022 ori r4, r4, 0xD638 lis r5, 0x3800 ori r5, r5, 0x0006 stw r5, 0(r4) nop lis r4, 0x8022 ori r4, r4, 0xC644 lis r5, 0x3800 ori r5, r5, 0x002C stw r5, 0(r4) nop Hex: 3C808022 6084D638 3CA03800 60A50006 90A40000 60000000 3C808022 6084C644 3CA03800 60A50006 90A40000 60000000 ---------------------------------------------------------------- Debug Menu Default Language [SypherPheonix] DOL Mod 1.02 ────── 0x3F725B ─────── 00 -> ?? Values: 00 - Japanese 01 - US English 02 - UK English (PAL Only) 03 - German (PAL Only) 04 - French (PAL Only) 05 - Italian (PAL Only) 06 - Spanish (PAL Only) Gecko Code: [SypherPhoenix, Apathy] 043FA258 00000001 ASM: lis r4, 0x803F ori r4, r4, 0xA258 lis r5, 0x0000 ori r5, r5, 0x0001 stw r5, 0(r4) nop Hex: 3C80803F 6084A258 3CA00000 60A50001 90A40000 60000000 ------------------------------------------------------------- Normal C-Stick Functionality in 1Player Modes (1.02) [Zauron] Gecko Code: 0416B480 60000000 ASM: lis r4, 0x8016 ori r4, r4, 0xB480 lis r5, 0x6000 ori r5, r5, 0x0000 stw r5, 0(r4) nop Hex: 3C808016 6084B480 3CA06000 60A50000 90A40000 60000000
(using arbitrary registers for this example)
R3 holds start of memory address table minus 0x4.
R4 holds start of ASM overwrite table minus 0x4
REPEAT:
lwzu r5,4(r3)
cmpwi r5,0
beq- STOP
lwzu r6,4(r4)
stw r6,0(r5)
b REPEAT
STOP:
Other stuff?
Flush Cache on Scene Change (1.02) [Dan Salvato, I think]
C21A4B70 00000004
3C608000 3C80003C
3D808000 618C543C
7D8903A6 4E800420
60000000 00000000
lis r3,0x8000
lis r4,0x3C
lis r12,0x8000
ori r12,r12,0x543c
mtctr r12
bctr
nop
r3 is the starting address, and r4 is the byte length of the range to flush.
Wait, please tell me I'm misunderstanding you and that you're not writing the ASM instruction hex by hand. We have programs for that.Thanks for the help, Achilles. I'll look into the table idea later.
I should've considered save states, but I'm still considering the possibility of using Dolphin's memory patches (If they can write to the memory card region on load and preserve that information.) If so, it'd be a lot easier to scrape together something in Python or C++ to just write the memloc:dword:data patches than a opening a file in binary mode, navigating to the offset, etc.. Plus it keeps me from forgetting the branch back to the original function (whoops.)
Frankly, I really want to get a hold of one of the Gamecube Devkits, like wParam had, so I can just write straight up ASM and compile it. Writing these functions by hand is both tedious and limits my capabilities. Honestly though, what interests me most is the amount of functions he had documented (Yay for adding more to my Dolphin memory map), and that whole item stealing system.
For instance, I had the tournament default settings written into memory, broke part of it, rewrote it, then exported the GCI that hadn't been updated in order to have a new revision backed up. So when I restored from the backup after crashing myself, I had to start from scratch on that function.
I'm literally writing them by hand, lol. Mind pointing me to the software? Cause I'd rather not being on my deathbed with PPC opcodes running through my head, like some sort of Lovecraftian insanity.Wait, please tell me I'm misunderstanding you and that you're not writing the ASM instruction hex by hand. We have programs for that.
ASM<>WiiRD converter.I'm literally writing them by hand, lol. Mind pointing me to the software? Cause I'd rather not being on my deathbed with PPC opcodes running through my head, like some sort of Lovecraftian insanity.
Edit: Dug around and found devkitPro. If you've got any other suggestions for software though, I'm open to ideas lol
So in short, your code is a more perfect emulation of v1.00 hitlag behavior?I guess I should be searching the thread instead of looking in the OP lol.
If it's this code though:
It wouldn't actually do anything besides change the attack's speed aesthetic by having the attacker not go into hitlag, while the important part with the victim still having the 3 frames of hitlag and full A/S/DIability remains :x
Edit: Nevermind, it does indeed make them harder to escape, but for a different reason. By the attacker not going into hitlag it locks them into hitlag without the ASDI or DI being able to occur in most cases. If SDI didn't go so far and it didn't look kinda odd, I'd say it would be an improvement in gameplay design to only be able to SDI the rapid hits instead of nothing, but testing it with Zelda's u-smash it's pretty easy to SDI out even when hit by the center of it since it's also no longer pulling you back in at all by being hitlag locked.
That memory card save sounds amazing.@ SinsOfApathy
The system I'm using for 20XXTE is the most efficient, and I will open source it once I have a release. I hook the actual Gecko codehandler into the game and point it to a Gecko codelist (both stored on the memory card). So, anyone should be able to take the save file, write their own code list to it, and copy it to the memory card without any additional hassle.
The current use for writing Gecko codes into ASM equivalents is for converting them to DOL mods such that they can be loaded on an ISO without the need for a codeset.
lol, I've done worse (BCEL and hunting down variables for RuneScape bots comes to mind), and I write PIC24 assembly and Intel assembly. Honestly though, using the tools for a few minutes, I think I actually prefer writing it by hand for certain things. Strange as it may seem.oh my god i feel so sorry for you writing them by hand holy crap lol
Yeah, I'd remember you saying you were injecting the gecko codehandler itself. I've found the ASM source for it, and considered that, but I dunno, there's a weird part of me that enjoys writing the ASM by hand.@ SinsOfApathy
The system I'm using for 20XXTE is the most efficient, and I will open source it once I have a release. I hook the actual Gecko codehandler into the game and point it to a Gecko codelist (both stored on the memory card). So, anyone should be able to take the save file, write their own code list to it, and copy it to the memory card without any additional hassle.
The current use for writing Gecko codes into ASM equivalents is for converting them to DOL mods such that they can be loaded on an ISO without the need for a codeset.
Yeah. The game handles the integer damage done (which is used for hitlag and such) for attacker, victim, and non-characters separately, so in 1.02+ there are 3 different places it increases the int damage from 0 to 1 if the float dmg is > 0 and < 1, making it act like a 1 dmg hit instead (3 hitlag), and preventing hitlag/DI being skipped by using 0. The first one which you found is for the attacker only, and all 3 need to be changed for it to work like the previous game versions. I had originally just changed the 1st part as well (with a nop on the beq- in my case), but noticed the character being hit still was going into hitlag and looked around for the other checks.So in short, your code is a more perfect emulation of v1.00 hitlag behavior?
Yeah, and another thing that's especially revolutionary about it is that -along with being able to work on unmodified consoles- the hack can then be copied over to other people's memory cards just like a standard save file, using an unmodified system's memory card manager. With so little effort to share everyone's awesome codes, Melee hacks will likely explode in popularity.That memory card save sounds amazing.
So we'll be able to use any gecko codetype? Sweet@ SinsOfApathy
The system I'm using for 20XXTE is the most efficient, and I will open source it once I have a release. I hook the actual Gecko codehandler into the game and point it to a Gecko codelist (both stored on the memory card). So, anyone should be able to take the save file, write their own code list to it, and copy it to the memory card without any additional hassle.
The current use for writing Gecko codes into ASM equivalents is for converting them to DOL mods such that they can be loaded on an ISO without the need for a codeset.
It should work just fine if you have a widescreen TV. Just remember to set it to "Wide" or "Full" depending on your TV, rather thanDoes the widescreen patch have any actual effect on a Gamecube?
Kind of been considering that, but I'd rather not waste my time if it's not going to work.
Wii also has a setting for widescreen.It should work just fine if you have a widescreen TV. Just remember to set it to "Wide" or "Full" depending on your TV, rather than
"Aspect" or "Normal"
Unless you use a Wii, then just turn it on (the code).
I don't know of a specific memory address for the version number, or if there even is one. But there's a million differences between the RAM addresses of 1.00 and 1.02. Just pick one and perform a check on that hex instruction.Just discovered that my Melee disc is 1.00 (Which explains so much over the years). There goes live testing for now lol
Edit: Which brings to mind, does anyone know where the version number is located in memory? I feel like a branch if equal would be a blessing for me about now.
Actually, I found it. It's literally at 00000007 (Apparently true over both GC and Wii discs, at a quick glance). I knew it had to be in a predetermined spot, because Dolphin is able to read it using it's DiscIO/VolumeGC.cpp. Just changed it quickly in a hex editor and checked the info tab on Dolphin and it showed the revision that I changed from 0x2 to 0x1 as Revision 1.I don't know of a specific memory address for the version number, or if there even is one. But there's a million differences between the RAM addresses of 1.00 and 1.02. Just pick one and perform a check on that hex instruction.
Version Check ASM
lis r4, 0000 ;Load our address 00000006 into GPR4
ori r4, r4, 0006
lwz r5, 0(4) ;Load contents of 00000006 [GPR4] into GPR5 (word: 000x where x is v num)
cmpi 7, 0, r5, 1 ;Compare GPR5 (Version number) with 1, store in CR7
blt 7, v_zero ;If version < 1 (Meaning version 0), branch to label v_zero
beq 7, v_one ;If version == 1 (Meaning version 1), branch to label v_one
bgt 7, v_two ;If version > 1 (Meaning version 2), branch to label v_two
Disable Revival Platform Exit Invincibility (1.02) [Achilles]I have version 1.01. Any codes that disable the invincibility gained after getting off the revival platform, causing the top blast line to either regular KO or screen KO instead of star KOing (these are both for when I'm in Super Sudden Death mode), or one that keeps Nana from dematerializing and respawing when Popo gets KO'd?
Depends on when you want to check. If you literally mean in game, you could always goes 0x68 from each players data pointer and see if they've spawned in. Just look at this spreadsheet.Is there a memory address that you can check during a match to find out which players (p1, p2...) are in the game?
If they're not in the game, their data offset pointer will be 0 anyway.Depends on when you want to check. If you literally mean in game, you could always goes 0x68 from each players data pointer and see if they've spawned in. Just look at this spreadsheet.
It does not display 6 stock icons. Those are still maxed at 5.What happens if you make it 6 or higher?
There's definitely a per player damage ratio.I don't see why that wouldn't be possible. If it's like brawl then I think there might be a simple damage ratio per player you could change. If that doesn't exist then you could possibly just hook into where the hitbox's damage gets loaded into and then scale it.
Apparently the reflection is not a big deal. According to JMC the biggest things are the stars (taken care of) and especially the little fountains. (As far as Dolphin goes. GC might do better/worse than Dolphin at some things)Code:Lagless FoD [Dan Salvato] 041cbbd4 60000000 041cbefc 48000028 041cbf54 60000000 041cbf84 60000000
Note that I haven't yet tested this on a Gamecube, but there's no reason it should lag at this point. I've removed background assets, the pool reflection, and all of the stars (each star was its own point in 3D space).
Also, thanks to Zauron for some useful notes on initializing stages, which I used as a starting point.