From a304b96bc01af08e686187a9db4f8f449eb4f987 Mon Sep 17 00:00:00 2001 From: scawful Date: Fri, 20 Dec 2024 11:00:31 -0500 Subject: [PATCH] Add BottleVendor sells milk, remove behavior from Maple witch --- Sprites/NPCs/bottle_vendor.asm | 109 +++++++++++++++++++++++++++++++++ Sprites/NPCs/mermaid.asm | 76 +++-------------------- Sprites/all_sprites.asm | 3 + 3 files changed, 119 insertions(+), 69 deletions(-) create mode 100644 Sprites/NPCs/bottle_vendor.asm diff --git a/Sprites/NPCs/bottle_vendor.asm b/Sprites/NPCs/bottle_vendor.asm new file mode 100644 index 0000000..bf4278f --- /dev/null +++ b/Sprites/NPCs/bottle_vendor.asm @@ -0,0 +1,109 @@ + +pushpc +; BottleVendor_OutOfStock +org $05EAC2 : JSL BottleVendor_MilkHandler +pullpc + +BottleVendor_MilkHandler: +{ + LDA.l $7EF34C : BNE + + LDA.b #$D4 + JSL Sprite_ShowSolicitedMessage + RTL + + + JSR BottleVendor_SellMilk + RTL +} + +BottleVendor_SellMilk: +{ + LDA.w SprMiscA, X + JSL JumpTableLocal + + dw BottleVendor_Idle + dw BottleVendor_BoughtMilkBottle + dw BottleVendor_NotEnoughRupees + dw BottleVendor_HandlePlayerResponse + dw BottleVendor_ComeBackAgain + dw BottleVendor_NoAvailableBottles + + BottleVendor_Idle: + { + %PlayAnimation(0,1,16) + JSL Sprite_PlayerCantPassThrough + + %ShowSolicitedMessage($0187) : BCC .didnt_talk + LDA.b #$03 : STA.w SprMiscA, X + .didnt_talk + RTS + } + + BottleVendor_BoughtMilkBottle: + { + REP #$20 + LDA.l $7EF360 : CMP.w #$1E ; 30 rupees + SEP #$30 + BCC .not_enough_rupees + + LDA.l $7EF35C : CMP.b #$02 : BEQ .bottle1_available + LDA.l $7EF35D : CMP.b #$02 : BEQ .bottle2_available + LDA.l $7EF35E : CMP.b #$02 : BEQ .bottle3_available + LDA.l $7EF35F : CMP.b #$02 : BEQ .bottle4_available + LDA.b #$05 : STA.w SprMiscA, X + RTS + + .bottle1_available + LDA.b #$0A : STA.l $7EF35C : JMP .finish_storage + .bottle2_available + LDA.b #$0A : STA.l $7EF35D : JMP .finish_storage + .bottle3_available + LDA.b #$0A : STA.l $7EF35E : JMP .finish_storage + .bottle4_available + LDA.b #$0A : STA.l $7EF35F + .finish_storage + REP #$20 + LDA.l $7EF360 + SEC : SBC.w #$1E ; Subtract 30 rupees + STA.l $7EF360 + SEP #$30 + + %ShowUnconditionalMessage($0188) ; Thank you! + STZ.w SprMiscA, X + RTS + .not_enough_rupees + LDA.b #$02 : STA.w SprMiscA, X + RTS + } + + BottleVendor_NotEnoughRupees: + { + %ShowUnconditionalMessage($0189) ; You don't have enough rupees! + STZ.w SprMiscA, X + RTS + } + + BottleVendor_HandlePlayerResponse: + { + LDA $1CE8 : BEQ .player_said_yes + LDA.b #$04 : STA.w SprMiscA, X + RTS + .player_said_yes + LDA.b #$01 : STA.w SprMiscA, X + RTS + } + + BottleVendor_ComeBackAgain: + { + %ShowUnconditionalMessage($018B) ; Come back again! + STZ.w SprMiscA, X + RTS + } + + BottleVendor_NoAvailableBottles: + { + %ShowUnconditionalMessage($033) + STZ.w SprMiscA, X + SEC + RTS + } +} diff --git a/Sprites/NPCs/mermaid.asm b/Sprites/NPCs/mermaid.asm index f7bcc98..e333e7f 100644 --- a/Sprites/NPCs/mermaid.asm +++ b/Sprites/NPCs/mermaid.asm @@ -145,82 +145,20 @@ Sprite_Mermaid_Main: LDA.w SprAction, X JSL JumpTableLocal - dw MapleIdle - dw Maple_BoughtMilkBottle - dw Maple_NotEnoughRupees - dw Maple_HandlePlayerResponse - dw Maple_ComeBackAgain + dw Maple_Idle + dw Maple_HandleDreams - MapleIdle: + Maple_Idle: { %PlayAnimation(0,1,16) - JSL Sprite_PlayerCantPassThrough - - %ShowSolicitedMessage($0187) : BCC .didnt_talk - %GotoAction(3) ; Handle player response - .didnt_talk + %ShowSolicitedMessage($0187) : BCC + + INC.w SprAction, X + + RTS } - Maple_BoughtMilkBottle: + Maple_HandleDreams: { - REP #$20 - LDA.l $7EF360 : CMP.w #$1E ; 30 rupees - SEP #$30 - BCC .not_enough_rupees - - LDA.l $7EF35C : CMP.b #$02 : BEQ .bottle1_available - LDA.l $7EF35D : CMP.b #$02 : BEQ .bottle2_available - LDA.l $7EF35E : CMP.b #$02 : BEQ .bottle3_available - LDA.l $7EF35F : CMP.b #$02 : BEQ .bottle4_available - %ShowUnconditionalMessage($033) - %GotoAction(0) - RTS - - .bottle1_available - LDA.b #$0A : STA.l $7EF35C : JMP .finish_storage - .bottle2_available - LDA.b #$0A : STA.l $7EF35D : JMP .finish_storage - .bottle3_available - LDA.b #$0A : STA.l $7EF35E : JMP .finish_storage - .bottle4_available - LDA.b #$0A : STA.l $7EF35F - .finish_storage - REP #$20 - LDA.l $7EF360 - SEC : SBC.w #$1E ; Subtract 30 rupees - STA.l $7EF360 - SEP #$30 - - %ShowUnconditionalMessage($0188) ; Thank you! - %GotoAction(0) - RTS - .not_enough_rupees - %GotoAction(2) - RTS - } - - Maple_NotEnoughRupees: - { - %ShowUnconditionalMessage($0189) ; You don't have enough rupees! - %GotoAction(0) - RTS - } - - Maple_HandlePlayerResponse: - { - LDA $1CE8 : BEQ .player_said_yes - %GotoAction(4) - RTS - .player_said_yes - %GotoAction(1) - RTS - } - - Maple_ComeBackAgain: - { - %ShowUnconditionalMessage($018B) ; Come back again! - %GotoAction(0) RTS } } diff --git a/Sprites/all_sprites.asm b/Sprites/all_sprites.asm index 80c2b54..39ef9f8 100644 --- a/Sprites/all_sprites.asm +++ b/Sprites/all_sprites.asm @@ -67,6 +67,9 @@ Sprite_Vasu = $D7 incsrc "Sprites/NPCs/vasu.asm" print "End of vasu.asm ", pc +incsrc "Sprites/NPCs/bottle_vendor.asm" +print "End of bottle_vendor.asm ", pc + incsrc "Sprites/Enemies/leever.asm" print "End of leever.asm ", pc