slb: the seek chunk gives the data offset structurally, and breaks the 28 ties

The ties needed a different signal, not a longer scan. Banks carry one: a seek
chunk sitting on a packet boundary, so seek_pos % 2048 IS the data offset. On
the 6033 labelled banks with a seek before their first RIFF, 6031 agree
(99.97%) -- better than the packet scan and structural rather than statistical,
so scan_data_offset now tries it first.

On the scan's 28 ties it resolves 26 correctly and 0 wrongly (2 have no usable
seek). Combined rule scores 7354/7358 = 99.95%, up from 99.62%. 762 of the 1495
RIFF-less banks carry a seek, so the signal exists where it is needed.

Also ruled out, since a wrong offset was this page's whole subject: the header
is not audio being discarded. Adding 0 to the candidate set, it wins 6 of 7358.

7 disc tests pass.
This commit is contained in:
Sylpheed RE agent
2026-08-26 04:32:23 +00:00
parent de5ea35452
commit 6044ba49a0
4 changed files with 67 additions and 8 deletions

View File

@@ -35,8 +35,13 @@ mistaken a constant derived from `eng\etc\` for a property of the format. See
at *exactly* 1392 behind a zero-filled header, i.e. a zero-length leading
region, which both the old code and the new derivation already handle.
**Still open**: the 28 offset-scan ties, and ❔ why 69.8 % of banks declare more
`data` than they store (see
**Closed 2026-08-26**: the 28 offset-scan ties. A bank's `seek` chunk sits on a
packet boundary, so `seek_pos % 2048` is a second and structural derivation of
the offset (99.97 % on the labelled set). It resolves 26 of the 28 correctly and
none wrongly; the combined rule is 99.95 %.
**Still open**: ❔ why 69.8 % of banks declare more `data` than they store, and
❔ why the offset takes exactly four values by directory (see
[`structures/slb-data-offset.md`](structures/slb-data-offset.md)).
---