diff options
Diffstat (limited to 'home/game_time.asm')
-rw-r--r-- | home/game_time.asm | 44 |
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 |