220 lines
4.7 KiB
NASM
220 lines
4.7 KiB
NASM
; ===========================================================
|
|
; Bottle Net Code
|
|
; ===========================================================
|
|
|
|
!BottleFlag = $0AA6
|
|
|
|
PlayerItem_SpawnFaerie = $1EFE33
|
|
PlayerItem_ReleaseBee = $1EDCCF
|
|
|
|
; ===========================================================
|
|
; LinkItem_Bottle
|
|
|
|
org $07A15B
|
|
LinkItem_NewBottle:
|
|
{
|
|
; Check if we have a bottle or not
|
|
LDA.l BottleIndex : DEC A : TAX
|
|
LDA.l Bottle1, X : BEQ .exit
|
|
|
|
; Check if the bottle is empty
|
|
CMP.b #$03 : BCC .empty_bottle
|
|
|
|
; Confirm we aren't currently catching
|
|
LDA $030D : BNE .empty_bottle
|
|
|
|
; If no, prepare and call the LinkItem_Bottles routine
|
|
JSR LinkItem_Bottles
|
|
BRA .exit
|
|
|
|
.empty_bottle
|
|
; Otherwise, prepare and call the LinkItem_BugCatchingNet routine
|
|
JSR LinkItem_CatchBottle
|
|
|
|
.exit
|
|
RTS
|
|
}
|
|
assert pc() <= $07A249
|
|
pullpc
|
|
print " LinkItem_CatchBottle ", pc
|
|
|
|
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
|
|
db $09, $04, $05, $06, $07, $08, $01, $02, $03, $04 ; left
|
|
db $0A, $08, $01, $02, $03, $04, $05, $06, $07, $08 ; right
|
|
|
|
pose_offset:
|
|
db $00 ; up
|
|
db $0A ; down
|
|
db $14 ; left
|
|
db $1E ; right
|
|
|
|
; *$3AFF8-$3B072 LOCAL
|
|
LinkItem_CatchBottle:
|
|
{
|
|
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
|
|
|
|
STZ $030D, X
|
|
|
|
LDA.b #$10 : STA $037A
|
|
LDA.b #$01 : TSB $50
|
|
|
|
STZ $2E
|
|
|
|
LDA.b #$32 : JSR Player_DoSfx2
|
|
|
|
.y_press:
|
|
JSR $AE65 ; HaltLinkWhenUsingItems
|
|
|
|
LDA $67 : AND.b #$F0 : STA $67
|
|
DEC $3D : BPL .bottle_exit
|
|
LDX $030D : INX : STX $030D
|
|
LDA.b #$03 : STA $3D
|
|
LDA $2F : LSR A : TAY
|
|
LDA.w pose_offset, Y : CLC : ADC $030D : TAY
|
|
LDA.w pose_id, Y : STA $0300
|
|
CPX.b #$0A : BNE .bottle_exit
|
|
|
|
STZ $030D
|
|
STZ $0300
|
|
|
|
LDA $3A : AND.b #$80 : STA $3A
|
|
STZ $037A
|
|
|
|
LDA $50 : AND.b #$FE : STA $50
|
|
LDA.b #$80 : STA $44 : STA $45
|
|
|
|
.bottle_exit:
|
|
NetExit:
|
|
RTS
|
|
}
|
|
|
|
print " LinkItem_Bottles ", pc
|
|
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 BottleIndex : 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
|
|
CMP.b #$09 : BEQ .magic_bean
|
|
CMP.b #$0A : BEQ .milk_bottle
|
|
BRL .LinkItem_BeeBottle
|
|
|
|
.milk_bottle
|
|
LDA.l $7EF36C : CMP.l $7EF36D : BEQ .LinkItem_UselessBottle
|
|
JSL Bottle_DrinkMilk
|
|
RTS
|
|
|
|
.magic_bean
|
|
JSL ReleaseMagicBean
|
|
RTS
|
|
|
|
.fairy
|
|
BRL .LinkItem_FairyBottle
|
|
|
|
.LinkItem_RedPotion
|
|
LDA.l $7EF36C : CMP.l $7EF36D : BNE .can_drink_red
|
|
|
|
.LinkItem_UselessBottle
|
|
BRL LinkGoBeep ; BRL $07A955 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 RebuildHUD_long
|
|
|
|
RTS
|
|
|
|
.LinkItem_GreenPotion
|
|
LDA.l $7EF36E : CMP.b #$80 : BNE .can_drink
|
|
BRL LinkGoBeep
|
|
|
|
.can_drink
|
|
; Set the bottle empty
|
|
LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301
|
|
|
|
; submodule ????
|
|
LDA.b #$08 : 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 RebuildHUD_long
|
|
BRA .bottle_exit
|
|
|
|
.LinkItem_BluePotion
|
|
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
|
|
|
|
; 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 RebuildHUD_long
|
|
BRA .bottle_exit
|
|
|
|
.LinkItem_FairyBottle
|
|
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
|
|
}
|
|
|
|
LinkGoBeep:
|
|
{
|
|
LDA.b #$3C : JSR Player_DoSfx2
|
|
BRA LinkItem_Bottles_bottle_exit
|
|
}
|
|
|
|
Bottle_DrinkMilk:
|
|
{
|
|
LDA.b #$28 : STA.l $7EF372 ; Heal 5 hearts
|
|
LDA.b #$02 : STA.l $7EF35C, X : STZ.w $0301
|
|
RTL
|
|
}
|
|
|
|
%log_end("Items/bottle_net.asm", !LOG_ITEMS)
|
|
pushpc
|