Workflow-produced R4 research (3 docs, 2,541 lines):
- r4-moveto-decomp.md: all 33 MoveToManager members verbatim
(0x00529010-0x0052a987) + the MovementManager type-6/7/8/9 relay +
MovementParameters::get_command. HandleUpdateTarget CONFIRMED on
MoveToManager (0x0052a7d0 — closes the R3 negative result; object
moves are DEFERRED until the first target-update callback). Walk-vs-
run = the CanCharge rule exactly (can_charge OR can_run && dist-gap >
walk_run_threshhold, riding hold_key_to_apply into DoInterpretedMotion
— MoveToManager never calls set_hold_run). Sticky handoff located
(empty queue + 0x80 → StickTo). fail_progress_count is WRITE-ONLY in
retail (no give-up threshold — do not invent one). 8-class BN
artifact ledger.
- r4-ace-moveto.md: 16 flagged ACE-isms, all retail-verified — incl. a
stale-member read (MoveToPosition checks the PREVIOUS move's
UseFinalHeading), a field transposition (InitializeLocalVars zeroes
DistanceToObject where retail zeroes the flags word), a dropped
BeginNextNode (ACE turns start one tick late), a UseTime gate
inversion, and the canceling CanCharge default+fast-path pair.
Blast radius: acdream has THREE independent approximations of this
one mechanism (DriveServerAutoWalk / RemoteMoveToDriver /
ServerControlledLocomotion) + an outdated chase/flee claim in
RemoteMoveToDriver's class doc.
- r4-port-plan.md: 7 pins (P1 blocker: retail interrupts current
movement on EVERY UM but ACE sends a companion mt-0 echo after each
MoveTo — needs a discriminator pin before V5; P3: heading_diff's
TurnLeft mirror needs one Ghidra decompile of 0x00528fb0; P4:
type-6/8 moves need a minimal TargetTracker adapter until R5),
17 gaps M1-M17, commits V0-V6. Retires AD-8/AD-9/AP-8/AP-9 + TS-36.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>