It's caused by an oversight in the netcode; basically not only is the rocket trajectory handled clientside (which is OK, since rockets travel in a straight line) but whether it explodes or not (more accurately whether it displays an explosion) is also handled clientside. So when you see an explosion that doesn't do any damage, what happens is that your PC (or console) thinks the rocket hit something (and therefore shows an explosion and removes the rocket from the screen) while the server thinks that it didn't (and the server decides on what does damage). This also means that other players may or may not actually see the rocket explode (but instead see it flying on)
So how come your client and the server disagree on this? There are lots of possible causes for this. For one, a rocket's starting position and direction are not replicated accurately; when the server sends you the info, it converts the rocket's position and rotation vectors to sets of integers so they take up less bandwidth. This causes rounding errors. For that matter, the same thing is done with player locations and velocities, which is a second source of inaccuracy. The third is that your client probably calculates the state of the game more often than the server (clients generally run 90 frames per second while servers are generally around 30-40) so interpolated states never exist on the server.
If a rocket hitting you in the face without doing damage though, the most common cause is that movement on your client is instant while it takes a while for the server to recognise it. So for example when you accidentally move in the direction of a rocket (instead of away from it) chances are your client is a little ahead of the server, so it may think you hit the rocket while on the server you're still a little away from the rocket. I think the only time I managed to replicate the bug on a LAN it's caused by this effect.
Do note that this also means you don't have to feel guilty if you don't take damage from a rocket's explosion; chances are your opponent doesn't even see an explosion but instead sees the rocket missing you by a small hair.
A small addition: I more often see the opposite of this bug, where a rocket did actually hit someone on the server (and therefore does damage) but doesn't explode on my screen (while my opponent does explode). This makes it look like my opponent was... run over by the rocket or something. Really odd.

Leave a comment: