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 ; Flute
LDA.l InventoryTrackingSRAM : AND.w #$0003 : BEQ + 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) %fs_drawItem(7,16,FileSelectItems_flute)
BRA ++ BRA ++
.pseudo .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 InitBowTracking: skip 2 ; PC 0x18338E / boomerangs, powder/mushroom, etc
InitItemLimitCounts: skip 16 ; PC 0x183390 InitItemLimitCounts: skip 16 ; PC 0x183390
skip 34 ; skip 34 ;
InitFluteBitfield: db $FF ; InitFluteBitfield: db $00 ;
InitSpecialWeaponLevel: db $00 ; InitSpecialWeaponLevel: db $00 ;
InitItemOnB: db $00 ; InitItemOnB: db $00 ;
InitProgressIndicator: db $02 ; PC 0x1833C5 - Set to $80 for instant post-aga with standard 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 BRA .store_inventory_tracking
.flute_inactive .flute_inactive
LDA.b #$FF : STA.l FluteBitfield LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$02 LDA.l InventoryTracking : ORA.b #$02
BRA .store_inventory_tracking BRA .store_inventory_tracking
.flute_active .flute_active
LDA.b #$FF : STA.l FluteBitfield LDA.b #$00 : STA.l FluteBitfield
LDA.l InventoryTracking : ORA.b #$01 LDA.l InventoryTracking : ORA.b #$01
BRA .store_inventory_tracking BRA .store_inventory_tracking

View File

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

View File

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

View File

@@ -468,6 +468,8 @@ RoomStripes = $7E1100 ; Used for room drawing.
; ;
MirrorPortalPosXH = $7E1ACF ; Mirror portal position. (High byte of X coordinate) 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 (?). IrisPtr = $7E1B00 ; Spotlight pointers for HDMA. $1C0 bytes (?).
; ;
MessageSubModule = $7E1CD8 ; MessageSubModule = $7E1CD8 ;

View File

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