forked from libretro/RetroArch
-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Gregor Richards edited this page Dec 13, 2016
·
136 revisions
This is a fork of RetroArch intended to fix and improve its Netplay. The crucial fixes have all been merged upstream. See also my info on which cores are tested.
- 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.
- Remote pausing.
- Stalling without rerunning frames. Netplay is now one of the many reasons the frontend may pause.
- Support for loading state over Netplay.
- Frame CRCing as a last resort for sync. Configurable by netplay_check_frames or the --check-frames option.
- Deterministic player flipping.
- Fixed spectator mode. In addition, it's now far more similar to net (normal) mode than it was before.
- Netplay menu and support for launching Netplay on an existing session.
- Savestate "quirks" API. Allows cores to describe the quirkiness of their serialization code so that frontend features can adapt. Particularly useful since many cores have session-specific savestates that cannot be transferred over the network.
- Update all quirky cores to identify their quirkiness.
- Compression of savestates when sent over the network.
- IPv6 fixes
- NAT traversal (UPnP)
- LAN scanning for netplay hosts
(To be PR'd in a later release)
- Better (non-blocking) initial connection, to allow the serving port to be left listening indefinitely.
-
2 player netplay. Not as difficult as it seems, just need an array of buffers, frames and replay.
- Merge spectator mode into net mode.
- Infinite testing, of course!
- Bugfixes: Sometimes a player joins and everybody ignores their input :(
- Bugfixes: Stalling per connection instead of per whole netplay
- Bugfixes: Transfer input device modes across netplay peers, maybe warn if nobody's actually polling a particular player.
- Password-protected serving.
- Server admin menu for kicking/demoting users etc.
- Public matchmaking server.
- Future: Auto-expanding replay buffer based on latency. Problems relate to limits, when to contract, how to determine if we don't have enough CPU time to handle it, etc.
- Super-future: Netplay input support for devices other than the simple retropad.
- Maybe: Rewindless mode. This is strictly-wrong Netplay, but with frame CRCing, can work fine. If one disabled both rewinds and frame CRCing, one would be left with ZSNES-style netplay (no attempt at sync)
- Maybe: Support for input grappling (two players controlling the same input device). Useful for e.g. handhelds.
- Chat
- Spectators to a normal netplay game.
- Proto-matchmaking: Advertisement server.
- Latency reporting ala tab menu in multiplayer games.