https://github.com/fataldecomp/roller
Reverse engineering the 1995 game Whiplash/Fatal Racing
https://github.com/fataldecomp/roller
gremlin-interactive msdos-game restoration reverse-engineering windows
Last synced: 10 days ago
JSON representation
Reverse engineering the 1995 game Whiplash/Fatal Racing
- Host: GitHub
- URL: https://github.com/fataldecomp/roller
- Owner: FatalDecomp
- License: gpl-3.0
- Created: 2024-11-04T23:08:57.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2026-06-08T05:24:28.000Z (14 days ago)
- Last Synced: 2026-06-08T06:23:45.131Z (14 days ago)
- Topics: gremlin-interactive, msdos-game, restoration, reverse-engineering, windows
- Language: C
- Homepage:
- Size: 37.5 MB
- Stars: 62
- Watchers: 5
- Forks: 17
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# ROLLER
[![CI][ci-shd]][ci-url]
[![LC][lc-shd]][lc-url]
[![Download][dl-shd]][dl-url]

This project aims to implement all the functionality of the 1995 game Whiplash/Fatal Racing in a way that builds and runs on modern PCs. Where necessary, DOS-specific functions are substituted with SDL and Windows/Unix equivalents. For instruction-matching decomp, see https://github.com/FatalDecomp/ROLLER-matching
[](https://www.youtube.com/watch?v=JvoiQTRjt88)
## Installation
Assets from a retail copy of the game are required to run. Download the latest version of ROLLER from the [releases](https://github.com/FatalDecomp/ROLLER/releases) page and extract wherever you want. On the initial launch you will be prompted to select a CD image (CUE/BIN or ISO) to extract the assets from. Press the ` key to access additional settings and the debug log.
## About
Debug symbol dump generated with wdump, part of: https://github.com/open-watcom/open-watcom-v2
Useful tool in generating nice asm output with symbols from wdump applied: https://github.com/fonic/wcdatool
Directions on how to use wcdatool and get remote debugging working with open watcom: https://www.youtube.com/watch?v=bG9tEZOSrQg
Note: wdump symbol offsets do not account for DOS4GW.EXE. Load FATAL.EXE_split_dos4g_payload.exe (FATAL.EXE with DOS4GW.EXE split off, generated by wcdatool) into Ida/Ghidra to have matching symbol offsets.
Hashes of executables used for decomp:
FATAL.EXE
* `md5: 812EEE1404ECDFD87FF765281DF89720`
* `SHA256: 7789768C0A6CDC213EAF7B1AD8CC125531EB3FE7C213ECCAC6188E58F428687E`
FATAL.EXE_split_dos4g_payload.exe
* `md5: 05C2B0730641663133D76DD2CA552B4C`
* `SHA256: A4AD4131DBBFF9884DA4687D8B579B81117E6D23525950D942DF2DF585E2A11E`
## External Dependencies Used:
* SDL3.2.14: https://github.com/libsdl-org/SDL
* SDL_Image3.2.4: https://github.com/libsdl-org/SDL_image
* WildMIDI 0.4.6: https://github.com/Mindwerks/wildmidi
* libcdio-2.3.0: https://github.com/libcdio/libcdio
* Nuklear 4.13.2: https://github.com/Immediate-Mode-UI/Nuklear
## Build
Video instructions: https://www.youtube.com/watch?v=QEDGhvvZ9XU
### Clone the repository
```bash
git clone https://github.com/zizin13/roller.git
cd roller
```
### Install prerequisites
- [Zig 0.15.2](https://ziglang.org/download/)
The easiest way to install is to use [mise](https://mise.jdx.dev/):
```bash
mise install
```
### Build and run the project
Using default settings
```bash
zig build run
```
A custom data folder
```bash
zig build -Dassets-path=/path/to/fatdata run
```
## Testing
### Rendering snapshot tests
```bash
git lfs install # one-time, the baselines are LFS-tracked
zig build test-snapshots
```
Captures the indexed framebuffer of every intro replay at hand-picked
ticks and runs `git diff` against the checked-in baselines. Any pixel
change shows up as a tracked-file diff that GitHub renders as a
side-by-side image diff in PRs.
On a non-canonical host (anything other than the pinned reference
machine) use `-Dscratch` to capture into `zig-out/snapshot-scratch/`
without touching the LFS-tracked baselines.
See [`tests/snapshots/README.md`](tests/snapshots/README.md) for the
full developer workflow (blessing intentional pixel changes,
troubleshooting, etc.) and
[`docs/adr/0001-rendering-snapshot-tests.md`](docs/adr/0001-rendering-snapshot-tests.md)
for the policy decisions.
[ci-shd]: https://img.shields.io/github/actions/workflow/status/FatalDecomp/ROLLER/ci.yml?branch=master&style=for-the-badge&logo=github&label=CI&labelColor=black
[ci-url]: https://github.com/FatalDecomp/ROLLER/blob/master/.github/workflows/ci.yml
[lc-shd]: https://img.shields.io/github/license/FatalDecomp/ROLLER.svg?style=for-the-badge&labelColor=black
[lc-url]: https://github.com/FatalDecomp/ROLLER/blob/master/LICENSE.md
[dl-shd]: https://img.shields.io/github/v/release/FatalDecomp/ROLLER?include_prereleases&style=for-the-badge&logo=github&label=Download&labelColor=black&color=blue
[dl-url]: https://github.com/FatalDecomp/ROLLER/releases/latest