acdream/docs/research
Erik 186a584404 feat(anim): Phase L.1c port MoveTo path data + per-tick steer
Root-causing the user-reported "monsters disappearing some time +
laggy/jittery locomotion" via systematic-debugging Phase 1: our
UpdateMotion parser kept only speed/runRate/flags from a movementType
6/7 packet and discarded Origin (destination), targetGuid, and the
distance/walkRunThreshold/desiredHeading half of MovementParameters.
The integrator consequently held Body.Velocity at zero during MoveTo
("incomplete state" stabilizer 882a07c), so the body froze with legs
animating until UpdatePosition snap-teleported it — sometimes outside
the visible window (disappearing) — and constant-velocity drift along
the old heading between snaps produced jitter on every UP correction.

The 882a07c stabilizer was deliberately conservative because the state
WAS incomplete. Completing the data plumbing makes its restriction
moot: with the full MoveTo payload captured, the body solver has every
field retail's MoveToManager::HandleMoveToPosition (0x00529d80) reads.

Why: server re-emits MoveTo packets ~1 Hz with refreshed Origin while
chasing — verified in the live log (guid 0x800003B5 seq 0x01FE→0x0204
all show different cell/xyz floats). Those are heading updates we'd
been throwing away. With the full payload retained, the per-tick driver
steers body orientation toward Origin (±20° snap tolerance, π/2 rad/s
turn rate above tolerance) and lets apply_current_movement fill in
Velocity from the existing RunForward cycle — no new motion path,
just the right heading.

Scope is the minimum viable subset: target re-tracking, sticky/StickTo,
fail-distance progress detector, and sphere-cylinder distance are
server-side concerns we don't need (server's emit cadence handles all
of them). MoveToObject_Internal target-guid resolution is also skipped
— Origin is refreshed each packet, so the effective target tracks the
real entity even without a guid lookup.

Cross-references:
- docs/research/named-retail/acclient_2013_pseudo_c.txt — MoveToManager
  + MovementParameters::UnPackNet (0x0052ac50) + apply_run_to_command
  (0x00527be0). 18,366 named PDB symbols make this the primary oracle.
- references/ACE/Source/ACE.Server/Physics/Animation/MoveToManager.cs
  — port aid; flagged divergences (WalkRunThreshold default, set_heading
  snap, inRange one-shot) called out in the new pseudocode doc.
- docs/research/2026-04-28-remote-moveto-pseudocode.md — pseudocode +
  ACE divergence flags + out-of-scope list per CLAUDE.md mandatory
  workflow (decompile → cross-reference → pseudocode → port).

Tests: 1404 → 1412 (parser type-7 path retention + type-6 target guid
retention; driver arrival, in-tolerance snap, beyond-tolerance step,
behind-target shortest-path turn, arrival preserves orientation,
Origin→world landblock-grid arithmetic).

Pending visual sign-off — handoff stabilizer 882a07c was the last
commit the user tested.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 21:49:22 +02:00
..
data docs(research): commit named retail decomp + spells.csv (foundation) 2026-04-25 17:27:19 +02:00
decompiled research: full acclient.exe decompilation — 22,225 functions, 688K lines 2026-04-12 23:25:51 +02:00
deepdives docs+feat: 13 retail-AC deep-dives (R1-R13) + C# port scaffolds + roadmap E-H 2026-04-18 10:32:44 +02:00
named-retail docs(research): canonical retail keymap + dump-keymap tool 2026-04-25 23:01:58 +02:00
retail-ui feat(ui): Phase D.2a — VitalsPanel wired into GameWindow + backend pivot 2026-04-25 00:43:46 +02:00
2026-04-12-movement-deep-dive.md docs: movement deep dive — AC2D + holtburger cross-reference 2026-04-12 21:52:12 +02:00
2026-04-21-animation-audit.md docs(research): animation-pipeline decompile audit — no real gaps 2026-04-21 21:18:45 +02:00
2026-04-21-sky-deep-audit.md fix(sky): scale keyframe Luminosity/Transparent/MaxBright from percent → fraction 2026-04-22 17:38:44 +02:00
2026-04-22-sky-lighting-decompile.md sky(phase-1): revert speculative tint, add ACDREAM_DUMP_SKY diagnostic 2026-04-23 18:06:52 +02:00
2026-04-23-daygroup-selection.md sky(phase-3c): port retail FUN_00501990 DayGroup picker (uniform LCG) 2026-04-24 08:45:34 +02:00
2026-04-23-lightning-crossfade.md sky(phase-5a): remove DayGroup-name rain hack, ship retail-only Overcast mapping 2026-04-24 11:04:36 +02:00
2026-04-23-lightning-real.md sky(phase-8): retail-faithful night sky + README refresh 2026-04-24 20:34:36 +02:00
2026-04-23-physicsscript.md sky(phase-5a): remove DayGroup-name rain hack, ship retail-only Overcast mapping 2026-04-24 11:04:36 +02:00
2026-04-23-retail-memory-probe.md sky(phase-3g): fix LCG multiplier — 360 (DaysPerYear), not 7620 2026-04-24 10:17:38 +02:00
2026-04-23-sky-dat-schema.md sky(phase-1): revert speculative tint, add ACDREAM_DUMP_SKY diagnostic 2026-04-23 18:06:52 +02:00
2026-04-23-sky-decompile-hunt-A.md sky(phase-1): revert speculative tint, add ACDREAM_DUMP_SKY diagnostic 2026-04-23 18:06:52 +02:00
2026-04-23-sky-decompile-hunt-B.md sky(phase-8): retail-faithful night sky + README refresh 2026-04-24 20:34:36 +02:00
2026-04-23-sky-decompile-hunt-C.md sky(phase-8): retail-faithful night sky + README refresh 2026-04-24 20:34:36 +02:00
2026-04-23-sky-fog.md sky(phase-5a): remove DayGroup-name rain hack, ship retail-only Overcast mapping 2026-04-24 11:04:36 +02:00
2026-04-23-sky-material-state.md docs(sky): port plan for PhysicsScript/fog/lightning/crossfade 2026-04-24 10:53:46 +02:00
2026-04-23-sky-pes-wiring.md sky(phase-5a): remove DayGroup-name rain hack, ship retail-only Overcast mapping 2026-04-24 11:04:36 +02:00
2026-04-23-sky-references-crossref.md sky(phase-1): revert speculative tint, add ACDREAM_DUMP_SKY diagnostic 2026-04-23 18:06:52 +02:00
2026-04-23-sky-retail-verbatim.md sky(phase-1): revert speculative tint, add ACDREAM_DUMP_SKY diagnostic 2026-04-23 18:06:52 +02:00
2026-04-24-lambert-brightness-split.md sky(phase-8): retail-faithful night sky + README refresh 2026-04-24 20:34:36 +02:00
2026-04-26-chorizite-pr-draft.md docs(research): sky/weather investigation handoff + diagnostic tools 2026-04-26 21:40:34 +02:00
2026-04-26-datreaderwriter-reference.md docs(research): sky/weather investigation handoff + diagnostic tools 2026-04-26 21:40:34 +02:00
2026-04-26-sky-investigation-handoff.md docs(research): sky/weather investigation handoff + diagnostic tools 2026-04-26 21:40:34 +02:00
2026-04-28-combat-animation-planner.md feat(anim): Phase L.1c select combat maneuvers 2026-04-28 11:44:17 +02:00
2026-04-28-remote-moveto-pseudocode.md feat(anim): Phase L.1c port MoveTo path data + per-tick steer 2026-04-28 21:49:22 +02:00
acclient_animation_map.md fix(anim): implement adjust_motion — TurnLeft/SideStepLeft play backward 2026-04-13 12:17:26 +02:00
acclient_animation_pseudocode.md research: full animation pseudocode from decompiled acclient.exe 2026-04-13 12:43:44 +02:00
acclient_architecture_map.md docs: comprehensive architecture plan for acdream 2026-04-13 14:23:50 +02:00
acclient_decompiled.c research: decompile acclient.exe terrain/physics via Ghidra headless 2026-04-12 23:18:27 +02:00
acclient_function_map.md docs(research): #9 sweep acclient_function_map.md against PDB symbols 2026-04-25 17:44:07 +02:00
acclient_indoor_transitions_pseudocode.md research: indoor transition pseudocode from ACE + decompiled analysis 2026-04-13 13:56:16 +02:00
transition_pseudocode.md docs(research): collision transition system pseudocode from decompiled + ACE 2026-04-13 23:41:13 +02:00