forked from libretro/RetroArch
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Gregor Richards edited this page Sep 13, 2016
·
136 revisions
This is a fork of RetroArch intended to fix its wonderful-but-imperfect Netplay.
Done:
- Removed the "here there be dragons" sign that prevented anyone else from looking at this code.
- Added a README that lightly documents how RetroArch's Netplay works.
- Netplay ring buffer hardened to prevent overruns, which previously caused insane desyncs.
- Ripped out UDP. Everything is done over TCP now. The previous implementation demanded reliability and in-order guarantees anyway, so UDP was just silly. Note that the protocol has also changed in more fundamental ways, so it's not really possible to make a "UDP or TCP" option except by having two incompatible implementations of Netplay.
- Removed all limits on the size of the replay buffer. You want to allow 10 seconds of drift? 10 seconds of drift it is!
- Made stalling work without blocking the UI thread.
- General bugfixes to make Netplay bulletproof.
Todo:
- Infinite testing, of course!
- Fix spectator mode. It used to slowly lose time. It might still, or it might not even work right now.
- New disconnection detection
- Fix remote pausing. There's a pause command implemented that's never sent, but it's very buggy, as it doesn't keep local and remote pause separate. Making this work right is necessary to use the menu during Netplay.
- Support for loading state over Netplay
- Support for launching Netplay on an existing session?
- General "must-rewind" feature, in particular so that player flipping becomes deterministic.
- Frame CRCing as a last resort for sync (probably only necessary for cores with nondeterminism. If they have HEAVY nondeterminism, still useless)
- Maybe: Support for input grappling (two players controlling the same input device). Useful for e.g. handhelds.
- Super-future: >2 player netplay. Not as difficult as it seems, just need an array of buffers, frames and replay.
- Super-future: Netplay input support for devices other than the simple retropad.