• 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!

Melee Gecko Codes + Guide and Discussion

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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 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
 

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
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 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
Is there somewhere where wParam's hack is documented other than the Crazy Mod thread?
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
Is there somewhere where wParam's hack is documented other than the Crazy Mod thread?
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/.

Essentially, you're going to write garbage bytes at the nametag location (8045D850 in 1.02) until you reach 8045D924. (0xD4 bytes of garbage). Then you'll want to write:

Code:
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
After that, you write the shim function starting from 8045930. That function is:

Code:
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
From there, you're at location 8045E030 where you can write your arbitrary code functions, that'll also be saved on the memory card. Be sure to end the code with a branch to 80239E9C. Personally, I just use:

Code:
The Buffer Overflow Return [Apathy]

Returns to 80239E9C
ASM:
lis    r23, 8023
ori    r23,r23, 9E9C
mtlr    r23
blr

Hex:
3EE08023
62F79E9C
7EE803A6
4E800020
Also, sidenote, the end of the memory card is 8046B0EC, so I wouldn't suggest going past that. And wParam himself changes the name of the save at 803BAC1C, in order to identify it. I don't do that, but you're welcome to.

Edit 200000001: Also, wParam has a DOL converter on his site. But it literally writes every single bit in the DOL, which I find horribly inefficient. It's much easier to just move data into locations you want to write to. Especially since finding the DOL location is fairly easy.

Be sure that after making changes, you open a menu that causes the "Saving" icon to appear (Personally, I just enter Melee and then back out.) That way, you're changes are written to the memory card, then you can export the GCI from Dolphin for your personal use. (Or if you're a real superstar, use the built-in save function at 8001BE30 to save it yourself.)
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
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 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
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.
Code:
(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?
And that is all the ASM you will need. Just modify your tables as much as you want at this point.

You can use Dolphin save states to add batch code to the memory card location. See here.

And you’ll probably want to add this in at some point.

Code:
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.
 
Last edited:

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
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.
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.
 
Last edited:

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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.
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
 
Last edited:

zankyou

Smash Lord
Joined
Sep 12, 2014
Messages
1,055
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
ASM<>WiiRD converter.
 
Joined
Oct 10, 2011
Messages
1,126
Location
Boise, ID
NNID
dansalvato
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.
So in short, your code is a more perfect emulation of v1.00 hitlag behavior?
 
Joined
Oct 10, 2011
Messages
1,126
Location
Boise, ID
NNID
dansalvato
@ SinsOfApathy 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.
 
Last edited:

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
@ SinsOfApathy 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.
That memory card save sounds amazing.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
oh my god i feel so sorry for you writing them by hand holy crap lol
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.

@ SinsOfApathy 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, 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.

It's probably going on the backburner for me regardless, since thanks to wParam's notes, I have all the information I need for a project I'd abandoned due to lack of information (and drive to continue searching for it).

But I'll eagerly await your release.
 
Last edited:

Magus420

Smash Master
Joined
Dec 13, 2003
Messages
4,541
Location
Close to Trenton, NJ Posts: 4,071
So in short, your code is a more perfect emulation of v1.00 hitlag behavior?
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.
 
Last edited:

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
That memory card save sounds amazing.
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.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
Does 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.
 

Cyjorg

tiny.cc/19XXTE
Joined
Nov 18, 2013
Messages
686
Location
Purdue University
@ SinsOfApathy 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.
So we'll be able to use any gecko codetype? Sweet
 

Doq

Smash Lord
Joined
Dec 28, 2012
Messages
1,037
Location
The Lab, Sweet Home, OR
Does 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.
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).
 
Last edited:

DRGN

Technowizard
Moderator
Joined
Aug 20, 2005
Messages
2,179
Location
Sacramento, CA
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).
Wii also has a setting for widescreen.

It always bugs me if the picture is distorted when playing in 4:3 in widescreen mode, or 16:9 in normal mode. ...Also, more people need to know to set the Wii to output progressive when playing on a flatscreen.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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.
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
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.
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.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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.
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.

Wanted to keep it stupid simple, since I'd rather it be readable than some arbitrary address I'd chosen.

Code:
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
I've also been experimenting with the nametag system itself. We can write out whatever we want in the garbage, and it'll show up. Just don't put 00 anywhere, use 20 to put spaces.

 
Last edited:

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
I should've looked at that page. I have it bookmarked for a reason :facepalm:

Edit: I cannot for the life of me find the current animation frame. wParam's notes don't have it, and I even searched around the entire player struct.

I found an undocumented address that has the number of frames since the given player's previous attack action (meaning it doesn't restart when you jump, etc.). I suppose that works, since I can use it for delta frame time when action state changes. Pissing me the hell off though. I'm going to have to parse frame data on moves one way or another, I suppose.
 
Last edited:

Wooggle

Smash Apprentice
Joined
Jul 7, 2014
Messages
83
Location
NJ, USA
Here's a code that I made for my own personal use, but I decided to post it here in case anyone else wants to use it. It is based on Zaurons "Disable Tree Blow on Dreamland" code, but it adds a way to toggle it on or off. It even works on training mode

Disable Tree Blow on Dreamland if P1's nametag is !WND (1.02)
Note: May or may not work on Dolphin, but it works fine on a console

C2036D70 0000000D
3E208021 62311444
3E404800 6252059C
92510000 3DC0EC0B
61CE2020 3DE080BD
61EF5D60 820F0000
7C0E8000 40820034
3DC00B20 61CE170B
820F0004 7C0E8000
40820020 3DC0200D
61CE0F0D 820F0008
7C0E8000 4082000C
3E406000 92510000
3BE00000 00000000

DOL Mod
 
Last edited:

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
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?
Disable Revival Platform Exit Invincibility (1.02) [Achilles]
040D5738 60000000
 
Last edited:

Wooggle

Smash Apprentice
Joined
Jul 7, 2014
Messages
83
Location
NJ, USA
Is there a memory address that you can check during a match to find out which players (p1, p2...) are in the game?
 

Achilles1515

Smash Master
Joined
Jun 18, 2007
Messages
3,211
Location
Cincinnati / Columbus OH
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.
If they're not in the game, their data offset pointer will be 0 anyway.

Stock Icon Display Mod (1.02) [Achilles]
042F8334 2C000000

Stock counts above this value are displayed as text.
(default: cmpwi r0,5 - 2C000005)



Capture.PNG
 

Cyjorg

tiny.cc/19XXTE
Joined
Nov 18, 2013
Messages
686
Location
Purdue University
Leaving CSS Loads Debug Menu (1.02) [Jorgasms]
041a56b0 38600006

Boot to Debug Menu (1.02) [Dan Salvato, Jorgasms]
041BFA20 38600006

Leaving Debug Menu Loads CSS (1.02) [Achilles]
041b0a14 38600002

Forget who was looking for this (@Starreaver1 ) but their goal was to boot to the CSS after pressing start at the start menu to keep the main menu music from playing. This specific set also allows for a quick access rumble toggle screen with a custom debug menu. Possible 20XX tournament edition feature @ Dan Salvato Dan Salvato ?
 
Last edited:

Wooggle

Smash Apprentice
Joined
Jul 7, 2014
Messages
83
Location
NJ, USA
I found some information about Game & Watch's Hammer

8014C760 - lwzx r30,r3,r0
r30 is the register which is read after this point that tells the game what the number chosen for the hammer is, so we can easily manipulate what the hammer will be by replacing "lwzx r30,r3,r0" with "li r30,?" where ? is the number you want the hammer to be minus one. Here is a simple code that I made:

Game&Watch's Hammer is always x (Wooggle) [1.02]
0414C760 3BC0000?
where ? = x-1

so if you want the hammer to always be 9, it would be 0414C760 3BC00008

Edit: It turns out setting the hammer to something more than 9 DOES NOT crash the game and it has some really weird affects. I am going to test them out now and post what I find

Edit 2: Setting the hammer to between 10 and 18 has the following effects:
-The attack behaves exactly like the number minus 9 would, so 10 behaves like 1, etc. This means it has the same knockback, damage and effect
-The box that appears above Game and Watch's head does not display any number
-Your feet to sink into the ground
-If you're running on the ground, you don't stop you until after the hammer goes away
-If you use it in the air, it acts exactly like up+b, except the trampoline below you does not appear
Setting the hammer to any number more than 18 makes it behave like up+b but without the trampoline on the ground and it crashes the game if used in the air
 
Last edited:

Ripple

ᗣᗣᗣᗣ ᗧ·····•·····
Joined
Sep 4, 2006
Messages
9,633
@ Achilles1515 Achilles1515 , how feasible do you think a "rage mode" would be for a certain character?

a code that looks at character, then at % and then saying if % < 30 and > 0; then damage x1. if damage is >31 or < 50 then damage x1.2 etc...
 

standardtoaster

Tubacabra
Joined
Nov 26, 2009
Messages
9,253
Location
Eau Claire, Wisconsin
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.
 

SinsOfApathy

Smash Journeyman
Joined
Feb 24, 2015
Messages
474
NNID
Psion312
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.
There's definitely a per player damage ratio.

It's a float at 0x1830 of the player struct (and % damage is just before that). Just using the pointers at the player blocks at 80453080, could easily scrape together a "rage" mechanic, which could probably be routed from something like 8006CA5C (PlayerThink, one per player frame according to WParam), since the player pointer is probably already in a register there.
 
Last edited:

CeLL

Smash Lord
Joined
Jan 26, 2014
Messages
1,026
Location
Washington
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.
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)
 
Last edited:
Top Bottom