From 499d4dca77bb8978728041f4957448141e63f923 Mon Sep 17 00:00:00 2001 From: scawful Date: Sat, 19 Oct 2024 18:17:15 -0400 Subject: [PATCH] Update Librarian translation logic --- Sprites/NPCs/mermaid.asm | 109 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 2 deletions(-) diff --git a/Sprites/NPCs/mermaid.asm b/Sprites/NPCs/mermaid.asm index 3e332be..b5e408c 100644 --- a/Sprites/NPCs/mermaid.asm +++ b/Sprites/NPCs/mermaid.asm @@ -238,23 +238,128 @@ Sprite_Mermaid_Main: dw LibrarianIdle dw Librarian_OfferTranslation + dw Librarian_TranslateScroll + dw Librarian_FinishTranslation LibrarianIdle: { %PlayAnimation(0,1,16) JSL Sprite_PlayerCantPassThrough - %ShowSolicitedMessage($012E) + %ShowSolicitedMessage($012E) : BCC ++ + INC.w SprAction, X + ++ JSR Librarian_CheckForAllMaps : BCC + INC.w SprAction, X + RTS } + ; Bitfields for ownership of various dungeon items + ; SET 2 SET 1 + ; xced aspm wihb tg.. + ; c - Hyrule Castle + ; x - Sewers + ; a - Agahnim's Tower + ; + ; e - Eastern Palace + ; d - Desert Palace + ; h - Tower of Hera + ; + ; p - Palace of Darkness (Mushroom Grotto) + ; s - Swamp Palace (Tail Palace) + ; w - Skull Woods (Kalyxo Castle) + ; b - Thieves' Town (Zora Temple) + ; i - Ice Palace (Glacia Estate) + ; m - Misery Mire (Goron Mines) + ; t - Turtle Rock (Dragon Ship) + ; g - Ganon's Tower Librarian_OfferTranslation: { %PlayAnimation(0,1,16) JSL Sprite_PlayerCantPassThrough - %ShowSolicitedMessage($012C) + print pc + ; If there are no scrolls yet + LDA.l Scrolls : AND #$01 : BNE .NotMushroomGrotto + LDA.l DNGMAP2 : AND #%00000010 : BEQ .NotMushroomGrotto + LDA.l Scrolls : ORA #$01 : STA.l Scrolls + LDA.b #$01 : STA.w SprMiscG, X + JMP + + .NotMushroomGrotto + LDA.l Scrolls : AND #$02 : BNE .NotTailPalace + LDA.l DNGMAP2 : AND #%00000100 : BEQ .NotTailPalace + LDA.l Scrolls : ORA #$02 : STA.l Scrolls + LDA.b #$02 : STA.w SprMiscG, X + JMP + + .NotTailPalace + LDA.l Scrolls : AND #$04 : BNE .NotKalyxoCastle + LDA.l DNGMAP1 : AND #%10000000 : BEQ .NotKalyxoCastle + LDA.l Scrolls : ORA #$04 : STA.l Scrolls + LDA.b #$03 : STA.w SprMiscG, X + JMP + + .NotKalyxoCastle + LDA.l Scrolls : AND #$08 : BNE .NotZoraTemple + LDA.l DNGMAP1 : AND #%00010000 : BEQ .NotZoraTemple + LDA.l Scrolls : ORA #$08 : STA.l Scrolls + LDA.b #$04 : STA.w SprMiscG, X + JMP + + .NotZoraTemple + LDA.l Scrolls : AND #$10 : BNE .NotIcePalace + LDA.l DNGMAP1 : AND #%01000000 : BEQ .NotIcePalace + LDA.l Scrolls : ORA #$10 : STA.l Scrolls + LDA.b #$05 : STA.w SprMiscG, X + JMP + + .NotIcePalace + LDA.l Scrolls : AND #$20 : BNE .NotGoronMines + LDA.l DNGMAP2 : AND #%00000001 : BEQ .NotGoronMines + LDA.l Scrolls : ORA #$20 : STA.l Scrolls + LDA.b #$06 : STA.w SprMiscG, X + JMP + + .NotGoronMines + LDA.l Scrolls : AND #$40 : BNE .NotDragonShip + LDA.l DNGMAP1 : AND #%00001000 : BEQ .NotDragonShip + LDA.l Scrolls : ORA #$40 : STA.l Scrolls + LDA.b #$07 : STA.w SprMiscG, X + JMP + + .NotDragonShip + STZ.w SprAction, X + RTS + + + + INC.w SprAction, X + RTS + } + + Librarian_TranslateScroll: + { + %PlayAnimation(0,1,16) + + PHX + LDY.b #$01 + LDA.w SprMiscG, X + ASL A : TAX + LDA.w .scroll_messages, X + JSL Sprite_ShowMessageUnconditional + PLX + + INC.w SprAction, X + + RTS + + .scroll_messages + dw $0199 + dw $019A + dw $019B + dw $019C + dw $019D + dw $019E + dw $019F + } + + Librarian_FinishTranslation: + { + %PlayAnimation(0,1,16) + %ShowUnconditionalMessage($01A2) + STZ.w SprAction, X RTS } }