Invert bitfield for pseudoflute

This commit is contained in:
2026-01-15 04:05:30 -06:00
parent 727c265811
commit 420f2477fc
7 changed files with 51 additions and 48 deletions

View File

@@ -248,7 +248,7 @@ DrawPlayerFileShared:
; Flute
LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ +
LDA.l $7003C2 : AND.w #$00FF : CMP.w #$00FF : BNE .pseudo
LDA.l $7003C2 : AND.w #$00FF : BNE .pseudo
%fs_drawItem(7,16,FileSelectItems_flute)
BRA ++
.pseudo

View File

@@ -115,7 +115,7 @@ InitInventoryTracking: skip 2 ; PC 0x18338C \ Need to set bits here fo
InitBowTracking: skip 2 ; PC 0x18338E / boomerangs, powder/mushroom, etc
InitItemLimitCounts: skip 16 ; PC 0x183390
skip 34 ;
InitFluteBitfield: db $FF ;
InitFluteBitfield: db $00 ;
InitSpecialWeaponLevel: db $00 ;
InitItemOnB: db $00 ;
InitProgressIndicator: db $02 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard

View File

@@ -188,12 +188,12 @@ ItemBehavior:
BRA .store_inventory_tracking
.flute_inactive
LDA.b #$FF : STA.l FluteBitfield
LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$02
BRA .store_inventory_tracking
.flute_active
LDA.b #$FF : STA.l FluteBitfield
LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$01
BRA .store_inventory_tracking

View File

@@ -320,7 +320,7 @@ OWLightWorldOrCrossed:
OWFluteCancel:
{
lda.l FluteBitfield : beq +
lda.l FluteBitfield : cmp.b #$FF : beq +
lda.l OWFlags+1 : and.b #$01 : bne +
jsl FluteMenu_LoadTransport : rtl
+ lda.w RandoOverworldTargetEdge : bne +
@@ -332,7 +332,7 @@ OWFluteCancel2:
lda.b Joy1B_All : ora.b Joy1A_All : and.b #$c0 : bne +
jml FluteMenu_HandleSelection_NoSelection
+ inc.w SubModuleInterface
lda.l FluteBitfield : beq .cancel
lda.l FluteBitfield : cmp.b #$FF : beq .cancel
lda.l OWFlags+1 : and.b #$01 : beq +
lda.b Joy1B_All : cmp.b #$40 : bne +
.cancel

View File

@@ -1,35 +1,37 @@
SelectFirstFluteSpot:
LDA.l FluteBitfield
CMP.b #$FF
BNE +
RTL
+ LDA.b #$07
STA.w $1AF0
STA.w FluteSelection
.try_next
LDA.w $1AF0
LDA.w FluteSelection
INC A
AND.b #$07
STA.w $1AF0
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l $8AB7A3, X
BEQ .try_next
AND.l FluteMenuNumbers_bits, X
BNE .try_next
RTL
SelectFluteNext:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w $1AF0
LDA.w FluteSelection
INC A
AND.b #$07
STA.w $1AF0
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l $8AB7A3, X
BEQ .try_next
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
@@ -37,18 +39,19 @@ RTL
SelectFlutePrev:
LDA.l FluteBitfield
CMP.b #$FF
BEQ InvalidBeep
.try_next
LDA.w $1AF0
LDA.w FluteSelection
DEC A
AND.b #$07
STA.w $1AF0
STA.w FluteSelection
TAX
LDA.l FluteBitfield
AND.l $8AB7A3, X
BEQ .try_next
AND.l FluteMenuNumbers_bits, X
BNE .try_next
LDA.b #$20
STA.w $012F
@@ -62,8 +65,8 @@ RTL
SetFluteSpotPalette:
XBA
LDA.l FluteBitfield
AND.l $8AB7A3, X
BEQ .disabled
AND.l FluteMenuNumbers_bits, X
BNE .disabled
.enabled
XBA
STA.b $0C
@@ -93,8 +96,9 @@ MaybeMarkFluteSpotVisited:
TXA
LSR A
TAX
LDA.l FluteBitfield
ORA.l $8AB7A3, X
LDA.l FluteMenuNumbers_bits, X
EOR.b #$FF
AND.l FluteBitfield
STA.l FluteBitfield
.done
@@ -113,33 +117,9 @@ CheckTransitionOverworld:
STA.w $040A ; what we wrote over
JML MaybeMarkFluteSpotVisited
DrawFluteIcon:
AND.w #$00FF
CMP.w #$0002
BCC .write
CheckFlute:
LDA.l FluteBitfield
AND.w #$00FF
CMP.w #$00FF
BNE .pseudo
.real
LDA.w #$0003
BRA .write
.pseudo
LDA.w #$0002
.write
STA.b $02
RTL
CheckFluteInHUD:
LDA.l $7EF33F, X
AND.w #$00FF ; what we wrote over
CPX.w #$000D
BNE .done
CMP.w #$0002
BCC .done
LDA.l FluteBitfield
AND.w #$00FF
CMP.w #$00FF
BNE .pseudo
.real
LDA.w #$0003
@@ -147,4 +127,24 @@ CheckFluteInHUD:
.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

View File

@@ -468,6 +468,8 @@ RoomStripes = $7E1100 ; Used for room drawing.
;
MirrorPortalPosXH = $7E1ACF ; Mirror portal position. (High byte of X coordinate)
;
FluteSelection = $7E1AF0 ; Currently selected flute spot (zero-indexed)
;
IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?).
;
MessageSubModule = $7E1CD8 ;

View File

@@ -283,6 +283,7 @@ EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
Sprite_ShowSolicitedMessage_Direction = $85E1A3
FluteMenuNumbers_bits = $8AB7A3
WorldMap_RedXChars = $8ABF70
WorldMap_CalculateOAMCoordinates = $8AC3B1
WorldMap_HandleSpriteBlink = $8AC52E