Items housekeeping

This commit is contained in:
scawful
2024-11-27 17:09:48 -05:00
parent c11e112a40
commit 1c2686c4a7
6 changed files with 178 additions and 200 deletions

View File

@@ -20,29 +20,24 @@ LinkItem_NewBottle:
; Check if the bottle is empty ; Check if the bottle is empty
CMP.b #$03 : BCC .empty_bottle CMP.b #$03 : BCC .empty_bottle
; Confirm we aren't currently catching ; Confirm we aren't currently catching
LDA $030D : BNE .empty_bottle LDA $030D : BNE .empty_bottle
; If no, prepare and call the LinkItem_Bottles routine ; If no, prepare and call the LinkItem_Bottles routine
JSR LinkItem_Bottles JSR LinkItem_Bottles
BRA .exit BRA .exit
.empty_bottle .empty_bottle
; Otherwise, prepare and call the LinkItem_BugCatchingNet routine ; Otherwise, prepare and call the LinkItem_BugCatchingNet routine
JSR LinkItem_CatchBottle JSR LinkItem_CatchBottle
.exit .exit
RTS RTS
} }
assert pc() <= $07A249 assert pc() <= $07A249
pullpc pullpc
print " LinkItem_CatchBottle ", pc print " LinkItem_CatchBottle ", pc
; =============================================================================
pose_id: pose_id:
db $0B, $06, $07, $08, $01, $02, $03, $04, $05, $06 ; up db $0B, $06, $07, $08, $01, $02, $03, $04, $05, $06 ; up
db $01, $02, $03, $04, $05, $06, $07, $08, $01, $02 ; down db $01, $02, $03, $04, $05, $06, $07, $08, $01, $02 ; down
@@ -59,26 +54,23 @@ pose_offset:
LinkItem_CatchBottle: LinkItem_CatchBottle:
{ {
BIT $3A : BVS .y_press 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.w pose_id, X : STA $0300
LDA.b #$03 : STA $3D
LDA $6C : BNE .bottle_exit ; (RTS) STZ $030D, X
JSR Link_CheckNewY_ButtonPress : BCC .bottle_exit ; (RTS) LDA.b #$10 : STA $037A
LDA.b #$01 : TSB $50
LDA $2F : LSR A : TAY STZ $2E
LDX pose_offset, Y
LDA.w pose_id, X : STA $0300
LDA.b #$03 : STA $3D
STZ $030D, X LDA.b #$32 : JSR Player_DoSfx2
LDA.b #$10 : STA $037A .y_press:
LDA.b #$01 : TSB $50
STZ $2E
LDA.b #$32 : JSR Player_DoSfx2
.y_press:
JSR $AE65 ; HaltLinkWhenUsingItems JSR $AE65 ; HaltLinkWhenUsingItems
LDA $67 : AND.b #$F0 : STA $67 LDA $67 : AND.b #$F0 : STA $67
@@ -99,120 +91,114 @@ LinkItem_CatchBottle:
LDA $50 : AND.b #$FE : STA $50 LDA $50 : AND.b #$FE : STA $50
LDA.b #$80 : STA $44 : STA $45 LDA.b #$80 : STA $44 : STA $45
.bottle_exit: .bottle_exit:
NetExit: NetExit:
RTS RTS
} }
; =============================================================================
print " LinkItem_Bottles ", pc print " LinkItem_Bottles ", pc
LinkItem_Bottles: LinkItem_Bottles:
{ {
JSR Link_CheckNewY_ButtonPress : BCC NetExit ; (RTS) JSR Link_CheckNewY_ButtonPress : BCC NetExit ; (RTS)
LDA.b $3A : AND.b #$BF : STA.b $3A
LDA.b $3A : AND.b #$BF : STA.b $3A ; Check if we have a bottle or not
LDA.l $7EF34F : DEC A : TAX
; Check if we have a bottle or not LDA.l $7EF35C, X : BEQ NetExit ; (RTS)
LDA.l $7EF34F : DEC A : TAX 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
CMP.b #$09 : BEQ .magic_bean
CMP.b #$0A : BEQ .milk_bottle
BRL .LinkItem_BeeBottle
LDA.l $7EF35C, X : BEQ NetExit ; (RTS) .milk_bottle
CMP.b #$03 : BCC .LinkItem_UselessBottle LDA.l $7EF36C : CMP.l $7EF36D : BEQ .LinkItem_UselessBottle
CMP.b #$03 : BEQ .LinkItem_RedPotion JSL Bottle_DrinkMilk
CMP.b #$04 : BEQ .LinkItem_GreenPotion RTS
CMP.b #$05 : BEQ .LinkItem_BluePotion
CMP.b #$06 : BEQ .fairy
CMP.b #$09 : BEQ .magic_bean
CMP.b #$0A : BEQ .milk_bottle
BRL .LinkItem_BeeBottle .magic_bean
JSL ReleaseMagicBean
.milk_bottle
LDA.l $7EF36C : CMP.l $7EF36D : BEQ .LinkItem_UselessBottle
JSL Bottle_DrinkMilk
RTS RTS
.magic_bean .fairy
JSL ReleaseMagicBean BRL .LinkItem_FairyBottle
RTS
.fairy .LinkItem_RedPotion
BRL .LinkItem_FairyBottle LDA.l $7EF36C : CMP.l $7EF36D : BNE .can_drink_red
.LinkItem_RedPotion .LinkItem_UselessBottle
LDA.l $7EF36C : CMP.l $7EF36D : BNE .can_drink_red BRL LinkGoBeep ; BRL $07A955 Investigate
.LinkItem_UselessBottle .can_drink_red
BRL LinkGoBeep ; BRL $07A955 Investigate LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301
.can_drink_red LDA.b #$04 : STA.b $11
LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301 LDA.b $10 : STA.w $010C
LDA.b #$0E : STA.b $10
LDA.b #$07 : STA.w $0208
LDA.b #$04 : STA.b $11 JSL RebuildHUD_long
LDA.b $10 : STA.w $010C
LDA.b #$0E : STA.b $10
LDA.b #$07 : STA.w $0208
JSL RebuildHUD_long RTS
RTS .LinkItem_GreenPotion
LDA.l $7EF36E : CMP.b #$80 : BNE .can_drink
BRL LinkGoBeep
.LinkItem_GreenPotion .can_drink
LDA.l $7EF36E : CMP.b #$80 : BNE .can_drink ; Set the bottle empty
BRL LinkGoBeep LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301
.can_drink ; submodule ????
; Set the bottle empty LDA.b #$08 : STA.b $11
LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301 LDA.b $10 : STA.w $010C
; submodule ???? ; Go to text mode
LDA.b #$08 : STA.b $11 LDA.b #$0E : STA.b $10
LDA.b $10 : STA.w $010C LDA.b #$07 : STA.w $0208
; Go to text mode JSL RebuildHUD_long
LDA.b #$0E : STA.b $10 BRA .bottle_exit
LDA.b #$07 : STA.w $0208
JSL RebuildHUD_long .LinkItem_BluePotion
BRA .bottle_exit LDA $7EF36C : CMP $7EF36D : BNE .useBluePotion
LDA $7EF36E : CMP.b #$80 : BNE .useBluePotion
BRL LinkGoBeep ; BRL $07A955
.useBluePotion
LDA.b #$02 : STA $7EF35C, X : STZ $0301
.LinkItem_BluePotion ; more submodule code
LDA $7EF36C : CMP $7EF36D : BNE .useBluePotion LDA.b #$09 : STA.b $11
LDA $7EF36E : CMP.b #$80 : BNE .useBluePotion LDA.b $10 : STA.w $010C
BRL LinkGoBeep ; BRL $07A955
.useBluePotion ; Go to text mode (?)
LDA.b #$02 : STA $7EF35C, X : STZ $0301 LDA.b #$0E : STA.b $10
LDA.b #$07 : STA.w $0208
; more submodule code JSL RebuildHUD_long
LDA.b #$09 : STA.b $11 BRA .bottle_exit
LDA.b $10 : STA.w $010C
; Go to text mode (?) .LinkItem_FairyBottle
LDA.b #$0E : STA.b $10 STZ.w $0301 : LDA.b #$02 : STA.l $7EF35C, X
LDA.b #$07 : STA.w $0208 JSL PlayerItem_SpawnFaerie : BPL .released
BRL LinkGoBeep ; BRL $07A955
.released
JSL RebuildHUD_long
BRA .bottle_exit
JSL RebuildHUD_long .LinkItem_BeeBottle
BRA .bottle_exit STZ.w $0301
JSL PlayerItem_ReleaseBee : BPL .bee_spawn_success
BRL LinkGoBeep ; BRL $07A955
.bee_spawn_success
LDA.b #$02 : STA.l $7EF35C, X
JSL RebuildHUD_long
.LinkItem_FairyBottle .bottle_exit
STZ.w $0301 : LDA.b #$02 : STA.l $7EF35C, X
JSL PlayerItem_SpawnFaerie : BPL .released
BRL LinkGoBeep ; BRL $07A955
.released
JSL RebuildHUD_long
BRA .bottle_exit
.LinkItem_BeeBottle
STZ.w $0301
JSL PlayerItem_ReleaseBee : BPL .bee_spawn_success
BRL LinkGoBeep ; BRL $07A955
.bee_spawn_success
LDA.b #$02 : STA.l $7EF35C, X
JSL RebuildHUD_long
.bottle_exit
RTS RTS
} }

View File

@@ -31,7 +31,7 @@ NOP
org $079E67 org $079E67
NOP #$04 NOP #$04
CMP #$FF CMP #$FF
org $09F608 org $09F608
NOP NOP
@@ -93,4 +93,4 @@ AND #$10 : BNE +
.branchF .branchF
LDA.b #$00 LDA.b #$00
+ +
RTL RTL

View File

@@ -44,7 +44,7 @@ LinkItem_IceRod:
TXA TXA
STA $7ED004 ; store native x value into ram to regain after code STA $7ED004 ; store native x value into ram to regain after code
; wait for vblank to enable dma transfer ; wait for vblank to enable dma transfer
LDA $4212 : AND #$80 : BEQ $F9 LDA $4212 : AND #$80 : BEQ $F9
REP #$30 REP #$30
@@ -100,15 +100,13 @@ VramDmaTransfer:
{ {
LDA #$007E ; load origin of bytes to transfer (7E/d000) LDA #$007E ; load origin of bytes to transfer (7E/d000)
STA $4304 STA $4304
LDA #$D000 LDA #$D000 : STA $4302
STA $4302
SEP #$30 SEP #$30
LDA #$18 ; bus LDA #$18 ; bus
STA $4301 STA $4301
LDA #$04 ; transfer 4 bytes LDA #$04 ; transfer 4 bytes
STA $4305 STA $4305
LDA #$01 LDA #$01 : STA $4300
STA $4300
STA $420B ; make dma transfer STA $420B ; make dma transfer
RTS RTS
} }

View File

@@ -30,16 +30,12 @@ assert pc() <= $07D248
pullpc pullpc
LinkItem_JumpFeather: LinkItem_JumpFeather:
{ {
JSL $07983A ; Reset swim state JSL Link_ResetSwimmingState
LDA $46 : BNE .cantuseit LDA $46 : BNE .cant_use_it
LDA #$02 : STA $5D ; set link state recoil LDA #$02 : STA $5D ; set link state recoil
LDA #$02 : STA $4D ; set jumping state (ledge hop) LDA #$02 : STA $4D ; set jumping state (ledge hop)
LDA #$20 : STA $46 ; length of the jump
; Length of the jump LDA #$24 ; Height of the jump
LDA #$20 : STA $46
; Height of the jump
LDA #$24
; Set vertical resistance ; Set vertical resistance
STA $29 STA $29
@@ -51,25 +47,24 @@ LinkItem_JumpFeather:
; Reset Link movement offsets ; Reset Link movement offsets
STZ $31 : STZ $30 STZ $31 : STZ $30
LDA $F4 : AND #$08 : BEQ .noUp LDA $F4 : AND #$08 : BEQ .no_up
LDA #-8 ; Change that -8 if you want higher speed moving up LDA #-8
STA $27 ; Vertical recoil STA $27 ; Vertical recoil
.noUp .no_up
LDA $F4 : AND #$04 : BEQ .noDown LDA $F4 : AND #$04 : BEQ .no_down
LDA #8 ; Change that -8 if you want higher speed moving down LDA #8
STA $27 STA $27
.noDown .no_down
LDA $F4 : AND #$02 : BEQ .noLeft LDA $F4 : AND #$02 : BEQ .no_left
LDA #-8 ; Change that -8 if you want higher speed moving left LDA #-8
STA $28 ; Horizontal recoil STA $28 ; Horizontal recoil
.noLeft .no_left
LDA $F4 : AND #$01 : BEQ .noRight LDA $F4 : AND #$01 : BEQ .no_right
LDA #8 ; Change that 8 if you want higher speed moving right LDA #8
STA $28 STA $28
.noRight .no_right
.cant_use_it
.cantuseit RTL
RTL
} }
; ========================================================= ; =========================================================
@@ -79,13 +74,13 @@ LinkItem_JumpFeather:
CheckIfJumpingForSpikeDamage: CheckIfJumpingForSpikeDamage:
{ {
PHB : PHK : PLB PHB : PHK : PLB
; Check Z pos of Link ; Check Z pos of Link
LDA $5D : CMP.b #$02 : BEQ .airborne LDA $5D : CMP.b #$02 : BEQ .airborne
LDA.w .spike_floor_damage, Y : STA.w $0373 LDA.w .spike_floor_damage, Y : STA.w $0373
.airborne .airborne
PLB PLB
RTL RTL
.spike_floor_damage .spike_floor_damage
db $08 ; green db $08 ; green

View File

@@ -159,4 +159,3 @@ pushpc
org $07810C org $07810C
JSL MagicRings_CheckForHeart JSL MagicRings_CheckForHeart
pullpc pullpc

View File

@@ -146,7 +146,7 @@ Overworld_OperateCameraScroll_Long:
JSR $BB90 JSR $BB90
PLB PLB
RTL RTL
} }
@@ -165,10 +165,10 @@ pullpc
ScrollToPortal: ScrollToPortal:
{ {
REP #$20 REP #$20
STZ $00 STZ $00
STZ $02 STZ $02
LDA $22 : CMP $7EC186 : BEQ .set_x : BCC .x_low LDA $22 : CMP $7EC186 : BEQ .set_x : BCC .x_low
DEC $02 DEC $02
DEC A : CMP $7EC186 : BEQ .set_x DEC A : CMP $7EC186 : BEQ .set_x
@@ -185,7 +185,7 @@ ScrollToPortal:
.set_x .set_x
STA $22 STA $22
LDA $20 : CMP $7EC184 : BEQ .set_y : BCC .y_low LDA $20 : CMP $7EC184 : BEQ .set_y : BCC .y_low
DEC $00 DEC $00
DEC A : CMP $7EC184 : BEQ .set_y DEC A : CMP $7EC184 : BEQ .set_y
@@ -209,12 +209,12 @@ ScrollToPortal:
.delay_advance .delay_advance
SEP #$20 SEP #$20
LDA $00 : STA $30 LDA $00 : STA $30
LDA $02 : STA $31 LDA $02 : STA $31
JSL Overworld_OperateCameraScroll_Long ; $13B90 IN ROM JSL Overworld_OperateCameraScroll_Long ; $13B90 IN ROM
LDA $0416 : BEQ .exit LDA $0416 : BEQ .exit
JSL Overworld_ScrollMap_Long ; $17273 IN ROM JSL Overworld_ScrollMap_Long ; $17273 IN ROM
.exit .exit
@@ -229,46 +229,46 @@ pushpc
; Ancilla_PortalShot: ; Ancilla_PortalShot:
; { ; {
; LDA $0C54, X : BEQ .traveling_shot ; LDA $0C54, X : BEQ .traveling_shot
; JMP Ancilla_ConsumingFire ; JMP Ancilla_ConsumingFire
; .traveling_shot ; .traveling_shot
; LDA $11 : BNE .just_draw ; LDA $11 : BNE .just_draw
; STZ $0385, X ; STZ $0385, X
; JSR Ancilla_MoveHoriz ; JSR Ancilla_MoveHoriz
; JSR Ancilla_MoveVert ; JSR Ancilla_MoveVert
; JSR Ancilla_CheckSpriteCollision : BCS .collided ; JSR Ancilla_CheckSpriteCollision : BCS .collided
; LDA $0C72, X : ORA.b #$08 : STA $0C72, X ; LDA $0C72, X : ORA.b #$08 : STA $0C72, X
; JSR Ancilla_CheckTileCollision ; JSR Ancilla_CheckTileCollision
; PHP ; PHP
; LDA $03E4, X : STA $0385, X ; LDA $03E4, X : STA $0385, X
; PLP : BCS .collided ; PLP : BCS .collided
; LDA $0C72, X : ORA.b #$0C : STA $0C72, X ; LDA $0C72, X : ORA.b #$0C : STA $0C72, X
; LDA $028A, X : STA $74 ; LDA $028A, X : STA $74
; JSR Ancilla_CheckTileCollision ; JSR Ancilla_CheckTileCollision
; PHP ; PHP
; LDA $74 : STA $028A, X ; LDA $74 : STA $028A, X
; PLP : BCC .no_collision ; PLP : BCC .no_collision
; .collided ; .collided
; INC $0C54, X ; INC $0C54, X
; ; Check if it's blue or orange portal ; ; Check if it's blue or orange portal
; LDA $0C68, X ; LDA $0C68, X
; CMP.b #$1F ; CMP.b #$1F
@@ -290,23 +290,23 @@ pushpc
; ; CLC : ADC portal creation logic here if necessary ; ; CLC : ADC portal creation logic here if necessary
; .no_collision ; .no_collision
; INC $0C5E, X ; INC $0C5E, X
; LDA $0C72, X : AND.b #$F3 : STA $0C72, X ; LDA $0C72, X : AND.b #$F3 : STA $0C72, X
; LDA $0385, X : STA $0333 ; LDA $0385, X : STA $0333
; AND.b #$F0 : CMP.b #$C0 : BNE .just_draw ; AND.b #$F0 : CMP.b #$C0 : BNE .just_draw
; LDA $03E4, X : STA $0333 ; LDA $03E4, X : STA $0333
; AND.b #$F0 : CMP.b #$C0 : BNE .just_draw ; AND.b #$F0 : CMP.b #$C0 : BNE .just_draw
; .just_draw ; .just_draw
; JSR PortalShot_Draw ; JSR PortalShot_Draw
; RTS ; RTS
; } ; }
@@ -314,46 +314,46 @@ pushpc
; PortalShot_Draw: ; PortalShot_Draw:
; { ; {
; JSR Ancilla_BoundsCheck ; JSR Ancilla_BoundsCheck
; LDA $0280, X : BEQ .default_priority ; LDA $0280, X : BEQ .default_priority
; LDA.b #$30 : TSB $04 ; LDA.b #$30 : TSB $04
; .default_priority ; .default_priority
; LDA $0C5E, X : AND.b #$0C : STA $02 ; LDA $0C5E, X : AND.b #$0C : STA $02
; PHX ; PHX
; LDX.b #$02 ; LDX.b #$02
; LDY.b #$00 ; LDY.b #$00
; .next_oam_entry ; .next_oam_entry
; STX $03 ; STX $03
; TXA : ORA $02 : TAX ; TXA : ORA $02 : TAX
; LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y ; LDA $00 : CLC : ADC .x_offsets, X : STA ($90), Y
; LDA $01 : CLC : ADC .y_offsets, X : INY : STA ($90), Y ; LDA $01 : CLC : ADC .y_offsets, X : INY : STA ($90), Y
; LDX $03 ; LDX $03
; LDA .chr, X : INY : STA ($90), Y ; LDA .chr, X : INY : STA ($90), Y
; LDA $04 : ORA.b #$02 : INY : STA ($90), Y ; LDA $04 : ORA.b #$02 : INY : STA ($90), Y
; PHY ; PHY
; TYA : LSR #2 : TAY ; TYA : LSR #2 : TAY
; LDA.b #$00 : STA ($92), Y ; LDA.b #$00 : STA ($92), Y
; PLY : INY ; PLY : INY
; DEX : BPL .next_oam_entry ; DEX : BPL .next_oam_entry
; PLX ; PLX
; RTS ; RTS
; .x_offsets ; .x_offsets