th0mk/nfsu2-web
About th0mk/nfsu2-web
th0mk/nfsu2-web is an open-source project on GitHub, mainly written in C. It currently holds 406 stars and 87 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
Git Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
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
f9dd86c054878ce6276beb07c1fd61874f7a1e4bf1f241b084c65b73e24168a7.
- To build: an Apple Silicon Mac (the tested setup) or Linux, Python 3, Node.js 20 or newer, Rust
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
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
web/gen.sh "/path/to/Need for Speed Underground 2/SPEED2.EXE" # translate the game's code to C (into gen/)
web/build.sh # compile it to out/web/nfsu2.wasm
The generated C and the compiled module are made from the game, so they are never committed (.gitignore).
Play
web/start.sh --data "/path/to/Need for Speed Underground 2"
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. The game plays in any of its thirteen languages, in Brazilian Portuguese, in Polish or in Turkish; the dubbed voices and movies and the Portuguese, Polish and Turkish text come from mods, as language packs (docs/web/VPS.md). The menus and HUD can be redrawn at four times their size, from a mod as a texture pack (docs/web/VPS.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 ofSPEED2.EXEinto C.runtime/: Windows, Direct3D 9, DirectSound and DirectInput, reimplemented.runtime/web/holds the browser
web/src/: the page. It runs the game's threads as workers on one shared memory, draws with WebGPU and plays
web/server-rs/: the server, in Rust: serves the page, the module and your game folder, and connects players
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.
The language packs are built from KyoriAsh's Multi 13 languages mod (with Lee-Ryo's
Thai support, whose patch runtime/language.c follows), from TraduMix's and MixMods' Brazilian Portuguese
translation (Fyro, Beater, Kerlyston F.; Junior_Djjr, SideWinder, Elyzandro), from PLProjekt's Polish translation
(Daniel Graszka, MaDeR, Marcin Piech, Nati, Mateusz Wilkowski, alter), from VileStuff's
English Subtitles Fixed and from muntazam's
Turkish translation. The texture pack is built from LunicAura106's
Upscaled HUD. 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.