pokecrystal-board/home/game_time.asm

119 lines
1.4 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
ResetGameTime::
xor a
2018-01-23 14:39:09 -08:00
ld [wGameTimeCap], a
ld [wGameTimeHours], a
ld [wGameTimeHours + 1], a
ld [wGameTimeMinutes], a
ld [wGameTimeSeconds], a
ld [wGameTimeFrames], a
ret
2018-06-24 07:09:41 -07:00
GameTimer::
nop
ldh a, [rSVBK]
push af
2018-01-23 14:39:09 -08:00
ld a, BANK(wGameTime)
ldh [rSVBK], a
2020-06-16 12:49:32 -07:00
call .Function
pop af
ldh [rSVBK], a
ret
2020-06-16 12:49:32 -07:00
.Function
; 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
2018-01-23 09:40:29 -08:00
bit GAMETIMERPAUSE_TIMER_PAUSED_F, [hl]
ret z
; Is the timer already capped?
2018-01-23 14:39:09 -08:00
ld hl, wGameTimeCap
bit 0, [hl]
ret nz
; +1 frame
2018-01-23 14:39:09 -08:00
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
2018-01-23 14:39:09 -08:00
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
2018-01-23 14:39:09 -08:00
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
2018-01-23 14:39:09 -08:00
ld a, [wGameTimeHours]
ld h, a
2018-01-23 14:39:09 -08:00
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
2018-01-23 14:39:09 -08:00
ld hl, wGameTimeCap
set 0, [hl]
ld a, 59 ; 999:59:59.00
2018-01-23 14:39:09 -08:00
ld [wGameTimeMinutes], a
ld [wGameTimeSeconds], a
ret
.ok
ld a, h
2018-01-23 14:39:09 -08:00
ld [wGameTimeHours], a
ld a, l
2018-01-23 14:39:09 -08:00
ld [wGameTimeHours + 1], a
ret