WP-006: Phantom archive format verification (Gen 1 vs Gen 2)
Status: 📦 Queued Phase: 1 — Format Research (follow-on to the Engine Lineage finding in WP-005) Depends on: — Companion EC: — (single hex dump; no checklist needed) Estimated effort: 1 minute
Goal
Determine whether Scooby-Doo! Phantom of the Knight’s archive format is
Gen 1 (TGIFILE.ART, same as Showdown) or Gen 2 (MMFW wrapper,
same as Jinx). The Rich Header data classifies Phantom as Gen 1 by
toolchain (identical to Showdown’s Linker 5.10 build 8047), but the
archive format is the other half of the generation classification and
hasn’t been inspected on the Phantom disc yet.
Background
The Phase 1 Engine Lineage finding identified three format generations: Gen 1 (Showdown / Phantom predicted), Gen 2 (Jinx), Gen 3 (Case File #1
- Case File #2 predicted). Toolchain build numbers and archive format
coincide across generation boundaries — same Linker 5.10 build 8047
appears with
TGIFILE.ART(Showdown); same build 8168 appears withMMFW(Jinx); both 8168 and 8797 appear withMMFW(Case File #1).
Phantom’s Rich Header matches Showdown’s exactly (build 8047). The
prediction is that Phantom’s archives are therefore also Gen 1
TGIFILE.ART. But Phantom shipped in Aug 2001 and Jinx in Oct 2001 —
TerraGlyph cut the Gen 2 format somewhere in that window, and we don’t
know yet which side of the cut Phantom lands on.
Locking this in matters for:
docs/01-VISION.mdEngine Lineage table — currently shows Phantom as Gen 1 with archive format flagged unverifieddocs/formats/tgifile-art.mdCross-title verification section- The Phantom row in the eventual
ADGameDescriptiondetection table’s generation flag
Scope
In scope:
- Mount Phantom’s ISO (or copy the archive files to
tools/exes/phantom/per the project convention) - Identify archive file(s) at the disc root or under
scooby\ - Run
Format-Hexon the first 16 bytes of the largest archive file - Compare against:
- Gen 1 marker:
45 00 00 00(Showdown’sTGIFILE.ARTopening —group_count= 69) - Gen 2 marker: ASCII
MMFWat offset 0
- Gen 1 marker:
- If the first-marker check is Gen 1, run two additional structural checks (per WP-003 baseline — the prior version of this WP would have given a Gen 1 verdict on coincidence-prone evidence). These turn a 4-byte coincidence into a structural verdict:
- Header layout check — Phantom’s
TGIFILE.ARTshould match the corrected Gen 1 layout from tgifile-art.md §Header layout:asset_countat offset0x0118(uint32LE, plausible small integer in the low-thousands range; Showdown’s is 453). If it’s at0x011Cinstead, Phantom is a Gen 1.5 variant worth recording, not vanilla Gen 1. - Name-table check — bytes at offset
0x0F60should begin with the 68-byte name-record pattern (4-byteuint32LEid with type-tag high byte in{0x10, 0x20, 0x31–0x3F}, followed by an ASCII string starting withROOM_,OBJ_, orANIM_). If the first record at0x0F60decodes as aROOM_*name, Phantom is structurally Gen 1.
- Header layout check — Phantom’s
- Update the two doc references with the verdict (plus any structural surprises)
Out of scope:
- Decoding any Phantom archive payload (that’s Phase 2+ once Showdown’s
TGIFILE.ARTpayload format is cracked) - Bit-level comparison of Phantom’s
Scooby.exeagainst Showdown’s (interesting trivia, not needed for this verdict) - Anything else on the Phantom disc
Dependencies
- Phantom ISO mountable (already on disk at
C:\pcloud\SCOOBY\Scooby Doo Phantom of the Knight.iso) Format-Hex(built into PowerShell)
Exit criteria
- The verdict is binary — Phantom is Gen 1 or Phantom is Gen 2 — recorded in both:
docs/01-VISION.mdEngine Lineage table (the Phantom row’s “Archive” cell stops saying “unverified”)docs/formats/tgifile-art.mdCross-title verification section (the Phantom bullet stops saying “predicted”)
- The hex bytes that produced the verdict are pasted into the appropriate format spec (
tgifile-art.mdif Gen 1,mmfw-container.mdif Gen 2). - If verdict is Gen 1: the two structural checks from §Scope (header layout per WP-003 corrected offsets + name-table sanity at
0x0F60) both pass, OR any deviation is documented as a “Phantom Gen 1.x variant” finding in tgifile-art.md.
Deliverables
- Updated
docs/01-VISION.md— Engine Lineage table Phantom row - Updated
docs/formats/tgifile-art.md— Cross-title verification - Possibly updated
docs/formats/mmfw-container.md— only if Phantom turns out to be Gen 2
Notes
- Expected result: Gen 1. The build-pipeline upgrade that introduced Gen 2 (newer linker 8168, dropped MASM 6.14 + cvtres) coincides with the archive format change, and Phantom’s Rich Header shows the old toolchain (linker 8047). If the format follows the toolchain, Phantom is Gen 1.
- If the result is unexpectedly Gen 2, that’s meaningful: it would mean the engine evolved during a single linker build cycle, with archive format changing at a different cadence than toolchain. Worth a one-paragraph follow-up in
docs/formats/scooby-exe.mdFindings → cross-generation analysis. - Worth caching while you’re at it: since you’ll have the Phantom disc mounted, copy
Scooby.exe(and the archive file you Format-Hex’d) intotools/exes/phantom/per the tools/exes/ README. Future analysis won’t need to re-mount.