From 9d7c71fb269a21da85d87ef32daafaf78e2c68ec Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Sat, 8 Feb 2025 22:47:23 -0800 Subject: [PATCH] rewrite common bank patch --- .../CommonBank/CommonBank.3OE0.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OE1.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OE2.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OJ2.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OJ3.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OJ4.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OJ5.patch.s | 147 ++++++++++-------- .../CommonBank/CommonBank.3OP0.patch.s | 147 ++++++++++-------- 8 files changed, 648 insertions(+), 528 deletions(-) diff --git a/system/client-functions/CommonBank/CommonBank.3OE0.patch.s b/system/client-functions/CommonBank/CommonBank.3OE0.patch.s index 1f510209..1190a32d 100644 --- a/system/client-functions/CommonBank/CommonBank.3OE0.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OE0.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB8 # 8000BAE4 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA08493B0 # 8000BAF4 => lhz r4, [r4 - 0x6C50] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB954 # 8000BB00 => lwz r0, [r13 - 0x46AC] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB938 # 8000BB0C => lwz r3, [r13 - 0x46C8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x482047B4 # 8000BB30 => b +0x002047B4 /* 802102E4 */ - .data 0x800D8EB8 # 8000BB34 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48204724 # 8000BB4C => b +0x00204724 /* 80210270 */ - # region @ 8021026C (4 bytes) - .data 0x8021026C # address - .data 0x00000004 # size - .data 0x4BDFB8C8 # 8021026C => b -0x00204738 /* 8000BB34 */ - # region @ 802102E0 (4 bytes) - .data 0x802102E0 # address - .data 0x00000004 # size - .data 0x4BDFB804 # 802102E0 => b -0x002047FC /* 8000BAE4 */ - # region @ 8030B414 (4 bytes) - .data 0x8030B414 # address - .data 0x00000004 # size - .data 0x4BD006A1 # 8030B414 => bl -0x002FF960 /* 8000BAB4 */ - # region @ 8030B46C (4 bytes) - .data 0x8030B46C # address - .data 0x00000004 # size - .data 0x4BD00649 # 8030B46C => bl -0x002FF9B8 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x6C50] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x46AC] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46C8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x8021026C + .data 0x00000004 + .address 0x8021026C + bl hook3 + + .data 0x802102E0 + .data 0x00000004 + .address 0x802102E0 + bl hook2 + + .data 0x8030B414 + .data 0x00000004 + .address 0x8030B414 + bl hook1 + + .data 0x8030B46C + .data 0x00000004 + .address 0x8030B46C + bl hook1 + + .data 0x8046DC5C + .data 0x00000004 + .address 0x8046DC5C + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OE1.patch.s b/system/client-functions/CommonBank/CommonBank.3OE1.patch.s index 173dd221..b8450430 100644 --- a/system/client-functions/CommonBank/CommonBank.3OE1.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OE1.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB8 # 8000BAE4 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA0849890 # 8000BAF4 => lhz r4, [r4 - 0x6770] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB954 # 8000BB00 => lwz r0, [r13 - 0x46AC] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB938 # 8000BB0C => lwz r3, [r13 - 0x46C8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x482047B4 # 8000BB30 => b +0x002047B4 /* 802102E4 */ - .data 0x800D8EB8 # 8000BB34 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48204724 # 8000BB4C => b +0x00204724 /* 80210270 */ - # region @ 8021026C (4 bytes) - .data 0x8021026C # address - .data 0x00000004 # size - .data 0x4BDFB8C8 # 8021026C => b -0x00204738 /* 8000BB34 */ - # region @ 802102E0 (4 bytes) - .data 0x802102E0 # address - .data 0x00000004 # size - .data 0x4BDFB804 # 802102E0 => b -0x002047FC /* 8000BAE4 */ - # region @ 8030B458 (4 bytes) - .data 0x8030B458 # address - .data 0x00000004 # size - .data 0x4BD0065D # 8030B458 => bl -0x002FF9A4 /* 8000BAB4 */ - # region @ 8030B4B0 (4 bytes) - .data 0x8030B4B0 # address - .data 0x00000004 # size - .data 0x4BD00605 # 8030B4B0 => bl -0x002FF9FC /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x6770] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x46AC] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46C8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x8021026C + .data 0x00000004 + .address 0x8021026C + bl hook3 + + .data 0x802102E0 + .data 0x00000004 + .address 0x802102E0 + bl hook2 + + .data 0x8030B458 + .data 0x00000004 + .address 0x8030B458 + bl hook1 + + .data 0x8030B4B0 + .data 0x00000004 + .address 0x8030B4B0 + bl hook1 + + .data 0x8046E0DC + .data 0x00000004 + .address 0x8046E0DC + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OE2.patch.s b/system/client-functions/CommonBank/CommonBank.3OE2.patch.s index bce739cc..dad87b69 100644 --- a/system/client-functions/CommonBank/CommonBank.3OE2.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OE2.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB8 # 8000BAE4 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA084E270 # 8000BAF4 => lhz r4, [r4 - 0x1D90] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB974 # 8000BB00 => lwz r0, [r13 - 0x468C] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB958 # 8000BB0C => lwz r3, [r13 - 0x46A8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x48205704 # 8000BB30 => b +0x00205704 /* 80211234 */ - .data 0x800D8EB8 # 8000BB34 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48205674 # 8000BB4C => b +0x00205674 /* 802111C0 */ - # region @ 802111BC (4 bytes) - .data 0x802111BC # address - .data 0x00000004 # size - .data 0x4BDFA978 # 802111BC => b -0x00205688 /* 8000BB34 */ - # region @ 80211230 (4 bytes) - .data 0x80211230 # address - .data 0x00000004 # size - .data 0x4BDFA8B4 # 80211230 => b -0x0020574C /* 8000BAE4 */ - # region @ 8030CE60 (4 bytes) - .data 0x8030CE60 # address - .data 0x00000004 # size - .data 0x4BCFEC55 # 8030CE60 => bl -0x003013AC /* 8000BAB4 */ - # region @ 8030CEB8 (4 bytes) - .data 0x8030CEB8 # address - .data 0x00000004 # size - .data 0x4BCFEBFD # 8030CEB8 => bl -0x00301404 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x1D90] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x468C] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46A8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x802111BC + .data 0x00000004 + .address 0x802111BC + bl hook3 + + .data 0x80211230 + .data 0x00000004 + .address 0x80211230 + bl hook2 + + .data 0x8030CE60 + .data 0x00000004 + .address 0x8030CE60 + bl hook1 + + .data 0x8030CEB8 + .data 0x00000004 + .address 0x8030CEB8 + bl hook1 + + .data 0x80471ACC + .data 0x00000004 + .address 0x80471ACC + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OJ2.patch.s b/system/client-functions/CommonBank/CommonBank.3OJ2.patch.s index c477574b..56fb0c25 100644 --- a/system/client-functions/CommonBank/CommonBank.3OJ2.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OJ2.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB0 # 8000BAE4 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA0848AD0 # 8000BAF4 => lhz r4, [r4 - 0x7530] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB93C # 8000BB00 => lwz r0, [r13 - 0x46C4] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB920 # 8000BB0C => lwz r3, [r13 - 0x46E0] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x48203FB8 # 8000BB30 => b +0x00203FB8 /* 8020FAE8 */ - .data 0x800D8EB0 # 8000BB34 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48203EB0 # 8000BB4C => b +0x00203EB0 /* 8020F9FC */ - # region @ 8020F9F8 (4 bytes) - .data 0x8020F9F8 # address - .data 0x00000004 # size - .data 0x4BDFC13C # 8020F9F8 => b -0x00203EC4 /* 8000BB34 */ - # region @ 8020FAE4 (4 bytes) - .data 0x8020FAE4 # address - .data 0x00000004 # size - .data 0x4BDFC000 # 8020FAE4 => b -0x00204000 /* 8000BAE4 */ - # region @ 8030AA54 (4 bytes) - .data 0x8030AA54 # address - .data 0x00000004 # size - .data 0x4BD01061 # 8030AA54 => bl -0x002FEFA0 /* 8000BAB4 */ - # region @ 8030AAAC (4 bytes) - .data 0x8030AAAC # address - .data 0x00000004 # size - .data 0x4BD01009 # 8030AAAC => bl -0x002FEFF8 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x7530] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x46C4] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46E0] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x8020F9F8 + .data 0x00000004 + .address 0x8020F9F8 + bl hook3 + + .data 0x8020FAE4 + .data 0x00000004 + .address 0x8020FAE4 + bl hook2 + + .data 0x8030AA54 + .data 0x00000004 + .address 0x8030AA54 + bl hook1 + + .data 0x8030AAAC + .data 0x00000004 + .address 0x8030AAAC + bl hook1 + + .data 0x8046CECC + .data 0x00000004 + .address 0x8046CECC + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OJ3.patch.s b/system/client-functions/CommonBank/CommonBank.3OJ3.patch.s index 18bf5e72..29b2d632 100644 --- a/system/client-functions/CommonBank/CommonBank.3OJ3.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OJ3.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB0 # 8000BAE4 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA084C590 # 8000BAF4 => lhz r4, [r4 - 0x3A70] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB944 # 8000BB00 => lwz r0, [r13 - 0x46BC] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB928 # 8000BB0C => lwz r3, [r13 - 0x46D8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x48204894 # 8000BB30 => b +0x00204894 /* 802103C4 */ - .data 0x800D8EB0 # 8000BB34 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48204804 # 8000BB4C => b +0x00204804 /* 80210350 */ - # region @ 8021034C (4 bytes) - .data 0x8021034C # address - .data 0x00000004 # size - .data 0x4BDFB7E8 # 8021034C => b -0x00204818 /* 8000BB34 */ - # region @ 802103C0 (4 bytes) - .data 0x802103C0 # address - .data 0x00000004 # size - .data 0x4BDFB724 # 802103C0 => b -0x002048DC /* 8000BAE4 */ - # region @ 8030BAA4 (4 bytes) - .data 0x8030BAA4 # address - .data 0x00000004 # size - .data 0x4BD00011 # 8030BAA4 => bl -0x002FFFF0 /* 8000BAB4 */ - # region @ 8030BAFC (4 bytes) - .data 0x8030BAFC # address - .data 0x00000004 # size - .data 0x4BCFFFB9 # 8030BAFC => bl -0x00300048 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x3A70] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x46BC] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46D8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x8021034C + .data 0x00000004 + .address 0x8021034C + bl hook3 + + .data 0x802103C0 + .data 0x00000004 + .address 0x802103C0 + bl hook2 + + .data 0x8030BAA4 + .data 0x00000004 + .address 0x8030BAA4 + bl hook1 + + .data 0x8030BAFC + .data 0x00000004 + .address 0x8030BAFC + bl hook1 + + .data 0x8046FCEC + .data 0x00000004 + .address 0x8046FCEC + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OJ4.patch.s b/system/client-functions/CommonBank/CommonBank.3OJ4.patch.s index 3c0ef378..dd4519b3 100644 --- a/system/client-functions/CommonBank/CommonBank.3OJ4.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OJ4.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB0 # 8000BAE4 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA084EBD0 # 8000BAF4 => lhz r4, [r4 - 0x1430] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB964 # 8000BB00 => lwz r0, [r13 - 0x469C] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB948 # 8000BB0C => lwz r3, [r13 - 0x46B8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x48205674 # 8000BB30 => b +0x00205674 /* 802111A4 */ - .data 0x800D8EB0 # 8000BB34 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x482055E4 # 8000BB4C => b +0x002055E4 /* 80211130 */ - # region @ 8021112C (4 bytes) - .data 0x8021112C # address - .data 0x00000004 # size - .data 0x4BDFAA08 # 8021112C => b -0x002055F8 /* 8000BB34 */ - # region @ 802111A0 (4 bytes) - .data 0x802111A0 # address - .data 0x00000004 # size - .data 0x4BDFA944 # 802111A0 => b -0x002056BC /* 8000BAE4 */ - # region @ 8030CEF0 (4 bytes) - .data 0x8030CEF0 # address - .data 0x00000004 # size - .data 0x4BCFEBC5 # 8030CEF0 => bl -0x0030143C /* 8000BAB4 */ - # region @ 8030CF48 (4 bytes) - .data 0x8030CF48 # address - .data 0x00000004 # size - .data 0x4BCFEB6D # 8030CF48 => bl -0x00301494 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x1430] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x469C] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46B8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x8021112C + .data 0x00000004 + .address 0x8021112C + bl hook3 + + .data 0x802111A0 + .data 0x00000004 + .address 0x802111A0 + bl hook2 + + .data 0x8030CEF0 + .data 0x00000004 + .address 0x8030CEF0 + bl hook1 + + .data 0x8030CF48 + .data 0x00000004 + .address 0x8030CF48 + bl hook1 + + .data 0x80471E4C + .data 0x00000004 + .address 0x80471E4C + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OJ5.patch.s b/system/client-functions/CommonBank/CommonBank.3OJ5.patch.s index f393c511..da53d210 100644 --- a/system/client-functions/CommonBank/CommonBank.3OJ5.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OJ5.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB0 # 8000BAE4 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA084E970 # 8000BAF4 => lhz r4, [r4 - 0x1690] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB964 # 8000BB00 => lwz r0, [r13 - 0x469C] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB948 # 8000BB0C => lwz r3, [r13 - 0x46B8] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x482053D0 # 8000BB30 => b +0x002053D0 /* 80210F00 */ - .data 0x800D8EB0 # 8000BB34 => lwz r0, [r13 - 0x7150] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48205340 # 8000BB4C => b +0x00205340 /* 80210E8C */ - # region @ 80210E88 (4 bytes) - .data 0x80210E88 # address - .data 0x00000004 # size - .data 0x4BDFACAC # 80210E88 => b -0x00205354 /* 8000BB34 */ - # region @ 80210EFC (4 bytes) - .data 0x80210EFC # address - .data 0x00000004 # size - .data 0x4BDFABE8 # 80210EFC => b -0x00205418 /* 8000BAE4 */ - # region @ 8030CCA4 (4 bytes) - .data 0x8030CCA4 # address - .data 0x00000004 # size - .data 0x4BCFEE11 # 8030CCA4 => bl -0x003011F0 /* 8000BAB4 */ - # region @ 8030CCFC (4 bytes) - .data 0x8030CCFC # address - .data 0x00000004 # size - .data 0x4BCFEDB9 # 8030CCFC => bl -0x00301248 /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x1690] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x469C] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x46B8] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7150] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x80210E88 + .data 0x00000004 + .address 0x80210E88 + bl hook3 + + .data 0x80210EFC + .data 0x00000004 + .address 0x80210EFC + bl hook2 + + .data 0x8030CCA4 + .data 0x00000004 + .address 0x8030CCA4 + bl hook1 + + .data 0x8030CCFC + .data 0x00000004 + .address 0x8030CCFC + bl hook1 + + .data 0x80471C14 + .data 0x00000004 + .address 0x80471C14 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000 diff --git a/system/client-functions/CommonBank/CommonBank.3OP0.patch.s b/system/client-functions/CommonBank/CommonBank.3OP0.patch.s index 1846e421..6f3bc0fd 100644 --- a/system/client-functions/CommonBank/CommonBank.3OP0.patch.s +++ b/system/client-functions/CommonBank/CommonBank.3OP0.patch.s @@ -1,6 +1,6 @@ .meta name="Common bank" .meta description="Hold L and open\nthe bank to use a\ncommon bank stored\nin temp character\n3's data" -# Original code by Ralf @ GC-Forever and Aleron Ives +# Original code by Ralf @ GC-Forever ("Common Bank (Hold L And Open Bank)") # https://www.gc-forever.com/forums/viewtopic.php?t=2050 # https://www.gc-forever.com/forums/viewtopic.php?t=2049 @@ -9,68 +9,83 @@ reloc0: .offsetof start start: .include WriteCodeBlocksGC - # region @ 8000BAB4 (156 bytes) - .data 0x8000BAB4 # address - .data 0x0000009C # size - .data 0x281B0002 # 8000BAB4 => cmplwi r27, 2 - .data 0x40820018 # 8000BAB8 => bne +0x00000018 /* 8000BAD0 */ - .data 0x3C008000 # 8000BABC => lis r0, 0x8000 - .data 0x6000BAD8 # 8000BAC0 => ori r0, r0, 0xBAD8 - .data 0x90030004 # 8000BAC4 => stw [r3 + 0x0004], r0 - .data 0x38000000 # 8000BAC8 => li r0, 0x0000 - .data 0x90030008 # 8000BACC => stw [r3 + 0x0008], r0 - .data 0x807F0040 # 8000BAD0 => lwz r3, [r31 + 0x0040] - .data 0x4E800020 # 8000BAD4 => blr - .data 0x434F4D4D # 8000BAD8 => bdzl cr3, +0x00004D4C /* 80010824 */ - .data 0x4F4E2042 # 8000BADC => crnor crb26, crb14, crb4 - .data 0x414E4B00 # 8000BAE0 => bc 10, 14, +0x00004B00 /* 800105E0 */ - .data 0x800D8EB8 # 8000BAE4 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BAE8 => cmplwi r0, 1 - .data 0x40820040 # 8000BAEC => bne +0x00000040 /* 8000BB2C */ - .data 0x3C808051 # 8000BAF0 => lis r4, 0x8051 - .data 0xA084F290 # 8000BAF4 => lhz r4, [r4 - 0x0D70] - .data 0x70800002 # 8000BAF8 => andi. r0, r4, 0x0002 - .data 0x41820028 # 8000BAFC => beq +0x00000028 /* 8000BB24 */ - .data 0x800DB9B4 # 8000BB00 => lwz r0, [r13 - 0x464C] - .data 0x28000006 # 8000BB04 => cmplwi r0, 6 - .data 0x4182001C # 8000BB08 => beq +0x0000001C /* 8000BB24 */ - .data 0x806DB998 # 8000BB0C => lwz r3, [r13 - 0x4668] - .data 0x28030000 # 8000BB10 => cmplwi r3, 0 - .data 0x41820010 # 8000BB14 => beq +0x00000010 /* 8000BB24 */ - .data 0x38000000 # 8000BB18 => li r0, 0x0000 - .data 0x6000F1B0 # 8000BB1C => ori r0, r0, 0xF1B0 - .data 0x7C630214 # 8000BB20 => add r3, r3, r0 - .data 0x3C808001 # 8000BB24 => lis r4, 0x8001 - .data 0x9064C32C # 8000BB28 => stw [r4 - 0x3CD4], r3 - .data 0x28030000 # 8000BB2C => cmplwi r3, 0 - .data 0x48205100 # 8000BB30 => b +0x00205100 /* 80210C30 */ - .data 0x800D8EB8 # 8000BB34 => lwz r0, [r13 - 0x7148] - .data 0x28000001 # 8000BB38 => cmplwi r0, 1 - .data 0x4082000C # 8000BB3C => bne +0x0000000C /* 8000BB48 */ - .data 0x3C608001 # 8000BB40 => lis r3, 0x8001 - .data 0x8063C32C # 8000BB44 => lwz r3, [r3 - 0x3CD4] - .data 0x7C681B79 # 8000BB48 => mr. r8, r3 - .data 0x48205070 # 8000BB4C => b +0x00205070 /* 80210BBC */ - # region @ 80210BB8 (4 bytes) - .data 0x80210BB8 # address - .data 0x00000004 # size - .data 0x4BDFAF7C # 80210BB8 => b -0x00205084 /* 8000BB34 */ - # region @ 80210C2C (4 bytes) - .data 0x80210C2C # address - .data 0x00000004 # size - .data 0x4BDFAEB8 # 80210C2C => b -0x00205148 /* 8000BAE4 */ - # region @ 8030C228 (4 bytes) - .data 0x8030C228 # address - .data 0x00000004 # size - .data 0x4BCFF88D # 8030C228 => bl -0x00300774 /* 8000BAB4 */ - # region @ 8030C280 (4 bytes) - .data 0x8030C280 # address - .data 0x00000004 # size - .data 0x4BCFF835 # 8030C280 => bl -0x003007CC /* 8000BAB4 */ - # 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 + + .data 0x8000BAB4 + .deltaof hook1, hooks_end + .address 0x8000BAB4 + +hook1: + cmplwi r27, 2 + bne hook1_skip + lis r0, 0x8000 + ori r0, r0, 0xBAD8 + stw [r3 + 0x0004], r0 + li r0, 0x0000 + stw [r3 + 0x0008], r0 +hook1_skip: + lwz r3, [r31 + 0x0040] + blr + .binary 434F4D4D4F4E2042414E4B00 + +hook2: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook2_skip + lis r4, 0x8051 + lhz r4, [r4 - 0x0D70] + andi. r0, r4, 0x0002 + beq hook2_default_bank + lwz r0, [r13 - 0x464C] + cmplwi r0, 6 + beq hook2_default_bank + lwz r3, [r13 - 0x4668] + cmplwi r3, 0 + beq hook2_default_bank + li r0, 0x0000 + ori r0, r0, 0xF1B0 + add r3, r3, r0 +hook2_default_bank: + lis r4, 0x8001 + stw [r4 - 0x3CD4], r3 +hook2_skip: + cmplwi r3, 0 + blr + +hook3: + lwz r0, [r13 - 0x7148] + cmplwi r0, 1 + bne hook3_skip + lis r3, 0x8001 + lwz r3, [r3 - 0x3CD4] +hook3_skip: + mr. r8, r3 + blr +hooks_end: + + .data 0x80210BB8 + .data 0x00000004 + .address 0x80210BB8 + bl hook3 + + .data 0x80210C2C + .data 0x00000004 + .address 0x80210C2C + bl hook2 + + .data 0x8030C228 + .data 0x00000004 + .address 0x8030C228 + bl hook1 + + .data 0x8030C280 + .data 0x00000004 + .address 0x8030C280 + bl hook1 + + .data 0x80471804 + .data 0x00000004 + .address 0x80471804 + .data 0xFFFFFFFF + + .data 0x00000000 + .data 0x00000000