From 15f923a639118d373f58e644aefde962aea65153 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 8 Feb 2025 14:53:50 -0800 Subject: [PATCH] rewrite palette patch --- .../Palette/Palette.3OE0.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OE1.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OE2.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OJ2.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OJ3.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OJ4.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OJ5.patch.s | 446 ++++++++++-------- .../Palette/Palette.3OP0.patch.s | 446 ++++++++++-------- 8 files changed, 1984 insertions(+), 1584 deletions(-) diff --git a/system/client-functions/Palette/Palette.3OE0.patch.s b/system/client-functions/Palette/Palette.3OE0.patch.s index f959c4d4..e606dca4 100644 --- a/system/client-functions/Palette/Palette.3OE0.patch.s +++ b/system/client-functions/Palette/Palette.3OE0.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB954 # 8000B958 => stw [r13 - 0x46AC], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB938 # 8000B960 => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F095C # 8000B980 => b +0x001F095C /* 801FC2DC */ - .data 0x806DB954 # 8000B984 => lwz r3, [r13 - 0x46AC] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB938 # 8000B98C => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB938 # 8000B9AC => lwz r3, [r13 - 0x46C8] - .data 0x481F416C # 8000B9B0 => b +0x001F416C /* 801FFB1C */ - .data 0x806DB954 # 8000B9B4 => lwz r3, [r13 - 0x46AC] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB938 # 8000B9BC => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F71 # 8000B9D8 => bl +0x00003F70 /* 8000F948 */ - .data 0x481F3658 # 8000B9DC => b +0x001F3658 /* 801FF034 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB7E4 # 8000CA50 => b +0x001CB7E4 /* 801D8234 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF5C0 # 8000CA7C => b +0x001BF5C0 /* 801CC03C */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CAEF4 # 8000CD88 => b +0x001CAEF4 /* 801D7C7C */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x48269FAC # 8000CD9C => b +0x00269FAC /* 80276D48 */ - .data 0x3D808044 # 8000CDA0 => lis r12, 0x8044 - .data 0x618CE5D0 # 8000CDA4 => ori r12, r12, 0xE5D0 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x4823F7D0 # 8000CDCC => b +0x0023F7D0 /* 8024C59C */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x48329974 # 8000CDEC => b +0x00329974 /* 80336760 */ - # region @ 801B59E4 (4 bytes) - .data 0x801B59E4 # address - .data 0x00000004 # size - .data 0x38600000 # 801B59E4 => li r3, 0x0000 - # region @ 801CC038 (4 bytes) - .data 0x801CC038 # address - .data 0x00000004 # size - .data 0x4BE40A1C # 801CC038 => b -0x001BF5E4 /* 8000CA54 */ - # region @ 801D7C78 (4 bytes) - .data 0x801D7C78 # address - .data 0x00000004 # size - .data 0x4BE35088 # 801D7C78 => b -0x001CAF78 /* 8000CD00 */ - # region @ 801D8230 (4 bytes) - .data 0x801D8230 # address - .data 0x00000004 # size - .data 0x4BE34810 # 801D8230 => b -0x001CB7F0 /* 8000CA40 */ - # region @ 801FC2D8 (4 bytes) - .data 0x801FC2D8 # address - .data 0x00000004 # size - .data 0x4BE0F680 # 801FC2D8 => b -0x001F0980 /* 8000B958 */ - # region @ 801FF030 (4 bytes) - .data 0x801FF030 # address - .data 0x00000004 # size - .data 0x4BE0C984 # 801FF030 => b -0x001F367C /* 8000B9B4 */ - # region @ 801FFB18 (4 bytes) - .data 0x801FFB18 # address - .data 0x00000004 # size - .data 0x4BE0BE6C # 801FFB18 => b -0x001F4194 /* 8000B984 */ - # region @ 802473F4 (8 bytes) - .data 0x802473F4 # address - .data 0x00000008 # size - .data 0xA01F004A # 802473F4 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 802473F8 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024C598 (4 bytes) - .data 0x8024C598 # address - .data 0x00000004 # size - .data 0x4BDC0808 # 8024C598 => b -0x0023F7F8 /* 8000CDA0 */ - # region @ 802766F8 (4 bytes) - .data 0x802766F8 # address - .data 0x00000004 # size - .data 0x3803BAA0 # 802766F8 => subi r0, r3, 0x4560 - # region @ 80276D44 (4 bytes) - .data 0x80276D44 # address - .data 0x00000004 # size - .data 0x4BD96048 # 80276D44 => b -0x00269FB8 /* 8000CD8C */ - # region @ 80276DA4 (8 bytes) - .data 0x80276DA4 # address - .data 0x00000008 # size - .data 0xA01F004A # 80276DA4 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80276DA8 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8033675C (4 bytes) - .data 0x8033675C # address - .data 0x00000004 # size - .data 0x4BCD6674 # 8033675C => b -0x0032998C /* 8000CDD0 */ - # region @ 8044BB3C (52 bytes) - .data 0x8044BB3C # address - .data 0x00000034 # size - .data 0x0004000D # 8044BB3C => .invalid - .data 0x0004000E # 8044BB40 => .invalid - .data 0x00000000 # 8044BB44 => .invalid - .data 0x0004000F # 8044BB48 => .invalid - .data 0x00040010 # 8044BB4C => .invalid - .data 0x00000000 # 8044BB50 => .invalid - .data 0x00050000 # 8044BB54 => .invalid - .data 0x00050001 # 8044BB58 => .invalid - .data 0x00050002 # 8044BB5C => .invalid - .data 0x00050003 # 8044BB60 => .invalid - .data 0x00050004 # 8044BB64 => .invalid - .data 0x00050005 # 8044BB68 => .invalid - .data 0x00080000 # 8044BB6C => .invalid - # region @ 8046DC5C (4 bytes) - .data 0x8046DC5C # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 8046DC5C => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F948 + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x46AC], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x46AC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x46AC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF034] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x6C4C] # D-pad version: lhz r0, [r3 - 0x6C4A] + lhz r5, [r3 - 0x6C50] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xA858 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B59E4 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B59E4 + li r3, 0x0000 + + .data 0x801D8230 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D8230 + bl full_action_list_hook1 + .data 0x801CC038 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC038 + bl full_action_list_hook2 + + .data 0x801FC2D8 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FC2D8 + bl save_to_memcard_hook1 + .data 0x801FFB14 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FFB14 + bl save_to_memcard_hook2 + .data 0x801FF030 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF030 + b save_to_memcard_hook3 + + .data 0x801D7A78 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7A78 + bl four_palettes_hook1 + .data 0x802758C8 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x802758C8 + bl four_palettes_hook2 + .data 0x8024B440 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024B440 + b four_palettes_hook3 + .data 0x80334C3C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80334C3C + bl four_palettes_hook4 + + .data 0x802462C8 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x802462C8 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80275928 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80275928 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x802766F8 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x802766F8 + subi r0, r3, 0x07E8 + + .data 0x8044BB3C # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x8046DC5C # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OE1.patch.s b/system/client-functions/Palette/Palette.3OE1.patch.s index 6d418bf0..e8f7c6f8 100644 --- a/system/client-functions/Palette/Palette.3OE1.patch.s +++ b/system/client-functions/Palette/Palette.3OE1.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB954 # 8000B958 => stw [r13 - 0x46AC], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB938 # 8000B960 => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F095C # 8000B980 => b +0x001F095C /* 801FC2DC */ - .data 0x806DB954 # 8000B984 => lwz r3, [r13 - 0x46AC] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB938 # 8000B98C => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB938 # 8000B9AC => lwz r3, [r13 - 0x46C8] - .data 0x481F416C # 8000B9B0 => b +0x001F416C /* 801FFB1C */ - .data 0x806DB954 # 8000B9B4 => lwz r3, [r13 - 0x46AC] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB938 # 8000B9BC => lwz r4, [r13 - 0x46C8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F71 # 8000B9D8 => bl +0x00003F70 /* 8000F948 */ - .data 0x481F3658 # 8000B9DC => b +0x001F3658 /* 801FF034 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB7E4 # 8000CA50 => b +0x001CB7E4 /* 801D8234 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF5C0 # 8000CA7C => b +0x001BF5C0 /* 801CC03C */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CAEF4 # 8000CD88 => b +0x001CAEF4 /* 801D7C7C */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x48269FF0 # 8000CD9C => b +0x00269FF0 /* 80276D8C */ - .data 0x3D808044 # 8000CDA0 => lis r12, 0x8044 - .data 0x618CEA50 # 8000CDA4 => ori r12, r12, 0xEA50 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x4823F7D0 # 8000CDCC => b +0x0023F7D0 /* 8024C59C */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x483299B8 # 8000CDEC => b +0x003299B8 /* 803367A4 */ - # region @ 801B59E4 (4 bytes) - .data 0x801B59E4 # address - .data 0x00000004 # size - .data 0x38600000 # 801B59E4 => li r3, 0x0000 - # region @ 801CC038 (4 bytes) - .data 0x801CC038 # address - .data 0x00000004 # size - .data 0x4BE40A1C # 801CC038 => b -0x001BF5E4 /* 8000CA54 */ - # region @ 801D7C78 (4 bytes) - .data 0x801D7C78 # address - .data 0x00000004 # size - .data 0x4BE35088 # 801D7C78 => b -0x001CAF78 /* 8000CD00 */ - # region @ 801D8230 (4 bytes) - .data 0x801D8230 # address - .data 0x00000004 # size - .data 0x4BE34810 # 801D8230 => b -0x001CB7F0 /* 8000CA40 */ - # region @ 801FC2D8 (4 bytes) - .data 0x801FC2D8 # address - .data 0x00000004 # size - .data 0x4BE0F680 # 801FC2D8 => b -0x001F0980 /* 8000B958 */ - # region @ 801FF030 (4 bytes) - .data 0x801FF030 # address - .data 0x00000004 # size - .data 0x4BE0C984 # 801FF030 => b -0x001F367C /* 8000B9B4 */ - # region @ 801FFB18 (4 bytes) - .data 0x801FFB18 # address - .data 0x00000004 # size - .data 0x4BE0BE6C # 801FFB18 => b -0x001F4194 /* 8000B984 */ - # region @ 802473F4 (8 bytes) - .data 0x802473F4 # address - .data 0x00000008 # size - .data 0xA01F004A # 802473F4 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 802473F8 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024C598 (4 bytes) - .data 0x8024C598 # address - .data 0x00000004 # size - .data 0x4BDC0808 # 8024C598 => b -0x0023F7F8 /* 8000CDA0 */ - # region @ 8027673C (4 bytes) - .data 0x8027673C # address - .data 0x00000004 # size - .data 0x3803BAA0 # 8027673C => subi r0, r3, 0x4560 - # region @ 80276D88 (4 bytes) - .data 0x80276D88 # address - .data 0x00000004 # size - .data 0x4BD96004 # 80276D88 => b -0x00269FFC /* 8000CD8C */ - # region @ 80276DE8 (8 bytes) - .data 0x80276DE8 # address - .data 0x00000008 # size - .data 0xA01F004A # 80276DE8 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80276DEC => rlwinm. r3, r0, 0, 24, 27 - # region @ 803367A0 (4 bytes) - .data 0x803367A0 # address - .data 0x00000004 # size - .data 0x4BCD6630 # 803367A0 => b -0x003299D0 /* 8000CDD0 */ - # region @ 8044BFBC (52 bytes) - .data 0x8044BFBC # address - .data 0x00000034 # size - .data 0x0004000D # 8044BFBC => .invalid - .data 0x0004000E # 8044BFC0 => .invalid - .data 0x00000000 # 8044BFC4 => .invalid - .data 0x0004000F # 8044BFC8 => .invalid - .data 0x00040010 # 8044BFCC => .invalid - .data 0x00000000 # 8044BFD0 => .invalid - .data 0x00050000 # 8044BFD4 => .invalid - .data 0x00050001 # 8044BFD8 => .invalid - .data 0x00050002 # 8044BFDC => .invalid - .data 0x00050003 # 8044BFE0 => .invalid - .data 0x00050004 # 8044BFE4 => .invalid - .data 0x00050005 # 8044BFE8 => .invalid - .data 0x00080000 # 8044BFEC => .invalid - # region @ 8046E0DC (4 bytes) - .data 0x8046E0DC # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 8046E0DC => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F948 + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x46AC], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x46AC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x46AC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46C8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF034] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x676C] # D-pad version: lhz r0, [r3 - 0x676A] + lhz r5, [r3 - 0x6770] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xACD8 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B59E4 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B59E4 + li r3, 0x0000 + + .data 0x801D8230 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D8230 + bl full_action_list_hook1 + .data 0x801CC038 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC038 + bl full_action_list_hook2 + + .data 0x801FC2D8 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FC2D8 + bl save_to_memcard_hook1 + .data 0x801FFB14 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FFB14 + bl save_to_memcard_hook2 + .data 0x801FF030 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF030 + b save_to_memcard_hook3 + + .data 0x801D7A78 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7A78 + bl four_palettes_hook1 + .data 0x8027590C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8027590C + bl four_palettes_hook2 + .data 0x8024B440 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024B440 + b four_palettes_hook3 + .data 0x80334C80 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80334C80 + bl four_palettes_hook4 + + .data 0x802462C8 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x802462C8 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x8027596C # Have Four Action Button Palettes + .data 0x00000008 + .address 0x8027596C + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x8027673C # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x8027673C + subi r0, r3, 0x07E8 + + .data 0x8044BFBC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x8046E0DC # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OE2.patch.s b/system/client-functions/Palette/Palette.3OE2.patch.s index 0782f061..e24acba3 100644 --- a/system/client-functions/Palette/Palette.3OE2.patch.s +++ b/system/client-functions/Palette/Palette.3OE2.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB974 # 8000B958 => stw [r13 - 0x468C], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB958 # 8000B960 => lwz r4, [r13 - 0x46A8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F11DC # 8000B980 => b +0x001F11DC /* 801FCB5C */ - .data 0x806DB974 # 8000B984 => lwz r3, [r13 - 0x468C] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB958 # 8000B98C => lwz r4, [r13 - 0x46A8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB958 # 8000B9AC => lwz r3, [r13 - 0x46A8] - .data 0x481F4AE4 # 8000B9B0 => b +0x001F4AE4 /* 80200494 */ - .data 0x806DB974 # 8000B9B4 => lwz r3, [r13 - 0x468C] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB958 # 8000B9BC => lwz r4, [r13 - 0x46A8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F25 # 8000B9D8 => bl +0x00003F24 /* 8000F8FC */ - .data 0x481F3FA0 # 8000B9DC => b +0x001F3FA0 /* 801FF97C */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB9E4 # 8000CA50 => b +0x001CB9E4 /* 801D8434 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF7C0 # 8000CA7C => b +0x001BF7C0 /* 801CC23C */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CB0F4 # 8000CD88 => b +0x001CB0F4 /* 801D7E7C */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x4826B428 # 8000CD9C => b +0x0026B428 /* 802781C4 */ - .data 0x3D808045 # 8000CDA0 => lis r12, 0x8045 - .data 0x618C2440 # 8000CDA4 => ori r12, r12, 0x2440 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x4824094C # 8000CDCC => b +0x0024094C /* 8024D718 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x4832B494 # 8000CDEC => b +0x0032B494 /* 80338280 */ - # region @ 801B5B7C (4 bytes) - .data 0x801B5B7C # address - .data 0x00000004 # size - .data 0x38600000 # 801B5B7C => li r3, 0x0000 - # region @ 801CC238 (4 bytes) - .data 0x801CC238 # address - .data 0x00000004 # size - .data 0x4BE4081C # 801CC238 => b -0x001BF7E4 /* 8000CA54 */ - # region @ 801D7E78 (4 bytes) - .data 0x801D7E78 # address - .data 0x00000004 # size - .data 0x4BE34E88 # 801D7E78 => b -0x001CB178 /* 8000CD00 */ - # region @ 801D8430 (4 bytes) - .data 0x801D8430 # address - .data 0x00000004 # size - .data 0x4BE34610 # 801D8430 => b -0x001CB9F0 /* 8000CA40 */ - # region @ 801FCB58 (4 bytes) - .data 0x801FCB58 # address - .data 0x00000004 # size - .data 0x4BE0EE00 # 801FCB58 => b -0x001F1200 /* 8000B958 */ - # region @ 801FF978 (4 bytes) - .data 0x801FF978 # address - .data 0x00000004 # size - .data 0x4BE0C03C # 801FF978 => b -0x001F3FC4 /* 8000B9B4 */ - # region @ 80200490 (4 bytes) - .data 0x80200490 # address - .data 0x00000004 # size - .data 0x4BE0B4F4 # 80200490 => b -0x001F4B0C /* 8000B984 */ - # region @ 80248520 (8 bytes) - .data 0x80248520 # address - .data 0x00000008 # size - .data 0xA01F004A # 80248520 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80248524 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024D714 (4 bytes) - .data 0x8024D714 # address - .data 0x00000004 # size - .data 0x4BDBF68C # 8024D714 => b -0x00240974 /* 8000CDA0 */ - # region @ 80277B74 (4 bytes) - .data 0x80277B74 # address - .data 0x00000004 # size - .data 0x3803BAA0 # 80277B74 => subi r0, r3, 0x4560 - # region @ 802781C0 (4 bytes) - .data 0x802781C0 # address - .data 0x00000004 # size - .data 0x4BD94BCC # 802781C0 => b -0x0026B434 /* 8000CD8C */ - # region @ 80278220 (8 bytes) - .data 0x80278220 # address - .data 0x00000008 # size - .data 0xA01F004A # 80278220 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80278224 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8033827C (4 bytes) - .data 0x8033827C # address - .data 0x00000004 # size - .data 0x4BCD4B54 # 8033827C => b -0x0032B4AC /* 8000CDD0 */ - # region @ 8044F8B4 (52 bytes) - .data 0x8044F8B4 # address - .data 0x00000034 # size - .data 0x0004000D # 8044F8B4 => .invalid - .data 0x0004000E # 8044F8B8 => .invalid - .data 0x00000000 # 8044F8BC => .invalid - .data 0x0004000F # 8044F8C0 => .invalid - .data 0x00040010 # 8044F8C4 => .invalid - .data 0x00000000 # 8044F8C8 => .invalid - .data 0x00050000 # 8044F8CC => .invalid - .data 0x00050001 # 8044F8D0 => .invalid - .data 0x00050002 # 8044F8D4 => .invalid - .data 0x00050003 # 8044F8D8 => .invalid - .data 0x00050004 # 8044F8DC => .invalid - .data 0x00050005 # 8044F8E0 => .invalid - .data 0x00080000 # 8044F8E4 => .invalid - # region @ 80471ACC (4 bytes) - .data 0x80471ACC # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 80471ACC => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F8FC + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x468C], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46A8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x468C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46A8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x468C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46A8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF97C] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x1D8C] # D-pad version: lhz r0, [r3 - 0x1D8A] + lhz r5, [r3 - 0x1D90] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xE5D0 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B5B7C # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B5B7C + li r3, 0x0000 + + .data 0x801D8430 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D8430 + bl full_action_list_hook1 + .data 0x801CC238 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC238 + bl full_action_list_hook2 + + .data 0x801FCB58 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FCB58 + bl save_to_memcard_hook1 + .data 0x8020048C # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x8020048C + bl save_to_memcard_hook2 + .data 0x801FF978 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF978 + b save_to_memcard_hook3 + + .data 0x801D7C78 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7C78 + bl four_palettes_hook1 + .data 0x80276D44 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80276D44 + bl four_palettes_hook2 + .data 0x8024C59C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024C59C + b four_palettes_hook3 + .data 0x8033675C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8033675C + bl four_palettes_hook4 + + .data 0x802473F4 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x802473F4 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80276DA4 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80276DA4 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80277B74 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x80277B74 + subi r0, r3, 0x07E8 + + .data 0x8044F8B4 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x80471ACC # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OJ2.patch.s b/system/client-functions/Palette/Palette.3OJ2.patch.s index be3b8a8c..00357d83 100644 --- a/system/client-functions/Palette/Palette.3OJ2.patch.s +++ b/system/client-functions/Palette/Palette.3OJ2.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB93C # 8000B958 => stw [r13 - 0x46C4], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB920 # 8000B960 => lwz r4, [r13 - 0x46E0] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F02F8 # 8000B980 => b +0x001F02F8 /* 801FBC78 */ - .data 0x806DB93C # 8000B984 => lwz r3, [r13 - 0x46C4] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB920 # 8000B98C => lwz r4, [r13 - 0x46E0] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB920 # 8000B9AC => lwz r3, [r13 - 0x46E0] - .data 0x481F3970 # 8000B9B0 => b +0x001F3970 /* 801FF320 */ - .data 0x806DB93C # 8000B9B4 => lwz r3, [r13 - 0x46C4] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB920 # 8000B9BC => lwz r4, [r13 - 0x46E0] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F71 # 8000B9D8 => bl +0x00003F70 /* 8000F948 */ - .data 0x481F2E5C # 8000B9DC => b +0x001F2E5C /* 801FE838 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB3AC # 8000CA50 => b +0x001CB3AC /* 801D7DFC */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF1A4 # 8000CA7C => b +0x001BF1A4 /* 801CBC20 */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CAABC # 8000CD88 => b +0x001CAABC /* 801D7844 */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x48269718 # 8000CD9C => b +0x00269718 /* 802764B4 */ - .data 0x3D808044 # 8000CDA0 => lis r12, 0x8044 - .data 0x618CD840 # 8000CDA4 => ori r12, r12, 0xD840 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x4823EF48 # 8000CDCC => b +0x0023EF48 /* 8024BD14 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x48328F74 # 8000CDEC => b +0x00328F74 /* 80335D60 */ - # region @ 801B55F8 (4 bytes) - .data 0x801B55F8 # address - .data 0x00000004 # size - .data 0x38600000 # 801B55F8 => li r3, 0x0000 - # region @ 801CBC1C (4 bytes) - .data 0x801CBC1C # address - .data 0x00000004 # size - .data 0x4BE40E38 # 801CBC1C => b -0x001BF1C8 /* 8000CA54 */ - # region @ 801D7840 (4 bytes) - .data 0x801D7840 # address - .data 0x00000004 # size - .data 0x4BE354C0 # 801D7840 => b -0x001CAB40 /* 8000CD00 */ - # region @ 801D7DF8 (4 bytes) - .data 0x801D7DF8 # address - .data 0x00000004 # size - .data 0x4BE34C48 # 801D7DF8 => b -0x001CB3B8 /* 8000CA40 */ - # region @ 801FBC74 (4 bytes) - .data 0x801FBC74 # address - .data 0x00000004 # size - .data 0x4BE0FCE4 # 801FBC74 => b -0x001F031C /* 8000B958 */ - # region @ 801FE834 (4 bytes) - .data 0x801FE834 # address - .data 0x00000004 # size - .data 0x4BE0D180 # 801FE834 => b -0x001F2E80 /* 8000B9B4 */ - # region @ 801FF31C (4 bytes) - .data 0x801FF31C # address - .data 0x00000004 # size - .data 0x4BE0C668 # 801FF31C => b -0x001F3998 /* 8000B984 */ - # region @ 80246BA8 (8 bytes) - .data 0x80246BA8 # address - .data 0x00000008 # size - .data 0xA01F004A # 80246BA8 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80246BAC => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024BD10 (4 bytes) - .data 0x8024BD10 # address - .data 0x00000004 # size - .data 0x4BDC1090 # 8024BD10 => b -0x0023EF70 /* 8000CDA0 */ - # region @ 80275E64 (4 bytes) - .data 0x80275E64 # address - .data 0x00000004 # size - .data 0x3803BAA0 # 80275E64 => subi r0, r3, 0x4560 - # region @ 802764B0 (4 bytes) - .data 0x802764B0 # address - .data 0x00000004 # size - .data 0x4BD968DC # 802764B0 => b -0x00269724 /* 8000CD8C */ - # region @ 80276510 (8 bytes) - .data 0x80276510 # address - .data 0x00000008 # size - .data 0xA01F004A # 80276510 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80276514 => rlwinm. r3, r0, 0, 24, 27 - # region @ 80335D5C (4 bytes) - .data 0x80335D5C # address - .data 0x00000004 # size - .data 0x4BCD7074 # 80335D5C => b -0x00328F8C /* 8000CDD0 */ - # region @ 8044ADAC (52 bytes) - .data 0x8044ADAC # address - .data 0x00000034 # size - .data 0x0004000D # 8044ADAC => .invalid - .data 0x0004000E # 8044ADB0 => .invalid - .data 0x00000000 # 8044ADB4 => .invalid - .data 0x0004000F # 8044ADB8 => .invalid - .data 0x00040010 # 8044ADBC => .invalid - .data 0x00000000 # 8044ADC0 => .invalid - .data 0x00050000 # 8044ADC4 => .invalid - .data 0x00050001 # 8044ADC8 => .invalid - .data 0x00050002 # 8044ADCC => .invalid - .data 0x00050003 # 8044ADD0 => .invalid - .data 0x00050004 # 8044ADD4 => .invalid - .data 0x00050005 # 8044ADD8 => .invalid - .data 0x00080000 # 8044ADDC => .invalid - # region @ 8046CECC (4 bytes) - .data 0x8046CECC # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 8046CECC => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F948 + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x46C4], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46E0] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x46C4] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46E0] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x46C4] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46E0] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FE838] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x752C] # D-pad version: lhz r0, [r3 - 0x752A] + lhz r5, [r3 - 0x7530] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0x9AB8 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B55F8 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B55F8 + li r3, 0x0000 + + .data 0x801D7DF8 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D7DF8 + bl full_action_list_hook1 + .data 0x801CBC1C # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CBC1C + bl full_action_list_hook2 + + .data 0x801FBC74 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FBC74 + bl save_to_memcard_hook1 + .data 0x801FF318 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF318 + bl save_to_memcard_hook2 + .data 0x801FE834 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FE834 + b save_to_memcard_hook3 + + .data 0x801D7640 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7640 + bl four_palettes_hook1 + .data 0x80275034 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80275034 + bl four_palettes_hook2 + .data 0x8024ABB8 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024ABB8 + b four_palettes_hook3 + .data 0x8033424C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8033424C + bl four_palettes_hook4 + + .data 0x80245A7C # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80245A7C + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80275094 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80275094 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80275E64 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x80275E64 + subi r0, r3, 0x07E8 + + .data 0x8044ADAC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x8046CECC # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OJ3.patch.s b/system/client-functions/Palette/Palette.3OJ3.patch.s index 9297b0ef..c666ba44 100644 --- a/system/client-functions/Palette/Palette.3OJ3.patch.s +++ b/system/client-functions/Palette/Palette.3OJ3.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB944 # 8000B958 => stw [r13 - 0x46BC], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB928 # 8000B960 => lwz r4, [r13 - 0x46D8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F0A04 # 8000B980 => b +0x001F0A04 /* 801FC384 */ - .data 0x806DB944 # 8000B984 => lwz r3, [r13 - 0x46BC] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB928 # 8000B98C => lwz r4, [r13 - 0x46D8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB928 # 8000B9AC => lwz r3, [r13 - 0x46D8] - .data 0x481F41E4 # 8000B9B0 => b +0x001F41E4 /* 801FFB94 */ - .data 0x806DB944 # 8000B9B4 => lwz r3, [r13 - 0x46BC] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB928 # 8000B9BC => lwz r4, [r13 - 0x46D8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F75 # 8000B9D8 => bl +0x00003F74 /* 8000F94C */ - .data 0x481F36D0 # 8000B9DC => b +0x001F36D0 /* 801FF0AC */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB8B4 # 8000CA50 => b +0x001CB8B4 /* 801D8304 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF690 # 8000CA7C => b +0x001BF690 /* 801CC10C */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CAFC4 # 8000CD88 => b +0x001CAFC4 /* 801D7D4C */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x4826A454 # 8000CD9C => b +0x0026A454 /* 802771F0 */ - .data 0x3D808045 # 8000CDA0 => lis r12, 0x8045 - .data 0x618C0660 # 8000CDA4 => ori r12, r12, 0x0660 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x4823F994 # 8000CDCC => b +0x0023F994 /* 8024C760 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x48329FF0 # 8000CDEC => b +0x00329FF0 /* 80336DDC */ - # region @ 801B5A4C (4 bytes) - .data 0x801B5A4C # address - .data 0x00000004 # size - .data 0x38600000 # 801B5A4C => li r3, 0x0000 - # region @ 801CC108 (4 bytes) - .data 0x801CC108 # address - .data 0x00000004 # size - .data 0x4BE4094C # 801CC108 => b -0x001BF6B4 /* 8000CA54 */ - # region @ 801D7D48 (4 bytes) - .data 0x801D7D48 # address - .data 0x00000004 # size - .data 0x4BE34FB8 # 801D7D48 => b -0x001CB048 /* 8000CD00 */ - # region @ 801D8300 (4 bytes) - .data 0x801D8300 # address - .data 0x00000004 # size - .data 0x4BE34740 # 801D8300 => b -0x001CB8C0 /* 8000CA40 */ - # region @ 801FC380 (4 bytes) - .data 0x801FC380 # address - .data 0x00000004 # size - .data 0x4BE0F5D8 # 801FC380 => b -0x001F0A28 /* 8000B958 */ - # region @ 801FF0A8 (4 bytes) - .data 0x801FF0A8 # address - .data 0x00000004 # size - .data 0x4BE0C90C # 801FF0A8 => b -0x001F36F4 /* 8000B9B4 */ - # region @ 801FFB90 (4 bytes) - .data 0x801FFB90 # address - .data 0x00000004 # size - .data 0x4BE0BDF4 # 801FFB90 => b -0x001F420C /* 8000B984 */ - # region @ 80247568 (8 bytes) - .data 0x80247568 # address - .data 0x00000008 # size - .data 0xA01F004A # 80247568 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 8024756C => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024C75C (4 bytes) - .data 0x8024C75C # address - .data 0x00000004 # size - .data 0x4BDC0644 # 8024C75C => b -0x0023F9BC /* 8000CDA0 */ - # region @ 80276BA0 (4 bytes) - .data 0x80276BA0 # address - .data 0x00000004 # size - .data 0x3803BAA0 # 80276BA0 => subi r0, r3, 0x4560 - # region @ 802771EC (4 bytes) - .data 0x802771EC # address - .data 0x00000004 # size - .data 0x4BD95BA0 # 802771EC => b -0x0026A460 /* 8000CD8C */ - # region @ 8027724C (8 bytes) - .data 0x8027724C # address - .data 0x00000008 # size - .data 0xA01F004A # 8027724C => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80277250 => rlwinm. r3, r0, 0, 24, 27 - # region @ 80336DD8 (4 bytes) - .data 0x80336DD8 # address - .data 0x00000004 # size - .data 0x4BCD5FF8 # 80336DD8 => b -0x0032A008 /* 8000CDD0 */ - # region @ 8044DBCC (52 bytes) - .data 0x8044DBCC # address - .data 0x00000034 # size - .data 0x0004000D # 8044DBCC => .invalid - .data 0x0004000E # 8044DBD0 => .invalid - .data 0x00000000 # 8044DBD4 => .invalid - .data 0x0004000F # 8044DBD8 => .invalid - .data 0x00040010 # 8044DBDC => .invalid - .data 0x00000000 # 8044DBE0 => .invalid - .data 0x00050000 # 8044DBE4 => .invalid - .data 0x00050001 # 8044DBE8 => .invalid - .data 0x00050002 # 8044DBEC => .invalid - .data 0x00050003 # 8044DBF0 => .invalid - .data 0x00050004 # 8044DBF4 => .invalid - .data 0x00050005 # 8044DBF8 => .invalid - .data 0x00080000 # 8044DBFC => .invalid - # region @ 8046FCEC (4 bytes) - .data 0x8046FCEC # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 8046FCEC => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F94C + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x46BC], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46D8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x46BC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46D8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x46BC] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46D8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF0AC] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x3A6C] # D-pad version: lhz r0, [r3 - 0x3A6A] + lhz r5, [r3 - 0x3A70] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xC8D8 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B5A4C # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B5A4C + li r3, 0x0000 + + .data 0x801D8300 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D8300 + bl full_action_list_hook1 + .data 0x801CC108 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC108 + bl full_action_list_hook2 + + .data 0x801FC380 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FC380 + bl save_to_memcard_hook1 + .data 0x801FFB8C # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FFB8C + bl save_to_memcard_hook2 + .data 0x801FF0A8 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF0A8 + b save_to_memcard_hook3 + + .data 0x801D7B48 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7B48 + bl four_palettes_hook1 + .data 0x80275D70 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80275D70 + bl four_palettes_hook2 + .data 0x8024B5E4 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024B5E4 + b four_palettes_hook3 + .data 0x803352B8 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x803352B8 + bl four_palettes_hook4 + + .data 0x8024643C # Have Four Action Button Palettes + .data 0x00000008 + .address 0x8024643C + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80275DD0 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80275DD0 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80276BA0 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x80276BA0 + subi r0, r3, 0x07E8 + + .data 0x8044DBCC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x8046FCEC # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OJ4.patch.s b/system/client-functions/Palette/Palette.3OJ4.patch.s index d4e75f82..751123f7 100644 --- a/system/client-functions/Palette/Palette.3OJ4.patch.s +++ b/system/client-functions/Palette/Palette.3OJ4.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB964 # 8000B958 => stw [r13 - 0x469C], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB948 # 8000B960 => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F18EC # 8000B980 => b +0x001F18EC /* 801FD26C */ - .data 0x806DB964 # 8000B984 => lwz r3, [r13 - 0x469C] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB948 # 8000B98C => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB948 # 8000B9AC => lwz r3, [r13 - 0x46B8] - .data 0x481F51E0 # 8000B9B0 => b +0x001F51E0 /* 80200B90 */ - .data 0x806DB964 # 8000B9B4 => lwz r3, [r13 - 0x469C] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB948 # 8000B9BC => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F75 # 8000B9D8 => bl +0x00003F74 /* 8000F94C */ - .data 0x481F4668 # 8000B9DC => b +0x001F4668 /* 80200044 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CBA70 # 8000CA50 => b +0x001CBA70 /* 801D84C0 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481C0B84 # 8000CA7C => b +0x001C0B84 /* 801CD600 */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CB180 # 8000CD88 => b +0x001CB180 /* 801D7F08 */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x4826B4C0 # 8000CD9C => b +0x0026B4C0 /* 8027825C */ - .data 0x3D808045 # 8000CDA0 => lis r12, 0x8045 - .data 0x618C27C0 # 8000CDA4 => ori r12, r12, 0x27C0 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x482408D4 # 8000CDCC => b +0x002408D4 /* 8024D6A0 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x4832B50C # 8000CDEC => b +0x0032B50C /* 803382F8 */ - # region @ 801B7BB8 (4 bytes) - .data 0x801B7BB8 # address - .data 0x00000004 # size - .data 0x38600000 # 801B7BB8 => li r3, 0x0000 - # region @ 801CD5FC (4 bytes) - .data 0x801CD5FC # address - .data 0x00000004 # size - .data 0x4BE3F458 # 801CD5FC => b -0x001C0BA8 /* 8000CA54 */ - # region @ 801D7F04 (4 bytes) - .data 0x801D7F04 # address - .data 0x00000004 # size - .data 0x4BE34DFC # 801D7F04 => b -0x001CB204 /* 8000CD00 */ - # region @ 801D84BC (4 bytes) - .data 0x801D84BC # address - .data 0x00000004 # size - .data 0x4BE34584 # 801D84BC => b -0x001CBA7C /* 8000CA40 */ - # region @ 801FD268 (4 bytes) - .data 0x801FD268 # address - .data 0x00000004 # size - .data 0x4BE0E6F0 # 801FD268 => b -0x001F1910 /* 8000B958 */ - # region @ 80200040 (4 bytes) - .data 0x80200040 # address - .data 0x00000004 # size - .data 0x4BE0B974 # 80200040 => b -0x001F468C /* 8000B9B4 */ - # region @ 80200B8C (4 bytes) - .data 0x80200B8C # address - .data 0x00000004 # size - .data 0x4BE0ADF8 # 80200B8C => b -0x001F5208 /* 8000B984 */ - # region @ 802484A8 (8 bytes) - .data 0x802484A8 # address - .data 0x00000008 # size - .data 0xA01F004A # 802484A8 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 802484AC => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024D69C (4 bytes) - .data 0x8024D69C # address - .data 0x00000004 # size - .data 0x4BDBF704 # 8024D69C => b -0x002408FC /* 8000CDA0 */ - # region @ 80277C0C (4 bytes) - .data 0x80277C0C # address - .data 0x00000004 # size - .data 0x3803BAA0 # 80277C0C => subi r0, r3, 0x4560 - # region @ 80278258 (4 bytes) - .data 0x80278258 # address - .data 0x00000004 # size - .data 0x4BD94B34 # 80278258 => b -0x0026B4CC /* 8000CD8C */ - # region @ 802782B8 (8 bytes) - .data 0x802782B8 # address - .data 0x00000008 # size - .data 0xA01F004A # 802782B8 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 802782BC => rlwinm. r3, r0, 0, 24, 27 - # region @ 803382F4 (4 bytes) - .data 0x803382F4 # address - .data 0x00000004 # size - .data 0x4BCD4ADC # 803382F4 => b -0x0032B524 /* 8000CDD0 */ - # region @ 8044FC34 (52 bytes) - .data 0x8044FC34 # address - .data 0x00000034 # size - .data 0x0004000D # 8044FC34 => .invalid - .data 0x0004000E # 8044FC38 => .invalid - .data 0x00000000 # 8044FC3C => .invalid - .data 0x0004000F # 8044FC40 => .invalid - .data 0x00040010 # 8044FC44 => .invalid - .data 0x00000000 # 8044FC48 => .invalid - .data 0x00050000 # 8044FC4C => .invalid - .data 0x00050001 # 8044FC50 => .invalid - .data 0x00050002 # 8044FC54 => .invalid - .data 0x00050003 # 8044FC58 => .invalid - .data 0x00050004 # 8044FC5C => .invalid - .data 0x00050005 # 8044FC60 => .invalid - .data 0x00080000 # 8044FC64 => .invalid - # region @ 80471E4C (4 bytes) - .data 0x80471E4C # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 80471E4C => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F94C + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x469C], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x469C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x469C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [80200044] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x142C] # D-pad version: lhz r0, [r3 - 0x142A] + lhz r5, [r3 - 0x1430] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xE940 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B7BB8 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B7BB8 + li r3, 0x0000 + + .data 0x801D84BC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D84BC + bl full_action_list_hook1 + .data 0x801CD5FC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CD5FC + bl full_action_list_hook2 + + .data 0x801FD268 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FD268 + bl save_to_memcard_hook1 + .data 0x80200B88 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x80200B88 + bl save_to_memcard_hook2 + .data 0x80200040 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x80200040 + b save_to_memcard_hook3 + + .data 0x801D7CC4 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7CC4 + bl four_palettes_hook1 + .data 0x80276DDC # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80276DDC + bl four_palettes_hook2 + .data 0x8024C1B0 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024C1B0 + b four_palettes_hook3 + .data 0x803367E0 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x803367E0 + bl four_palettes_hook4 + + .data 0x80247510 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80247510 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80276E3C # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80276E3C + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80277C0C # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x80277C0C + subi r0, r3, 0x07E8 + + .data 0x8044FC34 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x80471E4C # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OJ5.patch.s b/system/client-functions/Palette/Palette.3OJ5.patch.s index 949d7425..7147db1b 100644 --- a/system/client-functions/Palette/Palette.3OJ5.patch.s +++ b/system/client-functions/Palette/Palette.3OJ5.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB964 # 8000B958 => stw [r13 - 0x469C], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB948 # 8000B960 => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F0F70 # 8000B980 => b +0x001F0F70 /* 801FC8F0 */ - .data 0x806DB964 # 8000B984 => lwz r3, [r13 - 0x469C] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB948 # 8000B98C => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB948 # 8000B9AC => lwz r3, [r13 - 0x46B8] - .data 0x481F47B0 # 8000B9B0 => b +0x001F47B0 /* 80200160 */ - .data 0x806DB964 # 8000B9B4 => lwz r3, [r13 - 0x469C] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB948 # 8000B9BC => lwz r4, [r13 - 0x46B8] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F25 # 8000B9D8 => bl +0x00003F24 /* 8000F8FC */ - .data 0x481F3C6C # 8000B9DC => b +0x001F3C6C /* 801FF648 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CB980 # 8000CA50 => b +0x001CB980 /* 801D83D0 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BF75C # 8000CA7C => b +0x001BF75C /* 801CC1D8 */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CB090 # 8000CD88 => b +0x001CB090 /* 801D7E18 */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x4826B274 # 8000CD9C => b +0x0026B274 /* 80278010 */ - .data 0x3D808045 # 8000CDA0 => lis r12, 0x8045 - .data 0x618C2588 # 8000CDA4 => ori r12, r12, 0x2588 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x48240688 # 8000CDCC => b +0x00240688 /* 8024D454 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x4832B2C0 # 8000CDEC => b +0x0032B2C0 /* 803380AC */ - # region @ 801B5B18 (4 bytes) - .data 0x801B5B18 # address - .data 0x00000004 # size - .data 0x38600000 # 801B5B18 => li r3, 0x0000 - # region @ 801CC1D4 (4 bytes) - .data 0x801CC1D4 # address - .data 0x00000004 # size - .data 0x4BE40880 # 801CC1D4 => b -0x001BF780 /* 8000CA54 */ - # region @ 801D7E14 (4 bytes) - .data 0x801D7E14 # address - .data 0x00000004 # size - .data 0x4BE34EEC # 801D7E14 => b -0x001CB114 /* 8000CD00 */ - # region @ 801D83CC (4 bytes) - .data 0x801D83CC # address - .data 0x00000004 # size - .data 0x4BE34674 # 801D83CC => b -0x001CB98C /* 8000CA40 */ - # region @ 801FC8EC (4 bytes) - .data 0x801FC8EC # address - .data 0x00000004 # size - .data 0x4BE0F06C # 801FC8EC => b -0x001F0F94 /* 8000B958 */ - # region @ 801FF644 (4 bytes) - .data 0x801FF644 # address - .data 0x00000004 # size - .data 0x4BE0C370 # 801FF644 => b -0x001F3C90 /* 8000B9B4 */ - # region @ 8020015C (4 bytes) - .data 0x8020015C # address - .data 0x00000004 # size - .data 0x4BE0B828 # 8020015C => b -0x001F47D8 /* 8000B984 */ - # region @ 8024825C (8 bytes) - .data 0x8024825C # address - .data 0x00000008 # size - .data 0xA01F004A # 8024825C => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80248260 => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024D450 (4 bytes) - .data 0x8024D450 # address - .data 0x00000004 # size - .data 0x4BDBF950 # 8024D450 => b -0x002406B0 /* 8000CDA0 */ - # region @ 802779C0 (4 bytes) - .data 0x802779C0 # address - .data 0x00000004 # size - .data 0x3803BAA0 # 802779C0 => subi r0, r3, 0x4560 - # region @ 8027800C (4 bytes) - .data 0x8027800C # address - .data 0x00000004 # size - .data 0x4BD94D80 # 8027800C => b -0x0026B280 /* 8000CD8C */ - # region @ 8027806C (8 bytes) - .data 0x8027806C # address - .data 0x00000008 # size - .data 0xA01F004A # 8027806C => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80278070 => rlwinm. r3, r0, 0, 24, 27 - # region @ 803380A8 (4 bytes) - .data 0x803380A8 # address - .data 0x00000004 # size - .data 0x4BCD4D28 # 803380A8 => b -0x0032B2D8 /* 8000CDD0 */ - # region @ 8044F9FC (52 bytes) - .data 0x8044F9FC # address - .data 0x00000034 # size - .data 0x0004000D # 8044F9FC => .invalid - .data 0x0004000E # 8044FA00 => .invalid - .data 0x00000000 # 8044FA04 => .invalid - .data 0x0004000F # 8044FA08 => .invalid - .data 0x00040010 # 8044FA0C => .invalid - .data 0x00000000 # 8044FA10 => .invalid - .data 0x00050000 # 8044FA14 => .invalid - .data 0x00050001 # 8044FA18 => .invalid - .data 0x00050002 # 8044FA1C => .invalid - .data 0x00050003 # 8044FA20 => .invalid - .data 0x00050004 # 8044FA24 => .invalid - .data 0x00050005 # 8044FA28 => .invalid - .data 0x00080000 # 8044FA2C => .invalid - # region @ 80471C14 (4 bytes) - .data 0x80471C14 # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 80471C14 => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F8FC + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x469C], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x469C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x469C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x46B8] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF648] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x168C] # D-pad version: lhz r0, [r3 - 0x168A] + lhz r5, [r3 - 0x1690] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xE708 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B5B18 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B5B18 + li r3, 0x0000 + + .data 0x801D83CC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D83CC + bl full_action_list_hook1 + .data 0x801CC1D4 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC1D4 + bl full_action_list_hook2 + + .data 0x801FC8EC # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FC8EC + bl save_to_memcard_hook1 + .data 0x80200158 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x80200158 + bl save_to_memcard_hook2 + .data 0x801FF644 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF644 + b save_to_memcard_hook3 + + .data 0x801D7C14 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D7C14 + bl four_palettes_hook1 + .data 0x80276B90 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80276B90 + bl four_palettes_hook2 + .data 0x8024C2D8 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024C2D8 + b four_palettes_hook3 + .data 0x80336588 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80336588 + bl four_palettes_hook4 + + .data 0x80247130 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80247130 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x80276BF0 # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80276BF0 + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x802779C0 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x802779C0 + subi r0, r3, 0x07E8 + + .data 0x8044F9FC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x80471C14 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/Palette/Palette.3OP0.patch.s b/system/client-functions/Palette/Palette.3OP0.patch.s index a7cc85b0..e0812bd5 100644 --- a/system/client-functions/Palette/Palette.3OP0.patch.s +++ b/system/client-functions/Palette/Palette.3OP0.patch.s @@ -1,207 +1,257 @@ .meta name="Palette" -.meta description="Press Z to cycle\nthrough 4 customize\nconfigurations\ninstead of just one" -# Original code by Ralf @ GC-Forever and Aleron Ives +.meta description="Use C stick to\nuse 4 customize\nconfigurations\ninstead of just one" +# Original codes by Ralf @ GC-Forever # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 +# This code will let you have up to four different palettes of action buttons. +# Battle Screen Control Keys +# C-Stick/D-Pad Left = Select Palette 1 +# C-Stick/D-Pad Down = Select Palette 2 +# C-Stick/D-Pad Right = Select Palette 3 +# C-Stick/D-Pad Up = Select Palette 4 +# Customize Menu Control Keys +# C-Stick/D-Pad Left = Load Palette 1 As Active Button Selection +# C-Stick/D-Pad Down = Load Palette 2 As Active Button Selection +# C-Stick/D-Pad Right = Load Palette 3 As Active Button Selection +# C-Stick/D-Pad Up = Load Palette 4 As Active Button Selection +# Hold L+R and press ... +# C-Stick/D-Pad Left = Save Active Button Selection As Palette 1 +# C-Stick/D-Pad Down = Save Active Button Selection As Palette 2 +# C-Stick/D-Pad Right = Save Active Button Selection As Palette 3 +# C-Stick/D-Pad Up = Save Active Button Selection As Palette 4 + entry_ptr: reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000B958 (136 bytes) - .data 0x8000B958 # address - .data 0x00000088 # size - .data 0x906DB9B4 # 8000B958 => stw [r13 - 0x464C], r3 - .data 0x1C63003C # 8000B95C => mulli r3, r3, 60 - .data 0x808DB998 # 8000B960 => lwz r4, [r13 - 0x4668] - .data 0x3C840001 # 8000B964 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B968 => addi r4, r4, 0x0B80 - .data 0x7C841A14 # 8000B96C => add r4, r4, r3 - .data 0x3C608000 # 8000B970 => lis r3, 0x8000 - .data 0x6063CF40 # 8000B974 => ori r3, r3, 0xCF40 - .data 0x38A0003C # 8000B978 => li r5, 0x003C - .data 0x48002AA1 # 8000B97C => bl +0x00002AA0 /* 8000E41C */ - .data 0x481F10D8 # 8000B980 => b +0x001F10D8 /* 801FCA58 */ - .data 0x806DB9B4 # 8000B984 => lwz r3, [r13 - 0x464C] - .data 0x1C63003C # 8000B988 => mulli r3, r3, 60 - .data 0x808DB998 # 8000B98C => lwz r4, [r13 - 0x4668] - .data 0x3C840001 # 8000B990 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B994 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B998 => add r3, r4, r3 - .data 0x3C808000 # 8000B99C => lis r4, 0x8000 - .data 0x6084CF40 # 8000B9A0 => ori r4, r4, 0xCF40 - .data 0x38A0003C # 8000B9A4 => li r5, 0x003C - .data 0x48002A75 # 8000B9A8 => bl +0x00002A74 /* 8000E41C */ - .data 0x806DB998 # 8000B9AC => lwz r3, [r13 - 0x4668] - .data 0x481F4A50 # 8000B9B0 => b +0x001F4A50 /* 80200400 */ - .data 0x806DB9B4 # 8000B9B4 => lwz r3, [r13 - 0x464C] - .data 0x1C63003C # 8000B9B8 => mulli r3, r3, 60 - .data 0x808DB998 # 8000B9BC => lwz r4, [r13 - 0x4668] - .data 0x3C840001 # 8000B9C0 => addis r4, r4, 0x0001 - .data 0x38840B80 # 8000B9C4 => addi r4, r4, 0x0B80 - .data 0x7C641A14 # 8000B9C8 => add r3, r4, r3 - .data 0x38800000 # 8000B9CC => li r4, 0x0000 - .data 0x38A0003C # 8000B9D0 => li r5, 0x003C - .data 0x48002961 # 8000B9D4 => bl +0x00002960 /* 8000E334 */ - .data 0x48003F99 # 8000B9D8 => bl +0x00003F98 /* 8000F970 */ - .data 0x481F3F3C # 8000B9DC => b +0x001F3F3C /* 801FF918 */ - # region @ 8000CA40 (64 bytes) - .data 0x8000CA40 # address - .data 0x00000040 # size - .data 0x28030000 # 8000CA40 => cmplwi r3, 0 - .data 0x40820008 # 8000CA44 => bne +0x00000008 /* 8000CA4C */ - .data 0x3BE00000 # 8000CA48 => li r31, 0x0000 - .data 0x7C00F800 # 8000CA4C => cmp r0, r31 - .data 0x481CBEA0 # 8000CA50 => b +0x001CBEA0 /* 801D88F0 */ - .data 0x38000003 # 8000CA54 => li r0, 0x0003 - .data 0x7C0903A6 # 8000CA58 => mtctr r0 - .data 0x63C40500 # 8000CA5C => ori r4, r30, 0x0500 - .data 0x38BF0538 # 8000CA60 => addi r5, r31, 0x0538 - .data 0xA4050004 # 8000CA64 => lhzu r0, [r5 + 0x0004] - .data 0x7C040000 # 8000CA68 => cmp r4, r0 - .data 0x4182000C # 8000CA6C => beq +0x0000000C /* 8000CA78 */ - .data 0x4200FFF4 # 8000CA70 => bdnz -0x0000000C /* 8000CA64 */ - .data 0x38600000 # 8000CA74 => li r3, 0x0000 - .data 0x2C030000 # 8000CA78 => cmpwi r3, 0 - .data 0x481BFC7C # 8000CA7C => b +0x001BFC7C /* 801CC6F8 */ - # region @ 8000CD00 (240 bytes) - .data 0x8000CD00 # address - .data 0x000000F0 # size - .data 0x3C808000 # 8000CD00 => lis r4, 0x8000 - .data 0x6084CF3E # 8000CD04 => ori r4, r4, 0xCF3E - .data 0x3BE00000 # 8000CD08 => li r31, 0x0000 - .data 0xA0C4003A # 8000CD0C => lhz r6, [r4 + 0x003A] - .data 0x2C060000 # 8000CD10 => cmpwi r6, 0 - .data 0x41820074 # 8000CD14 => beq +0x00000074 /* 8000CD88 */ - .data 0xB3E4003A # 8000CD18 => sth [r4 + 0x003A], r31 - .data 0x3C608051 # 8000CD1C => lis r3, 0x8051 - .data 0xA003E274 # 8000CD20 => lhz r0, [r3 - 0x1D8C] - .data 0xA0A3E270 # 8000CD24 => lhz r5, [r3 - 0x1D90] - .data 0x7CA53038 # 8000CD28 => and r5, r5, r6 - .data 0x70003C00 # 8000CD2C => andi. r0, r0, 0x3C00 - .data 0x41820058 # 8000CD30 => beq +0x00000058 /* 8000CD88 */ - .data 0x5403056B # 8000CD34 => rlwinm. r3, r0, 0, 21, 21 - .data 0x41820008 # 8000CD38 => beq +0x00000008 /* 8000CD40 */ - .data 0x3BC0002A # 8000CD3C => li r30, 0x002A - .data 0x540304A5 # 8000CD40 => rlwinm. r3, r0, 0, 18, 18 - .data 0x41820008 # 8000CD44 => beq +0x00000008 /* 8000CD4C */ - .data 0x3BC0001C # 8000CD48 => li r30, 0x001C - .data 0x54030529 # 8000CD4C => rlwinm. r3, r0, 0, 20, 20 - .data 0x41820008 # 8000CD50 => beq +0x00000008 /* 8000CD58 */ - .data 0x3BC0000E # 8000CD54 => li r30, 0x000E - .data 0x7C84F214 # 8000CD58 => add r4, r4, r30 - .data 0x38000007 # 8000CD5C => li r0, 0x0007 - .data 0x7C0903A6 # 8000CD60 => mtctr r0 - .data 0x387C0504 # 8000CD64 => addi r3, r28, 0x0504 - .data 0x2C050003 # 8000CD68 => cmpwi r5, 3 - .data 0x4082000C # 8000CD6C => bne +0x0000000C /* 8000CD78 */ - .data 0xA0030004 # 8000CD70 => lhz r0, [r3 + 0x0004] - .data 0xB0040002 # 8000CD74 => sth [r4 + 0x0002], r0 - .data 0xA4040002 # 8000CD78 => lhzu r0, [r4 + 0x0002] - .data 0xB4030004 # 8000CD7C => sthu [r3 + 0x0004], r0 - .data 0x4200FFE8 # 8000CD80 => bdnz -0x00000018 /* 8000CD68 */ - .data 0x3BC00000 # 8000CD84 => li r30, 0x0000 - .data 0x481CB5B0 # 8000CD88 => b +0x001CB5B0 /* 801D8338 */ - .data 0x38600003 # 8000CD8C => li r3, 0x0003 - .data 0x3C808001 # 8000CD90 => lis r4, 0x8001 - .data 0xB064CF78 # 8000CD94 => sth [r4 - 0x3088], r3 - .data 0x7FC3F378 # 8000CD98 => mr r3, r30 - .data 0x4826AC70 # 8000CD9C => b +0x0026AC70 /* 80277A0C */ - .data 0x3D808045 # 8000CDA0 => lis r12, 0x8045 - .data 0x618C2148 # 8000CDA4 => ori r12, r12, 0x2148 - .data 0x80030000 # 8000CDA8 => lwz r0, [r3] - .data 0x7C006000 # 8000CDAC => cmp r0, r12 - .data 0xA0030004 # 8000CDB0 => lhz r0, [r3 + 0x0004] - .data 0x40820018 # 8000CDB4 => bne +0x00000018 /* 8000CDCC */ - .data 0x2C000000 # 8000CDB8 => cmpwi r0, 0 - .data 0x40820010 # 8000CDBC => bne +0x00000010 /* 8000CDCC */ - .data 0x38600001 # 8000CDC0 => li r3, 0x0001 - .data 0x3D808001 # 8000CDC4 => lis r12, 0x8001 - .data 0xB06CCF78 # 8000CDC8 => sth [r12 - 0x3088], r3 - .data 0x48240194 # 8000CDCC => b +0x00240194 /* 8024CF60 */ - .data 0x3C608000 # 8000CDD0 => lis r3, 0x8000 - .data 0x6063CF3E # 8000CDD4 => ori r3, r3, 0xCF3E - .data 0x3800001C # 8000CDD8 => li r0, 0x001C - .data 0x7C0903A6 # 8000CDDC => mtctr r0 - .data 0x38000000 # 8000CDE0 => li r0, 0x0000 - .data 0xB4030002 # 8000CDE4 => sthu [r3 + 0x0002], r0 - .data 0x4200FFFC # 8000CDE8 => bdnz -0x00000004 /* 8000CDE4 */ - .data 0x4832A8D8 # 8000CDEC => b +0x0032A8D8 /* 803376C4 */ - # region @ 801B6038 (4 bytes) - .data 0x801B6038 # address - .data 0x00000004 # size - .data 0x38600000 # 801B6038 => li r3, 0x0000 - # region @ 801CC6F4 (4 bytes) - .data 0x801CC6F4 # address - .data 0x00000004 # size - .data 0x4BE40360 # 801CC6F4 => b -0x001BFCA0 /* 8000CA54 */ - # region @ 801D8334 (4 bytes) - .data 0x801D8334 # address - .data 0x00000004 # size - .data 0x4BE349CC # 801D8334 => b -0x001CB634 /* 8000CD00 */ - # region @ 801D88EC (4 bytes) - .data 0x801D88EC # address - .data 0x00000004 # size - .data 0x4BE34154 # 801D88EC => b -0x001CBEAC /* 8000CA40 */ - # region @ 801FCA54 (4 bytes) - .data 0x801FCA54 # address - .data 0x00000004 # size - .data 0x4BE0EF04 # 801FCA54 => b -0x001F10FC /* 8000B958 */ - # region @ 801FF914 (4 bytes) - .data 0x801FF914 # address - .data 0x00000004 # size - .data 0x4BE0C0A0 # 801FF914 => b -0x001F3F60 /* 8000B9B4 */ - # region @ 802003FC (4 bytes) - .data 0x802003FC # address - .data 0x00000004 # size - .data 0x4BE0B588 # 802003FC => b -0x001F4A78 /* 8000B984 */ - # region @ 80247D68 (8 bytes) - .data 0x80247D68 # address - .data 0x00000008 # size - .data 0xA01F004A # 80247D68 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80247D6C => rlwinm. r3, r0, 0, 24, 27 - # region @ 8024CF5C (4 bytes) - .data 0x8024CF5C # address - .data 0x00000004 # size - .data 0x4BDBFE44 # 8024CF5C => b -0x002401BC /* 8000CDA0 */ - # region @ 802773BC (4 bytes) - .data 0x802773BC # address - .data 0x00000004 # size - .data 0x3803BAA0 # 802773BC => subi r0, r3, 0x4560 - # region @ 80277A08 (4 bytes) - .data 0x80277A08 # address - .data 0x00000004 # size - .data 0x4BD95384 # 80277A08 => b -0x0026AC7C /* 8000CD8C */ - # region @ 80277A68 (8 bytes) - .data 0x80277A68 # address - .data 0x00000008 # size - .data 0xA01F004A # 80277A68 => lhz r0, [r31 + 0x004A] - .data 0x54030637 # 80277A6C => rlwinm. r3, r0, 0, 24, 27 - # region @ 803376C0 (4 bytes) - .data 0x803376C0 # address - .data 0x00000004 # size - .data 0x4BCD5710 # 803376C0 => b -0x0032A8F0 /* 8000CDD0 */ - # region @ 8044F6B4 (52 bytes) - .data 0x8044F6B4 # address - .data 0x00000034 # size - .data 0x0004000D # 8044F6B4 => .invalid - .data 0x0004000E # 8044F6B8 => .invalid - .data 0x00000000 # 8044F6BC => .invalid - .data 0x0004000F # 8044F6C0 => .invalid - .data 0x00040010 # 8044F6C4 => .invalid - .data 0x00000000 # 8044F6C8 => .invalid - .data 0x00050000 # 8044F6CC => .invalid - .data 0x00050001 # 8044F6D0 => .invalid - .data 0x00050002 # 8044F6D4 => .invalid - .data 0x00050003 # 8044F6D8 => .invalid - .data 0x00050004 # 8044F6DC => .invalid - .data 0x00050005 # 8044F6E0 => .invalid - .data 0x00080000 # 8044F6E4 => .invalid - # region @ 80471804 (4 bytes) - .data 0x80471804 # address - .data 0x00000004 # size - .data 0xFFFFFFFF # 80471804 => fnmadd. f31, f31, f31, f31 - # end sentinel - .data 0x00000000 # address - .data 0x00000000 # size + + .label memcpy, 0x8000E41C + .label memset, 0x8000E334 + .label get_main_phase, 0x8000F970 + + .data 0x8000B958 # Save Extra Palettes To Memory Card (Temp Slot 3) + .deltaof save_to_memcard_hook1, save_to_memcard_end + .address 0x8000B958 +save_to_memcard_hook1: + stw [r13 - 0x464C], r3 + mulli r3, r3, 60 + lwz r4, [r13 - 0x4668] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r4, r4, r3 + lis r3, 0x8000 + ori r3, r3, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook2: + stw [r4], r3 + lwz r3, [r13 - 0x464C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x4668] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + lis r4, 0x8000 + ori r4, r4, 0xCF40 + li r5, 0x003C + b memcpy +save_to_memcard_hook3: + lwz r3, [r13 - 0x464C] + mulli r3, r3, 60 + lwz r4, [r13 - 0x4668] + addis r4, r4, 0x0001 + addi r4, r4, 0x0B80 + add r3, r4, r3 + li r4, 0x0000 + li r5, 0x003C + bl memset + bl get_main_phase + b [801FF918] +save_to_memcard_end: + + .data 0x8000CA40 # Full Action List (Incl. Photon Blasts & Traps) + .deltaof full_action_list_hook1, full_action_list_end + .address 0x8000CA40 +full_action_list_hook1: + cmplwi r3, 0 + bne full_action_list_hook1_r3_nonzero + li r31, 0x0000 +full_action_list_hook1_r3_nonzero: + cmp r0, r31 + blr +full_action_list_hook2: + li r0, 0x0003 + mtctr r0 + ori r4, r30, 0x0500 + addi r5, r31, 0x0538 +full_action_list_hook2_next: + lhzu r0, [r5 + 0x0004] + cmp r4, r0 + beq full_action_list_hook2_ret + bdnz full_action_list_hook2_next + li r3, 0x0000 +full_action_list_hook2_ret: + cmpwi r3, 0 + blr +full_action_list_end: + + .data 0x8000CD00 # Have Four Action Button Palettes + .deltaof four_palettes_hook1, four_palettes_end + .address 0x8000CD00 +four_palettes_hook1: + lis r4, 0x8000 + ori r4, r4, 0xCF3E + li r31, 0x0000 + lhz r6, [r4 + 0x003A] + cmpwi r6, 0 + beqlr + sth [r4 + 0x003A], r31 + lis r3, 0x8051 + lhz r0, [r3 - 0x0D6C] # D-pad version: lhz r0, [r3 - 0x0D6A] + lhz r5, [r3 - 0x0D70] + and r5, r5, r6 + andi. r0, r0, 0x3C00 # D-pad version: andi. r0, r0, 0x00F0 + beqlr + rlwinm. r3, r0, 0, 21, 21 # D-pad version: rlwinm. r3, r0, 0, 27, 27 + beq four_palettes_hook1_control_check1 + li r30, 0x002A +four_palettes_hook1_control_check1: + rlwinm. r3, r0, 0, 18, 18 # D-pad version: rlwinm. r3, r0, 0, 24, 24 + beq four_palettes_hook1_control_check2 + li r30, 0x001C +four_palettes_hook1_control_check2: + rlwinm. r3, r0, 0, 20, 20 # D-pad version: rlwinm. r3, r0, 0, 26, 26 + beq four_palettes_hook1_control_check3 + li r30, 0x000E +four_palettes_hook1_control_check3: + add r4, r4, r30 + li r0, 0x0007 + mtctr r0 + addi r3, r28, 0x0504 +four_palettes_hook1_again: + cmpwi r5, 3 + bne four_palettes_hook1_skip + lhz r0, [r3 + 0x0004] + sth [r4 + 0x0002], r0 +four_palettes_hook1_skip: + lhzu r0, [r4 + 0x0002] + sthu [r3 + 0x0004], r0 + bdnz four_palettes_hook1_again + li r30, 0x0000 + blr +four_palettes_hook2: + li r3, 0x0003 + lis r4, 0x8001 + sth [r4 - 0x3088], r3 + mr r3, r30 + blr +four_palettes_hook3: + lis r12, 0x8044 + ori r12, r12, 0xE3D0 + lwz r4, [r3] + cmp r4, r12 + rlwinm r3, r0, 0, 29, 29 # Original opcode + bnelr + cmpwi r0, 0 + bnelr + li r4, 0x0001 + lis r12, 0x8001 + sth [r12 - 0x3088], r4 + blr +four_palettes_hook4: + lis r3, 0x8000 + ori r3, r3, 0xCF3C + li r0, 0x000E + mtctr r0 + li r0, 0 +four_palettes_hook4_again: + stwu [r3 + 4], r0 + bdnz four_palettes_hook4_again + blr +four_palettes_end: + + .data 0x801B6038 # Disable Photon Blast Palette Switching + .data 0x00000004 + .address 0x801B6038 + li r3, 0x0000 + + .data 0x801D88EC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801D88EC + bl full_action_list_hook1 + .data 0x801CC6F4 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x801CC6F4 + bl full_action_list_hook2 + + .data 0x801FCA54 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FCA54 + bl save_to_memcard_hook1 + .data 0x802003F8 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x802003F8 + bl save_to_memcard_hook2 + .data 0x801FF914 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .address 0x801FF914 + b save_to_memcard_hook3 + + .data 0x801D8134 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x801D8134 + bl four_palettes_hook1 + .data 0x8027658C # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8027658C + bl four_palettes_hook2 + .data 0x8024BDE4 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x8024BDE4 + b four_palettes_hook3 + .data 0x80335BA0 # Have Four Action Button Palettes + .data 0x00000004 + .address 0x80335BA0 + bl four_palettes_hook4 + + .data 0x80246C3C # Have Four Action Button Palettes + .data 0x00000008 + .address 0x80246C3C + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x802765EC # Have Four Action Button Palettes + .data 0x00000008 + .address 0x802765EC + lhz r0, [r31 + 0x004A] # D-pad version: lhz r0, [r31 + 0x0048] + rlwinm. r3, r0, 0, 24, 27 # D-pad version: rlwinm. r3, r0, 0, 18, 21 + + .data 0x802773BC # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000004 + .address 0x802773BC + subi r0, r3, 0x07E8 + + .data 0x8044F6B4 # Full Action List (Incl. Photon Blasts & Traps) + .data 0x00000034 + .data 0x0004000D + .data 0x0004000E + .data 0x00000000 + .data 0x0004000F + .data 0x00040010 + .data 0x00000000 + .data 0x00050000 + .data 0x00050001 + .data 0x00050002 + .data 0x00050003 + .data 0x00050004 + .data 0x00050005 + .data 0x00080000 + + .data 0x80471804 # Save Extra Palettes To Memory Card (Temp Slot 3) + .data 0x00000004 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000