Two memory files landed: 1. Updated memory/project_session_2026_04_17.md — covers all three commits today: -ff325abdebug overlay + mouse controls -7230c15retail UI research + C# scaffold -3f913f113-slice deep-dive marathon + scaffolds + roadmap Includes the "what to build tomorrow" lookup table, the architectural headline findings, and session lessons (Opus-4.7 parallel swarms are worth the cost; keystone.dll landmine; GameEvent dispatcher is the biggest network gap). 2. New memory/project_retail_research_index.md — permanent index for the 20 research docs (6 UI slices + 13 subsystem slices). Quick- lookup table "use this slice when you're doing X". Also captures the critical cross-cutting findings (architecture, wire, dat ranges) and already-extracted retail-faithful formulas for instant reference. This file is the standing invariant: before writing any retail-AC- specific code, open it first to find the matching slice.
4.9 KiB
4.9 KiB
Session 2026-04-17 — Debug overlay → full-day retail-AC research marathon
Timeline (morning → afternoon)
- Morning — Debug overlay (TTF atlas + text batcher + HUD panels)
and input-control tuning (per-mode sensitivity, RMB free-orbit, wheel
zoom, F8/F9 sensitivity). Shipped in commit
ff325ab. - Midday — User requested a deep investigation of the retail AC
client's GUI subsystem. Dispatched 6 parallel Opus-4.7 high-effort
agents, produced a 30,000-word research bundle + C# UI scaffold.
Shipped in commit
7230c15. - Afternoon — User asked to research all remaining major AC
subsystems (R1-R13) while they were AFK for 2 hours. Dispatched 13
parallel Opus-4.7 agents, produced a 78,000-word research bundle +
master synthesis + 5 C# port scaffolds + rewritten roadmap.
Shipped in commit
3f913f1.
What shipped today — three commits on main
| Commit | Title | Insert |
|---|---|---|
ff325ab |
feat(ui): debug overlay + refined input controls | 2,725 |
7230c15 |
docs+feat(ui): retail UI deep-dive research + C# scaffold | 8,042 |
3f913f1 |
docs+feat: 13 retail-AC deep-dives + scaffolds + roadmap | 15,312 |
Total 26,079 lines added, 262 deleted, 55 new files. All three commits green on build + 470 tests.
Key files to know
Research (the goldmine)
docs/research/deepdives/00-master-synthesis.md— start here. Nav hub for all 13 deep-dive slices; has the dependency graph and phase sequencing (E/F/G/H).docs/research/deepdives/r01-…-r13-…— 13 subsystem deep-dives, 78,000 words total, every claim cited.docs/research/retail-ui/00-master-synthesis.md— UI framework synthesis. 6 slice docs total, ~30,000 words.memory/project_retail_research_index.md— permanent quick-lookup index for all 20 research docs.
C# scaffolds (what to build on)
src/AcDream.App/UI/— retail-style widget toolkit (UiRoot,UiElement,UiPanel,UiHost, event types matching retail codes)src/AcDream.Core/Items/ItemInstance.cs— R6 inventory data modelsrc/AcDream.Core/Spells/SpellModel.cs— R1 spell cast state machinesrc/AcDream.Core/Combat/CombatModel.cs— R2 damage mathsrc/AcDream.Core/Audio/AudioModel.cs— R5 audio interfacessrc/AcDream.Core/Vfx/VfxModel.cs— R4 particle data model
Updated
docs/plans/2026-04-11-roadmap.md— rewritten Phase E-H based on the deep-dive synthesis. Old Phase E renamed to J.
Architectural headline findings
- Retail UI widgets live in
keystone.dll, notacclient.exe. We implement our own retained-mode toolkit with retail-faithful event codes (0x01 click, 0x15 drag, 0x3E drop, 0x201 WM_LBUTTONDOWN) and consume the same portal.dat fonts + sprites for visual identity. - Of 94 GameEvents (S→C,
0xF7B0envelope), zero are handled in acdream today. Biggest network-protocol gap; blocks inventory, chat, quest tracking, allegiance. - Motion hooks are the trigger source for audio + VFX + combat timing. R3 motion-hook expansion is the prereq for "feel alive" (Phase E).
- Weather is 95% client-side — deterministic from Portal Year
server clock. No
SetWeatheropcode. - Retail lighting is D3D fixed-function with 8-light cap, NO attenuation inside Range, then hard cutoff. "Feels right" not physical.
Pickup for next session
"What should I do tomorrow?" table:
| If you want to… | Build… |
|---|---|
| Make the world feel alive (footsteps, sword whooshes, spell auras) | Phase E — R3 motion hooks → R5 audio → R4 particles |
| Actually fight monsters | Phase F.3 combat math + F.1 GameEvent dispatcher |
| Cast a buff + recall to lifestone | Phase F.4 spell state machine + F.1 GameEvent |
| See a character sheet | Phase F.2 item model + F.5 attributes panel (UI slice 05) |
| Enter a dungeon | Phase G.3 dungeon streaming (R9) |
| See a sky | Phase G.1 weather/day-night (R12) |
| Create a character in-client | Phase H.4 CharCreate (R7) |
The master synthesis (docs/research/deepdives/00-master-synthesis.md
§10) recommends a specific week-by-week sequence if the user wants
one-thing-at-a-time focus.
Session feedback / lessons
- Opus-4.7 high-effort parallel agents are the right tool for decompile-intensive research. 13-agent swarm for R1-R13 completed in ~13 minutes, producing ~78,000 words of grounded work. Cost is high but quality justifies it for load-bearing research.
- keystone.dll is a landmine for anyone trying to "port the UI faithfully" — the widget toolkit isn't in the decompile we have. Own- toolkit approach is the only viable path.
- Network protocol atlas (R8) is the single biggest unblocker — nearly every other system depends on opcodes we don't handle.