diff --git a/bookofmudora.asm b/bookofmudora.asm index 2321ca3..3030d34 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -58,9 +58,11 @@ GiveBonkItem: PHY : LDY.b #$24 : JSL.l AddInventory : PLY ; do inventory processing for a small key LDA $7EF36F : INC A : STA $7EF36F LDA.b #$2F : JSL.l Sound_SetSfx3PanLong + JSL CountBonkItem RTL .notKey PHY : TAY : JSL.l Link_ReceiveItem : PLY + JSL CountBonkItem RTL ;-------------------------------------------------------------------------------- LoadBonkItem: diff --git a/events.asm b/events.asm index a85ba7c..6f72a51 100644 --- a/events.asm +++ b/events.asm @@ -126,6 +126,11 @@ OnNewFile: DEX : DEX BPL - + LDX #$000E : - + LDA $7EF37C, X : STA $7EF4E0, X + DEX : DEX + BPL - + SEP #$20 ; set 8-bit accumulator ;LDA #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in LDA.l PreopenCurtains : BEQ + diff --git a/itemdowngrade.asm b/itemdowngrade.asm index 86a8cba..aab1763 100644 --- a/itemdowngrade.asm +++ b/itemdowngrade.asm @@ -2,6 +2,11 @@ ; Item Downgrade Fix ;-------------------------------------------------------------------------------- ItemDowngradeFix: + JSR ItemDowngradeFixMain + JSL CountChestKeyLong +RTL + +ItemDowngradeFixMain: JSL.l AddInventory BMI .dontWrite ; thing we wrote over part 1 @@ -27,7 +32,7 @@ ItemDowngradeFix: .done STA [$00] ; thing we wrote over part 2 .dontWrite -RTL +RTS .isPowerGloves .isBlueShield .isRedShield @@ -36,7 +41,7 @@ RTL .isBowAndArrows CMP [$00] : !BGE .done ; finished if we're upgrading LDA [$00] ; reload old value -RTL +RTS .isSilverArrowBow .isRedBoomerang .isMagicPowder @@ -47,10 +52,10 @@ RTL LDA [$00] : BNE + ; don't upgrade if we already have the toggle for it PLA STA [$00] - RTL + RTS + PLA -RTL +RTS .isFightersSword .isMasterSword .isTemperedSword diff --git a/stats.asm b/stats.asm index c453821..0afb25c 100644 --- a/stats.asm +++ b/stats.asm @@ -257,6 +257,40 @@ DecrementSmallKeys: JSL.l UpdateKeys RTL ;-------------------------------------------------------------------------------- +CountChestKeyLong: ; called from ItemDowngradeFix in itemdowngrade.asm + JSR CountChestKey +RTL +;-------------------------------------------------------------------------------- +CountChestKey: ; called by neighbor functions + PHA : PHX + CPY #$24 : BEQ + ; small key for this dungeon - use $040C + CPY #$A0 : !BLT .end ; Ignore most items + CPY #$AE : !BGE .end ; Ignore reserved key and generic key + TYA : AND.B #$0F : BNE ++ ; If this is a sewers key, instead count it as an HC key + INC + ++ TAX : BRA .count ; use Key id instead of $040C (Keysanity) + + LDA $040C : LSR : TAX + .count + LDA $7EF4E0, X : INC : STA $7EF4E0, X + .end + PLX : PLA +RTS +;-------------------------------------------------------------------------------- +CountBonkItem: ; called from GetBonkItem in bookofmudora.asm + LDA $A0 ; check room ID - only bonk keys in 2 rooms so we're just checking the lower byte + CMP #115 : BNE + ; Desert Bonk Key + LDA.L BonkKey_Desert : BRA ++ + + : CMP #140 : BNE + ; GTower Bonk Key + LDA.L BonkKey_GTower : BRA ++ + + LDA.B #$24 ; default to small key + ++ + CMP #$24 : BNE + + PHY + TAY : JSR CountChestKey + PLY + + +RTL +;-------------------------------------------------------------------------------- IncrementAgahnim2Sword: PHA LDA !LOCK_STATS : BNE +