Merge feature/animation-system-complete — Phase L.1c animation MVP
21 commits porting retail's MoveToManager-equivalent client-side behavior for server-controlled creature locomotion and combat engagement. Shipped as MVP after live visual verification across multiple iteration rounds with the user. Highlights: -186a584— initial Phase L.1c port: extracts Origin / target guid / MovementParameters block from MoveTo packets (movementType 6/7), adds RemoteMoveToDriver per-tick body-orientation steering with ±20° aux-turn-equivalent snap tolerance. -d247aef— corrected arrival predicate semantics + 1.5 s stale-destination timeout for entities leaving the streaming view. -f794832— root-caused "creature won't stop to attack" via two research subagents converging on retail CMotionInterp::move_to_interpreted_state's unconditional forward_command bulk-copy. Lifted ServerMoveToActive flag clearing + InterpretedState bulk-copy out of substate-only branch so Action-class swing UMs (mt=0 ForwardCommand=AttackHigh1) clear stale MoveTo state and zero forward velocity. -ff6d3d0— RemoteMoveToDriver.ClampApproachVelocity caps horizontal velocity at the final-approach tick so body lands EXACTLY at DistanceToObject instead of overshooting through the player. -37de771— bulk-copy ForwardCommand for MoveTo packets too (closed the regression where MoveTo creatures stayed at default ForwardCommand=Ready in InterpretedState and only translated via UpdatePosition snaps). -34d7f4d+e71ed73— AnimationSequencer.HasCycle query + fallback chain (requested → WalkForward → Ready → no-op) at BOTH the OnLiveMotionUpdated path AND the spawn handler. Prevents ClearCyclicTail from wiping the body's cyclic tail when ACE CreateObject carries CurrentMotionState.ForwardCommand pointing to an Action-class motion (e.g. AttackHigh1 from a mid-swing creature) which has no cyclic-table entry — was the "torso on the ground" symptom for monsters seen in combat by a fresh observer. Cross-references: docs/research/named-retail/acclient_2013_pseudo_c.txt (MoveToManager 0x00529680 + 0x0052a240 + 0x00529d80, CMotionInterp::move_to_interpreted_state 0x00528xxx, MovementParameters::UnPackNet 0x0052ac50), references/ACE/Source/ ACE.Server/Physics/Animation/MoveToManager.cs (port aid), references/holtburger/ (cross-check on snapshot-only client behavior), docs/research/2026-04-28-remote-moveto-pseudocode.md (the Phase L.1c pseudocode doc). Tests: 1404 → 1422 (parser type-7 path retention, type-6 target guid retention, driver arrival semantics, retail-faithful chase/flee branches, approach-velocity clamp scenarios, HasCycle present/missing, AttackHigh1 wire layout). Pending follow-ups (filed for future): target-guid live resolution for type 6 packets (residual chase lag), StickToObject sticky-target guid trailing field, full MoveToManager state machine port (CheckProgressMade stall detector, Sticky/StickTo, use_final_heading, pending_actions queue). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
commit
b93dfe95d8
44 changed files with 4580 additions and 301 deletions
|
|
@ -306,6 +306,49 @@ with retail's MMB-hold mouse-look.
|
|||
|
||||
---
|
||||
|
||||
### Phase L.1 — Animation system completion
|
||||
|
||||
**Status:** IN PROGRESS on `feature/animation-system-complete`.
|
||||
|
||||
**Goal:** complete the retail-faithful animation surface beyond the
|
||||
locomotion/jump K-fix series: combat swings, spell casting, emotes, death,
|
||||
item-use, NPC/monster special actions, remote observer parity, and the
|
||||
remaining floating-point polish around style transitions, modifiers, action
|
||||
queues, speed scaling, and PosFrame root motion.
|
||||
|
||||
**Plan of record:** `docs/plans/animation-system-audit.md`.
|
||||
|
||||
**Sub-pieces:**
|
||||
- **L.1a — Audit & inventory.** Map retail named-decomp evidence, ACE
|
||||
cross-references, existing acdream hook points, and current gaps for each
|
||||
animation category. Output: `docs/plans/animation-system-audit.md`.
|
||||
- **L.1b — Command router + motion-state cleanup.** Extract tested
|
||||
`SetCycle` vs `PlayAction` routing, add missing `MotionCommand` constants,
|
||||
and split death `Sanctuary` action from persistent `Dead` substate.
|
||||
- **L.1c — Combat animation wiring.** Combat mode tracking, draw/sheath
|
||||
style transitions, attack swings by stance/power/height, hit reactions,
|
||||
evades/blocks/parries, and death handoff.
|
||||
- **L.1d — Spell casting wiring.** Cast command classification, windup,
|
||||
release, fizzle/interruption, recoil, and school/effect distinctions.
|
||||
- **L.1e — Emotes + postures.** Outbound slash emotes, inbound
|
||||
command-list emotes, and persistent sit/lie/kneel/sleep states.
|
||||
- **L.1f — NPC/monster + item-use coverage.** Scripted gestures, monster
|
||||
special actions, potion/food/scroll/recall cycles, and remote parity.
|
||||
- **L.1g — Polish + conformance.** Style-transition chain, durable
|
||||
modifiers/action queues, root-motion handling, speed scaling, and broad
|
||||
synthetic MotionTable tests.
|
||||
|
||||
**Acceptance:**
|
||||
- `dotnet build` and `dotnet test` green at each commit.
|
||||
- Test count grows by at least 30 with one representative cycle/action test
|
||||
per major animation category.
|
||||
- Every AC-specific behavior cites named retail decomp or ACE/holtburger
|
||||
cross-reference evidence in code comments, tests, or commit notes.
|
||||
- User visual sign-off for local and remote attack, spell, emote, death, and
|
||||
item-use animation parity before marking shipped.
|
||||
|
||||
---
|
||||
|
||||
### Phase J — Long-tail (deferred / low-priority)
|
||||
|
||||
Not detailed here; each gets its own brainstorm when it becomes relevant.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue