diff --git a/Menu/menu_hud.asm b/Menu/menu_hud.asm index 7f293fe..5824d8f 100644 --- a/Menu/menu_hud.asm +++ b/Menu/menu_hud.asm @@ -21,10 +21,53 @@ org $0DF1BC JSL HUD_AnimateHeartRefill RTS +org $0DFC09 + JSL HUD_Update_ignoreHealth + RTS + +; ============================================================================== +; New Code Region Starts Here + +org $268000 + +; ============================================================================= + +; .full_tile +; dw $3C5F +; .mostly_full +; dw $3C4D +; .kinda_full +; dw $3C4E +; .half_empty +; dw $3C4F +; .almost_empty +; dw $3C 5E +; .empty_tile +; dw $3C4C + + +MagicTilemap: + dw $3C4C, $3C4C, $3C4C, $3C4C + dw $3C4C, $3C4C, $3C4C, $3C5F + dw $3C4C, $3C4C, $3C4C, $3C4C + dw $3C4C, $3C4C, $3C4C, $3C4D + dw $3C4C, $3C4C, $3C4C, $3C4E + dw $3C4C, $3C4C, $3C5F, $3C5F + dw $3C4C, $3C4C, $3C4C, $3C5F + dw $3C4C, $3C4C, $3C4D, $3C5F + dw $3C4C, $3C4C, $3C4E, $3C5F + dw $3C4C, $3C5F, $3C5F, $3C5F + dw $3C4C, $3C4C, $3C5F, $3C5F + dw $3C4C, $3C4D, $3C5F, $3C5F + dw $3C4C, $3C4E, $3C5F, $3C5F + dw $3C5F, $3C5F, $3C5F, $3C5F + dw $3C4C, $3C5F, $3C5F, $3C5F + dw $3C4D, $3C5F, $3C5F, $3C5F + dw $3C4E, $3C5F, $3C5F, $3C5F + ; ============================================================================== ; Main HUD Update Loop -org $268000 HUD_Update: { JSR HUD_UpdateItemBox @@ -98,11 +141,19 @@ HUD_Update: LDA $7EF36E : AND.w #$00FF : CLC : ADC #$0007 : AND.w #$FFF8 : TAX ; these four writes draw the magic power bar based on how much MP you have - LDA MagicTilemap+0, X : STA $7EC76C - LDA MagicTilemap+2, X : STA $7EC76D - LDA MagicTilemap+4, X : STA $7EC76E - LDA MagicTilemap+6, X : STA $7EC76F + + ; LDA MagicTilemap+0, X : STA $7EC76A + ; LDA MagicTilemap+2, X : STA $7EC76D + ; LDA MagicTilemap+4, X : STA $7EC76D + ; LDA MagicTilemap+6, X : STA $7EC76F + ; LDA MagicTilemap+8, X : STA $7EC771 + ; LDA #$3C4C : STA $7EC76A + ; LDA #$3C4C : STA $7EC76E + ; LDA #$3C4C : STA $7EC773 + ; LDA #$3C4C : STA $7EC777 + ; LDA #$3C4C : STA $7EC78B + ; Load how many rupees the player has LDA $7EF362 @@ -120,8 +171,7 @@ HUD_Update: LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC7A0 ; Check if the user has bombs equipped - LDX $0202 - LDA $7EF33F, X : AND.w #$00FF + LDX $0202 : LDA $7EF33F, X : AND.w #$00FF CPX.w #$0004 : BNE .not_bombs ; Number of bombs Link has. @@ -137,8 +187,7 @@ HUD_Update: .not_bombs ; Check if the user has arrows equipped - LDX $0202 - LDA $7EF33F, X : AND.w #$00FF + LDX $0202 : LDA $7EF33F, X : AND.w #$00FF CPX.w #$0001 : BNE .not_arrows ; Number of Arrows Link has. @@ -156,7 +205,7 @@ HUD_Update: .not_arrows LDA.w #$007F : STA $05 - + ; Load number of Keys Link has LDA $7EF36F : AND.w #$00FF : CMP.w #$00FF : BEQ .noKeys JSR HexToDecimal @@ -176,276 +225,6 @@ HUD_Update: RTL } -; ============================================================================= -; *$6DB92-$6DD29 BRANCH LOCATION - -HUD_RefillLogic: -{ - ; check the refill magic indicator - LDA $7EF373 - - BEQ .doneWithMagicRefill - - ; Check the current magic power level we have. - ; Is it full? - LDA $7EF36E : CMP.b #$80 - - BCC .magicNotFull - - ; If it is full, freeze it at 128 magic pts. - ; And stop this refilling nonsense. - LDA.b #$80 : STA $7EF36E - LDA.b #$00 : STA $7EF373 - - BRA .doneWithMagicRefill - -.magicNotFull - - LDA $7EF373 : DEC A : STA $7EF373 - LDA $7EF36E : INC A : STA $7EF36E - - ; if((frame_counter % 4) != 0) don't refill this frame - LDA $1A : AND.b #$03 : BNE .doneWithMagicRefill - - ; Is this sound channel in use? - LDA $012E : BNE .doneWithMagicRefill - - ; Play the magic refill sound effect - LDA.b #$2D : STA $012E - -.doneWithMagicRefill - - REP #$30 - ; Check current rupees (362) against goal rupees (360) - ; goal refers to how many we really have and current refers to the - ; number currently being displayed. When you buy something, - ; goal rupees are decreased by, say, 100, but it takes a while for the - ; current rupees indicator to catch up. When you get a gift of 300 - ; rupees, the goal increases, and current has to catch up in the other direction. - LDA $7EF362 - - CMP $7EF360 : BEQ .doneWithRupeesRefill - BMI .addRupees - DEC A : BPL .subtractRupees - - LDA.w #$0000 : STA $7EF360 - - BRA .subtractRupees - -.addRupees - - ; If current rupees <= 1000 (decimal) - INC A : CMP.w #1000 : BCC .subtractRupees - - ; Otherwise just store 999 to the rupee amount - LDA.w #999 : STA $7EF360 - -.subtractRupees - - STA $7EF362 - - SEP #$30 - - LDA $012E : BNE .doneWithRupeesRefill - - ; looks like a delay counter of some sort between - ; invocations of the rupee fill sound effect - LDA $0CFD : INC $0CFD : AND.b #$07 : BNE .skipRupeeSound - - LDA.b #$29 : STA $012E - - BRA .skipRupeeSound - -.doneWithRupeesRefill - - SEP #$30 - - STZ $0CFD - -.skipRupeeSound - - LDA $7EF375 - - BEQ .doneRefillingBombs - - ; decrease the bomb refill counter - LDA $7EF375 : DEC A : STA $7EF375 - - ; use the bomb upgrade index to know what max number of bombs Link can carry is - LDA $7EF370 : TAY - - ; if it matches the max, you can't have no more bombs, son. It's the law. - LDA $7EF343 : CMP $DB48, Y : BEQ .doneRefillingBombs - - ; You like bombs? I got lotsa bombs! - INC A : STA $7EF343 - -.doneRefillingBombs - - ; check arrow refill counter - LDA $7EF376 - - BEQ .doneRefillingArrows - - LDA $7EF376 : DEC A : STA $7EF376 - - ; check arrow upgrade index to see how our max limit on arrows, just like bombs. - LDA $7EF371 : TAY - - LDA $7EF377 : CMP $DB58, Y - - ; I reckon you get no more arrows, pardner. - BEQ .arrowsAtMax - - INC A : STA $7EF377 - -.arrowsAtMax - - ; see if we even have the bow. - LDA $7EF340 - - BEQ .doneRefillingArrows - - AND.b #$01 : CMP.b #$01 - - BNE .doneRefillingArrows - - ; changes the icon from a bow without arrows to a bow with arrows. - LDA $7EF340 : INC A : STA $7EF340 - - JSL $0DDB7F - -.doneRefillingArrows - - ; a frozen Link is an impervious Link, so don't beep. - LDA $02E4 - - BNE .doneWithWarningBeep - - ; if heart refill is in process, we don't beep - LDA $7EF372 - - BNE .doneWithWarningBeep - - LDA $7EF36C : LSR #3 : TAX - - ; checking current health against capacity health to see - ; if we need to put on that annoying beeping noise. - LDA $7EF36D : CMP $DB60, X - - BCS .doneWithWarningBeep - - LDA $04CA - - BNE .decrementBeepTimer - - ; beep incessantly when life is low - LDA $012E - - BNE .doneWithWarningBeep - - LDA.b #$20 : STA $04CA - LDA.b #$2B : STA $012E - -.decrementBeepTimer - - ; Timer for the low life beep sound - DEC $04CA - -.doneWithWarningBeep - - ; if nonzero, indicates that a heart is being "flipped" over - ; as in, filling up, currently - LDA $020A - - BNE .waitForHeartFillAnimation - - ; If no hearts need to be filled, branch - LDA $7EF372 - - BEQ .doneRefillingHearts - - ; check if actual health matches capacity health - LDA $7EF36D : CMP $7EF36C - - BCC .notAtFullHealth - - ; just set health to full in the event it overflowed past 0xA0 (20 hearts) - LDA $7EF36C : STA $7EF36D - - ; done refilling health so deactivate the health refill variable - LDA.b #$00 : STA $7EF372 - - BRA .doneRefillingHearts - -.notAtFullHealth - - ; refill health by one heart - LDA $7EF36D : CLC : ADC.b #$08 : STA $7EF36D - - LDA $012F - - BNE .soundChannelInUse - - ; play heart refill sound effect - LDA.b #$0D : STA $012F - -.soundChannelInUse - - ; repeat the same logic from earlier, checking if health's at max and setting it to max - ; if it overflowed - LDA $7EF36D : CMP $7EF36C - - BCC .healthDidntOverflow - - LDA $7EF36C : STA $7EF36D - -.healthDidntOverflow - - ; subtract a heart from the refill variable - LDA $7EF372 : SEC : SBC.b #$08 : STA $7EF372 - - ; activate heart refill animation - ; (which will cause a small delay for the next heart if we still need to fill some up.) - INC $020A - - LDA.b #$07 : STA $0208 - -.waitForHeartFillAnimation - - REP #$30 - - LDA.w #$FFFF : STA $0E - - JSL HUD_Update_ignoreHealth - - JSL HUD_AnimateHeartRefill - - SEP #$30 - - INC $16 - - PLB - - RTL - -.doneRefillingHearts - - REP #$30 - - LDA.w #$FFFF : STA $0E - - JSL HUD_Update_ignoreItemBox - - SEP #$30 - - INC $16 - - PLB - - RTL -} - ; ============================================================================= ; *$6F14F-$6F1B2 LOCAL @@ -621,27 +400,6 @@ HUD_UpdateHearts: ; ============================================================================= -MagicTilemap: - dw $3CF5, $3CF5, $3CF5, $3CF5 - dw $3CF5, $3CF5, $3CF5, $3C5F - dw $3CF5, $3CF5, $3CF5, $3C4C - dw $3CF5, $3CF5, $3CF5, $3C4D - dw $3CF5, $3CF5, $3CF5, $3C4E - dw $3CF5, $3CF5, $3C5F, $3C5E - dw $3CF5, $3CF5, $3C4C, $3C5E - dw $3CF5, $3CF5, $3C4D, $3C5E - dw $3CF5, $3CF5, $3C4E, $3C5E - dw $3CF5, $3C5F, $3C5E, $3C5E - dw $3CF5, $3C4C, $3C5E, $3C5E - dw $3CF5, $3C4D, $3C5E, $3C5E - dw $3CF5, $3C4E, $3C5E, $3C5E - dw $3C5F, $3C5E, $3C5E, $3C5E - dw $3C4C, $3C5E, $3C5E, $3C5E - dw $3C4D, $3C5E, $3C5E, $3C5E - dw $3C4E, $3C5E, $3C5E, $3C5E - -; ============================================================================= - HexToDecimal: { REP #$30