Files
alttpr-baserom/pseudoflute.asm

151 lines
1.9 KiB
NASM

SelectFirstFluteSpot:
LDA.l FluteBitfield
CMP.b #$FF
BNE +
RTL
+ LDA.b #$07
STA.w FluteSelection
.try_next
LDA.w FluteSelection
INC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
RTL
SelectFluteNext:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w FluteSelection
INC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
RTL
SelectFlutePrev:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w FluteSelection
DEC A
AND.b #$07
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
RTL
InvalidBeep:
LDA.b #$3C
STA.w $012E
RTL
SetFluteSpotPalette:
XBA
LDA.l FluteBitfield
AND.l FluteMenuNumbers_bits, X
BNE .disabled
.enabled
XBA
STA.b $0C
BRA .done
.disabled
LDA.b #$30
STA.b $0C
.done
LDA.b #$00
STA.b $0B
RTL
MaybeMarkFluteSpotVisited:
; don't ever allow the portal in desert/mire to be marked visited
CMP.b #$30 : BEQ .done
CMP.b #$70 : BEQ .done
LDX.b #$0E
.next
CMP.l $02E849, X
BEQ .mark
DEX : DEX
BPL .next
BRA .done
.mark
TXA
LSR A
TAX
LDA.l FluteMenuNumbers_bits, X
EOR.b #$FF
AND.l FluteBitfield
STA.l FluteBitfield
.done
RTL
CheckEnterOverworld:
LDA.l $7EC213
STA.b $8A ; what we wrote over
SEP #$20
JSL MaybeMarkFluteSpotVisited
REP #$20
RTL
CheckTransitionOverworld:
STA.b $8A
STA.w $040A ; what we wrote over
JML MaybeMarkFluteSpotVisited
CheckFlute:
LDA.l FluteBitfield
AND.w #$00FF
BNE .pseudo
.real
LDA.w #$0003
BRA .done
.pseudo
LDA.w #$0002
.done
RTS
DrawFluteIcon:
AND.w #$00FF
CMP.w #$0002
BCC +
JSR CheckFlute
+
STA.b $02
RTL
CheckFluteInHUD:
LDA.l EquipmentWRAM-1, X
AND.w #$00FF ; what we wrote over
CPX.w #$000D
BNE +
CMP.w #$0002
BCC +
JSR CheckFlute
+
RTL