Files
rabbitc64/README.md
T
2026-07-15 23:17:11 +02:00

72 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Rabbit Scooter — C64
A Commodore 64 port of [rabbitroller](../rabbitroller), the Game & Watch
style LCD mini game, written in 6502 assembly (built with the ACME
assembler, using the same toolchain and layout as [c64-demo](../c64-demo)).
Rabbits hop toward you on a five-lane road. Steer your scooter left and
right to dodge them: a rabbit that reaches your lane is a **miss**, one
that passes in any other lane is a **point**. Three misses end the round.
The spawn rate and the rabbits' speed ramp up with your score, just like
in the original.
In **multiplayer** the rabbits still spawn on their own, but player 2
steers the closest one left and right, trying to run the scooter down.
## Controls
| Input | Action |
|-------|--------|
| Menu: joystick up/down, or the `S` / `M` / `C` keys | pick single player / multiplayer / credits |
| Menu: fire (or `SPACE`); the `1` / `2` keys pick and start at once | open the picked line |
| P1: joystick port 2 left/right, or `A` / `D` | move the scooter (auto-repeats while held) |
| P2: joystick port 1 left/right, or `J` / `L` | steer the closest rabbit (multiplayer) |
| Fire (or `SPACE`) | start; on the game over screen: back to the menu |
## How it works
- PAL frame loop synced by polling the raster beam (no interrupts), one
state update per frame — intro, menu, play and game over are `updvec`
states. Boot shows the giant TTG / Teletype Games logo with the gold
color wash from the c64-demo; the menu and the game over screens are
full-screen cards on black — big block-letter titles, *fire = start
game* on the menu, the final score and *fire = retry* after a loss.
- The background is raster-split at the horizon: sky above, grass below.
The road is a grey wedge of inverse-space characters between painted
white edge lines, with trees along both shoulders.
- The player is hardware sprite 0; up to seven rabbits live on sprites
17. Rabbits follow the road's perspective: a linear y ramp and a t²
horizontal fan-out, both precomputed into tables at assembly time
(`tables.asm`). Far rabbits use small sprite frames, near ones switch
to big frames and finally to double-sized expanded sprites.
- Random lanes and speeds come from an 8-bit LFSR stirred with the
free-running CIA timer.
- Sprite art sits below `$1000` so the VIC never sees the character ROM
shadow instead of it.
## Files
| File | Contents |
|------|----------|
| `main.asm` | BASIC stub, init, frame loop, state dispatch |
| `defs.asm` | registers, constants, zero page, macros |
| `intro.asm` | boot screen: giant TTG logo with the gold wash |
| `title.asm` | full-screen menu: big logo, mode picker, hopping rabbits |
| `credits.asm` | demo-style credits: pixel scroller, gold wash, rainbow crew, sprite parade + AI warning |
| `play.asm` | gameplay: input, spawning, scoring, HUD |
| `over.asm` | full-screen game over: big title, score, retry |
| `common.asm` | shared routines: printing, road, input, RNG, rabbit positioning |
| `tables.asm` | assembly-time perspective and speed tables |
| `sprites.asm` | sprite art (scooter, 4+4 rabbit frames) |
## Build & run
```
make deps # macOS: brew install acme vice
make build # -> rabbit.prg
make run # build + launch in VICE (x64sc)
```
The same targets are available as VS Code tasks. A test build that boots
straight into gameplay: `acme -DAUTOPLAY=1 -f cbm -o test.prg main.asm`.