I’ve gone and had a rummage around neils stuff from unlagged 2.01. I was completely wrong about the “complicated” part, the source I checked ages ago was a mixed client/server hybrid thingy that made my flesh creep. Its fortunately not like that anymore (Sorry Neil!)
Since then, he’s moved it serverside and does a check for late cmd’s as well (good!), as opposed to only acting when cmds finally arrive (bad)
Nice things:
- A late client gets ent->s.pos.trbase “predicted” each snapshot they are late for. So, he extrapolates their physics but not their cmds - it’s like they let their hand off the keyboard to other players. He leaves the ent->s.origin alone though, so the “bad” client doesn’t get a prediction error.
- He stores the antilag trail after this prediction, so that when the history lookup is done its done against what was sent in the snapshot. So provided that antilag looks up the correct client view time (he doesn’t… but I mentioned the fix earlier - use the actual cmd.servertime not the msec thingy ), you should be able to “hit what you see”, new extrapolations and all.
Bad Things:
- Warpers due to things like flooding their upstream (kazza) often go for 200-500ms+ periods with no cmds. While they’re not sending cmds, they’re still moving and hittable - yes. Unfortunately, processing the torrent of cmds that arrive after the “warp period” still causes the player to teleport, and that can be a fairly significant error. Take the case of someone running on an arc near a large drop… and continually being “predicted” of having slipped off the edge…
So… The “stop” part of the warping is gone, but the “speedup” at the end isn’t. Upstream flooding is still a viable way to make yourself hard to hit, which is the really ugly side of gamers, not just poor dudes with bad connections.
Anyway, the only real difference between Neils and my own is that our physics extrapolation is authorative (predict errrors for the warper, no errors for the other players), and we provide an adjustable tolerance serverside before a prediction is done.
Most of the time a causally “bad” connection - like when PB is scanning, can cause about one maybe two “one cmd” corrections per second. Generally once play settles down though most people do not trigger the UrT antiwarp code at all (I imagine the same is true for Neils).
Antiwarps there to stop people abusing q3’s good hospitality in accepting incoming client cmd’s to make themselves unhittable, so its worth it imho to go the “whole hog” and put the effects of an unstable connection completely on the clients shoulders.