diff --git a/bookofmudora.asm b/bookofmudora.asm index bb63512..bd5ec42 100644 --- a/bookofmudora.asm +++ b/bookofmudora.asm @@ -67,7 +67,7 @@ GiveBonkItem: PHY : LDY.b #$24 : JSL AddInventory : PLY ; do inventory processing for a small key LDA.l CurrentSmallKeys : INC A : STA.l CurrentSmallKeys LDA.b #$2F : JSL Sound_SetSfx3PanLong - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag RTL .notKey PHY : TAY : JSL Link_ReceiveItem : PLY diff --git a/build_linux.sh b/build_linux.sh index 7c3af51..2e195ea 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -2,4 +2,4 @@ rm ../working.sfc cp ../alttp.sfc ../working.sfc -./bin/linux/asar LTTP_RND_GeneralBugfixes.asm ../working.sfc +./bin/linux/asar -DFEATURE_PATREON_SUPPORTERS=1 LTTP_RND_GeneralBugfixes.asm ../working.sfc diff --git a/data/customitems.4bpp b/data/customitems.4bpp index f7584f1..1ef9107 100644 Binary files a/data/customitems.4bpp and b/data/customitems.4bpp differ diff --git a/data/customitems.png b/data/customitems.png index 93adf4c..558dcde 100644 Binary files a/data/customitems.png and b/data/customitems.png differ diff --git a/data/textbytecharmap.txt b/data/textbytecharmap.txt new file mode 100644 index 0000000..bf4cfe0 --- /dev/null +++ b/data/textbytecharmap.txt @@ -0,0 +1,61 @@ +'=9D +A=AA +B=AB +C=AC +D=AD +E=AE +F=AF +G=B0 +H=B1 +I=B2 +J=B3 +K=B4 +L=B5 +M=B6 +N=B7 +O=B8 +P=B9 +Q=BA +R=BB +S=BC +T=BD +U=BE +V=BF +W=C0 +X=C1 +Y=C2 +Z=C3 +?=C6 +!=C7 +,=C8 +-=C9 +.=CD +~=CE +a=D0 +b=D1 +c=D2 +d=D3 +e=D4 +f=D5 +g=D6 +h=D7 +i=D8 +j=D9 +k=DA +l=DB +m=DC +n=DD +o=DE +p=DF +q=E0 +r=E1 +s=E2 +t=E3 +u=E4 +v=E5 +w=E6 +x=E7 +y=E8 +z=E9 +:=EA + =FF diff --git a/data/textwordcharmap.txt b/data/textwordcharmap.txt new file mode 100644 index 0000000..a3b8c64 --- /dev/null +++ b/data/textwordcharmap.txt @@ -0,0 +1,61 @@ +'=9D00 +A=AA00 +B=AB00 +C=AC00 +D=AD00 +E=AE00 +F=AF00 +G=B000 +H=B100 +I=B200 +J=B300 +K=B400 +L=B500 +M=B600 +N=B700 +O=B800 +P=B900 +Q=BA00 +R=BB00 +S=BC00 +T=BD00 +U=BE00 +V=BF00 +W=C000 +X=C100 +Y=C200 +Z=C300 +?=C600 +!=C700 +,=C800 +-=C900 +.=CD00 +~=CE00 +a=D000 +b=D100 +c=D200 +d=D300 +e=D400 +f=D500 +g=D600 +h=D700 +i=D800 +j=D900 +k=DA00 +l=DB00 +m=DC00 +n=DD00 +o=DE00 +p=DF00 +q=E000 +r=E100 +s=E200 +t=E300 +u=E400 +v=E500 +w=E600 +x=E700 +y=E800 +z=E900 +:=EA00 + =FF00 diff --git a/dialog.asm b/dialog.asm index 4ec50c3..76935de 100644 --- a/dialog.asm +++ b/dialog.asm @@ -61,7 +61,7 @@ LoadDialogAddressIndirect: RTL ;-------------------------------------------------------------------------------- FreeDungeonItemNotice: - STA.w ScratchBufferV + STA.l ScratchBufferV PHA : PHX : PHY PHP @@ -70,59 +70,59 @@ FreeDungeonItemNotice: REP #$10 ; set 16-bit index registers PEI.b (Scrap00) LDA.b Scrap02 : PHA - LDA.w ScratchBufferNV : PHA - LDA.w ScratchBufferNV+1 : PHA + LDA.l ScratchBufferNV : PHA + LDA.l ScratchBufferNV+1 : PHA ;-------------------------------- LDA.l FreeItemText : BNE + : JMP .skip : + - LDA.b #$00 : STA.w ScratchBufferNV ; initialize scratch + LDA.b #$00 : STA.l ScratchBufferNV ; initialize scratch LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for general small key - LDA.w ScratchBufferV : CMP.b #$24 : BNE + ; general small key + LDA.l ScratchBufferV : CMP.b #$24 : BNE + ; general small key %CopyDialog(Notice_SmallKeyOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for general compass - LDA.w ScratchBufferV : CMP.b #$25 : BNE + ; general compass + LDA.l ScratchBufferV : CMP.b #$25 : BNE + ; general compass %CopyDialog(Notice_CompassOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for general map - LDA.w ScratchBufferV : CMP.b #$33 : BNE + ; general map + LDA.l ScratchBufferV : CMP.b #$33 : BNE + ; general map %CopyDialog(Notice_MapOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for general big key - LDA.w ScratchBufferV : CMP.b #$32 : BNE + ; general big key + LDA.l ScratchBufferV : CMP.b #$32 : BNE + ; general big key %CopyDialog(Notice_BigKeyOf) LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer %CopyDialog(Notice_Self) JMP .done + LDA.l FreeItemText : AND.b #$04 : BEQ + ; show message for dungeon map - LDA.w ScratchBufferV : AND.b #$F0 ; looking at high bits only + LDA.l ScratchBufferV : AND.b #$F0 ; looking at high bits only CMP.b #$70 : BNE + ; map of... %CopyDialog(Notice_MapOf) JMP .dungeon + : LDA.l FreeItemText : AND.b #$02 : BEQ + ; show message for dungeon compass - LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... + LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$80 : BNE + ; compass of... %CopyDialog(Notice_CompassOf) JMP .dungeon + : LDA.l FreeItemText : AND.b #$08 : BEQ + ; show message for dungeon big key - LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... + LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$90 : BNE + ; big key of... %CopyDialog(Notice_BigKeyOf) JMP .dungeon + : LDA.l FreeItemText : AND.b #$01 : BEQ + ; show message for dungeon small key - LDA.w ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... - LDA.w ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ + LDA.l ScratchBufferV : AND.b #$F0 : CMP.b #$A0 : BNE + ; small key of... + LDA.l ScratchBufferV : CMP.b #$AF : BNE ++ : JMP .skip : ++ %CopyDialog(Notice_SmallKeyOf) - LDA.b #$01 : STA.w ScratchBufferNV ; set up a flip for small keys + LDA.b #$01 : STA.l ScratchBufferNV ; set up a flip for small keys BRA .dungeon + : LDA.l FreeItemText : AND.b #$20 : BEQ + ; show message for crystal - LDA.w ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal # + LDA.l ScratchBufferV : CMP.b #$B0 : !BLT + ; crystal # CMP.b #$B7 : !BGE + %CopyDialog(Notice_Crystal) JMP .crystal @@ -131,14 +131,14 @@ FreeDungeonItemNotice: .dungeon LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer - LDA.w ScratchBufferV + LDA.l ScratchBufferV AND.b #$0F - STA.w ScratchBufferNV+1 - LDA.w ScratchBufferNV : BEQ + - LDA.w ScratchBufferNV - LDA.b #$0F : !SUB.w ScratchBufferNV+1 : STA.w ScratchBufferNV+1 ; flip the values for small keys + STA.l ScratchBufferNV+1 + LDA.l ScratchBufferNV : BEQ + + LDA.l ScratchBufferNV + LDA.b #$0F : !SUB.l ScratchBufferNV+1 : STA.l ScratchBufferNV+1 ; flip the values for small keys + - LDA.w ScratchBufferNV+1 + LDA.l ScratchBufferNV+1 ASL : TAX REP #$20 LDA.l DungeonItemIDMap,X : CMP.w #$0003 : BCC .hc_sewers @@ -152,7 +152,7 @@ FreeDungeonItemNotice: JMP .done + SEP #$20 - LDA.w ScratchBufferNV+1 + LDA.l ScratchBufferNV+1 CMP.b #$00 : BNE + ; ...light world %CopyDialog(Notice_LightWorld) : JMP .done + : CMP.b #$01 : BNE + ; ...dark world @@ -190,7 +190,7 @@ FreeDungeonItemNotice: .crystal LDA.l DialogReturnPointer : DEC #2 : STA.l DialogOffsetPointer - LDA.w ScratchBufferV + LDA.l ScratchBufferV AND.b #$0F ; looking at low bits only CMP.b #$00 : BNE + %CopyDialog(Notice_Six) : JMP .done @@ -216,8 +216,8 @@ FreeDungeonItemNotice: ;-------------------------------- .skip - PLA : STA.w ScratchBufferNV+1 - PLA : STA.w ScratchBufferNV + PLA : STA.l ScratchBufferNV+1 + PLA : STA.l ScratchBufferNV PLA : STA.b Scrap02 REP #$20 PLA : STA.b Scrap00 diff --git a/dungeondrops.asm b/dungeondrops.asm index 9d0298c..2a7a2ef 100644 --- a/dungeondrops.asm +++ b/dungeondrops.asm @@ -3,6 +3,11 @@ ;-------------------------------------------------------------------------------- SpawnDungeonPrize: PHX : PHB + TAX + LDA.b $06,S : STA.b ScrapBuffer72 ; Store current RoomTag index + TXA + JSL.l AttemptItemSubstitution + JSL.l ResolveLootIDLong JSL AttemptItemSubstitution JSL ResolveLootIDLong STA.w ItemReceiptID @@ -14,6 +19,7 @@ SpawnDungeonPrize: LDA.w ItemReceiptID STA.w AncillaGet,X : STA.w SpriteID,X JSR AddDungeonPrizeAncilla + LDX.b ScrapBuffer72 : STZ.b RoomTag,X .failed_spawn PLB : PLX RTL diff --git a/entrances.asm b/entrances.asm index 8d4505d..f33fbf1 100644 --- a/entrances.asm +++ b/entrances.asm @@ -154,7 +154,7 @@ JML AllowStartFromExitReturn STZ.b SubSubModule STZ.w DeathReloadFlag STZ.w RespawnFlag - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag JSL Equipment_SearchForEquippedItemLong JSL HUD_RebuildIndoor_Palace diff --git a/events.asm b/events.asm index ba5c4ba..8f9e797 100644 --- a/events.asm +++ b/events.asm @@ -23,7 +23,7 @@ JML ReturnFromOnDrawHud OnDungeonEntrance: STA.l PegColor ; thing we wrote over JSL MaybeFlagDungeonTotalsEntrance - INC.w UpdateHUDFlag + LDA.w #$0001 : STA.l UpdateHUDFlag RTL ;-------------------------------------------------------------------------------- OnDungeonBossExit: @@ -47,7 +47,7 @@ OnDungeonExit: STA.w DungeonID : STZ.w Map16ChangeIndex ; thing we wrote over PHA : PHP - INC.w UpdateHUDFlag + LDA.w #$0001 : STA.l UpdateHUDFlag JSL HUD_RebuildLong JSL FloodGateResetInner JSL SetSilverBowMode @@ -230,7 +230,7 @@ OnOWTransition: PHP SEP #$20 ; set 8-bit accumulator LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag PLP RTL ;-------------------------------------------------------------------------------- diff --git a/heartpieces.asm b/heartpieces.asm index cd1e50e..5509e67 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -47,9 +47,11 @@ DrawHeartPieceGFX: LDA.w SpriteControl, X : ORA.b #$20 : STA.w SpriteControl, X PLA JSL DrawDynamicTile + REP #$21 LDA.b Scrap00 - CLC : ADC.b #$04 + ADC.w #$0004 STA.b Scrap00 + SEP #$20 JSL Sprite_DrawShadowLong BRA .done + diff --git a/hooks.asm b/hooks.asm index 91b60b8..e045cca 100644 --- a/hooks.asm +++ b/hooks.asm @@ -1026,7 +1026,7 @@ org $81C517 : JSL CheckDungeonCompletion org $81C523 : JSL CheckDungeonCompletion org $81C710 : JSL CheckSpawnPrize BCS RoomTag_GetHeartForPrize_spawn_prize : BRA RoomTag_GetHeartForPrize_delete_tag -org $81C742 : JSL SpawnDungeonPrize +org $81C742 : JSL SpawnDungeonPrize : PLA : RTS org $8799EA : JML SetItemPose org $88C415 : JSL PendantMusicCheck BCS Ancilla22_ItemReceipt_is_pendant : BRA Ancilla22_ItemReceipt_wait_for_music @@ -1464,7 +1464,7 @@ RebuildHUD_update_long: JSR RebuildHUD_update : RTL RefreshIcon_UpdateHUD: -INC.w UpdateHUDFlag +LDA.b #$01 : STA.l UpdateHUDFlag JSR RebuildHUD JSR UpdateEquippedItem RTS diff --git a/inventory.asm b/inventory.asm index 9275e1a..cef2655 100644 --- a/inventory.asm +++ b/inventory.asm @@ -254,10 +254,9 @@ StampItem: LDA.b [Scrap0B] : BNE .skip INC.b Scrap0B : INC.b Scrap0B LDA.b [Scrap0B] : BNE .skip + LDA.l NMIFrames+2 : STA.b [Scrap0B] DEC.b Scrap0B : DEC.b Scrap0B LDA.l NMIFrames : STA.b [Scrap0B] - INC.b Scrap0B : INC.b Scrap0B - LDA.l NMIFrames+2 : STA.b [Scrap0B] .skip SEP #$20 RTS @@ -374,7 +373,7 @@ Link_ReceiveItem_HUDRefresh: + JSL HUD_RefreshIconLong ; thing we wrote over - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag JSL PostItemGet RTL ;-------------------------------------------------------------------------------- @@ -389,7 +388,7 @@ HandleBombAbsorbtion: LDA.b #$04 : STA.w ItemCursor ; set selected item to bombs LDA.b #$01 : STA.w CurrentYItem ; set selected item to bombs JSL HUD_RebuildLong - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag + RTL ;-------------------------------------------------------------------------------- diff --git a/itemdatatables.asm b/itemdatatables.asm index cf64c31..3d035d0 100644 --- a/itemdatatables.asm +++ b/itemdatatables.asm @@ -765,7 +765,7 @@ endmacro %InventoryItem($46, $0001, $0000, $0000) ; 46 - 300 rupees %InventoryItem($47, $0001, $0000, $0000) ; 47 - 20 rupees green %InventoryItem($48, $0085, $0000, $0000) ; 48 - Full bottle (good bee) -%InventoryItem($49, $0081, $0000, $0000) ; 49 - Tossed fighter sword +%InventoryItem($49, $0081, SwordTime, $0000) ; 49 - Tossed fighter sword %InventoryItem($4A, $0085, FluteTime, $0000) ; 4A - Active Flute %InventoryItem($4B, $0089, BootsTime, $0000) ; 4B - Boots %InventoryItem($4C, $0015, $0000, CapacityUpgrades) ; 4C - Bomb capacity (50) diff --git a/itemtext.asm b/itemtext.asm index d4061f7..dfe9530 100644 --- a/itemtext.asm +++ b/itemtext.asm @@ -1,147 +1,149 @@ +table "data/textwordcharmap.txt" + org $B28000 ; You have found ; the map of Notice_MapOf: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $DC, $00, $D0, $00, $DF, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F +db $74 : dw "You have found" +db $75 : dw "the map of" +dw $7F7F ; You have found ; the compass of Notice_CompassOf: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $D7, $00, $D0, $00, $E5, $00, $D4, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $DD, $00, $D3 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D2, $00, $DE, $00, $DC, $00, $DF, $00, $D0, $00, $E2, $00, $E2, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F +db $74 : dw "You have found" +db $75 : dw "the compass of" +dw $7F7F ; Oh look! it's ; the big key of Notice_BigKeyOf: - db $74, $00, $B8, $00, $D7, $00, $FF, $00, $DB, $00, $DE, $00, $DE, $00, $DA, $00, $C7, $00, $FF, $00, $D8, $00, $E3, $00, $9D, $00, $E2 - db $75, $00, $E3, $00, $D7, $00, $D4, $00, $FF, $00, $D1, $00, $D8, $00, $D6, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $DE, $00, $D5 - dw #$7F7F +db $74 : dw "Oh look! it's" +db $75 : dw "the big key of" +dw $7F7F -; this is a +; This is a ; small key to Notice_SmallKeyOf: - db $74, $00, $BD, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D8, $00, $E2, $00, $FF, $00, $D0 - db $75, $00, $E2, $00, $DC, $00, $D0, $00, $DB, $00, $DB, $00, $FF, $00, $DA, $00, $D4, $00, $E8, $00, $FF, $00, $E3, $00, $DE - dw #$7F7F +db $74 : dw "This is a" +db $75 : dw "small key to" +dw $7F7F ; You picked up Notice_Crystal: - db $74, $00, $C2, $00, $DE, $00, $E4, $00, $FF, $00, $DF, $00, $D8, $00, $D2, $00, $DA, $00, $D4, $00, $D3, $00, $FF, $00, $E4, $00, $DF - dw $7F7F +db $74 : dw "You picked up" +dw $7F7F -; light world +; Light World Notice_LightWorld: - db $76, $00, $B5, $00, $D8, $00, $D6, $00, $D7, $00, $E3, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 - dw #$7F7F +db $76 : dw "Light World" +dw $7F7F -; dark world +; Dark World Notice_DarkWorld: - db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $C0, $00, $DE, $00, $E1, $00, $DB, $00, $D3 - dw #$7F7F +db $76 : dw "Dark World" +dw $7F7F ; Ganons Tower Notice_GTower: - db $76, $00, $B0, $00, $D0, $00, $DD, $00, $DE, $00, $DD, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 - dw #$7F7F +db $76 : dw "Ganons Tower" +dw $7F7F ; Turtle Rock Notice_TRock: - db $76, $00, $BD, $00, $E4, $00, $E1, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BB, $00, $DE, $00, $D2, $00, $DA - dw #$7F7F +db $76 : dw "Turtle Rock" +dw $7F7F ; Thieves Town Notice_Thieves: - db $76, $00, $BD, $00, $D7, $00, $D8, $00, $D4, $00, $E5, $00, $D4, $00, $E2, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $DD - dw #$7F7F +db $76 : dw "Thieves Town" +dw $7F7F ; Tower of Hera Notice_Hera: - db $76, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1, $00, $FF, $00, $DE, $00, $D5, $00, $FF, $00, $B1, $00, $D4, $00, $E1, $00, $D0 - dw #$7F7F +db $76 : dw "Tower of Hera" +dw $7F7F ; Ice Palace Notice_Ice: - db $76, $00, $B2, $00, $D2, $00, $D4, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F +db $76 : dw "Ice Palace" +dw $7F7F ; Skull Woods Notice_Skull: - db $76, $00, $BC, $00, $DA, $00, $E4, $00, $DB, $00, $DB, $00, $FF, $00, $C0, $00, $DE, $00, $DE, $00, $D3, $00, $E2 - dw #$7F7F +db $76 : dw "Skull Woods" +dw $7F7F ; Misery Mire Notice_Mire: - db $76, $00, $B6, $00, $D8, $00, $E2, $00, $D4, $00, $E1, $00, $E8, $00, $FF, $00, $B6, $00, $D8, $00, $E1, $00, $D4 - dw #$7F7F +db $76 : dw "Misery Mire" +dw $7F7F ; Dark Palace Notice_PoD: - db $76, $00, $AD, $00, $D0, $00, $E1, $00, $DA, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F +db $76 : dw "Dark Palace" +dw $7F7F ; Swamp Palace Notice_Swamp: - db $76, $00, $BC, $00, $E6, $00, $D0, $00, $DC, $00, $DF, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F +db $76 : dw "Swamp Palace" +dw $7F7F ; Castle Tower Notice_AgaTower: - db $76, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4, $00, $FF, $00, $BD, $00, $DE, $00, $E6, $00, $D4, $00, $E1 - dw #$7F7F +db $76 : dw "Castle Tower" +dw $7F7F ; Desert Palace Notice_Desert: - db $76, $00, $AD, $00, $D4, $00, $E2, $00, $D4, $00, $E1, $00, $E3, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F +db $76 : dw "Desert Palace" +dw $7F7F ; Eastern Palace Notice_Eastern: - db $76, $00, $AE, $00, $D0, $00, $E2, $00, $E3, $00, $D4, $00, $E1, $00, $DD, $00, $FF, $00, $B9, $00, $D0, $00, $DB, $00, $D0, $00, $D2, $00, $D4 - dw #$7F7F +db $76 : dw "Eastern Palace" +dw $7F7F ; Hyrule Castle Notice_Castle: - db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 - dw #$7F7F +db $76 : dw "Hyrule Castle" +dw $7F7F ; Hyrule Castle Notice_Sewers: - db $76, $00, $B1, $00, $E8, $00, $E1, $00, $E4, $00, $DB, $00, $D4, $00, $FF, $00, $AC, $00, $D0, $00, $E2, $00, $E3, $00, $DB, $00, $D4 - dw #$7F7F +db $76 : dw "Hyrule Castle" +dw $7F7F ; This Dungeon Notice_Self: - db $76, $00, $E3, $00, $D7, $00, $D8, $00, $E2, $00, $FF, $00, $D3, $00, $E4, $00, $DD, $00, $D6, $00, $D4, $00, $DE, $00, $Dd - dw #$7F7F +db $76 : dw "this dungeon" +dw $7F7F ; Crystal numbers Notice_One: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $DE, $00, $DD, $00, $D4 - dw #$7F7F +db $75 : dw "crystal one" +dw $7F7F Notice_Two: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $E6, $00, $DE - dw #$7F7F +db $75 : dw "crystal two" +dw $7F7F Notice_Three: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E3, $00, $D7, $00, $E1, $00, $D4, $00, $D4 - dw #$7F7F +db $75 : dw "crystal three" +dw $7F7F Notice_Four: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $DE, $00, $E4, $00, $E1 - dw #$7F7F +db $75 : dw "crystal four" +dw $7F7F Notice_Five: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $D5, $00, $D8, $00, $E5, $00, $D4 - dw #$7F7F +db $75 : dw "crystal five" +dw $7F7F Notice_Six: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D8, $00, $E7 - dw #$7F7F +db $75 : dw "crystal six" +dw $7F7F Notice_Seven: - db $75, $00, $D2, $00, $E1, $00, $E8, $00, $E2, $00, $E3, $00, $D0, $00, $DB, $00, $FF, $00, $E2, $00, $D4, $00, $E5, $00, $D4, $00, $DD - dw #$7F7F +db $75 : dw "crystal seven" +dw $7F7F diff --git a/msu.asm b/msu.asm index 9f30049..987465c 100644 --- a/msu.asm +++ b/msu.asm @@ -164,27 +164,27 @@ CheckMusicLoadRequest: .continue LDA.l TournamentSeed : BNE +++ - LDA.w MSUPackRequest - CMP.w MSUPackCurrent : BEQ +++ - CMP.w MSUPackCount : !BLT ++ + LDA.l MSUPackRequest + CMP.l MSUPackCurrent : BEQ +++ + CMP.l MSUPackCount : !BLT ++ CMP.b #$FE : !BLT + - STA.w MSUPackCurrent + STA.l MSUPackCurrent SEP #$10 LDA.b #$00 LDX.b #$07 - - STA.w MSUFallbackTable,X + STA.l MSUFallbackTable,X DEX : BPL - REP #$10 BRA +++ - + : LDA.w MSUPackCurrent : STA.w MSUPackRequest - ++ : STA.w MSUPackCurrent + + : LDA.l MSUPackCurrent : STA.l MSUPackRequest + ++ : STA.l MSUPackCurrent JSL MSUInit_check_fallback +++ LDA.w MusicControlRequest : CMP.b #$08 : BEQ ++ ; Mirror SFX is not affected by NoBGM or pack $FE LDA.l NoBGM : BNE + - LDA.w MSUPackCurrent : CMP.b #$FE : BNE ++ + LDA.l MSUPackCurrent : CMP.b #$FE : BNE ++ + : JMP .mute ++ @@ -246,7 +246,7 @@ CheckMusicLoadRequest: LDA.l MusicShuffleTable-1,X : DEC : PHA AND.b #$07 : TAY PLA : LSR #3 : TAX - LDA.w MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute + LDA.l MSUFallbackTable,X : BEQ .secondary_fallback : CMP.b #$FF : BEQ .mute - : CPY.b #$00 : BEQ + LSR : DEY : BRA - @@ -362,7 +362,7 @@ SpiralStairsPreCheck: + LDA.l BigKeyField : AND.w #$0004 : BEQ .done ; Check that we have the GT big key - LDA.w MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track + LDA.l MSUFallbackTable+7 : AND.w #$0004 : BEQ .done ; Check that we have the extended track .fade LDX.b #$F1 : STX.w MusicControlRequest @@ -419,10 +419,10 @@ MSUInit: PHP LDA.b #$00 - STA.w MSULoadedTrack - STA.w MSUResumeTrack - STA.w MSUResumeTime : STA.w MSUResumeTime+1 : STA.w MSUResumeTime+2 : STA.w MSUResumeTime+3 - STA.w MSUResumeControl + STA.l MSULoadedTrack + STA.l MSUResumeTrack + STA.l MSUResumeTime : STA.l MSUResumeTime+1 : STA.l MSUResumeTime+2 : STA.l MSUResumeTime+3 + STA.l MSUResumeControl LDA.l NoBGM : BNE .done @@ -449,7 +449,7 @@ MSUInit: .wait_pack LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE .wait_pack LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BEQ .check_pack - TXA : STA.w MSUPackCount + TXA : STA.l MSUPackCount BRA + ; Check the current MSU-1 pack for tracks that require SPC fallback @@ -471,7 +471,7 @@ MSUInit: LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE + SEC + - LDA.w MSUFallbackTable,X : ROL : STA.w MSUFallbackTable,X + LDA.l MSUFallbackTable,X : ROL : STA.l MSUFallbackTable,X DEY : BPL .next_track DEX : BPL + @@ -492,11 +492,11 @@ MSUInit: ;-------------------------------------------------------------------------------- MSUStopPlaying: PHA : XBA : PHA - LDA.w MSULoadedTrack + LDA.l MSULoadedTrack JSR IsResumableTrack : BCC + ; dont save if we already saved recently REP #$20 - LDA.w MSUResumeTrack : AND.w #$00FF : BEQ ++ + LDA.l MSUResumeTrack : AND.w #$00FF : BEQ ++ LDA.l NMIFrames : !SUB.w MSUResumeTime : PHA LDA.l NMIFrames+2 : SBC.w MSUResumeTime+2 : BNE +++ PLA : CMP.l MSUResumeTimer : !BLT .too_early @@ -505,12 +505,12 @@ PHA : XBA : PHA PLA ++ ; saving - LDA.l NMIFrames : STA.w MSUResumeTime - LDA.l NMIFrames+2 : STA.w MSUResumeTime+2 + LDA.l NMIFrames : STA.l MSUResumeTime + LDA.l NMIFrames+2 : STA.l MSUResumeTime+2 SEP #$20 - LDA.w MSULoadedTrack : STA.w MSUResumeTrack - LDA.b #$00 : STA.w MSULoadedTrack ; dont take this path if we're calling again + LDA.l MSULoadedTrack : STA.l MSUResumeTrack + LDA.b #$00 : STA.l MSULoadedTrack ; dont take this path if we're calling again LDA.b #!FLAG_MSU_RESUME : STA.w MSUCTL ; save this track's position PLA : XBA : PLA RTS @@ -541,23 +541,23 @@ MSUMain: LDX.w MusicControl : BEQ + JMP .command_ff + - LDA.w MSUDelayedCommand : BEQ .do_fade + LDA.l MSUDelayedCommand : BEQ .do_fade .check_busy LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_BUSY : BNE - .ready LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE - .start - LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ + - EOR.b #!FLAG_RESUME_CANCEL : STA.w MSUResumeControl - REP #$20 : LDA.w MSULoadedTrack : STA.w MSUTRACK : SEP #$20 + LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_CANCEL : BEQ + + EOR.b #!FLAG_RESUME_CANCEL : STA.l MSUResumeControl + REP #$20 : LDA.l MSULoadedTrack : STA.w MSUTRACK : SEP #$20 BRA - + LDA.b #!VAL_VOLUME_FULL STA.w TargetVolume - LDA.w MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ + - EOR.b #!FLAG_RESUME_FADEIN : STA.w MSUResumeControl + LDA.l MSUResumeControl : BIT.b #!FLAG_RESUME_FADEIN : BEQ + + EOR.b #!FLAG_RESUME_FADEIN : STA.l MSUResumeControl LDA.b #$00 BRA ++ + @@ -569,17 +569,17 @@ MSUMain: LDA.w CurrentMSUTrack : DEC : PHA AND.b #$07 : TAY PLA : LSR #3 : TAX - LDA.w MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++ + LDA.l MSUFallbackTable,X : BEQ +++ : CMP.b #$FF : BEQ ++ - : CPY.b #$00 : BEQ + LSR : DEY : BRA - + AND.b #$01 : BEQ +++ - ++ : LDA.w MSUDelayedCommand + ++ : LDA.l MSUDelayedCommand +++ : STA.w MSUCTL LDA.b #$00 - STA.w MSUDelayedCommand + STA.l MSUDelayedCommand JML SPCContinue .do_fade: @@ -642,9 +642,9 @@ MSUMain: + CPX.w CurrentControlRequest : BEQ - LDA.b #$00 : XBA - LDA.w MSUPackCurrent : BEQ + - - : CMP.w MSUPackCount : !BLT + - !SUB.w MSUPackCount : BRA - + LDA.l MSUPackCurrent : BEQ + + - : CMP.l MSUPackCount : !BLT + + !SUB.l MSUPackCount : BRA - + JSR MSUStopPlaying @@ -657,11 +657,11 @@ MSUMain: DEX : BNE - + STA.w MSUTRACK - STA.w MSULoadedTrack + STA.l MSULoadedTrack SEP #$20 PLX - TXA : CMP.w MSUResumeTrack : BNE + ; dont resume if too late + TXA : CMP.l MSUResumeTrack : BNE + ; dont resume if too late REP #$20 LDA.l NMIFrames : !SUB.w MSUResumeTime : PHA LDA.l NMIFrames+2 : SBC.w MSUResumeTime+2 : BNE ++ @@ -674,8 +674,8 @@ MSUMain: SEP #$20 LDA.b #!FLAG_RESUME_CANCEL .done_resume: - STA.w MSUResumeControl - LDA.b #$00 : STA.w MSUResumeTrack + STA.l MSUResumeControl + LDA.b #$00 : STA.l MSUResumeTrack + CPX.b #$07 : BNE + ; Kakariko Village LDA.b GameMode : CMP.b #$07 : BNE + @@ -685,12 +685,12 @@ MSUMain: + TXA ++ - STA.w MSULoadedTrack + STA.l MSULoadedTrack STX.w CurrentMSUTrack - LDA.w MSUPackCurrent : CMP.b #$FE : !BLT + + LDA.l MSUPackCurrent : CMP.b #$FE : !BLT + LDA.b #$00 : BRA ++ + : LDA.l MSUTrackList-1,X - ++ : STA.w MSUDelayedCommand + ++ : STA.l MSUDelayedCommand LDA.l MSUExtendedFallbackList-1,X CMP.b #17 : BEQ + CMP.b #22 : BEQ + @@ -740,9 +740,9 @@ PendantFanfareWait: LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc SEP #$20 - LDA.w MSUPackCurrent : CMP.b #$FE : !BGE .spc + LDA.l MSUPackCurrent : CMP.b #$FE : !BGE .spc LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA.w MSUDelayedCommand : BNE .continue + LDA.l MSUDelayedCommand : BNE .continue LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml PendantFanfareContinue @@ -764,9 +764,9 @@ CrystalFanfareWait: LDA.w MSUID+2 : CMP.w #!VAL_MSU_ID_23 : BNE .spc LDA.w MSUID+4 : CMP.w #!VAL_MSU_ID_45 : BNE .spc SEP #$20 - LDA.w MSUPackCurrent : CMP.b #$FE : !BGE .spc + LDA.l MSUPackCurrent : CMP.b #$FE : !BGE .spc LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_TRACK_MISSING : BNE .spc - LDA.w MSUDelayedCommand : BNE .continue + LDA.l MSUDelayedCommand : BNE .continue LDA.w MSUSTATUS : BIT.b #!FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done .continue jml CrystalFanfareContinue diff --git a/newhud.asm b/newhud.asm index d53031d..ec266c5 100644 --- a/newhud.asm +++ b/newhud.asm @@ -65,7 +65,7 @@ NewHUD_DrawArrows: ;================================================================================ NewHUD_DrawGoal: REP #$20 - LDA.w UpdateHUDFlag : BEQ .no_goal + LDA.l UpdateHUDFlag : BEQ .no_goal LDA.l GoalItemRequirement : BEQ .no_goal LDA.l GoalItemIcon : STA.w HUDGoalIndicator @@ -126,7 +126,7 @@ NewHUD_DrawKeys: ;================================================================================ NewHUD_DrawDungeonCounters: - LDA.w UpdateHUDFlag : BEQ NewHUD_DrawPrizeIcon + LDA.l UpdateHUDFlag : BEQ NewHUD_DrawPrizeIcon LDA.l CompassMode : ORA.l MapHUDMode : BIT.b #$03 : BEQ NewHUD_DrawPrizeIcon LDX.b IndoorsFlag : BNE + JMP NewHUD_DrawMagicMeter @@ -151,7 +151,7 @@ NewHUD_DrawPrizeIcon: LDA.b GameMode CMP.b #$12 : BEQ .no_prize CMP.b #$0E : BEQ + - LDA.w UpdateHUDFlag : BEQ NewHUD_DrawItemCounter + LDA.l UpdateHUDFlag : BEQ NewHUD_DrawItemCounter + LDA.w DungeonID CMP.b #$1A : BCS .no_prize @@ -201,7 +201,7 @@ NewHUD_DrawPrizeIcon: ;================================================================================ NewHUD_DrawItemCounter: REP #$20 - LDA.w UpdateHUDFlag : BNE .continue + LDA.l UpdateHUDFlag : BNE .continue .early_exit JMP NewHUD_DrawMagicMeter .continue @@ -279,7 +279,7 @@ NewHUD_DrawMagicMeter: ;================================================================================ NewHUD_DoneDrawing: - STZ.w UpdateHUDFlag + LDA.w #$0000 : STA.l UpdateHUDFlag PLB RTL diff --git a/newitems.asm b/newitems.asm index 56eeaa9..ed261ee 100644 --- a/newitems.asm +++ b/newitems.asm @@ -424,7 +424,7 @@ ItemBehavior: .single_arrow LDA.l ArrowMode : BEQ + LDA.l CurrentArrows : INC : STA.l CurrentArrows ; Should be sole write to this address - INC.w UpdateHUDFlag ; in retro/rupee bow mode. + LDA.b #$01 : STA.l UpdateHUDFlag ; in retro/rupee bow mode. + RTS @@ -848,15 +848,15 @@ ResolveLootID: JMP .have_item .rng_single - JSL GetRNGItemSingle : STA.w ScratchBufferV+6 + JSL GetRNGItemSingle : STA.l ScratchBufferV+6 XBA : JSR MarkRNGItemSingle LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - LDA.w ScratchBufferV+6 : JMP .get_item + LDA.l ScratchBufferV+6 : JMP .get_item .rng_multi - JSL GetRNGItemMulti : STA.w ScratchBufferV+6 + JSL GetRNGItemMulti : STA.l ScratchBufferV+6 LDA.b #$FF : STA.l RNGLockIn ; clear lock-in - LDA.w ScratchBufferV+6 : JMP .get_item + LDA.l ScratchBufferV+6 : JMP .get_item ;-------------------------------------------------------------------------------- DungeonItemMasks: @@ -911,7 +911,7 @@ HandleBowTracking: ; at this point. LDA.w ItemReceiptMethod : CMP.b #$01 : BEQ + LDX.w CurrentSpriteSlot - LDA.w SpriteMetaData,X : BEQ + + LDA.w SpriteMetaData,X : BEQ .done BRA .done + LDA.b #$00 @@ -981,32 +981,32 @@ GetRNGItemSingle: CMP.l RNGSingleTableSize : !BGE .single_reroll +++ - STA.w ScratchBufferV ; put our index value here + STA.l ScratchBufferV ; put our index value here LDX.b #$00 TAY .recheck TYA JSR CheckSingleItem : BEQ .single_unused ; already used - LDA.w ScratchBufferV : INC ; increment index + LDA.l ScratchBufferV : INC ; increment index CMP.l RNGSingleTableSize : BCC +++ : LDA.b #$00 : +++ ; rollover index if needed - STA.w ScratchBufferV ; store index + STA.l ScratchBufferV ; store index INX : TAY : TXA : CMP.l RNGSingleTableSize : BCC .recheck LDA.b #$5A ; everything is gone, default to null item - MAKE THIS AN OPTION FOR THIS AND THE OTHER ONE BRA .single_done .single_unused - LDA.w ScratchBufferV + LDA.l ScratchBufferV .single_done TAX : LDA.l RNGSingleItemTable, X - XBA : LDA.w ScratchBufferV : STA.l RNGLockIn : XBA + XBA : LDA.l ScratchBufferV : STA.l RNGLockIn : XBA PLY RTL ;-------------------------------------------------------------------------------- CheckSingleItem: LSR #3 : TAX - LDA.l RNGItem, X : STA.w ScratchBufferV+2 ; load value to temporary + LDA.l RNGItem, X : STA.l ScratchBufferV+2 ; load value to temporary PHX - LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X - LDA.w ScratchBufferV+2 + LDA.l ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X + LDA.l ScratchBufferV+2 --- CPX.b #$00 : BEQ +++ LSR @@ -1018,10 +1018,10 @@ CheckSingleItem: RTS ;-------------------------------------------------------------------------------- MarkRNGItemSingle: - LSR #3 : STA.w ScratchBufferV+1 : TAX + LSR #3 : STA.l ScratchBufferV+1 : TAX LDA.l RNGItem, X - STA.w ScratchBufferV+2 - LDA.w ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X + STA.l ScratchBufferV+2 + LDA.l ScratchBufferV : AND.b #$07 : TAX ; load 0-7 part into X LDA.b #01 --- CPX.b #$00 : BEQ +++ @@ -1031,9 +1031,9 @@ MarkRNGItemSingle: +++ PHA - LDA.w ScratchBufferV+1 : TAX + LDA.l ScratchBufferV+1 : TAX PLA - ORA.w ScratchBufferV+2 + ORA.l ScratchBufferV+2 STA.l RNGItem, X RTS ;-------------------------------------------------------------------------------- diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index fbcdeb5..e1d7258 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -17,7 +17,7 @@ RTL ;================================================================================ HUDRebuildIndoorHole: PHA - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag LDA.l GenericKeys : BEQ .normal .generic PLA @@ -30,7 +30,7 @@ RTL RTL ;================================================================================ HUDRebuildIndoor: - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag LDA.l GenericKeys : BEQ .normal .generic LDA.b #$00 : STA.l RoomDarkness diff --git a/quickswap.asm b/quickswap.asm index acfaea1..aa3cfbc 100644 --- a/quickswap.asm +++ b/quickswap.asm @@ -10,7 +10,7 @@ QuickSwap: LDA.l QuickSwapFlag : BEQ .done LDA.w ItemCursor : BEQ .done ; Skip everything if we don't have any items - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag LDY.b #$14 PHX XBA ; restore the stashed value diff --git a/ram.asm b/ram.asm index b66e2f2..0dfa15b 100644 --- a/ram.asm +++ b/ram.asm @@ -425,6 +425,13 @@ SpriteCoordCacheY = $7E0FDA ; ; NoMenu = $7E0FFC ; When set prevents menu, mirror, medallions ; +;=================================================================================================== +;=================================================================================================== +; DO NOT ADD ANY RANDOMIZER VARIABLES TO THE SPACE FROM $1100 to $1FFF +;--------------------------------------------------------------------------------------------------- +; It causes isses with major glitches +;=================================================================================================== +;=================================================================================================== GFXStripes = $7E1000 ; Used by stripes for arbitrary VRAM transfers. $100 bytes. RoomStripes = $7E1100 ; Used for room drawing. ; @@ -437,26 +444,7 @@ DelayTimer = $7E1CE9 ; ; TextID = $7E1CF0 ; Message ID and page. Word length. ; -UpdateHUDFlag = $7E1E03 ; Flag used to mark HUD updates and avoid heavy code segments. - ; -ToastBuffer = $7E1E0E ; Multiworld buffer. Word length. - ; -MSUResumeTime = $7E1E6B ; Mirrored MSU block -MSUResumeControl = $7E1E6F ; -MSUFallbackTable = $7E1E70 ; -MSUDelayedCommand = $7E1E79 ; -MSUPackCount = $7E1E7A ; -MSUPackCurrent = $7E1E7B ; -MSUPackRequest = $7E1E7C ; -MSULoadedTrack = $7E1E7D ; -MSUResumeTrack = $7E1E7F ; -ClockHours = $7E1E90 ; Clock Hours -ClockMinutes = $7E1E94 ; Clock Minutes -ClockSeconds = $7E1E98 ; Clock Seconds -ClockBuffer = $7E1E9C ; Clock Temporary -ScratchBufferNV = $7E1EA0 ; Non-volatile scratch buffer. Must preserve values through return. -ScratchBufferV = $7E1EB0 ; Volatile scratch buffer. Can clobber at will. TileMapA = $7E2000 TileMapB = $7E4000 @@ -470,6 +458,28 @@ TileUploadBuffer = $7EA180 ; 0x300 bytes ; ItemGetGFX = $7EBD40 ; Item receipt graphics location ; +UpdateHUDFlag = $7EBE00 ; Flag used to mark HUD updates and avoid heavy code segments. + ; +ToastBuffer = $7EBE02 ; Multiworld buffer. Word length. + ; + +MSUResumeTime = $7EBE6B ; Mirrored MSU block +MSUResumeControl = $7EBE6F ; +MSUFallbackTable = $7EBE70 ; +MSUDelayedCommand = $7EBE79 ; +MSUPackCount = $7EBE7A ; +MSUPackCurrent = $7EBE7B ; +MSUPackRequest = $7EBE7C ; +MSULoadedTrack = $7EBE7D ; +MSUResumeTrack = $7EBE7F ; + +ClockHours = $7EBE90 ; Clock Hours +ClockMinutes = $7EBE94 ; Clock Minutes +ClockSeconds = $7EBE98 ; Clock Seconds +ClockBuffer = $7EBE9C ; Clock Temporary +ScratchBufferNV = $7EBEA0 ; Non-volatile scratch buffer. Must preserve values through return. +ScratchBufferV = $7EBEB0 ; Volatile scratch buffer. Can clobber at will. + RoomFade = $7EC005 ; Flags fade to black on room transitions. Word length. FadeTimer = $7EC007 ; Timer for transition fading and mosaics. Word length. FadeDirection = $7EC009 ; Word length @@ -930,23 +940,7 @@ endmacro %assertRAM(MessageSubModule, $7E1CD8) %assertRAM(MessageCursor, $7E1CE8) %assertRAM(DelayTimer, $7E1CE9) -%assertRAM(TextID, $7E1CF0) -%assertRAM(ToastBuffer, $7E1E0E) -%assertRAM(MSUResumeTime, $7E1E6B) -%assertRAM(MSUResumeControl, $7E1E6F) -%assertRAM(MSUFallbackTable, $7E1E70) -%assertRAM(MSUDelayedCommand, $7E1E79) -%assertRAM(MSUPackCount, $7E1E7A) -%assertRAM(MSUPackCurrent, $7E1E7B) -%assertRAM(MSUPackRequest, $7E1E7C) -%assertRAM(MSULoadedTrack, $7E1E7D) -%assertRAM(MSUResumeTrack, $7E1E7F) -%assertRAM(ClockHours, $7E1E90) -%assertRAM(ClockMinutes, $7E1E94) -%assertRAM(ClockSeconds, $7E1E98) -%assertRAM(ClockBuffer, $7E1E9C) -%assertRAM(ScratchBufferNV, $7E1EA0) -%assertRAM(ScratchBufferV, $7E1EB0) + %assertRAM(TileMapA, $7E2000) %assertRAM(TileMapB, $7E4000) %assertRAM(TileUploadBuffer, $7EA180) diff --git a/retro.asm b/retro.asm index 85af6ae..0c3f3b1 100644 --- a/retro.asm +++ b/retro.asm @@ -11,8 +11,9 @@ LoadBombCount16: .infinite RTL StoreBombCount: - INC.w UpdateHUDFlag - PHA : LDA.l InfiniteBombs : BEQ .finite + PHA + LDA.b #$01 : STA.l UpdateHUDFlag + LDA.l InfiniteBombs : BEQ .finite .infinite PLA : LDA.b #$01 : RTL .finite diff --git a/stats.asm b/stats.asm index ce27d20..0b6b4eb 100644 --- a/stats.asm +++ b/stats.asm @@ -78,12 +78,12 @@ IncrementSmallKeys: STA.l CurrentSmallKeys ; thing we wrote over, write small key count PHX LDA.l StatsLocked : BNE + - LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter + LDA.l SmallKeyCounter : INC : STA.l SmallKeyCounter + JSL UpdateKeys PHY : LDY.b #24 : JSL AddInventory : PLY JSL HUD_RebuildLong - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag PLX RTL ;-------------------------------------------------------------------------------- @@ -106,7 +106,7 @@ IncrementSmallKeysNoPrimary: ++ PLP + - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag JSL HUD_RebuildLong PLX RTL @@ -330,15 +330,15 @@ StatsFinalPrep: INC : STA.l StatsLocked JSL IncrementFinalSword - + LDA.l HighestMail : INC : STA.l HighestMail ; add green mail to mail count - + LDA.l Aga2Duck : BEQ .ramPostOnly LDA.l ScreenTransitions : DEC : STA.l ScreenTransitions ; remove extra transition from exiting gtower via duck - + .ramPostOnly LDA.l SwordBossKills : LSR #4 : !ADD.l SwordBossKills : STA.l BossKills LDA.l SwordBossKills+1 : LSR #4 : !ADD.l SwordBossKills+1 : !ADD.l BossKills : AND.b #$0F : STA.l BossKills - + LDA.l NMIFrames : !SUB.l LoopFrames : STA.l LagTime LDA.l NMIFrames+1 : SBC.l LoopFrames+1 : STA.l LagTime+1 LDA.l NMIFrames+2 : SBC.l LoopFrames+2 : STA.l LagTime+2 @@ -356,7 +356,3 @@ StatsFinalPrep: STZ.b GameSubMode STZ.b SubSubModule RTL -;-------------------------------------------------------------------------------- -; Notes: -; s&q counter -;================================================================================ diff --git a/stats/credits.asm b/stats/credits.asm index da41911..d7a0bdc 100644 --- a/stats/credits.asm +++ b/stats/credits.asm @@ -29,6 +29,44 @@ print "Collection Rate Low Start: ", pc db $9F, $EE ; " /" db $7B, $7A, $7F ; 216 +!FEATURE_PATREON_SUPPORTERS ?= 0 + +table "data/creditscharmapbighi.txt" +PatronCredit1Hi: +db 2 +db 55 +db " " ; $23803E + +table "data/creditscharmapbiglo.txt" +PatronCredit1Lo: +db 2 +db 55 +db " " ; $23805C + +table "data/creditscharmapbighi.txt" +PatronCredit2Hi: +db 2 +db 55 +db " " ; $23807A + +table "data/creditscharmapbiglo.txt" +PatronCredit2Lo: +db 2 +db 55 +db " " ; $238098 + +table "data/creditscharmapbighi.txt" +PatronCredit3Hi: +db 2 +db 55 +db " " ; $2380B6 + +table "data/creditscharmapbiglo.txt" +PatronCredit3Lo: +db 2 +db 55 +db " " ; $2380D4 + ;=================================================================================================== CreditsLineTable: @@ -514,6 +552,24 @@ CreditsLineBlank: %blankline() %blankline() +if !FEATURE_PATREON_SUPPORTERS + %smallcredits("PATREON SUPPORTERS", "yellow") + + %addarbline(PatronCredit1Hi) + %addarbline(PatronCredit1Lo) + + %blankline() + %addarbline(PatronCredit2Hi) + %addarbline(PatronCredit2Lo) + + %blankline() + %addarbline(PatronCredit3Hi) + %addarbline(PatronCredit3Lo) + + %blankline() + %blankline() +endif + %smallcredits("SPECIAL THANKS", "red") %blankline() @@ -546,7 +602,7 @@ CreditsLineBlank: %blankline() -%bigcredits("AND&") +%bigcredits("AND") %blankline() @@ -571,17 +627,20 @@ CreditsLineBlank: %emptyline() %emptyline() %emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() -%emptyline() + +if !FEATURE_PATREON_SUPPORTERS == 0 + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() + %emptyline() +endif ;=================================================================================================== diff --git a/timer.asm b/timer.asm index 17154cc..28efcb4 100644 --- a/timer.asm +++ b/timer.asm @@ -36,12 +36,12 @@ endmacro ;-------------------------------------------------------------------------------- CalculateTimer: LDA.w #$0000 - STA.w ClockHours ; clear digit storage - STA.w ClockHours+2 - STA.w ClockMinutes - STA.w ClockMinutes+2 - STA.w ClockSeconds - STA.w ClockSeconds+2 + STA.l ClockHours ; clear digit storage + STA.l ClockHours+2 + STA.l ClockMinutes + STA.l ClockMinutes+2 + STA.l ClockSeconds + STA.l ClockSeconds+2 LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode %Sub32(NMIFrames,ChallengeTimer,ClockBuffer) @@ -57,8 +57,8 @@ CalculateTimer: LDA.l NMIFrames+2 : STA.l ChallengeTimer+2 RTS ++ CMP.w #$0001 : BNE ++ ; Negative Time - LDA.w ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.w ClockBuffer - LDA.w ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.w ClockBuffer+2 + LDA.l ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.l ClockBuffer + LDA.l ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.l ClockBuffer+2 LDA.w #$0001 : STA.l ClockStatus ; Set Negative Mode BRA .prepDigits ++ CMP.w #$0002 : BNE ++ ; OHKO @@ -92,12 +92,12 @@ CalculateTimer: %Sub32(ClockBuffer,.second,ClockBuffer) : BRA - + - LDA.w ClockHours : !ADD.w #$2490 : STA.w ClockHours ; convert decimal values to tiles - LDA.w ClockHours+2 : !ADD.w #$2490 : STA.w ClockHours+2 - LDA.w ClockMinutes : !ADD.w #$2490 : STA.w ClockMinutes - LDA.w ClockMinutes+2 : !ADD.w #$2490 : STA.w ClockMinutes+2 - LDA.w ClockSeconds : !ADD.w #$2490 : STA.w ClockSeconds - LDA.w ClockSeconds+2 : !ADD.w #$2490 : STA.w ClockSeconds+2 + LDA.l ClockHours : !ADD.w #$2490 : STA.l ClockHours ; convert decimal values to tiles + LDA.l ClockHours+2 : !ADD.w #$2490 : STA.l ClockHours+2 + LDA.l ClockMinutes : !ADD.w #$2490 : STA.l ClockMinutes + LDA.l ClockMinutes+2 : !ADD.w #$2490 : STA.l ClockMinutes+2 + LDA.l ClockSeconds : !ADD.w #$2490 : STA.l ClockSeconds + LDA.l ClockSeconds+2 : !ADD.w #$2490 : STA.l ClockSeconds+2 RTS ;-------------------------------------------------------------------------------- .hour @@ -148,14 +148,14 @@ DrawChallengeTimer: BRA ++ + ; Show Timer LDA.l ClockStatus : AND.w #$0001 : !ADD.w #$2804 : STA.l HUDTileMapBuffer+$94 - LDA.w ClockHours+2 : STA.l HUDTileMapBuffer+$96 - LDA.w ClockHours : STA.l HUDTileMapBuffer+$98 + LDA.l ClockHours+2 : STA.l HUDTileMapBuffer+$96 + LDA.l ClockHours : STA.l HUDTileMapBuffer+$98 LDA.w #$2806 : STA.l HUDTileMapBuffer+$9A - LDA.w ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C - LDA.w ClockMinutes : STA.l HUDTileMapBuffer+$9E + LDA.l ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C + LDA.l ClockMinutes : STA.l HUDTileMapBuffer+$9E LDA.w #$2806 : STA.l HUDTileMapBuffer+$A0 - LDA.w ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2 - LDA.w ClockSeconds : STA.l HUDTileMapBuffer+$A4 + LDA.l ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2 + LDA.l ClockSeconds : STA.l HUDTileMapBuffer+$A4 ++ LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : + @@ -174,12 +174,11 @@ RTL CheckOHKO: SEP #$20 LDA.l OHKOFlag : CMP.l OHKOCached : BNE .change - REP #$20 - CLC + REP #$21 RTS .change STA.l OHKOCached - INC.w UpdateHUDFlag + LDA.b #$01 : STA.l UpdateHUDFlag REP #$20 SEC RTS diff --git a/toast.asm b/toast.asm index d486f51..64e46ec 100644 --- a/toast.asm +++ b/toast.asm @@ -4,8 +4,9 @@ ; in: X(w) - Length in Tiles ;-------------------------------------------------------------------------------- DoToast: - PHY : PHP - LDY.w ToastBuffer + PHY : PHP : PHA + LDA.l ToastBuffer : TAY + PLA JSL WriteVRAMBlock PLP : PLY RTL