The Codes
These codes are for US version 1.0 of Super Smash Bros. Melee, simply because that is the version I own. I do not know how to convert them to other versions.
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.
To use:
1. Turn Friendly Fire to OFF.
2. 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.
3. (Optional) Switch Team mode back off so players can switch to whatever costume they want.
4. Start the match
5. 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:
1. 7XBM-UEQM-ABZVX
2. A6CE-M7QR-BFYE0
3. JQ55-16XM-MJ1QH
4. V0VW-V6HU-BA5M1
5. VV4N-V7KU-9KZ0D
6. JVWV-TCNZ-EBQ0J
7. 3XUP-9HV3-19VGM
8. A5EJ-Z01W-QV6AC
9. GKNJ-R1D0-RN06Q
10. 0R9K-5803-72TV2
11. QAW8-Q6HD-GA4BQ
12. 7QCH-W9J8-AC728
13. W8G7-QB4W-E2Y79
14. UZG9-JHF8-7RQBV
15. 23N4-M3MQ-86ECP
16. VTWP-83ZW-EXH80
17. U8WR-KB0Y-ZTV3P
18. 6UZU-R4FT-8T5PC
19. 8G9U-HHQQ-HXPUP
20. GT3X-5BCU-2V8GB
21. 4HGF-F6KY-UCMYR
22. 0GJ2-K81G-4ZF8P
23. 3Z08-2UJG-T6F03
24. 011B-0E8W-YMFRM
25. X3BD-K9K4-8UG4E
The above code has an initially unintended side effect - attacks from the "neutral" faction will not attack any players. This means most stage hazards won't hurt anyone, but also things like mushrooms and power stars. I figured out how to re-enable the "neutral" faction with this alternate version of the above code:
Dual 1v1 mode w/ working "neutral" attacks code:
1. G7R9-9U9P-QD0F8
2. A6CE-M7QR-BFYE0
3. JQ55-16XM-MJ1QH
4. A5EJ-Z01W-QV6AC
5. GKNJ-R1D0-RN06Q
6. QAW8-Q6HD-GA4BQ
7. 7QCH-W9J8-AC728
8. W8G7-QB4W-E2Y79
9. 23N4-M3MQ-86ECP
10. VTWP-83ZW-EXH80
11. U8WR-KB0Y-ZTV3P
12. 6UZU-R4FT-8T5PC
13. 8G9U-HHQQ-HXPUP
14. GT3X-5BCU-2V8GB
15. 4HGF-F6KY-UCMYR
16. 0GJ2-K81G-4ZF8P
17. 3Z08-2UJG-T6F03
18. 011B-0E8W-YMFRM
19. X3BD-K9K4-8UG4E
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:
1. 9C4P-UPXK-6M6HW
2. KXA2-GHYB-YBXU3
3. ZK06-1YTD-9H46A
4. 3CCZ-VRD6-P1A14
5. 52WJ-9W0E-ANW0A
6. KKRF-4KAY-DT3FX
7. A88D-RTXA-B6GF3
8. 9V4P-CT75-FVM7U
9. H378-K5Z5-C9YXH
10. 8W1X-M0N5-PJTDU
11. TUF3-DFTP-CXVTQ
12. PA3J-UNHD-NPAG8
13. BDNM-ETD8-41EQ3
14. DE05-Z4H6-6DQHG
15. QF4R-***K-MMDE2
16. HDX9-U3DM-JBRV6
17. GGXC-RE77-TTYR2
18. BYPU-CMM2-81RYF
19. D82N-CQ7G-DEWRZ
20. Z639-H6A4-GGTJ2
21. 1TQB-W6YX-QQWRW
22. TAHU-FMJF-BVHM2
23. 83BK-451R-TK4D7
24. PQ9B-Q9ZB-MRXMC
25. 3FV1-Z9K0-4PNQ6
26. 28XW-RBC5-TFCVZ
27. VHDR-UM94-BT76H
28. KH5F-385R-AR6YC
29. GJ24-6AC6-UVZQB
30. E9FZ-A3QA-YCERP
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:
1. 12GV-JMV8-Z38E8
2. PC0M-DD84-KDEN8
3. 8N46-M6MR-3FF6D
4. CR16-BE3A-E5ZQT
5. N0A2-0X7Z-K4QXV
6. JFY3-RBX4-E6X32
7. 7KPA-W91E-EM8MJ
8. K0UD-W4V9-4HGK5
9. Z04D-ZEZ4-Q7GT5
10. 69R5-52CR-98W45
11. 43FJ-MTHU-MDNA4
12. RHMY-M2YG-QRGD5
13. 7BRE-D2BT-GPR8A
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:
1. T1PY-QR55-E4EWG
2. GCH0-5WBT-26FY8
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
040787D0 60000000
'Make sure FF is checked for melee attacks even with Team mode off
04078A3C 60000000
'Make sure FF is checked for projectile vs projectile even with Team mode off
0426F434 60000000
'Make sure team id's are compared for self-damaging projectiles (Link's bombs)
0426f44c 60000000
0426f458 60000000
0407901C 60000000
'Check Team of Projectile attacks
04078FFC 88770020
'Compare Projectile team to "Neutral"
04079000 2C0300FF
'Skip attacks from "Neutral" team (leave out this line to make "Neutral" attacks work!)
04079004 418207A0
'Swap FF logic for grabs (ONLY grab teammates)
000787EC 00000040
'Swap FF logic for melee attacks (ONLY attack teammates)
00078A7C 00000040
'Swap FF logic for projectiles (ONLY hit teammates)
0007902C 00000040
'Swap FF logic for projectile vs projectile attacks (ONLY hit teammate's projectiles)
'0026F44C 00000040
'Special force jump to custom code stored in memory only used by debug mode
0416b748 4828CDD9
'New code - subtract # of deaths from total # of players
043F8520 7C1FE850
'New code - Set address to store resulting # of living players
043F8524 3FC0803F
'New code - Store # of living players
043F8528 901E7FD0
'New code - Perform original operation that was changed to a code jump
043F852c 381DFFFF
'New code - Return back to original code
043F8530 4E800020
'Check - is FF turned OFF in menus?
48459F51 00000000
'If above is true, turn FF off in the match as well
0046BBA1 00000000
'If above is true, always switch Teams mode off
0046BBA8 00000000
'Is there less than 3 players still alive (checking value set by custom code above)?
2C3F7FD0 00000003
'If above is true, turn temp in-game FF mode ON so last 2 players can kill each other
0046BBA1 00000001
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.
484696E5 00000006
'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.
0047E8CD 000000FF
'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.
004696E5 00000005
'Check - if last player that died is still 6, match must have just started, so don't continue.
904696E5 00000006
'Check - if last player that died is a special tag 'FF', must have already performed the below, so don't continue.
904696E5 000000FF
'Check - if this address is still special tag 'FF' from intial code, match must not have ended yet, so don't continue.
9047E8CD 000000FF
'Check - if Friendly Fire is turned off, not using Dual 1v1 mode anyway, so don't continue.
88459F51 00000000
'Set Player 1 to red team
003EEF76 00000000
0047E861 00000000
'Set player 2 to red team
003EEF9A 00000000
0047E885 00000000
'Set player 3 to red team
003EEFBE 00000000
0047E8A9 00000000
'Set player 4 to red team
003EEFE2 00000000
0047E8CD 00000000
'If player 1's rank is > 2 (3rd or 4th place), set to blue team.
7047A0BD 00000001
003EEF76 00000001
0047E861 00000001
'If player 2's rank is > 2 (3rd or 4th place), set to blue team.
7047A165 00000001
003EEF9A 00000001
0047E885 00000001
'If player 3's rank is > 2 (3rd or 4th place), set to blue team.
7047A20D 00000001
003EEFBE 00000001
0047E8A9 00000001
'If player 4's rank is > 2 (3rd or 4th place), set to blue team.
7047A2B5 00000001
003EEFE2 00000001
0047E8CD 00000001
'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.
004696E5 000000FF
'Tag for Action Replay that this is the end of the multi-line if checks above.
00000000 40000000
Disable some stage features:
'Skip functions for creating switches and bullets in Peach's Castle.
041CC8F8 4800000C
'Disable update for rising lava in Brinstar.
041D89B4 4E800020
'Tree AI never decides to blow wind in Dreamland.
0421035C 60000000
'Turn off the moving platforms and the water that holds them up in Fountain of Dreams.
041CB8DC FC000028
041CB8E4 4800013C
'Disable update that spawns ships in Corneria.
041DCA1C 60000000
'Tell the Great Fox's gun to start out dead (so it won't shoot or act as a platform).
041E035C 40800430
'Turn off initial bricks appearing in Green Greens.
04213434 60000000
'Disable update for new bricks falling in Green Greens.
0421586C 60000000
'Disable update for tree (wind and apples) in Green Greens.
04212958 4E800020
'Disable stage transformation timer update in Pokemon Stadium.
041D0578 60000000
'Disable update that spawns shy guys in Yoshi's Story.
041E2284 60000000
C-stick smashes in 1p Mode:
'Always report in VS mode
0416AB64 60000000
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!