Cal Predine
StarKnight Security
61
|
Posted - 2014.04.29 10:31:00 -
[1] - Quote
Although none of us (that's *none* of us) can state definitively how hit detection is working (or rather, not working) until CCP publish some details, there's some evidence that it's both client and server side.
You shoot at an enemy, their shields flash, that seems to be client side recognition that you are indeed shooting (and hitting) a player and not a rock. We don't want to wait for the round-trip to the server just to see a graphical effect - this makes sense. Damage indication is less clear cut - I've had times I've been shooting away at a player for several seconds (which of course, is an eternity in any FPS game) and despite shield flare, their life gauges indicate that they are receiving no damage. I've also had a suspiciously large number of occasions where the target's shield and armour bars drop to zero (eventually), but they just don't die. I then get a kill report from a player with zero shields and armour. This should be a once or twice in a lifetime occurrence - it's not - several times a day was common when I played lots of Dust. My guess is that the client does a quick calculation to give visual feedback (i.e. to update your enemy armour and shield gauges), but that the real meat of the damage calculation (i.e. "hey Bob - you're dead!") is handled server-side, assuming the data ever get through.
I'm a programmer, but not a games programmer, but as far as I know, it's pretty normal in FPS games to have a "working model" on the client which handles making the game playable and enjoyable, and a definitive model on the server which takes all these different client-side models into account, and judges the outcome of conflicts (given that, with players all over the world, everyone's definition of "now" is different.)
It's notoriously difficult to synchronise the clocks on two remote computers, and when we're talking about the tiny fractions of seconds which make such a big difference in FPS games, that's a real problem. And that *is* a problem. Let's take a very extreme example - If the server thinks my commands are taking a full second to reach it, whereas yours arrive instantly, that means my model of you is running one second in the past. That means I can still shoot you until you've been in cover for a full second - an eternity - sounds familiar? It also means the server has to make a tricky call - say you delivered enough damage to take me down, does it wait a full second to see if I "beat you to the punch" and delivered a killing headshot? The evidence would suggest that yes - that's exactly what it's doing, and why we're seeing such inexcusably weird results when playing against players the server interprets as having high latency.
Worse still, and I won't go too much into detail, what if my latency isn't really a full second? As I said, it's notoriously difficult to synchronise time on two remote computers - what if the calculation is off and my latency is only about a half second, but the server is awarding me a full second of leeway? That gives me a half second "in hand"! What if the lag compensation algorithm is just out-and-out too generous? If you remember Max Payne, that's like me being in bullet time every time we get into a fight - what chance do you stand?
At the risk of being highly unscientific, at time of writing the Human Benchmark reaction time test quotes average reaction time at 215 mS. That's pretty quick. How much of an advantage would I need to make myself almost invincible? 10% ? 20% - 43 milliseconds? And that's before we even consider your damage output not being recorded...
I've been looking at this for a long long time now, well over a year, and I'm pretty well convinced that at best the lag compensation code is way too generous (evidenced by people getting amazing results by selecting servers the other side of the world). At worst, it can be, and is being, intentionally exploited (evidenced by people justifying their being immune to damage by stating that they, and their friend, "had a bad connection because they were downloading in the background" - what kind of justification is that? One from someone who recognises and is exploiting the weakness in the system, that's what kind of justification).
The fixes are no-brainers:
- Remove the ability to select your region. Yes, I'd rather retain this too, but not at the cost of the game being exploitable.
- Sort out match-making so it actually works and correctly selects opponents correctly based on their latency
- Re-assign players to other matches if their latency is too high compared to other players in the match. Feel free to use the word "kick" if you prefer.
- Ban players who are "reassigned" regularly, or whose latency "topically and suddenly changes" outside a specified tolerance.
This isn't the first time I've reported this, so you'll excuse me if I don't hold my breath...
PS3 Slim -
Hybrid hard drive with 8GB SSD -
South Coast UK -
Virgin media cable BB, 20Mbps down, 2Mbps up.
|