Skip to content
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.
  • 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!
  • New disconnection detection
  • 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.

Clone this wiki locally