Download

How does CharacterMovementComponent handle resubmitting multiple lost moves?

I’m trying to understand how this part of the CharacterMovementComponent works:

The system for buffering saved moves already ensures that movement information lost in transit will be resubmitted and evaluated. This provides a similar safety net to a reliable function, but without the risk of overflowing the reliable RPC buffer, and with added provisions to make sure movement data that is too old gets discarded.

(From CMC docs)

UCharacterMovementComponent::ReplicateMoveToServer appears to find the oldest (unacknowledged) important move and send it alongside NewMove whenever NewMove can no longer be delayed.

Then, in UCharacterMovementComponent::CallServerMove, the old move is sent to the server using ServerMoveOld.

My question is: what happens when there are several old moves which need to be sent? What looks to be happening is that a single old move is sent right before the next new move.

I want to understand what happens when multiple consecutive moves are unacknowledged and if it is possible for there to be a chain of moves like this:

Move 1 (acked) → Move 2 (not acked) → Move 3 (not acked) → Move 4 (acked)