Convert the game data into editable assets

assets/ now holds every track as a 16-colour indexed PNG (its palette is
the track palette) plus a text file of lap gates and height map, and
every vehicle as a PNG sprite sheet plus a text file with its name and
handling (moved out of the code). The build embeds assets/ instead of
unpacking the ADFs, so the disks are no longer needed to build either.

skids extract converts original disks to assets and checks each file
reads back identically; benchmark results from the assets match the
disks exactly. Assets win over disk data with the same name, and
--data assets picks up edits without a rebuild. assets/README.md
describes how to edit everything.
This commit is contained in:
2026-10-19 19:38:08 +00:00
parent ea6948db31
commit 15ba71587c
80 changed files with 3721 additions and 288 deletions
+93
View File
@@ -0,0 +1,93 @@
# Game assets
Everything the game uses is stored here as editable files. The build embeds
this folder into the executable. To pick up changes:
- **Rebuild:** `cargo run --release`.
- **Or skip the rebuild:** run with `--data assets`. Files given with
`--data` override the built-in copy.
These files were converted from the original Amiga disks with
`skids extract --data <folder with the ADFs>`. That conversion is lossless,
and running it again overwrites your edits.
## Tracks: `tracks/<name>/`
### `track.png`
The track picture: 1024 × 512, a 16-colour indexed (palette) image.
- **Palette:** the PNG's palette is the track's palette. Change a palette
entry to recolour every pixel that uses it.
- **Road vs scenery:** colours 8–15 are road (full grip, full speed).
Colours 0–7 are scenery (less grip, slower).
- **Painting a new route:** paint it with the upper eight colours and
update the gates to match.
- **Saving:** keep the image indexed if your editor allows it. If it saves
as full-colour RGB instead, each pixel is matched to the nearest default
colour, which loses your palette.
### `track.txt`
Plain text; lines starting with `#` are comments.
- **`gate x1 y1 x2 y2`:** lap gates in race order.
- Gate 0 is the start/finish line, and the grid forms up behind it.
- Cars must cross every gate, in order, to complete a lap. Computer
drivers steer from one gate to the next.
- Coordinates are on the isometric ground plane. To find where a point
sits in the picture:
`picture x = wx - wy + 512`, `picture y = (wx + wy) × 31/64 − 252`.
- `skids trace --data assets --track N --out t.png` draws the gates
(gate 0 in yellow) and the computer cars' paths over the picture.
- **`height`:** 64 rows of 64 numbers giving ground height × 256. Each
number covers a 16 × 8 pixel cell of the picture. Slopes push cars
downhill and tilt the car sprites.
- **`start`, `flags`:** values from the original data that the game
doesn't use.
To add a track, make a new folder with both files. Tracks are listed in
name order.
## Vehicles: `vehicles/<id>.png` and `<id>.txt`
### `<id>.png`
A 2048 × 800 sprite sheet: 32 headings across by 25 tilts down, each cell
64 × 32.
- **Colours:** use only palette indices 0–3:
- 0 transparent
- 1 tyres / shadow
- 2 trim
- 3 bodywork
The colours in the file are only a preview; each player's car is
recoloured at run time.
- **Headings:** column 12 faces right, and columns advance clockwise in
11.25° steps.
- **Tilts:** row = roll × 5 + pitch (each 0–4), so row 12 is the car on
flat ground.
### `<id>.txt`
The display name and handling:
| Setting | Meaning |
|-----------|---------|
| `top` | top speed on tarmac |
| `accel` | acceleration |
| `brake` | braking |
| `grip` | sideways grip; higher means less sliding |
| `turn` | steering rate |
| `mass` | weight in collisions |
| `offroad` | speed and grip multiplier on scenery |
To add a car, add a new `<id>.png` / `<id>.txt` pair.
## Palettes: `palettes/*.pal` (optional)
16 lines of `RRGGBB`. Each file overrides the PNG palettes:
- `track1-3.pal`: one track
- `track1.pal`: every TRACK1 track
- `default.pal`: all tracks