During NetCode 1.4 to 1.11 upgrade there were some changes in GhostUpdateSystem leading to entities not getting new snapshots applied and continueing prediction on their own data.
Requirements:
- no network and no network emulation
- client running with
MaxSimulationStepsPerFrame == 1 - client running below
SimulationTickRate(editor, debugging ...)
MaxSimulationStepsPerFrame + low fps leads to the client never executing partial tick. Partial ticks prevent this issue.
The Issue:
When running without network and receiving a snapshot without latency continuePrediction should basically be always false as it should apply the snapshot and continue from there.
But there is a line that seems to be incorrect (GhostUpdateSystem.cs:353):
continuePrediction |= predictionStartTick == lastPredictedTick;
This leads to the client always having continuePrediction == true despite having a new snapshot as long as it didn't do a partial tick last time.
The check is done above too to evaluate if a backup restore is required when continueing prediction. I think this line was introduced by mistake while refactoring and it should simply be removed to fix this? But I might not understand NetCode enough and miss something.