{"slug": "show-hn-native-port-of-super-smash-bros-melee", "title": "Show HN: Native Port of Super Smash Bros. Melee", "summary": "A Rust port of Super Smash Bros. Melee (NTSC-U 1.02) reproduces the GameCube game's simulation bit-for-bit, matching the original on 25 of 26 characters and all six tournament stages across every recorded test scenario, according to the project's repository. The headless simulator, built function by function from the doldecomp/melee decompilation and verified against the game running in Dolphin, replays 106 of 108 public Slippi replays to completion with no divergence, including the random number stream, and runs 242–285× real time on an Apple M2 Max versus about 12.5× for Dolphin. Kirby, CPU opponents, random item spawns and single-player modes are not implemented, and the project ships no game data, requiring users to supply their own NTSC-U 1.02 disc image (GALE01, revision 2).", "body_md": "A Rust port of Super Smash Bros. Melee (NTSC-U 1.02), written function by\nfunction from the [doldecomp/melee](https://github.com/doldecomp/melee)\ndecompilation and checked against the original game running in Dolphin. A\nmatch is meant to produce the same bits as the console, tick for tick.\n\nIt is two things:\n\n- a headless, deterministic simulator with a small API (`crates/melee-lib` )\nfor AI and game research: create a match, step it with controller inputs,\ninspect or clone its state;\n- a playable app on macOS and in the browser (WebGPU), with menus, a HUD and replays.\n\nThis repository contains no game data. You need your own copy of the game.\n\n**Play in the browser:** [https://nikhilunni.github.io/melee/](https://nikhilunni.github.io/melee/) (Chrome, Edge\nor Safari with WebGPU). Drop in your disc image; it is read locally and never\nuploaded.\n\n- 25 of 26 characters (all but Kirby) and the six tournament stages (Battlefield, Final Destination, Dream Land, Yoshi's Story, Fountain of Dreams, Pokémon Stadium) match the original game on every recorded test scenario.\n- 106 of 108 public Slippi replays in the test corpus replay to the end without a single divergence from the recorded game, including the random number stream.\n- Not implemented: Kirby, CPU opponents, random item spawns, single-player\nmodes. Unported branches fail loudly\n(`unimplemented!` ) rather than diverging silently.\n- The renderer is a display approximation; only the simulation is exact.\n\n`TRACKER.md` has the current state in detail.\n\nThe 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:\n\n| Match | µs per tick | ticks/s, one core | × real time (60 fps) | \n|---|---|---|---|\n| Samus vs Link, Yoshi's Story | 48 | 21,000 | 350× | \n| Fox vs Marth, Final Destination | 53 | 19,000 | 317× | \n| Fox vs Marth, Battlefield | 69 | 14,500 | 242× | \n| Fox vs Marth, Pokémon Stadium | 77 | 12,900 | 215× | \n| Zelda vs Pikachu, Fountain of Dreams | 97 | 10,400 | 173× | \n| Ice Climbers vs Peach, Pokémon Stadium | 118 | 8,500 | 142× | \n\nIndependent matches scale across cores: 12 Fox vs Marth matches on 12 threads run 142,000 ticks/s together, about 2,400× real time.\n\nAgainst 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 20× faster per core:\n\n|  | Battlefield | Pokémon Stadium | \n|---|---|---|\n| Dolphin | 750 fps (12.5×) | 660 fps (11×) | \n| This simulator | 14,500–17,100 ticks/s (242–285×) | 12,900–15,200 ticks/s (215–254×) | \n\nSizes and costs:\n\n| Minimal headless simulator binary, stripped | 4.5 MB (1.8 MB gzipped) | \n| Simulator compiled to WebAssembly | 4.0 MB (1.2 MB gzipped) | \n| Browser app, renderer included | 5.0 MB (1.6 MB gzipped) | \n| Disc files read for one match | 16–21 MB of the 1.4 GB image | \n| Memory per match | 96 MB | \n| Create, reset or clone a match | 8–10 ms | \n\nA match's state is large (it mirrors the game's memory pools), so cloning\ncosts about as much as 180 ticks; plan tree search around that. The numbers\nwere taken with other applications running and vary by about 3%. To\nreproduce: `cargo run --release -p melee-lib --example sim_bench -- throughput <disc files dir>` (also `parallel` and `lifecycle`).\n\n- A disc image of Super Smash Bros. Melee for the GameCube, NTSC-U version\n1.02 (game ID `GALE01` , revision 2), as an uncompressed`.iso` or`.gcm` dumped from a disc you own. Other versions and compressed formats (RVZ,\nCISO, NKit) are rejected with a message saying what was found.`docs/ISO.md` lists the checksums to verify your dump against.\n- To build: Rust (stable), and Xcode command line tools for the macOS app.\n\n```\ngit submodule update --init        # the decompilation, used as reference\ntools/run-macos.sh                 # build and launch the macOS app\ntools/run-web.sh                   # build the web app and serve it on :8080\ncargo run --release -p melee-lib --example headless   # the simulator alone\n```\n\nThe apps ask for the disc image on first launch and read everything they need from it at runtime: character models, stages, portraits, menu art.\n\nScenarios (scripted inputs, recorded human matches, random-input\n\"explorer\" matches, Slippi replays) are played on the original game in a\nheadless build of Dolphin with a scripting fork, which records the game's\nmemory every tick. The port plays the same inputs and the two traces are\ncompared field by field, floats by bit pattern. Floating-point code follows\nthe original PowerPC instruction sequence, including fused multiply-adds,\nthrough `crates/gekko-math`. `docs/ORACLE.md` describes the setup and\n`CLAUDE.md` the working rules.\n\n| Path |  | \n|---|---|\n| `crates/gekko-math` | PowerPC float semantics, the game's math library | \n| `crates/hsd-*` | HAL's engine: archives, scene graph, animation, particles | \n| `crates/melee-*` ,`ft-*` ,`it-*` | game subsystems, one crate per character and item family | \n| `crates/melee-lib` | the simulator API | \n| `crates/melee-platform` | the app core shared by every platform, with a C API | \n| `apps/macos` ,`crates/melee-web` | the macOS (AppKit/SwiftUI) and browser hosts | \n| `crates/melee-sim` ,`harness/` | verification tooling (Rust and Python) | \n\nThis 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.\n\nThe 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.\n\nThere is deliberately no license file, following doldecomp: the port is\nwritten from a decompilation of copyrighted software, and no rights to that\nsoftware are granted or implied. Third-party material in this repository\nkeeps its own license: the Barlow fonts (SIL Open Font License,\n`assets/fonts/OFL.txt`) and Slippi replay test files from\n[peppi](https://github.com/hohav/peppi) (MIT, `crates/slp/tests/data/NOTICE`).\nThe decompilation is included as a git submodule, not copied.\n\nIf you are a rights holder with a concern, please open an issue.", "url": "https://wpnews.pro/news/show-hn-native-port-of-super-smash-bros-melee", "canonical_source": "https://github.com/nikhilunni/melee", "published_at": "2026-10-05 13:27:52+00:00", "updated_at": "2026-10-05 13:50:36.403330+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "ai-research", "developer-tools"], "entities": ["Super Smash Bros. Melee", "Rust", "doldecomp/melee", "Dolphin", "Slippi", "Apple M2 Max", "WebGPU", "Kirby"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-native-port-of-super-smash-bros-melee", "markdown": "https://wpnews.pro/news/show-hn-native-port-of-super-smash-bros-melee.md", "text": "https://wpnews.pro/news/show-hn-native-port-of-super-smash-bros-melee.txt", "jsonld": "https://wpnews.pro/news/show-hn-native-port-of-super-smash-bros-melee.jsonld"}}