From c29de404843268de3467231a022aa176a75862a0 Mon Sep 17 00:00:00 2001 From: cassidy Date: Mon, 6 Dec 2021 00:41:55 -0500 Subject: [PATCH] Change addresses to labels and remove SRAM trace calls --- bugfixes.asm | 6 +- compasses.asm | 52 ++------ contrib.asm | 5 +- cuccostorm.asm | 4 +- dialog.asm | 2 +- elder.asm | 4 +- entrances.asm | 6 +- events.asm | 26 ++-- flipperkill.asm | 6 +- floodgatesoftlock.asm | 18 +-- flute.asm | 8 +- glitched.asm | 8 +- goalitem.asm | 16 +-- heartpieces.asm | 6 +- inverted.asm | 8 +- maidencrystals.asm | 2 - medallions.asm | 6 +- msu.asm | 16 +-- music.asm | 8 +- newhud.asm | 11 +- npcitems.asm | 56 ++++---- openmode.asm | 4 +- pendantcrystalhud.asm | 19 ++- retro.asm | 2 +- shopkeeper.asm | 3 - spriteswap.asm | 4 +- stats.asm | 301 +++++++++--------------------------------- stats/statConfig.asm | 36 ++--- swordswap.asm | 4 +- timer.asm | 14 +- 30 files changed, 226 insertions(+), 435 deletions(-) diff --git a/bugfixes.asm b/bugfixes.asm index b1d29b3..1dcaa05 100644 --- a/bugfixes.asm +++ b/bugfixes.asm @@ -63,7 +63,7 @@ RTL ;-------------------------------------------------------------------------------- ;ReadInventoryPond: ; CPX.b #$1B : BNE + : LDA.b #$01 : RTL : + -; LDA SRAMEquipment, X +; LDA WRAMEquipment, X ;RTL ;-------------------------------------------------------------------------------- @@ -83,10 +83,10 @@ RTS FixAga2Bunny: LDA.l FixFakeWorld : BEQ + ; Only use this fix is fakeworld fix is in use LDA.l InvertedMode : BEQ +++ - LDA.b #$00 : STA !DARK_WORLD ; Switch to light world + LDA.b #$00 : STA CurrentWorld ; Switch to light world BRA ++ +++ - LDA.b #$40 : STA !DARK_WORLD ; Switch to dark world + LDA.b #$40 : STA CurrentWorld ; Switch to dark world ++ JSL DecideIfBunny : BNE + JSR MakeBunny diff --git a/compasses.asm b/compasses.asm index 50d1807..77fed99 100644 --- a/compasses.asm +++ b/compasses.asm @@ -49,92 +49,66 @@ CompassCountDungeonHandlers: ; pointers to functions that handle dungeon-specifi CompassCount_Escape: %DrawConstantNumber(0,8) - LDA $7EF434 : LSR #4 + LDA SewersLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Eastern: %DrawConstantNumber(0,6) - LDA $7EF436 : AND.b #$07 + LDA EPLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Desert: %DrawConstantNumber(0,6) - LDA $7EF435 : LSR #5 + LDA DPLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Agah: %DrawConstantNumber(0,2) - LDA $7EF435 : AND.b #$03 + LDA CTLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Swamp: %DrawConstantNumber(1,0) - LDA $7EF439 : AND.b #$0F + LDA SPLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_PoD: %DrawConstantNumber(1,4) - LDA $7EF434 : AND.b #$0F + LDA PDLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Mire: %DrawConstantNumber(0,8) - LDA $7EF438 : AND.b #$0F + LDA MMLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Skull: %DrawConstantNumber(0,8) - LDA $7EF437 : LSR #4 + LDA SWLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Ice: %DrawConstantNumber(0,8) - LDA $7EF438 : LSR #4 + LDA IPLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Hera: %DrawConstantNumber(0,6) - LDA $7EF435 : AND.b #$1C : LSR #2 + LDA THLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Thieves: %DrawConstantNumber(0,8) - LDA $7EF437 : AND.b #$0F + LDA TTLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Trock: %DrawConstantNumber(1,2) - LDA $7EF439 : LSR #4 + LDA TRLocations JMP DrawDungeonCompassCounts_return_spot CompassCount_Gt: %DrawConstantNumber(2,7) - LDA $7EF436 : LSR #3 + LDA GTLocations JMP DrawDungeonCompassCounts_return_spot -;-------------------------------------------------------------------------------- -; $7EF434 - hhhhdddd - item locations checked -; h - hyrule castle/sewers -; d - palace of darkness -;-------------------------------------------------------------------------------- -; $7EF435 - dddhhhaa - item locations checked -; d - desert palace -; h - tower of hera -; a - agahnim's tower -;-------------------------------------------------------------------------------- -; $7EF436 - gggggeee - item locations checked -; g - ganon's tower -; e - eastern palace -;-------------------------------------------------------------------------------- -; $7EF437 - sssstttt - item locations checked -; s - skull woods -; t - thieves town -;-------------------------------------------------------------------------------- -; $7EF438 - iiiimmmm - item locations checked -; i - ice palace -; m - misery mire -;-------------------------------------------------------------------------------- -; $7EF439 - ttttssss - item locations checked -; t - turtle rock -; s - swamp palace -;-------------------------------------------------------------------------------- diff --git a/contrib.asm b/contrib.asm index 644082f..52adbcd 100644 --- a/contrib.asm +++ b/contrib.asm @@ -78,7 +78,6 @@ ; JML $09A6B6 ; <- 4A6B6 tagalong.asm:1194 (SEP #$30 : RTS) ;} ;================================================================ -!MAP_OVERLAY = "$7EF414" ; [2] Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: { STA $1CF0 @@ -108,11 +107,11 @@ Sprite_ShowSolicitedMessageIfPlayerFacing_Alt: BRA .SayNothing .SahasrahlaDialogs - REP #$20 : LDA.l MapReveal_Sahasrahla : ORA !MAP_OVERLAY : STA !MAP_OVERLAY : SEP #$20 + REP #$20 : LDA.l MapReveal_Sahasrahla : ORA MapOverlay : STA MapOverlay : SEP #$20 JSL DialogSahasrahla : BRA .SayNothing .BombShopGuyDialog - REP #$20 : LDA.l MapReveal_BombShop : ORA !MAP_OVERLAY : STA !MAP_OVERLAY : SEP #$20 + REP #$20 : LDA.l MapReveal_BombShop : ORA MapOverlay : STA MapOverlay : SEP #$20 JSL DialogBombShopGuy .SayNothing diff --git a/cuccostorm.asm b/cuccostorm.asm index b301748..2d40f39 100644 --- a/cuccostorm.asm +++ b/cuccostorm.asm @@ -24,7 +24,7 @@ CuccoStorm: SEP #$30 ; set 8-bit accumulator index registers LDA.l !CUCCO_STORM : BEQ + ; only if storm is on LDA.b $10 : CMP.b #$09 : BNE + ; only if outdoors - LDA.l !LOOP_FRAMES_LOW : AND.b #$7F : BNE + ; check every 128 frames + LDA.l LoopFrames : AND.b #$7F : BNE + ; check every 128 frames - ;==== Find a Cucco @@ -72,4 +72,4 @@ CuccoStorm: ;==== + RTL -;================================================================================ \ No newline at end of file +;================================================================================ diff --git a/dialog.asm b/dialog.asm index 1416d67..13ccc9b 100644 --- a/dialog.asm +++ b/dialog.asm @@ -394,7 +394,7 @@ AgahnimAsksAboutPed: LDA.l InvincibleGanon CMP.b #$06 : BNE .vanilla - LDA.l $7EF300 ; check ped flag + LDA.l OverworldEventData+$80 ; check ped flag AND.b #$40 BNE .vanilla diff --git a/elder.asm b/elder.asm index 00fc5e7..2066d57 100644 --- a/elder.asm +++ b/elder.asm @@ -52,7 +52,7 @@ RTL LDY.b #$01 JSL Sprite_ShowSolicitedMessageIfPlayerFacing_PreserveMessage : BCC .dont_show - LDA !GOAL_COUNTER + LDA GoalCounter CMP GoalItemRequirement : !BLT + JSL.l ActivateGoal + @@ -61,4 +61,4 @@ RTL .done LDA $1A : LSR #5 : AND.b #$01 : STA $0DC0, X RTS - } \ No newline at end of file + } diff --git a/entrances.asm b/entrances.asm index c174505..1ef50c7 100644 --- a/entrances.asm +++ b/entrances.asm @@ -22,7 +22,7 @@ LockAgahnimDoors: .crystalOrUnlock LDA InvertedMode : AND.w #$00FF : BEQ .unlock - LDA $7EF2C3 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not + LDA OverworldEventData+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item .locked @@ -44,7 +44,7 @@ RTL FlagAgahnimDoor: LDA.l InvertedMode : BEQ .vanilla - LDA $7EF2C3 : ORA #$20 : STA $7EF2C3 ; activate GT overlay + LDA OverworldEventData+$43 : ORA #$20 : STA OverworldEventData+$43 ; activate GT overlay .vanilla LDA.b #$28 : STA.b $72 @@ -209,7 +209,7 @@ TurtleRockEntranceFix: LDA TurtleRockAutoOpenFix : BEQ .done LDA $8A : CMP.b #$47 : BNE .done ;If exiting to turtle rock ensure the entrance is open - LDA.l $7EF2C7 : ORA.b #$20 : STA.l $7EF2C7 + LDA.l OverworldEventData+$47 : ORA.b #$20 : STA.l OverworldEventData+$47 .done RTL ;-------------------------------------------------------------------------------- diff --git a/events.asm b/events.asm index 96f96a4..dc24221 100644 --- a/events.asm +++ b/events.asm @@ -2,7 +2,7 @@ ; OnLoadOW ;-------------------------------------------------------------------------------- ;OnLoadMap: -; LDA $7EF2DB ; thing we wrote over +; LDA OverworldEventData+$5B ; thing we wrote over ;RTL ;-------------------------------------------------------------------------------- OnPrepFileSelect: @@ -84,8 +84,8 @@ OnAga2Defeated: ;-------------------------------------------------------------------------------- OnFileCreation: TAX ; what we wrote over - LDA StartingEquipment+$4C : STA $700340+$4C ; copy starting equipment swaps to file select screen - LDA StartingEquipment+$4E : STA $700340+$4E + LDA StartingEquipment+$4C : STA SRAMEquipment+$4C ; copy starting equipment swaps to file select screen + LDA StartingEquipment+$4E : STA SRAMEquipment+$4E RTL ;-------------------------------------------------------------------------------- !RNG_ITEM_LOCK_IN = "$7F5090" @@ -126,32 +126,32 @@ OnNewFile: PHX : PHP REP #$20 ; set 16-bit accumulator LDA.l LinkStartingRupees : STA CurrentRupees : STA TargetRupees - LDA.l StartingTime : STA $7EF454 - LDA.l StartingTime+2 : STA $7EF454+2 + LDA.l StartingTime : STA ChallengeTimer + LDA.l StartingTime+2 : STA ChallengeTimer+2 LDX.w #$004E : - ; copy over starting equipment - LDA StartingEquipment, X : STA SRAMEquipment, X + LDA StartingEquipment, X : STA WRAMEquipment, X DEX : DEX BPL - - LDX #$000E : - - LDA SewerKeys, X : STA $7EF4E0, X + LDX #$0008 : - ; copy starting keys to chest key counters in sram + LDA DungeonKeys, X : STA DungeonChestKeys, X DEX : DEX BPL - SEP #$20 ; set 8-bit accumulator ;LDA #$FF : STA !RNG_ITEM_LOCK_IN ; reset rng item lock-in LDA.l PreopenCurtains : BEQ + - LDA.b #$80 : STA $7EF061 ; open aga tower curtain - LDA.b #$80 : STA $7EF093 ; open skull woods curtain + LDA.b #$80 : STA RoomData[$30].high ; open aga tower curtain + LDA.b #$80 : STA RoomData[$49].high ; open skull woods curtain + LDA.l PreopenPyramid : BEQ + - LDA.b #$20 : STA $7EF2DB ; pyramid hole already open + LDA.b #$20 : STA OverworldEventData+$5B ; pyramid hole already open + LDA.l PreopenGanonsTower : BEQ + - LDA.b #$20 : STA $7EF2C3 ; Ganons Tower already open + LDA.b #$20 : STA OverworldEventData+$43 ; Ganons Tower already open + LDA StartingSword : STA SwordEquipment ; set starting sword type @@ -235,8 +235,8 @@ PreItemGet: RTL ;-------------------------------------------------------------------------------- PostItemGet: - JML.l MaybeWriteSRAMTrace +RTL ;-------------------------------------------------------------------------------- PostItemAnimation: LDA.b #$00 : STA !ITEM_BUSY ; mark item as finished diff --git a/flipperkill.asm b/flipperkill.asm index 648927b..b7a9c53 100644 --- a/flipperkill.asm +++ b/flipperkill.asm @@ -8,7 +8,7 @@ FlipperKill: LDA $7F5001 : BEQ .done ; skip if we're not marked in danger for softlock LDA $8A : CMP $7F5098 : BEQ .done ; skip if we're on the same screen we entered the water on ;JSL.l KillFairies ; take away fairies - LDA !IGNORE_FAIRIES : ORA.b #$04 : STA !IGNORE_FAIRIES + LDA IgnoreFaeries : ORA.b #$04 : STA IgnoreFaeries LDA.b #$00 : STA CurrentHealth ; kill link LDA.b #$00 : STA $7F5001 ; mark fake flipper softlock as impossible .done @@ -18,9 +18,9 @@ RTL ;-------------------------------------------------------------------------------- IgnoreFairyCheck: LDX.b #$00 ; thing we wrote over - LDA !IGNORE_FAIRIES : BIT.b #$04 : BEQ .normal + LDA IgnoreFaeries : BIT.b #$04 : BEQ .normal - AND.b #$FB : STA !IGNORE_FAIRIES ; clear ignore fairy flag + AND.b #$FB : STA IgnoreFaeries ; clear ignore fairy flag LDA.b #$F0 ; set check to invalid entry RTL .normal diff --git a/floodgatesoftlock.asm b/floodgatesoftlock.asm index 043e422..18b6edf 100644 --- a/floodgatesoftlock.asm +++ b/floodgatesoftlock.asm @@ -5,21 +5,21 @@ FloodGateAndMasterSwordFollowerReset: JSL.l MasterSwordFollowerClear FloodGateReset: LDA.l PersistentFloodgate : BNE + - LDA $7EF2BB : AND.b #$DF : STA $7EF2BB ; reset water outside floodgate - LDA $7EF2FB : AND.b #$DF : STA $7EF2FB ; reset water outside swamp palace - LDA $7EF216 : AND.b #$7F : STA $7EF216 ; clear water inside floodgate - LDA $7EF051 : AND.b #$FE : STA $7EF051 ; clear water front room (room 40) + LDA OverworldEventData+$3B : AND.b #$DF : STA OverworldEventData+$3B ; reset water outside floodgate + LDA OverworldEventData+$7B : AND.b #$DF : STA OverworldEventData+$7B ; reset water outside swamp palace + LDA RoomData[$010B].low : AND.b #$7F : STA RoomData[$010B].low ; clear water inside floodgate + LDA RoomData[$28].high : AND.b #$FE : STA RoomData[$28].high ; clear water front room (room 40) + FloodGateResetInner: LDA.l Bugfix_SwampWaterLevel : BEQ +++ - LDA $7EF06F : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected. - LDA $7EF356 : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset. + LDA RoomData[$37].low : AND.b #$04 : BEQ + ; Check if key in room 55 has been collected. + LDA FlippersEquipment : AND.b #$01 : BNE ++ ; Check for flippers. This can otherwise softlock doors if flooded without flippers and no way to reset. + - LDA $7EF06E : AND.b #$7F : STA $7EF06E ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches + LDA RoomData[$37].low : AND.b #$7F : STA RoomData[$37].low ; clear water room 55 - outer room you shouldn't be able to softlock except in major glitches ++ - LDA $7EF06B : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected. + LDA RoomData[$35].high : AND.b #$04 : BNE +++ ; Check if key in room 53 has been collected. ; no need to check for flippers on the inner room, as you can't get to the west door no matter what, without flippers. - LDA $7EF06A : AND.b #$7F : STA $7EF06A ; clear water room 53 - inner room with the easy key flood softlock + LDA RoomData[$35].low : AND.b #$7F : STA RoomData[$35].low ; clear water room 53 - inner room with the easy key flood softlock +++ RTL ;================================================================================ diff --git a/flute.asm b/flute.asm index 06b9edf..5e6e82b 100644 --- a/flute.asm +++ b/flute.asm @@ -23,17 +23,17 @@ SpawnHauntedGroveItem: LDA.b #$30 : STA $0F10, Y LDA $22 : !ADD.l .x_offsets, X - AND.b #$F0 : STA $0D10, Y - LDA $23 : ADC.b #$00 : STA $0D30, Y + AND.b #$F0 : STA $0D10, Y + LDA $23 : ADC.b #$00 : STA $0D30, Y LDA $20 : !ADD.b #$16 : AND.b #$F0 : STA $0D00, Y - LDA $21 : ADC.b #$00 : STA $0D20, Y + LDA $21 : ADC.b #$00 : STA $0D20, Y LDA.b #$00 : STA $0F20, Y TYX LDX $8A ; haunted grove (208D0A) - LDA $7EF280, X : AND.b #$40 : BNE + + LDA OverworldEventData, X : AND.b #$40 : BNE + LDA.b #$1B : JSL Sound_SetSfx3PanLong + RTL diff --git a/glitched.asm b/glitched.asm index 203a3cc..76901b2 100644 --- a/glitched.asm +++ b/glitched.asm @@ -16,20 +16,20 @@ GetAgahnimDeath: CMP.b #13 : BNE + ; Agahnim 2 room LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++ LDA.l InvertedMode : BEQ +++ - LDA.b #$00 : STA !DARK_WORLD ; Switch to light world + LDA.b #$00 : STA CurrentWorld ; Switch to light world BRA ++ +++ - LDA.b #$40 : STA !DARK_WORLD ; Switch to dark world + LDA.b #$40 : STA CurrentWorld ; Switch to dark world ++ LDA.b #$01 ; Use Agahnim 2 RTL + ; Elsewhere LDA.l Bugfix_SetWorldOnAgahnimDeath : BEQ ++ LDA.l InvertedMode : BEQ +++ - LDA.b #$40 : STA !DARK_WORLD ; Switch to dark world + LDA.b #$40 : STA CurrentWorld ; Switch to dark world BRA ++ +++ - LDA.b #$00 : STA !DARK_WORLD ; Switch to light world + LDA.b #$00 : STA CurrentWorld ; Switch to light world ; (This will later get flipped to DW when Agahnim 1 ; warps us to the pyramid) ++ diff --git a/goalitem.asm b/goalitem.asm index 474e86e..12287ce 100644 --- a/goalitem.asm +++ b/goalitem.asm @@ -1,7 +1,6 @@ ;-------------------------------------------------------------------------------- ; $7F5010 - Scratch Space (Callee Preserved) ;-------------------------------------------------------------------------------- -!GOAL_COUNTER = "$7EF418" !GOAL_DRAW_ADDRESS = "$7EC72A" ;-------------------------------------------------------------------------------- ; DrawGoalIndicator moved to newhud.asm @@ -68,12 +67,12 @@ CheckGanonVulnerability: .all_dungeons_no_agahnim LDA.l PendantsField : AND.b #$07 : CMP.b #$07 : BNE .fail ; require all pendants LDA.l CrystalsField : AND.b #$7F : CMP.b #$7F : BNE .fail ; require all crystals - LDA.l $7EF2DB : AND.b #$20 : BEQ .fail ; require aga2 defeated (pyramid hole open) + LDA.l OverworldEventData+$5B : AND.b #$20 : BEQ .fail ; require aga2 defeated (pyramid hole open) BRA .success ; 03 = crystals and aga 2 .crystals_and_aga - LDA.l $7EF2DB : AND.b #$20 : BEQ .fail ; check aga2 first then bleed in + LDA.l OverworldEventData+$5B : AND.b #$20 : BEQ .fail ; check aga2 first then bleed in ; 04 = crystals only .crystals @@ -82,7 +81,7 @@ CheckGanonVulnerability: ; 05 = require goal item .goal_item - LDA.l !GOAL_COUNTER : CMP GoalItemRequirement + LDA.l GoalCounter : CMP GoalItemRequirement RTS ; 06 = light speed @@ -96,7 +95,6 @@ CheckGanonVulnerability: ; 08 = Crystal bosses but no crystals .bosses_only - ;LDA.l $7EF2DDB : AND.b #$20 : BEQ .fail ; check aga2 JMP CheckForCrystalBossesDefeated ;-------------------------------------------------------------------------------- @@ -140,7 +138,7 @@ CheckAgaForPed: CMP.b #$06 : BNE .vanilla .light_speed - LDA.l $7EF300 ; check ped flag + LDA.l OverworldEventData+$80 ; check ped flag AND.b #$40 BEQ .force_blue_ball @@ -164,8 +162,8 @@ KillGanon: CMP.b #$06 : BNE .exit .light_speed - LDA.l $7EF2DB : ORA.b #$20 : STA.l $7EF2DB ; pyramid hole - LDA.b #$08 : STA.l RoomData[$00].Low ; kill ganon + LDA.l OverworldEventData+$5B : ORA.b #$20 : STA.l OverworldEventData+$5B ; pyramid hole + LDA.b #$08 : STA.l RoomData[$00].high ; kill ganon LDA.b #$02 : STA.l MoonPearlEquipment ; pearl but invisible in menu .exit @@ -197,7 +195,7 @@ CheckForCrystalBossesDefeated: LDA.l DrawHUDDungeonItems_boss_room_ids-4,X TAX - LDA.l $7EF000,X + LDA.l RoomData.l,X AND.w #$0800 BEQ ++ diff --git a/heartpieces.asm b/heartpieces.asm index 4732c84..f7f898f 100644 --- a/heartpieces.asm +++ b/heartpieces.asm @@ -130,7 +130,7 @@ HeartUpgradeSpawnDecision: ; this should return #$00 to make the hp spawn RTL .normal_behavior - LDA $7EF280, X + LDA OverworldEventData, X RTL ;-------------------------------------------------------------------------------- SaveHeartCollectedStatus: @@ -140,7 +140,7 @@ SaveHeartCollectedStatus: RTL .normal_behavior - LDA $7EF280, X : ORA.b #$40 : STA $7EF280, X + LDA OverworldEventData, X : ORA.b #$40 : STA OverworldEventData, X RTL ;-------------------------------------------------------------------------------- !REDRAW = "$7F5000" @@ -195,7 +195,7 @@ MaybeMarkDigSpotCollected: REP #$20 ; set 16-bit accumulator LDA $8A CMP.w #$2A : BNE + - LDA !HAS_GROVE_ITEM : ORA.w #$0001 : STA !HAS_GROVE_ITEM + LDA HasGroveItem : ORA.w #$0001 : STA HasGroveItem + PLP : PLA RTL diff --git a/inverted.asm b/inverted.asm index 92c57ed..a89d624 100644 --- a/inverted.asm +++ b/inverted.asm @@ -71,7 +71,7 @@ Overworld_CreatePyramidHoleModified: SEP #$30 - LDA $7EF2DB : ORA.b #$20 : STA $7EF2DB + LDA OverworldEventData+$5B : ORA.b #$20 : STA OverworldEventData+$5B LDA.b #$03 : STA $012F @@ -131,9 +131,9 @@ db $02, $02, $02, $02, $02, $02, $02, $00, $00, $01, $01, $01, $02, $00, $08, $0 Electric_Barrier: LDA InvertedMode : BEQ .done - LDA OverworldData, X : ORA #$40 : STA $7EF280, X ;set barrier dead + LDA OverworldEventData, X : ORA #$40 : STA OverworldEventData, X ;set barrier dead .done - LDA $7EF280, X ; what we wrote over + LDA OverworldEventData, X ; what we wrote over RTL @@ -187,7 +187,7 @@ RTL TurtleRockPegSolved: LDA.l InvertedMode : AND.w #$00FF : BNE + - LDA.l $7ef287 ; What we wrote over (reading flags for this screen) + LDA.l OverworldEventData+07 ; What we wrote over (reading flags for this screen) RTL + LDA.w #$0020 ; We always treat puzzle as pre solved (overlay flag set) for inverted mode. diff --git a/maidencrystals.asm b/maidencrystals.asm index e435836..b02ae1b 100644 --- a/maidencrystals.asm +++ b/maidencrystals.asm @@ -21,7 +21,5 @@ MaidenCrystalScript: LDA.b #$08 : STA MapIcons ; Update the map icon to just be Ganon's Tower + - JSL.l MaybeWriteSRAMTrace - JML.l $1ECF35 ; <- F4F35 - sprite_crystal_maiden.asm : 426 ;-------------------------------------------------------------------------------- diff --git a/medallions.asm b/medallions.asm index 56ed04f..e5553e0 100644 --- a/medallions.asm +++ b/medallions.asm @@ -6,7 +6,7 @@ TryOpenMire: LDA $8A : CMP.b #$70 : BNE .untriggered ; Checks whether the Misery Mire dungeon is already revealed. - LDA $7EF2F0 : AND.b #$20 : BNE .untriggered + LDA OverworldEventData+$70 : AND.b #$20 : BNE .untriggered ; You have to be in the trigger window. LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered @@ -25,7 +25,7 @@ TryOpenTRock: LDA $8A : CMP.b #$47 : BNE .untriggered ; Checks whether the Turtle Rock dungeon is already revealed. - LDA $7EF2C7 : AND.b #$20 : BNE .untriggered + LDA OverworldEventData+$47 : AND.b #$20 : BNE .untriggered ; You have to be in the trigger window. LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCC .untriggered @@ -73,4 +73,4 @@ MedallionTrigger_Quake: + PLA RTL -;-------------------------------------------------------------------------------- \ No newline at end of file +;-------------------------------------------------------------------------------- diff --git a/msu.asm b/msu.asm index 16259be..5900be2 100644 --- a/msu.asm +++ b/msu.asm @@ -250,7 +250,7 @@ CheckMusicLoadRequest: BRA .check_fallback-3 .lightworld PHA - LDA $7EF300 : AND.b #$40 : BEQ + + LDA OverworldEventData+$80 : AND.b #$40 : BEQ + PLA LDA.b #60 : BRA .check_fallback-3 + @@ -344,7 +344,7 @@ CheckMusicLoadRequest: + CMP.b #$70 : BNE + ; Misery Mire - LDA $7EF2F0 : AND.b #$20 : BEQ .rain + LDA OverworldEventData+$70 : AND.b #$20 : BEQ .rain + LDA ProgressIndicator : CMP.b #$02 : BCS + @@ -517,16 +517,16 @@ PHA : XBA : PHA ; dont save if we already saved recently REP #$20 LDA !MSU_RESUME_TRACK : AND #$00FF : BEQ ++ - LDA !NMI_COUNTER : !SUB !MSU_RESUME_TIME : PHA - LDA !NMI_COUNTER+2 : SBC !MSU_RESUME_TIME+2 : BNE +++ + LDA NMIFrames : !SUB !MSU_RESUME_TIME : PHA + LDA NMIFrames+2 : SBC !MSU_RESUME_TIME+2 : BNE +++ PLA : CMP MSUResumeTimer : !BLT .too_early BRA ++ +++ PLA ++ ; saving - LDA !NMI_COUNTER : STA !MSU_RESUME_TIME - LDA !NMI_COUNTER+2 : STA !MSU_RESUME_TIME+2 + LDA NMIFrames : STA !MSU_RESUME_TIME + LDA NMIFrames+2 : STA !MSU_RESUME_TIME+2 SEP #$20 LDA !MSU_LOADED_TRACK : STA !MSU_RESUME_TRACK @@ -683,8 +683,8 @@ MSUMain: PLX TXA : CMP !MSU_RESUME_TRACK : BNE + ; dont resume if too late REP #$20 - LDA !NMI_COUNTER : !SUB !MSU_RESUME_TIME : PHA - LDA !NMI_COUNTER+2 : SBC !MSU_RESUME_TIME+2 : BNE ++ + LDA NMIFrames : !SUB !MSU_RESUME_TIME : PHA + LDA NMIFrames+2 : SBC !MSU_RESUME_TIME+2 : BNE ++ PLA : CMP MSUResumeTimer : !BGE +++ SEP #$20 LDA !FLAG_RESUME_FADEIN : BRA .done_resume diff --git a/music.asm b/music.asm index 86895e7..ebb5396 100644 --- a/music.asm +++ b/music.asm @@ -33,7 +33,7 @@ PreOverworld_LoadProperties_ChooseMusic: LDX.b #$05 ; Lost woods theme ; check if we've pulled from the master sword pedestal - LDA $7EF300 : AND.b #$40 : BEQ + + LDA OverworldEventData+$80 : AND.b #$40 : BEQ + LDX.b #$02 ; Default light world theme + @@ -129,7 +129,7 @@ Overworld_FinishMirrorWarp: ; Check if we're entering the lost woods CMP.b #$00 : BNE + - LDA $7EF300 : AND.b #$40 : BNE .endOfLightWorldChecks + LDA OverworldEventData+$80 : AND.b #$40 : BNE .endOfLightWorldChecks LDX.b #$05 ; lost woods theme BRA .endOfLightWorldChecks + @@ -196,7 +196,7 @@ BirdTravel_LoadTargetAreaMusic: ;LDX.b #$05 ; Lost woods theme ; check if we've pulled from the master sword pedestal - ;LDA $7EF300 : AND.b #$40 : BEQ + + ;LDA OverworldEventData+$80 : AND.b #$40 : BEQ + ; LDX.b #$02 ; Default light world theme ;+ @@ -222,7 +222,7 @@ BirdTravel_LoadTargetAreaMusic: LDA $8A ; Misery Mire rain SFX CMP.b #$70 : BNE ++ - LDA $7EF2F0 : AND.b #$20 : BNE ++ + LDA OverworldEventData+$70 : AND.b #$20 : BNE ++ LDA.b #$01 : CMP $0131 : BEQ + STA $012D + : BRA .checkInverted diff --git a/newhud.asm b/newhud.asm index 2265023..82c0afb 100644 --- a/newhud.asm +++ b/newhud.asm @@ -58,17 +58,16 @@ SEP #$30 ;================================================================================ ; Draw Goal Item Indicator -!GOAL_COUNTER = "$7EF418" !GOAL_DRAW_ADDRESS = "$7EC72A" ;================================================================================ SEP #$20 LDA.l GoalItemRequirement : BNE + : JMP .done : + ; Star Meter - - LDA.l !GOAL_COUNTER - JSR HudHexToDec3Digit - REP #$20 - + + LDA.l GoalCounter + JSR HudHexToDec3Digit + REP #$20 + LDA.l GoalItemIcon : STA !GOAL_DRAW_ADDRESS ; draw star icon LDX.b $05 : TXA : ORA.w #$2400 : STA !GOAL_DRAW_ADDRESS+2 ; draw 100's digit diff --git a/npcitems.asm b/npcitems.asm index c1a546f..8aa788a 100644 --- a/npcitems.asm +++ b/npcitems.asm @@ -21,44 +21,42 @@ ;UNUSED = "#$40" ;MAGIC_BAT = "#$80" ;-------------------------------------------------------------------------------- -!NPC_FLAGS = "$7EF410" -!NPC_FLAGS_2 = "$7EF411" ItemCheck_FairySword: - LDA !NPC_FLAGS_2 : AND.b #$08 + LDA NpcFlags+1 : AND.b #$08 RTL ItemCheck_SmithSword: - LDA !NPC_FLAGS_2 : AND.b #$04 + LDA NpcFlags+1 : AND.b #$04 RTL ItemCheck_MagicBat: - LDA !NPC_FLAGS_2 : AND.b #$80 + LDA NpcFlags+1 : AND.b #$80 RTL ItemCheck_OldMan: - LDA !NPC_FLAGS : AND.b #$01 : CMP #$01 + LDA NpcFlags : AND.b #$01 : CMP #$01 RTL ItemCheck_ZoraKing: - LDA !NPC_FLAGS : AND.b #$02 + LDA NpcFlags : AND.b #$02 RTL ItemCheck_SickKid: - LDA !NPC_FLAGS : AND.b #$04 + LDA NpcFlags : AND.b #$04 RTL ItemCheck_TreeKid: - LDA !NPC_FLAGS : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment + LDA NpcFlags : AND.b #$08 ; FluteBoy_Chillin - 73: LDA FluteEquipment RTL ItemCheck_TreeKid2: - LDA !NPC_FLAGS : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 + LDA NpcFlags : AND.b #$08 : LSR #$02 ; FluteAardvark_InitialStateFromFluteState - 225: LDA FluteEquipment : AND.b #$03 RTL ItemCheck_TreeKid3: JSL $0DD030 ; FluteAardvark_Draw - thing we wrote over - LDA !NPC_FLAGS : AND.b #$08 + LDA NpcFlags : AND.b #$08 BEQ .normal BRA .done LDA.b #$05 @@ -68,16 +66,16 @@ ItemCheck_TreeKid3: RTL ItemCheck_Sahasrala: - LDA !NPC_FLAGS : AND.b #$10 + LDA NpcFlags : AND.b #$10 RTL ItemCheck_Library: - LDA !NPC_FLAGS : AND.b #$80 + LDA NpcFlags : AND.b #$80 RTL ItemCheck_Mushroom: - LDA !NPC_FLAGS_2 : ROL #4 ; does the same thing as below -; LDA !NPC_FLAGS_2 : AND.b #$10 : BEQ .clear + LDA NpcFlags+1 : ROL #4 ; does the same thing as below +; LDA NpcFlags+1 : AND.b #$10 : BEQ .clear ; SEC ;RTL ; .clear @@ -85,7 +83,7 @@ ItemCheck_Mushroom: RTL ItemCheck_Powder: - LDA !NPC_FLAGS_2 : AND.b #$20 + LDA NpcFlags+1 : AND.b #$20 RTL ItemCheck_Catfish: @@ -101,60 +99,60 @@ ItemCheck_Catfish: ;.oursNewers ;LDA #$00 : RTL ; give item ;.junk - LDA !NPC_FLAGS : AND.b #$20 + LDA NpcFlags : AND.b #$20 RTL ;-------------------------------------------------------------------------------- ItemSet_FairySword: - PHA : LDA !NPC_FLAGS_2 : ORA.b #$08 : STA !NPC_FLAGS_2 : PLA + PHA : LDA NpcFlags+1 : ORA.b #$08 : STA NpcFlags+1 : PLA RTL ItemSet_SmithSword: - PHA : LDA !NPC_FLAGS_2 : ORA.b #$04 : STA !NPC_FLAGS_2 : PLA + PHA : LDA NpcFlags+1 : ORA.b #$04 : STA NpcFlags+1 : PLA RTL ItemSet_MagicBat: - PHA : LDA !NPC_FLAGS_2 : ORA.b #$80 : STA !NPC_FLAGS_2 : PLA + PHA : LDA NpcFlags+1 : ORA.b #$80 : STA NpcFlags+1 : PLA RTL ItemSet_OldMan: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$01 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$01 : STA NpcFlags : PLA RTL ItemSet_ZoraKing: ;JSL $1DE1AA ; Sprite_SpawnFlippersItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$02 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$02 : STA NpcFlags : PLA RTL ItemSet_SickKid: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$04 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$04 : STA NpcFlags : PLA RTL ItemSet_TreeKid: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$08 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$08 : STA NpcFlags : PLA RTL ItemSet_Sahasrala: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$10 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$10 : STA NpcFlags : PLA RTL ItemSet_Catfish: ;JSL $00D52D ; GetAnimatedSpriteTile.variable ; thing we wrote over ;JSL.l LoadCatfishItemGFX - PHA : LDA !NPC_FLAGS : ORA.b #$20 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$20 : STA NpcFlags : PLA RTL ItemSet_Library: JSL.l Link_ReceiveItem ; thing we wrote over - PHA : LDA !NPC_FLAGS : ORA.b #$80 : STA !NPC_FLAGS : PLA + PHA : LDA NpcFlags : ORA.b #$80 : STA NpcFlags : PLA RTL ItemSet_Mushroom: PHA - LDA !NPC_FLAGS_2 : ORA.b #$10 : STA !NPC_FLAGS_2 + LDA NpcFlags+1 : ORA.b #$10 : STA NpcFlags+1 LDY $0E80, X ; Retrieve stored item type BNE + ; if for any reason the item value is 0 reload it, just in case @@ -166,7 +164,7 @@ ItemSet_Mushroom: RTL ItemSet_Powder: - PHA : LDA !NPC_FLAGS_2 : ORA.b #$20 : STA !NPC_FLAGS_2 : PLA + PHA : LDA NpcFlags+1 : ORA.b #$20 : STA NpcFlags+1 : PLA RTL ;================================================================================ diff --git a/openmode.asm b/openmode.asm index c5ddfff..94b0c55 100644 --- a/openmode.asm +++ b/openmode.asm @@ -15,7 +15,7 @@ InitOpenMode: LDA.b #$02 : STA ProgressIndicator ; Go to post-escape phase (pre aga1) LDA ProgressFlags : ORA #$14 : STA ProgressFlags ; remove uncle LDA StartingEntrance : CMP #$05 : BEQ ++ : LDA.b #$01 : ++ : STA StartingEntrance ; set spawn points to house+sanc unless already house+sanc+mountain - LDA $7EF29B : ORA.b #$20 : STA $7EF29B ; open castle gate + LDA OverworldEventData+$1B : ORA.b #$20 : STA OverworldEventData+$1B ; open castle gate JSL MaybeSetPostAgaWorldState + RTL @@ -23,7 +23,7 @@ RTL MaybeSetPostAgaWorldState: LDA.l InstantPostAgaWorldState : BEQ + ; Skip if not enabled LDA.b #$03 : STA ProgressIndicator ; Go to post-aga phase - LDA $7EF282 : ORA.b #$20 : STA $7EF282 ; make lumberjack tree accessible + LDA OverworldEventData+$02 : ORA.b #$20 : STA OverworldEventData+$02 ; make lumberjack tree accessible + RTL ;-------------------------------------------------------------------------------- diff --git a/pendantcrystalhud.asm b/pendantcrystalhud.asm index e0fe5a9..a0407b7 100644 --- a/pendantcrystalhud.asm +++ b/pendantcrystalhud.asm @@ -2,7 +2,7 @@ ; Pendant / Crystal HUD Fix ;-------------------------------------------------------------------------------- ;CheckPendantHUD: -; LDA !HUD_FLAG : CMP.b #$40 ; check for hud flag instead +; LDA HudFlag : CMP.b #$40 ; check for hud flag instead ;RTL ;================================================================================ FlipLWDWFlag: @@ -52,17 +52,16 @@ GetCrystalNumber: PLX RTL ;================================================================================ -!MAP_OVERLAY = "$7EF414" ; [2] OverworldMap_CheckObject: PHX ;CPX.b #$01 : BNE + : JMP ++ : + : JMP .fail LDA CurrentWorld : AND.b #$40 : BNE + ;LW Map LDA.l MapMode : BEQ +++ - LDA MapField : ORA !MAP_OVERLAY : AND.b #$01 : BNE +++ + LDA MapField : ORA MapOverlay : AND.b #$01 : BNE +++ PHX LDA.l .lw_map_offsets, X : TAX ; put map offset into X - LDA MapField, X : ORA !MAP_OVERLAY, X + LDA MapField, X : ORA MapOverlay, X PLX AND.l .lw_map_masks, X : BNE +++ JMP .fail @@ -73,10 +72,10 @@ OverworldMap_CheckObject: + ;DW Map LDA.l MapMode : BEQ +++ - LDA MapField : ORA !MAP_OVERLAY : AND.b #$02 : BNE +++ + LDA MapField : ORA MapOverlay : AND.b #$02 : BNE +++ PHX LDA.l .dw_map_offsets, X : TAX ; put map offset into X - LDA.l MapField, X : ORA !MAP_OVERLAY, X + LDA.l MapField, X : ORA MapOverlay, X PLX AND.l .dw_map_masks, X : BNE +++ JMP .fail @@ -192,7 +191,7 @@ RTL ShowDungeonItems: LDA $040C : AND.w #$00FF : CMP.w #$00FF : BNE + : RTL : + ; return normal result if outdoors or in a cave ;LDA $F0 : AND.w #$0020 ; check for select - LDA !HUD_FLAG : AND.w #$0020 ; check hud flag + LDA HudFlag : AND.w #$0020 ; check hud flag BEQ + : LDA.w #$0000 : RTL : + ; if set, send the zero onwards LDA $040C : AND.w #$00FF : CMP.w #$00FF ; original logic RTL @@ -205,7 +204,7 @@ UpdateKeys: LSR : TAX ; get dungeon index and store to X LDA CurrentSmallKeys ; load current key count - STA SewerKeys, X ; save to main counts + STA DungeonKeys, X ; save to main counts CPX.b #$00 : BNE + STA HyruleCastleKeys ; copy HC to sewers @@ -365,7 +364,7 @@ DrawHUDDungeonItems: DEX : DEX : BPL -- - LDA.l !HUD_FLAG : AND.w #$0020 : BEQ + + LDA.l HudFlag : AND.w #$0020 : BEQ + JMP .maps_and_compasses @@ -438,7 +437,7 @@ DrawHUDDungeonItems: .next_boss_kill LDX.w .boss_room_ids,Y - LDA.l $7EF000,X + LDA.l RoomData.l,X AND.w #$0800 BEQ ..skip_boss_kill diff --git a/retro.asm b/retro.asm index 477f4a8..eca961f 100644 --- a/retro.asm +++ b/retro.asm @@ -5,7 +5,7 @@ IsItemAvailable: CPX.b #$04 : BNE .finite LDA.b #$01 : RTL .finite - LDA $7EF33F, X + LDA WRAMEquipment-1, X RTL LoadBombCount: LDA !INFINITE_BOMBS : BNE .infinite diff --git a/shopkeeper.asm b/shopkeeper.asm index 8b29c55..b73648c 100644 --- a/shopkeeper.asm +++ b/shopkeeper.asm @@ -266,8 +266,6 @@ RTS ;!SHOP_INVENTORY, X ;[id][$lo][$hi][purchase_counter] ;-------------------------------------------------------------------------------- -;PurchaseCounts = "$7EF51A" -;-------------------------------------------------------------------------------- Shopkeeper_UploadVRAMTilesLong: JSR.w Shopkeeper_UploadVRAMTiles RTL @@ -587,7 +585,6 @@ db #$01, #$02, #$04 ;-------------------- ;!SHOP_ID = "$7F5050" ;!SHOP_SRAM_INDEX = "$7F5062" -;PurchaseCounts = "$7EF51A" ;-------------------- Setup_ShopItemCollisionHitbox: ;The complications with XBA are to handle the fact that nintendo likes to store diff --git a/spriteswap.asm b/spriteswap.asm index def5ead..5075eac 100644 --- a/spriteswap.asm +++ b/spriteswap.asm @@ -32,7 +32,7 @@ SpriteSwap_Palette_ArmorAndGloves: LDA !SPRITE_SWAP : BNE .continue LDA.b #$10 : STA $BC ; Load Original Sprite Location REP #$21 - LDA $7EF35B + LDA ArmorEquipment JSL $1BEDFF ; Read Original Palette Code RTL .part_two @@ -51,7 +51,7 @@ SpriteSwap_Palette_ArmorAndGloves: REP #$20 ; set 16-bit accumulator ; Check what Link's armor value is. - LDA $7EF35B : AND.w #$00FF : TAX + LDA ArmorEquipment : AND.w #$00FF : TAX ; (DEC06, X) diff --git a/stats.asm b/stats.asm index 30f6cb7..5003cfb 100644 --- a/stats.asm +++ b/stats.asm @@ -2,178 +2,36 @@ ; Stat Tracking ;================================================================================ ; $7EF420 - $7EF468 - Stat Tracking +; +; See sram.asm for adresses and documentation of stat values ;-------------------------------------------------------------------------------- -; $7EF420 - bonk counter -;-------------------------------------------------------------------------------- -; $7EF421 yyyyyaaa -; y - y item counter -; a - a item counter -;-------------------------------------------------------------------------------- -; $7EF422 ssshhccc -; s - sword counter -; h - shield counter -; c - crystal counter -;-------------------------------------------------------------------------------- -; $7EF423 - item counter -;-------------------------------------------------------------------------------- -; $7EF424 mmkkkkkk -; m - mail counter -; k - small keys -;-------------------------------------------------------------------------------- -; $7EF425w[2] 1111 2222 3333 4444 -; 1 - lvl 1 sword bosses -; 2 - lvl 2 sword bosses -; 3 - lvl 3 sword bosses -; 4 - lvl 4 sword bosses -;-------------------------------------------------------------------------------- -; $7EF427 kkkkcccc -; k - big keys -; c - big chests -;-------------------------------------------------------------------------------- -; $7EF428 mmmmcccc -; k - maps -; c - compases -;-------------------------------------------------------------------------------- -; $7EF429 bbbb--pp -; b - heart containers -; p - pendant upgrades -;-------------------------------------------------------------------------------- -; $7EF42A b-sccccc -; b - bomb acquired -; s - silver arrow bow acquired -; c - chests before gtower big key -;-------------------------------------------------------------------------------- -; $7EF42Bw[2] - rupees spent -;-------------------------------------------------------------------------------- -; $7EF42D - s&q counter -;-------------------------------------------------------------------------------- -; $7EF42Ew[2] - loop frame counter (low) -;-------------------------------------------------------------------------------- -; $7EF430w[2] - loop frame counter (high) -;-------------------------------------------------------------------------------- -; $7EF432 - locations before boots -;-------------------------------------------------------------------------------- -; $7EF433 - locations before mirror -;-------------------------------------------------------------------------------- -; $7EF434 - hhhhdddd - item locations checked -; h - hyrule castle -; d - palace of darkness -;-------------------------------------------------------------------------------- -; $7EF435 - dddhhhaa - item locations checked -; d - desert palace -; h - tower of hera -; a - agahnim's tower -;-------------------------------------------------------------------------------- -; $7EF436 - gggggeee - item locations checked -; g - ganon's tower -; e - eastern palace -;-------------------------------------------------------------------------------- -; $7EF437 - sssstttt - item locations checked -; s - skull woods -; t - thieves town -;-------------------------------------------------------------------------------- -; $7EF438 - iiiimmmm - item locations checked -; i - ice palace -; m - misery mire -;-------------------------------------------------------------------------------- -; $7EF439 - ttttssss - item locations checked -; t - turtle rock -; s - swamp palace -;-------------------------------------------------------------------------------- -; $7EF43A - times mirrored outdoors -;-------------------------------------------------------------------------------- -; $7EF43B - times mirrored in dungeons -;-------------------------------------------------------------------------------- -; $7EF43Cw[2] - screen transition counter -;-------------------------------------------------------------------------------- -; $7EF43Ew[2] - nmi frame counter (low) -;-------------------------------------------------------------------------------- -; $7EF440w[2] - nmi frame counter (high) -;-------------------------------------------------------------------------------- -; $7EF442 - chest counter -;-------------------------------------------------------------------------------- -; $7EF443 - lock stats -;-------------------------------------------------------------------------------- -; $7EF444w[2] - item menu frame counter (low) -;-------------------------------------------------------------------------------- -; $7EF446w[2] - item menu frame counter (high) -;-------------------------------------------------------------------------------- -; $7EF448 - ---hhhhh -; h - heart pieces -;-------------------------------------------------------------------------------- -; $7EF449 - death counter -;-------------------------------------------------------------------------------- -; $7EF44A - reserved -;-------------------------------------------------------------------------------- -; $7EF44B - flute counter -;-------------------------------------------------------------------------------- -; $7EF44Cl[3] - Unused -;-------------------------------------------------------------------------------- -; $7EF44Fl[3] - Unused -;-------------------------------------------------------------------------------- -; $7EF452 - sssscccc -; s - swordless bosses -; c - capacity upgrades -;-------------------------------------------------------------------------------- -; $7EF453 - fairy revival counter -;-------------------------------------------------------------------------------- -; $7EF454w[2] - challenge timer (low) -;-------------------------------------------------------------------------------- -; $7EF456w[2] - challenge timer (high) -;-------------------------------------------------------------------------------- -; $7EF458w[2] - sword timestamp (low) -;-------------------------------------------------------------------------------- -; $7EF45Aw[2] - sword timestamp (high) -;-------------------------------------------------------------------------------- -; $7EF45Cw[2] - boots timestamp (low) -;-------------------------------------------------------------------------------- -; $7EF45Ew[2] - boots timestamp (high) -;-------------------------------------------------------------------------------- -; $7EF460w[2] - flute timestamp (low) -;-------------------------------------------------------------------------------- -; $7EF462w[2] - flute timestamp (high) -;-------------------------------------------------------------------------------- -; $7EF464w[2] - mirror timestamp (low) -;-------------------------------------------------------------------------------- -; $7EF466w[2] - mirror timestamp (high) -;-------------------------------------------------------------------------------- -; $7EF468 - chest turn counter -;-------------------------------------------------------------------------------- - -;-------------------------------------------------------------------------------- -!LOCK_STATS = "$7EF443" -;-------------------------------------------------------------------------------- -!BONK_COUNTER = "$7EF420" IncrementBonkCounter: - LDA !LOCK_STATS : BNE + - LDA !BONK_COUNTER : INC + LDA StatsLocked : BNE + + LDA BonkCounter : INC CMP.b #100 : BEQ + ; decimal 100 - STA !BONK_COUNTER + STA BonkCounter + RTL ;-------------------------------------------------------------------------------- -!SAVE_COUNTER = "$7EF42D" StatSaveCounter: PHA - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + LDA $10 : CMP.b #$17 : BNE + ; not a proper s&q, link probably died - LDA !SAVE_COUNTER : INC + LDA SaveQuitCounter : INC CMP.b #100 : BEQ + ; decimal 100 - STA !SAVE_COUNTER + STA SaveQuitCounter + PLA RTL ;-------------------------------------------------------------------------------- -!SAVE_COUNTER = "$7EF42D" DecrementSaveCounter: PHA - LDA !LOCK_STATS : BNE + - LDA !SAVE_COUNTER : DEC : STA !SAVE_COUNTER + LDA StatsLocked : BNE + + LDA SaveQuitCounter : DEC : STA SaveQuitCounter + PLA RTL ;-------------------------------------------------------------------------------- -!TRANSITION_COUNTER = "$7EF43C" DungeonHoleWarpTransition: LDA $01C31F, X BRA StatTransitionCounter @@ -200,19 +58,18 @@ DungeonExitTransition: LDA.b #$0F : STA $10 ; stop running through the transition StatTransitionCounter: PHA : PHP - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + REP #$20 ; set 16-bit accumulator - LDA !TRANSITION_COUNTER : INC + LDA ScreenTransitions : INC CMP.w #999 : BEQ + ; decimal 999 - STA !TRANSITION_COUNTER + STA ScreenTransitions + PLP : PLA RTL ;-------------------------------------------------------------------------------- -!FLUTE_COUNTER = "$7EF44B" IncrementFlute: - LDA !LOCK_STATS : BNE + - LDA !FLUTE_COUNTER : INC : STA !FLUTE_COUNTER + LDA StatsLocked : BNE + + LDA FluteCounter : INC : STA FluteCounter + JSL.l StatTransitionCounter ; also increment transition counter RTL @@ -220,7 +77,7 @@ RTL IncrementSmallKeys: STA CurrentSmallKeys ; thing we wrote over, write small key count PHX - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + JSL AddInventory_incrementKeyLong + JSL.l UpdateKeys @@ -232,7 +89,7 @@ RTL IncrementSmallKeysNoPrimary: STA CurrentSmallKeys ; thing we wrote over, write small key count PHX - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + JSL AddInventory_incrementKeyLong + JSL.l UpdateKeys @@ -270,7 +127,7 @@ CountChestKey: ; called by neighbor functions INC ; combines HC and Sewer counts + TAX .count - LDA $7EF4E0, X : INC : STA $7EF4E0, X + LDA DungeonChestKeys, X : INC : STA DungeonChestKeys, X .end PLX : PLA RTS @@ -292,66 +149,59 @@ RTL ;-------------------------------------------------------------------------------- IncrementAgahnim2Sword: PHA - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + JSL AddInventory_incrementBossSwordLong + PLA RTL ;-------------------------------------------------------------------------------- -!DEATH_COUNTER = "$7EF449" IncrementDeathCounter: PHA - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + LDA CurrentHealth : BNE + ; link is still alive, skip - LDA !DEATH_COUNTER : INC : STA !DEATH_COUNTER - ;JSL.l DecrementSaveCounter + LDA DeathCounter : INC : STA DeathCounter + PLA RTL ;-------------------------------------------------------------------------------- -!FAIRY_COUNTER = "$7EF453" IncrementFairyRevivalCounter: STA BottleContents, X ; thing we wrote over PHA - LDA !LOCK_STATS : BNE + - LDA !FAIRY_COUNTER : INC : STA !FAIRY_COUNTER + LDA StatsLocked : BNE + + LDA FaerieRevivalCounter : INC : STA FaerieRevivalCounter + PLA RTL ;-------------------------------------------------------------------------------- -!CHESTTURN_COUNTER = "$7EF468" IncrementChestTurnCounter: PHA - LDA !LOCK_STATS : BNE + - LDA !CHESTTURN_COUNTER : INC : STA !CHESTTURN_COUNTER + LDA StatsLocked : BNE + + LDA ChestTurnCounter : INC : STA ChestTurnCounter + PLA RTL ;-------------------------------------------------------------------------------- -!CHEST_COUNTER = "$7EF442" IncrementChestCounter: LDA.b #$01 : STA $02E9 ; thing we wrote over PHA - LDA !LOCK_STATS : BNE + - LDA !CHEST_COUNTER : INC : STA !CHEST_COUNTER + LDA StatsLocked : BNE + + LDA ChestsOpened : INC : STA ChestsOpened + PLA RTL ;-------------------------------------------------------------------------------- -!CHEST_COUNTER = "$7EF442" DecrementChestCounter: PHA - LDA !LOCK_STATS : BNE + - LDA !CHEST_COUNTER : DEC : STA !CHEST_COUNTER + LDA StatsLocked : BNE + + LDA ChestsOpened : DEC : STA ChestsOpened + PLA RTL ;-------------------------------------------------------------------------------- -!ITEM_TOTAL = "$7EF423" DecrementItemCounter: PHA - LDA !LOCK_STATS : BNE + - LDA !ITEM_TOTAL : DEC : STA !ITEM_TOTAL + LDA StatsLocked : BNE + + LDA TotalItemCounter : DEC : STA TotalItemCounter + PLA RTL @@ -359,38 +209,36 @@ RTL IncrementBigChestCounter: JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over PHA - LDA !LOCK_STATS : BNE + - %BottomHalf($7EF427) + LDA StatsLocked : BNE + + %BottomHalf(BigKeysBigChests) + PLA RTL ;-------------------------------------------------------------------------------- -!DAMAGE_COUNTER = $7EF46A -!MAGIC_COUNTER = $7EF46C IncrementDamageTakenCounter_Eight: STA.l CurrentHealth PHA : PHP - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + REP #$21 - LDA.l !DAMAGE_COUNTER + LDA.l DamageCounter ADC.w #$0008 BCC ++ LDA.w #$FFFF -++ STA.l !DAMAGE_COUNTER +++ STA.l DamageCounter + PLP PLA RTL IncrementDamageTakenCounter_Arb: PHP - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + REP #$21 LDA.b $00 AND.w #$00FF - ADC.l !DAMAGE_COUNTER + ADC.l DamageCounter BCC ++ LDA.w #$FFFF -++ STA.l !DAMAGE_COUNTER +++ STA.l DamageCounter + PLP LDA.l CurrentHealth @@ -401,64 +249,61 @@ IncrementMagicUseCounter: IncrementMagicUseCounterByrna: PHA : PHP - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + REP #$21 LDA.b $00 AND.w #$00FF - ADC.l !MAGIC_COUNTER + ADC.l MagicCounter BCC ++ LDA.w #$FFFF -++ STA.l !MAGIC_COUNTER +++ STA.l MagicCounter + PLP : PLA RTL IncrementMagicUseCounterOne: - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + REP #$20 - LDA.l !MAGIC_COUNTER + LDA.l MagicCounter INC BEQ ++ - STA.l !MAGIC_COUNTER + STA.l MagicCounter ++ SEP #$20 + LDA.l CurrentMagic RTL ;-------------------------------------------------------------------------------- -!OW_MIRROR_COUNTER = "$7EF43A" IncrementOWMirror: PHA - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + LDA CurrentWorld : BEQ + ; only do this for DW->LW - LDA !OW_MIRROR_COUNTER : INC : STA !OW_MIRROR_COUNTER + LDA OverworldMirrors : INC : STA OverworldMirrors + PLA JMP StatTransitionCounter ;-------------------------------------------------------------------------------- -!UW_MIRROR_COUNTER = "$7EF43B" IncrementUWMirror: PHA LDA.b #$00 : STA $7F5035 ; bandaid patch bug with mirroring away from text - LDA !LOCK_STATS : BNE + + LDA StatsLocked : BNE + LDA $040C : CMP #$FF : BEQ + ; skip if we're in a cave or house - LDA !UW_MIRROR_COUNTER : INC : STA !UW_MIRROR_COUNTER + LDA UnderworldMirrors : INC : STA UnderworldMirrors JSL.l StatTransitionCounter + PLA JSL.l Dungeon_SaveRoomData ; thing we wrote over RTL ;-------------------------------------------------------------------------------- -!SPENT_RUPEES = "$7EF42B" IncrementSpentRupees: DEC A : BPL .subtractRupees - LDA.w #$0000 : STA $7EF + LDA.w #$0000 : STA TargetRupees RTL .subtractRupees PHA : PHP - LDA !LOCK_STATS : AND.w #$00FF : BNE + - LDA !SPENT_RUPEES : INC + LDA StatsLocked : AND.w #$00FF : BNE + + LDA RupeesSpent : INC CMP.w #9999 : BEQ + ; decimal 9999 - STA !SPENT_RUPEES + STA RupeesSpent + PLP : PLA RTL @@ -473,53 +318,39 @@ IndoorSubtileTransitionCounter: STZ $0642 JMP StatTransitionCounter ;-------------------------------------------------------------------------------- -!CHEST_COUNTER = "$7EF442" -!MAIL_COUNTER = "$7EF424" ; mmkkkkkk !BOSS_KILLS = "$7F5037" -!SWORD_KILLS_1 = "$7EF425" -!SWORD_KILLS_2 = "$7EF426" -!GTOWER_PRE_BIG_KEY = "$7EF42A" ; ---ccccc !NONCHEST_COUNTER = "$7F503E" -!SAVE_COUNTER = "$7EF42D" -!TRANSITION_COUNTER = "$7EF43C" -!NMI_COUNTER = "$7EF43E" -!LOOP_COUNTER = "$7EF42E" !LAG_TIME = "$7F5038" !RUPEES_COLLECTED = "$7F503C" -!ITEM_TOTAL = "$7EF423" StatsFinalPrep: PHA : PHX : PHP SEP #$30 ; set 8-bit accumulator and index registers - LDA !LOCK_STATS : BNE .ramPostOnly - INC : STA !LOCK_STATS + LDA StatsLocked : BNE .ramPostOnly + INC : STA StatsLocked JSL.l AddInventory_incrementBossSwordLong - LDA !MAIL_COUNTER : !ADD #$40 : STA !MAIL_COUNTER ; add green mail to mail count - - ;LDA !GTOWER_PRE_BIG_KEY : DEC : AND #$1F : TAX - ;LDA !GTOWER_PRE_BIG_KEY : AND #$E0 : STA !GTOWER_PRE_BIG_KEY - ;TXA : ORA !GTOWER_PRE_BIG_KEY : STA !GTOWER_PRE_BIG_KEY + LDA HighestMail : INC : STA HighestMail ; add green mail to mail count - LDA !TRANSITION_COUNTER : DEC : STA !TRANSITION_COUNTER ; remove extra transition from exiting gtower via duck + LDA ScreenTransitions : DEC : STA ScreenTransitions ; remove extra transition from exiting gtower via duck .ramPostOnly - LDA !SWORD_KILLS_1 : LSR #4 : !ADD !SWORD_KILLS_1 : STA !BOSS_KILLS - LDA !SWORD_KILLS_2 : LSR #4 : !ADD !SWORD_KILLS_2 : !ADD !BOSS_KILLS : AND #$0F : STA !BOSS_KILLS + LDA SwordBossKills : LSR #4 : !ADD SwordBossKills : STA !BOSS_KILLS + LDA SwordBossKills+1 : LSR #4 : !ADD SwordBossKills+1 : !ADD !BOSS_KILLS : AND #$0F : STA !BOSS_KILLS - LDA !NMI_COUNTER : !SUB !LOOP_COUNTER : STA !LAG_TIME - LDA !NMI_COUNTER+1 : SBC !LOOP_COUNTER+1 : STA !LAG_TIME+1 - LDA !NMI_COUNTER+2 : SBC !LOOP_COUNTER+2 : STA !LAG_TIME+2 - LDA !NMI_COUNTER+3 : SBC !LOOP_COUNTER+3 : STA !LAG_TIME+3 + LDA NMIFrames : !SUB LoopFrames : STA !LAG_TIME + LDA NMIFrames+1 : SBC LoopFrames+1 : STA !LAG_TIME+1 + LDA NMIFrames+2 : SBC LoopFrames+2 : STA !LAG_TIME+2 + LDA NMIFrames+3 : SBC LoopFrames+3 : STA !LAG_TIME+3 - LDA !SPENT_RUPEES : !ADD CurrentRupees : STA !RUPEES_COLLECTED - LDA !SPENT_RUPEES+1 : ADC $7EF363 : STA !RUPEES_COLLECTED+1 + LDA RupeesSpent : !ADD CurrentRupees : STA !RUPEES_COLLECTED + LDA RupeesSpent+1 : ADC CurrentRupees+1 : STA !RUPEES_COLLECTED+1 - LDA !ITEM_TOTAL : !SUB !CHEST_COUNTER : STA !NONCHEST_COUNTER + LDA TotalItemCounter : !SUB ChestsOpened : STA !NONCHEST_COUNTER .done PLP : PLX : PLA diff --git a/stats/statConfig.asm b/stats/statConfig.asm index d921b94..d3b8c29 100755 --- a/stats/statConfig.asm +++ b/stats/statConfig.asm @@ -1,21 +1,21 @@ ;(address, type, shiftRight, bits, digits, xPos, lineNumber) -%AddStat($7EF458, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y) -%AddStat($7EF45C, 1, 0, 32, 4, !PEGASUS_BOOTS_X, !PEGASUS_BOOTS_Y) -%AddStat($7EF460, 1, 0, 32, 4, !FLUTE_X, !FLUTE_Y) -%AddStat($7EF464, 1, 0, 32, 4, !MIRROR_X, !MIRROR_Y) -%AddStat($7EF452, 0, 4, 04, 2, !SWORDLESS_X, !SWORDLESS_Y) -%AddStat($7EF425, 0, 4, 04, 2, !FIGHTERS_SWORD_X, !FIGHTERS_SWORD_Y) -%AddStat($7EF425, 0, 0, 04, 2, !MASTER_SWORD_X, !MASTER_SWORD_Y) -%AddStat($7EF426, 0, 4, 04, 2, !TEMPERED_SWORD_X, !TEMPERED_SWORD_Y) -%AddStat($7EF426, 0, 0, 04, 2, !GOLD_SWORD_X, !GOLD_SWORD_Y) -%AddStat($7EF46A, 0, 0, 16, 5, !DAMAGETAKEN_X, !DAMAGETAKEN_Y) -%AddStat($7EF46C, 0, 0, 16, 5, !MAGICUSED_X, !MAGICUSED_Y) -%AddStat($7EF420, 0, 0, 08, 3, !BONKS_X, !BONKS_Y) -%AddStat($7EF42D, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y) -%AddStat($7EF449, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y) -%AddStat($7EF453, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y) -%AddStat($7EF444, 1, 8, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y) +%AddStat(SwordTime, 1, 0, 32, 4, !FIRST_SWORD_X, !FIRST_SWORD_Y) +%AddStat(BootsTime, 1, 0, 32, 4, !PEGASUS_BOOTS_X, !PEGASUS_BOOTS_Y) +%AddStat(FluteTime, 1, 0, 32, 4, !FLUTE_X, !FLUTE_Y) +%AddStat(MirrorTime, 1, 0, 32, 4, !MIRROR_X, !MIRROR_Y) +%AddStat(SwordlessBossKills, 0, 0, 08, 2, !SWORDLESS_X, !SWORDLESS_Y) +%AddStat(SwordBossKills, 0, 4, 04, 2, !FIGHTERS_SWORD_X, !FIGHTERS_SWORD_Y) +%AddStat(SwordBossKills, 0, 0, 04, 2, !MASTER_SWORD_X, !MASTER_SWORD_Y) +%AddStat(SwordBossKills+1, 0, 4, 04, 2, !TEMPERED_SWORD_X, !TEMPERED_SWORD_Y) +%AddStat(SwordBossKills+1, 0, 0, 04, 2, !GOLD_SWORD_X, !GOLD_SWORD_Y) +%AddStat(DamageCounter, 0, 0, 16, 5, !DAMAGETAKEN_X, !DAMAGETAKEN_Y) +%AddStat(MagicCounter, 0, 0, 16, 5, !MAGICUSED_X, !MAGICUSED_Y) +%AddStat(BonkCounter, 0, 0, 08, 3, !BONKS_X, !BONKS_Y) +%AddStat(SaveQuitCounter, 0, 0, 08, 2, !SAVE_AND_QUITS_X, !SAVE_AND_QUITS_Y) +%AddStat(DeathCounter, 0, 0, 08, 2, !DEATHS_X, !DEATHS_Y) +%AddStat(FaerieRevivalCounter, 0, 0, 08, 3, !FAERIE_REVIVALS_X, !FAERIE_REVIVALS_Y) +%AddStat(MenuFrames, 1, 8, 32, 4, !TOTAL_MENU_TIME_X, !TOTAL_MENU_TIME_Y) %AddStat($7F5038, 1, 0, 32, 4, !TOTAL_LAG_TIME_X, !TOTAL_LAG_TIME_Y) -%AddStat($7EF423, 0, 0, 08, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y) -%AddStat($7EF43E, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y) +%AddStat(TotalItemCounter, 0, 0, 16, 3, !COLLECTION_RATE_X, !COLLECTION_RATE_Y) +%AddStat(NMIFrames, 1, 0, 32, 4, !TOTAL_TIME_X, !TOTAL_TIME_Y) diff --git a/swordswap.asm b/swordswap.asm index 3a04b02..0e16119 100644 --- a/swordswap.asm +++ b/swordswap.asm @@ -208,13 +208,13 @@ CheckMedallionSword: .outdoors LDA $8A : CMP.b #$70 : BNE + LDA.l MireRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done - LDA $7EF2F0 : AND.b #$20 : BNE .done + LDA OverworldEventData+$70 : AND.b #$20 : BNE .done LDA.b #$08 : PHA : PLB ; set data bank to $08 LDY.b #$02 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; misery mire BRA .done + : CMP.b #$47 : BNE + LDA.l TRockRequiredMedallion : TAX : LDA.l .medallion_type, X : CMP $0303 : BNE .done - LDA $7EF2C7 : AND.b #$20 : BNE .done + LDA OverworldEventData+$47 : AND.b #$20 : BNE .done LDA.b #$08 : PHA : PLB ; set data bank to $08 LDY.b #$03 : JSL.l Ancilla_CheckIfEntranceTriggered : BCS .permit ; turtle rock + diff --git a/timer.asm b/timer.asm index bff9bb2..1623831 100644 --- a/timer.asm +++ b/timer.asm @@ -2,8 +2,6 @@ ; Challenge Timer ;================================================================================ !Temp = "$7F5020" -!BaseTimer = "$7EF43E" -!ChallengeTimer = "$7EF454" !TemporaryOHKO = "$7F50CC" ;-------------------------------------------------------------------------------- !CLOCK_HOURS = "$7F5080" ; $7F5080 - $7F5083 - Clock Hours @@ -58,17 +56,17 @@ CalculateTimer: STA.l !CLOCK_SECONDS+2 LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode - %Sub32(!BaseTimer,!ChallengeTimer,!CLOCK_TEMPORARY) + %Sub32(NMIFrames,ChallengeTimer,!CLOCK_TEMPORARY) BRA ++ + CMP.w #$0001 : BNE ++ ; Countdown Mode - %Sub32(!ChallengeTimer,!BaseTimer,!CLOCK_TEMPORARY) + %Sub32(ChallengeTimer,NMIFrames,!CLOCK_TEMPORARY) ++ %Blt32(!CLOCK_TEMPORARY,.halfCycle) : !BLT + LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF LDA.w #$0002 : STA.l !Status ; Set DNF Mode - LDA.l !BaseTimer : STA.l !ChallengeTimer - LDA.l !BaseTimer+2 : STA.l !ChallengeTimer+2 + LDA.l NMIFrames : STA.l ChallengeTimer + LDA.l NMIFrames+2 : STA.l ChallengeTimer+2 RTS ++ CMP.w #$0001 : BNE ++ ; Negative Time LDA.l !CLOCK_TEMPORARY : EOR.w #$FFFF : !ADD.w #$0001 : STA.l !CLOCK_TEMPORARY @@ -77,8 +75,8 @@ CalculateTimer: BRA .prepDigits ++ CMP.w #$0002 : BNE ++ ; OHKO LDA.w #$0002 : STA.l !Status ; Set DNF Mode - LDA.l !BaseTimer : STA.l !ChallengeTimer - LDA.l !BaseTimer+2 : STA.l !ChallengeTimer+2 + LDA.l NMIFrames : STA.l ChallengeTimer + LDA.l NMIFrames+2 : STA.l ChallengeTimer+2 RTS ++ ; End Game SEP #$30