diff options
Diffstat (limited to '')
-rw-r--r-- | src/switchblock.S | 58 | ||||
-rw-r--r-- | switchblock.yaml | 7 |
2 files changed, 65 insertions, 0 deletions
diff --git a/src/switchblock.S b/src/switchblock.S index fd192df..b86d5e2 100644 --- a/src/switchblock.S +++ b/src/switchblock.S @@ -13,6 +13,7 @@ .align 4 .extern GameMgr .extern BG_GM_ptr +.extern _restgpr_27 .global BG_GM_InitRedSwitchFlag_Patch BG_GM_InitRedSwitchFlag_Patch: @@ -25,6 +26,63 @@ BG_GM_InitRedSwitchFlag_Patch: stb r0, 0xAA8(r4) blr +.global CheckBehaviourOverride_EndPatch +CheckBehaviourOverride_EndPatch: + lis r5, BG_GM_ptr@h + ori r5, r5, BG_GM_ptr@l + lwz r5, 0(r5) + + # Get the switch value + addis r5, r5, 9 + lbz r5, 0xAA8(r5) + + # not sure why this happens + cmpwi r28, 0 + bne returnRegularBehaviour + + # now do the rest of the checks: + cmplwi r29, 0x58 + bne cboNotRed + andi. r3, r5, 1 + beq cboNotRed + b returnSbBehaviour +cboNotRed: + cmplwi r29, 0x5A + bne cboNotGreen + andi. r3, r5, 2 + beq cboNotGreen + b returnSbBehaviour +cboNotGreen: + cmplwi r29, 0x56 + bne cboNotYellow + andi. r3, r5, 4 + beq cboNotYellow + b returnSbBehaviour +cboNotYellow: + cmplwi r29, 0x54 + bne cboNotBlue + andi. r3, r5, 8 + beq cboNotBlue + b returnSbBehaviour +cboNotBlue: + b returnRegularBehaviour + + # done! +returnSbBehaviour: + li r4, 3 + li r3, 8 + b cboReturn +returnRegularBehaviour: + mr r4, r27 + mr r3, r28 +cboReturn: + addi r11, r1, 0x20 + bl _restgpr_27 + lwz r0, 0x24(r1) + mtlr r0 + addi r1, r1, 0x20 + blr + .global ProcessTileNum_EndPatch ProcessTileNum_EndPatch: lis r5, BG_GM_ptr@h diff --git a/switchblock.yaml b/switchblock.yaml index 20ecf24..6f142b2 100644 --- a/switchblock.yaml +++ b/switchblock.yaml @@ -23,3 +23,10 @@ hooks: branch_type: b
target_func: 'ProcessTileNum_EndPatch'
+ - name: CheckBehaviourOverride_EndPatch
+ type: branch_insn
+ src_addr_pal: 0x80081A4C
+ branch_type: b
+ target_func: 'CheckBehaviourOverride_EndPatch'
+
+
|