acdream/docs/research
Erik de129bc164 feat(motion): L.3 M1 — fresh InterpolationManager port + retail spec
Rewrites src/AcDream.Core/Physics/InterpolationManager.cs from the spec
in docs/research/2026-05-04-l3-port/04-interp-manager.md. Public API
preserved (Vector3-returning AdjustOffset, Enqueue, Clear, IsActive,
Count) so PositionManager + GameWindow callers continue to compile;
internals are full retail spec.

Bug fixes vs prior port (audit 04-interp-manager.md § 7):

  #1  progress_quantum accumulates dt (sum of frame deltas), not step
      magnitude. Retail line 353140; the prior port's `+= step` made
      the secondary stall ratio meaningless.

  #3  Far-branch Enqueue (dist > AutonomyBlipDistance = 100m) sets
      _failCount = StallFailCountThreshold + 1 = 4, so the next
      AdjustOffset call's post-stall check fires an immediate blip-to-
      tail snap. Retail line 352944. Prior port silently drifted
      toward far targets at catch-up speed instead of teleporting.

  #4  Secondary stall test ports the retail formula verbatim:
      cumulative / progress_quantum / dt < CREATURE_FAILED_INTERPOLATION_PERCENTAGE.
      Audit notes the units are 1/sec (likely Turbine bug or x87 FPU
      misread by Binary Ninja) — mirrored byte-for-byte regardless.

  #5  Tail-prune is a tail-walking loop, not a single-tail compare.
      Multiple consecutive stale tail entries within DesiredDistance
      (0.05 m) of the new target collapse together. Retail line 352977.

  #6  Cap-eviction at the HEAD when count reaches 20 (already correct
      in the prior port; verified).

New API: Enqueue gains an optional `currentBodyPosition` parameter so
the far-branch detection can reference the body when the queue is
empty. Backward-compatible (default null = pre-far-branch behavior).

UseTime collapsed into AdjustOffset's tail (post-stall blip check)
since acdream has no per-tick UseTime call separate from
adjust_offset; identical semantic outcome.

State fields renamed to retail names with sentinel values:
  _frameCounter, _progressQuantum, _originalDistance (init = 999999f
  sentinel per retail line 0x00555D30 ctor), _failCount.

Tests:
- 17/17 InterpolationManagerTests green.
- New test Enqueue_FarBranch_PrearmsImmediateBlipOnNextAdjustOffset
  pins the bug #3 fix: enqueueing 150 m away triggers a same-tick
  blip (delta length ≈ 150 m), and the queue clears.

Spec tree: 17 research docs (00–14) under docs/research/2026-05-04-l3-port/.
00-master-plan + 00-port-plan describe the 8-phase rollout. 01-per-tick,
03-up-routing, 04-interp-manager, 05-position-manager-and-partarray,
06-acdream-audit, 14-local-player-audit are the L.3 spec used by this
commit and the M2 follow-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 14:56:42 +02:00
..
2026-05-01-retail-motion-trace fix(motion): jump direction, AutoPos cadence, backward/strafe wire & anim 2026-05-02 16:11:15 +02:00
2026-05-02-remote-entity-motion docs(spec): Phase L.3 — Remote Entity Motion Conformance design 2026-05-02 18:12:18 +02:00
2026-05-03-remote-anim-cycle docs(research): investigation prompt for remote-anim-cycle bug 2026-05-03 19:59:22 +02:00
2026-05-04-l3-port feat(motion): L.3 M1 — fresh InterpolationManager port + retail spec 2026-05-05 14:56:42 +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-pes-pseudocode.md feat(vfx): Phase C.1 — PES particle renderer + post-review fixes 2026-04-28 22:47:11 +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
2026-04-28-sky-cloud-material-trace.md feat(vfx): Phase C.1 — PES particle renderer + post-review fixes 2026-04-28 22:47:11 +02:00
2026-04-30-precipice-slide-pseudocode.md fix(physics): #32 L.2c precipice edge-slide context 2026-04-30 08:04:37 +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