From df991b0e09987c1a982f282a224e57f4e51d9dd6 Mon Sep 17 00:00:00 2001 From: Zsolt Tasnadi Date: Thu, 16 Jul 2026 15:37:38 +0200 Subject: [PATCH] new scooter sprite --- defs.asm | 4 +++- main.asm | 11 +++++++++-- play.asm | 7 +++---- sprites.asm | 51 +++++++++++++++++++++++++++++---------------------- tables.asm | 7 ++++--- 5 files changed, 48 insertions(+), 32 deletions(-) diff --git a/defs.asm b/defs.asm index e70dcf9..7e88f97 100644 --- a/defs.asm +++ b/defs.asm @@ -23,6 +23,8 @@ SPR_YEX = $d017 ; vertical expand SPR_PRIO = $d01b ; 1 = sprite behind the characters SPR_MC = $d01c ; multicolor enable SPR_XEX = $d01d ; horizontal expand +SPR_MC1 = $d025 ; shared multicolor 1 (bit pair %01) +SPR_MC2 = $d026 ; shared multicolor 2 (bit pair %11) SPR_COL = $d027 ; sprite 0 color, +1 = sprite 1, ... @@ -91,7 +93,7 @@ LANES = 5 NRABBITS = 7 ; rabbit slots, hardware sprites 1-7 MAX_MISS = 3 ROAD_CX = 184 ; road center in sprite x coordinates -PLAYER_SY = 200 ; scooter sprite top (feet on raster line 221) +PLAYER_SY = 179 ; double-sized scooter top (feet stay on line 221) T_BIG = 112 ; rabbit distance where the big frames start T_EXP = 192 ; ... and where the sprite gets double-sized REP_HOLD = 12 ; frames before a held direction auto-repeats diff --git a/main.asm b/main.asm index 0d9c027..fa9f854 100644 --- a/main.asm +++ b/main.asm @@ -43,7 +43,9 @@ start: lda #COL_SKY sta BG - ; sprites: red scooter, white rabbits, hires, in front + ; sprites: red scooter, white rabbits, in front; the + ; scooter is multicolor (white rider, dark grey chrome), + ; the rabbits stay hires silhouettes lda #RED sta SPR_COL ldx #7 @@ -52,9 +54,14 @@ sprcol: sta SPR_COL,x dex bne sprcol + lda #%00000001 + sta SPR_MC + lda #WHITE + sta SPR_MC1 + lda #DGREY + sta SPR_MC2 lda #0 sta SPR_EN - sta SPR_MC sta SPR_PRIO sta SPR_MSBX sta SPR_XEX diff --git a/play.asm b/play.asm index a4ee0e4..1533a21 100644 --- a/play.asm +++ b/play.asm @@ -68,14 +68,14 @@ pi_col: lda #RED sta SPR_COL - ; player sprite: scooter, fixed row, rabbits come per frame + ; player sprite: scooter, fixed row, double-sized; + ; rabbits come per frame lda #SPRP_SCOOT sta SPRPTR lda #PLAYER_SY sta SPRPOS+1 lda #1 sta SPR_EN - lda #0 sta SPR_XEX sta SPR_YEX @@ -183,10 +183,9 @@ pu_nop2: sta SPRPOS ; sprite 0 x lda pxhi,x sta msb_sh ; lane 4 sits past x=255 - lda #0 + lda #1 ; the scooter rides double-sized sta xex_sh sta yex_sh - lda #1 sta en_sh ; -- a hit blinks the scooter for a dozen frames -- diff --git a/sprites.asm b/sprites.asm index 2895cf2..0a2ac43 100644 --- a/sprites.asm +++ b/sprites.asm @@ -1,7 +1,8 @@ ; ----------------------------------------------------------- -; sprites.asm - hires sprite art, black silhouettes in the -; spirit of the original PNGs; one !be24 row per sprite line -; (`.` = transparent, `#` = pixel), 64-byte aligned +; sprites.asm - sprite art, one !be24 row per sprite line, +; 64-byte aligned; the rabbits are hires silhouettes +; (`.` = transparent, `#` = pixel), the scooter is multicolor +; (2-bit pixel pairs, legend at the art) ; ----------------------------------------------------------- !align 63, 0 @@ -11,29 +12,35 @@ SPRP_SCOOT = spr_data DIV 64 ; sprite pointer of the scooter SPRP_SMALL = SPRP_SCOOT + 1 ; 4 far rabbit frames SPRP_BIG = SPRP_SCOOT + 5 ; 4 near rabbit frames -; ---- rabbit on a scooter, seen from behind ---- +; ---- rabbit on a scooter, seen from behind; multicolor, so +; each row is 12 double-wide pixels as 2-bit pairs: +; .. transparent .# white fur (SPR_MC1) +; #. red scooter + jersey (sprite color) +; ## dark grey chrome: bar, fork, wheel (SPR_MC2) +; layout: ears / head / arms to the bar / hands + jersey / +; legs / deck / fork / rear wheel ---- spr_scooter: - !be24 %.........##..##......... - !be24 %.........##..##......... - !be24 %.........##..##......... - !be24 %.........##..##......... + !be24 %.......#.#.....#.#...... + !be24 %.......#.#.....#.#...... + !be24 %.......#.#.....#.#...... + !be24 %.........#.#.#.#........ + !be24 %.........#.#.#.#........ + !be24 %.........#.#.#.#........ + !be24 %...#.#...#.#.#.#...#.#.. + !be24 %######################## + !be24 %.#.#....#.#.#.#......#.# + !be24 %........#.#.#.#......... + !be24 %........#.#.#.#......... + !be24 %........#.#.#.#......... + !be24 %.........#.....#........ + !be24 %.........#.....#........ + !be24 %.........#.....#........ + !be24 %..#.#.#.#.#.#.#.#.#.#... + !be24 %..#.#.#.#.#.#.#.#.#.#... + !be24 %..........####.......... !be24 %........########........ !be24 %........########........ !be24 %........########........ - !be24 %..........####.......... - !be24 %....################.... - !be24 %....##..########..##.... - !be24 %........########........ - !be24 %........########........ - !be24 %.......##########....... - !be24 %.......##########....... - !be24 %.......##########....... - !be24 %.....##############..... - !be24 %.....##############..... - !be24 %..........####.......... - !be24 %..........####.......... - !be24 %..........####.......... - !be24 %..........####.......... !byte 0 ; ---- far rabbit, four hop frames: it faces the player, so diff --git a/tables.asm b/tables.asm index ac35348..12fbbfc 100644 --- a/tables.asm +++ b/tables.asm @@ -31,10 +31,11 @@ sptab_hi: !byte >(i*13) } -; scooter sprite x per lane (lane center - 12); lane 4 crosses -; the 8-bit boundary, pxhi is its MSB flag +; scooter sprite x per lane (lane center - 24: the scooter is +; double-sized, 48 wide); lane 4 crosses the 8-bit boundary, +; pxhi is its MSB flag pxlo: - !byte 66, 119, 172, 225, 22 + !byte 54, 107, 160, 213, 10 pxhi: !byte 0, 0, 0, 0, 1