diff --git a/fileselect.asm b/fileselect.asm index 15d7a9d..1931199 100644 --- a/fileselect.asm +++ b/fileselect.asm @@ -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 diff --git a/initsramtable.asm b/initsramtable.asm index 224fd43..75bd7eb 100644 --- a/initsramtable.asm +++ b/initsramtable.asm @@ -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 diff --git a/newitems.asm b/newitems.asm index 3591544..b04478f 100755 --- a/newitems.asm +++ b/newitems.asm @@ -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 diff --git a/owrando.asm b/owrando.asm index 00004be..57a29ea 100644 --- a/owrando.asm +++ b/owrando.asm @@ -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 diff --git a/pseudoflute.asm b/pseudoflute.asm index 3b60b04..eabf71b 100644 --- a/pseudoflute.asm +++ b/pseudoflute.asm @@ -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 diff --git a/ram.asm b/ram.asm index cc98bdc..9309c0e 100644 --- a/ram.asm +++ b/ram.asm @@ -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 ; diff --git a/vanillalabels.asm b/vanillalabels.asm index 8ee4842..cff3219 100644 --- a/vanillalabels.asm +++ b/vanillalabels.asm @@ -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