acdream/tools/cdb-scripts
Erik b1d8e122ed research(motion): cdb live trace of retail walk-to-run transition
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>
2026-05-03 16:54:34 +02:00
..
run_walk_run_trace.ps1 research(motion): cdb live trace of retail walk-to-run transition 2026-05-03 16:54:34 +02:00
walk_run_motion_trace.log research(motion): cdb live trace of retail walk-to-run transition 2026-05-03 16:54:34 +02:00
walk_run_motion_trace.log.console research(motion): cdb live trace of retail walk-to-run transition 2026-05-03 16:54:34 +02:00