Files
rabbitc64/over.asm
T
2026-07-15 21:31:51 +02:00

113 lines
2.1 KiB
NASM

; -----------------------------------------------------------
; over.asm - game over box over the frozen playfield: final
; score + blinking retry prompt, fire restarts the round
; -----------------------------------------------------------
BOXROW = 10 ; box: rows 10-14, columns 12-27
BOXCOL = 12
BOXW = 16
over_init:
lda en_sh ; the scooter may be mid-blink: show it
ora #1
sta SPR_EN
; box interior + frame, drawn over the frozen road
ldx #0
oi_row:
txa
clc
adc #BOXROW
tay
lda mul40lo,y
clc
adc #BOXCOL
sta scrlo
lda mul40hi,y
adc #>SCREEN
sta scrhi
ldy #BOXW-1
oi_col:
jsr box_char
sta (scrlo),y
dey
bpl oi_col
inx
cpx #5
bne oi_row
+prtext BOXROW+1, 15, BLACK, txt_over, 9
+prtext BOXROW+2, 15, BLACK, txt_score, 5
; final score digits next to the label
lda sc_d0
ora #48
sta SCREEN+(BOXROW+2)*40+21
lda sc_d1
ora #48
sta SCREEN+(BOXROW+2)*40+22
lda sc_d2
ora #48
sta SCREEN+(BOXROW+2)*40+23
+setupd over_update
rts
; pick the frame/fill character for box row X, column Y (keeps Y)
box_char:
cpx #0
beq bc_top
cpx #4
beq bc_bottom
cpy #0
beq bc_side
cpy #BOXW-1
beq bc_side
lda #$20 ; interior: erase the road behind the box
rts
bc_side:
lda #$5d ; vertical bar
rts
bc_top:
cpy #0
beq bc_tl
cpy #BOXW-1
beq bc_tr
lda #$40 ; horizontal bar
rts
bc_tl:
lda #$55 ; rounded corners
rts
bc_tr:
lda #$49
rts
bc_bottom:
cpy #0
beq bc_bl
cpy #BOXW-1
beq bc_br
lda #$40
rts
bc_bl:
lda #$4a
rts
bc_br:
lda #$4b
rts
over_update:
; blink the retry prompt
lda framectr
and #32
bne ou_hide
+prtext BOXROW+3, 14, BLACK, txt_retry, 12
jmp ou_start
ou_hide:
+prtext BOXROW+3, 14, BLACK, txt_blank, 12
ou_start:
jsr start_edge
beq ou_done
jmp play_init ; its rts returns to the main loop
ou_done:
rts