road-sdl2-rash

road-sdl2-rash is a native PC port and web edition of Road Rash (1996) that runs at 60 FPS with gamepad support.

README

road-sdl2-rash: Road Rash (1996 PC) Native Port & Web Edition

Verified developer on RecompStore Ko-fi Platform License GitHub Pages

road-sdl2-rash is a modern, native 64-bit port and WebAssembly release of the classic 1996 PC title Road Rash, translated directly from original x86 machine code into portable C over an SDL2 platform layer.

Runs natively at full speed on Windows 10/11, Linux, Steam Deck, and in Modern Web Browsers (WebAssembly + WebGL).

A 1.5-Year Milestone: I've been working on reverse engineering, lifting, and rebuilding this project for the last 1.5 years, and it is now finally ready for release! Thanks to LLMs.

Note

Source Code Release: The complete decompiled C source code (~97,000 lines of structured, typed, human-readable C with modding hooks and tools) is undergoing final code cleanup and will be open-sourced soon!


Screenshots

Startup Welcome Screen (Plus Mode) F10 Settings & QoL Overlay

Startup Welcome Screen (Plus Edition) • Newly Added F1 Settings & QoL Menu Overlay

In-Race High-Res 60 FPS Gameplay Live Pack Racing Action

High-Res 1280×960 In-Race Gameplay • Live Pack Racing & Rival Jostling Action

Retro Main Menu In-Race F10 Settings Menu

Classic 1996 Main Menu Screen • Mid-Race Real-Time Settings Adjustment


Key Features

  • 100% Native 64-bit Execution: No DOSBox, emulators, or Wine needed. Compiles and executes directly on modern operating systems.
  • Modernized Platform Layer: Replaces DirectDraw, DirectSound, WinMM MIDI, and the Windows 95 registry with SDL2 and TinySoundFont.
  • Deterministic & Frame-Accurate: Verified against the original 1996 game across 14 deterministic race replay scenarios (verifying exact physics, sound, and palette behavior).
  • Full Gamepad Support: Native analog steering, trigger throttle/brake, and attacks for Xbox, PlayStation, and Steam Deck controllers.
  • Built-in Options Menu (F1): Toggle fullscreen, CRT filters, resolution, audio volumes, and controller bindings on the fly (press F1 or Shift+F10).
  • In-Race Music (optional): Turn on In-race music in the F1 options and the soundtrack plays on through the races, in place of their MIDI music. Off by default, so the races sound as they did in 1996.
  • Classic In-Race HUD Toggle (F10): Authentic 1996 F10 cycling between full dashboard speedometer, minimal overlay, and clean view.
  • High-Fidelity Audio: Replaces legacy MIDI with TinySoundFont, playing both authentic Sound Blaster AWE32 instrument banks and GeneralUser GS SoundFonts.
  • Play in Your Browser: Drop your game data into the web page to play directly inside Chrome, Firefox, Safari, or Edge with local browser caching.

Original vs Road Rash Plus

FeatureVanilla Edition (1996 Authentic)Road Rash Plus Edition (Enhanced)
Internal Resolution640×480 software rasterizer1280×960 High-Resolution software rasterizer
Screen Shape4:3, pillarboxed on wide screens4:3, or the optional 16:9 wide race view (F1 options): more road on each side
Frame Pacing & VSyncOriginal unpaced timing (original)Rock-solid 60 FPS presentation (smooth locked, 0 judder)
Typography & HUDClassic Prince of Persia retro arcade fontClassic Prince of Persia retro arcade font
In-Game Options (F1)Original fixed settingsDynamic CRT shaders, audio mixing, controller rebinds
Modding SupportStandard data filesHot-reloadable port/userdata/mods.ini configuration
Audio EngineLegacy DirectSound emulationTinySoundFont high-definition SoundFont playback

Startup Welcome Screen

On startup across all platforms (Windows, Linux, Steam Deck, Web), road-sdl2-rash greets the player with an interactive welcome screen styled with the classic retro font:

+--------------------------------------------------------------------+
|                           ROAD-SDL2-RASH                           |
|            Decomp & Recomp with SDL2 by speedydevil007             |
|                                                                    |
|                    [ ROAD RASH PLUS EDITION ]                      |
|                                                                    |
|  Enhanced 1280x960 High-Res graphics with 60 FPS pacing.           |
|  Press F1 for options & QoL | Mod with port/userdata/mods.ini     |
|                                                                    |
|  GAME MODES:                                                       |
|  * Thrash     : Pure arcade racing across 5 scenic tracks.         |
|  * Big Game   : Career mode with cash, bike shops, and cops.       |
|  * Mano a Mano: Head-to-head 2-player split/duel action.           |
|                                                                    |
|  HOW TO PLAY (CONTROLS):                                           |
|  Accelerate  : UP Arrow       / Gamepad RT / Button A              |
|  Brake       : DOWN Arrow     / Gamepad LT / Button B              |
|  Steer       : LEFT / RIGHT   / Gamepad Left Stick / D-Pad         |
|  Combat      : SPACE / CTRL   / Gamepad X / Y (Punch/Kick/Club)    |
|  Pause/Menu  : ENTER          / Gamepad Start                      |
|  Fullscreen  : F11 / ALT+ENTER | Options: F1 | HUD: F10            |
|                                                                    |
|                >>> Press ENTER or SPACE to Race <<<                |
|                  [TAB: Switch Vanilla / Plus Mode]                 |
+--------------------------------------------------------------------+
  • Press TAB on the welcome screen at any time to switch between Vanilla and Plus mode.
  • Press ENTER or SPACE (or Gamepad Start / A) to dismiss and start racing!

Editions & Platforms

1. Standard (Vanilla 1996) Mode
  • 100% bit-exact physics and mechanics identical to the 1996 Windows 95 CD release.
  • Original 640×480 software rendering.
  • Original rival AI pacing, grudge counters, and aggression tables.
2. Road Rash "Plus" (Enhanced Mode)
  • 1280×960 High-Resolution Mode: Native double-resolution software rasterizer (hires.c).
  • 16:9 Wide Race View (optional): Added to Road Rash Plus upon popular demand. Turn on Wide race view in the F1 options and the race fills a 16:9 screen: the road, terrain and scenery continue on both sides of the classic view, the dashboard stays in the middle. The game draws the wider view itself (terrain, buildings, trees, traffic), and the race plays exactly the same. Off by default; not available in Vanilla mode.
  • Rock-Solid 60 FPS Presentation: Integrated frame scheduler eliminates background OS thread stutters (frame_profile.c).
  • Road Rash Plus Preset (mods-plus.ini):
    • Aerodynamic Tuning: 30% reduction in air drag for higher, more thrilling top speed on straightaways.
    • Dynamic Rival Feuds: Increased rival aggression and lasting grudges for intense mid-race brawls.
    • Sharper Starter Bike: Improved brake responsiveness on the Corsair Swallow.
    • Better Offroad Recovery: Enhanced shoulder traction when forced off the asphalt.

Platform Downloads

PlatformLocationExecutable / TargetDetails
Windowswindows/RoadRashPort.exeNative 64-bit executable for Windows 10 & 11.
Linux & Steam Decklinux/roadrash.shPortable glibc 2.17+ 64-bit binary with embedded SDL2.
Web Browserweb/index.htmlClient-side WebAssembly port with drag-and-drop file loader.

Compatibility & System Requirements

PlatformRuns onNeedsTested so far
WindowsWindows 10 or 11, 64-bitNothing to install (SDL2.dll ships next to the exe)Scripted races without a window match the reference result on Windows 11
Windows 7 / 8.1Likely, 64-bit onlyMicrosoft's Universal C Runtime update (KB2999226)Not tested
LinuxAny 64-bit (x86-64) distribution from 2012 on: glibc 2.17 or newer (Ubuntu 14.04+, Debian 8+, CentOS 7+, Fedora, Arch, Mint, SteamOS, …)Nothing to install: SDL2 is built into the program. Uses X11 or Wayland, and PulseAudio (PipeWire included) or ALSA, whichever the system hasScripted races without a window match the reference result on Ubuntu 22.04; a race started through roadrash.sh on Ubuntu 14.04, also without a window
Steam DeckSteamOS 3 (Desktop or Gaming Mode)Nothing to installNot yet run on a Deck
WebA current desktop browser with WebAssemblyA web server (serve.py or any static host) and index.data (about 77 MB, downloaded before the game starts)A scripted race in Chrome without a window

Not supported: macOS, ARM computers (Raspberry Pi, ARM Chromebooks, Apple Silicon) and 32-bit systems have no native program. The web version is the way to play on those, but it has not been tested there.

Not tested yet: playing with a window and sound on Windows or a Linux desktop, the Steam Deck, and Edge, Firefox and Safari. Reports are welcome.

Disk space: the program folder (38 MB on Windows, 54 MB on Linux, 7 MB for the web) plus the original game's files (about 43 MB; for the web, index.data is about 77 MB). No minimum CPU or GPU has been measured; the game runs at its original 640×480 (1280×960 in high resolution) through SDL2.

Requirements and test status as of 2026-10-28.


Getting Started ("Bring Your Own Game")

To respect copyright laws and preservation standards, no proprietary game assets are hosted in this repository. You provide the assets from your original 1996 PC copy of Road Rash (CD-ROM or ISO).

Required Game Files

From your original game disc or installation, copy the following items:

ROADRASH.EXE
AUDIO/
DATA/
IMAGES/
TEXT/
Installation & Launch
1. Windows (10 / 11)
  1. Download or clone this repository, and open the windows/ folder.
  2. Copy the required game files (ROADRASH.EXE, AUDIO, DATA, IMAGES, TEXT) directly into windows/ alongside RoadRashPort.exe.
  3. Double-click RoadRashPort.exe. (If Windows Defender SmartScreen appears, click "More info" → "Run anyway".)
2. Linux & Steam Deck
  1. Open the linux/ folder.
  2. Copy the required game files into linux/ alongside roadrash.sh.
  3. Make the launcher executable and run:
    chmod +x roadrash.sh roadrash-port
    ./roadrash.sh
    
    • Steam Deck Users: Add roadrash.sh as a "Non-Steam Game" in Desktop Mode. Return to Gaming Mode — controller input works out of the box!
3. Web Browser
  1. If testing locally:
    python3 web/serve.py 8765
    
    Then open http://localhost:8765/ in your browser.
  2. If playing on a hosted web deployment (e.g. GitHub Pages):
    • Open the web page link.
    • Drag & Drop your index.data file onto the browser window (or click to browse).
    • The page will read the file, optionally cache it in your browser's IndexedDB for instant zero-download loading on future visits, and start the race immediately!
    • (To generate index.data from your original files, run python3 web/pack_game_files.py <folder-with-gamefiles>).

Controls

Keyboard
KeyAction
Up ArrowAccelerate
Down ArrowBrake
Left / Right ArrowSteer Left / Right
Space / Ctrl / AltAttack (Punch, Kick, Club swing)
NNitro (nitro bikes)
EnterConfirm / Menu Select / Pause
EscBack / Cancel. In a race: holds the race and asks; Esc again quits, any other key continues
PausePause a race
F1 / Shift+F10 / `Open In-Game Options & QoL Menu
F10Toggle HUD Mode (Classic Dashboard / Minimal)
F11 / Alt + EnterToggle Fullscreen / Windowed
F12Instant Quit
Gamepad (Xbox / Steam Deck / PlayStation)
ControlIn-Race ActionMenu / UI Action
Left Analog Stick / D-PadAnalog SteeringMenu Navigation
Right Trigger / Button AAccelerate (A also fires the nitro on nitro bikes)Confirm / Select
Left TriggerBrake—
Button B / Right ShoulderAttack Right (Kick / Club)Back / Cancel
Button X / Button Y / Left ShoulderAttack Left (Punch / Club)—
StartPauseConfirm / Select
Back / SelectNext music trackBack / Cancel

Modding & Customization (mods.ini)

Both the desktop and web builds include an integrated real-time modding engine.

  • Default State: A pre-configured port/userdata/mods.ini is provided with all options commented out with # so first-time players experience the authentic 1996 gameplay balance.
  • How to Customize: Open port/userdata/mods.ini in any text editor, remove the # before the line you want, and save:
# --- Example Tweaks ---
# Make rival AI fight each other frequently
rival_feud_percent = 200

# Increase top speed by lowering air resistance
physics_air_drag_percent = 70

# Make starter bike brakes sharper
bike.swallow.brakes = -150
  • To Enable Road Rash Plus: Copy or rename port/userdata/mods-plus.ini.example to port/userdata/mods.ini.
  • See MODS.md for full documentation of every bike ID, traffic multiplier, and AI combat variable.

Coming Soon: Readable C Decompiled Source

The complete source code that powers this native port will be released in an upcoming repository update:

  • ~97,000 Lines of Structured C: 59 modular subsystem files covering bike physics, rival AI algorithms, course generation, software projection rasterizer, and audio synthesis.
  • Readable & Modder-Friendly: Structured loops (for, while), folded conditional expressions (&&, ||), 1,748 named functions, and 194 named record types.
  • Custom Hooking System: Write your own C hooks around any game function without modifying original disassembly.

Support the Project

If you enjoy playing this modern port or appreciate the 1.5 years of reverse engineering and binary lifting work that went into reviving Road Rash (1996 PC), consider buying me a coffee!

Support on Ko-fi

Your support directly funds ongoing retro game preservation, source code cleanup, additional platform testing, and future feature developments.


Cryptographic Release Verification

Official release assets, git commits, and tags are cryptographically signed by speedydevil007 using GPG to guarantee authenticity and integrity.

  • Signer: speedydevil007 <349187409+speedydevil007@users.noreply.github.com>
  • GPG Key ID: 7FA03C6926F817D3
  • Key Fingerprint: CBE3 BDA4 A213 BFD1 56B9 2042 7FA0 3C69 26F8 17D3
  • Public Key: Included in repository as RELEASE_KEY.pub
Verifying Release Assets
# 1. Import speedydevil007's public key
gpg --import RELEASE_KEY.pub

# 2. Verify the cryptographic signature on the checksum manifest
gpg --verify SHA256SUMS.asc SHA256SUMS

# 3. Verify file hashes
sha256sum --check SHA256SUMS

Special Thanks & Community Credits

A big thank you to the awesome community members helping test, debug, and refine road-sdl2-rash:

  • @sergiofrias — For diagnosing the initial scrambled gamepad mappings, sharing disassembly and hex analysis, and testing virtual key codes (Issue #1).
  • @adrianflk — For flagging the classic F10 HUD toggle conflict, identifying the "Configure Input" joystick-left locking bug, and reporting display pillarbox margin artifacts (Issue #2).

Licenses & Legal

  • Road Rash is a registered trademark of Electronic Arts Inc.
  • This project is a non-commercial reverse engineering and recompilation project created strictly for preservation, education, and platform interoperability.
  • No proprietary art, sound, video, courses, or executable binaries belonging to Electronic Arts are hosted or distributed in this repository.
  • Open-source components: