acdream/docs/research/2026-05-21-a6-captures/scen1_inn_doorway
Erik 1b6d49ea57 fix(cdb): A6.P1 — a6-probe.cdb v3 with C++ float reads
v2 dry-run produced correct hit counts but all %f field values
printed as 0.000000 — including BP6 threshold which the decomp says
must be 0.0871556997f (cos 85°). Root cause: cdb's MASM evaluator
returns dwo(addr) as a 32-bit integer; .printf %f expects a 64-bit
double; passing the integer to %f produces formatted-zero garbage.

Fix: switch all float-reading expressions to @@c++(*(float*)addr).
The C++ evaluator dereferences memory as a float pointer, returning
a proper float that .printf %f formats correctly. Integer reads (%d)
still use MASM dwo() — that works.

For double-indirect (pointer args), the form is
  @@c++(*(float*)(*(unsigned int*)(@esp+N)+offset))
which reads the pointer at [esp+N], adds the offset, and treats the
result as a float pointer.

v2 capture preserved as retail-v2-zero-floats.log audit trail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 19:50:11 +02:00
..
.gitkeep docs(research): A6.P1 — capture directory structure + findings stub 2026-05-21 18:46:56 +02:00
retail-v1-broken-offsets.log fix(cdb): A6.P1 — v1 dry-run lessons + v2 prep tooling 2026-05-21 19:38:31 +02:00
retail-v2-zero-floats.log fix(cdb): A6.P1 — a6-probe.cdb v3 with C++ float reads 2026-05-21 19:50:11 +02:00