25 is a really unusual number... I've been lead to believe that the real value is 20/21 specifically by this function in onlinejobsglobals:
...though from videos of the restaurant show the clock driven by this going a little fast? I'm not sure. What I'm asking is, where did you find the value for this tick rate, and is it definite?
The gradual change in simulation speed is interesting, and is probably just there so that the illusion isn't shattered by the state suddenly jumping forward to where it's meant to be. You'll notice that our setup is incredibly stuttery on connections that are less than perfect right now.. This is because we're only buffering 2 ticks maximum at all times and just jumping forward to the latest if >2x the buffer size is queued. In future this is probably going to dynamically adjust by each client to tailor to connection quality, and something like a gradual change would probably help it not look terrible too.
I don't think it deliberately buffers ticks after you recieve them - it probably just adds them to a queue immediately and tries to run through it, maybe slowing down as it gets closer to the end.
...though from videos of the restaurant show the clock driven by this going a little fast? I'm not sure. What I'm asking is, where did you find the value for this tick rate, and is it definite?
Actions may not be scheduled to perform on fine tuned ticks, they may just be queued up and then sent in bulk between the server tick packets and then simply be buffered into a queue in the order they were sent then recieved over the tcp stream (eg. run 5 ticks, queue interaction # onto callee object # from caller object #). FreeSO works slightly different from this by instead sending command lists with every tick... but it's the same idea deep down.It seems that the client should receive player actions from another packet, and that the server should send these packets before sending the kServerTickConfirmationMsg to the client for the tick when those actions are scheduled to occur.
It turns out that, if you set the simulate_until value to a really high value (many game hours in the future), to catch up to the current time, the game does not simulate as fast as it can, but instead, it gradually increases the speed of the simulation and then gradually decreases the speed when it begins approaching the current time.
As for whether or not the game buffers the kServerTickConfirmationMsg packets it receives and only responds to them after a certain scheduled time in the future (e.g. an 0.5 second latency would protect against dropouts up to 0.5 seconds long), I'm not sure yet.
The gradual change in simulation speed is interesting, and is probably just there so that the illusion isn't shattered by the state suddenly jumping forward to where it's meant to be. You'll notice that our setup is incredibly stuttery on connections that are less than perfect right now.. This is because we're only buffering 2 ticks maximum at all times and just jumping forward to the latest if >2x the buffer size is queued. In future this is probably going to dynamically adjust by each client to tailor to connection quality, and something like a gradual change would probably help it not look terrible too.
I don't think it deliberately buffers ticks after you recieve them - it probably just adds them to a queue immediately and tries to run through it, maybe slowing down as it gets closer to the end.