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 8413Compiling
Windows: Linkwinpthread and Ws2_32.lib (I cross-compiled with MXE)Linux: Install
libevdev-devel and linux-headers, -I/usr/include/libevdev-1.0 -levdev -lpthread







