Underground 2 Revived
Play Need for Speed: Underground 2 (2004) in Chrome and Firefox with WebGPU graphics, Web Audio, up to 120 fps widescreen, controller support, free roam and Online races with friends. Fan project, not
Native / WASM port of Super Smash Bros. Melee
Translation pending
GamesRust · PythonGitHub @nikhilunniOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A Rust port of Super Smash Bros. Melee (NTSC-U 1.02), written function by
function from the doldecomp/melee
decompilation and checked against the original game running in Dolphin. A
match is meant to produce the same bits as the console, tick for tick.
• a headless, deterministic simulator with a small API (crates/melee-lib)
for AI and game research: create a match, step it with controller inputs,
inspect or clone its state;
• a playable app on macOS and in the browser (WebGPU), with menus, a HUD and
replays.
This repository contains no game data. You need your own copy of the game.Read the full README ↗A Rust port of Super Smash Bros. Melee (NTSC-U 1.02), written function by function from the doldecomp/melee decompilation and checked against the original game running in Dolphin. A match is meant to produce the same bits as the console, tick for tick.
It is two things:
crates/melee-lib)
for AI and game research: create a match, step it with controller inputs,
inspect or clone its state;This repository contains no game data. You need your own copy of the game.
Play in the browser: https://nikhilunni.github.io/melee/ (Chrome, Edge or Safari with WebGPU). Drop in your disc image; it is read locally and never uploaded.
unimplemented!) rather than diverging silently.TRACKER.md has the current state in detail.
The simulator runs the game logic only (no rendering or audio), so it is much faster than emulating the console. Measured on an Apple M2 Max (8 performance and 4 efficiency cores), release build, random controller inputs over full matches:
| Match | µs per tick | ticks/s, one core | × real time (60 fps) |
|---|---|---|---|
| Samus vs Link, Yoshi's Story | 49 | 20,500 | 342× |
| Fox vs Marth, Final Destination | 53 | 18,700 | 312× |
| Fox vs Marth, Battlefield | 54 | 18,500 | 309× |
| Fox vs Marth, Pokémon Stadium | 57 | 17,400 | 291× |
| Zelda vs Pikachu, Fountain of Dreams | 69 | 14,400 | 240× |
| Ice Climbers vs Peach, Pokémon Stadium | 81 | 12,400 | 206× |
Independent matches scale across cores: 12 Fox vs Marth matches on 12 threads run 140,000 ticks/s together, about 2,300× real time.
Against Dolphin on the same machine (headless, Null video, no audio, unlimited speed, the same Fox vs Marth match from a savestate), the simulator is about 25× faster per core:
| Battlefield | Pokémon Stadium | |
|---|---|---|
| Dolphin | 750 fps (12.5×) | 660 fps (11×) |
| This simulator | 18,500 ticks/s (309×) | 17,400 ticks/s (291×) |
Sizes and costs:
| Minimal headless simulator binary, stripped | 4.4 MB (1.9 MB gzipped) |
| Simulator compiled to WebAssembly (2026-10-04) | 4.0 MB (1.2 MB gzipped) |
| Browser app, renderer included (2026-10-04) | 5.0 MB (1.6 MB gzipped) |
| Disc files read for one match | 16–21 MB of the 1.4 GB image |
| Memory per match (Fox vs Marth, FD) | 22.5 MB, plus 21 MB of loaded data shared by every match |
| Create a match | 2.0–3.5 ms |
| Clone a match | 2.3–3.6 ms |
| Reset a match | 2.2–4.2 ms |
Cloning costs about as much as 45 ticks; plan tree search around that. Most
of a match's memory is ready-made effect models (64 per model, as the
game's effect pools allow), and a match with Kirby holds more of them, since
copying an ability can load any character's effects. The numbers were taken
on 2026-10-19 with other applications running and vary by a few percent. To
reproduce: cargo run --release -p melee-lib --example sim_bench -- throughput <disc files dir> (also parallel and lifecycle), and
--example match_memory <disc files dir> for memory.
GALE01, revision 2), as an uncompressed .iso or .gcm
dumped from a disc you own. Other versions and compressed formats (RVZ,
CISO, NKit) are rejected with a message saying what was found.
docs/ISO.md lists the checksums to verify your dump against.git submodule update --init # the decompilation, used as reference
tools/run-macos.sh # build and launch the macOS app
tools/run-web.sh # build the web app and serve it on :8080
cargo run --release -p melee-lib --example headless # the simulator alone
The apps ask for the disc image on first launch and read everything they need from it at runtime: character models, stages, portraits, menu art.
Scenarios (scripted inputs, recorded human matches, random-input
"explorer" matches, Slippi replays) are played on the original game in a
headless build of Dolphin with a scripting fork, which records the game's
memory every tick. The port plays the same inputs and the two traces are
compared field by field, floats by bit pattern. Floating-point code follows
the original PowerPC instruction sequence, including fused multiply-adds,
through crates/gekko-math. docs/ORACLE.md describes the setup and
AGENTS.md the working rules.
| Path | |
|---|---|
crates/gekko-math | PowerPC float semantics, the game's math library |
crates/hsd-* | HAL's engine: archives, scene graph, animation, particles |
crates/melee-*, ft-*, it-* | game subsystems, one crate per character and item family |
crates/melee-lib | the simulator API |
crates/melee-platform | the app core shared by every platform, with a C API |
apps/macos, crates/melee-web | the macOS (AppKit/SwiftUI) and browser hosts |
crates/melee-sim, harness/ | verification tooling (Rust and Python) |
This is an unofficial, non-commercial project for research and educational purposes. It is not affiliated with, endorsed by or sponsored by Nintendo, HAL Laboratory or any of the companies whose characters appear in the game. Super Smash Bros. Melee and all related names, characters and marks are trademarks of their respective owners.
The repository does not contain, and the apps do not download, any of the game's code, data, graphics, models, audio or other assets. Everything the apps show from the game is read at runtime from a disc image the user provides. Please do not ask for or share disc images here; dump your own.
There is deliberately no license file, following doldecomp: the port is
written from a decompilation of copyrighted software, and no rights to that
software are granted or implied. Third-party material in this repository
keeps its own license: the Barlow fonts (SIL Open Font License,
assets/fonts/OFL.txt) and Slippi replay test files from
peppi (MIT, crates/slp/tests/data/NOTICE).
The decompilation is included as a git submodule, not copied.
If you are a rights holder with a concern, please open an issue.