Live cdb trace of retail acclient.exe (v11.4186, PDB-matched) capturing the exact function call sequence for a direct walk-to-run motion transition where the user holds shift+W (walk) then releases SHIFT while still holding W (transition to run). Trace bps on: - CPhysicsObj::DoInterpretedMotion (0x0050EA70) - CPartArray::DoInterpretedMotion (0x00518750) - MotionTableManager::PerformMovement (0x0051C0B0) - MotionTableManager::add_to_queue (0x0051BFE0) - MotionTableManager::truncate_animation_list (0x0051BCA0) - CMotionTable::DoObjectMotion (0x00523E90) - CMotionTable::StopObjectMotion (0x00523EC0) Captured trace at tools/cdb-scripts/walk_run_motion_trace.log shows the precise walk-to-run sequence: [79] CPhysicsObj::DoInterpretedMotion: motion=45000005 walk start [82] CMotionTable::DoObjectMotion: motion=45000005 [83] MotionTableManager::add_to_queue: arg1=45000005 arg2=00000001 [89] CPhysicsObj::DoInterpretedMotion: motion=44000007 run start [92] CMotionTable::DoObjectMotion: motion=44000007 [93] MotionTableManager::add_to_queue: arg1=44000007 arg2=00000001 [104] CMotionTable::StopObjectMotion: motion=44000007 run end Critical structural finding for #L.4-walk-run: Retail does NOT call truncate_animation_list during the walk→run transition. truncate_animation_list never fires in the entire 200-hit trace. Retail also does NOT call StopObjectMotion(WalkForward) before add_to_queue(RunForward). Retail just appends the new motion to the queue and lets MotionTableManager (and its CheckForCompletedMotions / remove_redundant_links per-tick cleanup, not yet traced) handle the natural progression. acdream's AnimationSequencer.SetCycle aggressively calls ClearCyclicTail() at line 430 BEFORE enqueuing the new cycle, which destroys the in-flight walk cycle's frames. The new run cycle is enqueued but _currNode is left in a state that doesn't smoothly continue — visible to the user as "it just blips forward walking, AS SOON as press another key like turning, its starts running" (the next motion event re-fires SetCycle which finally aligns state). Fix is a structural refactor of SetCycle to mirror retail's "additive queue with auto-cleanup" semantics. Out of scope for this research commit; filed as #L.4 in the next ISSUES.md entry. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
0 lines
Text
0 lines
Text