Issues with unbounded Velocity/Acceleration in networked movement component

I have a multiplayer VR game with a very complicated flying movement mechanic. Without going into too much detail this system involves a wingsuit and rocket boosters. This needs to be 100% functional in a networked environment, so I’m using a custom CharacterMovementComponent.

Wingsuit movement is based entirely off of your character’s velocity and the shape of your body during each frame. Technically speaking, the acceleration you generate in a frame is equal to

(LiftVector * Lift + NormalizedVelocity * -1 * Drag) * Wingspan * MobilityTraits.GlideCoefficient * CurrentSpeed

Where CurrentSpeed is the magnitude of your current velocity vector. This of course creates some problems with the default CharacterMovementComponent, because the netcode is designed to transmit only vectors of scale less than 1 and then multiply them by GetMaxSpeed or GetMaxAcceleration.

Rocket boosters are always active at the same time, and since they should also provide raw acceleration I’m simply calculating the rocket acceleration and adding it to the wingsuit acceleration.

I long ago hacked my component to instead calculate and transmit FVector_NetQuantize100 during flight, and then instead of multiplying it by the max values I’m simply using it raw. ScaleInputAcceleration and ConstrainInputAcceleration have been overridden to basically do nothing during flight, and GetMaxSpeed/GetMaxAcceleration simply return a massive float so that nothing gets truncated.

For the most part, this has been a great solution. It works perfect in single player and keeps things working in multiplayer. However, I played a very high latency game the other day with a European and found that during periods of very bad lag, if you are the client and are flying you launch forward HARD, almost as if your rocket boosters gained 1000x power for half a second. Now that I’m aware, I’m noticing a very similar but more subtle effect in low latency games too.

I pretty much know at this point that this has something to do with my unbounded Max values. I’m guessing it also has something to do with the way unreal tries to catch up after a really bad lag. What I do not know is exactly where this behavior would be.

Am I thinking about this problem completely wrong, or am I just missing a piece? Where would the logic be for catching up during periods of lag?