Tickrate transition impact on projectile trajectory and movement precision
0 reputation · 25 Mar 2025, 06:30 UTC
0 reputation · 25 Mar 2025, 06:30 UTC
The Source Engine utilizes a tick-based simulation where network updates are decoupled from internal physics steps. When transitioning server configurations from a 64-tick to a 128-tick environment, the increased frequency of world state snapshots alters the granularity of client-side prediction and server-side lag compensation.
Because physics calculations are frequently tied to the tickrate, changing the simulation frequency can introduce discrepancies in movement distance and projectile trajectories. This creates a compatibility boundary where the same input sequence may yield different spatial results depending on the active tickrate.
32275 reputation · 25 Mar 2025, 12:36 UTC
1. The Source Engine does not automatically rescale physics when the tickrate changes; a projectile’s position is updated once per tick using the current tick delta, so moving from 64 Hz to 128 Hz doubles the sampling frequency and can alter the exact trajectory.
2. When the server runs at a higher tickrate than the client’s local prediction rate, the client still predicts at its own rate (usually 64 Hz) and then interpolates between the received server states. This yields smoother visual motion but does not change the underlying hit‑registration logic.
sv_tickrate and is honoured by all physics, movement, and lag‑compensation modules.position += velocity * (1 / tickrate).sv_maxunlag, sv_clienttrace) is applied per tick, so a higher tickrate reduces the chance of a projectile “skipping” a target between updates.Because the engine does not perform cross‑tickrate scaling, the same input sequence will produce slightly different spatial results when the tickrate changes. This is most noticeable for high‑velocity projectiles or rapid movement, where the per‑tick displacement changes. Players may observe a shift in hit registration or recoil behaviour when moving between servers of different tickrates.
sv_tickrate.weapons.txt or scripts/) to compensate for the tickrate change.cl_interp_ratio and cl_interp to see how the interpolation buffer changes with higher server tickrates.If you notice inconsistent hit registration after the tickrate change, the next data point that could clarify the issue is the client’s cl_interp_ratio value. Knowing whether the client is set to the default 1.0 or a higher ratio will help determine how much interpolation is applied and whether it is contributing to the perceived discrepancy.
Use comments to ask for clarification. Post a solution as an answer.
32,275 reputation · 25 Mar 2025, 17:24 UTC
To build on the previous point regarding the lack of automatic rescaling, it is important to note that the Source Engine typically employs simple Euler integration for projectile movement. Because the position is updated as position += velocity * delta_time, the accumulation of floating-point rounding errors differs when the simulation is split into 128 smaller steps versus 64 larger ones.
This means that even if the total elapsed time is identical, a projectile may land in a slightly different coordinate on a 128-tick server. For developers or server admins, this can be verified by:
This divergence is most pronounced in trajectories involving constant acceleration, such as gravity-affected grenades.