Skip to content
PORTSNATIVE.
HomeCatalog
Web GamesEmulatorsToolsNews
PORTSNATIVE.

A catalog for discovering ports and related projects. We link to official sources and do not host original game files.

ExploreCatalogMy list
InformationAbout usSuggest a portSupportDonationsLegal notice
© 2026 PortsNative
Back to catalog
Carmageddon (dethrace-ported-to-web)
PORTSNATIVE

Carmageddon (dethrace-ported-to-web)

NATIVE PORTACTION / ADVENTUREWINDOWSALPHA

Carmageddon (dethrace-ported-to-web)

Carmageddon

TechnologyNative C/C++ port (engine reimplementation)

Available forWindows

View official project

About the project

Carmageddon es un videojuego de combate en vehículos creado en 1997 que destacó por incluir una proporción importante de violencia en su modo de juego. El juego tiene como misión principal acabar la carrera o destrozar los coches de los contrarios, no obstante la matanza de peatones es un aliciente. En su época sufrió duras críticas que irónicamente lo llevaron a los primeros puestos de ventas. El juego fue producido por Stainless Software y publicado por Interplay y Sales Curve Interactive (SCi).

3 versions of Carmageddon

You're viewing: Carmageddon (dethrace-ported-to-web)

Carmageddon (dethrace-ported-to-web)github.com/Carter54git/dethrace-ported-to-web
Windows
Current
Android Port (mgrz18)github.com/mgrz18/dethrace-android
Android
›
Carmageddon (Dethrace)github.com/dethrace-labs/dethrace
Windows
Linux
macOS
›

Official project information

Author's original READMEOpen on GitHub ↗

Carmageddon — Web Port

Play Carmageddon (1997) in your browser. This project compiles the open-source Dethrace engine to WebAssembly with WebGL 2 rendering and Web Audio sound.

Play live demo in browser →

Carmageddon running in the browser


Features

  • Full single-player Carmageddon experience in a modern browser
  • OpenGL renderer via Emscripten + BRender
  • Menu, races, opponents, pedestrians, power-ups, replays
  • Save games stored in the browser (IndexedDB via Emscripten IDBFS)
  • Keyboard + mouse controls
  • No install — static hosting only (HTML + WASM + preloaded data)

How it works

┌─────────────────────────────────────────────────────────────┐
│  Browser                                                    │
│  ┌──────────────┐   ┌─────────────┐   ┌──────────────────┐  │
│  │ index.html   │──▶│ carmaweb.js │──▶│ carmaweb.wasm    │  │
│  │ + pre.js     │   │ (Emscripten │   │ (Dethrace engine │  │
│  └──────────────┘   │  glue)      │   │  + BRender GL)   │  │
│                     └─────────────┘   └────────┬─────────┘  │
│  ┌──────────────┐   WebGL 2 canvas ◀───────────┘            │
│  │ carmaweb.data│   (game files preloaded to /carma)         │
│  └──────────────┘                                           │
│  ┌──────────────┐   /persistent → IDBFS (save games)        │
│  │ IndexedDB    │                                           │
│  └──────────────┘                                           │
└─────────────────────────────────────────────────────────────┘
  1. Build — Dethrace 0.10.1 is cross-compiled with Emscripten to carmaweb.wasm + carmaweb.js.
  2. Game data — Retail DATA/ (and related files) are embedded at link time as carmaweb.data (~190 MB) and mounted at /carma in the virtual filesystem.
  3. Rendering — BRender’s OpenGL backend draws to an HTML5 canvas. Frame pacing uses Asyncify only during in-race presentation to avoid WebGL flicker; the menu swaps without extra yields.
  4. Audio — miniaudio drives Web Audio (ScriptProcessor). A user click/key press is required once to unlock AudioContext (browser policy).
  5. Saves — Only /persistent uses IDBFS; game data is read-only from the preload pack.

Web-specific patches (summary)

AreaApproach
Race renderingSingle emscripten_sleep per frame in SDL2_Harness_Swap only while racing
Menu / UINo Asyncify between frames — stable menus, no flicker
Menu audioSoundService() during interface loop; input waits yield with emscripten_sleep(0)
ESC → pause menuWaitForNoKeys() yields so key-up events are processed
PIX duplicates (web)Material colour-map refresh for duplicate pixelmaps

Quick start (play locally)

You need a legal copy of Carmageddon on disk (not included here).

Requirements

  • Emscripten SDK 3.1+
  • CMake 3.20+, Ninja
  • Python 3 (for local server)
  • ~2 GB free disk space for build + data pack

1. Add game data

carmagit/
  Carma/          ← your install root (name matters for default CMake path)
    DATA/
    MUSIC/
    ...

The build expects Carma/DATA/GENERAL.TXT to exist.

2. Build

Windows (PowerShell):

.\scripts\build-emscripten.ps1

Linux / macOS:

source ~/emsdk/emsdk_env.sh
chmod +x scripts/build-emscripten.sh
./scripts/build-emscripten.sh

This produces web/carmaweb.js, web/carmaweb.wasm, and web/carmaweb.data.

3. Run

python web/serve.py

Open http://localhost:8080 — hard-refresh with Ctrl+Shift+R after rebuilds.

Click the page or press a key once if audio is silent.


Deploying to static hosting

Upload the contents of web/ after a successful build:

FilePurpose
index.htmlPage shell
pre.jsWebGL + IDBFS + audio unlock hooks
carmaweb.jsEmscripten loader
carmaweb.wasmGame engine
carmaweb.dataPreloaded game assets

Configure your host to serve large files (200 MB+) and correct MIME types (application/wasm for .wasm).

Note: Do not commit carmaweb.data or retail game files to a public GitHub repo unless you have explicit rights. Use Git LFS or host binaries separately (as on the live demo).


Controls (default keyboard)

ActionKey
Accelerate↑
Brake / reverse↓
Steer← / →
HandbrakeSpace
CameraC
RepairBackspace
Pause / menu (in race)Esc
HornH

Mouse works in menus. In-race camera look uses WASD (patched in pre.js / input layer).


Project layout

carmagit/
├── README.md              ← you are here
├── NOTICE.md              ← game asset copyright
├── .gitignore
├── docs/
│   └── screenshot.png
├── dethrace-0.10.1/       ← engine source (Dethrace + web patches)
├── web/
│   ├── index.html         ← browser entry point
│   ├── pre.js             ← Emscripten pre-load hooks
│   └── serve.py           ← dev server (no cache)
├── scripts/
│   ├── build-emscripten.ps1
│   └── build-emscripten.sh
└── cmake/
    └── Emscripten.cmake

Browser support

Tested on recent Chrome, Edge, and Firefox.

  • WebGL 2 required
  • WebAssembly required
  • ~200 MB download on first load (game data pack)
  • Recommended: desktop, hardware keyboard

Credits & license

ComponentLicense / source
DethraceGPL-3.0 — see dethrace-0.10.1/LICENSE
BRender, miniaudio, stb, etc.See respective files under dethrace-0.10.1/lib/
Carmageddon game dataNot included — commercial / rights-holder property

This web port is a community technical project. It is not affiliated with or endorsed by Stainless Games or current rights holders.


Contributing

PRs welcome for web-specific fixes. Please do not submit copyrighted game assets.

When changing Emscripten link flags or the main loop timing, test both in-race driving (no jitter) and menu navigation (no flicker, no audio dropouts).

Read official guide
CALIFICACIÓN
—
Loading votes…
Advertisement

PROJECT FILE

Project type
NATIVE PORT
Genre
Action / Adventure
Status
alpha
Original platform
—
Technology
Native C/C++ port (engine reimplementation)
Version
—
Updated
—

Target platforms 1

Windows
View on GitHub
Advertisement