Summary
In FSavedMove_Character::CanCombineWith (CharacterMovementComponent.cpp), the dynamic-base check compares two FMovementBaseInterfaceData pointers (&StartMovementBaseInterfaceData vs &NewMove->StartMovementBaseInterfaceData). They always point into different saved moves, so the check always fails and client moves never combine on a Movable base, even when both moves are on the same base. The struct’s value operator!= is never used. Likely fix: if (*OldMovementBaseInterfaceData != *NewMovementBaseInterfaceData).
What Type of Bug are you experiencing?
Gameplay
Steps to Reproduce
- Place a floor StaticMeshComponent with Mobility = Movable (it doesn’t need to move).
- PIE with a server and one client, client frame rate above the net send rate (60 Hz).
- Walk on the floor as the client, with logging or a breakpoint where CanCombineWith returns false.
Expected Result
Consecutive moves on the same, unchanged base combine, as they do on a Static floor.
Observed Result
Every combine is refused at the base pointer comparison, so the client sends two uncombined moves per packet while standing on any Movable base. Setting the floor to Static makes moves combine normally.
Affects Versions
5.8
Platform(s)
Windows