I only have codes for the US version 1.0 and 1.2 of Super Smash Bros. Melee, because those are the versions I own. I do not know how to convert them to other versions. Use the links below to switch which version you need.
Version 1.0 codes | Version 1.2 codes
Dual 1v1 Mode:
In my normal Smash group of 4 players, we have limited time and no one wants to wait out matches, yet we prefer 1v1-style fights. This code allows this by letting all 4 players play at once, but each "set" of 1v1 players can't directly interfere with the other fight (beyond things like messing with the camera or edge hogging). Once each pair has a winner, the two winners can battle it out for the overall winner of the match!
The only downside is that you can no longer play team matches with Friendly Fire turned off - but no one worth their salt plays Teams without Friendly Fire turned on anyway. Also, a side effect is that most stage hazards will no longer affect players - there is information in the hacking section below on how to fix this if you really want stage hazards to still work.
- Turn Friendly Fire to OFF.
- Switch to Team mode and set the team colors so that each set of players that should fight each other are the same color. Players will only be able to hurt other players set to the same team color.
- (Optional) Switch Team mode back off so players can switch to whatever costume they want.
- Start the match
- When the match is over, re-shuffle team colors as desired (this step can be skipped using another code further down!).
Dual 1v1 mode code:
Shuffle teams based on rank:
The Dual 1v1 mode is pretty cool, but having to switch teams around after every match can be tedious. This code gets rid of that step by automating the shuffling of team assignments based on the rankings from the previous match. With it, there is no need to switch to Teams mode at all, unless you just want to check as a reminder of who is fighting whom.
The players that recieved 1st or 2nd place will be set to fight each other for the next match, and the players that got 3rd and 4th place will fight each other. When the game is first booted everyone can fight everyone, so you can treat the first match as a FFA "placements" match that determines the pairings for the first paired-off match.
Of course, even with this code enabled, you can still at any time manually switch to Teams mode and change around the pairings before starting the next match.
Note: In the unlikely event of a tie, this code will not compensate and will still assign directly based on rank. You will want to manually go into Teams mode and fix the color assignments in this case.
Re-shuffle teams by Rank code:
Disable some stage features:
Many stages have annoying features that interfere with a straight skill-based fight. Argue fairness as you will, but we would rather not have stages do some of this stuff. This code disables the following stage features:
- Brinstar: Rising lava
- Corneria: Attacking ships and Great Fox gun
- Dreamland 64: Wind
- Fountain of Dreams: Moving platforms
- Green Greens: Wind, apples, and falling blocks
- Peach's Castle: Switches and Bullet Bills
- Pokemon Stadium: Transformations
- Yoshi's Story: Shy guys
Disable stage features code:
C-stick smashes in 1p Mode:
Want to use Training Mode and still have the c-stick do smash attacks instead of moving the camera? Don't we all! Now you can with this code.
C-stick 1p mode code:
For other hackers
Below are the unencrypted versions of the above codes complete with comments on what each line does, for anyone wanting to further modify the codes or make new ones. The codes were encrypted using GCNCrypt.
Dual 1v1 mode:
'Make sure FF (Friendly Fire) is checked for grabs even with Team mode off
'Make sure FF is checked for melee attacks even with Team mode off
'Make sure FF is checked for projectile vs projectile even with Team mode off
'Make sure team id's are compared for self-damaging projectiles (Link's bombs)
'Check Team of Projectile attacks
'Compare Projectile team to "Neutral"
'Skip attacks from "Neutral" team (leave out this line to make "Neutral" attacks like stage hazards work!)
'Swap FF logic for grabs (ONLY grab teammates)
'Swap FF logic for melee attacks (ONLY attack teammates)
'Swap FF logic for projectiles (ONLY hit teammates)
'Swap FF logic for projectile vs projectile attacks (ONLY hit teammate's projectiles)
'Special force jump to custom code stored in memory only used by debug mode
'New code - subtract # of deaths from total # of players
'New code - Set address to store resulting # of living players
'New code - Store # of living players
'New code - Perform original operation that was changed to a code jump
'New code - Return back to original code
'Check - is FF turned OFF in menus?
'If above is true, turn FF off in the match as well
'If above is true, always switch Teams mode off
'Is there less than 3 players still alive (checking value set by custom code above)?
'If above is true, turn temp in-game FF mode ON so last 2 players can kill each other
Shuffle teams based on rank:
'This address stores the player number of the last player that died, but at the start of a match it defaults to 6. Here we check if it is 6 to know if a match started.
'If just started a match (last player died == 6), set a value to FF as a marker. This value will get set back to normal when the match ends by normal game code, and is how to know the match ended.
'By the same above check, change the player number of the last player that died to '5' so don't do the above more than once.
'Check - if last player that died is still 6, match must have just started, so don't continue.
'Check - if last player that died is a special tag 'FF', must have already performed the below, so don't continue.
'Check - if this address is still special tag 'FF' from intial code, match must not have ended yet, so don't continue.
'Check - if Friendly Fire is turned off, not using Dual 1v1 mode anyway, so don't continue.
'Set Player 1 to red team
'Set player 2 to red team
'Set player 3 to red team
'Set player 4 to red team
'If player 1's rank is > 2 (3rd or 4th place), set to blue team.
'If player 2's rank is > 2 (3rd or 4th place), set to blue team.
'If player 3's rank is > 2 (3rd or 4th place), set to blue team.
'If player 4's rank is > 2 (3rd or 4th place), set to blue team.
'Set the last player that died to 'FF' to prevent doing this more than once after match ends. It will get set back to 6 by normal game code at the beginning of the next match.
'Tag for Action Replay that this is the end of the multi-line if checks above.
Disable some stage features:
'Skip functions for creating switches and bullets in Peach's Castle.
'Disable update for rising lava in Brinstar.
'Tree AI never decides to blow wind in Dreamland.
'Turn off the moving platforms and the water that holds them up in Fountain of Dreams.
'Disable update that spawns ships in Corneria.
'Tell the Great Fox's gun to start out dead (so it won't shoot or act as a platform).
'Turn off initial bricks appearing in Green Greens.
'Disable update for new bricks falling in Green Greens.
'Disable update for tree (wind and apples) in Green Greens.
'Disable stage transformation timer update in Pokemon Stadium.
'Disable update that spawns shy guys in Yoshi's Story.
C-stick smashes in 1p Mode:
'Always report in VS mode
Stage hacking tips:
Smash Melee's code keeps a linked list of objects with update functions, which it runs through and calls the update functions every game frame. This list is constantly having objects added to and deleted from it. Each stage adds several objects to the list, and the easiest way to change the stage's behaviour is to tell these functions to not do anything.
Each stage has an initialization function, and while it is possible to find out what function is run for each stage by following a series of several links in memory, the easist way is to put a breakpoint at the address 0x801BFA90, start the stage you want to mess with, and then step once when the breakpoint is hit. This will put you at the start of that stage's initialization function.
During the initialization function several objects will be added to the update list. To find where the update functions are, starting from the initialization function you found, scroll down the code to find the return code (blr) and put a breakpoint there. Next, put a breakpoint at the address 0x8038DF40. This is part of the function that adds new objects to the list.
Now let the code run until that breakpoint is reached. When it is, look at the address in register #28. This is the address of the update function for the object being added. Keep running the code and jot down the addresses in register 28 until you hit the breakpoint at the end of the stage's initialization function. After that, more objects will be added all the time but they are not related to the stage.
There are two global update functions you will see that should be ignored - 0x801C0D00 (which updates animations) and 0x801C0D68 (unknown purpose). The rest are likely specific to that stage. Many of those will be nothing more than a return (blr) though, as an "empty" update, so those can also be ignored.
A quick change just to see what happens is to take those update functions and tell them to just return immediately by using a code like 04XXXXXX 4E800020, where XXXXXX is the last 6 digits of the address of the update function. If that does more than you intended, you may need to step through the update functions and find things to change, often just telling it to skip a branch or something using 60000000.
You can also try to mess with the stage's init function, though I've rarely found this useful. One thing that has been useful to know though is that many objects have init functions of their own, where additional steps are taken. For example, I had to edit the init function for the main stage platform of Green Green's in order to get rid of the initial yellow blocks. You can find these in a similar way to finding the update functions - while in the stage's init function, put a breakpoint at 0x802122F8 and step once to get into the init function of initialized objects for that stage.
Good luck hacking!