FSavedMove_Character::CanCombineWith compares movement base pointers, so moves never combine on Movable bases

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

  1. Place a floor StaticMeshComponent with Mobility = Movable (it doesn’t need to move).
  2. PIE with a server and one client, client frame rate above the net send rate (60 Hz).
  3. 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