mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
split out game time functions into engine/game_time.asm
This commit is contained in:
parent
2c36afc6c3
commit
d93d17b43b
132
engine/game_time.asm
Normal file
132
engine/game_time.asm
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
ResetGameTime: ; 208a
|
||||||
|
xor a
|
||||||
|
ld [GameTimeCap], a
|
||||||
|
ld [GameTimeHours], a
|
||||||
|
ld [GameTimeHours + 1], a
|
||||||
|
ld [GameTimeMinutes], a
|
||||||
|
ld [GameTimeSeconds], a
|
||||||
|
ld [GameTimeFrames], a
|
||||||
|
ret
|
||||||
|
; 209e
|
||||||
|
|
||||||
|
|
||||||
|
GameTimer: ; 209e
|
||||||
|
|
||||||
|
nop
|
||||||
|
|
||||||
|
ld a, [rSVBK]
|
||||||
|
push af
|
||||||
|
ld a, 1
|
||||||
|
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, [$c2cd]
|
||||||
|
and a
|
||||||
|
ret nz
|
||||||
|
|
||||||
|
; Is the timer paused?
|
||||||
|
ld hl, GameTimerPause
|
||||||
|
bit 0, [hl]
|
||||||
|
ret z
|
||||||
|
|
||||||
|
; Is the timer already capped?
|
||||||
|
ld hl, GameTimeCap
|
||||||
|
bit 0, [hl]
|
||||||
|
ret nz
|
||||||
|
|
||||||
|
|
||||||
|
; +1 frame
|
||||||
|
ld hl, GameTimeFrames
|
||||||
|
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, GameTimeSeconds
|
||||||
|
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, GameTimeMinutes
|
||||||
|
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, [GameTimeHours]
|
||||||
|
ld h, a
|
||||||
|
ld a, [GameTimeHours + 1]
|
||||||
|
ld l, a
|
||||||
|
inc hl
|
||||||
|
|
||||||
|
|
||||||
|
; Cap the timer after 1000 hours.
|
||||||
|
ld a, h
|
||||||
|
cp 1000 / $100
|
||||||
|
jr c, .ok
|
||||||
|
|
||||||
|
ld a, l
|
||||||
|
cp 1000 % $100
|
||||||
|
jr c, .ok
|
||||||
|
|
||||||
|
ld hl, GameTimeCap
|
||||||
|
set 0, [hl]
|
||||||
|
|
||||||
|
ld a, 59 ; 999:59:59.00
|
||||||
|
ld [GameTimeMinutes], a
|
||||||
|
ld [GameTimeSeconds], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
.ok
|
||||||
|
ld a, h
|
||||||
|
ld [GameTimeHours], a
|
||||||
|
ld a, l
|
||||||
|
ld [GameTimeHours + 1], a
|
||||||
|
ret
|
||||||
|
; 210f
|
||||||
|
|
132
main.asm
132
main.asm
@ -515,137 +515,7 @@ AskSerial: ; 2063
|
|||||||
; 208a
|
; 208a
|
||||||
|
|
||||||
|
|
||||||
ResetGameTime: ; 208a
|
INCLUDE "engine/game_time.asm"
|
||||||
xor a
|
|
||||||
ld [GameTimeCap], a
|
|
||||||
ld [GameTimeHours], a
|
|
||||||
ld [GameTimeHours + 1], a
|
|
||||||
ld [GameTimeMinutes], a
|
|
||||||
ld [GameTimeSeconds], a
|
|
||||||
ld [GameTimeFrames], a
|
|
||||||
ret
|
|
||||||
; 209e
|
|
||||||
|
|
||||||
|
|
||||||
GameTimer: ; 209e
|
|
||||||
|
|
||||||
nop
|
|
||||||
|
|
||||||
ld a, [rSVBK]
|
|
||||||
push af
|
|
||||||
ld a, 1
|
|
||||||
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, [$c2cd]
|
|
||||||
and a
|
|
||||||
ret nz
|
|
||||||
|
|
||||||
; Is the timer paused?
|
|
||||||
ld hl, GameTimerPause
|
|
||||||
bit 0, [hl]
|
|
||||||
ret z
|
|
||||||
|
|
||||||
; Is the timer already capped?
|
|
||||||
ld hl, GameTimeCap
|
|
||||||
bit 0, [hl]
|
|
||||||
ret nz
|
|
||||||
|
|
||||||
|
|
||||||
; +1 frame
|
|
||||||
ld hl, GameTimeFrames
|
|
||||||
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, GameTimeSeconds
|
|
||||||
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, GameTimeMinutes
|
|
||||||
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, [GameTimeHours]
|
|
||||||
ld h, a
|
|
||||||
ld a, [GameTimeHours + 1]
|
|
||||||
ld l, a
|
|
||||||
inc hl
|
|
||||||
|
|
||||||
|
|
||||||
; Cap the timer after 1000 hours.
|
|
||||||
ld a, h
|
|
||||||
cp 1000 / $100
|
|
||||||
jr c, .ok
|
|
||||||
|
|
||||||
ld a, l
|
|
||||||
cp 1000 % $100
|
|
||||||
jr c, .ok
|
|
||||||
|
|
||||||
ld hl, GameTimeCap
|
|
||||||
set 0, [hl]
|
|
||||||
|
|
||||||
ld a, 59 ; 999:59:59.00
|
|
||||||
ld [GameTimeMinutes], a
|
|
||||||
ld [GameTimeSeconds], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
.ok
|
|
||||||
ld a, h
|
|
||||||
ld [GameTimeHours], a
|
|
||||||
ld a, l
|
|
||||||
ld [GameTimeHours + 1], a
|
|
||||||
ret
|
|
||||||
; 210f
|
|
||||||
|
|
||||||
|
|
||||||
Function210f: ; 210f
|
Function210f: ; 210f
|
||||||
|
Loading…
Reference in New Issue
Block a user