Change addresses to labels and remove SRAM trace calls

This commit is contained in:
cassidy
2021-12-06 00:41:55 -05:00
parent d5c4834b1d
commit c29de40484
30 changed files with 226 additions and 435 deletions

View File

@@ -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

View File

@@ -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
;--------------------------------------------------------------------------------

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
+

View File

@@ -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
;--------------------------------------------------------------------------------

View File

@@ -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

View File

@@ -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

View File

@@ -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
;================================================================================

View File

@@ -33,7 +33,7 @@ SpawnHauntedGroveItem:
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

View File

@@ -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)
++

View File

@@ -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 ++

View File

@@ -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

View File

@@ -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.

View File

@@ -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
;--------------------------------------------------------------------------------

View File

@@ -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

16
msu.asm
View File

@@ -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

View File

@@ -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

View File

@@ -58,14 +58,13 @@ 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
LDA.l GoalCounter
JSR HudHexToDec3Digit
REP #$20

View File

@@ -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
;================================================================================

View File

@@ -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
;--------------------------------------------------------------------------------

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)

301
stats.asm
View File

@@ -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 HighestMail : INC : STA HighestMail ; 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 !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

View File

@@ -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)

View File

@@ -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
+

View File

@@ -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