Scope and sequencing for Melee-PC, a native source-level PC port of Super Smash Bros. Melee (NTSC-U 1.02) on the Aurora engine (Dawn/WebGPU, SDL3) and modern C11/C++20.
This file carries no feature status. What is done, partly done or not started lives in one place, the status table in README.md. Everything below is the plan: what each phase covers and why it is ordered that way. Items stay listed after they ship so the design rationale does not get deleted with them.
- Native Performance & Frame Pacing: Eliminate emulation overhead, runtime JIT compilation, and shader stutter using ahead-of-time pipeline caching and zero-copy asset streaming.
- Deterministic 60 Hz Simulation: The underlying physics, hitlag, RNG, damage calculation, blast zones, and combat logic must stay bit-identical to the GameCube NTSC-U 1.02 DOL.
- Modern Presentation: Widescreen (16:9 and window-aspect ultrawide), high-DPI UI scaling, internal resolution up to 10x native (6400x4800), and high-refresh presentation.
- Community & Competitive Parity: Target competitive tournament standards (UCF, 1000 Hz polling, hazardless stages, low input latency) and modding ecosystems (Dolphin-format HD textures, custom soundtracks, code mods).
flowchart LR
Phase1["Phase 1: Polish & Presentation"] --> Phase2["Phase 2: Competitive Parity"]
Phase2 --> Phase3["Phase 3: High-Refresh & Practice"]
Phase3 --> Phase4["Phase 4: Online Rollback Netcode"]
Focus: Refine visual presentation, audio balance, and desktop integration.
- Dolphin-Format Texture Replacements: Folder scanning (
.dds/.png) with runtime reload. - Unlock All Toggle: Bypass character/stage unlock grind; unlock All-Star mode.
- Multi-Bus Audio Control: Independent volume sliders for Music (BGM) vs. Sound Effects (SFX).
- Wide HUD Anchoring: Anchor damage percentages, stock icons, and timer to the 16:9 viewport boundaries (on/off toggle).
- Discord Rich Presence: Real-time rich presence displaying current mode, stage name, fighter played, and stock/time score. Needs API credentials before it can be built.
- Custom Soundtrack Override: User-provided
.ogg/.wavfiles in amusic/folder replace stage BGM. - Free / Unlocked Pause Camera: Remove rotation and boundary constraints on the pause camera for screenshots.
Focus: Input precision, hardware adapters, and tournament rule compliance.
- Direct 1000 Hz GameCube Controller Adapter Support:
- Direct access to official Nintendo Wii U/Switch GC Adapters and Mayflash (Wii U mode), bypassing the OS gamepad translation layer so the game sees raw 8-bit stick and trigger values.
- 1 ms (1000 Hz) polling off the dedicated input thread.
- UCF (Universal Controller Fix):
- Dashback Fix: Eliminate controller polling variance on dash turns.
- Shield Drop Fix: Standardize diagonal shield drop input thresholds on analog gates.
- Extended Hazardless Stages:
- Dream Land 64 (Whispy Woods wind disabled).
- Yoshi's Story (Shy Guys fly-bys disabled; Randall the Cloud togglable).
- Fountain of Dreams (fixed platform heights).
- Controller Haptics & Visuals:
- Rumble for SDL3 gamepads and GameCube adapter motors, driven from the game's own
PADControlMotorcalls. - Controller lightbar / RGB LED synchronization with player port colors (P1 Red, P2 Blue, P3 Yellow, P4 Green).
- Rumble for SDL3 gamepads and GameCube adapter motors, driven from the game's own
- 2-Player Keyboard Remapping:
- Configurable in-game keyboard remapping.
- Support for two players sharing a single keyboard (e.g. WASD + JKL vs. Numpad + Arrows).
Focus: Cutting-edge display performance and competitive practice tools (UnclePunch-inspired).
- High-Refresh-Rate Frame Interpolation (120 Hz / 144 Hz / 240 Hz):
- Keep gameplay simulation, physics, hitlag, and inputs locked at 60 Hz.
- Interpolate camera matrices and fighter joint hierarchies (
HSD_JObj) between 60 Hz ticks for smooth presentation on modern gaming monitors.
- Training & Practice Tools:
- Hitbox & Hurtbox Visualizer: Real-time rendering of attack hitboxes (red), grab boxes (yellow), hurtboxes (blue), and Environmental Collision Boxes (ECB) using Aurora's GX geometry layer.
- L-Cancel Flash Indicator: Visual feedback on aerial landings (green flash on successful L-cancel, red flash on missed L-cancel).
- Frame Advance & Slow Motion: Dedicated hotkeys to advance simulation frame-by-frame or run at 50% / 25% speed.
- Savestates in Training Mode: Instant save and load slots to drill specific recovery or combo situations.
- Replay Recording & Playback:
- Record match inputs, RNG seeds, and metadata to Slippi
.slpfiles. - Built-in replay playback and compatibility with Slippi Lab.
- Record match inputs, RNG seeds, and metadata to Slippi
Focus: Zero-delay online play with completely decentralized, serverless peer matchmaking. Design document: docs/netcode-plan.md.
- Native Rollback Netcode (Slippi model, re-implemented on native memory):
- Input delay 0–4 (auto from RTT), 7-frame rollback window, repeat-last-input prediction, snapshots only on predicted frames.
- Whole-region snapshot of game statics + live heaps (audio heap excluded); SFX/music/rumble gated during re-simulation.
- Slippi-style time sync (trimmed-mean clock offset, stall/advance) applied to native frame pacing; per-frame desync checksums.
- Determinism groundwork first:
-ffp-contract=offon every TU game logic reaches, one vendored trig implementation instead of platform libm, shared RNG seed, deterministic (prewarmed) in-match disc loads, record/replay harness.
- BitTorrent-Style Decentralized Matchmaking (Serverless P2P):
- DHT / Kademlia Peer Discovery: Mainline DHT (BEP 5) via jech/dht; time-bucketed topic infohashes for queues;
announce_peer(implied_port)+get_peersis the rendezvous, BEP 42ipreveals the NAT mapping — no matchmaking server, no STUN. - Decentralized Connect Codes:
NAME#XXXX(suffix derived from the player's ed25519 public key); Direct topics hash the code. - NAT Traversal & UDP Hole-Punching: Simultaneous open from the DHT socket (Slippi's approach); symmetric NAT re-queues, no relay.
- Community Resilience & Longevity: Zero backend infrastructure means the online mode can never be shut down or abandoned.
- DHT / Kademlia Peer Discovery: Mainline DHT (BEP 5) via jech/dht; time-bucketed topic infohashes for queues;
- Unranked, Ranked and Direct modes with Slippi's ranked ruleset (4 stock / 8:00 / items off / 6 legal stages / Bo3, loser picks with bans).
- On-Device Rating (no server): ed25519 identity per install; Weng-Lin (OpenSkill) rating updated identically on both peers from a doubly-signed match record; hash-chained history published as BEP 44 DHT items and verified by opponents. Verifiable, explicitly not cheat-proof.
- LAN Play: mDNS discovery, Double Dash-style lobby (player counter, host owns rules, load barriers, halt-together), direct IP fallback, same engine at delay 0.
- Native Menu Integration:
Onlineentry in the VS Mode submenu → Ranked / Unranked / Direct / LAN / Profile; lobby scene, then vanilla CSS/SSS/match/results driven by synced inputs; quick chat; name/delay/ping on the HUD. - Ultra-Low-Latency Presentation: late local input sampling, just-in-time tick scheduling against vblank, early + redundant input sends, DSCP marking; target button-to-photon at delay 1 below Slippi at delay 2.
- macOS Support:
- Exploration of macOS Apple Silicon (Metal) builds using GCC toolchains supporting
scalar_storage_order.
- Exploration of macOS Apple Silicon (Metal) builds using GCC toolchains supporting
- RetroAchievements Integration:
- Native achievement tracking for Single Player, Event Matches, Target Tests, and Home-Run Contest.
Discussions, bug reports, and feature proposals are welcome on GitHub Issues and Discord. The current feature-status table is in the README.