tree moving
This commit is contained in:
+33
-6
@@ -82,18 +82,19 @@ road_row:
|
|||||||
adc #6 ; road runs from char row 6 to row 24
|
adc #6 ; road runs from char row 6 to row 24
|
||||||
tax
|
tax
|
||||||
jsr row_ptr
|
jsr row_ptr
|
||||||
lda #19 ; left edge: one column left per row
|
ldx drtmp ; use perspective curve for the edge offset
|
||||||
|
lda #19
|
||||||
sec
|
sec
|
||||||
sbc drtmp
|
sbc road_off,x
|
||||||
tay
|
tay
|
||||||
sty drleft
|
sty drleft
|
||||||
lda #$4e ; '/' diagonal
|
lda #$4e ; '/' diagonal
|
||||||
sta (scrlo),y
|
sta (scrlo),y
|
||||||
lda #COL_EDGE
|
lda #COL_EDGE
|
||||||
sta (collo),y
|
sta (collo),y
|
||||||
lda #20 ; right edge: one column right per row
|
lda #20
|
||||||
clc
|
clc
|
||||||
adc drtmp
|
adc road_off,x
|
||||||
tay
|
tay
|
||||||
lda #$4d ; '\' diagonal
|
lda #$4d ; '\' diagonal
|
||||||
sta (scrlo),y
|
sta (scrlo),y
|
||||||
@@ -158,6 +159,33 @@ draw_tree:
|
|||||||
sta (collo),y
|
sta (collo),y
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; ---- erase one tree (write spaces at trow/tcol positions) ----
|
||||||
|
erase_tree:
|
||||||
|
ldx trow
|
||||||
|
dex
|
||||||
|
jsr row_ptr
|
||||||
|
ldy tcol
|
||||||
|
iny
|
||||||
|
lda #$20
|
||||||
|
sta (scrlo),y
|
||||||
|
ldx trow
|
||||||
|
jsr row_ptr
|
||||||
|
ldy tcol
|
||||||
|
lda #$20
|
||||||
|
sta (scrlo),y
|
||||||
|
iny
|
||||||
|
sta (scrlo),y
|
||||||
|
iny
|
||||||
|
sta (scrlo),y
|
||||||
|
ldx trow
|
||||||
|
inx
|
||||||
|
jsr row_ptr
|
||||||
|
ldy tcol
|
||||||
|
iny
|
||||||
|
lda #$20
|
||||||
|
sta (scrlo),y
|
||||||
|
rts
|
||||||
|
|
||||||
tree_ball:
|
tree_ball:
|
||||||
lda #$51 ; foliage ball
|
lda #$51 ; foliage ball
|
||||||
sta (scrlo),y
|
sta (scrlo),y
|
||||||
@@ -165,11 +193,10 @@ tree_ball:
|
|||||||
sta (collo),y
|
sta (collo),y
|
||||||
rts
|
rts
|
||||||
|
|
||||||
NTREES = 6
|
|
||||||
tree_tbl: ; middle row, left column - far trees sit
|
tree_tbl: ; middle row, left column - far trees sit
|
||||||
!byte 9, 4 ; higher and closer to the road
|
!byte 9, 4 ; higher and closer to the road
|
||||||
!byte 14, 6
|
!byte 14, 6
|
||||||
!byte 19, 3
|
!byte 18, 2
|
||||||
!byte 8, 31
|
!byte 8, 31
|
||||||
!byte 12, 34
|
!byte 12, 34
|
||||||
!byte 17, 36
|
!byte 17, 36
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ T_BIG = 112 ; rabbit distance where the big frames start
|
|||||||
T_EXP = 192 ; ... and where the sprite gets double-sized
|
T_EXP = 192 ; ... and where the sprite gets double-sized
|
||||||
REP_HOLD = 12 ; frames before a held direction auto-repeats
|
REP_HOLD = 12 ; frames before a held direction auto-repeats
|
||||||
REP_PERIOD = 6 ; frames between auto-repeat steps
|
REP_PERIOD = 6 ; frames between auto-repeat steps
|
||||||
|
TREE_SPEED = 3 ; frames between tree scroll steps
|
||||||
|
NTREES = 6 ; roadside trees per side-pair
|
||||||
RAS_SYNC = 251 ; raster line polled for the frame sync
|
RAS_SYNC = 251 ; raster line polled for the frame sync
|
||||||
RAS_SPLIT = 97 ; horizon line: sky/grass background split
|
RAS_SPLIT = 97 ; horizon line: sky/grass background split
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,20 @@ play_init:
|
|||||||
jsr clear_screen
|
jsr clear_screen
|
||||||
jsr draw_road
|
jsr draw_road
|
||||||
|
|
||||||
|
; Copy static tree positions into dynamic arrays
|
||||||
|
ldx #0
|
||||||
|
ldy #0
|
||||||
|
pti_loop:
|
||||||
|
lda tree_tbl,y
|
||||||
|
sta t_row,x
|
||||||
|
iny
|
||||||
|
lda tree_tbl,y
|
||||||
|
sta t_col,x
|
||||||
|
iny
|
||||||
|
inx
|
||||||
|
cpx #NTREES
|
||||||
|
bne pti_loop
|
||||||
|
|
||||||
; HUD: score on the left, miss slots on the right
|
; HUD: score on the left, miss slots on the right
|
||||||
+prtext 0, 1, BLACK, txt_score, 5
|
+prtext 0, 1, BLACK, txt_score, 5
|
||||||
+prtext 0, 30, BLACK, txt_miss, 4
|
+prtext 0, 30, BLACK, txt_miss, 4
|
||||||
@@ -25,6 +39,7 @@ play_init:
|
|||||||
sta miss
|
sta miss
|
||||||
sta flash
|
sta flash
|
||||||
sta spawnt
|
sta spawnt
|
||||||
|
sta tree_timer
|
||||||
sta lcnt
|
sta lcnt
|
||||||
sta rcnt
|
sta rcnt
|
||||||
sta p2lcnt
|
sta p2lcnt
|
||||||
@@ -236,6 +251,7 @@ pu_rnext:
|
|||||||
bpl pu_rab
|
bpl pu_rab
|
||||||
|
|
||||||
jsr write_shadows
|
jsr write_shadows
|
||||||
|
jsr animate_trees
|
||||||
|
|
||||||
; -- third miss ends the round --
|
; -- third miss ends the round --
|
||||||
lda miss
|
lda miss
|
||||||
@@ -315,6 +331,96 @@ sr_ramp:
|
|||||||
sta r_sphi,x
|
sta r_sphi,x
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
; ---- animate roadside trees: scroll down + fan outward ----
|
||||||
|
animate_trees:
|
||||||
|
inc tree_timer
|
||||||
|
lda tree_timer
|
||||||
|
cmp #TREE_SPEED
|
||||||
|
bcs at_go
|
||||||
|
rts
|
||||||
|
at_go:
|
||||||
|
lda #0
|
||||||
|
sta tree_timer
|
||||||
|
|
||||||
|
; Phase 1: erase all trees at current positions
|
||||||
|
ldx #NTREES-1
|
||||||
|
at_erase:
|
||||||
|
stx at_idx
|
||||||
|
lda t_row,x
|
||||||
|
sta trow
|
||||||
|
lda t_col,x
|
||||||
|
sta tcol
|
||||||
|
jsr erase_tree
|
||||||
|
ldx at_idx
|
||||||
|
dex
|
||||||
|
bpl at_erase
|
||||||
|
|
||||||
|
; Phase 2: update all positions
|
||||||
|
ldx #NTREES-1
|
||||||
|
at_move:
|
||||||
|
inc t_row,x
|
||||||
|
lda t_col,x
|
||||||
|
cmp #20
|
||||||
|
bcs at_mright
|
||||||
|
; left side: move one column left
|
||||||
|
lda t_col,x
|
||||||
|
beq at_mresp
|
||||||
|
dec t_col,x
|
||||||
|
jmp at_mcheck
|
||||||
|
at_mright:
|
||||||
|
; right side: move one column right
|
||||||
|
lda t_col,x
|
||||||
|
cmp #37
|
||||||
|
bcs at_mresp
|
||||||
|
inc t_col,x
|
||||||
|
at_mcheck:
|
||||||
|
lda t_row,x
|
||||||
|
cmp #23
|
||||||
|
bcc at_mnext
|
||||||
|
at_mresp:
|
||||||
|
; respawn near the horizon
|
||||||
|
lda t_col,x
|
||||||
|
cmp #20
|
||||||
|
bcs at_mrespr
|
||||||
|
; left side: random col 10-13
|
||||||
|
jsr rand8
|
||||||
|
and #3
|
||||||
|
clc
|
||||||
|
adc #10
|
||||||
|
sta t_col,x
|
||||||
|
jmp at_mresprow
|
||||||
|
at_mrespr:
|
||||||
|
; right side: random col 24-27
|
||||||
|
jsr rand8
|
||||||
|
and #3
|
||||||
|
clc
|
||||||
|
adc #24
|
||||||
|
sta t_col,x
|
||||||
|
at_mresprow:
|
||||||
|
jsr rand8
|
||||||
|
and #1
|
||||||
|
clc
|
||||||
|
adc #7
|
||||||
|
sta t_row,x
|
||||||
|
at_mnext:
|
||||||
|
dex
|
||||||
|
bpl at_move
|
||||||
|
|
||||||
|
; Phase 3: redraw all trees at new positions
|
||||||
|
ldx #NTREES-1
|
||||||
|
at_draw:
|
||||||
|
stx at_idx
|
||||||
|
lda t_row,x
|
||||||
|
sta trow
|
||||||
|
lda t_col,x
|
||||||
|
sta tcol
|
||||||
|
jsr draw_tree
|
||||||
|
ldx at_idx
|
||||||
|
dex
|
||||||
|
bpl at_draw
|
||||||
|
at_done:
|
||||||
|
rts
|
||||||
|
|
||||||
; ---- score: bump the decimal digits and the difficulty byte ----
|
; ---- score: bump the decimal digits and the difficulty byte ----
|
||||||
add_score:
|
add_score:
|
||||||
lda score8
|
lda score8
|
||||||
@@ -379,6 +485,12 @@ rcnt: !byte 0
|
|||||||
p2lcnt: !byte 0 ; the same for player 2's steering
|
p2lcnt: !byte 0 ; the same for player 2's steering
|
||||||
p2rcnt: !byte 0
|
p2rcnt: !byte 0
|
||||||
|
|
||||||
|
; ---- dynamic tree state ----
|
||||||
|
t_row: !fill NTREES, 0 ; current row of each tree
|
||||||
|
t_col: !fill NTREES, 0 ; current column of each tree
|
||||||
|
tree_timer: !byte 0 ; frames since last tree scroll
|
||||||
|
at_idx: !byte 0 ; animate_trees loop index
|
||||||
|
|
||||||
; ---- rabbit slots (hardware sprites 1-7) ----
|
; ---- rabbit slots (hardware sprites 1-7) ----
|
||||||
r_act: !fill NRABBITS, 0
|
r_act: !fill NRABBITS, 0
|
||||||
r_lane: !fill NRABBITS, 0
|
r_lane: !fill NRABBITS, 0
|
||||||
|
|||||||
@@ -45,3 +45,9 @@ sprxreg:
|
|||||||
; rabbit slot -> sprite enable/MSB/expand bit
|
; rabbit slot -> sprite enable/MSB/expand bit
|
||||||
sprbit:
|
sprbit:
|
||||||
!byte 2, 4, 8, 16, 32, 64, 128
|
!byte 2, 4, 8, 16, 32, 64, 128
|
||||||
|
|
||||||
|
; road edge offset per row (0-18): perspective curve
|
||||||
|
; wider at the horizon (offset 2) so it looks like a real road,
|
||||||
|
; not a sharp pyramid; only delta 0/1 steps, no visible jumps
|
||||||
|
road_off:
|
||||||
|
!byte 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18
|
||||||
|
|||||||
Reference in New Issue
Block a user