This file contains client patches I've made for various versions of PSO.

Places to find more codes/patches:
- GC-Forever: https://www.gc-forever.com/forums/viewtopic.php?t=2050 (3OE0, 3OE2)
- GC-Forever: https://www.gc-forever.com/forums/viewtopic.php?t=2049 (3OP0)
- BB Patch Project: https://github.com/Solybum/Blue-Burst-Patch-Project (59NL)

Version codes (from README.md):
  1OJ1: PSO DC Network Trial Edition
  1OJ2: PSO DC 11/2000 prototype
  1OJ3: PSO DC 12/2000 prototype
  1OJ4: PSO DC 01/2001 prototype
  1OJF: PSO DC v1 JP
  1OEF: PSO DC v1 US
  1OPF: PSO DC v1 EU
  2OJ4: PSO DC 08/2001 prototype
  2OJ5: PSO DC 08/2001 prototype
  2OJF: PSO DC v2 JP
  2OEF: PSO DC v2 US
  2OPF: PSO DC v2 EU
  2OJT: PSO PC Trial Edition
  2OJW: PSO PC (v2) 04/2002
  2OJZ: PSO PC (v2) 02/2003
  3OJT: PSO GC Trial Edition
  3OJ2: PSO GC v1.2 JP
  3OJ3: PSO GC v1.3 JP
  3OJ4: PSO GC v1.4 (Plus) JP
  3OJ5: PSO GC v1.5 (Plus) JP
  3OE0: PSO GC v1.0 US
  3OE1: PSO GC v1.1 US
  3OE2: PSO GC v1.2 (Plus) US
  3OP0: PSO GC v1.0 EU
  3SJT: PSO GC Ep3 Trial Edition
  3SJ0: PSO GC Ep3 JP
  3SE0: PSO GC Ep3 US
  3SP0: PSO GC Ep3 EU
  4OJB: PSO Xbox Beta
  4OJD: PSO Xbox JP Disc
  4OJU: PSO Xbox JP TU
  4OED: PSO Xbox US Disc
  4OEU: PSO Xbox US TU
  4OPD: PSO Xbox EU Disc
  4OPU: PSO Xbox EU TU
  50YJ: PSO BB US 1.24.3
  59NJ: PSO BB JP 1.25.11
  59NL: PSO BB JP 1.25.13 (including the Tethealla client)

The menu code
This code makes all disabled items in menus selectable, which allows you to e.g. use items you can't normally use
3OJ2 => 04263B80 48000028
        042AC548 48000020
3OJ3 => 04264758 48000028
        042AD3F0 48000020
3OJ4 => 042657B4 48000028
        042AE51C 48000020
3OJ5 => 04265554 48000028
        042AE2D0 48000020
3OE0 => 04264458 48000028
        042ACF04 48000020
3OE1 => 04264458 48000028
        042ACF48 48000020
3OE2 => 04265818 48000028
        042AE484 48000020
3OP0 => 04265060 48000028
        042ADC18 48000020
3SJT => 0417ADD0 48000028
3SJ0 => 0416B5A4 48000028
3SE0 => 0416B458 48000028
3SP0 => 0416B904 48000028

Disable serial number validation (untested)
2OEF => 8C1E743E 01E0
        8C2670B6 01E0

Disable item equip restrictions ("God of equip")
3OE0 => 0410521C 38000005
3OE1 => 0410521C 38000005
3OE2 => 041050E4 38000005
3OJ2 => 04104F78 38000005
3OJ3 => 04105154 38000005
3OJ4 => 04105240 38000005
3OJ5 => 041050D4 38000005
3OJT => 0415BF50 38000005
3OP0 => 041052D4 38000005
5OYJ => 005C8C8F E9A7000000
59NJ => 005C9F35 E9A7000000
59NL => 005C9F31 E9A7000000

All items visible in Pioneer 2
3OE1 => 04102D88 38600000

Mags visible in Pioneer 2
5OYJ => 005D7053 EB04
59NJ => 005D8F27 EB04
59NL => 005D8F4B EB04

Disable pause menu background + offset
3OE1 => 0424BD5C 48000370
        0428735C 4800000C
3OE2 => 0424CED8 48000370
        042887D8 4800000C
5OYJ => 00713758 9090
        0072D417 9090
        0072D27E 90E9
59NJ => 00719C58 9090
        00733C57 9090
        00733ABE 90E9
59NL => 00719B54 9090
        00733BA7 9090
        00733A0E 90E9

All rareable enemies are rare
3OE0 => 040AC944 60000000 // Hildeblue
        040C1B70 60000000 // Rappies
        040C3FC8 60000000 // Nar Lily
        040EB050 48000010 // Pouilly Slime
3OE1 => 040AC944 60000000 // Hildeblue
        040C1B70 60000000 // Rappies
        040C3FC8 60000000 // Nar Lily
        040EB050 48000010 // Pouilly Slime
3OE2 => 040ACAFC 60000000 // Hildeblue
        040C1D08 60000000 // Rappies
        040C4160 60000000 // Nar Lily
        040EB1E8 48000010 // Pouilly Slime
3OJ2 => 040AC6B8 60000000 // Hildeblue
        040C18CC 60000000 // Rappies
        040C3D24 60000000 // Nar Lily
        040EADAC 48000010 // Pouilly Slime
3OJ3 => 040AC9C4 60000000 // Hildeblue
        040C1BD0 60000000 // Rappies
        040C4028 60000000 // Nar Lily
        040EB0B0 48000010 // Pouilly Slime
3OJ4 => 040ACB3C 60000000 // Hildeblue
        040C1E04 60000000 // Rappies
        040C41A0 60000000 // Nar Lily
        040EB374 48000010 // Pouilly Slime
3OJ5 => 040ACAEC 60000000 // Hildeblue
        040C1CF8 60000000 // Rappies
        040C4150 60000000 // Nar Lily
        040EB1D8 48000010 // Pouilly Slime
3OP0 => 040ACAC4 60000000 // Hildeblue
        040C1CD0 60000000 // Rappies
        040C4128 60000000 // Nar Lily
        040EB1B0 48000010 // Pouilly Slime

Unlock all songs in BGM test
Note: sadly, there are no secret/unused ones
3OJ2 => 04367A68 38600001
        04367A6C 4E800020
3OJ3 => 04368ED8 38600001
        04368EDC 4E800020
3OJ4 => 0436A434 38600001
        0436A438 4E800020
3OJ5 => 0436A1E8 38600001
        0436A1EC 4E800020
3OE0 => 0436891C 38600001
        04368920 4E800020
3OE1 => 04368960 38600001
        04368964 4E800020
3OE2 => 0436A5B4 38600001
        0436A5B8 4E800020
3OP0 => 043699A8 38600001
        043699AC 4E800020
3SJT => 041EA948 38600001
        041EA94C 4E800020
3SJ0 => 041D8CF0 38600001
        041D8CF4 4E800020
3SE0 => 041D8D7C 38600001
        041D8D80 4E800020
3SP0 => 041D93F0 38600001
        041D93F4 4E800020

Play lobby (and event) music in Morgue also
3OJ2 => 0417DD34 60000000
3OJ3 => 0417E0E8 60000000
3OJ4 => 0417E24C 60000000
3OJ5 => 0417E1AC 60000000
3OE0 => 0417E0F0 60000000
3OE1 => 0417E0F0 60000000
3OE2 => 0417E210 60000000
3OP0 => 0417E6D4 60000000
3SJT => 040B8C7C 60000000
3SE0 => 040B7028 60000000
3SJ0 => 040B7044 60000000
3SP0 => 040B746C 60000000

Skip white logo screens during startup
3OJ2 => 0413EE54 38000007
3OJ3 => 0413F1DC 38000007
3OJ4 => 0413F338 38000007
3OJ5 => 0413F298 38000007
3OE0 => 0413F190 38000007
3OE1 => 0413F190 38000007
3OE2 => 0413F2A8 38000007
3OP0 => 0413F524 38000007
3SJT => 0409E10C 38000007
3SJ0 => 0409D810 38000007
3SE0 => 0409D774 38000007
3SP0 => 0409D9A4 38000007

Skip agreement prompts before online game
3OJ2 => 0432737C 38000003
3OJ3 => 043283CC 38000003
3OJ4 => 043298E8 38000003
3OJ5 => 04329690 38000003
3OE0 => 04327D3C 38000003
3OE1 => 04327D80 38000003
3OE2 => 0432984C 38000003
3OP0 => 04328C58 38000003
3SJT => 041C67D0 38000003
3SJ0 => 041B5234 38000003
3SE0 => 041B50C8 38000003
3SP0 => 041B574C 38000003

Disable rate limit for pressing A during loading screens
3SJT => 042E1030 38000000
3SJ0 => 042F8BE4 38000000
3SE0 => 042F9B30 38000000
3SP0 => 042FA734 38000000

Auto-press A as fast as possible during loading screens
3SP0 => 042FA6C4 60000000
3SE0 => 042F9AC0 60000000
3SJT => 040C2C48 60000000
3SJ0 => 042F8B74 60000000

CARD lobby battle tables react immediately
3SE0 => 042C04D4 60000000

Change type of all loading screens
Values for X: 0 = lobby/game join, 1 = quest load, 3 = pipe up, 4 = pipe down, anything else = silent black screen
3OE1 => 0401CA04 3BE0000X
        0401CA08 48000038

Replace loading screen A button sounds with random sounds
3SJT => 042E1018 480309A9
        042E101C 5463063E
        042E1020 60631400
        042E1024 64630005
        042E1028 38800000
3SE0 => 042F9B18 4804BB19
        042F9B1C 5463063E
        042F9B20 60631400
        042F9B24 64630005
        042F9B28 38800000

Change color of loading screens
Replace AA, RR, GG, BB appropriately
3SE0 => 042FA704 3CC0AARR
        042FA708 60C6GGBB

Use 16:9 aspect ratio
3SE0 => 04383DC8 4BC87F99
        0400BD60 C042DED0
        0400BD64 EC5D00B2
        0400BD68 4E800020

Disable darkening effect during battle details mode
3SJT => 042E09D8 4E800020
3SJ0 => 042F85D0 4E800020
3SE0 => 042F951C 4E800020
3SP0 => 042FA120 4E800020

Unlock all COM decks
3SJ0 => 042C9B34 38600001
3SP0 => 042CB414 38600001
3SE0 => 042CA908 38600001

Enable all lobby counter options in non-CARD lobbies
3SE0 => 04096A8C 480000C0
        04096B4C 38800007
        04096BFC 4BFFFF2C

Enable Change Marker option in all lobbies
3OJ2 => 04138208 4800004C
3OJ3 => 04138510 4800004C
3OJ4 => 041390B4 4800004C
3OJ5 => 041385B8 4800004C
3OE0 => 041384C4 4800004C
3OE1 => 041384C4 4800004C
3OE2 => 041385C8 4800004C
3OP0 => 04138848 4800004C

Lobby arrows rotation speed modifier
3OE1 => 041C6B64 3804XXXX (default 0800)

Change lobby arrow colors
Note: All values as floats in [0, 1]
3OE1 => 04443780 AAAAAAAA (slot 0)
        04443784 RRRRRRRR (slot 0)
        04443788 GGGGGGGG (slot 0)
        0444378C BBBBBBBB (slot 0)
        04443790 AAAAAAAA (slot 1)
        04443794 RRRRRRRR (slot 1)
        04443798 GGGGGGGG (slot 1)
        0444379C BBBBBBBB (slot 1)
        ...

Change HUD color mask
3SE0 => 0438CA8C 3C00RRGG
        0438CA90 6000BBAA

Disable lobby event music (but keep the visuals)
3OJT => 040B2394 38000000
3SE0 => 040B705C 38000000
3SJ0 => 040B7078 38000000
3SP0 => 040B74A0 38000000

Disable rate limit for lobby chair movement
3OJ2 => 041C73B0 60000000
3OJ3 => 041C786C 60000000
3OJ4 => 041C7DA8 60000000
3OJ5 => 041C7938 60000000
3OE0 => 041C77CC 60000000
3OE1 => 041C77CC 60000000
3OE2 => 041C799C 60000000
3OP0 => 041C7E58 60000000
3SJT => 040E290C 60000000
3SJ0 => 040DE6C4 60000000
3SE0 => 040DE6A8 60000000
3SP0 => 040DEAEC 60000000

Make lobby chairs fast (client-side only)
3SE0 => 0457E618 40000000

Enable Pinz's Shop Super Card Capsule Machine as a fourth option
3SE0 => 043101C0 38800004
        04310238 2C1D0004
        04487E8C 000000C8

Change color of pulsing orange text (e.g. card ability names)
3SE0 => 0457EE18 RRRRRRRR  // Phase 1 (long) red component as 32-bit float (0.0-255.0)
        0457EE20 GGGGGGGG  // Phase 1 (long) green component as 32-bit float (0.0-255.0)
        0457EE10 BBBBBBBB  // Phase 1 (long) blue component as 32-bit float (0.0-255.0)
        0457EE1C RRRRRRRR  // Phase 2 (short) red component as 32-bit float (0.0-255.0)
        0457EE24 GGGGGGGG  // Phase 2 (short) green component as 32-bit float (0.0-255.0)
        0457EE14 BBBBBBBB  // Phase 2 (short) blue component as 32-bit float (0.0-255.0)

Change color of pulsing orange text to be random every frame
3SE0 => 04155D78 7CA802A6
        04155D7C 7C661B78
        04155D80 481EF8B1
        04155D84 7C671B78
        04155D88 481EF8A9
        04155D8C 50677822
        04155D90 64E7FF00
        04155D94 90E60024
        04155D98 7CA803A6
        04155D9C 4E800020

Enable color and symbol codes in info board text
Use codes like e.g. $CG to change text colors, as described in CommandFormats.hh
3SE0 => 040F2E80 4BF0D41D
        040F0274 4BF10025
        040EFC58 4BF10641
        04000298 38810008
        0400029C 38C3FFFF
        040002A0 8CA60001
        040002A4 28050024
        040002A8 4082000C
        040002AC 38000009
        040002B0 98060000
        040002B4 28050000
        040002B8 4082FFE8
        040002BC 7C633050
        040002C0 4E800020

Unlock all offline free battle maps
This unlocks ALL maps, including a bunch of maps with garbage names that crash if you try to play them
3SJT => 042BE538 38600001
3SJ0 => 042C9C2C 38600001
3SE0 => 042CAA00 38600001
3SP0 => 042CB50C 38600001

Card auctions accessible with fewer than 4 players
3SJT => 042DD618 38600004
3SJ0 => 042F4F20 38600004
3SE0 => 042F5D88 38600004
3SP0 => 042F698C 38600004

Talk to auction counter offline to get all cards
3SE0 => 042F5D18 4BD160E8
        0400BE00 9421FFE0
        0400BE04 7C0802A6
        0400BE08 90010024
        0400BE0C 93E10010
        0400BE10 93C10014
        0400BE14 93A10018
        0400BE18 9381001C
        0400BE1C 3C60802A
        0400BE20 60631BAC
        0400BE24 7C6903A6
        0400BE28 38600000
        0400BE2C 4E800421
        0400BE30 7C7F1B78
        0400BE34 3C60802A
        0400BE38 606315BC
        0400BE3C 7C6903A6
        0400BE40 7FE3FB78
        0400BE44 4E800421
        0400BE48 3F80802A
        0400BE4C 639C17AC
        0400BE50 3BC00001
        0400BE54 3BA00063
        0400BE58 7FE3FB78
        0400BE5C 7FC4F378
        0400BE60 7F8903A6
        0400BE64 4E800421
        0400BE68 3BBDFFFF
        0400BE6C 281D0000
        0400BE70 4082FFE8
        0400BE74 3BDE0001
        0400BE78 281E02F0
        0400BE7C 4081FFD8
        0400BE80 3C60802A
        0400BE84 6063160C
        0400BE88 7C6903A6
        0400BE8C 7FE3FB78
        0400BE90 4E800421
        0400BE94 83E10010
        0400BE98 83C10014
        0400BE9C 83A10018
        0400BEA0 8381001C
        0400BEA4 80010024
        0400BEA8 38210020
        0400BEAC 7C0803A6
        0400BEB0 482E9FC0

Press L for enemy debug; enable various other debug messages
TODO: Figure out more debug message conditionals (vars/functions) and add them here
3OE1 => 040FD9D8 38600001  # Various enemy debug messages
        00153E53 00000001  # Poison fog debug 1
        00153E4B 00000001  # Poison fog debug 2
        040FDA18 60000000  # TObjRoomId
        025CB6AA 00000000  # disable enemy debug
        4A588EA0 00000040  # if L is held...
        025CB6AA 00000001  # enable enemy debug

Able to find VIP cards offline (but they're still rare)
3SP0 => 042C15DC 4800000C
3SJ0 => 042BFE24 4800000C
3SE0 => 042C0B20 4800000C

Hold L when starting battle to enter debug menu
3SE0 => 042C5460 4BD3AF78
        040003D8 3C60804A
        040003DC 60630518
        040003E0 3C800002
        040003E4 480C9F35
        040003E8 2C030000
        040003EC 4082000C
        040003F0 8801001A
        040003F4 48000008
        040003F8 3800001A
        040003FC 482C5068

Dressing room always accessible
3SJT => 041B2A2C 38600001
3SJ0 => 041A1920 38600001
3SP0 => 041A1C84 38600001
3SE0 => 041A16FC 38600001

Full dressing room v1
Original Ep1&2 code by Ralf @ GC-Forever
Can't change your class, but you start with your existing appearance
Go online with this code on after using the dressing room to fully save changes
3SE0 => 0418EB5C 60000000
        042A0184 389D0370
        042A0188 387E2120

Full dressing room v2
Original Ep1&2 code by Ralf @ GC-Forever
Can change your class, but you start with the default appearance
Go online with this code on after using the dressing room to fully save changes
3SE0 => 04186ECC 4BFFFFD8
        042A0184 389D0370
        042A0188 387E2120

Replace Options menu with debug menu
3SE0 => 04149E70 38600019

Jukebox is free
3SJT => 042248C4 48000024 (useless because the jukebox isn't loaded in NTE, but apparently the code for it exists)
3SJ0 => 0430C178 48000024
3SE0 => 0430D1DC 48000024
3SP0 => 0430DE3C 48000024

Use own character in battle (online only)
3SE0 => 041FFAB0 4800001C
        042A54D8 4BD5B0F9
        04200A34 4BDFFB9D
        041FFA9C 4BE00B35
        040005D0 38600000
        040005D4 3CA08049
        040005D8 80A54160
        040005DC 2805000F
        040005E0 41820008
        040005E4 481E8E24
        040005E8 80ADA448
        040005EC 7C042800
        040005F0 41820008
        040005F4 481E8E14
        040005F8 38600001
        040005FC 4E800020

Disable chat smut filter
3SE0 => 0412FA4C 60000000

Metal tiles don't appear in Simulator (Cyber) map
3SJT => 0428FED8 4E800020
3SJ0 => 04296054 4E800020
3SE0 => 04296904 4E800020
3SP0 => 04297278 4E800020

Enable Boooo and Laughter soundchat sounds
Note: Without a TextEnglish.pr2/pr3 patch, the menu items for these sounds will be blank (but they will still work)
3SE0 => 0430B734 38800029
        0430B770 2C1F0029
        0430B59C 2C030029
        0430B5A8 5460083C
        0430B5B4 7C63022E
        0442B690 80258026
        0442B694 8227852D
        0442B698 80308031
        0442B69C 8A3F8532
        0442B6A0 8A408533
        0442B6A4 8A418A28
        0442B6A8 8A388A29
        0442B6AC 8A39852E
        0442B6B0 802F853D
        0442B6B4 85348535
        0442B6B8 853B8536
        0442B6BC 8537852B
        0442B6C0 853A853C
        0442B6C4 853E8044
        0442B6C8 80458046
        0442B6CC 80478048
        0442B6D0 8049804A
        0442B6D4 804B804C
        0442B6D8 804D804E
        0442B6DC 804F802A
        0442B6E0 802C0000

Use English language files
3OJT => 04189FE8 38000001
        0418A010 38000001
        0418A0A0 38000001
        0418A0C8 38000001
        04189EC4 3BC00001
3SJT => 0408E414 38600001
        0408E448 38000001
        0408E44C 900DA62C
        0408E450 4E800020

Replace all sound effects with specified sound effect
3OE1 => 042256E4 3F40XXXX
        042256E8 635AYYYY
        042256EC 4800000C

Enable seasonal rappies offline (Ep2 only)
X = 1: Saint Rappy
X = 4: Egg Rappy
X = 5: Hallo Rappy
X = anything else: Love Rappy
3OE0 => 040C1658 60000000
        040C165C 3800000X
3OE1 => 040C1658 60000000
        040C165C 3800000X
3OE2 => 040C17F0 60000000
        040C17F4 3800000X
3OJ2 => 040C13B4 60000000
        040C13B8 3800000X
3OJ3 => 040C16B8 60000000
        040C16BC 3800000X
3OJ4 => 040C18EC 60000000
        040C18F0 3800000X
3OJ5 => 040C17E0 60000000
        040C17E4 3800000X
3OP0 => 040C17B8 60000000
        040C17BC 3800000X

Heaven Punisher's special always works
3OJ2 => 0412AB98 38800001
3OJ3 => 0412ADDC 38800001
3OJ4 => 0412AE6C 38800001
3OJ5 => 0412AD74 38800001
3OE0 => 0412AE3C 38800001
3OE1 => 0412AE3C 38800001
3OE2 => 0412AD84 38800001
3OP0 => 0412AF5C 38800001

Fast tekker (skips wind-up jingle)
1OJ1 => 8C15B0CA mov    r1, 1
        8C15B0E6 nop
1OJ2 => 8C162302 mov    r1, 1
        8C16231E nop
1OJ3 => 8C175E66 mov    r1, 1
        8C175E82 nop
1OJ4 => 8C1780AE mov    r1, 1
        8C1780CA nop
1OJF => 8C17600E mov    r1, 1
        8C17602A nop
1OEF => 8C17863E mov    r1, 1
        8C17865A nop
1OPF => 8C1783FA mov    r1, 1
        8C178416 nop
2OJ5 => 8C19BD4A mov    r1, 1
        8C19BD66 nop
2OJF => 8C19ADB6 mov    r1, 1
        8C19ADD2 nop
2OEF => 8C19BD4A mov    r1, 1
        8C19BD66 nop
2OPF => 8C19B7E2 mov    r1, 1
        8C19B7FE nop
2OJW => 005B14A3 mov    dword [ebx + 0x150], 1
        005B14BF jmp    +0x0D
2OJZ => 005B0193 mov    dword [ebx + 0x150], 1
        005B01AF jmp    +0x0D
3OJT => 0426FAE8 38000001
        0426FB10 60000000
3OJ2 => 0421F8CC 38000001
        0421F8F4 60000000
3OJ3 => 04220250 38000001
        04220278 60000000
3OJ4 => 04221154 38000001
        0422117C 60000000
3OJ5 => 04220EF0 38000001
        04220F18 60000000
3OE0 => 04220170 38000001
        04220198 60000000
3OE1 => 04220170 38000001
        04220198 60000000
3OE2 => 04221224 38000001
        0422124C 60000000
3OP0 => 04220ABC 38000001
        04220AE4 60000000
4OED => 0023EF3C mov    dword [ebp + 0x14C], 1
        0023EF57 jmp    +0x0A
4OEU => 0023F0BC mov    dword [ebp + 0x14C], 1
        0023F0D7 jmp    +0x0A
4OJB => 0023EC5C mov    dword [ebp + 0x14C], 1
        0023EC77 jmp    +0x0A
4OJD => 0023EEAC mov    dword [ebp + 0x14C], 1
        0023EEC7 jmp    +0x0A
4OJU => 0023F21C mov    dword [ebp + 0x14C], 1
        0023F237 jmp    +0x0A
4OPD => 0023EF5C mov    dword [ebp + 0x14C], 1
        0023EF77 jmp    +0x0A
4OPU => 0023F14C mov    dword [ebp + 0x14C], 1
        0023F167 jmp    +0x0A
5OYJ => 006D3F7B mov    dword [edi + 0x14C], 1
        006D3F98 jmp    +0x0B
59NJ => 006DA14B mov    dword [edi + 0x14C], 1
        006DA168 jmp    +0x0B
59NL => 006DA113 mov    dword [edi + 0x14C], 1
        006DA130 jmp    +0x0B

Allow loading corrupted save files
3OJ2 => 041FC784 38600007
        041FC788 4E800020
3OJ3 => 041FCF98 38600007
        041FCF9C 4E800020
3OJ4 => 041FDED4 38600007
        041FDED8 4E800020
3OJ5 => 041FD504 38600007
        041FD508 4E800020
3OE0 => 041FCDE8 38600007
        041FCDEC 4E800020
3OE1 => 041FCDE8 38600007
        041FCDEC 4E800020
3OE2 => 041FD770 38600007
        041FD774 4E800020
3OP0 => 041FD66C 38600007
        041FD670 4E800020
3SE0 => 04115244 38600007
        04115248 4E800020
3SJ0 => 041152E8 38600007
        041152EC 4E800020
3SJT => 04117AA0 38600007
        04117AA4 4E800020
3SP0 => 041156D0 38600007
        041156D4 4E800020

60 frames per second
This doesn't adjust any logic or animations; everything just runs faster
3OJT => 043F5AC0 38800001
3OJ2 => 043D8550 38800001
3OJ3 => 043DAF58 38800001
3OJ4 => 043DCDF8 38800001
3OJ5 => 043DCBA8 38800001
3OE0 => 043D9820 38800001
3OE1 => 043D9878 38800001
3OE2 => 043DCF78 38800001
3OP0 => 043DBA68 38800001
3SJT => 043567AC 38800001
3SE0 => 0438A804 38800001
3SJ0 => 043897B4 38800001
3SP0 => 0438B6D4 38800001

Show extended item info when targeting a dropped item
(Compiled from the ExtendedItemInfo patch, also written by me)
3OE1 => 044CB088 00000023
        04262270 4BDA1E15
        04262580 4BDA1AB8
        0426224C 4BDA1DFD
        04262294 4BDA1DC9
        042874C0 4BD7CB50
        04287424 4BD7CBF8
        04004008 41F00000
        0400400C 43480000
        04004010 3C808000
        04004014 90644004
        04004018 4E800020
        0400401C 3C808000
        04004020 80044004
        04004024 7C001840
        04004028 4082000C
        0400402C 38000000
        04004030 90044004
        04004034 4E800020
        04004038 9421FFE0
        0400403C 7C0802A6
        04004040 90010024
        04004044 48000028
        04004048 9421FFE0
        0400404C 7C0802A6
        04004050 90010024
        04004054 4825E0D5
        04004058 48000014
        0400405C 9421FFE0
        04004060 7C0802A6
        04004064 90010024
        04004068 4825DBED
        0400406C 38600000
        04004070 48000049
        04004074 80010024
        04004078 7C0803A6
        0400407C 38210020
        04004080 4E800020
        04004084 9421FFE0
        04004088 7C0802A6
        0400408C 90010024
        04004090 90810008
        04004094 93E1000C
        04004098 4825DF19
        0400409C 80610008
        040040A0 48000019
        040040A4 83E1000C
        040040A8 80010024
        040040AC 38210020
        040040B0 7C0803A6
        040040B4 4E800020
        040040B8 9421FFE0
        040040BC 7C0802A6
        040040C0 90010024
        040040C4 90610008
        040040C8 93E1000C
        040040CC 3FE08000
        040040D0 28030000
        040040D4 41820094
        040040D8 A08300EC
        040040DC 28040103
        040040E0 41820088
        040040E4 28040300
        040040E8 40800080
        040040EC 480155DD
        040040F0 28030000
        040040F4 40820074
        040040F8 3C608000
        040040FC 80634004
        04004100 28030000
        04004104 41820010
        04004108 8063004C
        0400410C 546307FF
        04004110 40820058
        04004114 807F4000
        04004118 28030000
        0400411C 4082002C
        04004120 386000BC
        04004124 48225419
        04004128 907F4000
        0400412C 28030000
        04004130 41820050
        04004134 63E34008
        04004138 7C641B78
        0400413C 807F4000
        04004140 80ADAD80
        04004144 482509B1
        04004148 807F4000
        0400414C 8003002C
        04004150 60000020
        04004154 9003002C
        04004158 80810008
        0400415C 808400D8
        04004160 48250519
        04004164 4800001C
        04004168 807F4000
        0400416C 28030000
        04004170 41820010
        04004174 38000000
        04004178 901F4000
        0400417C 4823F76D
        04004180 83E1000C
        04004184 80010024
        04004188 38210020
        0400418C 7C0803A6
        04004190 4E800020
3OE2 => 044CF6F0 00000023
        04263630 4BDA1A55
        04263940 4BDA16F8
        0426360C 4BDA1A3D
        04263654 4BDA1A09
        0428893C 4BD7C6D4
        042888A0 4BD7C77C
        04005008 41F00000
        0400500C 43480000
        04005010 3C808000
        04005014 90645004
        04005018 4E800020
        0400501C 3C808000
        04005020 80045004
        04005024 7C001840
        04005028 4082000C
        0400502C 38000000
        04005030 90045004
        04005034 4E800020
        04005038 9421FFE0
        0400503C 7C0802A6
        04005040 90010024
        04005044 48000028
        04005048 9421FFE0
        0400504C 7C0802A6
        04005050 90010024
        04005054 4825E495
        04005058 48000014
        0400505C 9421FFE0
        04005060 7C0802A6
        04005064 90010024
        04005068 4825DFAD
        0400506C 38600000
        04005070 48000049
        04005074 80010024
        04005078 7C0803A6
        0400507C 38210020
        04005080 4E800020
        04005084 9421FFE0
        04005088 7C0802A6
        0400508C 90010024
        04005090 90810008
        04005094 93E1000C
        04005098 4825E2D9
        0400509C 80610008
        040050A0 48000019
        040050A4 83E1000C
        040050A8 80010024
        040050AC 38210020
        040050B0 7C0803A6
        040050B4 4E800020
        040050B8 9421FFE0
        040050BC 7C0802A6
        040050C0 90010024
        040050C4 90610008
        040050C8 93E1000C
        040050CC 3FE08000
        040050D0 28030000
        040050D4 41820094
        040050D8 A08300EC
        040050DC 28040103
        040050E0 41820088
        040050E4 28040300
        040050E8 40800080
        040050EC 480145A5
        040050F0 28030000
        040050F4 40820074
        040050F8 3C608000
        040050FC 80635004
        04005100 28030000
        04005104 41820010
        04005108 8063004C
        0400510C 546307FF
        04005110 40820058
        04005114 807F5000
        04005118 28030000
        0400511C 4082002C
        04005120 386000BC
        04005124 482254CD
        04005128 907F5000
        0400512C 28030000
        04005130 41820050
        04005134 63E35008
        04005138 7C641B78
        0400513C 807F5000
        04005140 80ADADA0
        04005144 48250B89
        04005148 807F5000
        0400514C 8003002C
        04005150 60000020
        04005154 9003002C
        04005158 80810008
        0400515C 808400D8
        04005160 482506F1
        04005164 4800001C
        04005168 807F5000
        0400516C 28030000
        04005170 41820010
        04005174 38000000
        04005178 901F5000
        0400517C 4823F899
        04005180 83E1000C
        04005184 80010024
        04005188 38210020
        0400518C 7C0803A6
        04005190 4E800020

All weapons can do 3-hit combos
3OE0 => 041D3248 38000001
3OE1 => 041D3248 38000001
3OE2 => 041D3448 38000001
3OJ2 => 041D2DEC 38000001
3OJ3 => 041D3318 38000001
3OJ4 => 041D3144 38000001
3OJ5 => 041D33E4 38000001
3OP0 => 041D3904 38000001

Disable save file signature validation (for moving Xbox saves across consoles)
4OJB => 002F01CB 9090
4OJD => 002F0CDB 9090
4OJU => 002F22DB 9090
4OED => 002F212B 9090
4OEU => 002F22DB 9090
4OPD => 002F215B 9090
4OPU => 002F234B 9090

Enable UDP test mode online
3OE1 => 041A3D60 38600001

Main warp door opens in Challenge mode
3OE1 => 041820A4 38600001
        041820A8 4E800020

Allow arbitrary tech disk levels
3OE1 => 0410EBE8 60000000
        04100D18 60000000
        041D6C0C 60000000
        041D6C5C 60000000
        0422CB50 60000000
        042CD74C 4E800020

Change particle colors in quest loading screen
3OE1 => 04472C20 AARRGGBB // Default color
        04472C24 AARRGGBB // Color after 1 A press
        04472C28 AARRGGBB // Color after 2 A presses
        04472C2C AARRGGBB // Color after 3 A presses
        04472C30 AARRGGBB // Color after 4 A presses
        04472C34 AARRGGBB // Color after 5 A presses

Floor warp loading screen speed modifier
// XXXX = speed; default is 01B4; 0800 = very fast/wobbly; 0020 = very slow
3OE1 => 0434A350 3863XXXX

Slow Gibbles fix
3OJ2 => 042D6A48 C022FD98
        042D6A6C C022FD98
3OJ3 => 042D7A00 C022FDA0
        042D7A24 C022FDA0
3OJ4 => 042D8B34 C022FDA0
        042D8B58 C022FDA0
3OJ5 => 042D88E0 C022FDA0
        042D8904 C022FDA0
3OE0 => 042D7428 C022FDA8
        042D744C C022FDA8
3OE1 => 042D746C C022FDA8
        042D7490 C022FDA8
3OE2 => 042D8A94 C022FDA8
        042D8AB8 C022FDA8
3OP0 => 042D8228 C022FDA8
        042D824C C022FDA8

Override Challenge mode random enemy location tables limit
2OJ5 => 8C2501B2 XXE5 (count as byte)
2OJF => 8C24E98E XXE5 (count as byte)
2OEF => 8C2501A2 XXE5 (count as byte)
2OPF => 8C244C7E XXE5 (count as byte)
2OJW => 005AA2FE XXXXXXXX (count * 4 as little-endian dword)
        005AA30C XXXXXXXX (count as little-endian dword)
2OJZ => 005A908E XXXXXXXX (count * 4 as little-endian dword)
        005A909D XXXXXXXX (count as little-endian dword)
3OE0 => 04209448 3880XXXX (count as big-endian word)
3OE1 => 04209448 3880XXXX (count as big-endian word)
3OE2 => 0420A330 3880XXXX (count as big-endian word)
3OJ2 => 04208C4C 3880XXXX (count as big-endian word)
3OJ3 => 042094C0 3880XXXX (count as big-endian word)
3OJ4 => 0420A5A8 3880XXXX (count as big-endian word)
3OJ5 => 04209FFC 3880XXXX (count as big-endian word)
3OP0 => 04209D2C 3880XXXX (count as big-endian word)
4OJB => 002E527C XXXXXXXX (count as little-endian dword)
4OJD => 002E5DFC XXXXXXXX (count as little-endian dword)
4OJU => 002E740C XXXXXXXX (count as little-endian dword)
4OED => 002E71DC XXXXXXXX (count as little-endian dword)
4OEU => 002E742C XXXXXXXX (count as little-endian dword)
4OPD => 002E720C XXXXXXXX (count as little-endian dword)
4OPU => 002E745C XXXXXXXX (count as little-endian dword)
5OYJ => 008075C3 XXXXXXXX (count * 4 as little-endian dword)
        008075DC XXXXXXXX (count as little-endian dword)
59NJ => 0080FA3F XXXXXXXX (count * 4 as little-endian dword)
        0080FA58 XXXXXXXX (count as little-endian dword)
59NL => 0080ECB7 XXXXXXXX (count * 4 as little-endian dword)
        0080ECD0 XXXXXXXX (count as little-endian dword)

Disable dust effect in CCA
3OJT => 042F4EE8 48000010
3OJ2 => 04297ECC 48000010
3OJ3 => 04298C94 48000010
3OJ4 => 04299DAC 48000010
3OJ5 => 04299B60 48000010
3OE0 => 042987EC 48000010
3OE1 => 04298830 48000010
3OE2 => 04299D14 48000010
3OP0 => 042994BC 48000010

Inventory debugging code
(makes a copy of player 1's inventory at 8000A04C, updated every frame)
3OE2 => 0400A000 9421FFE0  // stwu    [r1 - 0x20], r1
        0400A004 7C0802A6  // mflr    r0
        0400A008 90010024  // stw     [r1 + 0x24], r0
        0400A00C 3C608051  // lis     r3, 0x8051
        0400A010 8063EA10  // lwz     r3, [r3 - 0x15F0] // r3 = TObjPlayer_objs[0]
        0400A014 3C808000  // lis     r4, 0x8000
        0400A018 6084A050  // ori     r4, r4, 0xA050
        0400A01C 9064FFFC  // stw     [r4 - 4], r3 // 8000A04C = 0 (in case player is null)
        0400A020 28030000  // cmplwi  r3, 0
        0400A024 41820014  // beq     +0x10
        0400A028 481AE2E9  // bl      TObjPlayer_export_inventory // (TObjPlayer_objs[0], 0x8000A050)
        0400A02C 3C808000  // lis     r4, 0x8000
        0400A030 6084A04C  // ori     r4, r4, 0xA04C
        0400A034 90640000  // stw     [r4], r3 // 8000A04C = inventory item count
        0400A038 80010024  // lwz     r0, [r1 + 0x24]
        0400A03C 7C0803A6  // mtlr    r0
        0400A040 38210020  // addi    r1, r1, 0x20
        0400A044 4E800020  // blr
        041A39B8 4BE66648  // b       8000A000 // main_phase_0E_exec_frame return - chain to hook at 8000A000

Load qdefault.bin quest script from disk in offline free play
(Don't use this on a disc image where qdefault.bin doesn't exist; there is a bug in the quest script environment constructor that will leave the current directory set incorrectly if the file doesn't exist, and the game will softlock)
3OE1 => 041A3A30 4BE6656D
        041A3088 4BE66F1D
        04009F9C 38600002
        04009FA0 48000008
        04009FA4 38600000
        04009FA8 7C0802A6
        04009FAC 9421FFE0
        04009FB0 90010024
        04009FB4 90610008
        04009FB8 386001A4
        04009FBC 4821F581
        04009FC0 28030000
        04009FC4 41820018
        04009FC8 808DBD20
        04009FCC 3CA08000
        04009FD0 60A59FF0
        04009FD4 38C00000
        04009FD8 481EC171
        04009FDC 80610008
        04009FE0 80010024
        04009FE4 38210020
        04009FE8 7C0803A6
        04009FEC 4E800020
        04009FF0 71646566
        04009FF4 61756C74
        04009FF8 2E62696E
        04009FFC 00000000
3OE2 => 041A3B5C 4BE66441
        041A31B0 4BE66DF5
        04009F9C 38600002
        04009FA0 48000008
        04009FA4 38600000
        04009FA8 7C0802A6
        04009FAC 9421FFE0
        04009FB0 90010024
        04009FB4 90610008
        04009FB8 386001A4
        04009FBC 48220635
        04009FC0 28030000
        04009FC4 41820018
        04009FC8 808DBD40
        04009FCC 3CA08000
        04009FD0 60A59FF0
        04009FD4 38C00000
        04009FD8 481EC309
        04009FDC 80610008
        04009FE0 80010024
        04009FE4 38210020
        04009FE8 7C0803A6
        04009FEC 4E800020
        04009FF0 71646566
        04009FF4 61756C74
        04009FF8 2E62696E
        04009FFC 00000000

Enable quest board menu in free play (for use with the above code)
3OE0 => 04262B44 38600001
3OE1 => 04262B44 38600001
3OE2 => 04263F04 38600001
3OJ2 => 0426226C 38600001
3OJ3 => 04262E44 38600001
3OJ4 => 04263EB8 38600001
3OP0 => 0426374C 38600001

All classes' footsteps sound like RAcast's
(Change the 2 in 38600002 to 0 for human/Newman, 1 for lighter androids, or 3 if you want to be annoyed)
3OE0 => 041B3ED0 38600002
        041B3ED4 4E800020
3OE1 => 041B3ED0 38600002
        041B3ED4 4E800020
3OE2 => 041B4068 38600002
        041B406C 4E800020
3OJ2 => 041B3AE4 38600002
        041B3AE8 4E800020
3OJ3 => 041B3F38 38600002
        041B3F3C 4E800020
3OJ4 => 041B552C 38600002
        041B5530 4E800020
3OJ5 => 041B4004 38600002
        041B4008 4E800020
3OJT => 0420A120 38600002
        0420A124 4E800020
3OP0 => 041B4524 38600002
        041B4528 4E800020
3SE0 => 040D0378 38600002
        040D037C 4E800020
3SJ0 => 040D0394 38600002
        040D0398 4E800020
3SJT => 040D431C 38600002
        040D4320 4E800020
3SP0 => 040D07BC 38600002
        040D07C0 4E800020

Rappy size modifier
3OE1 => 040C1E24 48000020 // Disable flag check in render
        045D0718 40800000 // X/Z scale as float (here, 4.0)
        045D071C 40800000 // Y scale as float (here, 4.0)

Disable HP reduction warning sound in Challenge mode
3OE1 => 04076A28 4E800020

Mag invincibility effect sparkliness modifier
(Default 003C; smaller values are more sparkly)
3OE1 => 801131C4 3860XXXX
