Going to dig this thread up to share what I have now.
Major credit to Ralek for reversing most of the movement system.
Code:
[Flags]
public enum MovementFlag
{
None = 0x00000000,
Forward = 0x00000001,
Backward = 0x00000002,
StrafeLeft = 0x00000004,
StrafeRight = 0x00000008,
TurnLeft = 0x00000010,
TurnRight = 0x00000020,
PitchUp = 0x00000040,
PitchDown = 0x00000080,
WalkMode = 0x00000100,
OnTransport = 0x00000200,
Unknown = 0x00000400,
Root = 0x00000800,
Falling = 0x00001000,
FallingFar = 0x00002000,
PendingStop = 0x00004000,
PendingStrafeStop = 0x00008000,
PendingForward = 0x00010000,
PendingBackward = 0x00020000,
PendingStrafeLeft = 0x00040000,
PendingStrafeRight = 0x00080000,
PendingRoot = 0x00100000,
Swimming = 0x00200000,
Ascending = 0x00400000,
Descending = 0x00800000,
CanFly = 0x01000000,
Flying = 0x02000000,
SplineElevation = 0x04000000,
SplineEnabled = 0x08000000,
Waterwalking = 0x10000000,
SafeFall = 0x20000000,
Hover = 0x40000000
}
Code:
[Flags]
public enum MovementFlagExtra
{
None = 0x0000,
Unknown1 = 0x0001,
Unknown2 = 0x0002,
Unknown3 = 0x0004,
FullSpeedTurning = 0x0008,
FullSpeedPitching = 0x0010,
AlwaysAllowPitching = 0x0020,
Unknown4 = 0x0040,
Unknown5 = 0x0080,
Unknown6 = 0x0100,
Unknown7 = 0x0200,
InterpolatedPlayerMovement = 0x0400,
InterpolatedPlayerTurning = 0x0800,
InterpolatedPlayerPitching = 0x1000,
Unknown8 = 0x2000,
Unknown9 = 0x4000,
Unknown10 = 0x8000
}
Code:
[Flags]
public enum SplineFlag
{
None = 0x00000000,
Forward = 0x00000001,
Backward = 0x00000002,
StrafeLeft = 0x00000004,
Straferight = 0x00000008,
TurnLeft = 0x00000010,
TurnRight = 0x00000020,
PitchUp = 0x00000040,
PitchDown = 0x00000080,
Done = 0x00000100,
Falling = 0x00000200,
NoSpline = 0x00000400,
Trajectory = 0x00000800,
WalkMode = 0x00001000,
Flying = 0x00002000,
Knockback = 0x00004000,
FinalPoint = 0x00008000,
FinalTarget = 0x00010000,
FinalOrientation = 0x00020000,
CatmullRom = 0x00040000,
Unknown1 = 0x00080000,
Unknown2 = 0x00100000,
Unknown3 = 0x00200000,
Unknown4 = 0x00400000,
Unknown5 = 0x00800000,
Unknown6 = 0x01000000,
Unknown7 = 0x02000000,
Unknown8 = 0x04000000,
Unknown9 = 0x08000000,
Unknown10 = 0x10000000,
Unknown11 = 0x20000000,
Unknown12 = 0x40000000
}
Code:
public enum SplineMode
{
Linear = 0,
CatmullRom = 1,
Bezier3 = 2
}
Code:
public enum SplineType
{
Normal = 0,
Stop = 1,
FacingSpot = 2,
FacingTarget = 3,
FacingAngle = 4
}
Now, a few remarks/facts:
* Monster movement flags don't exist; they're spline flags. This is confirmed.
* SplineMode is sent in SMSG_UPDATE_OBJECT.
* SplineType is what was previously MonsterMoveType.
* Bezier3 doesn't appear to be actually sent; it's most likely only used at the client (citing Ralek).
* It appears players use Catmull-Rom, while all other units use a linear spline.