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>
This commit is contained in:
parent
a45c21ee51
commit
b1d8e122ed
3 changed files with 191 additions and 0 deletions
16
tools/cdb-scripts/run_walk_run_trace.ps1
Normal file
16
tools/cdb-scripts/run_walk_run_trace.ps1
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
$cdb = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe"
|
||||
$script = "C:\Users\erikn\source\repos\acdream\tools\cdb-scripts\walk_run_motion_trace.cdb"
|
||||
$log = "C:\Users\erikn\source\repos\acdream\tools\cdb-scripts\walk_run_motion_trace.log"
|
||||
|
||||
if (Test-Path $log) { Remove-Item $log }
|
||||
|
||||
Write-Host "Attaching cdb to acclient.exe..."
|
||||
Write-Host "Once attached, do this in retail:"
|
||||
Write-Host " 1. Stand still 2s"
|
||||
Write-Host " 2. Hold shift+W (walk) 4s"
|
||||
Write-Host " 3. Release SHIFT only, keep W, 4s (this is what we want to capture)"
|
||||
Write-Host " 4. Release W"
|
||||
Write-Host " 5. Wait for cdb to detach (or Ctrl+C this PS to detach manually)"
|
||||
Write-Host ""
|
||||
|
||||
& $cdb -pn acclient.exe -cf $script *>&1 | Tee-Object -FilePath "$log.console"
|
||||
Loading…
Add table
Add a link
Reference in a new issue