Fix timer and add drop-to-ganon mode

This commit is contained in:
2025-12-13 21:22:14 -06:00
parent a6ad4c082b
commit 63e8d5687b

View File

@@ -7,25 +7,25 @@
!FRAMES_PER_HOUR = 60*60*60 !FRAMES_PER_HOUR = 60*60*60
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro DecIncr(value) macro DecIncr(value)
LDA.w <value> : INC LDA.l <value> : INC
CMP.w #$000A : !BLT ?noIncr CMP.w #$000A : !BLT ?noIncr
LDA.w <value>+2 : INC : STA.w <value>+2 LDA.l <value>+2 : INC : STA.l <value>+2
LDA.w #$0000 LDA.w #$0000
?noIncr: ?noIncr:
STA.w <value> STA.l <value>
endmacro endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro Sub32(minuend,subtrahend,result) macro Sub32(minuend,subtrahend,result)
LDA.l <minuend> LDA.l <minuend>
!SUB.l <subtrahend> ; perform subtraction on the LSBs !SUB.l <subtrahend> ; perform subtraction on the LSBs
STA.w <result> STA.l <result>
LDA.l <minuend>+2 ; do the same for the MSBs, with carry LDA.l <minuend>+2 ; do the same for the MSBs, with carry
SBC.l <subtrahend>+2 ; set according to the previous result SBC.l <subtrahend>+2 ; set according to the previous result
STA.w <result>+2 STA.l <result>+2
endmacro endmacro
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
macro Blt32(value1,value2) macro Blt32(value1,value2)
LDA.w <value1>+2 LDA.l <value1>+2
CMP.l <value2>+2 CMP.l <value2>+2
!BLT ?done !BLT ?done
BNE ?done BNE ?done
@@ -50,7 +50,7 @@ CalculateTimer:
%Sub32(ChallengeTimer,NMIFrames,ClockBuffer) %Sub32(ChallengeTimer,NMIFrames,ClockBuffer)
++ ++
%Blt32(ClockBuffer,.halfCycle) : !BLT + %Blt32(ClockBuffer,.halfCycle) : !BGE +++ : JMP + : +++
LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
LDA.l NMIFrames : STA.l ChallengeTimer LDA.l NMIFrames : STA.l ChallengeTimer
@@ -66,6 +66,17 @@ CalculateTimer:
LDA.l NMIFrames : STA.l ChallengeTimer LDA.l NMIFrames : STA.l ChallengeTimer
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2 LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
RTS RTS
++ CMP.w #$0004 : BNE ++ ; Drop Into Ganon
LDA.w $048E
BEQ .already_ganon
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
LDA.w #$0011 : STA.b GameMode
SEP #$20
LDA.b #$7B
STA.w $010E
REP #$20
.already_ganon
RTS
++ ; End Game ++ ; End Game
SEP #$30 SEP #$30
JSL ActivateGoal JSL ActivateGoal
@@ -133,6 +144,13 @@ DrawChallengeTimer:
LDA.w #$247F : STA.l HUDTileMapBuffer+$98 LDA.w #$247F : STA.l HUDTileMapBuffer+$98
STA.l HUDTileMapBuffer+$9A STA.l HUDTileMapBuffer+$9A
BRA +++ BRA +++
++ CMP.w #$0004 : BNE ++ ; Ganon
LDA.w #$247F : STA.l HUDTileMapBuffer+$92
STA.l HUDTileMapBuffer+$94
STA.l HUDTileMapBuffer+$96
STA.l HUDTileMapBuffer+$98
STA.l HUDTileMapBuffer+$9A
BRA +++
++ ; OHKO ++ ; OHKO
LDA.w #$280A : STA.l HUDTileMapBuffer+$94 LDA.w #$280A : STA.l HUDTileMapBuffer+$94
LDA.w #$280B : STA.l HUDTileMapBuffer+$96 LDA.w #$280B : STA.l HUDTileMapBuffer+$96