Created by a human, with a brain badgeA badge with a character next to the text "Web 14," indicating that the site may contain slightly offensive materialDo What The Fuck You Want To Public License badgeD D Race Network badgemi toki e Toki Ponamade with MY OWN TWO PAWS badgeNo cookies badgeNo tracking or analytics badgeMade with server-side scripting badgeHosted on home internet badge


Rhythm Doctor Networked Multiplayer


Source code (Windows and Linux)
Windows binary (scary security warnings 0.0)
Linux binary (should be run as root and requires libevdev)


Rhythm Doctor has local multiplayer, but unfortunately (?), I have non-local friends. Game streaming for rhythm games is not great, but there's one button - why not just send that over instead?

That is what this does. One player should forward a port and run as a server, and the other should run as a client and provide the other player's IPv4 address. Upon startup the applications will do a latency test, and the latency can then be specified in subsequent sessions so that you don't need to tweak your in-game offsets. If one of you is on Windows you may not want to do that; one of my friends had their clock drift by 1.5s in a week or two which gave us issues. 10ms is added (if you don't specify a latency) to account for jitter.
It assumes you are using spacebar and presses s on the other end; to change either you would have to recompile. It is ideal if one of you is on Windows and starts the level by pressing their button second because half of a trip's delay will be added to "share" the latency. Doing the same on Linux would have added a lot of complexity.

Training levels didn't work very well for me, and they should be played in singleplayer. You can disconnect and reconnect, have someone tab out if they already know the mechanic, or just use something other than the spacebar so that your taps aren't synced over.

Running

Run in a terminal (regardless of platform).
Usage:
 One of (required):
  -s  host server
  -c [IP] connect to IP
 -p [PORT]  (required) port number to bind or connect to
 -l [LATENCY] latency in ms to use instead of tested value


Examples:
./rhythm-doctor-nm -s -p 8413
.\rhythm-doctor-nm.exe -c 172.217.1.110 -p 8413

Compiling

Windows: Link winpthread and Ws2_32.lib (I cross-compiled with MXE)
Linux: Install libevdev-devel and linux-headers, -I/usr/include/libevdev-1.0 -levdev -lpthread