Embed NeoGeo or CPS-1 emulation inside your own Rust game or frontend project.
Build an online arcade fighting game client with rollback netplay between two players.
Test rollback networking behavior locally using the library's simulated socket with fake lag.
Study how a small, focused emulator core is structured compared to a large multi-system emulator.
| elofight/emufight | dhkts1/teamclaude-rs | eternal-flame-ad/unitdc-rs | |
|---|---|---|---|
| Stars | 5 | 5 | 5 |
| Language | Rust | Rust | Rust |
| Last pushed | — | — | 2024-10-12 |
| Maintenance | — | — | Stale |
| Setup difficulty | hard | easy | moderate |
| Complexity | 4/5 | 2/5 | 2/5 |
| Audience | developer | developer | developer |
Figures from each repo's GitHub metadata at analysis time.
Needs a C++ toolchain, SDL2, and your own legally obtained ROM files, which are not included.
Emufight is a Rust code library that emulates, meaning digitally recreates, two classic arcade game systems: NeoGeo and CPS-1. Rather than supporting every arcade board ever made the way a large project like MAME does, it focuses narrowly on these two systems and is built to be easy to call from other Rust code and to run smoothly with rollback netplay, a technique that lets two players compete online with minimal lag. The project is early stage, at version 0.1, and its programming interface may still change. You embed emufight as a library inside your own game project rather than running it on its own. It gives you the emulated machines and an online play session, while you build the window, handle key presses, and manage matchmaking. The whole design rests on one guarantee: if two computers start from the same game files and the same starting point and receive the same button presses, they will produce identical frames, which is what makes reliable online play possible. Internally, everything flows through a single interface where you feed in player input, then step the emulator forward to get back a video frame and audio samples, or step it forward without drawing anything when catching up after a network delay. The library does not open its own window or play its own sound, it only produces raw data for a host program to display. Online multiplayer is built on a rollback networking library called GGRS, connected through simple socket implementations, including a fake one for testing lag and a plain UDP one for real connections. Save states are captured every frame during online play, stored compactly, and tagged so you cannot accidentally load a NeoGeo save into the CPS-1 system. Sound emulation uses a small existing C++ library, while the rest of the processor emulation, including the chips these arcade boards used, is written in Rust. The project ships no actual game ROM files, since those are copyrighted, but it does include small saved starting points for certain games so two players can begin a match quickly instead of a slow cold boot. The project is dual licensed under MIT or Apache-2.0, with separate notes for the third party pieces it depends on. It is organized into a core library crate, a reference SDL-based host program used for testing and demos, and a small folder of saved starting states, and it welcomes contributions that add support for new arcade boards.
A Rust library that emulates NeoGeo and CPS-1 arcade games and supports low-lag online multiplayer via rollback netplay.
Mainly Rust. The stack also includes Rust, GGRS, SDL2.
Choose either the MIT License or the Apache 2.0 License, both allow free use, including commercial use, if you keep the license notices.
Setup difficulty is rated hard, with roughly 1h+ to a first successful run.
Mainly developer.
This repo across BitVibe Labs
Verify against the repo before relying on details.