From df315a96548ea2289d533dad65f11f68e01b4f79 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 21 May 2026 18:44:42 +0200 Subject: [PATCH] =?UTF-8?q?docs(cdb):=20A6.P1=20=E2=80=94=20README=20for?= =?UTF-8?q?=20the=20cdb=20probe=20+=20runner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documents prerequisites (PDB match, cdb install, retail+ACE running), per-scenario invocation, the 9-scenario tag table, and the parallel acdream capture command. Includes the CLAUDE.md cdb watchouts inline so probe operators don't have to chase them. Co-Authored-By: Claude Opus 4.7 (1M context) --- tools/cdb/README-a6-probe.md | 99 ++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 tools/cdb/README-a6-probe.md diff --git a/tools/cdb/README-a6-probe.md b/tools/cdb/README-a6-probe.md new file mode 100644 index 0000000..83e1762 --- /dev/null +++ b/tools/cdb/README-a6-probe.md @@ -0,0 +1,99 @@ +# A6.P1 cdb probe — usage + +Phase A6.P1 cdb probe spike (2026-05-21). Captures retail's per-tick BSP +collision response state for paired comparison against acdream. + +## Files + +- `a6-probe.cdb` — the 7-breakpoint cdb script (see comments inside). +- `a6-probe-runner.ps1` — PowerShell wrapper that attaches cdb to live retail. + +## Prerequisites + +1. **Retail binary matches our PDB.** Verify with: + ```powershell + py tools\pdb-extract\check_exe_pdb.py "C:\Turbine\Asheron's Call\acclient.exe" + ``` + Expected: `=== MATCH: this exe pairs with our acclient.pdb ===` + +2. **cdb installed.** Microsoft Store WinDbg installs cdb at + `C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe`. 32-bit + required for acclient.exe. + +3. **Retail running and in-world.** Launch retail, log into your character, + navigate to the scenario start point. + +4. **ACE running locally on 127.0.0.1:9000.** + +## Usage + +For each of the 9 A6.P1 scenarios: + +```powershell +# 1. Position retail character at scenario start (e.g., outside Holtburg inn). +# 2. Launch the probe with a scenario tag: +.\tools\cdb\a6-probe-runner.ps1 -ScenarioTag "scen1_inn_doorway" + +# 3. cdb attaches; "a6-probe armed: BPs 1-7 set" appears in console. +# 4. In the retail client window, perform the scripted walk for this scenario. +# 5. cdb auto-detaches at 50K total hits (cleanly via qd; retail keeps running). +# 6. Log filed at docs\research\2026-05-21-a6-captures\scen1_inn_doorway\retail.log +``` + +## The 9 scenarios + +Per the A6 design spec, in capture order: + +| # | Tag | Walk script | +|---|---|---| +| 1 | `scen1_inn_doorway` | Walk forward through door, stop just inside | +| 2 | `scen2_inn_stairs` | Walk up 4 steps, stop on landing | +| 3 | `scen3_inn_2nd_floor` | Walk forward 3 m, sidestep 1 m, walk back | +| 4 | `scen4_cottage_cellar` | Walk to cellar opening, descend 2 steps | +| 5 | `scen5_sewer_entry` | Walk into portal, then walk 2 m forward inside | +| 6 | `scen6_sewer_first_stair` | Walk down full stair flight | +| 7 | `scen7_sewer_inter_room` | Walk through portal, stop 1 m past | +| 8 | `scen8_sewer_chamber` | Walk in, traverse center, walk out other side | +| 9 | `scen9_sewer_corridor` | Walk full length end-to-end | + +## Pairing with acdream + +For each scenario, run acdream IN PARALLEL with the same scripted walk: + +```powershell +$env:ACDREAM_DAT_DIR = "$env:USERPROFILE\Documents\Asheron's Call" +$env:ACDREAM_LIVE = "1" +$env:ACDREAM_TEST_HOST = "127.0.0.1" +$env:ACDREAM_TEST_PORT = "9000" +$env:ACDREAM_TEST_USER = "testaccount" +$env:ACDREAM_TEST_PASS = "testpassword" +$env:ACDREAM_DEVTOOLS = "1" +$env:ACDREAM_PROBE_PUSH_BACK = "1" +$env:ACDREAM_PROBE_INDOOR_BSP = "1" +$env:ACDREAM_PROBE_CELL = "1" +$env:ACDREAM_PROBE_CELL_CACHE = "1" +$env:ACDREAM_PROBE_CONTACT_PLANE = "1" + +dotnet run --project src\AcDream.App\AcDream.App.csproj --no-build -c Debug 2>&1 | + Tee-Object -FilePath "docs\research\2026-05-21-a6-captures\scen1_inn_doorway\acdream.log" +``` + +The `[push-back]`, `[push-back-disp]`, `[push-back-cell]` lines in +`acdream.log` pair with the `[BP1]..[BP7]` lines in `retail.log` via +scenario tag. + +## Known watchouts + +Per [`CLAUDE.md`](../../CLAUDE.md#known-watchouts): + +- **High BP hit rates cause retail lag.** 50K threshold is the calibrated + ceiling that keeps retail responsive without triggering ACE timeout. +- **`qd` (quit detached) is forbidden in BP actions** per CLAUDE.md cdb + watchout. The a6-probe.cdb script puts `qd` ONLY in the threshold + branch, NOT directly in a BP action's primary command list. Verify this + is preserved if editing. +- **Killing cdb kills retail.** `qd` detaches cleanly; `Stop-Process` does + not. If you must interrupt mid-capture, press Ctrl-Break in the cdb + console. +- **acclient.exe is 32-bit + uses thiscall.** `this` is in `ecx`. Struct + field offsets in the script come from `docs/research/named-retail/acclient.h`.