From d816858c8e5cccbe66d3a45c90fe96d7cfc0b8a9 Mon Sep 17 00:00:00 2001 From: scawful Date: Sun, 22 Dec 2024 17:22:59 -0500 Subject: [PATCH] Update Maple dream logic --- Sprites/NPCs/maple.asm | 104 +++++++++++++++++++++++++++++++++++------ 1 file changed, 90 insertions(+), 14 deletions(-) diff --git a/Sprites/NPCs/maple.asm b/Sprites/NPCs/maple.asm index a41bbf8..5680abd 100644 --- a/Sprites/NPCs/maple.asm +++ b/Sprites/NPCs/maple.asm @@ -7,11 +7,14 @@ MapleHandler: JSL JumpTableLocal dw Maple_Idle - dw Maple_FirstResponse + dw Maple_HandleFirstResponse + dw Maple_DreamOrExplain dw Maple_ExplainHut dw Maple_ExplainPendants dw Maple_CheckForPendant dw Maple_NoNewPendant + dw Maple_PutLinkToSleep + dw Maple_HandleDreams ; LDA.l $7EF351 : BEQ + ; LDA.b #$02 : STA.l $7EF351 @@ -22,25 +25,34 @@ MapleHandler: Maple_Idle: { %ShowSolicitedMessage($01B3) : BCC + - LDA.w $1CE8 : BEQ .next_response - CMP.b #$01 : BNE + - LDA.b #$02 : STA.w SprAction, X - RTS - .next_response INC.w SprAction, X + RTS } - Maple_FirstResponse: + Maple_HandleFirstResponse: + { + LDA.w $1CE8 : CMP.b #$02 : BNE + + STZ.w SprAction, X + RTS + + + CMP.b #$01 : BNE .next_response + LDA.b #$03 : STA.w SprAction, X + RTS + .next_response + INC.w SprAction, X + RTS + } + + Maple_DreamOrExplain: { %ShowUnconditionalMessage($01B4) LDA.w $1CE8 : BEQ .check_for_pendant CMP.b #$01 : BNE .another_time - LDA.b #$03 : STA.w SprAction, X + LDA.b #$04 : STA.w SprAction, X RTS .check_for_pendant - LDA.b #$04 : STA.w SprAction, X + LDA.b #$05 : STA.w SprAction, X RTS .another_time @@ -64,8 +76,28 @@ MapleHandler: Maple_CheckForPendant: { + print pc ; Check for pendant + LDA.l PENDANTS : AND.b #$04 : BNE .courage + LDA.l PENDANTS : AND.b #$02 : BNE .power + LDA.l PENDANTS : AND.b #$01 : BNE .wisdom + JMP .none + .courage + LDA.l Dreams : AND.b #$04 : BNE .power + LDA.b #$02 : STA.w CurrentDream : BRA + + .power + LDA.l Dreams : AND.b #$02 : BNE .wisdom + LDA.b #$01 : STA.w CurrentDream : BRA + + .wisdom + LDA.l Dreams : AND.b #$01 : BNE .none + STZ.w CurrentDream + + %ShowUnconditionalMessage($01B6) + LDA.b #$07 : STA.w SprAction, X + LDA.b #$40 : STA.w SprTimerA, X + RTS + .none + INC.w SprAction, X RTS } @@ -75,11 +107,29 @@ MapleHandler: STZ.w SprAction, X RTS } + + Maple_PutLinkToSleep: + { + JSR Sprite_PutLinkToSleep + INC.w SprAction, X + RTS + } + + Maple_HandleDreams: + { + LDA.w SprTimerA, X : BNE + + JSR Link_HandleDreams + + + RTS + } } Sprite_PutLinkToSleep: { PHX + LDA.b $20 : SEC : SBC.b #$14 : STA.b $20 + LDA.b $22 : CLC : ADC.b #$18 : STA.b $22 + LDA.b #$16 : STA.b $5D ; Set Link to sleeping LDA.b #$20 : JSL AncillaAdd_Blanket LDA.b $20 : CLC : ADC.b #$04 : STA.w $0BFA,X @@ -103,27 +153,47 @@ Link_HandleDreams: Dream_Wisdom: { - LDA.l DREAMS : ORA.b #%00000001 : STA.l DREAMS + LDA.l Dreams : ORA.b #%00000001 : STA.l Dreams LDX.b #$00 - JSR Link_FallIntoDungeon + JSR Link_WarpToRoom RTS } Dream_Power: { - LDA.l DREAMS : ORA.b #%00000010 : STA.l DREAMS + LDA.l Dreams : ORA.b #%00000010 : STA.l Dreams LDX.b #$01 - JSR Link_FallIntoDungeon + JSR Link_WarpToRoom RTS } Dream_Courage: { - LDA.l DREAMS : ORA.b #%00000100 : STA.l DREAMS + LDA.l Dreams : ORA.b #%00000100 : STA.l Dreams + LDX.b #$02 + JSR Link_WarpToRoom RTS } } +Link_WarpToRoom: +{ + LDA.b #$20 : STA.b $5C + LDA.b #$01 : STA.b LinkState + + LDA.b #$15 : STA.b $11 + LDA.b $A0 : STA.b $A2 + STZ.b $A1 + LDA.w .room, X : STA.b $A0 + ; STA.l $7EC000 + RTS + + .room + db $61 + db $00 + db $31 +} + ; Takes X as argument for the entrance ID Link_FallIntoDungeon: { @@ -137,9 +207,15 @@ Link_FallIntoDungeon: STZ.b $11 : STZ.b $B0 RTS + .entrance db $78 ; 0x00 - Deku Dream db $79 ; 0x01 - Castle Dream db $7A ; 0x02 - db $81 ; 0x03 } + +pushpc +org $068C9C +db $0F +pullpc