Engine interpolation settings
My aim for interpolation settings is to reduce my visual player and item jitter at 100ms ping. I want to keep the game as accurate as possible. It's worth noting that I'm on gbit symmetric fibre with 5ms ping to the nearest exchange and a gaming computer rebuilt in 2023, so your mileage will vary.
All of these numbers are measured in "ticks". Tribes 2 runs at 31~ ticks per second, with a single tick measuring 32ms or 0.032 seconds. This information is based on old source code instead of assembly, so the descriptions may be inaccurate - corrections welcome!
My settings are "0 30 3 0".
Personal opinion: Leave at 0 and 'feel out' the latency.
Pros: Turning it up may reduce the need to lead your shots, may correct very simple player movements.
Cons: Unpredictable player movements warp more, higher inaccuracy at higher latency.
Description: Setting maxLatencyTicks higher than 0 enables client-side player position guessing. This guess is applied when you receive position data from the server. The guess is simple - move the new player position ahead relative to the new velocity delta (speed, direction difference). Your server roundtrip time is a factor in the guess, so maxLatencyTicks does little if your latency is very low. The upper limit is your latency, so setting this much higher than 10 doesn't seem to do much.
maxLatencyTicks for a given ping
50ms/64 = 0 - no correction applied
100ms/64 = 1 - one tick of correction
250ms/64 = 3 - three ticks
1000ms/64 =15 - a whole 15 ticks of correction - good luck hitting anyone!
Personal opinion: The default of 30 is about as high as you'd want.
Pros: Smoother looking player movement, less player freezing.
Cons: High latencies trade freezing for warping - laggy players may warp more but freeze less.
Description: Setting maxPredictionTicks higher than 0 enables client-side player position prediction. Unlike maxLatencyTicks, maxPredictionTicks is only used when server data is unavailable. This setting is self-descriptive. The other player's position will be predicted based on their current velocity delta until new data is received or the tick counter is exceeded. Setting this too low will result in players freezing until new player movement data is received. Setting this too high may make it harder to tell when you're experiencing severe packet loss.
Personal opinion: 3 seems best, 2 functions, 1 is a bit jittery
Pros: Lower numbers = higher accuracy. Higher numbers = smoother player warping.
Cons: Lower numbers = corpse shaking due to floating point inaccuracy. Higher numbers = less accurate player vectors.
Description: Setting maxWarpTicks higher than 0.0 enables player warp smoothing. This setting determines how many ticks a position warp will be smoothed across when the client is behind the server. Visual jitter caused by engine issues (reduced floating point accuracy in network packets) is reduced by smoothing player position updates over a number of frames. Setting this number higher than 7 when minWarpTicks is small will cause players to start gliding between their movement inputs. Try setting it to 30 on a bot-only server with high ping, you'll see what I mean.
Personal opinion: 0 or the default of 0.5 look fine.
Pros: Higher numbers = delayed smoothing and more jitter. Lower numbers = faster warp smoothing.
Cons: Bigger numbers reduce the effectiveness of maxWarpTicks.
Setting minWarpTicks enables a threshold that must be passed to enable player warp smoothing. I don't see the point setting it above zero, but someone from Dynamix chose 0.5. There's probably a reason I'm unaware of.
Don't set both maxWarpTicks and minWarpTicks to 0.0! This seems to partially disable player position warping, resulting in frozen players glitching around the map.
Dynamix engineers struck a near perfect balance between hiding game engine inadequacies and keeping the game responsive. The networking model means that connections with packet loss experience warping as positions are corrected by the server to some degree. Kinda hard to escape that sort of thing anyway.
edit: whoops, I meant to post this in General Discussion... oh well, too late now, no delete functionality