CreateObject's MovementData was being skipped past, so the renderer always fell back to the MotionTable's default style/substate. That's correct for most NPCs and characters but wrong for entities the server explicitly puts into a non-default stance — most visibly the Foundry's Nullified Statue of a Drudge, which the server sends with a combat stance + Crouch ForwardCommand override and which therefore rendered as an upright drudge instead of the aggressive crouched statue you see on the retail client. CreateObject.TryParse now extracts ServerMotionState (Stance + optional ForwardCommand) from the inner MovementData. The header=false layout was confirmed via ACE/.../WorldObject_Networking.cs:326 plus MovementData.cs::Write and InterpretedMotionState.cs::Write. Only the two fields the resolver needs are read; remaining InterpretedMotionState bytes are skipped via the outer length so we don't have to handle alignment of fields we don't care about. MotionResolver.GetIdleFrame now takes optional stanceOverride and commandOverride. Resolution priority is server-stance+command → server-stance + style-default substate → MotionTable default. If the composed cycle key doesn't resolve we fall back to the table default rather than returning null, so a partial server override never makes the entity worse than Phase 6.1. 160 tests green. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Meshing | ||
| Plugins | ||
| Terrain | ||
| Textures | ||
| World | ||
| AcDream.Core.csproj | ||