   I've got interpolation working, but still jumpy at times
  I've been working tirelessly all week to get my first multiplayer networking demo completed, and I'm almost there (I think), but I have one problem remaining.  I've gotten it to where interpolation smooths out the movement (sending updates 10 times per second and interpolating back 100ms), but due to network jitter, there are still the occasional jumps in movement.  I've got the network time on all clients synced to within about 10ms on average, so I can determine with fairly good accuracy the latency in the packets sent (by sending the timestamp with the original packet and finding the difference in ms when it arrives), but I can't seem to figure out what to do with this latency number.For example, I have an interpolation period of 100ms, and lets say I calculate a latency of 50ms.  What do I do with those 50ms of latency?   
  Subtract from the "rendered" time. I e, interpolate further backwards in time.This should be pretty obvious if you actually draw out an sequence diagram:As you can see, with a 50 ms transmission delay, you will have times "0" and "100" at time 150, and thus be able to start interpolating at time 0, so the total backwards time shift is 100 (your granule) + 50 (transmission delay).For robustness, you probably want to calculate an upper bound on transmission delay, rather than using an average.;  Thanks for the helpful reply!  I'm afraid I may be brain dead from trying to get this to work for so long now, but when entering the state's timestamp into the buffer, I get even worse lag when I do the following:state.timestamp = renderTime - latency;I assume this isn't what you were saying to do?  If it is then my issue must lie somewhere else.   ;  There is a trade-off between absolute delay, and jitter/imprecision.You can have the remote player always at a precise location, but at a time that is greater than your send interval plus transmission time in the past.Or you can have the remote player displayed "nearer" in time, but at a cost of not always having perfect data.Given those constraints, your job as a game designer is to build the best-feeling gameplay possible.