th0mk / nfsu2-web
git clone https://github.com/th0mk/nfsu2-web.git
—
+42
stars, 24h · #221
+42
stars, 7 days · #1,050
+42
stars, 30 days · #6,970
42
★ total · +42% this week
3
forks · 0 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageC
License—
Created2026-10-19 (1d ago)
Last pushtoday
Watchers1
OwnerUser
Links
- GitHub: github.com/th0mk/nfsu2-web
- Homepage: https://nfsu2.xyz/
- Releases · Issues · Hacker News mentions
README excerpt
# Need for Speed: Underground 2 in the browser A fan project that runs the PC game *Need for Speed: Underground 2* (2004) in Google Chrome and Firefox. The game's x86 code is translated to C ahead of time and compiled to WebAssembly. Direct3D 9 runs on WebGPU and the sound on Web Audio. You bring your own copy of the game. > Not affiliated with or endorsed by Electronic Arts. This repository contains none of the game's code or data. ## What you need - **The game:** your own PC copy, patched to v1.2 (North America), with this exact `SPEED2.EXE` (other versions will not work): 4,800,512 bytes, SHA-256 `f9dd86c054878ce6276beb07c1fd61874f7a1e4bf1f241b084c65b73e24168a7`. - **To build:** an Apple Silicon Mac (the tested setup) or Linux, Python 3, Node.js 20 or newer, and wasi-sdk 34 for that system unpacked into `deps/`. On Windows, build in WSL 2 with the clone in the Linux file system (`~/nfsu2-web`): under `/mnt/c` it builds much slower. - **To play:** the latest Google Chrome, or Firefox where it has WebGPU (Windows, macOS). ## Build [code] The generated C and the compiled module are made from the game, so they are never committed (`.gitignore`). ## Play [code] Open **http://localhost:8080/** in Chrome or Firefox and press **Play**. The start page has the settings, your saves and the controls. The player's guide is docs/web/PLAYING.md. To play with friends, run the server behind HTTPS, for example on a small VPS with Docker: docs/web/VPS.md. Everyone who plays from the same server can meet in free roam. ## How it works - **`tools/`:** a Python lifter (Capstone) turns every function of `SPEED2.EXE` into C. - **`runtime/`:** Windows, Direct3D 9, DirectSound and DirectInput, reimplemented. `runtime/web/` holds the browser parts. - **`web/src/`:** the page. It runs the game's threads as workers on one shared memory, draws with WebGPU and plays sound through an AudioWorklet. - **`web/server/`:** serves the page, the module and your game folder, and connects players for multiplayer. More in docs/web/DESIGN.md. The same tree still builds the native macOS version (`./gen.sh`, `./build.sh && ./link.sh`, `./run.sh`). ## Credits Based on Talha Müderrisoğlu's static recompilation of NFSU2 for Apple Silicon, which in turn follows the method of N64: Recompiled and XenonRecomp. Built with the help of Claude Code. ## License MIT (LICENSE). *Need for Speed* and *Need for Speed: Underground 2* are trademarks of Electronic Arts Inc.