forked from libretro/RetroArch
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Gregor Richards edited this page Sep 12, 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.
- 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:
- Fix sync_frames=0 mode. Right now it goes at about 1 frame per second due to blocking bugs :)
- 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)
- Fix spectator mode. It used to slowly lose time. It might still, or it might not even work right now.
- 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.