diff --git a/Items/bottle_net.asm b/Items/bottle_net.asm index fd858c0..ac08930 100644 --- a/Items/bottle_net.asm +++ b/Items/bottle_net.asm @@ -2,12 +2,6 @@ ; Bottle Net Code ; ============================================================================= -org $07B073 -Link_CheckNewY_ButtonPress: - -org $078028 -Player_DoSfx2: - org $1EFE33 PlayerItem_SpawnFaerie: @@ -18,123 +12,9 @@ PlayerItem_ReleaseBee: ; LinkItem_Bottle org $07A15B - JMP $FFA0 ; Local Bank Conditional - -; ============================================================================= -; $07FFA0 - -org $07FFA0 -{ - LDA $030D - - BNE $07FFBD - LDA $0300 - BNE $07FFBD - LDA $7F5020 - TAX - LDA $7EF35B, X - CMP #$02 - BEQ $07FFBD - JSR $B073 - JMP $A15E - -; 07FFBD - JMP $AFF8 ; LinkItem_BugCatchingNet - JMP $FAF0 ; - NOP - JSR $B073 - STZ $030F + JSL LinkItem_NewBottle RTS -} - -; ============================================================================= -; LinkItem_BugCatchingNet - -org $07AFF8 -{ - BIT $3A - BVS $07B029 - LDA $6C - BNE $07AFB4 - JSR $B073 - BCC $07AFB4 - LDA $2F - LSR - TAY - LDX $AFF4,Y - LDA $AFCC,X - STA $0300 - LDA #$03 - STA $3D - STZ $030D - LDA #$10 - STA $037A - JSL $8EFEF0 - STZ $2E - LDA #$32 - JSR $8028 - JSR $AE65 - LDA $67 - AND #$F0 - STA $67 - DEC $3D - BPL $07B072 - LDX $030D - INX - STX $030D - LDA #$03 - STA $3D - LDA $2F - LSR - TAY - LDA $AFF4,Y - CLC - ADC $030D - TAY - LDA $AFCC,Y - STA $0300 - CPX #$0A - BNE $07B072 - STZ $030D - STZ $0300 - LDA $3A - AND #$80 - STA $3A - STZ $037A - JSL $8EFEF8 - STA $50 - LDA #$80 - STA $44 - STA $45 - RTS -} - -; 07B073 -org $07B073 -{ - BIT $3A - BVS $07B085 - LDA $46 - BNE $07B085 - LDA $F4 - AND #$40 - BEQ $07B085 - TSB $3A - SEC - RTS - -; 07B085 -org $07B085 - CLC - RTS -} - -; $8EFEF0 - LDA #$01 - TSB $50 - STA $0112 - RTL - +; *$3A15B-$3A249 FREE SPACE STILL AVAILABLE ; ============================================================================= @@ -148,122 +28,28 @@ LinkItem_NewBottle: ; Check if the bottle is empty CMP.b #$03 : BCC .empty_bottle - ; If so, prepare and call the LinkItem_Bottles routine - JSR LinkItem_Bottles + ; If no, prepare and call the LinkItem_Bottles routine + JSL LinkItem_Bottles_Long + BRA .exit .empty_bottle - ; Otherwise, prepare and call the LinkItem_BugCatchingNet routien - JSR LinkItem_BugCatchingNet - + ; Otherwise, prepare and call the LinkItem_BugCatchingNet routine + JSL LinkItem_BugCatchingNet_Long + .exit RTL } ; ============================================================================= -; *$3A15B-$3A249 JUMP LOCATION -LinkItem_Bottles: +org $07FA9F +LinkItem_BugCatchingNet_Long: { - LDA.b $3A : AND.b #$BF : STA.b $3A - - ; Check if we have a bottle or not - LDA.l $7EF34F : DEC A : TAX - - LDA.l $7EF35C, X : BEQ .exit ; (RTS) - CMP.b #$03 : BCC .LinkItem_UselessBottle - CMP.b #$03 : BEQ .LinkItem_RedPotion - CMP.b #$04 : BEQ .LinkItem_GreenPotion - CMP.b #$05 : BEQ .LinkItem_BluePotion - CMP.b #$06 : BEQ .fairy - - BRL .LinkItem_BeeBottle - -.exit - RTS - -.fairy: - BRL .LinkItem_FairyBottle - -.LinkItem_RedPotion: - LDA.l $7EF36C : CMP.l $7EF36D : BNE .can_drink_red - -.LinkItem_UselessBottle: - BRL $07A955 ; LinkGoBeep TODO(scawful): Investigate - -.can_drink_red: - LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301 - - LDA.b #$04 : STA.b $11 - LDA.b $10 : STA.w $010C - LDA.b #$0E : STA.b $10 - LDA.b #$07 : STA.w $0208 - - JSL $0DFA58 - - RTS - -.LinkItem_GreenPotion: - LDA $7EF36E : CMP.b #$80 : BNE .can_drink - BRL $07A955 ; LinkGoBeep TODO(scawful): Investigate - -.can_drink: - LDA $02 : STA $7EF35C, X : STZ $0301 - - ; submodule ???? - LDA.b #$08 : STA $11 - LDA $10 : STA $010C - - ; Go to text mode - LDA.b #$0E : STA $10 - LDA.b #$07 : STA $0208 - - JSL $0DFA58 ; RebuildHUD_long TODO(scawful) - BRA .bottle_exit - -.LinkItem_BluePotion: - LDA $7EF36C : CMP $7EF36D : BNE .useBluePotion - LDA $7EF36E : CMP.b #$80 : BNE .useBluePotion - BRL $07A955 - -.useBluePotion - LDA.b #$02 : STA $7EF35C, X : STZ $0301 - - ; more submodule code - LDA.b #$09 : STA.b $11 - LDA.b $10 : STA.w $010C - - ; Go to text mode (?) - LDA.b #$0E : STA.b $10 - LDA.b #$07 : STA.w $0208 - - JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) - BRA .bottle_exit - -.LinkItem_FairyBottle: - STZ.w $0301 - JSL PlayerItem_SpawnFaerie : BPL .BRANCH_NU - BRL $07A955 - -.BRANCH_NU: - LDA.b #$02 : STA.l $7EF35C, X - JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) - BRA .bottle_exit - -.LinkItem_BeeBottle: - STZ.w $0301 - JSL PlayerItem_ReleaseBee : BPL .bee_spawn_success - BRL $07A955 ; LinkGoBeep - -.bee_spawn_success - LDA.b #$02 : STA.l $7EF35C, X - JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) - -.bottle_exit: - RTS + PHB : PHK : PLB + JSR LinkItem_NewBugCatchingNet + PLB + RTL } - -; ============================================================================= - pose_id: db $0B, $06, $07, $08, $01, $02, $03, $04, $05, $06 ; up db $01, $02, $03, $04, $05, $06, $07, $08, $01, $02 ; down @@ -277,8 +63,15 @@ pose_offset: db $1E ; right ; *$3AFF8-$3B072 LOCAL -LinkItem_BugCatchingNet: + +LinkItem_NewBugCatchingNet: { + BIT $3A : BVS .y_press + + LDA $6C : BNE .bottle_exit ; (RTS) + + JSR Link_CheckNewY_ButtonPress : BCC .bottle_exit ; (RTS) + LDA $2F : LSR A : TAY LDX pose_offset, Y LDA pose_id, X : STA $0300 @@ -291,20 +84,20 @@ LinkItem_BugCatchingNet: STZ $2E - ; LDA.b #$32 : JSL Player_DoSfx2 + LDA.b #$32 : JSR Player_DoSfx2 .y_press: JSR Unknown ; $3AE65 IN ROM LDA $67 : AND.b #$F0 : STA $67 - DEC $3D : BPL .BRANCH_BETA + DEC $3D : BPL .bottle_exit LDX $030D : INX : STX $030D LDA.b #$03 : STA $3D LDA $2F : LSR A : TAY LDA pose_offset, Y : CLC : ADC $030D : TAY LDA pose_id, Y : STA $0300 - CPX.b #$0A : BNE .BRANCH_BETA + CPX.b #$0A : BNE .bottle_exit STZ $030D STZ $0300 @@ -315,7 +108,7 @@ LinkItem_BugCatchingNet: LDA $50 : AND.b #$FE : STA $50 LDA.b #$80 : STA $44 : STA $45 -.BRANCH_BETA: +.bottle_exit: RTS } @@ -341,9 +134,122 @@ Unknown: STZ $67 - .BRANCH_BETA: - +.BRANCH_BETA: +NetExit: RTS } +print "Next address for jump in bank07: ", pc + ; ============================================================================= + +org $07FB71 +LinkItem_Bottles_Long: +{ + PHB : PHK : PLB + JSR LinkItem_Bottles + PLB + RTL +} + +LinkItem_Bottles: +{ + JSR Link_CheckNewY_ButtonPress : BCC NetExit ; (RTS) + + LDA.b $3A : AND.b #$BF : STA.b $3A + + ; Check if we have a bottle or not + LDA.l $7EF34F : DEC A : TAX + + LDA.l $7EF35C, X : BEQ NetExit ; (RTS) + CMP.b #$03 : BCC .LinkItem_UselessBottle + CMP.b #$03 : BEQ .LinkItem_RedPotion + CMP.b #$04 : BEQ .LinkItem_GreenPotion + CMP.b #$05 : BEQ .LinkItem_BluePotion + CMP.b #$06 : BEQ .fairy + + BRL .LinkItem_BeeBottle + +.fairy: + BRL .LinkItem_FairyBottle + +.LinkItem_RedPotion: + LDA.l $7EF36C : CMP.l $7EF36D : BNE .can_drink_red + +.LinkItem_UselessBottle: + BRL $07A955 ; LinkGoBeep TODO(scawful): Investigate + +.can_drink_red: + LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301 + + LDA.b #$04 : STA.b $11 + LDA.b $10 : STA.w $010C + LDA.b #$0E : STA.b $10 + LDA.b #$07 : STA.w $0208 + + JSL $0DFA58 + + RTS + +.LinkItem_GreenPotion: + JSR $A1A9 + LDA $7EF36E : CMP.b #$80 : BNE .can_drink + BRL $07A955 ; LinkGoBeep TODO(scawful): Investigate + +.can_drink: + LDA $02 : STA $7EF35C, X : STZ $0301 + + ; submodule ???? + LDA.b #$08 : STA $11 + LDA $10 : STA $010C + + ; Go to text mode + LDA.b #$0E : STA $10 + LDA.b #$07 : STA $0208 + + JSL $0DFA58 ; RebuildHUD_long TODO(scawful) + RTS + +.LinkItem_BluePotion: + LDA $7EF36C : CMP $7EF36D : BNE .useBluePotion + LDA $7EF36E : CMP.b #$80 : BNE .useBluePotion + BRL $07A955 + +.useBluePotion + LDA.b #$02 : STA $7EF35C, X : STZ $0301 + + ; more submodule code + LDA.b #$09 : STA.b $11 + LDA.b $10 : STA.w $010C + + ; Go to text mode (?) + LDA.b #$0E : STA.b $10 + LDA.b #$07 : STA.w $0208 + + JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) + RTS + +.LinkItem_FairyBottle: + STZ.w $0301 + JSL PlayerItem_SpawnFaerie : BPL .BRANCH_NU + BRL $07A955 + +.BRANCH_NU: + LDA.b #$02 : STA.l $7EF35C, X + JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) + BRA .bottle_exit + +.LinkItem_BeeBottle: + STZ.w $0301 + JSL PlayerItem_ReleaseBee : BPL .bee_spawn_success + BRL $07A955 ; LinkGoBeep + +.bee_spawn_success + LDA.b #$02 : STA.l $7EF35C, X + JSL $0DFA58 ; RebuildHUD_Long TODO(scawful) + +.bottle_exit: + RTS +} + +; ============================================================================= \ No newline at end of file diff --git a/Masks/deku_mask.asm b/Masks/deku_mask.asm index f30423c..bc75939 100644 --- a/Masks/deku_mask.asm +++ b/Masks/deku_mask.asm @@ -30,8 +30,6 @@ Link_HandleDekuTransformation: RTS } -print "here", pc - org $07811A JSR Link_HandleDekuTransformation diff --git a/Masks/link_handler.asm b/Masks/link_handler.asm deleted file mode 100644 index e52e0b5..0000000 --- a/Masks/link_handler.asm +++ /dev/null @@ -1,2558 +0,0 @@ -; ============================================================================= -; Link Handler Expanded Bank Module -; Handles the routines necessary for creating "Mask Forms" -; ============================================================================= - -; Makes use of Bank07 Expanded Space -; $3F89D-$3FFFF NULL -; { -; fillbyte $FF - -; fill $763 -; } -; ============================================================================== - -; *$3D798-$3D7D7 LOCAL -TileDetect_ResetState: -{ - STZ $0C - STZ $0E - STZ $38 - STZ $58 - - STZ $02C0 - - STZ $5F - STZ $62 - - STZ $0320 - STZ $0341 - STZ $0343 - STZ $0348 - STZ $034C - STZ $0357 - STZ $0359 - STZ $035B - STZ $0366 - STZ $036D - STZ $036F - STZ $03E5 - STZ $03E7 - STZ $02EE - STZ $02F6 - STZ $03F1 - - RTS -} - -; ============================================================================== - -; *$3D077-$3D2C5 LOCAL -UnnamedRoutine3: -{ - ; Takes Y as an input ranging from 0x00 to 0x08 - ; The different behaviors with each has not been figured out yet - - STZ $59 - - REP #$20 - - JSR TileDetect_ResetState - - STY $00 : CPY.b #$08 : BNE .alpha - - ; Checking to see if a spin attack is still executing. - LDA $031C : AND.w #$00FF : DEC #2 : BMI .stillSpinAttacking - - CMP.w #$0008 : BCS .stillSpinAttacking - - PHY - - TAY - - LDA $D06F, Y : AND.w #$00FF : CLC : ADC.w #$0040 : TAY - - BRA .delta - -.alpha - - PHY - - ; Use the direction link is facing and the action in question to form an index - LDA $00 : AND.w #$00FF : ASL #3 : CLC : ADC $2F : TAY - -.delta - - ; Find some coordinates relative to Link, but depending on - LDA $22 : CLC : ADC $D01C, Y : AND $EC : LSR #3 : STA $02 - - LDA $20 : CLC : ADC $CFCC, Y : AND $EC : STA $00 - - LDA.w #$0001 : STA $0A - - PLY - - REP #$10 - - ; 0 - nothing, just standing there, 1 - sword, others - ???? - TYA - - CMP.w #$0001 : BEQ .BRANCH_EPSILON - CMP.w #$0002 : BEQ .BRANCH_EPSILON - CMP.w #$0003 : BEQ .BRANCH_EPSILON - CMP.w #$0006 : BEQ .BRANCH_EPSILON - CMP.w #$0007 : BEQ .BRANCH_EPSILON - CMP.w #$0008 : BEQ .BRANCH_EPSILON - - ; action types 0x00, 0x05, and 0x04 end up here - PHY - - JSR TileDetect_Execute - - PLY - - BRA .BRANCH_MU - -.BRANCH_EPSILON: - - SEP #$30 - - JSR $DC4A ; $3DC4A IN ROM - -.stillSpinAttacking - - SEP #$30 - -.BRANCH_XI: - - BRL .return - -.BRANCH_MU: - - SEP #$30 - - CPY.b #$05 : BEQ .BRANCH_XI - - LDA $0357 : AND.b #$10 : BEQ .BRANCH_OMICRON - - LDA $20 : CLC : ADC.b #$08 : AND.b #$0F - - CMP.b #$04 : BCC .BRANCH_PI - CMP.b #$0B : BCC .BRANCH_RHO - -.BRANCH_PI: - - LDA $22 : AND.b #$0F - - CMP.b #$04 : BCC .BRANCH_SIGMA - CMP.b #$0C : BCC .BRANCH_RHO - -.BRANCH_SIGMA: - - LDA $031F : BNE .BRANCH_RHO - - LDA $4D : BNE .BRANCH_RHO - - LDA $1B : BEQ .BRANCH_CHI - - JSL Dungeon_SaveRoomQuadrantData - - LDA.b #$33 : JSR Player_DoSfx2 - - STZ $5E - - LDA.b #$15 : STA $11 - - LDA $A0 : STA $A2 - - LDA $7EC000 : STA $A0 - - JSR $94F1 ; $394F1 IN ROM - - BRA .BRANCH_RHO - -.BRANCH_CHI: - - LDA $02DB : BNE .BRANCH_RHO - - JSR $A95C ; $3A95C IN ROM - -.BRANCH_RHO: - - BRL .BRANCH_GAMMA - -.BRANCH_OMICRON: - - STZ $02DB - - LDA $0357 : AND.b #$01 : BEQ .BRANCH_ZETA - - LDA.b #$02 : STA $0351 - - JSR $D2C6 ; $3D2C6 IN ROM - - BCS .BRANCH_THETA - - LDA $4D : BNE .BRANCH_THETA - - LDA.b #$1A : JSR Player_DoSfx2 - -.BRANCH_THETA: - - BRL .BRANCH_KAPPA - -.BRANCH_ZETA: - - LDA $0359 : AND.b #$01 : BEQ .BRANCH_LAMBDA - - LDA.b #$01 : STA $0351 - - LDA $1B : BNE .BRANCH_IOTA - - LDA $0345 : BEQ .BRANCH_IOTA - - LDA $02E0 : BNE .BRANCH_IOTA - - LDA $7EF356 : BEQ .BRANCH_THETA - - STZ $0345 - - LDA $0340 : STA $26 - - LDA.b #$00 : STA $5D - - BRL .BRANCH_KAPPA - -.BRANCH_IOTA: - - ; $3D2C6 IN ROM - JSR $D2C6 : BCS .BRANCH_TAU - - LDA $8A : CMP.b #$70 : BNE .notEvilSwamp - -.BRANCH_LAMBDA: - - LDA.b #$1B : JSR Player_DoSfx2 - - BRA .BRANCH_TAU - -.notEvilSwamp - - LDA $4D : BNE .BRANCH_TAU - - LDA.b #$1C : JSR Player_DoSfx2 - -.BRANCH_TAU: - - BRL .BRANCH_KAPPA - - LDA $1B : BNE .BRANCH_ALEPH - - LDA $0345 : BNE .BRANCH_ALEPH - - LDA $0341 : AND.b #$01 : BEQ .BRANCH_ALEPH - - LDA.b #$01 : STA $0351 - - ; $3D2C6 IN ROM - JSR $D2C6 : BCS .BRANCH_BET - - ; Dat be sum swamp o' evil - LDA $8A : CMP.b #$70 : BNE .BRANCH_DALET - - LDA.b #$1B : JSR Player_DoSfx2 - - BRA .BRANCH_BET - -.BRANCH_DALET: - - LDA $4D : BNE .BRANCH_BET - - LDA.b #$1C : JSR Player_DoSfx2 - -.BRANCH_BET: - - BRL .return - -.BRANCH_ALEPH: - - STZ $0351 - - LDA $02EE : AND.b #$01 - - BEQ .chet - - ; Only current documentation on this relates to the Desert Palace opening - LDA.b #$01 : STA $02ED - - ; Our work is done here I guess? - BRL .return - -.chet - - STZ $02ED - - LDA $02EE : AND.b #$10 : BEQ .noSpikeFloorDamage - - STZ $0373 - - LDA $55 : BNE .noSpikeFloorDamage - - ; $3AFB5 IN ROM - JSR $AFB5 : BCS .noSpikeFloorDamage - - ; Did Link just get damaged and is still flashing? - LDA $031F : BNE .noSpikeFloorDamage - - STZ $03F7 - STZ $03F5 - STZ $03F6 - - ; moon pearl - LDA $7EF357 : BEQ .doesntHaveMoonPearl - - STZ $56 - STZ $02E0 - -.doesntHaveMoonPearl - - ; armor level - LDA $7EF35B : TAY - - ; Determine how much damage the spike floor will do to Link. - LDA $D06C, Y : STA $0373 - - BRL LinkState_ExitingDash - -.noSpikeFloorDamage - - LDA $0348 : AND.b #$11 : BEQ .notWalkingOnIce - - LDA $034A : BEQ .BRANCH_AYIN - - LDA $6A : BEQ .BRANCH_PEY - - LDA $0340 : STA $26 - - BRL .BRANCH_PEY - -.BRANCH_AYIN: - - LDA $67 : AND.b #$0C : BEQ .BRANCH_TSADIE - - LDA.b #$01 : STA $033D - LDA.b #$80 : STA $033C - -.BRANCH_TSADIE: - - LDA $67 : AND.b #$03 : BEQ .BRANCH_QOF - - LDA.b #$01 : STA $033D - LDA.b #$80 : STA $033C - -.BRANCH_QOF: - - LDY.b #$01 - - LDA $0348 : AND.b #$01 : BNE .BRANCH_RESH - - LDY.b #$02 - -.BRANCH_RESH: - - STY $034A - - LDA $26 : STA $0340 - - JSL Player_ResetSwimState - - BRL .BRANCH_PEY - -.notWalkingOnIce - - LDA $5D : CMP.b #$04 : BEQ .BRANCH_SIN - - LDA $034A : BEQ .BRANCH_TAV - - LDA $0340 : STA $26 - -.BRANCH_TAV: - - JSL Player_ResetSwimState - -.BRANCH_SIN: - - STZ $034A - -.BRANCH_PEY: - - LDA $02E8 : AND.b #$10 : BEQ .BRANCH_KAPPA - - LDA $031F : BNE .BRANCH_KAPPA - - LDA.b #$3A : STA $031F - -.BRANCH_KAPPA: -.return - - RTS -} - -; *$39D84-$39E62 LOCAL -Link_ResetSwordAndItemUsage: -{ - - .BRANCH_EPSILON: - - ; Bring Link to stop - STZ $5E - - LDA $48 : AND.b #$F6 : STA $48 - - ; Stop any animations Link is doing - STZ $3D - STZ $3C - - ; Nullify button input on the B button - LDA $3A : AND.b #$7E : STA $3A - - ; Make it so Link can change direction if need be - LDA $50 : AND.b #$FE : STA $50 - - BRL .BRANCH_ALPHA - -; *$39D9F ALTERNATE ENTRY POINT - - BIT $48 : BNE .BRANCH_BETA - - LDA $48 : AND.b #$09 : BNE .BRANCH_GAMMA - - .BRANCH_BETA: - - LDA $47 : BEQ .BRANCH_DELTA - CMP.b #$01 : BEQ .BRANCH_EPSILON - - .BRANCH_GAMMA: - - LDA $3C : CMP.b #$09 : BNE .BRANCH_ZETA - - LDX.b #$0A : STX $3C - - LDA $9CBF, X : STA $3D - - .BRANCH_ZETA: - - DEC $3D : BPL .BRANCH_THETA - - LDA $3C : INC A : CMP.b #$0D : BNE .BRANCH_KAPPA - - LDA $7EF359 : INC A : AND.b #$FE : BEQ .BRANCH_LAMBDA - - LDA $48 : AND.b #$09 : BEQ .BRANCH_LAMBDA - - LDY.b #$01 - LDA.b #$1B - - JSL AddWallTapSpark ; $49395 IN ROM - - LDA $48 : AND.b #$08 : BNE .BRANCH_MUNU - - LDA $05 : JSR Player_DoSfx2 - - BRA .BRANCH_XI - - .BRANCH_MUNU: - - LDA.b #$06 : JSR Player_DoSfx2 - - .BRANCH_XI: - - ; Do sword interaction with tiles - LDY.b #$01 - - JSR UnnamedRoutine3 ; $3D077 IN ROM - -.BRANCH_LAMBDA: - - LDA.b #$0A - -.BRANCH_KAPPA: - - STA $3C : TAX - - LDA $9CBF, X : STA $3D - -.BRANCH_THETA: - - BRA .BRANCH_RHO - -.BRANCH_DELTA: - - LDA.b #$09 : STA $3C - - LDA.b #$01 : TSB $50 - - STZ $3D - - LDA $5E - - CMP.b #$04 : BEQ .BRANCH_RHO - CMP.b #$10 : BEQ .BRANCH_RHO - - LDA.b #$0C : STA $5E - - LDA $7EF359 : INC A : AND.b #$FE : BEQ .BRANCH_ALPHA - - LDX.b #$04 - -.BRANCH_PHI: - - LDA $0C4A, X - - CMP.b #$30 : BEQ .BRANCH_ALPHA - CMP.b #$31 : BEQ .BRANCH_ALPHA - - DEX : BPL .BRANCH_PHI - - LDA $79 : CMP.b #$06 : BCC .BRANCH_CHI - - LDA $1A : AND.b #$03 : BNE .BRANCH_CHI - - JSL AncillaSpawn_SwordChargeSparkle - -.BRANCH_CHI: - - LDA $79 : CMP.b #$40 : BCS .BRANCH_ALPHA - - INC $79 : LDA $79 : CMP.b #$30 : BNE .BRANCH_ALPHA - - LDA.b #$37 : JSR Player_DoSfx2 - - JSL AddChargedSpinAttackSparkle - - BRA .BRANCH_ALPHA - -.BRANCH_RHO: - - JSR $9E63 ; $39E63 IN ROM - - .BRANCH_ALPHA: - - RTS -} - -; ============================================================================= - -; *$3C8E9-$3CB83 LONG BRANCH LOCATION -CancelStairDragWithHorizontals: -{ - LDA $6A : BNE .BRANCH_ALPHA - - STZ $57 - - LDA $5E : CMP.b #$02 : BNE .BRANCH_ALPHA - - STZ $5E - -.BRANCH_ALPHA: - - LDA $59 : AND.b #$05 : BEQ .BRANCH_BETA - - LDA $0E : AND.b #$02 : BNE .BRANCH_BETA - - LDA $5D - - CMP.b #$05 : BEQ .BRANCH_GAMMA - CMP.b #$02 : BEQ .BRANCH_GAMMA - - LDA.b #$09 : STA $5C - - STZ $5A - - LDA.b #$01 : STA $5B - - LDA.b #$01 : STA $5D - -.BRANCH_GAMMA: - - RTS - -.BRANCH_BETA: - - LDA $0366 : AND.b #$02 : BEQ .BRANCH_DELTA - - LDA $036A : ASL A : STA $0369 - - BRA .BRANCH_EPSILON - -.BRANCH_DELTA: - - STZ $0369 - -.BRANCH_EPSILON: - - LDA $0341 : AND.b #$04 : BEQ .BRANCH_ZETA - - BRA .BRANCH_THETA - - LDA $0341 : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_ZETA - -.BRANCH_THETA: - - LDA $0345 : BNE .BRANCH_ZETA - - LDA $4D : BNE .BRANCH_ZETA - - JSR LinkState_ExitingDash - JSR $9D84 ; $39D84 IN ROM - - LDA.b #$01 : STA $0345 - - LDA $26 : STA $0340 - - JSL Player_ResetSwimState - - STZ $0376 - STZ $5E - - LDA $0351 : CMP.b #$01 : BNE .BRANCH_IOTA - - JSR $AE54 ; $3AE54 IN ROM - - LDA $7EF356 : BEQ .BRANCH_IOTA - - LDA $02E0 : BNE .BRANCH_ZETA - - LDA.b #$04 : STA $5D - - BRA .BRANCH_ZETA - -.BRANCH_IOTA: - - LDA $3E : STA $20 - LDA $40 : STA $21 - - LDA $3F : STA $22 - LDA $41 : STA $23 - - LDA.b #$01 : STA $037B - - JSR $CC3C ; $3CC3C IN ROM - - LDA.b #$20 : JSR Player_DoSfx2 - -.BRANCH_ZETA: - - LDA $0345 : BEQ .BRANCH_KAPPA - - LDA $036E : AND.b #$07 : CMP.b #$07 : BEQ .BRANCH_LAMBDA - - BRA .BRANCH_MU - - .BRANCH_KAPPA: - - LDA $036D : AND.b #$42 : BEQ .BRANCH_MU - -.BRANCH_LAMBDA: - - LDA.b #$07 : STA $0E - - BRL .BRANCH_$3C7FC - -.BRANCH_MU: - - LDA $0343 : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_NU - - LDA $0345 : BEQ .BRANCH_NU - - JSR LinkState_ExitingDash - - LDA $4D : BNE .BRANCH_NU - - LDA $0340 : STA $26 - - STZ $0345 - - LDA.b #$15 - LDY.b #$00 - - JSL AddTransitionSplash ; $498FC IN ROM - - LDA.b #$01 : STA $037B - - BRL .BRANCH_$3CC3C - -.BRANCH_NU: - - LDA $036E : AND.b #$07 : BEQ .BRANCH_XI - - ; $3C16D IN ROM - JSR $C16D : BCC .BRANCH_XI - - LDA.b #$20 : JSR Player_DoSfx2 - - LDX.b #$10 - - LDA $66 : AND.b #$01 : BNE .BRANCH_OMICRON - - TXA : EOR.b #$FF : INC A : TAX - -.BRANCH_OMICRON: - - STX $28 - - JSR LinkState_ExitingDash - - LDA.b #$02 : STA $4D - - LDA.b #$14 : STA $0362 : STA $0363 - - LDA.b #$FF : STA $0364 - - LDA.b #$0C : STA $5D - - LDA.b #$01 : STA $037B : STA $78 - - STZ $48 - STZ $5E - - LDA $1B - - BNE .BRANCH_PI - - LDA.b #$02 : STA $EE - -.BRANCH_PI: - - LDA $66 : AND.b #$FD : ASL A : TAY - - LDA $22 : PHA - LDA $23 : PHA - - JSR $8D2B ; $38D2B IN ROM - - LDA.b #$01 : STA $66 - - CPX.b #$FF - - BEQ .BRANCH_RHO - - JSR $8B9B ; $38B9B IN ROM - - BRL .BRANCH_SIGMA - -.BRANCH_RHO: - - JSR $8AD1; $38AD1 IN ROM - -.BRANCH_SIGMA: - - PLA : STA $23 - PLA : STA $22 - - RTS - -.BRANCH_XI: - - LDA $0370 : AND.b #$77 - - BEQ .BRANCH_TAU - - JSR $C16D ; $3C16D IN ROM - - BCC .BRANCH_TAU - - LDA.b #$20 : JSR Player_DoSfx2 - - LDX.b #$0F - - AND.b #$07 - - BNE .BRANCH_UPSILON - - LDX.b #$10 - -.BRANCH_UPSILON: - - STX $5D - - LDX.b #$10 - - LDA $66 : AND.b #$01 - - BNE .BRANCH_PHI - - LDX.b #$F0 - -.BRANCH_PHI: - - STX $28 - - JSR LinkState_ExitingDash - - LDA.b #$02 : STA $4D - - LDA.b #$14 : STA $0362 : STA $0363 - - LDA.b #$FF : STA $0364 - - STZ $46 - - LDA.b #$01 : STA $037B : STA $78 - - STZ $48 - STZ $5E - - RTS - -.BRANCH_TAU: - - LDA $036E : AND.b #$70 : BEQ .BRANCH_CHI - - LDA $036E : AND.b #$07 : BNE .BRANCH_CHI - - LDA $0370 : AND.b #$77 : BNE .BRANCH_CHI - - LDA $5D : CMP.b #$0D : BEQ .BRANCH_CHI - - ; $3C16D IN ROM - JSR $C16D : BCC .BRANCH_CHI - - LDA.b #$20 : JSR Player_DoSfx2 - - JSR LinkState_ExitingDash - - LDA.b #$01 : STA $037B - - STZ $48 - STZ $5E - - BRL .BRANCH_$3C46D - -.BRANCH_CHI: - - LDA $036F : AND.b #$07 : BEQ .BRANCH_PSI - - LDA $036E : AND.b #$07 : BNE .BRANCH_PSI - - LDA $0370 : AND.b #$77 : BNE .BRANCH_PSI - - ; $3C16D IN ROM - JSR $C16D : BCC .BRANCH_PSI - - LDX.b #$10 - - LDA $66 : AND.b #$01 : BNE .BRANCH_OMEGA - - TXA : EOR.b #$FF : INC A : TAX - -.BRANCH_OMEGA: - - STX $28 - - JSR LinkState_ExitingDash - - LDA.b #$02 : STA $4D - - LDA.b #$14 : STA $0362 : STA $0363 - - LDA.b #$FF : STA $0364 - - LDA.b #$0E : STA $5D - - STZ $46 - - LDA.b #$01 : STA $037B : STA $78 - - STZ $48 - STZ $5E - - RTS - -.BRANCH_PSI: - - LDA $0E : AND.b #$02 : BNE .BRANCH_ALIF - - LDA $0C : AND.b #$05 : BEQ .BRANCH_ALIF - - LDA $0372 : BEQ .BRANCH_BET - - LDA $2F : AND.b #$04 : BEQ .BRANCH_ALIF - -.BRANCH_BET: - - JSR $E112 ; $3E112 IN ROM - - LDA $6B : AND.b #$0F : BEQ .BRANCH_ALIF - - RTS - -.BRANCH_ALIF: - - STZ $6B - - ; check for spike block interactions - LDA $02E8 : AND.b #$07 : BEQ .noSpikeBlockInteraction - - ; link is flashing or otherwise invincible - LDA $46 : ORA $031F : ORA $55 : BNE .ignoreSpikeBlocks - - LDA $22 - - LDY $66 : CPY.b #$02 : BNE .didntMoveLeft - - ; this is a tad strange, seems like more of a tweak than anything else - AND.b #$04 : BEQ .notOn4PixelGrid - - BRA .noSpikeBlockInteraction - -.didntMoveLeft - - AND.b #$04 : BEQ .noSpikeBlockInteraction - -.notOn4PixelGrid - - ; use armor value to determine damage to be doled out - LDA $7EF35B : TAY - - LDA $BA07, Y : STA $0373 - - JSR LinkState_ExitingDash - - BRL .BRANCH_$39222 - -.ignoreSpikeBlocks - - LDA $02E8 : AND.b #$07 : STA $0E - -.noSpikeBlockInteraction - - BRL .BRANCH_$3C7FC -} - -; ============================================================================= - -; *$3CDCB-$3CE29 LOCAL -TileDetect_Movement_Vertical: -{ - ; This probably the up/down movement handler analagous to $3CE2A below - REP #$20 - - JSR TileDetect_ResetState - - STZ $59 - - LDA $20 : CLC : ADC $CB7B, Y : STA $51 : AND $EC : STA $00 - LDA $22 : CLC : ADC $CD89, Y : AND $EC : LSR #3 : STA $02 - LDA $22 : CLC : ADC $CD8B, Y : AND $EC : LSR #3 : STA $04 - LDA $22 : CLC : ADC $CD93, Y : AND $EC : LSR #3 : STA $74 - - REP #$10 - - LDA.w #$0001 : STA $0A - - JSR TileDetect_Execute - - LDA $04 : STA $02 - - LDA.w #$0002 : STA $0A - - JSR TileDetect_Execute - - LDA $74 : STA $02 - - LDA.w #$0004 : STA $0A - - JSR TileDetect_Execute - - SEP #$30 - - RTS -} - -; *$3CE2A-$3CE84 LOCAL -TileDetect_Movement_Horizontal: -{ - ; Note, this routine only execute when Link is moving horizontally - ; (Yes, it will execute if he's moving in a diagonal direction since that includes horizontal) - - REP #$20 - - JSR TileDetect_ResetState - - STZ $59 - - LDA $22 : CLC : ADC $CD7B, Y : AND $EC : LSR #3 : STA $02 - - LDA $20 : CLC : ADC $CD83, Y : AND $EC : STA $00 - - LDA $20 : CLC : ADC $CD8B, Y : STA $51 : AND $EC : STA $04 - - LDA $20 : CLC : ADC $CD93, Y : STA $53 : AND $EC : STA $08 - - REP #$10 - - LDA.w #$0001 : STA $0A - - JSR TileDetect_Execute - - LDA $04 : STA $00 - - LDA.w #$0002 : STA $0A - - JSR TileDetect_Execute - - LDA $08 : STA $00 - - LDA.w #$0004 : STA $0A - - JSR TileDetect_Execute - - SEP #$30 - - RTS -} - -; *$3C4D4-$3C8E8 LOCAL -{ - LDA $31 : BNE .BRANCH_ALPHA - - RTS - -.BRANCH_ALPHA: - - LDA $6C : CMP.b #$02 : BNE .BRANCH_BETA - - LDY.b #$04 - - LDA $22 : CMP.b #$80 : BCC .BRANCH_GAMMA - - BRA .BRANCH_DELTA - -.BRANCH_BETA: - - LDY.b #$04 - - LDA $31 : BMI .BRANCH_GAMMA - -.BRANCH_DELTA: - - LDY.b #$06 - -.BRANCH_GAMMA: - - TYA : LSR A : STA $66 - - JSR $CE2A ; $3CE2A IN ROM; Has to do with detecting areas around chests. - - LDA $1B : BNE .BRANCH_EPSILON - - BRL CancelStairDragWithHorizontals - -.BRANCH_EPSILON: - - LDA $0308 : BMI .BRANCH_ZETA - - LDA $46 : BEQ .BRANCH_THETA - -.BRANCH_ZETA: - - LDA $0E : LSR #4 : TSB $0E - - BRL .BRANCH_RHO - -.BRANCH_THETA: - - LDA $6A : BNE .BRANCH_IOTA - - STZ $57 - -.BRANCH_IOTA: - - LDA $6C : CMP.b #$01 : BNE .BRANCH_KAPPA - - LDA $6A : BNE .BRANCH_KAPPA - - LDA $046C : CMP.b #$03 : BNE .BRANCH_LAMBDA - - LDA $EE : BEQ .BRANCH_LAMBDA - - BRL .BRANCH_TAU - -.BRANCH_LAMBDA: - - JSR $CB84 ; $3CB84 IN ROM - JSR $CBDD ; $3CBDD IN ROM - - BRL .BRANCH_$3D667 - -.BRANCH_KAPPA: - - LDA $0E : AND.b #$70 : BEQ .BRANCH_RHO - - STZ $05 - - LDA $0F : AND.b #$07 : BEQ .BRANCH_NU - - LDY.b #$02 - - LDA $31 : BCC .BRANCH_XI - - LDY.b #$03 - -.BRANCH_XI: - - LDA $B7C3, Y : STA $49 - -.BRANCH_NU: - - LDA.b #$02 : STA $6C - - STZ $03F3 - - LDA $0E : AND.b #$70 : CMP.b #$70 : BEQ .BRANCH_OMICRON - - LDA $0E : AND.b #$07 : BNE .BRANCH_PI - - LDA $0E : AND.b #$70 : BNE .BRANCH_OMICRON - - BRA .BRANCH_RHO - -.BRANCH_PI: - - STZ $6B - STZ $6C - - JSR $CB84 ; $3CB84 IN ROM - JML $07CB9F ; $3CB9F IN ROM - -.BRANCH_OMICRON: - - LDA $0315 : AND.b #$02 : BNE .BRANCH_SIGMA - - LDA $50 : AND.b #$FD : STA $50 - -.BRANCH_SIGMA: - - RTS - -.BRANCH_RHO: - - LDA $0315 : AND.b #$02 : BNE .BRANCH_TAU - - LDA $50 : AND.b #$FD : STA $50 - - STZ $6C - STZ $EF - STZ $49 - -.BRANCH_TAU: - - LDA $0E : AND.b #$02 : BNE .BRANCH_UPSILON - - LDA $0C : AND.b #$05 : BEQ .BRANCH_UPSILON - - STZ $03F3 - - JSR $E112 ; $3E112 IN ROM - - LDA $6B : AND.b #$0F : BEQ .BRANCH_UPSILON - - RTS - -.BRANCH_UPSILON: - - STZ $6B - - LDA $EE : BNE .BRANCH_PHI - - LDA $034C : AND.b #$07 : BEQ .BRANCH_CHI - - LDA.b #$01 : TSB $0322 - - BRA .BRANCH_PSI - -.BRANCH_CHI: - - LDA $02E8 : AND.b #$07 : BNE .BRANCH_PSI - - LDA $0E : AND.b #$02 : BNE .BRANCH_PSI - - LDA $0322 : AND.b #$FE : STA $0322 - - BRA .BRANCH_PSI - -.BRANCH_PHI: - - LDA $0320 : AND.b #$07 : BEQ .BRANCH_OMEGA - - LDA.b #$02 : TSB $0322 - - BRA .BRANCH_PSI - -.BRANCH_OMEGA: - - ; Apparently they knew how to use TSB but now how to use TRB >___> - ; LDA.b #$02 : TRB $0322 would have sooooo worked here - LDA $0322 : AND.b #$FD : STA $0322 - - .BRANCH_PSI: - - LDA $02F7 : AND.b #$22 : BEQ .no_blue_rupee_touch - - LDX.b #$00 - - AND.b #$20 : BEQ .touched_upper_rupee_half - - LDX.b #$08 - - .touched_upper_rupee_half - - STX $00 - STZ $01 - - LDA $66 : ASL A : TAY - - REP #$20 - - LDA $7EF360 : CLC : ADC.w #$0005 : STA $7EF360 - - ; Configure the CLC : ADCress where the clearing of the rupee tile will occur. - LDA $20 : CLC : ADC $B9F7, Y : SEC : SBC $00 : STA $00 - LDA $22 : CLC : ADC $B9FF, Y : STA $02 - - SEP #$20 - - JSL Dungeon_ClearRupeeTile - - LDA.b #$0A : JSR Player_DoSfx3 - - .no_blue_rupee_touch - - LDY.b #$01 - - LDA $03F1 - - AND.b #$22 : BEQ .BRANCH_DEL - AND.b #$20 : BEQ .BRANCH_THEL - - LDY.b #$02 - -.BRANCH_THEL: - - STY $03F3 - -; *$3C64D LONG BRANCH LOCATION - - BRA .BRANCH_SIN - -.BRANCH_DEL: - - LDY.b #$03 - - LDA $03F2 - - AND.b #$22 : BEQ .BRANCH_SHIN - AND.b #$20 : BEQ .BRANCH_SOD - - LDY.b #$04 - - .BRANCH_SOD: - - STY $03F3 - - BRA .BRANCH_SIN - - .BRANCH_SHIN: - - LDA $02E8 : AND.b #$07 : BNE .BRANCH_SIN - - LDA $0E : AND.b #$02 : BNE .BRANCH_SIN - - STZ $03F3 - - .BRANCH_SIN: - - LDA $036E : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_DOD - - ; $3C16D IN ROM - JSR $C16D : BCC .BRANCH_DOD - - JSR LinkState_ExitingDash - - INC $047A - - LDA.b #$02 : STA $4D - - BRA .BRANCH_TOD - - .BRANCH_DOD: - - LDA $0341 : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_ZOD - - LDA $0345 : BNE .BRANCH_ZOD - - LDA $5D : CMP.b #$06 : BEQ .BRANCH_ZOD - - LDA $3E : STA $20 - LDA $40 : STA $21 - LDA $3F : STA $22 - LDA $41 : STA $23 - - JSR LinkState_ExitingDash - - LDA $1D : BNE .BRANCH_HEH - - JSL Player_LedgeJumpInducedLayerChange - - BRA .BRANCH_TOD - - .BRANCH_HEH: - - LDA.b #$01 : STA $0345 - - LDA $26 : STA $0340 - - STZ $0308 - STZ $0309 - STZ $0376 - STZ $5E - - JSL Player_ResetSwimState - - .BRANCH_TOD: - - LDA.b #$01 : STA $037B - - JSR $CC3C ; $3CC3C IN ROM - - LDA.b #$20 : JSR Player_DoSfx2 - - BRA .BRANCH_JIIM - - .BRANCH_ZOD: - - LDA $0343 : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_JIIM - - LDA $0345 : BEQ .BRANCH_JIIM - - LDA $4D : BEQ .BRANCH_EIN - - LDA.b #$07 : STA $0E - - BRA .BRANCH_JIIM - - .BRANCH_EIN: - - JSR LinkState_ExitingDash - - LDA $4D : BNE .BRANCH_JIIM - - LDA $0340 : STA $26 - - STZ $0345 - - LDA.b #$15 - LDY.b #$00 - - JSL SubTransitionSplash ; $498FC IN ROM - - LDA.b #$01 : STA $037B - - JSR $CC3C ; $3CC3C IN ROM - - .BRANCH_JIIM: - - LDA $59 : AND.b #$05 : BEQ .BRANCH_GHEIN - - LDA $0E : AND.b #$02 : BNE .BRANCH_GHEIN - - LDA $5D - - CMP.b #$05 : BEQ .BRANCH_FATHA - CMP.b #$02 : BEQ .BRANCH_FATHA - - LDA.b #$09 : STA $5C - - STZ $5A - - LDA.b #$01 : STA $5B - LDA.b #$01 : STA $5D - - .BRANCH_FATHA: - - RTS - - .BRANCH_GHEIN: - - STZ $5B - - LDA $02E8 : AND.b #$07 : BEQ .BRANCH_KESRA - - LDA $46 : ORA $031F : ORA $55 : BNE .BRANCH_DUMMA - - LDA $22 - - LDY $66 : CPY.b #$02 : BNE .BRANCH_YEH - - AND.b #$04 : BEQ .BRANCH_WAW - - BRA .BRANCH_KESRA - - .BRANCH_YEH: - - AND.b #$04 : BEQ .BRANCH_KESRA - - .BRANCH_WAW: - - LDA $031F : BNE .BRANCH_KESRA - - LDA $7EF35B : TAY - - LDA $BA07, Y : STA $0373 - - JSR LinkState_ExitingDash - JSR $AE54 ; $3AE54 IN ROM - - BRL .BRANCH_$39222 - - .BRANCH_DUMMA: - - LDA $02E8 : AND.b #$07 : STA $0E - - .BRANCH_KESRA: - - LDA $046C : BEQ .BRANCH_ALPHA2 - CMP.b #$04 : BEQ .BRANCH_ALPHA2 - - LDA $EE : BNE .BRANCH_BETA2 - - .BRANCH_ALPHA2: - - LDA $5F : ORA $60 : BEQ .BRANCH_GAMMA2 - - LDA $6A : BNE .BRANCH_GAMMA2 - - LDA $5F : STA $02C2 - - DEC $61 : BPL .BRANCH_BETA2 - - REP #$20 - - LDY.b #$0F - - LDA $5F - - .BRANCH_THETA2: - - ASL A : BCC .BRANCH_DELTA2 - - PHA : PHY - - SEP #$20 - - ; $3ED2C IN ROM - JSR $ED2C : BCS .BRANCH_EPSILON2 - - STX $0E - - TYA : ASL A : TAX - - ; $3ED3F IN ROM - JSR $ED3F : BCS .BRANCH_EPSILON2 - - LDA $0E : ASL A : TAY - - JSR $F0D9 ; $3F0D9 IN ROM - - TYX - - LDY $66 - - TYA : ASL A : STA $05F8, X : STA $0474 - - LDA $05E4, X : CPY.b #$02 : BEQ .BRANCH_ZETA2 - - DEC A - - .BRANCH_ZETA2: - - AND.b #$0F : STA $05E8, X - - .BRANCH_EPSILON2: - - REP #$20 - - PLY : PLA - - .BRANCH_DELTA2: - - DEY : BPL .BRANCH_THETA2 - - SEP #$20 - - .BRANCH_GAMMA2: - - LDA.b #$15 : STA $61 - - .BRANCH_BETA2: - - LDA $6A : BNE .BRANCH_IOTA2 - - STZ $57 - - LDA $5E : CMP.b #$02 : BNE .BRANCH_IOTA2 - - STZ $5E - -; *$3C7FC LONG BRANCH LOCATION - .BRANCH_IOTA2: - - LDA $0E : AND.b #$07 : BNE .BRANCH_KAPPA2 - - BRL .BRANCH_PI2 - - .BRANCH_KAPPA2: - - LDA $5D : CMP.b #$04 : BNE .BRANCH_LAMBDA2 - - LDA $0312 : BNE .BRANCH_LAMBDA2 - - JSR Player_ResetSwimCollision - - .BRANCH_LAMBDA2: - - LDA $0E : AND.b #$02 : BEQ .BRANCH_MU2 - - LDA $0E : PHA - - JSR $C1A1 ; $3C1A1 IN ROM - JSR $91F1 ; $391F1 IN ROM - - PLA : STA $0E - - .BRANCH_MU2: - - LDA.b #$01 : STA $0302 - - LDA $0E : AND.b #$07 : CMP.b #$07 : BNE .BRANCH_NU2 - - JSR $CB84 ; $3CB84 IN ROM - - BRA .BRANCH_XI2 - - .BRANCH_NU2: - - LDA $6A : CMP.b #$02 : BNE .BRANCH_OMICRON2 - - .BRANCH_PI2: - - BRL .BRANCH_ALPHA3 - - .BRANCH_OMICRON2: - - JSR $CB84 ; $3CB84 IN ROM - - LDA $6A : CMP.b #$01 : BEQ .BRANCH_PI2 - - .BRANCH_XI2: - - LDA $0E : AND.b #$05 : CMP.b #$05 : BEQ .BRANCH_RHO2 - - AND.b #$04 : BEQ .BRANCH_SIGMA2 - - LDY.b #$01 - - LDA $31 : BCC .BRANCH_TAU2 - - EOR.b #$FF : INC A - - .BRANCH_TAU2: - - BPL .BRANCH_UPSILON2 - - LDY.b #$FF - - .BRANCH_UPSILON2: - - STY $00 : STZ $01 - - LDA $0E : AND.b #$02 : BNE .BRANCH_PHI2 - - LDA $20 : AND.b #$07 : BNE .BRANCH_CHI2 - - JSR $C1A1 ; $3C1A1 IN ROM - JSR $91F1 ; $391F1 IN ROM - - BRA .BRANCH_PHI2 - - .BRANCH_SIGMA2: - - LDY.b #$01 - - LDA $31 : BPL .BRANCH_PSI2 - - EOR.b #$FF : INC A - - .BRANCH_PSI2: - - BPL .BRANCH_OMEGA2 - - LDY.b #$FF - - .BRANCH_OMEGA2: - - STY $00 : STZ $01 - - LDA $0E : AND.b #$02 : BNE .BRANCH_PHI2 - - LDA $20 : AND.b #$07 : BNE .BRANCH_CHI2 - - .BRANCH_RHO2: - - JSR $C1A1 ; $3C1A1 IN ROM - JSR $91F1 ; $391F1 IN ROM - - BRA .BRANCH_PHI2 - - .BRANCH_CHI2: - - JSR $CBC9 ; $3CBC9 IN ROM - JMP $D485 ; $3D485 IN ROM - - .BRANCH_PHI2: - - LDA $66 : ASL A : CMP $2F : BNE .BRANCH_ALPHA3 - - LDA $0315 : AND.b #$01 : ASL A : TSB $48 - - LDA $3C : BNE .BRANCH_BETA3 - - DEC $0371 : BPL .BRANCH_GAMMA3 - - .BRANCH_BETA3: - - LDY $0315 - - LDA $02F6 : AND.b #$20 : BEQ .BRANCH_DELTA3 - - LDA $0315 : ASL #3 : TAY - - .BRANCH_DELTA3: - - TYA : TSB $48 - - BRA .BRANCH_ALPHA3 - - LDA $EE : BNE .BRANCH_GAMMA3 - - LDA $48 : AND.b #$F6 : STA $48 - - .BRANCH_ALPHA3: - - LDA.b #$20 : STA $0371 - - LDA $48 : AND.b #$FD : STA $48 - - .BRANCH_GAMMA3: - - RTS -} - -; ============================================================================== - -; *$3CF12-$3CF7D LOCAL -Player_TileDetectNearby: -{ - STZ $59 - - REP #$20 - - JSR TileDetect_ResetState - - LDA $22 : CLC : ADC $CD83 : AND $EC : LSR #3 : STA $02 - - LDA $22 : CLC : ADC $CD93 : AND $EC : LSR #3 : STA $04 - - LDA $20 : CLC : ADC $CD87 : AND $EC : STA $00 : STA $74 - - LDA $20 : CLC : ADC $CD97 : AND $EC : STA $08 - -; *$3CF49 ALTERNATE ENTRY POINT - - REP #$10 - - LDA.w #$0008 : STA $0A - - JSR TileDetect_Execute - - LDA $08 : STA $00 - - LDA.w #$0002 : STA $0A - - JSR TileDetect_Execute - - LDA $74 : STA $00 - - LDA $04 : STA $02 - - LDA.w #$0004 : STA $02 - - JSR TileDetect_Execute - - LDA $08 : STA $00 - - LDA.w #$0001 : STA $0A - - JSR TileDetect_Execute - - SEP #$30 - - RTS -} - -; ============================================================================== - -; *$3D9D8-$3DA29 LOCAL -TileDetect_Execute: -{ - ; Tile attribute handler - - ; Has $0A as a hidden argument. - - SEP #$30 - - ; Are we indoors? - LDA $1B : BNE .indoors - - ; Jump to routine that handles outdoor tile behaviors - BRL $07DC2A - -.indoors - - ; Handle dungeon tile attributes - ; some quick notes: - ; $06[1] is the tile type (no, not the tile type multiplied by two) - ; $0A[2] seems to be either 1, 2, 4, or 8. This is basically the tile's position relative to Link - - REP #$20 - - ; It's Link's movement impetus (it makes him move in a given direction each frame) - LDA $49 : AND.w #$00FF : STA $49 - - LDA $00 : AND.w #$FFF8 : ASL #3 : STA $06 - - LDA $02 : AND.w #$003F : CLC : ADC $06 - - ; Which part of a two level room is Link on - LDX $EE : BEQ .lowerFloor - - ; He's on the upper floor then. - ; CLC : ADC this offset in b/c BG0's tile attributes start at $7F3000 - CLC : ADC.w #$1000 - -.lowerFloor - - REP #$10 - - TAX - - ; Are we figuring out what sort of tile this is - LDA $7F2000, X : PHA - - LDA $037F : AND.w #$00FF - - BEQ .playinByTheRules - - ; $037F being nonzero is a sort of a hidden cheat code - PLA - - LDA.w #$0000 - - BRA .walkThroughWallsCode - -.playinByTheRules - - ; Okay back to what kind of tile it was... - PLA - -.walkThroughWallsCode - - ; Store the tile type at $06 and mirror it at $0114 - AND.w #$00FF : STA $06 : STA $0114 - - ; Save the offset for the tile (i.e. its position in $7F2000) - STX $BD - - ; Multiply this tile index by two and use it to run a service routine for that kind of tile. - ASL A : TAX - - JMP ($D7D8, X) ; ($3D7D8, X) THAT IS -} - -; *$3CEC9-$3CF09 LOCAL -Collision_Detection: -{ - REP #$20 - - JSR TileDetect_ResetState - - STZ $59 - - LDA $22 : CLC : ADC $CDA3, Y : AND $EC : LSR #3 : STA $02 - - LDA $20 : CLC : ADC $CDAB, Y : AND $EC : STA $00 - - LDA $20 : CLC : ADC $CDB3, Y : AND $EC : STA $04 - - REP #$10 - - LDA.w #$0001 : STA $0A - - JSR TileDetect_Execute - - LDA $04 : STA $00 - - LDA.w #$0002 : STA $0A - - JSR TileDetect_Execute - - SEP #$30 - - RTS -} - -; ============================================================================= - -; *$3B9B3-$3B9F6 LOCAL -Collision_Uncategorized: -{ - LDA $046C : CMP.b #$01 : BEQ .BRANCH_ALPHA - - REP #$20 - - LDA $20 : SEC : SBC $0318 : STA $00 - LDA $22 : SEC : SBC $031A : STA $02 - - LDA $E8 : SEC : SBC $E6 : CLC : ADC $20 : STA $20 - LDA $E2 : SEC : SBC $E0 : CLC : ADC $22 : STA $22 - - SEP #$20 - - LDA $67 : BEQ .BRANCH_ALPHA - - LDA $30 : CLC : ADC $00 : STA $30 - LDA $31 : CLC : ADC $02 : STA $31 - - .BRANCH_ALPHA: - - STZ $EE - - RTS -} - -; ============================================================================= - -Collision_Settings: -{ - ; Collision settings - LDA $046C : BEQ .oneBg - CMP.b #$04 : BEQ .oneBg ; moving water collision setting - CMP.b #$02 : BCC .twoBgs - CMP.b #$03 : BNE .uselessBranch - - ; No code here, just us mice! - -.uselessBranch - - REP #$20 - - LDA $E6 : SEC : SBC $E8 : CLC : ADC $20 : STA $20 : STA $0318 - LDA $E0 : SEC : SBC $E2 : CLC : ADC $22 : STA $22 : STA $031A - - SEP #$20 - -.twoBgs - - LDA.b #$01 : STA $EE - - SEC - - RTS - -.oneBg - - CLC - - RTS -} - -; ============================================================================= - -Link_HandleDiagonalCollision: -{ - ; $3B97C IN ROM - JSR Collision_Settings : BCC .onlyOneBg - - JSR .alt_entry ; $3B660 IN ROM - JSR Collision_Uncategorized ; $3B9B3 IN ROM - -.onlyOneBg - - LDA $67 : AND.b #$0F : STA $67 - -; *$3B660 ALTERNATE ENTRY POINT -.alt_entry - - LDA.b #$0F : STA $42 : STA $43 - - STZ $6A - - ; Checking to see if either up or down was pressed. - ; Yeah, one of them was. - LDA $67 : AND.b #$0C : BNE .verticalWalking - - ; Neither up nor down was pressed. - BRL .BRANCH_ULTIMA - -.verticalWalking - - INC $6A - - LDY.b #$00 - - ; Walking in the up direction? - AND.b #$08 : BNE .walkingUp - - ; Walking in the down direction - LDY.b #$02 - -.walkingUp - - ; $66 = #$0 or #$1. #$1 if the down button, #$0 if the up button was pushed. - TYA : LSR A : STA $66 - - JSR Collision_Uncategorized ; $3CE85 IN ROM - - LDA $0E : AND.b #$30 : BEQ .BRANCH_DELTA - - LDA $62 : AND.b #$02 : BNE .BRANCH_DELTA - - LDA $0E : AND.b #$30 : LSR #4 : AND $67 : BNE .BRANCH_DELTA - - LDY.b #$02 - - LDA $67 - - AND.b #$03 : BEQ .BRANCH_DELTA - AND.b #$02 : BNE .BRANCH_EPSILON - - LDY.b #$03 - - BRA .BRANCH_EPSILON - -.BRANCH_DELTA: - - LDA $046C : BEQ .BRANCH_ZETA - - LDA $0E : AND.b #$03 : BNE .BRANCH_THETA - - BRA .BRANCH_IOTA - -.BRANCH_ZETA: - - ; If Link is in the ground state, then branch. - LDA $4D : BEQ .BRANCH_THETA - - LDA $0C : AND.b #$03 : BEQ .BRANCH_THETA - - BRA .BRANCH_MU - -.BRANCH_THETA: - - LDA $0E : AND.b #$03 : BEQ .BRANCH_IOTA - - STZ $6B - - LDA $034A : BEQ .BRANCH_MU - - LDA $02E8 : AND.b #$03 : BNE .BRANCH_MU - - LDA $67 : AND.b #$03 : BEQ .BRANCH_MU - - STZ $033C - STZ $033D - STZ $032F - STZ $0330 - STZ $032B - STZ $032C - STZ $0334 - STZ $0335 - -.BRANCH_MU: - - LDA.b #$01 : STA $0302 - - LDY $66 - -.BRANCH_EPSILON: - - LDA $B64B, Y : STA $42 - -.BRANCH_IOTA: - - LDA $67 : AND.b #$03 : BNE .BRANCH_LAMBDA - - BRL .BRANCH_ULTIMA - -.BRANCH_LAMBDA: - - INC $6A - LDY.b #$04 - AND.b #$02 : BNE .BRANCH_NU - LDY.b #$06 - -.BRANCH_NU: - - TYA : LSR A : STA $66 - JSR Collision_Detection ; $3CEC9 IN ROM - - LDA $0E : AND.b #$30 : BEQ .BRANCH_XI - LDA $62 : AND.b #$02 : BEQ .BRANCH_XI - LDA $0E : AND.b #$30 : LSR #2 : AND $67 : BNE .BRANCH_XI - - LDY.b #$00 - - LDA $67 - - AND.b #$0C : BEQ .BRANCH_XI - AND.b #$08 : BNE .BRANCH_OMICRON - - LDY.b #$01 - - BRA .BRANCH_OMICRON - -.BRANCH_XI: - - ; One BG collision - LDA $046C : BEQ .BRANCH_PI - - LDA $0E : AND.b #$03 : BNE .BRANCH_RHO - - BRA .BRANCH_SIGMA - -.BRANCH_PI: - - LDA $4D : BEQ .BRANCH_RHO - LDA $0C : AND.b #$03 : BEQ .BRANCH_RHO - - BRA .BRANCH_UPSILON - -.BRANCH_RHO: - - LDA $0E : AND.b #$03 : BEQ .BRANCH_SIGMA - STZ $6B - - LDA $034A : BEQ .BRANCH_UPSILON - LDA $02E8 : AND.b #$03 : BNE .BRANCH_UPSILON - - ; Check if Link is walking in an vertical direction - LDA $67 : AND.b #$0C : BEQ .BRANCH_UPSILON - - STZ $033E - STZ $033F - STZ $0331 - STZ $0332 - STZ $032D - STZ $032E - STZ $0336 - STZ $0337 - -.BRANCH_UPSILON: - - LDA.b #$01 : STA $0302 - - LDY $66 - -.BRANCH_OMICRON: - - LDA $B64B, Y : STA $43 - -.BRANCH_SIGMA: - - LDA $67 : AND $42 : AND $43 : STA $67 - -.BRANCH_ULTIMA: - - LDA $67 : AND.b #$0F : BEQ .BRANCH_PHI - - LDA $6B : AND.b #$0F : BEQ .BRANCH_PHI - - STA $67 - -.BRANCH_PHI: - - ; Is this checking if Link is moving diagonally? - LDA $6A : STZ $6A : CMP.b #$02 : BNE .BRANCH_OMEGA - - LDY.b #$01 - - LDA $2F : AND.b #$04 : BEQ .BRANCH_ALIF - - LDY.b #$02 - -.BRANCH_ALIF: - - STY $6A - -.BRANCH_OMEGA: - - RTS -} - -; *$3B956-$3B968 LOCAL -RunSlopeCollisionChecks_VerticalFirst: -{ - LDA $6B : AND.b #$20 : BNE .BRANCH_ALPHA - - JSR $BA0A ; $3BA0A IN ROM - -.BRANCH_ALPHA: - - LDA $6B : AND.b #$10 : BNE .BRANCH_BETA - - JSR $C4D4 ; $3C4D4 IN ROM - -.BRANCH_BETA: - - RTS -} - -; *$3B969-$3B97B LOCAL -RunSlopeCollisionChecks_HorizontalFirst: -{ - LDA $6B : AND.b #$10 : BNE .BRANCH_ALPHA - - JSR $C4D4 ; $3C4D4 IN ROM - - .BRANCH_ALPHA: - - LDA $6B : AND.b #$20 : BNE .BRANCH_BETA - - JSR $BA0A ; $3BA0A IN ROM - -.BRANCH_BETA: - - RTS -} - -; ============================================================================== - -; *$3CCAB-$3CD7A LOCAL -LinkTileMovementRoutine: -{ - ; Denotes how much Link will move during the frame in a vertical direction (signed) - LDA $30 : BEQ .BRANCH_ALPHA - - ; this is reached if there is vertical movement - LDA $31 : BNE .BRANCH_BETA - - .BRANCH_ALPHA: - - ; This is executed if there is no horizontal movement (vertical doesn't matter) - - BRL .BRANCH_THETA - -.BRANCH_BETA: - - ; Basically this code executes only if Link is moving diagonally - - ; $02DE[2] = mirror of Link's Y coordinate - LDA $20 : STA $02DE - LDA $21 : STA $02DF - - ; $02DC[2] = mirror of Link's X coordinate - LDA $22 : STA $02DC - LDA $23 : STA $02DD - - LDY.b #$04 - - LDA $31 : BMI .BRANCH_GAMMA ; Is Link moving to the left? If so, branch - - ; This probably sets up a different hit detection box b/c he's looking in a different direction - LDY.b #$06 - -.BRANCH_GAMMA: - - JSR $CE2A ; $3CE2A IN ROM - - LDA $0C : AND.b #$05 : BEQ .BRANCH_DELTA - - JSR $E112 ; $3E112 IN ROM - - LDA $6B : AND.b #$0F : BNE .BRANCH_EPSILON - - .BRANCH_DELTA: - - BRL .BRANCH_THETA - -.BRANCH_EPSILON: - - REP #$20 - - LDA $22 : SEC : SBC $02DC : STA $00 - - LDA $02DC : STA $22 - - SEP #$20 - - LDA $00 : STA $31 - - LDY.b #$00 - - LDA $30 : BMI .BRANCH_ZETA - - LDY.b #$02 - -.BRANCH_ZETA: - - JSR TileDetect_Movement_Vertical ; $3CDCB IN ROM - - LDA $0C : AND.b #$05 : BEQ .BRANCH_THETA - - JSR $E076 ; $3E076 IN ROM - - LDA $6B : AND.b #$0F : BEQ .BRANCH_THETA - - ; Store the diagonal movement characteristics to $6D (but why?) - LDA $6B : STA $6D - - REP #$20 - - LDA $20 : SEC : SBC $02DE : STA $00 - - SEP #$20 - - LDA $00 : STA $30 - - LDY $31 : BMI .BRANCH_IOTA - - LDA $CC83, Y - - BRA .BRANCH_KAPPA - -.BRANCH_IOTA: - - TYA : EOR.b #$FF : INC A : TAY - - LDA $CC8D, Y ; $3CC8D, Y THAT IS - -.BRANCH_KAPPA: - - REP #$20 - - AND.w #$00FF : CMP.w #$0080 : BCC .BRANCH_LAMBDA - - ORA.w #$FF00 - -.BRANCH_LAMBDA: - - CLC : ADC $22 : STA $22 - - SEP #$20 - - LDY $30 : BMI .BRANCH_MU - - LDA $CC97, Y - - BRA .BRANCH_NU - -.BRANCH_MU: - - TYA : EOR.b #$FF : INC A : TAY - - LDA $CCA1, Y - -.BRANCH_NU: - - REP #$20 - - AND.w #$00FF : CMP.w #$0080 : BCC .BRANCH_XI - - ORA.w #$FF00 - -.BRANCH_XI: - - CLC : ADC $20 : STA $20 - - SEP #$20 - - BRA .BRANCH_OMICRON - -.BRANCH_THETA: - - STZ $6D - -.BRANCH_OMICRON: - - STZ $6B - - RTS -} - -; *$3B7C7-$3B955 LOCAL -Link_HandleCardinalCollision: -{ - ; Initialize the diagonal wall state - STZ $6E - - ; ???? - STZ $38 - - ; Detects forced diagonal movement, as when walking against a diagonal wall - ; Branch if there is [forced] diagonal movement - LDA $6B : AND.b #$30 : BNE .BRANCH_ALPHA - - ; $3CCAB IN ROM; Handles left/right tiles and maybe up/down too - JSR LinkTileMovementRoutine - - LDA $6D : BEQ .BRANCH_ALPHA - - BRL .BRANCH_BETA - - .BRANCH_ALPHA: - - ; $3B97C IN ROM - JSR Collision_Settings : BCC .BRANCH_BETA - - ; "Check collision" as named in Hyrule Magic - ; Keep in mind that outdoors, collisions are always 0, i.e. "normal" - ; Why load it twice, homes? - LDA $046C : CMP.b #$02 : BCC .BRANCH_GAMMA - LDA $046C : CMP.b #$03 : BEQ .BRANCH_GAMMA - - LDA.b #$02 : STA $0315 - - REP #$20 - - JSR Player_TileDetectNearby - - SEP #$20 - - LDA $0E : STA $0316 : BEQ .BRANCH_GAMMA - - LDA $30 : STA $00 - - CLC : ADC $0310 : STA $30 - - LDA $31 : STA $01 - - CLC : ADC $0312 : STA $31 - - LDA $0E - - CMP.b #$0C : BEQ .BRANCH_GAMMA - CMP.b #$03 : BEQ .BRANCH_GAMMA - CMP.b #$0A : BEQ .BRANCH_DELTA - CMP.b #$05 : BEQ .BRANCH_DELTA - AND.b #$0C : BNE .BRANCH_EPSILON - - LDA $0E : AND.b #$03 : BNE .BRANCH_EPSILON - - BRA .BRANCH_GAMMA - -.BRANCH_EPSILON: - - LDA $00 : BNE .BRANCH_DELTA - - LDA $01 : BEQ .BRANCH_GAMMA - - LDA $0301 : BPL .BRANCH_DELTA - -.BRANCH_GAMMA: - - JSR UnnamedRoutine1 ; $3B956 IN ROM - - BRA .BRANCH_ZETA - - .BRANCH_DELTA: - - JSR UnnamedRoutine2 ; $3B969 IN ROM - -.BRANCH_ZETA: - - JSR $B9B3 ; $3B9B3 IN ROM - -.BRANCH_BETA: - - ; Check the "collision" value (as in Hyrule Magic) - LDA $046C - - CMP.b #$02 : BEQ .BRANCH_THETA - CMP.b #$03 : BEQ .BRANCH_IOTA - CMP.b #$04 : BEQ .BRANCH_KAPPA - - ; Is there horizontal or vertical scrolling happening? - LDA $30 : ORA $31 : BNE .BRANCH_KAPPA - - LDA $5D - - CMP.b #$13 : BEQ .BRANCH_LAMBDA - CMP.b #$08 : BEQ .BRANCH_LAMBDA - CMP.b #$09 : BEQ .BRANCH_LAMBDA - CMP.b #$0A : BEQ .BRANCH_LAMBDA - CMP.b #$03 : BEQ .BRANCH_LAMBDA - - JSR Player_TileDetectNearby - - LDA $59 : AND.b #$0F : BEQ .BRANCH_LAMBDA - - LDA.b #$01 : STA $5D - - LDA $0372 : BNE .BRANCH_LAMBDA - - LDA.b #$04 : STA $5E - -.BRANCH_LAMBDA: - - BRL .BRANCH_XI - -.BRANCH_THETA: - - JSR Player_TileDetectNearby - - LDA $0E : ORA $0316 : CMP.b #$0F : BNE .BRANCH_KAPPA - - LDA $031F : BNE .BRANCH_MU - - LDA.b #$3A : STA $031F - -.BRANCH_MU: - - LDA $67 : BNE .BRANCH_KAPPA - - LDA $0310 : BEQ .BRANCH_NU - - LDA $30 : EOR.b #$FF : INC A : STA $30 - -.BRANCH_NU: - - LDA $0312 : BEQ .BRANCH_KAPPA - - LDA $31 : EOR.b #$FF : INC A : STA $31 - -.BRANCH_KAPPA: - - LDA.b #$01 : STA $0315 - - JSR UnnamedRoutine1 ; $3B956 IN ROM - - BRA .BRANCH_XI - -.BRANCH_IOTA: - - LDA.b #$01 : STA $0315 - - JSR UnnamedRoutine2 ; $3B969 IN ROM - -.BRANCH_XI: - - LDY.b #$00 - - JSR UnnamedRoutine3 ; $3D077 IN ROM - - LDA $6A : BEQ .BRANCH_OMICRON - - STZ $6B - -.BRANCH_OMICRON: - - LDA $5D : CMP.b #$0B : BEQ .BRANCH_PI - - LDY.b #$08 - - LDA $20 : SEC : SBC $3E : STA $30 : BEQ .BRANCH_PI : BMI .BRANCH_RHO - - LDY.b #$04 - -.BRANCH_RHO: - - LDA $67 : AND.b #$03 : STA $67 - - TYA : TSB $67 - -.BRANCH_PI: - - ; Two LDA's in a row? - LDA.b #$02 - - LDA $22 : SEC : SBC $3F : STA $31 : BEQ .BRANCH_SIGMA : BMI .BRANCH_TAU - - LDY.b #$01 - -.BRANCH_TAU: - - LDA $67 : AND.b #$0C : STA $67 - - TYA : TSB $67 - -.BRANCH_SIGMA: - - LDA $1B : BEQ .BRANCH_UPSILON - - LDA $046C : CMP.b #$04 : BNE .BRANCH_UPSILON - - LDA $5D : CMP.b #$04 : BNE .BRANCH_UPSILON - - LDY.b #$F7 - - LDA $0310 : BEQ .BRANCH_PHI : BMI .BRANCH_CHI - - LDY.b #$FB - -.BRANCH_CHI: - - EOR.b #$FF : INC A : CLC : ADC $30 : BNE .BRANCH_PHI - - TYA : AND $67 : STA $67 - -.BRANCH_PHI: - - LDY.b #$FD - - LDA $0312 : BEQ .BRANCH_UPSILON : BMI .BRANCH_PSI - - LDY.b #$FE - -.BRANCH_PSI: - - EOR.b #$FF : INC A : CLC : ADC $31 : BNE .BRANCH_UPSILON - - TYA : AND $67 : STA $67 - -.BRANCH_UPSILON: - - RTS -} - -; ============================================================================== - -; *$3E8F0-$3E900 LOCAL -HandleIndoorCameraAndDoors: -{ - ; If outdoors, ignore - LDA $1B : BEQ .return - - ; I'll deal with this routine later >:( - LDA $6C : BEQ .notInDoorway - - JML $07E901 ; $3E901 IN ROM - -.notInDoorway - - JSL $07E9D3 ; $3E9D3 IN ROM - -.return - - RTS -} \ No newline at end of file diff --git a/Masks/mask_routines.asm b/Masks/mask_routines.asm index 8334493..7ccc5f3 100644 --- a/Masks/mask_routines.asm +++ b/Masks/mask_routines.asm @@ -34,22 +34,10 @@ org $07B073 org $078028 Player_DoSfx2: - ; ============================================================================= org $008827 -JSL StartupMasks - -org $1BEDF9 -JSL Palette_ArmorAndGloves ; 4bytes -RTL ; 1byte -NOP #$01 - -org $1BEE1B -JSL Palette_ArmorAndGloves_part_two -RTL - -; ============================================================================= + JSL StartupMasks org $278000 StartupMasks: @@ -66,16 +54,15 @@ StartupMasks: ; ============================================================================= -CancelMask: -{ - JSL Palette_ArmorAndGloves - LDA #$10 : STA $BC : STZ $02B2 +org $1BEDF9 + JSL Palette_ArmorAndGloves ; 4bytes + RTL ; 1byte + NOP #$01 + +org $1BEE1B + JSL Palette_ArmorAndGloves_part_two RTL -} -; ============================================================================= - -; Code : org $398000 Palette_ArmorAndGloves: { @@ -239,7 +226,54 @@ LinkState_ResetMaskAnimated: RTL } -print "Next address for jump in bank07: ", pc +Link_CheckNewL_ButtonPress: +{ + ; Check if the L button is already down. + BIT $3B : BVS .noNewInput + + ; Flag to see if Link is recoiling from damage or other stuff. + LDA $46 : BNE .noNewInput + + ; Check joypad readings for new input during this frame. + LDA $F6 : AND.b #$08 : BEQ .noNewInput ; AND with 00001000 to isolate L + + TSB $3B + + SEC + + RTS +.noNewInput + + ; I'm guessing this is like a cancel indicator. + CLC + + RTS +} + +Link_CheckNewR_ButtonPress: +{ + ; Check if the R button is already down. + BIT $3B : BVS .noNewInput + + ; Flag to see if Link is recoiling from damage or other stuff. + LDA $46 : BNE .noNewInput + + ; Check joypad readings for new input during this frame. + LDA $F6 : AND.b #$04 : BEQ .noNewInput ; AND with 00000100 to isolate R + + TSB $3B + + SEC + + RTS + +.noNewInput + + ; I'm guessing this is like a cancel indicator. + CLC + + RTS +} ; ============================================================================= \ No newline at end of file diff --git a/Masks/wolf_mask.asm b/Masks/wolf_mask.asm index a308f66..2fb5b00 100644 --- a/Masks/wolf_mask.asm +++ b/Masks/wolf_mask.asm @@ -31,6 +31,8 @@ LinkItem_WolfMask: { LDA $02B2 : CMP #$03 : BNE .equip + ; FIXME: activates whenever you press the Y button + ; needs a delay or something? JSR LinkItem_Shovel .equip @@ -61,6 +63,8 @@ LinkItem_WolfMask: RTS } +print "End of LinkItem_WolfMask ", pc + ; ============================================================================= org $388000 diff --git a/Masks/zora_mask.asm b/Masks/zora_mask.asm index 3b0e73c..6926d36 100644 --- a/Masks/zora_mask.asm +++ b/Masks/zora_mask.asm @@ -240,3 +240,5 @@ org $0782D2 org $07C307 JSR LinkState_UsingZoraMask_dungeon_stairs RTS + + diff --git a/Menu/menu.asm b/Menu/menu.asm index 88c57dd..df40a19 100644 --- a/Menu/menu.asm +++ b/Menu/menu.asm @@ -374,6 +374,7 @@ Menu_ScrollFrom: Menu_ScrollUp: { + JSL $0DFA58 ; HUD_Rebuild_Long LDA.b #$12 : STA.w $012F ; play menu exit sound effect SEP #$10 REP #$20 @@ -396,22 +397,23 @@ Menu_ScrollUp: ; ============================================================================= ; 09 CHECK BOTTLE +print pc Menu_CheckBottle: { LDA.w $0202 : CMP.b #$06 : BNE .not_first - LDA.b #$01 : BRA .prepare_bottle + LDA.b #$0001 : JMP .prepare_bottle .not_first LDA.w $0202 : CMP.b #$0C : BNE .not_second - LDA.b #$02 : BRA .prepare_bottle + LDA.b #$0002 : JMP .prepare_bottle .not_second LDA.w $0202 : CMP.b #$12 : BNE .not_third - LDA.b #$03 : BRA .prepare_bottle + LDA.b #$03 : JMP .prepare_bottle .not_third LDA.w $0202 : CMP.b #$18 : BNE .not_any - LDA.b #$04 : BRA .prepare_bottle + LDA.b #$04 .prepare_bottle STA.l $7EF34F @@ -427,7 +429,6 @@ Menu_CheckBottle: Menu_Exit: { JSL LinkState_ResetMaskAnimated - REP #$20 ; reset submodule diff --git a/Menu/menu_gfx_table.asm b/Menu/menu_gfx_table.asm index 03a1bad..1a72807 100644 --- a/Menu/menu_gfx_table.asm +++ b/Menu/menu_gfx_table.asm @@ -105,7 +105,7 @@ BookGFX: ; ------------------------------------- BottlesGFX: - dw $2044, $2045, $2046, $2047 ; Mushroom + dw $2044, $2045, $2046, $2047 ; Mushroom dw $2837, $2838, $2CC3, $2CD3 ; Empty bottle dw $24D2, $64D2, $24E2, $24E3 ; Red potion dw $3CD2, $7CD2, $3CE2, $3CE3 ; Green potion diff --git a/Menu/menu_hud.asm b/Menu/menu_hud.asm index e29fd96..4e4504c 100644 --- a/Menu/menu_hud.asm +++ b/Menu/menu_hud.asm @@ -319,14 +319,27 @@ HUD_UpdateItemBox: LDA.w #$0001 .bombsNotEquipped - CPX.w #$0010 : BNE .bottleNotEquipped - TXY : TAX : LDA $7EF35B, X : AND.w #$00FF : TYX -.bottleNotEquipped + CPX.w #$0006 : BNE .bottle1NotEquipped + JMP .loadBottleContent +.bottle1NotEquipped + CPX.w #$000C : BNE .bottle2NotEquipped + LDA.w #$0002 + JMP .loadBottleContent +.bottle2NotEquipped + CPX.w #$0012 : BNE .bottle3NotEquipped + LDA.w #$0003 + JMP .loadBottleContent +.bottle3NotEquipped + CPX.w #$0018 : BNE .bottleNotEquipped + LDA.w #$0004 +.loadBottleContent + TXY : TAX : LDA $7EF35B, X : AND.w #$00FF : TYX + +.bottleNotEquipped STA $02 TXA : DEC A : ASL A : TAX LDA $FA93, X : STA $04 - ; LDA.w HudItems, X : STA $04 LDA $02 : ASL #3 : TAY ; These addresses form the item box graphics. @@ -412,15 +425,6 @@ HexToDecimal: ; ============================================================================= -; dw BowsGFX, BoomsGFX, HookGFX -; dw BombsGFX, PowderGFX, BottlesGFX -; dw HammerGFX, LampGFX, Fire_rodGFX -; dw Ice_rodGFX, MirrorGFX, BottlesGFX -; dw OcarinaGFX, BookGFX, SomariaGFX -; dw ByrnaGFX, JumpFeatherGFX, BottlesGFX -; dw DekuMaskGFX, ZoraMaskGFX, WolfMaskGFX -; dw BunnyHoodGFX, StoneMaskGFX, BottlesGFX - ; $6FA93-$6FAFC DATA org $0DFA93 HudItems: @@ -431,13 +435,70 @@ HudItems: dw $F701, $F6F1, $F6A1, $F6B1, $F7C9, $F751 ; flute, book, somaria, byrna, feather, bottle3 dw $F711, $F741, $F799, $F7A9, $F731, $F751 - ; bombos, quake, ether, stone mask - dw $F6E1, $F6C1, $F6D1, $F7B9, $F811, $F751 + ; deku, zora, wolf, bunny, stne + dw $F6E1, $F821, $F6D1, $F7B9, $F811, $F751 } +org $0DF751 + dw $20F5, $20F5, $20F5, $20F5 ; No bottle + dw $2044, $2045, $2046, $2047 ; Mushroom + dw $2837, $2838, $2CC3, $2CD3 ; Empty bottle + dw $24D2, $64D2, $24E2, $24E3 ; Red potion + dw $3CD2, $7CD2, $3CE2, $3CE3 ; Green potion + dw $2CD2, $6CD2, $2CE2, $2CE3 ; Blue potion + dw $2855, $6855, $2C57, $2C5A ; Fairy + dw $2837, $2838, $2839, $283A ; Bee + dw $2837, $2838, $2839, $283A ; Good bee + +; Boomerang org $0DF651 - dw $2CB8, $2CB9, $2CF5, $2CC9 ; Blue boomerang - dw $24B8, $24B9, $24F5, $24C9 ; Red boomerang + dw $20F5, $20F5, $20F5, $20F5 ; No boomerang + dw $2CB8, $2CB9, $2CC9, $ACB9 ; Blue boomerang + dw $24B8, $24B9, $24C9, $A4B9 ; Red boomerang + +; Powder +org $0DF689 + dw $20F5, $20F5, $20F5, $20F5 ; No powder + dw $2444, $2445, $2446, $2447 ; Mushroom + dw $283B, $283C, $283D, $283E ; Powder + +; Hammer +org $0DF701 + dw $20F5, $20F5, $20F5, $20F5 ; No + dw $24B6, $24B7, $20C6, $24C7 ; Hammer + +; Mirror +org $0DF7C9 + dw $20F5, $20F5, $20F5, $20F5 ; No mirror + dw $2C62, $2C63, $2C72, $2C73 ; Mirror + +; Byrna +org $0DF7A9 + dw $20F5, $20F5, $20F5, $20F5 ; No Byrna + dw $2CDC, $2CDD, $2CEC, $2CED ; Cane of Byrna + +org $0DF6E1 + dw $20F5, $20F5, $20F5, $20F5 ; No bombos + dw $2066, $6066, $2076, $6076 ; Deku Mask + +; Zora +org $0DF821 + dw $20F5, $20F5, $20F5, $20F5 + dw $2C88, $6C88, $2C89, $6C89 + dw $2C88, $6C88, $2C89, $6C89 + +; Wolf +org $0DF6D1 + dw $3086, $7086, $3087, $7087 + +; Bunny +org $0DF7B9 + dw $3469, $7469, $3479, $7479 + +; Stone Mask +org $0DF811 + dw $20F5, $20F5, $20F5, $20F5 + dw $30B4, $30B5, $30C4, $30C5 ; ============================================================================= ; $6FE77-$6FFC0 @@ -462,7 +523,7 @@ HUD_Tilemap: dw $201B, $344B dw $344B, $344B, $344B, $344B - ; item frame left part + ; item frame left part dw $20DE, $207F, $207F, $20DF dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F