fixed fake flipper kill (again except on the screen you entered) fixed stats bonk key fixed stats progressive sword probably fixed several byrna bugs added OnEnterWater event hook
380 lines
13 KiB
NASM
380 lines
13 KiB
NASM
;================================================================================
|
|
; Stat Tracking
|
|
;================================================================================
|
|
; $7EF420 - $7EF441 - Stat Tracking
|
|
;--------------------------------------------------------------------------------
|
|
; $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] - RTA-Timestamp (Start)
|
|
;--------------------------------------------------------------------------------
|
|
; $7EF44Fl[3] - RTA-Timestamp (End)
|
|
;--------------------------------------------------------------------------------
|
|
; $7EF452 - sssscccc
|
|
; s - swordless bosses
|
|
; c - capacity upgrades
|
|
;--------------------------------------------------------------------------------
|
|
; $7EF452 - unused
|
|
;--------------------------------------------------------------------------------
|
|
; $7EF454w[2] - challenge timer (low)
|
|
;--------------------------------------------------------------------------------
|
|
; $7EF456w[2] - challenge timer (high)
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
!LOCK_STATS = "$7EF443"
|
|
;--------------------------------------------------------------------------------
|
|
!BONK_COUNTER = "$7EF420"
|
|
!BONK_REPEAT = "$7F503F"
|
|
!LOOP_FRAMES_LOW = "$7EF42E"
|
|
StatBonkCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA !LOOP_FRAMES_LOW : !SUB !BONK_REPEAT : CMP #30 : !BLT +
|
|
LDA !LOOP_FRAMES_LOW : STA !BONK_REPEAT
|
|
LDA !BONK_COUNTER : INC
|
|
CMP.b #100 : BEQ + ; decimal 100
|
|
STA !BONK_COUNTER
|
|
+
|
|
PLA
|
|
JSL.l AddDashTremor ; thing we wrote over
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!SAVE_COUNTER = "$7EF42D"
|
|
StatSaveCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA $10 : CMP.b #$17 : BNE + ; not a proper s&q, link probably died
|
|
LDA !SAVE_COUNTER : INC
|
|
CMP.b #100 : BEQ + ; decimal 100
|
|
STA !SAVE_COUNTER
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!SAVE_COUNTER = "$7EF42D"
|
|
DecrementSaveCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA !SAVE_COUNTER : DEC : STA !SAVE_COUNTER
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!TRANSITION_COUNTER = "$7EF43C"
|
|
DungeonHoleWarpTransition:
|
|
LDA $01C31F, X
|
|
BRA StatTransitionCounter
|
|
DungeonHoleEntranceTransition:
|
|
JSL EnableForceBlank
|
|
BRA StatTransitionCounter
|
|
DungeonStairsTransition:
|
|
JSL Dungeon_SaveRoomQuadrantData
|
|
BRA StatTransitionCounter
|
|
DungeonExitTransition:
|
|
LDA.b #$0F : STA $10
|
|
StatTransitionCounter:
|
|
PHA : PHP
|
|
LDA !LOCK_STATS : BNE +
|
|
REP #$20 ; set 16-bit accumulator
|
|
LDA !TRANSITION_COUNTER : INC
|
|
CMP.w #999 : BEQ + ; decimal 999
|
|
STA !TRANSITION_COUNTER
|
|
+
|
|
PLP : PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!FLUTE_COUNTER = "$7EF44B"
|
|
IncrementFlute:
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA !FLUTE_COUNTER : INC : STA !FLUTE_COUNTER
|
|
+
|
|
JSL.l StatTransitionCounter ; also increment transition counter
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
IncrementSmallKeys:
|
|
LDA !LOCK_STATS : BNE +
|
|
JSL AddInventory_incrementKeyLong
|
|
+
|
|
LDA $7EF36F ; thing we wrote over, read small key count
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
IncrementAgahnim2Sword:
|
|
JSL.l Dungeon_SaveRoomData_justKeys ; thing we wrote over
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
JSL AddInventory_incrementBossSwordLong
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!DEATH_COUNTER = "$7EF449"
|
|
IncrementDeathCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA $7EF36D : BNE + ; link is still alive, skip
|
|
LDA !DEATH_COUNTER : INC : STA !DEATH_COUNTER
|
|
;JSL.l DecrementSaveCounter
|
|
+
|
|
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
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!CHEST_COUNTER = "$7EF442"
|
|
DecrementChestCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA !CHEST_COUNTER : DEC : STA !CHEST_COUNTER
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!ITEM_TOTAL = "$7EF423"
|
|
DecrementItemCounter:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA !ITEM_TOTAL : DEC : STA !ITEM_TOTAL
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
IncrementBigChestCounter:
|
|
JSL.l Dungeon_SaveRoomQuadrantData ; thing we wrote over
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
%BottomHalf($7EF427)
|
|
+
|
|
PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
!OW_MIRROR_COUNTER = "$7EF43A"
|
|
IncrementOWMirror:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA $7EF3CA : BEQ + ; only do this for DW->LW
|
|
LDA !OW_MIRROR_COUNTER : INC : STA !OW_MIRROR_COUNTER
|
|
+
|
|
PLA
|
|
JMP StatTransitionCounter
|
|
;--------------------------------------------------------------------------------
|
|
!UW_MIRROR_COUNTER = "$7EF43B"
|
|
IncrementUWMirror:
|
|
PHA
|
|
LDA !LOCK_STATS : BNE +
|
|
LDA $040C : CMP #$FF : BEQ + ; skip if we're in a cave or house
|
|
LDA !UW_MIRROR_COUNTER : INC : STA !UW_MIRROR_COUNTER
|
|
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 $7EF360
|
|
RTL
|
|
.subtractRupees
|
|
PHA : PHP
|
|
LDA !LOCK_STATS : AND.w #$00FF : BNE +
|
|
LDA !SPENT_RUPEES : INC
|
|
CMP.w #9999 : BEQ + ; decimal 9999
|
|
STA !SPENT_RUPEES
|
|
+
|
|
PLP : PLA
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
IndoorTileTransitionCounter:
|
|
JSL.l Dungeon_LoadRoom ; thing we wrote over
|
|
JMP StatTransitionCounter
|
|
;--------------------------------------------------------------------------------
|
|
!REDRAW = "$7F5000"
|
|
IndoorSubtileTransitionCounter:
|
|
LDA.b #$01 : STA !REDRAW ; set redraw flag for items
|
|
STZ $0646 ; stuff we wrote over
|
|
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"
|
|
|
|
!RTA_END = "$7EF44F"
|
|
StatsFinalPrep:
|
|
PHA : PHX : PHP
|
|
SEP #$30 ; set 8-bit accumulator and index registers
|
|
|
|
LDA !LOCK_STATS : BNE .ramPostOnly
|
|
INC : STA !LOCK_STATS
|
|
|
|
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 !TRANSITION_COUNTER : DEC : STA !TRANSITION_COUNTER ; 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 !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 !SPENT_RUPEES : !ADD $7EF362 : STA !RUPEES_COLLECTED
|
|
LDA !SPENT_RUPEES+1 : ADC $7EF363 : STA !RUPEES_COLLECTED+1
|
|
|
|
LDA !ITEM_TOTAL : !SUB !CHEST_COUNTER : STA !NONCHEST_COUNTER
|
|
|
|
;LDA $FFFFFF
|
|
;JSL.l Clock_IsSupported
|
|
BRA +
|
|
REP #$20 ; set 16-bit accumulator
|
|
|
|
LDA $00 : PHA
|
|
LDA $02 : PHA
|
|
|
|
JSL.l Clock_QuickStamp
|
|
LDA $00 : STA !RTA_END
|
|
LDA $02 : STA !RTA_END+2
|
|
|
|
PLA : STA $02
|
|
PLA : STA $00
|
|
+
|
|
|
|
.done
|
|
PLP : PLX : PLA
|
|
LDA.b #$19 : STA $10 ; thing we wrote over, load triforce room
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
; Notes:
|
|
; s&q counter
|
|
;================================================================================ |