To clear something up, GAS is not using NPP. It has its own replication methods with no regard to what NPP or Mover is doing. GAS has a very limited concept of “rollback” where a client may, for example, predict the activation of an ability. If the server doesn’t agree that the ability was activated, the client’s ability is interrupted and canceled. Many side effects of the ability, such as applied gameplay effects, may automatically be canceled along with the ability. But if the ability has custom gameplay behavior in its Event Graph, it’s up to the ability author to handle cleaning it up upon cancelation.
Regarding client & server frame rate: there’s a distinction between the overall GAME frame rate (coinciding with rendering rate) and Network Prediction’s simulation ticking rate.
You could have a game/rendering frame rate of 60 or 120+ or have it varying in between, while still having a fixed simulation tick rate of, say, 30 fps.
If using a fixed simulation tick rate, both client and server are accumulating time and then spending it in discrete amounts (~33ms for a 30fps simulation). Client and server are all using the same simulation rate, regardless of what their game/rendering rate is. If the game/rendering rate is slow, like during a hitch or a slowdown due to intense graphics, we may get a big game frame time that results in multiple fixed-size simulation ticks during a single game frame.
So in your example, the answer depends on whether you’ve got Network Prediction using “Fixed Tick” or “Independent” ticking mode. This is unrelated to the game engine frame rate settings.
For Fixed Ticking, the clients and server are at parity. If client simulates moves for 6 frames in a row, the server will queue the inputs (along with the sim times they’re paired with) and then simulate the 6 inputs later at the appropriate simulation time. If the client’s input for a frame don’t arrive at the server in time, the server will proceed anyway using prior inputs.
For Independent ticking, the client is driving the simulation rate so the server’s low update rate is irrelevant. If the server receives 6 move inputs, it will queue them and then simulate 6 moves in a row during the single server game frame. No merging of inputs is necessary.
Client B will receive from the server:
- in Interpolated mode: just the sync state
- in Forward Predict mode, both sync state and input
Generated moves are just artifacts that exist in the middle of Mover’s simulation, constructed by the active movement mode & layered moves. They are discarded as soon as they’re used. Only inputs and sync state are communicated between clients and the server. Client B using ForwardPrediction will receive the latest state and input, and can forward predict from there.
Hope this helps!
Justin