diff --git a/ASM/src/build.asm b/ASM/src/build.asm index 382ca58da..e53ea4dd5 100644 --- a/ASM/src/build.asm +++ b/ASM/src/build.asm @@ -133,7 +133,7 @@ RANDO_CONTEXT: .include "en_dns.asm" .include "bg_gate_shutter.asm" .include "big_poe.asm" -.include "player_ladder_cutscene.asm" +.include "player_laddercutscenefix.asm" .align 0x10 .importobj "../build/bundle.o" diff --git a/ASM/src/hacks/z_player.asm b/ASM/src/hacks/z_player.asm index 815d1c579..d52a31bd3 100644 --- a/ASM/src/hacks/z_player.asm +++ b/ASM/src/hacks/z_player.asm @@ -1,10 +1,14 @@ -.headersize(0x808301c0 - 0xbcdb70) +.headersize (0x808301c0 - 0xbcdb70) ;================================================================================ ; Fixes softlock when starting cutscene while dismounting a ladder. ;================================================================================ -; Replaces lw t8,1644(s0) -; lui at,0xffdf +; Replaces lw t8,1644(s0) +; lui at,0xffdf +; ori at,at,0xffff +; and t9,t8,at .org 0x8084a6c4 ; in Player_Action_DismountLadder (0x803a3064) - jal player_ladder_cutscene + jal Player_LadderCutsceneFix + lw t8,1644(s0) ; displaced + bnez v0,0x8084a6e0 ; branch to load LinkAnimation argument if in CS/using CS item nop diff --git a/ASM/src/player_ladder_cutscene.asm b/ASM/src/player_ladder_cutscene.asm deleted file mode 100644 index f5111bdd4..000000000 --- a/ASM/src/player_ladder_cutscene.asm +++ /dev/null @@ -1,11 +0,0 @@ -player_ladder_cutscene: - lbu t4,1693(s0) ; player->unk_6AD - addi t3,t4,-3 ; Cutscene = 3, CS item = 4 - bltz t3,@@player_ladder_return ; If not CS/CS item, continue as usual - nop - addi ra,0x14 ; Else, continue at 0x8084a6e0/0x803a3080 (load argument to LinkAnimation_Update) - -@@player_ladder_return: ; Original code - lw t8,1644(s0) - jr ra - lui at,0xffdf diff --git a/ASM/src/player_laddercutscenefix.asm b/ASM/src/player_laddercutscenefix.asm new file mode 100644 index 000000000..827b03919 --- /dev/null +++ b/ASM/src/player_laddercutscenefix.asm @@ -0,0 +1,11 @@ +Player_LadderCutsceneFix: + lbu t4,1693(s0) ; player->unk_6AD + addi t3,t4,-3 ; Cutscene = 3, CS item = 4 + bltzl t3,@@Return ; If not CS/CS item, continue as usual + li v0,0 ; 0 for no branching + li v0,1 ; Otherwise, 1 for branching +@@Return: + lui at,0xffdf ; displaced + ori at,at,0xffff ; displaced + jr ra + and t9,t8,at ; displaced