User chose fundamentals-first after M1 landed: indoor walking is
untested (M1 only verified outdoor + doorway), indoor lighting is
broken, camera clips into walls indoors. Better to fix indoor
foundations before stacking combat on top.
Three sub-phases proposed for the new M2:
1. Camera correctness (~1 day)
2. Indoor collision audit (~1 week)
3. Indoor lighting basics (~1-2 weeks)
Combat ("Kill a drudge") slides to M3.
Next session opens with superpowers:brainstorming to scope the
demo scenario + agree on sub-phase boundaries + update the
milestones doc + CLAUDE.md to formalize the reorder.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.5 KiB
Session handoff — 2026-05-16
What landed this session
M1 — "Walkable + clickable world" — ✅ LANDED on main at fb92122.
All four M1 demo targets work end-to-end retail-faithfully:
- Walk through Holtburg without getting stuck (L.2 collision) — outdoor only verified
- Open the inn door (B.4c)
- Click an NPC and see dialogue (B.4b + Phase B.6)
- Pick up an item from the ground (B.5 + Phase B.6)
Important caveat: the M1 demo specifically did NOT test:
- Walking around inside the inn (just the doorway)
- Going up stairs
- Indoor-to-indoor transitions
- Indoor lighting correctness
These were assumed to "probably work" because outdoor walking does. They likely don't.
Main branch history (newest first)
| SHA | Title |
|---|---|
5d79dd3 |
docs: session handoff 2026-05-16 (this doc; will be overwritten when you read this) |
fb92122 |
milestone: M1 landed; flip "currently working toward" to M2 |
d640ed7 |
feat(retail): Phase B.6 — server-driven auto-walk done right |
b5da17d |
feat(retail): Commit B — retail-faithful AP cadence + screen-rect picker |
e2bc3a9 |
(base — docs(CLAUDE.md): document Ghidra MCP + WireMCP availability) |
Phase B.6 (today's big landing) — what it actually did
Replaced the chain of Commit-B workarounds that compensated for ACE's MoveToChain getting cancelled by a leaked user-MoveToState packet during inbound auto-walk. The fix was architectural:
ApplyAutoWalkOverlay → DriveServerAutoWalk— auto-walk drives the body's velocity + motion state + animation cycle DIRECTLY from the wire-supplied path data. No player-input synthesis. Mirrors retail'sMovementManager::PerformMovementcase 6 (decomp0x00524440) which never touches the user-input pipeline during server-controlled auto-walk.- Wire-layer guard retained at
GameWindow.cs:6419as a semantic statement (user-MoveToState packets are for user-driven motion intent), NOT as the band-aid the deleted 500ms grace period was. - Walk/run threshold = 1.0m (matches user-observed retail behaviour; ACE's wire-default 15.0f is ignored — overridden in
BeginServerAutoWalkvia constRetailWalkRunThresholdMeters). Formula from decomp0x0052aa00 MovementParameters::get_command:running = (initialDist - distance_to_object) >= threshold, one-shot at chain start. - Animation cycle plumbed for moving-forward (RunForward/WalkForward) AND turn-first phase (TurnLeft/TurnRight via
_autoWalkTurnDirectionThisFrame). - Pickup gate corrected to check
BF_STUCK(acclient.h:6435, bit0x4) — signs (pwd=0x14) blocked; spell components (pwd=0x10) allowed. - R-key dispatches by target type — creature → SendUse, pickupable → SendPickUp, useable → SendUse, else toast.
- AP cadence reverted to retail's two-branch
ShouldSendPositionEventgate (acclient_2013_pseudo_c.txt:700233-700285). Effective rates: 0 Hz idle, ~1 Hz smooth motion, per-event on cell/plane changes, 0 Hz airborne.ApproxPlaneEqualhelper added.
Issues closed: #63, #69, #74, #75.
New rules / preferences captured this session
-
No workarounds without explicit approval. CLAUDE.md "How to operate" +
memory/feedback_no_workarounds.md. Band-aids, grace periods, suppression flags, retry loops forbidden unless the user explicitly approves or it's a deliberate new-feature design. -
No milestone demo videos. CLAUDE.md "milestone discipline" rule #3 +
memory/feedback_no_demo_videos.md. Milestones land via text-only artifacts. -
Graceful client shutdown via
CloseMainWindow. CLAUDE.md "Logout-before-reconnect" section.Stop-Processis a hard kill — leaves ACE's session marked logged-in for ~3+ min before timeout.
Direction redirect at session end
The originally-planned M2 — "Kill a drudge" is being deferred in favor of fundamentals-first work. User's stated reasoning: indoor walking, physics correctness, and lighting are all untested or broken, and building combat on top of an unverified-indoor foundation would compound problems.
New M2 candidate — "Indoor walkability." Demo scenario candidate: walk into the Holtburg inn, climb to the second floor, look around, walk back out — all with sensible camera + correct indoor lighting + collision-clean. Three sub-phases proposed:
| Phase | Scope | Estimate |
|---|---|---|
| Camera correctness | Sphere-cast from player to camera position; snap to first wall hit; lerp recovery when clear. Prevent camera from dipping below ground. Indoor-specific but applies everywhere. | ~1 day |
| Indoor collision audit | Walk every floor of the Holtburg inn (and a nearby small dungeon if time). Document each off-feeling spot — stairs, narrow halls, EnvCell-to-EnvCell transitions, EnvCell-to-outdoor seams. Fix scoped per finding. | ~1 week |
| Indoor lighting basics | Tightly scoped: torch-light pools + proper indoor ambient (dim). Defer fire/lamp/glow particles + dynamic-light count optimization to M5. Touches shader pipeline (modern bindless path) + per-object light selection. | ~1-2 weeks |
Order matters: camera fix first (you can't honestly audit collision while the camera fights you), then collision audit (find the bugs), then lighting (the visual unlock).
This milestone has not been formally renamed in docs/plans/2026-05-12-milestones.md yet. The doc still says "M2 — Kill a drudge." The next session should brainstorm the new milestone (using superpowers:brainstorming), agree on the demo scenario, scope the sub-phases, then update the milestones doc + CLAUDE.md to reflect the reorder. Combat slides to M3.
Test baseline
- Core.Net: 294/294 ✅
- Core: 1073/1081 (8 pre-existing Physics failures — BSPStepUp + MotionInterpreter; unchanged baseline)
Environment reminders
- ACE running locally on
127.0.0.1:9000(testaccount / testpassword /+Acdreamat0x5000000A). - DAT directory:
%USERPROFILE%\Documents\Asheron's Call. - Worktree branch
claude/vigilant-golick-9433e1has the full 20-commit Phase B.6 history; main has one squashed commit (d640ed7). - WorldBuilder submodule needs
git submodule update --init references/WorldBuilderin fresh worktrees.
Open issues worth tracking
- #61 — AnimationSequencer link→cycle frame-0 flash on door swing. LOW.
- #64 — Local-player pickup animation does not render. LOW.
- #70 — Triangle apex/size DAT sprite. LOW.
- #71 — WorldPicker Stage B polygon refine. LOW.
- #72 — cdb probe to confirm
omega.z = π/2base rate. LOW. - #73 — Retail-message centralization. Per-feature, ongoing.
None block the new indoor milestone. All M7 polish.