ref: 53bcd8f46ca4f78381af70f55d03f3180be277de
dir: /home/game_time.asm/
ResetGameTime:: ; 208a xor a ld [wGameTimeCap], a ld [wGameTimeHours], a ld [wGameTimeHours + 1], a ld [wGameTimeMinutes], a ld [wGameTimeSeconds], a ld [wGameTimeFrames], a ret ; 209e GameTimer:: ; 209e nop ld a, [rSVBK] push af ld a, BANK(wGameTime) ld [rSVBK], a call UpdateGameTimer pop af ld [rSVBK], a ret ; 20ad UpdateGameTimer:: ; 20ad ; 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 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 ; 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 ; 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 ; 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 HIGH(1000) jr c, .ok ld a, l cp LOW(1000) jr c, .ok ld hl, wGameTimeCap set 0, [hl] ld a, 59 ; 999:59:59.00 ld [wGameTimeMinutes], a ld [wGameTimeSeconds], a ret .ok ld a, h ld [wGameTimeHours], a ld a, l ld [wGameTimeHours + 1], a ret ; 210f