• 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

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673
I don't know how much you know about MCM, but if I wanted to convert a gecko code into a format that MCM can read, would I need the assembly code too?
You can have MCM manually change the hex in the start.dol by dissecting the gecko code.

Codes that start with 04 are just static overwrites. The process for these codes consist of taking the 04, replacing it with 80, putting that address into MCM's memory offset -> dol offset tool, and placing that address in the mod construction under static overwrite > offset.

Codes that start with C2 are injection codes, meaning these run additional codelines where one codeline was. It does this by branching off to free space in the .dol, running its code, and returning to the line after the injection point (effectively adding code to that spot). The process for converting these to dol mods consist of taking the C2, replacing it with 80, putting that address into MCM's memory offset -> dol offset tool, and placing that address in the mod construction under injection mod > offset. Then take the remaining lines (excluding the 000000XX to the right of the C2 line) and paste that in the injection code area.

Also, you said that MCM inserts the gecko codehandler into the iso...does this mean that the game is able to run the gecko 'engine' in-game on its own, allowing for any gecko code to be run independently, or does it mean that the codes themselves are put into some format that the game reads as if it was in the game's code originally?
Yes the gecko codehandler (or engine as you referred to it as) will run with the game and it will place gecko codes into the start.dol every frame (most codes only need to be placed once, but this is just the nature of how the codehandler works).

Note that MCM Static Overwrites and Injection Mods are doing what the codehandler is doing outside of the game. MCM changes the code and saves the .dol when you save it on the program. Using the code handler is technically modifying a (mostly) vanilla dol during runtime.

I think my biggest question is how a game can actually run a code. Is the PowerPC processor really able to do thousands of computations every frame?
Yes the PPC Processor is godlike, I pray to it every morning. :)

I understand how it can execute code through moving and manipulating values, but how is the processor able to know when something happens in-game (like a character landing, for example)? When it knows that a memory value changes, does it know from checking to see if it changed, or is it 'told' by memory? Is the game constantly scanning every single value all the time to determine when something changes? This is a concept that I don't understand. Sorry if I am not making much sense.
I will have to briefly explain how the game engine functions to answer this question. Every in-game frame, each player has about 4 big functions that run. These functions are unique to each action state and are a big part of how the move functions. I'm talking about the move logic functions you may have seen in Crazy Hand. The big ones are IASA interrupt function (change action state with button inputs), animation interrupt function (change action state when an action state ends naturally), collision interrupt (change action state when interacting with the environment (ground to air, air to ground, wall interactions), and physics function.

What you're asking about pertains to the collision function. I'll use the aerial Falcon Punch collision function as an example. This collision function is unique to aerial Falcon Punch and runs every frame Falcon is in this state. It's main purpose is to determine if Falcon is still in the air by calling other in-game functions that check for this. These functions return 0 for still airborne, and 1 for touching the ground. When the collision function see's that it returned a 1, it enters Falcon into the grounded Falcon Punch action state. The grounded Falcon Punch has its own collision function that will run next frame. This function will check for if Falcon went from ground -> air and adjust his action state accordingly.

It may sound confusing and I'm sorry I can't explain it better at the moment but I hope this answered your question.
 
Last edited:

Dodoshian

Smash Rookie
Joined
Jul 7, 2016
Messages
21
It may sound confusing and I'm sorry I can't explain it better at the moment but I hope this answered your question.
No, you made perfect sense, and thank you for taking the time to write an in-depth response.

Yes the PPC Processor is godlike, I pray to it every morning. :)
LOL. That is pretty cool, but I guess their speed and accuracy is why we use computers, after all.

Okay...before I continue digging into the MUCH more complicated stuff, is there a way to get practice making an assembly code, converting it to Gecko, and injecting it into a game using the information you have given me? What did you do to learn? If there is like a simple change/project I should do (from the first step of looking through the Dolphin debug code to find values in memory, all the way to the final step of running the code in-game) that you think will help me get the hang of the way it works, then I would love to give it a go. Maybe doing this will help clear up any questions I have before I begin learning about the more complicated aspects {like how memory values for player values are stored at different offsets depending on which stage you are playing on (or at least I think they are)}.
 
Last edited:

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
Dodoshian Dodoshian

I'd like to jump in and point out that the Offset values in MCM for static overwrites or injections can be DOL file offsets, or RAM addresses. So the step that UnclePunch UnclePunch mentions about taking the RAM Address and putting it into the converter can be skipped.

Also, you said that MCM inserts the gecko codehandler into the iso...does this mean that the game is able to run the gecko 'engine' in-game on its own, allowing for any gecko code to be run independently, or does it mean that the codes themselves are put into some format that the game reads as if it was in the game's code originally?
I think my biggest question is how a game can actually run a code. Is the PowerPC processor really able to do thousands of computations every frame? I understand how it can execute code through moving and manipulating values, but how is the processor able to know when something happens in-game (like a character landing, for example)? When it knows that a memory value changes, does it know from checking to see if it changed, or is it 'told' by memory? Is the game constantly scanning every single value all the time to determine when something changes? This is a concept that I don't understand. Sorry if I am not making much sense.
Well, slightly more than 8.1 million calculations per frame, to be exact.

To answer some of your questions in another way: essentially, Gecko codes are a language that's an extension of (or probably more accurately, a library that is written out of) the PowerPC's assembly, written in hex. So the codehandler's job is to, as you said, translate the code in the codelist (the list of Gecko codes you want to add to your game) into the format that the game runs with normally, which is assembly. So one Gecko code line might translate into multiple assembly commands, which culminate in doing something like overwrite some area of memory with some new user defined values or code. Like UnclePunch said, it does this every frame, which is why they're considered less efficient (though I think for some codetypes it can tell that a Gecko code doesn't need to be run and will skip it for that frame).

The processor never "knows", intuits, or is "told" that something has happened per se. It's possible to make timers, but typically things aren't running in response to events or triggers like you might see in higher level languages. The processor is only ever told to do such checks by code, explicitly, which is one of the things that the functions UnclePunch talked about do as they go about their business; for example, commands to read a specific memory address, store it in a register, compare it with a value in another register, and then zoom off to some other place in code based on the comparison result. So the game isn't constantly scanning all memory addresses for changes, but it is constantly looping over specific functions that each look at some specific places to see what is there, and conditionally branching to other functions, until it once again comes back around to the main loop and runs all the core functions again.
 

Dodoshian

Smash Rookie
Joined
Jul 7, 2016
Messages
21
Like UnclePunch said, it does this every frame, which is why they're considered less efficient
What do you mean? Gecko codes are less efficient than what? You said that a gecko code manipulates RAM addresses every frame, and this I understand. So how does the rest of start.dol (vanilla, non-Gecko parts) work?

the Offset values in MCM for static overwrites or injections can be DOL file offsets, or RAM addresses. So the step that UnclePunch UnclePunch mentions about taking the RAM Address and putting it into the converter can be skipped.
I don't quite understand. Why can this step be skipped? Maybe I am not understanding the difference between the RAM offsets and the DOL offsets. The DOL offsets are stored in start.dol, correct? And the RAM offsets are the code that the game is currently running, like the DOL code loaded into the game? Why do the two have different addresses for certain values? Did I mistakenly assume somewhere that the RAM addresses and DOL addresses are the exact same? I thought that since you can convert from one to the other that they are basically the same.

So start.dol holds all of the game's machine code, right?

So when you start the game, what is loaded into memory, and where does this come from?
I know that other files like Plxx.dat, stage files, audio files, etc. are loaded into the memory. What tells the game where to load this code? Are the values for things like action states and hitboxes pulled from the Plxx.dat and loaded in all at once, or are they always updating? I just don't understand, functionally, how a Gecko code is able to make changes. I understand that you said it is just

Also, why do RAM addresses move around, like if you go from from stage to stage? If the RAM addresses are loaded from the start.dol, which is a file that isn't dynamic, why do the addresses of values (like P1%) appear at different memory offsets if you play on battlefield as opposed to dreamland? It is entirely possible that this is a misconception I hold, though.

================

tl;dr: I don't understand the relationship between things like the Plxx.dat files, the start.dol, and other files with regards to how they are loaded into RAM. Since the addresses for values in RAM vary depending on the circumstances, how is a Gecko code able to consistently change a specific value? How does the whole puzzle fit together?

Ugh...just when I think I kind of understand it, I get super confused again. I am like a madman rambling. :crazy::smash:

Ah, well...back to writing my English paper.
 
Last edited:

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673
I don't quite understand. Why can this step be skipped? Maybe I am not understanding the difference between the RAM offsets and the DOL offsets. The DOL offsets are stored in start.dol, correct? And the RAM offsets are the code that the game is currently running, like the DOL code loaded into the game? Why do the two have different addresses for certain values? Did I mistakenly assume somewhere that the RAM addresses and DOL addresses are the exact same? I thought that since you can convert from one to the other that they are basically the same.
DRGN made it so MCM will automatically detect when you entered a mem offset into the dol offset field, and convert it automagically.

So start.dol holds all of the game's machine code, right?
In Melee's case, yes. A good amount of games load code from files within the disc to be used in addition to the .dol (Brawl does this as well as some Sega games).

So when you start the game, what is loaded into memory, and where does this come from?
The dol is loaded into RAM during some OS-level function. I don't know specifics about this but it is always done.

I know that other files like Plxx.dat, stage files, audio files, etc. are loaded into the memory. What tells the game where to load this code?
These files are loaded in via functions from within the .dol. The process usually is, run the file load function with a parameter being the file name string, some function within that searches the file tree to see where on the game disc the file is located, another function gets the length of the file, another function finds free memory for it, and another function reads in the data starting @ XXX that is length YYY and stores it at the free memory location. After this a pointer to the file is stored in a safe place so the game can access it easily.

I just don't understand, functionally, how a Gecko code is able to make changes. I understand that you said it is just
A very large portion (almost all) of Melee Gecko codes are modifying game code. What we're doing is finding how the code interacts with memory and the logic behind it and tweaking the assembly to do something slightly different. Combine the ability to do this with knowledge of where things are and what does what collected over the years, and you can make some powerful edits.

Also, why do RAM addresses move around, like if you go from from stage to stage? If the RAM addresses are loaded from the start.dol, which is a file that isn't dynamic, why do the addresses of values (like P1%) appear at different memory offsets if you play on battlefield as opposed to dreamland? It is entirely possible that this is a misconception I hold, though.
That's just the nature of memory allocation. Files and structures are stored where space is available. Kind of just a basic memory management thing. Depending on what is in the game's RAM at the time will dictate where the new stuff is stored. Stages/music files vary in size so memory won't be the same between two stages. What doesn't change is the code that interacts with these memory values, so the same codeline that increments damage % on Yoshi's is the same codeline that increments damage on Temple.
 

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
Hey, UnclePunch UnclePunch , you want me to move this conversation to one of the Gecko or coding threads to keep this one dedicated to your code?


I don't quite understand. Why can this step be skipped? Maybe I am not understanding the difference between the RAM offsets and the DOL offsets. The DOL offsets are stored in start.dol, correct? And the RAM offsets are the code that the game is currently running, like the DOL code loaded into the game? Why do the two have different addresses for certain values? Did I mistakenly assume somewhere that the RAM addresses and DOL addresses are the exact same? I thought that since you can convert from one to the other that they are basically the same.

So start.dol holds all of the game's machine code, right?

So when you start the game, what is loaded into memory, and where does this come from?
As UnclePunch said, yeah, the DOL is the main "executable", containing the code that the processor runs through to run a GameCube game. This is loaded into RAM by the Apploader when the game boots up.

When we talk about DOL Offsets, we're referring to file position (i.e. where things are) within the file, such as for reading or writing. The position is in terms of the number of bytes from the start of the file (or chunk of data). So the beginning of the file is position zero, and position 0x200, for example, is 0x200 bytes from the start of the file data (offsets are usually given in hexadecimal, rather than decimal; note the "0x" at the start to denote that). Also note that we're talking about viewing/opening/reading the file as binary, where we're looking directly at the data in the file using a hex editor (unlike text when viewed in notepad, for example, where the file's binary is automatically decoded into human-readable text when you open it). The hexadecimal characters we're usually looking at is basically a more compact way of viewing, representing, or working with binary; e.g. "0111" in binary = just "7" in hex, and "01000100010100100100011101001110" = "4452474E". In the latter example, you're looking at 4 bytes of data, or 4 * 8 = 32 bits.

RAM Addresses are this same 'location' concept, except that it's in respect to an area of RAM rather than file data. Dolphin gets its own area of your system RAM allocated to it when you run it. Within that, Dolphin sets aside an area of RAM to treat (emulate) as GameCube memory, to store the GameCube game's files, and everything else the GameCube would use RAM for. The location of this GameCube RAM area (relative to the start of Dolphin's RAM space) is 0x80000000, which is the "base" address that other game addresses are referenced from. (This is why RAM Addresses always start with '0x80'.) So when the DOL is loaded into memory, its 'offset 0' isn't aligned with the game memory's offset 0 in RAM. Far from it, actually. Not only that, but multiple parts of the DOL are broken up and placed into different areas of memory (which is why you can't use one specific value difference for all conversions between the two different kinds of locations). So this is why I made the RAM Address Converter in MCM, which allows you to get a DOL file offset from a RAM address and vice-verca. Luckily, these individual dol sections are at least static for any particular game, and always load to the same place (determined by the DOL file itself).


What do you mean? Gecko codes are less efficient than what?
I meant less efficient than Static Overwrites and Injection Mods. Both of these kinds of mods are done outside of the game, before it's running. So there's nothing that is running during the game in order to put this code where it needs to be in RAM; it's loaded into RAM just the same as the vanilla code would have been when the file it's in is loaded.

A static overwrite would be, for example, simply changing some value in the code from one thing to another (in-place):
static_explanation.png


While an injection mod modifies code at some place slightly, adding a command to point to ("branch" to) new custom code which is stored elsewhere. The game then executes the custom code, and then goes (branches) back to where it left off (where it was before it left to execute the custom code). Thus, the custom code is essentially "injected" into the game's normal code and execution flow:
injection_explanation.png


Unlike with a Gecko code, the custom code in this scenario is only ever executed in very specific situations (when the normal game execution reaches the place where the initial branch is, known as the "injection site"), for example if you wanted some code to execute only when the game is updating the percentage display, or when a character is crossing beyond a blastzone.
 
Last edited:

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673
Hey, UnclePunch UnclePunch , you want me to move this conversation to one of the Gecko or coding threads to keep this one dedicated to your code?




As UnclePunch said, yeah, the DOL is the main "executable", containing the code that the processor runs through to run a GameCube game. This is loaded into RAM by the Apploader when the game boots up.

When we talk about DOL Offsets, we're referring to file position (i.e. where things are) within the file, such as for reading or writing. The position is in terms of the number of bytes from the start of the file (or chunk of data). So the beginning of the file is position zero, and position 0x200, for example, is 0x200 bytes from the start of the file data (offsets are usually given in hexadecimal, rather than decimal; note the "0x" at the start to denote that). Also note that we're talking about viewing/opening/reading the file as binary, where we're looking directly at the data in the file using a hex editor (unlike text when viewed in notepad, for example, where the file's binary is automatically decoded into human-readable text when you open it). The hexadecimal characters we're usually looking at is basically a more compact way of viewing, representing, or working with binary; e.g. "0111" in binary = just "7" in hex, and "01000100010100100100011101001110" = "4452474E". In the latter example, you're looking at 4 bytes of data, or 4 * 8 = 32 bits.

RAM Addresses are this same 'location' concept, except that it's in respect to an area of RAM rather than file data. Dolphin has its own area of your system RAM the it gets allocated when you run it. Within that, it sets aside (emulates) an area of RAM to treat as GameCube memory, to store the GameCube's game files. The location of this GameCube RAM area (relative to the start of Dolphin's RAM space) is 0x80000000, which is the "base" address that other game addresses are referenced from. So when the DOL is loaded into memory, its 'offset 0' isn't aligned with the game memory's offset 0 in RAM. Far from it, actually. Not only that, but multiple parts of the DOL are broken up and placed into different areas of memory (which is why you can't use one specific value difference for all conversions between the two different kinds of locations). So this is why I made the RAM Address Converter in MCM, which allows you to get a DOL file offset from a RAM address and vice-verca. Luckily, these individual dol sections are at least static for any particular game, and always load to the same place (determined by the DOL file itself).




I meant less efficient than Static Overwrites and Injection Mods. Both of these kinds of mods are done outside of the game, before it's running. So there's nothing that is running during the game in order to put this code where it needs to be in RAM; it's loaded into RAM just the same as the vanilla code would have been when the file it's in is loaded.

A static overwrite would be, for example, simply changing some value in the code from one thing to another (in-place):
View attachment 133905

While an injection mod modifies code at some place slightly, adding a command to point to ("branch" to) new custom code which is stored elsewhere. The game then executes the custom code, and then goes (branches) back to where it left off (where it was before it left to execute the custom code). Thus, the custom code is essentially "injected" into the game's normal code and execution flow:
View attachment 133906

Unlike with a Gecko code, the custom code in this scenario is only ever executed in very specific situations (when the normal game execution reaches the place where the initial branch is, known as the "injection site"), for example if you wanted some code to execute only when the game is updating the percentage display, or when a character is crossing beyond a blastzone.
Yeah you can move it to a more general Melee hacking thread. Some good info here for newbies.
 
Last edited:

UnclePunch

Smash Ace
Joined
Nov 9, 2014
Messages
673
Interesting,
this was caused by projectile + melee hitbox collision skipping the rest of the collision bubble checks



The projectile hitting the white detection hitboxes caused the projectile + hurtbox check (among others) to be skipped, making raptor boost "invincible" to projectiles

Code:
$Detection Bubbles Do Not Skip Hurtbox Collision Check [UnclePunch]
040796e0 60000000
 

64smashmaster3ds

Smash Cadet
Joined
Jul 15, 2017
Messages
55
Location
???
NNID
PKMNMaster
3DS FC
3368-3792-2945
Switch FC
SW-8128-4432-7031
Could there be a code that edit the Character selection screen order?
 
Last edited:

Middle Mang

Smash Cadet
Joined
Jul 30, 2016
Messages
28
Is it possible for someone to make a code similar to Ganon's sword code but with Roy using another sword in his other hand? Just visually, not have it change any moves. There's just a couple animations with item smashes that look neat.
 

jefe

Smash Rookie
Joined
Dec 23, 2016
Messages
2
Location
Athens / Ohio University
Hey guys!

I'm hoping to find some help with a specific audio hack. I was wondering if it would be possible to output two mono signals out the red and white RCA, one of game sound, and one of music. I'm trying to make some really comprehensive and modular setups for player headphones and multi-track capture, and this would be an excellent feature. I'm not opposed to doing the legwork myself if it doesn't exist yet, but I never made any codes that specifically worked with audio before. Can anyone help point me in the right direction?

Thanks,
jefe
 

jmlee337

Smash Journeyman
Joined
May 8, 2008
Messages
303
Slippi.gg
LEE#337
The trophies code for PAL wasn't listed with the others, and I couldn't find it by Googling. I did eventually find it in the Dolphin codesets

Code:
$All 292 Trophies (PAL)
0244D198 00000124
0244D19C 0125FFFF
 

jmlee337

Smash Journeyman
Joined
May 8, 2008
Messages
303
Slippi.gg
LEE#337
Hey Achilles1515 Achilles1515 there's a bug in the 1.00 Default Tournament Settings code listed in OP:
1.00 offset: 043D2BC2 -> 043D2BC0

As well 3 of the settings should be changed to be truly 'default tournament' imo:
Time: 2 min -> 1 min, for people that use time/coin/bonus mode for handwarmers
Pause: On -> Off
Deflicker: Off -> On, deflicker should be used unless using progressive scan, which the vast majority of tournament matches are not (Dolphin will actually override deflicker settings, so no worries there)


Code:
Default Tournament Settings (1.02) [Magus, et al.]
043D4A48 00340101
043D4A4C 04000A00
043D4A50 08010000
043D4A60 FF000000
043D4A70 00000000
043D4A74 3C010000
043D4A78 E70000B0

Default Tournament Settings (1.01) [Magus, et al.]
043D3D68 00340101
043D3D6C 04000A00
043D3D70 08010000
043D3D80 FF000000
043D3D90 00000000
043D3D94 3C010000
043D3D98 E70000B0

Default Tournament Settings (1.00) [Magus, et al.]
043D2B90 00340101
043D2B94 04000A00
043D2B98 08010000
043D2BA8 FF000000
043D2BB8 00000000
043D2BBC 3C010000
043D2BC0 E70000B0

Default Tournament Settings (PAL) [Magus, et al.]
043D50C0 00340101
043D50C4 04000A00
043D50C8 08010000
043D50D8 FF000000
043D50E8 00000000
043D50EC 3C010000
043D50F0 E70000B0
 
Last edited:

DRGN

Technowizard
Moderator
Premium
Joined
Aug 20, 2005
Messages
2,175
Location
Sacramento, CA
The trophies code for PAL wasn't listed with the others, and I couldn't find it by Googling. I did eventually find it in the Dolphin codesets

Code:
$All 292 Trophies (PAL)
0244D198 00000124
0244D19C 0125FFFF
Hey Achilles1515 Achilles1515 there's a bug in the 1.00 Default Tournament Settings code listed in OP:
1.00 offset: 043D2BC2 -> 043D2BC0

As well 3 of the settings should be changed to be truly 'default tournament' imo:
Time: 2 min -> 1 min, for people that use time/coin/bonus mode for handwarmers
Pause: On -> Off
Deflicker: Off -> On, deflicker should be used unless using progressive scan, which the vast majority of tournament matches are not (Dolphin will actually override deflicker settings, so no worries there)


Code:
Default Tournament Settings (1.02) [Magus, et al.]
043D4A48 00340101
043D4A4C 04000A00
043D4A50 08010000
043D4A60 FF000000
043D4A70 00000000
043D4A74 3C010000
043D4A78 E70000B0

Default Tournament Settings (1.01) [Magus, et al.]
043D3D68 00340101
043D3D6C 04000A00
043D3D70 08010000
043D3D80 FF000000
043D3D90 00000000
043D3D94 3C010000
043D3D98 E70000B0

Default Tournament Settings (1.00) [Magus, et al.]
043D2B90 00340101
043D2B94 04000A00
043D2B98 08010000
043D2BA8 FF000000
043D2BB8 00000000
043D2BBC 3C010000
043D2BC0 E70000B0

Default Tournament Settings (PAL) [Magus, et al.]
043D50C0 00340101
043D50C4 04000A00
043D50C8 08010000
043D50D8 FF000000
043D50E8 00000000
043D50EC 3C010000
043D50F0 E70000B0
Added/fixed.
 

jmlee337

Smash Journeyman
Joined
May 8, 2008
Messages
303
Slippi.gg
LEE#337
Code:
$Enable OSReport Print on Crash (1.00) [UnclePunch]
043959B4 4800020C

$Enable OSReport Print on Crash (1.01) [UnclePunch]
04396B98 4800020C

$Enable OSReport Print on Crash (1.02) [UnclePunch]
04397878 4800020C

$Enable OSReport Print on Crash (PAL) [UnclePunch]
043977A0 4800020C
 

jmlee337

Smash Journeyman
Joined
May 8, 2008
Messages
303
Slippi.gg
LEE#337
Code:
$Skip 'no Memory Card' Message on Startup (1.00) [jmlee337]
041AE9CC 48000AF0

$Skip 'no Memory Card' Message on Startup (1.01) [jmlee337]
041AF0DC 48000AF0

$Skip 'no Memory Card' Message on Startup (1.02) [jmlee337]
041AF724 48000AF0

$Skip 'no Memory Card' Message on Startup (PAL) [jmlee337]
041B0A74 48000970
 

mari0shi751

Smash Rookie
Joined
Aug 1, 2018
Messages
2
I'm an Extremely New Rookie here! Just wondering if anyone has created a code that makes all sound in melee to be 50% Faster and prefferably 50% higher in pitch. This is just to go along with the 30 fps code. :kirby:
 

Savestate

Smash Cadet
Joined
Apr 14, 2015
Messages
38
Location
Greensboro, NC
for those of y'all working with assembly, i found out that there's some assembler directives for the gnu assembler you can use to help make encoding floats/strings way more sane.

you can define float values with the .float directive and strings with the .string directive. normally .string doesn't ensure 4-byte alignment, but the .align directive takes care of that if you place it underneath. .align 2 will pad out where it's placed with zeros until it reaches 4-byte alignment. (implied .align 2, 0x00 since the fill pattern is omitted). also yes, the string is null terminated!

Before:
Code:
FLOATS:
    blrl
    .long 0x42f6e979 # 123.456
    .long 0x497423f0 # 999999.0
    .long 0xbf0a3d71 # -0.54
    .long 0x3f800000 # 1.0

TEXT:
    blrl
    .long 0x48656c6c # H e l l
    .long 0x6f207468 # o   t h
    .long 0x65726521 # e r e !
    .long 0x21210000 # ! !
After:
Code:
FLOATS:
    blrl
    .float 123.456
    .float 999999.0
    .float -0.54
    .float 1.0

TEXT:
    blrl
    .string "Hello there!!!"
    .align 2
i think this is the right place to post this. if it should go elsewhere, let me know
 
Last edited:

HedgehogHenry

Smash Rookie
Joined
Aug 17, 2018
Messages
2
This thread will house a list of Gecko codes for Melee, along with a guide on how to use them with a softmodded Wii. Most of these codes will only work on Wii using Gecko OS Mod or DIOS MIOS, or in the Dolphin emulator.


Guide: SSBM codes on a Softmodded Wii

Disclaimer: I am not responsible for any damage done to your Wii by using these tools.


Part 1
  1. Download this SSBM Code Tools file.
  2. Take everything in the "SD Root" folder and copy it to the root of your SD card. If you already have an 'apps' folder, it will merge with the one being copied.
  3. Make sure your Wii is connected to a wireless network.
Part 2
(Note: If you already use other mods for USB loading or GC backup loading, skip this part)
  1. Remove your Gamecube memory cards.
  2. From the Homebrew Channel, run the IOS236 Installer.
  3. Choose to install from network.
  4. After installation is complete and you're back at the Homebrew Channel, it is safe to re-insert your memory cards.
Part 3
(Note: If you already use other mods for GC backup loading, skip this part)
  1. From the Homebrew Channel, run the Homebrew MIOS Patcher.
  2. Press A on your Gamecube controller to install the patch.
Part 4
  1. On your PC, load Ocarina Code Manager, select "Open TXT file", and open GALE01.txt, located in the Ocarina Code Manager folder.
  2. Check the codes you want included. I've added some of my favorite codes to the file, but you can also add your own.
  3. Click "Export to GCT" and choose "store to file". Name the file GALE01.gct
  4. Copy GALE01.gct to sd:/GeckoOSmod/codes/GALE01.gct
Starting the Game
  1. Load Gecko OS Mod from the Homebrew Channel.
  2. Enable Ocarina, the default hook type should be fine (VI, I believe)
  3. Start the game!


Gecko Codes

NOTE: Most of these will NOT work as AR codes.


General Codes
  • Also Unlocks All Star Mode, Sound Test, and Vs. Mode Additions
  • Available as a DOL mod
Code:
Unlock All Characters and Stages (1.02) [Datel]
0445BF28 FFFFFFFF
0445BF2C FFFFFFFF

Unlock All Characters and Stages (1.01) [Datel]
0445B240 FFFFFFFF
0445B248 FFFFFFFF

Unlock All Characters and Stages (1.00) [Datel]
04459F58 FFFFFFFF
04459F60 FFFFFFFF

Unlock All Characters and Stages (PAL) [Datel]
0444CD28 FFFFFFFF
0444CD30 FFFFFFFF
Code:
$Unlock All 293 Trophies (1.02) [Datel]
0245C390 00000125
0245C395 01266363

$Unlock All 293 Trophies (1.01) [Datel]
0245B6B0 00000125
0245B6B5 01266363

$Unlock All 293 Trophies (1.00) [Datel]
0245A3C8 00000125
0245A3CD 01266363

$Unlock All 292 Trophies (PAL)
0244D198 00000124
0244D19C 0125FFFF
  • 4 stock, 8 min, items off, tourney legal stages, pause off
    friendly fire on, deflicker on, sfx>music, rumble off for all players,
    time/coin/bonus mode time limit set to 1 min
  • Available as a DOL mod
  • All settings can also be customized independently via MCM
    (No need to also apply the code if you are using this method.)
Code:
$Default Tournament Settings (1.02) [Magus, et al.]
043D4A48 00340101
043D4A4C 04000A00
043D4A50 08010000
043D4A60 FF000000
043D4A70 00000000
043D4A74 3C010000
043D4A78 E70000B0

$Default Tournament Settings (1.01) [Magus, et al.]
043D3D68 00340101
043D3D6C 04000A00
043D3D70 08010000
043D3D80 FF000000
043D3D90 00000000
043D3D94 3C010000
043D3D98 E70000B0

$Default Tournament Settings (1.00) [Magus, et al.]
043D2B90 00340101
043D2B94 04000A00
043D2B98 08010000
043D2BA8 FF000000
043D2BB8 00000000
043D2BBC 3C010000
043D2BC0 E70000B0

$Default Tournament Settings (PAL) [Magus, et al.]
043D50C0 00340101
043D50C4 04000A00
043D50C8 08010000
043D50D8 FF000000
043D50E8 00000000
043D50EC 3C010000
043D50F0 E70000B0
  • Memory card data is loaded.
Code:
Boot to Character Select Screen [InternetExplorer, Achilles]
(1.02)
041BFA20 38600002

(1.00)
041BEBB4 38600002

(PAL)
041C1580 38600002
  • These codes will make the game think there is a controller plugged into a specific slot
Code:
Spoof Controller Plugins (1.02) [Achilles]
04376BD4 38000000 (spoof P1)
04376BDC 38000000 (spoof P2)
04376BF0 380000D8 (spoof P3)
04376C04 38000001 (spoof P4)

Spoof Controller Plugins (1.01) [Achilles]
04375EF4 38000000 (spoof P1)
04375EFC 38000000 (spoof P2)
04375F10 380000D8 (spoof P3)
04375F24 38000001 (spoof P4)

Spoof Controller Plugins (1.00) [Achilles]
04374D20 38000000 (spoof P1)
04374D28 38000000 (spoof P2)
04374D3C 380000D8 (spoof P3)
04374D50 38000001 (spoof P4)

Spoof Controller Plugins (PAL) [Achilles]
04376AD8 38000000 (spoof P1)
04376AE0 38000000 (spoof P2)
04376AF4 380000D8 (spoof P3)
04376B08 38000001 (spoof P4)
Stage striking a la PM [Sham Rock]

Stage striking now works like it does in P:M
X = ban currently selected stage
Y = ban all stages that aren´t allowed in random, unban all that are allowed
Z = unban all
Banned stages can´t be selected anymore, however they can still be selected when someone chooses "Random".

More notes on the code.

The line "XXXXXXXX XXXXXXXX" in the below code(s) need to be replaced with either
"9A900024 1E12001C" for the "black"
or
"9A900000 1E12001C" for the "white" version of the code.


Code:
(1.00)
C225910C 00000025
39E00001 3E008046
62109134 1E2F000C
7E31802E 5630014B
4182000C 3A200001
48000020 56300109
4182000C 3A200002
48000010 563002D7
418200DC 3A200003
3EA0803E 62B5E840
3EC0804D 62D64B2E
3A800000 3A600000
3A400000 2C110001
40820014 8A560000
2C12001C 418100A8
48000050 2C110003
40820010 3A80003F
3A600002 4800003C
1E12001C 7E10AA14
8AF0000A 3E008045
6210A3C0 82100000
7E10BC30 561007FF
41820010 3A600002
3A80003F 4800000C
3A600000 3A800000
1E12001C 7E10A82E
2C120016 41800008
82100010 82100018
82100004 82100008
8210001C 82100008
XXXXXXXX XXXXXXXX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3A100008 7E70A9AE
3A00001E 9A160000
2C110001 41820010
3A520001 2C12001D
41A0FF4C 39EF0001
2C0F0005 41A0FEE8
C022C9E8 00000000

(1.02)
C225A3BC 00000025
39E00001 3E008046
6210B0FC 1E2F000C
7E31802E 5630014B
4182000C 3A200001
48000020 56300109
4182000C 3A200002
48000010 563002D7
418200DC 3A200003
3EA0803F 62B506D0
3EC0804D 62D66CAE
3A800000 3A600000
3A400000 2C110001
40820014 8A560000
2C12001C 418100A8
48000050 2C110003
40820010 3A80003F
3A600002 4800003C
1E12001C 7E10AA14
8AF0000A 3E008045
6210C388 82100000
7E10BC30 561007FF
41820010 3A600002
3A80003F 4800000C
3A600000 3A800000
1E12001C 7E10A82E
2C120016 41800008
82100010 82100018
82100004 82100008
8210001C 82100008
XXXXXXXX XXXXXXXX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3A100008 7E70A9AE
3A00001E 9A160000
2C110001 41820010
3A520001 2C12001D
41A0FF4C 39EF0001
2C0F0005 41A0FEE8
C022C9E8 00000000

(PAL)
C225AEF4 00000025
39E00001 3E008045
6210BF04 1E2F000C
7E31802E 5630014B
4182000C 3A200001
48000020 56300109
4182000C 3A200002
48000010 563002D7
418200DC 3A200003
3EA0803F 62B51550
3EC0804C 62D67FC6
3A800000 3A600000
3A400000 2C110001
40820014 8A560000
2C12001C 418100A8
48000050 2C110003
40820010 3A80003F
3A600002 4800003C
1E12001C 7E10AA14
8AF0000A 3E008044
6210D190 82100000
7E10BC30 561007FF
41820010 3A600002
3A80003F 4800000C
3A600000 3A800000
1E12001C 7E10A82E
2C120016 41800008
82100010 82100018
82100004 82100008
8210001C 82100008
XXXXXXXX XXXXXXXX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3A100008 7E70A9AE
3A00001E 9A160000
2C110001 41820010
3A520001 2C12001D
41A0FF4C 39EF0001
2C0F0005 41A0FEE8
C022CA40 00000000
  • As if you had already dragged the cursor over top of "Random" stage select.
Code:
"RANDOM" is Default Highlighted on Stage Select Screen (1.02) [Jorgasms]
0425AA10 38E0001D
If a player has rumble enabled and then takes his controller out, the next person who plugs into that slot will not have rumble enabled.
Code:
Disable Rumble When Controller is Unplugged (1.02) [Dan Salvato]
C2376BB0 00000008
3CC08045 60C6C380
38800000 38A0000A
39000000 7CE518AE
2C0700FF 40820008
7D0431AE 38840001
38A5000C 2C040004
4180FFE4 8081002C
60000000 00000000


Character Select Screen (CSS) Codes
Code:
D-Pad Down at Vs. Mode CSS Loads Rumble Select Screen (1.02) [Achilles]
C2263250 0000000C
3DE08047 61EF9D30
89EF0000 2C0F0002
40820044 39E00050
7DE903A6 3E008048
621007B4 3E208045
6231AC4C 85F00004
95F10004 4200FFF8
54E0077B 41820018
3DE0803F 3A000001
9A0F0A47 3A000002
9A0DB656 880DB652
60000000 00000000
C222D13C 00000006
3DE0803F 8A0F0A47
2C100001 4082001C
3A000000 9A0F0A47
3DE08022 61EFD610
7DE903A6 4E800421
546006F7 00000000
C222D5C0 00000005
3DE0803F 89EF0A47
2C0F0001 40820014
3DE08022 61EFD190
7DE903A6 4E800421
546006F7 00000000
---> gif <---

(name tag would normally switch back to the default "Fox" after closing and reopening, KO stars would also disappear)
Code:
Disable Name Tag Reset After Closing Character Port (1.02) [Ato]
04261B1C 60000000
04261B30 60000000

Disable Name Tag Reset After Closing Character Port (1.01) [Ato]
04261380 60000000
04261394 60000000

Disable Name Tag Reset After Closing Character Port (1.00) [Ato]
04260810 60000000
04260824 60000000

Disable Name Tag Reset After Closing Character Port (PAL) [Ato]
042622C8 60000000
042622DC 60000000
Code:
Disable Name Tag Reset After Exiting Character Select Screen (1.02) [Todd Bonney]
041A55EC 4E800020
  • Selecting Zelda will have the player start the match as Sheik.
  • Announcer says "Sheik"!
Code:
Zelda is Permanently Sheik at CSS (1.02) [Achilles]
043F0CC8 12130200
Code:
CSS Player Hands Default to HMN Button (1.02) [Achilles]
044DC47C C0200000
C2261A6C 00000005
88BF0005 2C050002
40820014 3CA08026
60A51B6C 7CA903A6
4E800420 1C130024
60000000 00000000
Code:
(Z Button) While Selecting an Alphabet Character to Force Lowercase (1.02) [Achilles]
C223C28C 0000000B
3E608046 6273B0FD
3A200000 3A310001
8E93000C 2C140010
4082002C 8AA40000
2C150082 40820028
8AA40001 2C150060
4180001C 2C15007A
40800014 3AB50021
9AA30001 2C110004
41A0FFC4 4E800020
60000000 00000000
  • English alphabet name tags can be up to 8 characters in length.
  • Press X Button to shift between upper and lowercase.
Demo.gif
Code:
Extended Name Entry (1.02) [InternetExplorer]
224d4cac 20000000
044d4cac 20000000
064d4d90 000000b4
4a000000 54000000
39000000 2e000000
49000000 53000000
38000000 81900000
48000000 52000000
37000000 81950000
47000000 51000000
36000000 81930000
46000000 50000000
5a000000 35000000
81970000 45000000
4f000000 59000000
34000000 81480000
44000000 4e000000
58000000 33000000
81490000 43000000
4d000000 57000000
32000000 81810000
42000000 4c000000
56000000 31000000
817b0000 41000000
4b000000 55000000
30000000 817c0000
e2000001 00000000
C223C718 00000004
1CC30003 7CC6F214
88060001 2C000000
7C601B78 41820008
38030001 00000000
C223C270 00000003
88C30000 2C060000
41820008 38630001
98030000 00000000
C223C710 00000005
28030003 4180001C
1CC30003 7CC6F214
88060001 2C000000
40820008 38600002
28030003 00000000
0423cdd4 7c7e032e
0423cdb0 b0040000
C223C5A0 0000000F
5460056B 41820068
88BC0050 28050002
4082005C 3CA0804D
60A54D90 38C00000
2C0600B4 41810038
7CE628AE 2C070041
41800024 2C07007A
4181001C 2C070061
4180000C 38E7FFE0
48000008 38E70020
7CE629AE 38C60004
4BFFFFC8 3D808023
618CC7EC 7D8903A6
4E800420 546005AD
60000000 00000000

(PAL) [Port by Sham Rock]
C223E398 00000004
1CC30003 7CC6FA14
88060001 2C000000
7C601B78 41820008
38030001 00000000
C223E378 00000003
88850000 2C040000
41820008 38A50001
98050000 00000000
C223E390 00000005
28030003 4180001C
1CC30003 7CC6FA14
88060001 2C000000
40820008 38600002
28030003 00000000
0423EA54 7C7F032E
0423EA30 B0040000
  • Pressing Up/Down on the D-Pad while at the CSS (only in versus mode) will set the Rumble settings for that slot to On/Off
  • Two versions:
    • Colored CSP background is modified ---> White = Rumble On, Grey = Rumble Off
    • No change in CSP color
  • Also available as a DOL mod

Color Modified CSP to Show Rumble Status
Code:
Change Rumble Settings from CSS - Color Mod (1.02) [Sham Rock]
C226304C 0000001F
8803000E 3DC08045
61CEC380 3DE08046
61EFB0FC 3A800000
860F000C 56110319
41820010 3A200001
9A2E0000 48000014
5611035B 4182000C
3A200000 9A2E0000
3A940001 39CE0001
2C140004 41A0FFCC
39CEFFFB 3E401919
62521900 3E00804C
2C140004 40820008
621024EC 2C140005
40820008 62102458
2C140006 40820008
62102558 2C140007
40820008 621024C4
2C140005 41810008
82100000 82100000
82100000 82100008
82100018 82100008
8210001C 82100004
82100008 8E2E0001
2C110001 40820010
3E20EEEE 6231EE00
4800000C 3E205555
62315500 92300000
92500004 3A940001
2C140008 41A0FF70
60000000 00000000

Change Rumble Settings from CSS - Color Mod (1.00) [Sham Rock]
C2261D40 0000001F
8803000E 3DC08045
61CEA3B8 3DE08046
61EF9134 3A800000
860F000C 56110319
41820010 3A200001
9A2E0000 48000014
5611035B 4182000C
3A200000 9A2E0000
3A940001 39CE0001
2C140004 41A0FFCC
39CEFFFB 3E401919
62521900 3E00804C
2C140004 40820008
62100390 2C140005
40820008 621002FC
2C140006 40820008
621003FC 2C140007
40820008 62100368
2C140005 41810008
82100000 82100000
82100000 82100008
82100018 82100008
8210001C 82100004
82100008 8E2E0001
2C110001 40820010
3E20EEEE 6231EE00
4800000C 3E205555
62315500 92300000
92500004 3A940001
2C140008 41A0FF70
60000000 00000000

Change Rumble Settings from CSS - Color Mod (PAL) [Sham Rock]
C22637F8 0000001E
8803000E 3DC08044
61CED188 3DE08045
61EFBF04 3A800000
860F000C 56110319
41820010 3A200001
9A2E0000 48000014
5611035B 4182000C
3A200000 9A2E0000
3A940001 39CE0001
2C140004 41A0FFCC
39CEFFFB 3E401919
62521900 3E00804B
2C140004 40820008
6210354C 2C140005
40820008 621034B8
2C140006 40820008
621035B8 2C140007
40820008 62103524
82100000 82100000
82100000 82100008
82100018 82100008
8210001C 82100004
82100008 8E2E0001
2C110001 40820010
3E20EEEE 6231EE00
4800000C 3E205555
62315500 92300000
92500004 3A940001
2C140008 41A0FF78
60000000 00000000

Change Rumble Settings from CSS - Default Color (1.02) [Sham Rock]
C226304C 0000000B
8803000E 3DC08045
61CEC380 3DE08046
61EFB0FC 3A800000
860F000C 56110319
41820010 3A200001
9A2E0000 48000014
5611035B 4182000C
3A200000 9A2E0000
3A940001 39CE0001
2C140004 41A0FFCC
60000000 00000000
Code:
"Random" Always Selects Specific Character (1.02) [Jorgasms]
0425fb74 386000??

#Replaces branch and link to the random function to li r3, 0x?? where r3 holds the
#CSS icons from top left to bottom right, in order
#?? can be replaced with 0x0 - 0x18 (0-24) which represents the 25 character icons
In vanilla Melee, this button combination loads the Main Menu.
Code:
Hold L+R+A+Start During Stage Load to Return to the CSS (1.02) [Jorgasms]
0425b8bc 38600002

Debug Menu and DEVELOP Mode Codes
Code:
Debug Menu Replaces Tournament Mode (1.02) [Magus, donny2112]
0422D638 38000006

Debug Menu Replaces Tournament Mode (1.01) [Magus, donny2112]
0422CEB0 38000006

Debug Menu Replaces Tournament Mode (1.00) [Magus, donny2112]
0422C340 38000006

Debug Menu Replaces Tournament Mode (PAL) [Magus, donny2112]
0422F4A4 38000006
  • Hold R or use C-Stick to turbo menu selections.
Code:
All Players Can Control the Debug Menu (1.02) [wParam]
C23039A4 00000016
39400000 39000000
38E00008 3C80804C
608420BC 1CAA0044
7D242A14 80690008
70631F10 7D081B78
80690000 70600020
41820008 38E00000
5460C8C6 5060D884
5060F002 7D080378
54606006 7D080378
54604007 4182000C
38E00000 7D080378
394A0001 2C0A0004
4180FFA4 7500F000
41820028 886DB7AC
2C030000 41820014
3863FFFF 986DB7AC
5508013E 48000014
98EDB7AC 4800000C
38600000 986DB7AC
7D034378 4E800020
60000000 00000000
Code:
Submenus Resemble Normal Menus (1.02) [Dan Salvato]
0430425c 38A00006
04304254 38600000
043030dc 3C000000
04303158 3C000000
043031d4 3C000000
04303244 3C000000
Code:
Leaving Debug Menu Loads CSS (1.02) [Achilles]
041b0a14 38600002

Notes.
Code:
Stale Moves in Develop Mode (1.00) [Magus]
04088FAC 41820030
This code should actually work for all versions.

Code:
Hitbox Displays Do Not Interpolate (1.02) [Magus]
0400A008 80E3004C
0400A00C 80030050
0400A018 80030054
  • Available as a DOL mod
  • Does not work with Nana
Code:
Normal C-Stick Functionality in Develop Mode (1.02) [Magus, Achilles]
0406AE90 38000000
040300A4 38000000

Normal C-Stick Functionality in Develop Mode (1.01) [Magus, Achilles]
0406AE48 38000000
040300A4 38000000

Normal C-Stick Functionality in Develop Mode (1.00) [Magus, Achilles]
0406AD38 38000000
04030024 38000000

Gameplay Codes
Code:
Normal C-Stick Functionality in 1Player Modes (1.02) [Zauron]
0416B480 60000000

Normal C-Stick Functionality in 1Player Modes (1.01) [Zauron, Standardtoaster]
0416B18C 60000000

Normal C-Stick Functionality in 1Player Modes (1.00) [Zauron]
0416AB64 60000000

Normal C-Stick Functionality in 1Player Modes (PAL) [Zauron]
0416BE50 60000000
  • Results Screen is skipped entirely
  • KO Star Count functions normally
Code:
Skip Results Screen & Normal KO Star Count (v1.02) [Sham Rock, Achilles]
C21A415C 0000000E
3803FFFF 2C0B0020
41820064 2C000004
4082005C 3AC00000
3E608045 6273226F
3E40804D 6252672F
8E320001 8E930E84
7E31A214 8E930004
7E31A214 8E930004
7E31A214 8E930004
7E31A214 2C1100FF
41800008 3A2000FF
9A320000 3AD60001
2C160004 41A0FFC4
38000000 00000000
  • Just played a session with this. Wow. It's so much better when they mean something truly significant.
  • Ragequitting DOES NOT earn anyone stars.
Code:
Skip Results Screen & KO Stars = Games Won [Sham Rock, Achilles] (1.02)

C21A415C 00000011
3803FFFF 2C0B0020
41820078 2C000004
40820070 3E208047
6231A1EC 7C088800
4082005C 3E00804D
3A9065A7 6210672F
3E208043 62312087
3A400000 3A520001
3A940001 3A100001
1E720008 7E738A14
8A730000 2C130021
4182001C 8AB40000
2C150000 40820010
8AB00000 3AB50001
9AB00000 2C120004
41A0FFC4 38000000
60000000 00000000
  • Results Screen is skipped entirely
  • KO Star Count displays player placement from the previous match
    • 1st Place = 1 Star
    • 2nd Place = 2 Stars
    • etc.
Code:
Skip Result Screen & KO Star Count = Placement (v1.02) [Sham Rock]
C21A415C 0000000E
3803FFFF 2C000004
40820060 2C0B0020
41820058 3A400000
3E808047 62949D58
3EA0804D 62B5672F
8E1400A8 8A340001
2C10004E 4080000C
9E350001 4800000C
3A310001 9E350001
3A520001 2C120004
41A0FFD8 3A000000
3A200000 3A800000
3AA00000 38000000
60000000 00000000

Skip Result Screen & KO Star Count = Placement (v1.00) [Sham Rock]
C21A3414 0000000D
3803FFFF 2C000004
40820060 2C0B0020
41820058 3A400000
3E808047 62947D90
3EA0804D 62B545AF
8E1400A8 8A340001
2C10004E 4080000C
9E350001 4800000C
3A310001 9E350001
3A520001 2C120004
41A0FFD8 3A000000
3A200000 3A800000
3AA00000 38000000
60000000 00000000

Skip Result Screen & KO Star Count = Placement (PAL) [Sham Rock]
C21A4CE0 0000000D
3803FFFF 2C000004
40820060 2C0B0020
41820058 3A400000
3E808046 6294AB60
3EA0804C 62B579EF
8E1400A8 8A340001
2C10004E 4080000C
9E350001 4800000C
3A310001 9E350001
3A520001 2C120004
41A0FFD8 3A000000
3A200000 3A800000
3AA00000 38000000
60000000 00000000
  • Hold A+B at the end of a match or during a ragequit and the match will be immediately restarted on the same stage


Code:
Hold A+B for Salty Runback (v1.02) [InternetExplorer]:
C21A4160 00000008
39C00000 3DE08046
61EFB108 820F0000
5611018D 41820010
561101CF 41820008
38000002 39CE0001
2C0E0004 4080000C
39EF000C 4BFFFFD8
981F0003 00000000

Hold A+B for Salty Runback (v1.00) [InternetExplorer, Sham Rock]:
C21A3418 00000008
39C00000 3DE08046
61EF9140 820F0000
5611018D 41820010
561101CF 41820008
38000002 39CE0001
2C0E0004 4080000C
39EF000C 4BFFFFD8
981F0003 00000000

Hold A+B for Salty Runback (PAL) [InternetExplorer, Sham Rock]:
C21A4CE4 00000008
39C00000 3DE08045
61EFBF10 820F0000
5611018D 41820010
561101CF 41820008
38000002 39CE0001
2C0E0004 4080000C
39EF000C 4BFFFFD8
981F0003 00000000

Description: This code automatically L-cancels all aerials, but your character will flash white if your input was correct. This allows players to practice L-canceling but suffer no penalty if the L-cancel is missed, allowing the player to practice combos and mental game even without yet having mastered L-canceling.
Code:
L-Cancel Training Wheels (v1.02) [InternetExplorer]:
C208D69C 00000002
4080000C 39E000D4
99E30564 00000000
C20C0148 0000000C
387F0488 89FE0564
2C0F00D4 41820008
48000048 39E00091
99FE0564 3DE0C200
91FE0518 91FE051C
91FE0520 91FE0524
3DE00000 91FE0528
91FE052C 91FE0530
3DE0C280 91FE0534
3DE0800C 61EF0150
7DE903A6 4E800420
60000000 00000000
Code:
Aerials are Automatically L-Cancelled (v1.02) [InternetExplorer]:
0406B620 60000000

Code:
Flash White on Successful L-Cancel (v1.02) [InternetExplorer]:
*Do not use with "Flash Red on Unsuccessful L-Cancel"*

C208D6A0 00000002
C00600E8 39E000D4
99E30564 00000000
C20C0148 0000000C
387F0488 89FE0564
2C0F00D4 41820008
48000048 39E00091
99FE0564 3DE0C200
91FE0518 91FE051C
91FE0520 91FE0524
3DE00000 91FE0528
91FE052C 91FE0530
3DE0C280 91FE0534
3DE0800C 61EF0150
7DE903A6 4E800420
60000000 00000000
Code:
Flash Red on Unsuccessful L-Cancel (v1.02) [Achilles,InternetExplorer]:
*Do not use with "Flash White on Successful L-Cancel"*

C208D690 00000003
88A5067F 2C050007
4180000C 39E000D4
99E30564 00000000
C20C0148 0000000C
387F0488 89FE0564
2C0F00D4 41820008
4800004C 39E00091
99FE0564 3DE0437F
91FE0518 3DE0C200
91FE0524 3DE00000
91FE051C 91FE0520
91FE0528 91FE052C
91FE0530 3DE0C280
91FE0534 3DE0800C
61EF0150 7DE903A6
4E800420 00000000
  • Affects all players
Code:
Disable Tap Jump (1.02) [Achilles]
C20CBBC0 00000003
89FD06BE 2C0F0004
40800008 4E800020
7C0802A6 00000000
C20CB4E0 00000003
2C040001 40820008
4E800020 7C0802A6
60000000 00000000

Code:
D-Pad Controls Damage (v1.02) [InternetExplorer]:
C206D1EC 0000001E
3DE08047 61EF9C3F
8A0F0000 2C100000
41A200D8 3E60805A
62737000 3A400000
2C100001 4082000C
3E40FFFF 3E80BF80
2C100002 4082000C
3E400001 3E803F80
2C100004 4082000C
3E40FFF6 3E80C120
2C100008 4082000C
3E40000A 3E804120
92530000 92930008
3E000000 9A0F0000
3E200000 3DE08045
61EF30E0 820F0000
7E109214 2C100000
40800008 3A000000
920F0000 39EF0E90
3A310001 2C110004
4180FFDC 3DE080BD
61EFA4A0 81EF0000
3E000000 C0130008
C02F1890 EC21002A
C0130004 FC010000
4080000C D00F1890
48000008 D02F1890
81EF0008 2C0F0000
41820008 4BFFFFCC
7C0802A6 00000000

Code:
Turn White During Shield Stun (v1.02) [InternetExplorer]:
C206B80C 00000009
7F03C378 81C30070
2C0E00B5 40820034
3DC0C200 91C30518
91C3051C 91C30520
91C30524 39E00000
91E30528 91E3052C
91E30530 91E30534
39E00091 99E30564
8001007C 00000000
Code:
Rolling Results in Immediate Death (v1.02) [InternetExplorer]:
04099244 4803A985

Rolling Results in Immediate Death (v1.00) [InternetExplorer, standardtoaster]:
04098F98 4803A879

Gameplay Mechanics Codes
Makes stale 1 dmg hitboxes (only affects some things with lots of hits) work like in versions 1.00 and 1.01 where they aren't A/S/DIable. Being able to ASDI these hits a full 3 units half a dozen times or more through the move makes some of them a joke to escape and bad in 1.02 and PAL. May be missing a couple here but the attacks it affects include the rapid hits on Zelda's f/u-smash and neutral-b, Samus' u-air and up-b, Peach's up-b, YL's up-b, Mario's up/down-b, Mewtwo's u-smash and n-air (bottom hitboxes only), ICs down-b (outer range), Ness' PKT1 (tail), and CF/Sheik/Kirby/Fox/Falco/Kirby/Link/YL's rapid jabs.

Notes.
Code:
Attacks that Deal Less than 1 Damage Have No Hitlag or DIability (v1.02) [Magus]
040771E0 60000000
040772A4 60000000
040781D4 60000000
04076A48 60000000
04076B9C 60000000
04077A1C 60000000
04077B70 60000000
04076D3C 60000000
040776FC 60000000
Note: Do not use with Taunt Battle
Code:
Enable Taunt Cancelling (v1.02) [InternetExplorer]:
040DEE70 4BFA5411
040CA4CC 40820058

Enable Taunt Cancelling (v1.01) [InternetExplorer, standardtoaster]:
040DEBFC 4BFA54C5
040CA258 40820058

Enable Taunt Cancelling (v1.00) [InternetExplorer, standardtoaster]:
040DEA24 4BFA55B5
040CA114 40820058

Enable Taunt Cancelling (PAL) [InternetExplorer, SypherPhoenix]:
040CAC70 40820058
040DF624 4BFA52D9
This basically make ledge invincibility behave similarly to shields, in that after grabbing the ledge a few times in quick succession, subsequent grabs will reduces ledge invincibility. The ledge invincibility recovers over time, like shields, and is reset when you die, just like shields. I figure this is a better solution that the one PM has, not only because I feel it feels more natural, but also because of things like the haxdash that can circumvent it.
More.


Code:
Ledge Invincibility Attrition (1.02) [_glook]
C209A8AC 0000000A
7C671B78 8063002C
8084049C 80A31068
7CA62B78 38A50020
2C050140 40A10008
38A00140 90A31068
7CC631D6 54C6A33E
7C062000 41A0000C
38800000 48000008
7C862050 7CE33B78
60000000 00000000
C206A414 00000006
807F198C 809F1988
7C632378 2C030000
40820018 807F1068
2C030000 41A2000C
3863FFFF 907F1068
807F1990 00000000
Its main purpose is to get rid of wall infinites.
If you are on the ground and you're moving into a wall (either by purposely walking/running into it or, more likely, if you're being shined into the wall), if you get hit by a non-launching attack, you can press the analog stick left or right to brace against the wall, which will make your feet leave the ground. The direction you press doesn't matter, and this was purposefully done to help with Smash DI (which is actually just a justification for my laziness).


Code:
Wall Canceling/Bracing (1.02) [_glook]
C208DFAC 00000007
2C1C0003 41820030
887D0724 70630004
2C030004 40A20020
807D0620 2C030000
4082000C 38600001
48000008 38600000
2C030000 00000000

Stage Modification Codes
  • Disable Stage Transformations on Pokemon Stadium
  • Disable Tree Blow on Dreamland
  • Disable Rising Lava on Brinstar
  • Disable Rising Platforms and Water Jets on Fountain of Dreams
  • Disable Ship Spawn on Corneria
  • Disable Great Fox's Gun (starts out dead) on Corneria
  • Disable Initial Bricks on Green Greens
  • Disable Falling Bricks on Green Greens
  • Disable Tree Wind and Apples on Green Greens
  • Disable Shy Guys on Yoshi's Story
  • Disable Switches and Bullets on Princess Peach's Castle
  • Disable Trophy Spawn on Snag the Trophies Stage (FigureGet)
    • Game doesn't freeze when playing the level outside of Classic Mode
  • Disable Final Destination Background Transitions
  • Most available as DOL mods
Code:
Disable Stage Transformations on Pokemon Stadium
(1.02) [Zauron]
041D1548 60000000
(1.01) [Zauron, Standardtoaster]
041D0EDC 60000000
(1.00) [Zauron]
041D0578 60000000


Disable Tree Blow on Dreamland
(1.02) [Zauron]
04211444 60000000
(1.01) [Zauron, Standardtoaster]
04210CBC 60000000
(1.00) [Zauron]
0421035C 60000000


Disable Rising Lava on Brinstar
(1.02) [Zauron]
041D99E0 4E800020
(1.00) [Zauron]
041D89B4 4E800020


Disable Rising Platforms and Water Jets on Fountain of Dreams
(1.02) [Zauron]
041CC8AC FC000028
041CC8B4 4800013C
(1.00) [Zauron]
041CB8DC FC000028
041CB8E4 4800013C


Disable Ship Spawn on Corneria
(1.02) [Zauron]
041DDA48 60000000
(1.00) [Zauron]
041DCA1C 60000000


Disable Great Fox's Gun (starts out dead) on Corneria
(1.02) [Zauron]
041E1390 40800430
(1.00) [Zauron]
041E035C 40800430


Disable Initial Bricks on Green Greens
(1.02) [Zauron]
042146EC 60000000
(1.00) [Zauron]
04213434 60000000


Disable Falling Bricks on Green Greens
(1.02) [Zauron]
04216B24 60000000
(1.00) [Zauron]
0421586C 60000000


Disable Tree Wind and Apples on Green Greens
(1.02) [Zauron]
04213C10 4E800020
(1.00) [Zauron]
04212958 4E800020


Disable Shy Guys on Yoshi's Story
(1.02) [Zauron]
041E3348 60000000
(1.01) [Zauron, Standardtoaster]
041E2BE8 60000000
(1.00) [Zauron]
041E2284 60000000


Disable Switches and Bullets on Princess Peach's Castle
(1.02) [Zauron]
041CD8A8 4E800020
(1.00) [Zauron]
041CC8F8 48000020


Disable Trophy Spawn on Snag the Trophies Stage (FigureGet)
(1.02) [wparam]
042199FC 60000000

Disable Final Destination Background Transitions
(1.02) [Achilles, Dan Salvato]
0421AAE4 60000000
(PAL) [Port by Sham Rock]
0421C998 60000000

Character Codes

:bowsermelee: Bowser
Code:
Bowser - Flame Cancel (1.02) [Achilles]
04135684 38800156

:falconmelee: Captain Falcon
  • For aerial hit and miss, and grounded Raptor Boost that travels offstage.
  • FallSpecial is the "helpless" fall state.
Code:
Captain Falcon - Raptor Boost Enters "Fall" Action State Instead of "FallSpecial" (1.02) [Achilles]
040E39D0 4BFE8D61
040E3AEC 4BFE8C45
040E3CD0 4BFE8A61

:dkmelee: Donkey Kong
Code:
DK - Always Full Giant Punch (1.02) [Achilles]
0410D98C 90A4002C

:falcomelee::foxmelee: Falco/Fox
Notes.
Code:
Falco/Fox - Hold Z While *Aerial* Laser Emits to Fire at Half Speed (1.02) [Achilles]
C20E6908 00000005
80BD065C 54A506F7
41820014 3CA04000
90A1FFF8 C1E1FFF8
FC427824 80BF001C
60000000 00000000

:icsmelee: Ice Climbers
This code changes the self induced vertical value from 1.8 to 3.1.
--> gif <--
Code:
Solo Popo Up-B Gives Increased Vertical Velocity (1.02) [Achilles]
04121E7C C004013C

:bowsermelee: Giga Bowser
Code:
Giga Bowser Can Be Grabbed (1.02) [Achilles]
0414f704 60000000

:luigimelee: Luigi
Code:
Luigi - Always Misfire (1.02) [Achilles]
00142AFB 00000001

:marthmelee: Marth
  • Color 1 of Marth's sword swing is changed on a per costume basis
    • Blue costume [default] = Default swing color (teal)
    • Red costume = Red swing color
    • Green costume = Green swing color
    • White costume = Light purple swing color
    • Black costume = Gold swing color
  • Code can be modified to change the colors to whatever you like
  • Updated 4/29 with slightly shortened code

[gif of code in action]
Code:
Costume Dependent Marth Sword Swing Colors (1.02) [Achilles]
C2136510 0000000F
3DC0FF00 61CEFFFF
7C007000 40820060
39E5E181 89EF0000
2C0F0001 40820010
3C60FF00 6063BE0C
3C001900 2C0F0002
40820010 3C60FF00
60638DD5 3C002E00
2C0F0003 40820010
3C60FF00 6063F7E1
3C008300 2C0F0004
40820010 3C60FF00
60637D77 3C00C800
6000FFFF 94650008
60000000 00000000

Costume Dependent Marth Sword Swing Colors (1.00) [Achilles]
C2135E98 0000000F
3DC0FF00 61CEFFFF
7C007000 40820060
39E5E181 89EF0000
2C0F0001 40820010
3C60FF00 6063BE0C
3C001900 2C0F0002
40820010 3C60FF00
60638DD5 3C002E00
2C0F0003 40820010
3C60FF00 6063F7E1
3C008300 2C0F0004
40820010 3C60FF00
60637D77 3C00C800
6000FFFF 94650008
60000000 00000000

Costume Dependent Marth Sword Swing Colors (PAL) [Achilles]
C2136CB4 0000000F
3DC0FF00 61CEFFFF
7C007000 40820060
39E5E181 89EF0000
2C0F0001 40820010
3C60FF00 6063BE0C
3C001900 2C0F0002
40820010 3C60FF00
60638DD5 3C002E00
2C0F0003 40820010
3C60FF00 6063F7E1
3C008300 2C0F0004
40820010 3C60FF00
60637D77 3C00C800
6000FFFF 94650008
60000000 00000000

How to change the colors to whatever you'd like:

1) Get the RGB value of the color you would like (in format RRGGBB)
2) Plug the values into the code below

C2136510 0000000F //this is the first line from the 1.02 code. make sure to change it to the PAL line if thats the code you are modifying
3DC0FF00 61CEFFFF
7C007000 40820060
39E5E181 89EF0000
2C0F0001 40820010
3C60FF00 6063RRGG // these RRGGBB values refer to Red Marth costume
3C00BB00 2C0F0002 //
40820010 3C60FF00
6063RRGG 3C00BB00 // these RRGGBB values refer to Green Marth costume
2C0F0003 40820010
3C60FF00 6063RRGG // these RRGGBB values refer to Black Marth costume
3C00BB00 2C0F0004 //
40820010 3C60FF00
6063RRGG 3C00BB00 // these RRGGBB values refer to White Marth costume
6000FFFF 94650008
60000000 00000000

:mewtwomelee: Mewtwo
Code:
Mewtwo - Always Full Shadow Ball (1.02) [Achilles]
04144f90 89E2E423
04144f94 91E32234

:gawmelee: Mr. Game and Watch
Notes.
Code:
Mr. Game and Watch - Always Specific Hammer Value (1.02) [Wooggle]
0414C760 3BC0000?
where ? = x-1

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

:nessmelee: Ness
This is an SSBM v1.00 game mechanic that was changed in v1.02.
Code:
PK Thunder Does Not Disappear on Hit or Death (1.02) [_glook]
042abcb0 4bfc7481
042abcb4 60000000

:peachmelee: Peach

  • Peach will pull turnip/bomb/beam sword based on how many targets are left
  • 3 different strategies available
    • Strategy 1) Beam Sword with 6 targets left
    • Strategy 2) Bomb with 6 targets left, Beam Sword with 4 targets left
    • Strategy 3) Bomb with 6 or more targets left, Beam Sword with 4 targets left
  • Peach will flash a color when pulling a coded turnip
    • The color she flashes is based on the last action that caused a color tint on her (ex. parasol fastfall)
Code:
Peach - Break the Targets Turnip Pull Strategies (1.02) [Achilles]
Strategy 1)
C211D0A4 00000007
3E608049 6273ED9D
8A930000 2C140006
4082001C 3E408045
82523130 3A200091
9A320564 38C0000C
48000008 7FE6FB78
60000000 00000000

Strategy 2)
C211D0A4 00000009
3E608049 6273ED9D
8A930000 2C140006
4082000C 38C00006
48000010 2C140004
4082001C 38C0000C
3E408045 82523130
3A200091 9A320564
48000008 7FE6FB78
60000000 00000000

Strategy 3)
C211D0A4 00000009
3E608049 6273ED9D
8A930000 2C140006
40800014 2C140004
40820024 38C0000C
48000008 38C00006
3E408045 82523130
3A200091 9A320564
48000008 7FE6FB78
60000000 00000000
Code:
Peach - Always Pull Specific Turnip
Credit: ???

(1.00)
042BBDA0 3900000X
0411CA54 48000010

(1.01)
042BC988 3900000X
0411CE04 48000010

(1.02)
042BD410 3900000X
0411D090 48000010

X Values:
0:Smile
1:T Eyes
2:Line Eyes
3:Circle Eyes
4:Upward Curve Eyes
5:Wink
6:Dot Eyes
7:Stitch Face
Code:
Peach - Infinite Float (1.02) [Achilles]
0411BBC4 3DE04A00
0411BBC8 91FF2230

:samusmelee: Samus
  • Full charge shot blink is always on.
  • Samus never enters "Charging" action state.
    • The other available code put Samus in charging animation during the first use of the match.
Code:
Samus - Always Full Charge Shot (1.02) [Achilles]
04128660 81E4009C
04128664 91E32230
Code:
Samus - Always Have Extended Grapple [donny2122]
042B7D04 38000004

Game Modes
"If you are holding a Mr. Saturn when the seconds remaining in the match is a multiple of 5, you die. If you are hit with a Mr. Saturn while not holding another item, you are forced to catch it and are stunned for a second or so."

Notes.

Code:
Hot Mr. Saturn Potato (1.02) [wParam, Achilles]
C22839BC 00000011
7C0802A6 90010004
9421FFE8 BFA10008
7C7F1B78 80A3002C
83C50CF4 2C1E0000
4182004C 83BE002C
811D1974 2C080000
4082003C 3C808009
608448A8 7C8803A6
7FE4FB78 7FC3F378
4E800021 3C80800C
6084318C 7C8803A6
7FC3F378 38800001
4E800021 3C804170
909D1A4C 7FE3FB78
BBA10008 8001001C
38210018 7C0803A6
7C0802A6 00000000
C206A360 0000000C
80C3002C 80E61974
2C070000 41820048
8107002C 81080010
2C080007 40820038
3CC08047 80C6B6C8
2C060000 41820028
38E00005 7D063BD6
7D2839D6 7C093000
40820014 3D20800D
612940B8 7D2903A6
4E800420 7C0802A6
60000000 00000000
Essentially, the hack gets rid of damage modifier for handicap and replaces it with controllable stocks so that one player can spawn with say 6 stocks and another can spawn with 4.

When handicap is set to "ON" you can set custom stocks per player (1 stock - 9 stocks).

When handicap is set to "AUTO" you can set custom stock per player (1 stock - 9 stocks) just like when handicap is "ON." However, upon re-entering the character select screen, your handicap will be set to the amount of stocks you had at the end of the game. If you had zero stocks (as in you lost), the game will set your stock to the current stock setting (any stock amount higher than nine will be set nine). This allows for easy crew battles. You can still change the stocks manually if needed (rage quits etc.).
Code:
Stock Control/Crew Battle (1.02) [Jorgasms]

04036bb4 60000000
C2266678 00000015
3DC0803F 61CEA3E6
89CE0000 2C0E0000
4182008C 3DC08045
39CE310E 3DE08048
39EF0828 3E008045
6210BF14 8A100000
2C100009 40810008
3A000009 8A2E0000
2C110000 4182000C
9A2F0000 48000008
9A0F0000 8A2E0E90
2C110000 4182000C
9A2F0024 48000008
9A0F0024 8A2E1D20
2C110000 4182000C
9A2F0048 48000008
9A0F0048 8A2E2BB0
2C110000 4182000C
9A2F006C 48000008
9A0F006C 3803FFFF
60000000 00000000
C21A57DC 00000005
3E008048 621006E0
3A200009 9A300000
9A300024 9A300048
9A30006C 38BEFFF8
60000000 00000000
C2230D54 00000006
88030005 3DC0803F
61CEA3E6 3DE08045
61EFBF15 3A000001
89CE0000 2C0E00FF
4082000C 9A0F0000
38000001 00000000
C222F76C 00000008
881C0004 3DC0803F
61CEA3E6 3E008045
6210BF15 8A300000
2C110001 40820014
38000002 39E000FF
99EE0000 4800000C
39E00000 99EE0000
60000000 00000000
C222F6BC 00000008
881C0004 3DC0803F
61CEA3E6 3E008045
6210BF15 8A300000
2C110001 40820014
38000002 39E000FF
99EE0000 4800000C
39E00000 99EE0000
60000000 00000000
C2033CC4 0000000A
3DC08045 61CEBF15
89CE0000 2C0E0002
40820038 3DC08045
39CE310E 3DE08048
39EF0828 8A4F0000
9A4E0000 8A4F0024
9A4E0E90 8A4F0048
9A4E1D20 8A4F006C
9A4E2BB0 48000008
98A3008E 00000000
Release Video
Code:
Taunt Battle (r2) [InternetExplorer]:
C2261BE0 00000005
3E208045 6231BF12
8A310000 2C110003
40820010 2C040001
40820008 38840001
9899000A 00000000
C22617CC 00000005
3E208045 6231BF12
8A310000 2C110003
4082000C 38000001
48000008 540007FE
60000000 00000000
C2167C08 00000005
3E208045 6231BF12
8A310000 2C110003
4082000C 38000000
48000008 881E0002
60000000 00000000
C2167F70 00000005
3E208045 6231BF12
8A310000 2C110003
4082000C 38000001
48000008 881E000B
60000000 00000000
C2167F7C 00000005
3E208045 6231BF12
8A310000 2C110003
4082000C 38000000
48000008 881E0002
60000000 00000000
C20DED14 0000000D
3E208045 6231BF12
8A310000 2C110003
40820050 887E067B
809E008C 80BE0020
7C042800 40820008
48000018 2C030000
4082000C 38600002
48000008 38600000
3CC0803C 60C66630
2C030000 41820008
38C60004 80E60000
38E70001 90E60000
7FE3FB78 00000000
C20DEBD0 00000003
8063008C 907E0020
7FC3F378 7C0802A6
60000000 00000000
C2165A64 0000000E
3E208045 6231BF12
8A310000 2C110003
40820054 3E20803C
62316630 3E4080BD
6252A4A0 82520000
7F53D378 2C130000
41820010 3A73FFFF
82520008 4BFFFFF0
8A72067B 2C130000
41820008 3A310004
80110000 3E208016
62315AA4 7E2903A6
4E800420 7C0601D6
60000000 00000000
C2036D70 00000003
3BE00000 3C60803C
60636630 93E30000
93E30004 00000000
C20DED40 00000013
7C7F1B78 3E208045
6231BF12 8A310000
2C110003 4082007C
887F067B 809F008C
80BF0020 7C042800
40820008 48000018
2C030000 4082000C
38600001 48000008
38600000 2C030002
40820008 38600001
5463103A 38630518
38800000 909F0518
909F051C 909F0520
909F0528 909F052C
909F0530 909F0534
3C804344 909F0524
38800091 989F0564
3C80437F 7C9F192E
7FE3FB78 00000000
C20D50CC 00000005
3E208045 6231BF12
8A310000 2C110003
4082000C 38000096
48000008 800505D0
60000000 00000000
C216C348 00000008
3FC08045 63DEBF14
881E0000 3FE0803C
63FF6630 83BF0000
7C1D0000 40800018
83BF0004 7C1D0000
4080000C 38600000
48000008 38600002
BB610024 00000000
2845bf12 00FF0300
004807c8 00000001
Essentially, it treats the Stock Match Time Limit as a points cap in Time mode and a coin cap in Coin Mode (coin cap is the minutes set times 100). It essentially ends the match immediately once one of the players has reached the point or coin limit/cap. Setting Stock Match Time Limit to None turns this off, so you can still play normally if you want to.


Code:
Capped (Tennis) Mode (1.02) [_glook]
C216CDAC 00000023
88030005 3C808045
6084BF18 88840000
2C040000 418200FC
3CA08045 60A5BF12
88A50000 2C050002
40A2000C 1C840064
48000018 2C050000
40A200D8 3CE08045
60E7BF1C 88E70000
38A00000 3CC08045
60C63080 81060008
2C080003 41820070
2C040064 41A00014
81060090 7C082000
40800070 48000058
39000000 81260070
7D084A14 81260074
7D084A14 81260078
7D084A14 8126007C
7D084A14 81260068
7D094050 A126008C
2C070001 4182000C
41810010 48000010
7D084A14 48000008
7D094050 7C082000
40800018 38A50001
38C60E90 2C050004
4082FF7C 48000034
38800032 3CA08046
60A5DB68 98850000
38800000 3CA08046
60A5B6C8 90850000
3880003A 3CA08046
60A5B6CC B0850000
60000000 00000000

Other Codes
  • Match does not end after all the targets have been hit.
Code:
Target Test Never Ends (1.02) [donny2112]
041C4344 38030000
Code:
16:9 Widescreen Support (v1.02) [InternetExplorer]
C2021ABC 00000002
39C00001 38600006
60000000 00000000
C236A4A8 00000007
C03F0034 2C0E0001
41820024 3C004080
90010030 3C004040
90010034 C0010030
EC210032 C0010034
EC210024 39C00000
281E0000 00000000

16:9 Widescreen Support (v1.00) [InternetExplorer]
C2021A3C 00000002
39C00001 38600006
60000000 00000000
C23685F4 00000007
C03F0034 2C0E0001
41820024 3C004080
90010030 3C004040
90010034 C0010030
EC210032 C0010034
EC210024 39C00000
281E0000 00000000

16:9 Widescreen Support (PAL) [InternetExplorer, Sham Rock]
C2021E54 00000002
39C00001 38600006
60000000 00000000
C236A3AC 00000007
C03F0034 2C0E0001
41820024 3C004080
90010030 3C004040
90010034 C0010030
EC210032 C0010034
EC210024 39C00000
281E0000 00000000
Code Notes
Note: This code has reports of causing the game to freeze.

Description: This code tests the input delay of your setup. Plug into P1 and start a match. Press D-pad Right to enable and D-pad Up to disable. While enabled, your character will flash red at a rate of 120bpm. Tap D-pad Down at the exact moment your character flashes red. Each time you do so, your character's percent damage will change to reveal the number of frames between the red flash and your input. This is the approximate number of frames of input delay your TV has. Note that your human timing has a margin of error, so this will only give a rough estimate of your TV's input delay.
Code:
Input Delay Tester (v1.02) [InternetExplorer]:
C2390CFC 00000021
3C608047 60639C3C
80630000 3C80805A
60847D00 3CA080BD
60A5A4A0 80050000
2C000000 418200DC
80A50000 546007BD
408200B4 54600739
408200B8 80040000
2C000000 418200BC
38C00000 90C50564
80E40004 2C070000
41820054 48000004
5460077B 40820008
48000024 7CE83B78
2C080014 41800008
39000000 3CC08045
60C630E0 B1060000
48000004 38E70001
2C07001E 4080000C
90E40004 48000064
38E00000 90E40004
48000058 3CC0437F
90C50518 90C50524
38C00000 90C5051C
90C50520 90C50528
90C5052C 90C50530
90C50534 3CC08000
60C60091 90C50564
4BFFFF80 38000001
90040000 4BFFFF5C
38000000 90040000
90040004 48000004
7C0802A6 00000000
Code:
Flush Cache on Scene Change (1.02) [Dan Salvato]
C21A4B70 00000004
3C608000 3C80003C
3D808000 618C543C
7D8903A6 4E800420
60000000 00000000

how exactly do you use these? I'm a noob
 

Stormghetti

Smash Journeyman
Joined
Aug 23, 2015
Messages
400
Location
Europe
Slippi.gg
STRM#798
NNID
Stormghetti
how exactly do you use these? I'm a noob
If you want to have the codes applied to the ISO, use Melee Code Manager. Almost all of these codes come with the program by default. If it's just for simple testing on Dolphin, right click the ISO on the list > Properties and Show Defaults, then add the code at the end of the GALE01 text file.
 

Bkacjios

Smash Rookie
Joined
Mar 2, 2019
Messages
1
Hey, so I've been searching through this thread and haven't really found what I've been looking for and have a weird request.

Anyone know of a way to disable the announcer? Doesn't even have to be completely disabled, but preferably I would like it so he doesn't speak on the CSS menu.

I've looked through that google doc and the 20xx melee "facts" doc, but haven't really found anything I thought would help. I don't really know the ins-and-outs of the game code to figure it out.
 
Last edited:

THICC_Snake

Smash Rookie
Joined
May 8, 2019
Messages
2
Hi! I was wondering if somebody had a Gecko or AR to disable the background in Battlefield and Final Destination. I found some useful codes that allowed me to disable some stage features and even to display them in their basic geometry but I really would like to know if somebody had some codes specifically for those two stages. Thanks.
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
UnclePunch UnclePunch T tauKhan DRGN DRGN

Apparently you can just use the '=' operator instead of .set:



I feel stupid for not knowing this.


Also, I did a couple of tests last night on the trophy collection array that suggests the following unused bools are safe to write to without any prerequisite code, and will not interfere with (or be clobbered by) trophy collection:
Code:
for 293 hwords at 8045C394:

    bits in mask 0x3F00 can be used to store variables in the memory card
It’s only 3/8ths of the space afforded by this mastercode, and it’s non-contiguous (though still index-able). The fact however that it can be done right out of vanilla melee is invaluable, since it then does not require a mastercode in the DOL, or a GCT file to keep the data valid. Even with the mastercode installed, these bits in particular are safer as they are not threatened by writes from vanilla trophy behavior if the mastercode blocking it is ever uninstalled.

---


Hi! I was wondering if somebody had a Gecko or AR to disable the background in Battlefield and Final Destination. I found some useful codes that allowed me to disable some stage features and even to display them in their basic geometry but I really would like to know if somebody had some codes specifically for those two stages. Thanks.
I've actually been working on a second version of that stage geometry code, and was wondering about how I could get some pesky details that persist in spite of using the developer flags to black out certain stages. I developed this code a little while ago in part so that I could do some research into the problem. On its own it does nothing, but it lets you selectively disable the displays of any GObj, including the ones containing things like stage elements and particle effects -- which might help in selectively disabling certain aspects of a stage like the background.

There was a code I was working on a longer while ago that involved setting up new lighting scenarios for different scenes in final destination that might help me look into this. I'll try to dig that up soon and take a look. In general though, the circumstances will all be slightly different depending on the stage.
 
Last edited:

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Hey, I was wondering if somebody could help me with a problem I'm having? To just summarize, I am currently not being able to find the controller address at all for some reason... I have seen this being used as the address in codes > 8046B108, but when I try to create a code with it, like a "Press UP on D-Pad to play as Master Hand" type thing, it doesn't ever work. I also have some other ideas with button conditionals, but I need some help with this please. Here is the code I was talking about right here, vvv

"D-Pad Up When Selecting Mario to play as Master Hand" (v1.02)
2846b108 00000008 < Button Conditional
243f0b40 081a0200 < RAM write 081a0200 to replace 08080200
cc000000 00000000 < On/Off Switch
e2000001 00000000 < End If

I'm still new to this so please let me know of anything I did wrong. :)

EDIT: I got it to work, although I'm wondering what the Male and Female Wireframes External IDs are?
 
Last edited:

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Also, I created a character striking code, but in order to be able to individually strike each character would take over 100 strings of code with the method I'm using, so I was wondering if someone could tell me if there is a more efficient way of making this code work...

Currently the code stands as this,

Strike Mario Press Y (v1.02)
2846b108 00000800 < Button Conditional
043f0b40 08080000 < RAM write 08080000 to 08080200
cc000000 00000000 < On/Off Switch
2846b108 00000800 < Button Conditional
043f0b40 08080200 < RAM write 08080200 to 08080000
cc000000 00000000 < On/Off Switch

Again, this code does work, (By locking the character) I'm just wondering if I can make this code smaller, or if there is a more efficient method of doing this. Because I need this to work for ALL characters.

EDIT: For some reason I can't get Z to work as a button conditional as well down, left, and right on the D-Pad??? + I shortened the code by one line by getting rid of the second On/Off Switch which proved useless.
 
Last edited:

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Also, I created a character striking code, but in order to be able to individually strike each character would take over 100 strings of code with the method I'm using, so I was wondering if someone could tell me if there is a more efficient way of making this code work...

Currently the code stands as this,

Strike Mario Press Y (v1.02)
2846b108 00000800 < Button Conditional
043f0b40 08080000 < RAM write 08080000 to 08080200
cc000000 00000000 < On/Off Switch
2846b108 00000800 < Button Conditional
043f0b40 08080200 < RAM write 08080200 to 08080000
cc000000 00000000 < On/Off Switch

Again, this code does work, (By locking the character) I'm just wondering if I can make this code smaller, or if there is a more efficient method of doing this. Because I need this to work for ALL characters.

EDIT: For some reason I can't get Z to work as a button conditional as well down, left, and right on the D-Pad??? + I shortened the code by one line by getting rid of the second On/Off Switch which proved useless.
Hey, welcome to the workshop! Nice job with this code; it’s very informative. I’ve never really looked into CSS mechanics before, and I don’t think I’ve ever encountered those button gecko opcodes.

For info on things like character IDs and data offsets, check out the SSBM Data Sheet mentioned in this thread.

---

I used a memory breakpoint on that data address you were changing for Mario in your striking code, and found a point in a large update function for the CSS that seems to interpret button presses to update the menu. The line at 80260c14 can be used to hitch a ride.

If you create an injection opcode at this point, then you can check the state of each cursor's current button presses from saved r28, and access data in volatile r3 to change the lock status like you were doing with Mario -- but for the currently highlighted character underneath the cursor. This should give you a very efficient context from which to write a short code that can apply to any character.


One problem with this is that the strikes are all reset when the CSS is re-loaded. I found however that if you NOP the instruction at 80264808 then you can cause the game to just load all characters as though they were unlocked by default -- and any strikes you make will have the locked status preserved between CSS loads there-after.


Here's an example of these small modifications, with some heavily commented ASM for the injection code:
Code:
C2260C14 00000003 # Injection
73800800 88030002
41A2000C 68000002
98030002 00000000
04264808 60000000 # NOP



1.02 ------ 80260c14 --- 88030002 -> Branch
# inject code at CSS input monitor function
# -- just before bools are checked for a highlighted character

# context:
# register r0 is not currently in use
# r3  = address of highlighted character CSS data
# r28 = controller input bools for "instant" button presses

andi. r0, r28, 0x800
# the bit mask 0x800 will check for Y button presses in r28
# the AND mask result is put in r0 temporarily, so it can be checked for TRUE/FALSE
# the comparison stores the result in CR, so r0 is free to use again

lbz    r0, 0x2(r3)
# original function code line loads the bools used to lock a CSS icon, and other things
# we can use the bit mask 0x02 to toggle the locked status of currently highlighted character

beq+ _return
# if the Y button is not pressed, then this branch is used to skip the remaining code

  _if_Y_press:
  xori r0, r0, 0x02
  stb  r0, 0x2(r3)
  # if the Y button is pressed, then we can use XOR to toggle the bool between TRUE/FALSE
  # we also save the value back in memory to update it before returning

_return:
# return from injection, back to original context
.long 0
 

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Wow, this is great! I'm really thankful that you took the time to write all that out, because I am not good at reading ASM and would have gotten lost for sure...
Speaking of that, it's also really useful that you described everything you did, because that will help me learn more about ASM!
 

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
"Press Z to Strike Characters in CSS (v1.02) [Punkline] [JoshuaMK]"

C2260C14 00000003 # Injection
73800010 88030002
41A2000C 68000002
98030002 00000000
04264808 60000000 # NOP

I only take credit for having created the Gecko version of this code that led to this version by Punkline. I then edited the button conditional to Z to keep from messing up what costume you have picked. Again, thank you Punkline for helping me out with this!
 
Last edited:

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
What did you set your breakpoint to in order to see the piggyback address? I'm trying to learn how to do that stuff.
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
What did you set your breakpoint to in order to see the piggyback address? I'm trying to learn how to do that stuff.
I used a memory breakpoint on the address you used in your gecko overwrites to address 803f0b40:
‘043f0b40 08080000 < RAM write 08080000 to 08080200’


To have debug dolphin break when the byte you were modifying gets read or written, you can create a special data breakpoint by clicking the +MBP button in the breakpoint panel. (If you can't find the breakpoint panel, make sure you have have it enabled by going to view -> breakpoints.)

The menu that pops up for +MBP lets you specify a range of addresses that is accurate to the byte instead of full words, so you can reference just the byte in question by adding 2 to the address:



Not specifying the address as part of a range might cause the MBP to not catch references to single bytes that aren't aligned with the word, so I usually use ranges instead of just single addresses. Using a range that includes this byte (even if it's ONLY this byte) will show us where in the code it is referenced as the code executes.

With the memory breakpoint set up like shown above, the game will pause when the byte storing the lock variable for Mario’s CSS icon is read from, or written to. This includes any functions that reference mario as part of a loop, like you can see when the CSS initializes:

 
Last edited:

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Goodness gracious the problems won't stop... I was trying to set up a better Debugging Dolphin setup, and the one I'm currently situated with, being
5.0-3977, it and everything 5.0 (Because I did test this), always cant detect the code, nor the Memory, when it is actively playing the game. This is something that works a-okay in anything 4.0 and earlier, even Memory engine doesn't work right because of this. It's only when I pause the emulation that codes and memory suddenly pop up fine... any help with this?

https://imgur.com/a/fWrhVv0

I couldn't get pics to upload here so just use the link. Also I don't think it tracks it properly even when paused...

EDIT: BTW I am using this version because it is included with Melee Toolbox, and I heard is is the least buggy when it comes to debugging while also supporting Memory Engine.
 
Last edited:

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Goodness gracious the problems won't stop... I was trying to set up a better Debugging Dolphin setup, and the one I'm currently situated with, being
5.0-3977, it and everything 5.0 (Because I did test this), always cant detect the code, nor the Memory, when it is actively playing the game. This is something that works a-okay in anything 4.0 and earlier, even Memory engine doesn't work right because of this. It's only when I pause the emulation that codes and memory suddenly pop up fine... any help with this?

https://imgur.com/a/fWrhVv0

I couldn't get pics to upload here so just use the link. Also I don't think it tracks it properly even when paused...

EDIT: BTW I am using this version because it is included with Melee Toolbox, and I heard is is the least buggy when it comes to debugging while also supporting Memory Engine.
I’ve found sometimes that memory breakpoints won’t trigger for me unless I run Debug Dolphin as an administrator. Make sure you’re doing that if MBPs aren’t causing the game to pause. I find that I also need to do this with Memory Engine before it will hook into Dolphin.


Concerning the code view: in 5.0+ the disassembler will only print when the game is paused, and will then show the location that the game was paused at. This shouldn't affect the behavior of breakpoints if you are running as an administrator, but it does mean that you can't browse the disassembly while the game is live like was possible in older versions. (I remember reading something about how that was unstable, but I don't remember the details.)

Breakpoints are used to pause EXACTLY at a target, making that the focus of the disassembler on break. If you just pause normally though, it will end up displaying some random line in the game code that it happened to be on when you pressed pause. While paused, you can type in a target address to look at, or browse your symbols map.

(BTW, I highly recommend installing the community symbol map. It will fill out some function names in the code view; which can then be browsed, and will be referenced in branch instructions. You can copy disassembled functions from the code view as text if the function is mapped, which can be useful for analyzing externally.)

---

Displayed memory values will also only update when the game is paused, stepped through, or when clicking on the values in the memory panel. I usually rely on Memory Engine (or sometimes Cheat Engine with an older version of Dolphin) if I want to watch a value as it updates in real-time, but you can also use the Memory Watch panel to set up some quick addresses to watch within Dolphin.

I don’t update Dolphin very often, but I’m currently using build 5.0-4681 for use with Memory Engine. It’s probably not very different from the version you’re using, but I’ve had no problems with it aside from some broken icon graphics and a benign error message that pops up when I launch with the log panel enabled.

When using Cheat Engine, I use build 5.0-1103; as well as a special CE setup, detailed in this thread.

ME does most of what CE does with less hassle, so I use that most of the time. CE has better tools though for choking your scans’ search ranges, defining value labels for a watch entry, evaluating expressions, opening multiple memory viewers simultaneously, copying/pasting watch entries, copying/pasting raw hex data, and better features for creating and saving organized watch lists. The graphical memory viewer is also particularly handy for recognizing structural patterns in big blocks of unknown data.
 
Last edited:

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Oh okay then! Knowing now how it works it isn't so much of a problem then to use now that I know how this works... Although a definite fix was running Memory Engine in Admin mode, so thanks for that!
 

JoshuaMK

Smash Apprentice
Joined
May 19, 2019
Messages
75
Could someone point me to a code that unlocks Sound Test if possible? Thanks!
 

Punkline

Dr. Frankenstack
Premium
Joined
May 15, 2015
Messages
423
Could someone point me to a code that unlocks Sound Test if possible? Thanks!
There is a code in the original post in this thread that'll do it for you, hidden in a spoiler.

I've also just now updated this sound test code to force the option to be unlocked in a way that's saved to the memory card.
 
Last edited:
Top Bottom