summaryrefslogtreecommitdiff
path: root/home/game_time.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/game_time.asm')
-rw-r--r--home/game_time.asm44
1 files changed, 35 insertions, 9 deletions
diff --git a/home/game_time.asm b/home/game_time.asm
index 01ad750b..86435991 100644
--- a/home/game_time.asm
+++ b/home/game_time.asm
@@ -1,4 +1,4 @@
-ResetGameTime:: ; 1ee6 (0:1ee6)
+ResetGameTime::
xor a
ld [wGameTimeCap], a
ld [wGameTimeHours], a
@@ -8,67 +8,93 @@ ResetGameTime:: ; 1ee6 (0:1ee6)
ld [wGameTimeFrames], a
ret
-GameTimer:: ; 1efa (0:1efa)
+GameTimer::
nop
+
+UpdateGameTimer::
+; Increment the game timer by one frame.
+; The game timer is capped at 999:59:59.00.
+
+; Don't update if game logic is paused.
ld a, [wGameLogicPaused]
and a
ret nz
+; Is the timer paused?
ld hl, wGameTimerPause
- bit 0, [hl]
+ bit GAMETIMERPAUSE_TIMER_PAUSED_F, [hl]
ret z
+; Is the timer already capped?
ld hl, wGameTimeCap
bit 0, [hl]
ret nz
+; +1 frame
ld hl, wGameTimeFrames
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; frames/second
jr nc, .second
+
ld [hl], a
ret
.second
xor a
ld [hl], a
+
+; +1 second
ld hl, wGameTimeSeconds
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; seconds/minute
jr nc, .minute
+
ld [hl], a
ret
.minute
xor a
ld [hl], a
+
+; +1 minute
ld hl, wGameTimeMinutes
ld a, [hl]
inc a
- cp 60
+
+ cp 60 ; minutes/hour
jr nc, .hour
+
ld [hl], a
ret
.hour
xor a
ld [hl], a
+
+; +1 hour
ld a, [wGameTimeHours]
ld h, a
ld a, [wGameTimeHours + 1]
ld l, a
inc hl
+
+; Cap the timer after 1000 hours.
ld a, h
- cp 1000 / $100
+ cp HIGH(1000)
jr c, .ok
+
ld a, l
- cp 1000 % $100
+ cp LOW(1000)
jr c, .ok
+
ld hl, wGameTimeCap
set 0, [hl]
- ld a, 59
+
+ ld a, 59 ; 999:59:59.00
ld [wGameTimeMinutes], a
ld [wGameTimeSeconds], a
ret