I realize this probably is ridiculous for a suggestion, but I'm wondering if implementing a system similar to SRB2CS would be better than using our current netcode? I mean, it seems that there were several issues when it came to synchronizing objects, but I'm wondering how much of that could be actually fixed. Plus you know, the security concerns.
As a secondary alternative, perhaps implementing the Gametic Unlagged system from Zandronum would work somewhat? I'm not entirely sure how well though, honestly.
As far as I remember, SRB2CS's netcode had lots of issues too, I remember it as worse than the normal 2.0.x netcode.
Anyway, I have little to no knowledge about
how srb2's netcode handles stuff, but, if we're throwing ideas for the it, I might suggest trying to send the gamestate over again for synching?
By what I've heard, synch only attempts to synch players back, so it would mean that in the case where a joiner does not appear for everyone (which happens in like, 1/6 of the joins), the game tries to synch something that doesn't even exist for other players, and it leads to a certain failure, doesn't it?
I know sending gamestate would probably affect performance or something, but it's not like it matters since the game technically is frozen when synching happens.
Also another thing, it would be REALLY nice if the game actually got rid of a player taking too long to join, like, those who timed out or something. Because it happens way to often that a server freezes just because a joiner was unable to actually join.