# Skids: a Super Skidmarks revival A cross-platform (Windows, macOS, Linux) engine written in Rust that plays *Super Skidmarks* (Acid Software, 1995) on the original Amiga data. The game's data was converted from the six original ADF disk images into editable files in [`assets/`](assets/README.md). The images themselves aren't kept in this repository. - **Each track:** a 16-colour PNG (the PNG's palette is the track's palette), plus a text file with the lap gates and height map. - **Each car:** a PNG sprite sheet and menu picture, plus a text file with its name, driver and handling. - **Sounds:** WAV files. - **Music:** the tune, as an OctaMED module. - **Pictures:** the title picture and a few other images, as PNGs. Edit them with any image editor or text editor. The build embeds the `assets/` folder, so the finished program is a single self-contained file. The engine can still read the original disks directly: ADF images, the LHA archives on them, and their CrunchMania-packed files. `skids extract --data ` regenerates `assets/` from them. Because the binary and `assets/` carry the original game data, anyone you give either to also gets the game data. ## What works - All 24 tracks across the four track files, in their original palettes. Each has its isometric height map and lap gates, and walls along the road edges, curved the way the original curves them. - All 9 cars (Mini, Beetle, Porsche, Formula 1, Midget, Truck, Police, Cow, Camaro) with their drivers' names, each with 32 headings and 25 body-tilt frames for hills. - The original handling: each car drives with the values from its `.set` file, decoded from the executable, with separate profiles for human and computer drivers. The menu's **Handling** option also offers the original's six presets (Classic, Grunty, Zippy, Rippy, Slippery and Pedal Car). - The caravan: turn on **Caravans** in the menu and every car tows one. - The original sound effects, and the original tune played by a built-in OctaMED player. The menu has a **Music** option: menus, always, or off. - The original title picture. - 1 or 2 players (split screen) plus up to 7 computer drivers. - Power-slides, jumps, hills that slow you going up and speed you up coming down, car-to-car bumping, and skid marks burnt into the track. - Lap and position tracking, lap times, and a results table. - Engine note pitched with revs, tyre screech, crashes, backfires, a horn and start beeps, all from the original samples. ## What's from the original, and what isn't The game logic is a compiled Blitz Basic 2 program on disk 1. These parts were decoded from its machine code and work the same way here: - the car physics: engine, grip, steering, gravity and jumps, and hills - the meaning of every `.set` value, and the handling presets - the walls along the road edges - how the world is projected onto the screen, including height The rest is new code written to feel like the original: - how computer drivers choose their line (they steer and drive as the original's do) - car-to-car collisions - lap counting and the rescue of stuck cars [docs/FORMATS.md](docs/FORMATS.md) covers everything reverse engineered so far. ## Running ```sh cargo run --release ``` The built executable (`target/release/skids`, or `skids.exe` on Windows) runs on its own from anywhere. `--data DIR` adds to or overrides the built-in data. `DIR` can be an assets folder, which lets you try edits without rebuilding: `skids --data assets`. It can also be the original ADF images or LHA archives. Without `--data`, a folder like that in the current directory or next to the executable is picked up automatically. When a track or car exists both as an asset and on disk, the asset wins. | Action | Player 1 | Player 2 | |-------------|---------------------------------------|----------| | Accelerate | ↑ (or W in one-player games) | W | | Brake / reverse | ↓ (or S) | S | | Steer | ← → (or A D) | A D | | Horn | Right Shift | Left Shift | | Pause | P | | | Leave race | Esc | | Options: `--scale 1|2|4` (window size), `--mute`. ### Tools ```sh skids info --data DIR # list tracks and vehicles found skids extract --data ADFS [--out assets] # convert original disks into editable assets skids bench --data DIR --seconds 120 # race CPU cars on every track: laps and time on road skids trace --data DIR --track 11 --out t.png # plot walls, gates and CPU racing lines skids render --data DIR --track 3 --out shot.png # headless screenshot skids music --out tune.wav --seconds 60 # render the tune to WAV skids unpack disk.adf --out files/ # extract a disk or LHA archive as-is ``` ## Building You need a stable Rust toolchain. - **Linux:** install the ALSA and X11 development packages, e.g. `sudo apt install libasound2-dev libx11-dev libxkbcommon-dev`. To build without sound (no ALSA needed), use `cargo build --release --no-default-features --features embed`. - **macOS / Windows:** `cargo build --release` works as is. The build embeds `assets/`. To use a different folder, set `SKIDS_ASSETS_DIR=/path/to/assets`. To build without embedding, so the game needs `--data` at run time, use `--no-default-features --features audio`. The ADF images aren't needed to build. GitHub Actions builds all three platforms on every push (`.github/workflows/build.yml`). ## Layout ``` assets/ the game data as editable PNG and text files build.rs embeds assets/ into the executable src/formats/ ADF (OFS/FFS), LHA (incl. -lh5-), CrunchMania, IFF 8SVX/ILBM, OctaMED src/data/ track, vehicle and palette decoding; locating the game files src/game/ physics, AI and race rules src/render/ software renderer at 320×256 (PAL low-res) and a bitmap font src/audio.rs sample mixer and sound effects (cpal) src/music.rs OctaMED player src/app.rs menus, race screens and results ``` ## Credits *Super Skidmarks* is by Acid Software. This project is an unofficial revival for preservation. The CrunchMania bitstream layout follows Teemu Suutari's [ancient](https://github.com/temisu/ancient) (BSD-2-Clause).