Sylvester_Ink wrote:2 players with good connections will always have a better game using a server than using p2p. Granted there will be a very slight advantage to the player with lower ping, but in a spammy game like Descent, the advantage is generally negligible
Ping advantage is very
noticeable. In D3, every 10ms ping advantage was worth about 2.5% efficiency for me -- which means, in a standard-rules ladder match (play to 20, win by 2), a 20 ms advantage can easily make the difference between winning and losing (20-18 is 52.6% efficiency; 18-20 is 47.4% efficiency, a difference of 5.2%).
In D1, Rebirth used a server-based model (still allowing client-side dodging, but packets were routed through the game host) whereas Retro restored a pure p2p model. It was a lot of work to put it in, but it improved the game drastically -- even between me and Drakona (our computers are less than 25 feet apart.)
In a game like Descent, which is more about movement/dodging than about aiming, client-side dodging is as important as trichording. Minimizing the number of extra hops between players is a high priority. I'm not aware of any netcode model that comes close to matching the performance of p2p for the behaviors most important to Descent.
The netcode for D3 was pretty darn bad though. It's probably not the best place to look for an example of how you'd want client/server Descent netcode to work.
That's why I suggested Warsow's netcode, as Warsow is focused just as much on movement as Descent. Common 1v1 speeds reach around 250% of the default, players can instantly change directions at any speed, and there are a couple of insta-hit weapons that have to be taken into account.
Halogene suggested Xonotic, and although the initial release had problematic netcode in comparison to its predecessor, Nexuiz, I believe that's been cleaned up by now. However, Xonotic's combat and movement is smoother and more flowing than Warsow's, so I think the latter would better suit the Descent style. (Of course, I could be wrong. No reason not to take the best elements from both.)
Either way, good netcode will be a necessity whether you're using p2p or client/server. And believe me, with good netcode and a ping below 100ms, a 20ms difference should have absolutely no effect on the player, especially not for any fps. (Games based on frame precision, like many fighting games, would possibly have a problem depending on the framelock, but that's a whole different arena of netcode programming.) Remember that average human reaction time is about 200ms, with 150ms being right around the fastest human response. If you get a ping of about half that, it means the round trip for the data should fall below the noticeable rate for human players. Furthermore, you need to give the player instant response on their own part, in order to make the ping nearly invisible to them. The trick is to balance the player's instantaneous response with their interactions with remote opponents, which is where stuff like prediction comes into play. Different games need to use different types of prediction, with a game like Counterstrike focusing on optimizing aim and shooting, while games like Warsow, Xonotic, and Descent focus on movement.
The truth is that while p2p will always be superior over the shorter distance, once you start to get to the higher pings, there are less netcode tricks you can pull that will mitigate the issue. It's also important to note that higher ping becomes less noticeable for human players as long as it's constant. The player can adapt to the ping pretty quickly if it's not too extreme. The nice thing about the client/server method is that a good server can normalize ping spikes from one player and make it invisible to the other. The end result is that even the player with the spikes doesn't notice it.
Also, because Descent has very few insta-hit weapons, and only some weapons with a relatively quick travel speed, a client/server model has an even larger amount of room to work with normalizing ping. (Actually, since the gauss is a spammy weapon, it's not that difficult to work with either.) As such, Descent netcode will certainly be easier to work with than even games like Warsow and Xonotic.
Now I haven't taken a close look at Retro's p2p netcode, nor have I tried it myself (haven't played in the time that Retro was introduced, and since I just finished moving, I'm still trying to find the time to jump back in and see how garbage I've gotten over the years), so perhaps the game plays just fine up to a point. But I guarantee that after that point, client/server will be superior.
To give an example (using totally bs numbers that I pulled out of thin air):
At 0-50 ping, p2p would be transparent and the ideal way to play.
At 51-100 ping, p2p would become noticeably harder to deal with, especially if it's not consistent.
But 40-100 ping, client/server would perform as well as p2p at lower pings, and better at higher pings.
At 100+ ping, p2p would become unplayable competitively, whereas client/server could potentially be competitive at 150, possibly even 200. (But nobody wants 200.)
Of course, this doesn't mean we should drop p2p as an option. It may turn out to be just fine after all. But don't discount a client/server model with good netcode (rather than D3 netcode). This is where players experimenting will certainly help.