Add game timer.
This commit is contained in:
parent
ed8bf5d047
commit
6c3957f044
BIN
bin/DMGTRIS.GBC
BIN
bin/DMGTRIS.GBC
Binary file not shown.
2627
bin/DMGTRIS.map
2627
bin/DMGTRIS.map
File diff suppressed because it is too large
Load Diff
Binary file not shown.
2426
bin/DMGTRIS.sym
2426
bin/DMGTRIS.sym
File diff suppressed because it is too large
Load Diff
|
@ -184,6 +184,8 @@ DEF CLEVEL_BASE_Y EQU 133
|
|||
DEF NLEVEL_BASE_Y EQU 145
|
||||
DEF GRADE_BASE_X EQU 145
|
||||
DEF GRADE_BASE_Y EQU 20
|
||||
DEF TIME_BASE_X EQU 100
|
||||
DEF TIME_BASE_Y EQU 153
|
||||
DEF TELLS_BASE_X EQU 154
|
||||
DEF TELLS_BASE_Y EQU 61
|
||||
DEF TELLS_Y_DIST EQU 10
|
||||
|
@ -226,6 +228,7 @@ DEF TILE_CLEARING EQU 106
|
|||
DEF TILE_GHOST EQU 107
|
||||
DEF TILE_PIECE_SMALL_0 EQU 116
|
||||
DEF TILE_PIECE_BONE EQU 104
|
||||
DEF TILE_SMALL_0 EQU 213
|
||||
DEF GAME_OVER_R10 EQU 147
|
||||
DEF GAME_OVER_R12 EQU 167
|
||||
DEF GAME_OVER_R14 EQU 187
|
||||
|
|
|
@ -322,7 +322,7 @@ sBigGameplayTileMap::
|
|||
DB $01,$01,$01,$01,$01,$01,$01,$6F,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01
|
||||
DB $6D,$01,$01,$01,$01,$01,$01,$01,$01,$6F
|
||||
DB $6D,$01,$01,$D4,$01,$01,$DF,$01,$01,$6F
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00
|
||||
sBigGameplayTileMapEnd::
|
||||
|
|
|
@ -334,7 +334,7 @@ sGameplayTileMap::
|
|||
DB $01,$01,$01,$01,$01,$01,$01,$6F,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01
|
||||
DB $6D,$01,$01,$01,$01,$01,$01,$01,$01,$6F
|
||||
DB $6D,$01,$01,$D4,$01,$01,$DF,$01,$01,$6F
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00
|
||||
sGameplayTileMapEnd::
|
||||
|
|
|
@ -1472,8 +1472,8 @@ sGameplayTilesM::
|
|||
DB $42,$42,$42,$42,$EC,$EC,$00,$00
|
||||
DB $FE,$FE,$DB,$DB,$DB,$DB,$DB,$DB
|
||||
DB $DB,$DB,$DB,$DB,$DB,$DB,$00,$00
|
||||
DB $00,$00,$18,$18,$18,$18,$00,$00
|
||||
DB $00,$00,$18,$18,$18,$18,$00,$00
|
||||
DB $00,$00,$06,$06,$06,$06,$00,$00
|
||||
DB $00,$00,$06,$06,$06,$06,$00,$00
|
||||
DB $00,$00,$3C,$3C,$66,$66,$6E,$6E
|
||||
DB $76,$76,$66,$66,$3C,$3C,$00,$00
|
||||
DB $00,$00,$0C,$0C,$1C,$1C,$0C,$0C
|
||||
|
@ -1494,8 +1494,8 @@ sGameplayTilesM::
|
|||
DB $66,$66,$66,$66,$3C,$3C,$00,$00
|
||||
DB $00,$00,$1C,$1C,$36,$36,$36,$36
|
||||
DB $1E,$1E,$06,$06,$1C,$1C,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$60,$60,$60,$60,$00,$00
|
||||
DB $00,$00,$60,$60,$60,$60,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
|
@ -1891,8 +1891,8 @@ sGameplayTilesC::
|
|||
DB $42,$42,$42,$42,$EC,$EC,$00,$00
|
||||
DB $FE,$FE,$DB,$DB,$DB,$DB,$DB,$DB
|
||||
DB $DB,$DB,$DB,$DB,$DB,$DB,$00,$00
|
||||
DB $00,$00,$18,$18,$18,$18,$00,$00
|
||||
DB $00,$00,$18,$18,$18,$18,$00,$00
|
||||
DB $00,$00,$06,$06,$06,$06,$00,$00
|
||||
DB $00,$00,$06,$06,$06,$06,$00,$00
|
||||
DB $00,$00,$3C,$3C,$66,$66,$6E,$6E
|
||||
DB $76,$76,$66,$66,$3C,$3C,$00,$00
|
||||
DB $00,$00,$0C,$0C,$1C,$1C,$0C,$0C
|
||||
|
@ -1913,8 +1913,8 @@ sGameplayTilesC::
|
|||
DB $66,$66,$66,$66,$3C,$3C,$00,$00
|
||||
DB $00,$00,$1C,$1C,$36,$36,$36,$36
|
||||
DB $1E,$1E,$06,$06,$1C,$1C,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$60,$60,$60,$60,$00,$00
|
||||
DB $00,$00,$60,$60,$60,$60,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
DB $00,$00,$00,$00,$00,$00,$00,$00
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
155
src/sprites.asm
155
src/sprites.asm
|
@ -60,13 +60,14 @@ wSPRModeDrop:: ds 4
|
|||
wSPRModeHiG:: ds 4
|
||||
wSPRGrade1:: ds 4
|
||||
wSPRGrade2:: ds 4
|
||||
wUnused0:: ds 4
|
||||
wUnused1:: ds 4
|
||||
wUnused2:: ds 4
|
||||
wUnused3:: ds 4
|
||||
wUnused4:: ds 4
|
||||
wUnused5:: ds 4
|
||||
wSPRTimeM1:: ds 4
|
||||
wSPRTimeM2:: ds 4
|
||||
wSPRTimeS1:: ds 4
|
||||
wSPRTimeS2:: ds 4
|
||||
wSPRTimeCS1:: ds 4
|
||||
wSPRTimeCS2:: ds 4
|
||||
ENDU
|
||||
wScratch: ds 2
|
||||
|
||||
|
||||
SECTION "OAM DMA Code", ROM0
|
||||
|
@ -381,6 +382,146 @@ ApplyHold::
|
|||
ret
|
||||
|
||||
|
||||
; Draw the time.
|
||||
ApplyTime::
|
||||
; Set the Y position of the time objects.
|
||||
ld a, TIME_BASE_Y
|
||||
ld [wSPRTimeM1], a
|
||||
ld [wSPRTimeM2], a
|
||||
ld [wSPRTimeS1], a
|
||||
ld [wSPRTimeS2], a
|
||||
ld [wSPRTimeCS1], a
|
||||
ld [wSPRTimeCS2], a
|
||||
|
||||
; Set the X position of the time objects.
|
||||
ldh a, [rSCX]
|
||||
ld b, a
|
||||
ld a, TIME_BASE_X
|
||||
sub a, b
|
||||
ld [wSPRTimeM1+1], a
|
||||
add a, 8
|
||||
ld [wSPRTimeM2+1], a
|
||||
add a, 12
|
||||
ld [wSPRTimeS1+1], a
|
||||
add a, 8
|
||||
ld [wSPRTimeS2+1], a
|
||||
add a, 12
|
||||
ld [wSPRTimeCS1+1], a
|
||||
add a, 8
|
||||
ld [wSPRTimeCS2+1], a
|
||||
|
||||
; Set the palette of the time objects.
|
||||
ld a, OAMF_PAL0 | $07
|
||||
ld [wSPRTimeM1+3], a
|
||||
ld [wSPRTimeM2+3], a
|
||||
ld [wSPRTimeS1+3], a
|
||||
ld [wSPRTimeS2+3], a
|
||||
ld [wSPRTimeCS1+3], a
|
||||
ld [wSPRTimeCS2+3], a
|
||||
|
||||
; Minutes. Hex to BCD.
|
||||
ld a, [wMinutes]
|
||||
ld c, a
|
||||
ld b, 8
|
||||
xor a, a
|
||||
.loop0
|
||||
sla c
|
||||
adc a, a
|
||||
daa
|
||||
dec b
|
||||
jr nz, .loop0
|
||||
|
||||
; Save to scratch.
|
||||
ld b, a
|
||||
and a, $0F
|
||||
ld [wScratch+1], a
|
||||
ld a, b
|
||||
and a, $F0
|
||||
swap a
|
||||
ld [wScratch], a
|
||||
|
||||
; Apply to sprites.
|
||||
ld de, wScratch
|
||||
ld hl, wSPRTimeM1+2
|
||||
ld bc, 4
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
add hl, bc
|
||||
inc de
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
|
||||
; Seconds. Hex to BCD.
|
||||
ld a, [wSeconds]
|
||||
ld c, a
|
||||
ld b, 8
|
||||
xor a, a
|
||||
.loop1
|
||||
sla c
|
||||
adc a, a
|
||||
daa
|
||||
dec b
|
||||
jr nz, .loop1
|
||||
|
||||
; Save to scratch.
|
||||
ld b, a
|
||||
and a, $0F
|
||||
ld [wScratch+1], a
|
||||
ld a, b
|
||||
and a, $F0
|
||||
swap a
|
||||
ld [wScratch], a
|
||||
|
||||
; Apply to sprites.
|
||||
ld de, wScratch
|
||||
ld hl, wSPRTimeS1+2
|
||||
ld bc, 4
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
add hl, bc
|
||||
inc de
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
|
||||
; Centiseconds. Frames using LUT.
|
||||
ld a, [wFrames]
|
||||
ld c, a
|
||||
ld b, 0
|
||||
ld hl, sFramesToCS
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
|
||||
; Save to scratch.
|
||||
ld b, a
|
||||
and a, $0F
|
||||
ld [wScratch+1], a
|
||||
ld a, b
|
||||
and a, $F0
|
||||
swap a
|
||||
ld [wScratch], a
|
||||
|
||||
; Apply to sprites.
|
||||
ld de, wScratch
|
||||
ld hl, wSPRTimeCS1+2
|
||||
ld bc, 4
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
add hl, bc
|
||||
inc de
|
||||
ld a, [de]
|
||||
add a, TILE_SMALL_0
|
||||
ld [hl], a
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; Generic function to draw a BCD number (8 digits) as 8 sprites.
|
||||
|
@ -482,6 +623,7 @@ ApplyNumbers6::
|
|||
ld [hl], a
|
||||
ret
|
||||
|
||||
|
||||
; Generic function to draw a BCD number (4 digits) as 4 sprites.
|
||||
; Address of first sprite in hl.
|
||||
; Address of first digit in de.
|
||||
|
@ -712,6 +854,7 @@ SetNumberSpritePositions::
|
|||
ld [hl], a
|
||||
ret
|
||||
|
||||
|
||||
GradeRendering::
|
||||
; Set the Y position of the grade objects.
|
||||
ld a, GRADE_BASE_Y
|
||||
|
|
|
@ -172,6 +172,7 @@ GamePlayEventLoopHandlerB::
|
|||
|
||||
; Draw "READY" and wait a bit.
|
||||
.leadyMode
|
||||
call ResetGameTime
|
||||
ldh a, [hModeCounter]
|
||||
cp a, LEADY_TIME
|
||||
jr nz, .firstleadyiterskip
|
||||
|
@ -196,6 +197,7 @@ GamePlayEventLoopHandlerB::
|
|||
|
||||
; Draw "GO" and wait a bit.
|
||||
.goMode
|
||||
call ResetGameTime
|
||||
ldh a, [hModeCounter]
|
||||
dec a
|
||||
jr nz, .notdonego
|
||||
|
@ -626,6 +628,7 @@ GamePlayEventLoopHandlerB::
|
|||
|
||||
call SetNumberSpritePositions
|
||||
call ApplyTells
|
||||
call ApplyTime
|
||||
|
||||
jp GBCGameplayProcess
|
||||
|
||||
|
@ -806,6 +809,7 @@ GamePlayBigEventLoopHandlerB:
|
|||
|
||||
; Draw "READY" and wait a bit.
|
||||
.leadyMode
|
||||
call ResetGameTime
|
||||
ldh a, [hModeCounter]
|
||||
cp a, LEADY_TIME
|
||||
jr nz, .firstleadyiterskip
|
||||
|
@ -830,6 +834,7 @@ GamePlayBigEventLoopHandlerB:
|
|||
|
||||
; Draw "GO" and wait a bit.
|
||||
.goMode
|
||||
call ResetGameTime
|
||||
ldh a, [hModeCounter]
|
||||
dec a
|
||||
jr nz, .notdonego
|
||||
|
@ -1255,6 +1260,7 @@ GamePlayBigEventLoopHandlerB:
|
|||
|
||||
call SetNumberSpritePositions
|
||||
call ApplyTells
|
||||
call ApplyTime
|
||||
|
||||
jp GBCBigGameplayProcess
|
||||
|
||||
|
|
25
src/time.asm
25
src/time.asm
|
@ -33,6 +33,20 @@ wSeconds:: ds 1
|
|||
wFrames:: ds 1
|
||||
|
||||
|
||||
SECTION "Time Data", ROM0
|
||||
sFramesToCS::
|
||||
db $00, $02, $03, $05, $07, $10
|
||||
db $12, $13, $15, $17, $18, $20
|
||||
db $22, $23, $25, $27, $28, $30
|
||||
db $32, $33, $35, $37, $38, $40
|
||||
db $42, $43, $45, $47, $48, $50
|
||||
db $52, $53, $55, $57, $58, $60
|
||||
db $62, $63, $65, $67, $68, $70
|
||||
db $72, $73, $75, $77, $78, $80
|
||||
db $82, $83, $85, $87, $88, $90
|
||||
db $92, $93, $95, $97, $98, $00
|
||||
|
||||
|
||||
SECTION "Time Functions", ROM0
|
||||
; Zeroes all timers and gets the free-running timer ticking.
|
||||
TimeInit::
|
||||
|
@ -106,6 +120,17 @@ HandleTimers::
|
|||
cp a, MODE_PRE_GAME_OVER
|
||||
ret z
|
||||
|
||||
ld a, [wMinutes]
|
||||
cp a, 99
|
||||
jr nz, .go
|
||||
ld a, [wSeconds]
|
||||
cp a, 59
|
||||
jr nz, .go
|
||||
ld a, [wFrames]
|
||||
cp a, 59
|
||||
ret z
|
||||
|
||||
.go
|
||||
ld a, [wFrames]
|
||||
inc a
|
||||
ld [wFrames], a
|
||||
|
|
Loading…
Reference in New Issue