Show HN: Native Port of Super Smash Bros. Melee 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). A Rust port of Super Smash Bros. Melee NTSC-U 1.02 , written function by function from the doldecomp/melee https://github.com/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: - 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. Play in the browser: https://nikhilunni.github.io/melee/ https://nikhilunni.github.io/melee/ Chrome, Edge or Safari with WebGPU . Drop in your disc image; it is read locally and never uploaded. - 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. - 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. - Not implemented: Kirby, CPU opponents, random item spawns, single-player modes. Unported branches fail loudly unimplemented rather than diverging silently. - The renderer is a display approximation; only the simulation is exact. 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 | 48 | 21,000 | 350× | | Fox vs Marth, Final Destination | 53 | 19,000 | 317× | | Fox vs Marth, Battlefield | 69 | 14,500 | 242× | | Fox vs Marth, Pokémon Stadium | 77 | 12,900 | 215× | | Zelda vs Pikachu, Fountain of Dreams | 97 | 10,400 | 173× | | Ice Climbers vs Peach, Pokémon Stadium | 118 | 8,500 | 142× | Independent matches scale across cores: 12 Fox vs Marth matches on 12 threads run 142,000 ticks/s together, about 2,400× 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 20× faster per core: | | Battlefield | Pokémon Stadium | |---|---|---| | Dolphin | 750 fps 12.5× | 660 fps 11× | | This simulator | 14,500–17,100 ticks/s 242–285× | 12,900–15,200 ticks/s 215–254× | Sizes and costs: | Minimal headless simulator binary, stripped | 4.5 MB 1.8 MB gzipped | | Simulator compiled to WebAssembly | 4.0 MB 1.2 MB gzipped | | Browser app, renderer included | 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 | 96 MB | | Create, reset or clone a match | 8–10 ms | A match's state is large it mirrors the game's memory pools , so cloning costs about as much as 180 ticks; plan tree search around that. The numbers were taken with other applications running and vary by about 3%. To reproduce: cargo run --release -p melee-lib --example sim bench -- throughput