Vision: ScummVM Engine for The Learning Company Scooby-Doo Games

Project: scooby engine for ScummVM Status: Pre-development — format research Started: 2026-06


Goal

Implement a new ScummVM engine that runs The Learning Company’s Scooby-Doo CD-ROM adventure games on modern hardware via ScummVM, and contribute the engine upstream.

Once complete, players add these games to ScummVM the same way as any other supported title — point ScummVM at their disc or ripped ISO, and play.


Non-Goals


Target Games

All Scooby-Doo CD-ROM adventure titles published by The Learning Company / Passport / Knowledge Adventure between 2000 and 2003, plus a 2007 re-release. Engine sharing across the set is partially confirmed (TerraGlyph trio) and partially open (Case Files) — see the provenance check below.

Title Year ISO file Size Notes
Scooby-Doo! Showdown in Ghost Town 2000 Scooby Doo Showdown in Ghost Town.iso 607 MB Primary RE target
Scooby-Doo! Phantom of the Knight 2001 Scooby Doo Phantom of the Knight.iso 593 MB Secondary target
Scooby-Doo! Jinx at the Sphinx 2001 Scooby Doo Jinx at the Sphinx.iso 554 MB  
Scooby-Doo! Case File #1: The Glowing Bug Man 2002 Case File 1.iso 407 MB  
Scooby-Doo! Case File #2: The Scary Stone Dragon 2003 Case File #2.iso 584 MB  
Scooby-Doo! Case File #3: Frights, Camera, Mystery! 2003 / 2007 re-release Scooby Doo! #3.iso 174 MB Confirmed out of scope (2026-06-03). Disc is a single 174 MB self-contained installer (Scooby-Doo!.exe). PE version resource confirms Macromedia Director engine, published by The Learning Company / Broderbund. No IBS engine payload — not part of this engine lineage. A Director adapter would be a separate project.

Also on disk: ScoobyDoo.iso (221 MB). Identified via the companion archive.org-activity-challenge.url shortcut (pointing to archive.org/details/scooby-dooac2001) as Scooby-Doo! Activity Challenge (2001). This is an edutainment title rather than a point-and-click adventure, so it almost certainly uses a different engine — treat as out of scope unless Phase 1 inspection shows otherwise.

The C:\pcloud\scooby-engine\ directory also contains archive.org-*.url shortcuts for each disc, recording the provenance of the rips.

Provenance check (2026-06): archive.org and MobyGames confirm the five core ISOs are original Learning Company pressings (only Case File #3 is a re-release). Developer attribution splits the list into two eras:

Implication: the “single shared engine” assumption only holds with confidence for the three TerraGlyph titles. Whether the Case Files share that engine is a Phase 1 question, answered by mounting the ISOs and comparing file structures (TGIFILE.ART, Scooby.exe, object.ini).


Engine Lineage (2026-06 finding)

Phase 1 cross-title analysis (Rich Header on each title’s main binary + archive magic-byte inspection — see docs/formats/scooby-exe.md Findings) reveals one engine lineage across three format generations:

Gen Titles Toolchain Archive Config Cutscenes
1 Showdown (2000), Phantom (2001) VC5 + Linker 5.10 build 8047 TGIFILE.ART (raw count + index) INI text (object.ini, Scooby.eng) Bink (binkw32.dll 286 KB)
2 Jinx (2001) VC5 + Linker 5.10 build 8168 MMFW wrapper container TBD (likely INI) Bink + Smacker
3 Case File #1 (2002) VC5 + Linker 5.10 builds 8168 + 8797 + one VC6 file MMFW continues XML via libexpat.dll raw .avi
4 Case File #2 (2003) TBD .bul/.inx bulk archives loose .mps + .xml scripts (on disc, not packed) Bink returned (binkw32.dll 375 KB — newer SDK) + Miles Sound System (mss32.dll)

The Gen 1 → Gen 2 jump (mid-2001) coincides with a TerraGlyph build pipeline upgrade — new linker build, dropped legacy tools (MASM 6.14, cvtres), cleaner single-environment build. The Gen 2 → Gen 3 jump (late 2001 / 2002) coincides with the TerraGlyph shutdown and ImageBuilder Software (IBS) taking over development — confirmed concretely by:

Gen 4 (Case File #2, 2003) is a significant architectural break from Gen 3. Confirmed via full disc inspection (2026-06-03):

This is not a Gen 3 variant — it requires its own adapter.

The TerraGlyph engine codebase continued through IBS via direct code inheritance (object files literally embedded), not just architectural reuse. This is the strongest possible engine-family signal.

Confirmed findings (2026-06-03):

Implementation implication: the scooby ScummVM engine covers one engine lineage with format-version-aware adapters — four archive parsers, two config parsers, three video paths — not four separate engines. The detection table (ADGameDescription) carries a gen flag per entry; the engine branches at the format-version boundaries. Gen 4 (Case File #2) is the most architecturally distant from Gen 1 but still shares the same room/scene management and cursor/inventory core.


Why This Is Feasible

Most engine reverse engineering projects start from fully opaque binary formats. Initial inspection of Showdown in Ghost Town found that this engine is unusually well-structured.

Verified — human-readable as shipped

Verified — handled by existing ScummVM code

Not yet decoded — reverse engineering required

TGIFILE.ART — primary risk area

144 MB proprietary archive. Initial hex inspection has confirmed the two-level index structure; payload decoding remains the sole Phase 1 blocker. See docs/formats/tgifile-art.md for the full byte-level spec.

Confirmed structure (Showdown, 2026-06):

Remaining unknowns:

Remaining investigation:

  1. Decode the F0-opcode payload: attempt RLE with opcode dispatch, then raw indexed bitmap, then truecolor — each tested against entry 0 (~6 MB; the smallest of the first four documented entries — and per WP-003 it’s OBJ_DAPHNE_A, a character sprite, not a background).
  2. Correlate decoded output visually against a known Showdown screenshot.

Execution tracked in WP-001 (Ghidra decode trace), WP-002 (Python decoder + first image extraction), and WP-003 (pre-payload region characterization, ✅ landed 2026-06-02), with companion checklists EC-001 and EC-002.

Success condition: render at least one Showdown background or sprite to PNG/BMP outside the engine, matched visually against the original.

Audio archives

Music.dat, Sfx.dat, Voice.dat. Header structure confirmed (2026-06); index table layout and codec still unresolved.

Confirmed structure (all three files share the same 12-byte header):

Remaining unknowns:

Execution tracked in WP-004.

For Phase 1, codec identification is sufficient — full decode can defer to Phase 3 if ScummVM already supports the codec.

Scooby.exe

Main executable. Ghidra analysis needed to map room transitions, puzzle state, and resource loading — but see Game Logic Strategy for how to keep that scope from spiraling.


Runtime Dependencies (Original Game)


Engine Contract (ScummVM Requirements)

The scooby engine must conform to ScummVM conventions:

Implication: anywhere the original engine relied on DirectX surfaces, threaded resource streams, or implicit Windows-global state, that logic must be re-expressed in ScummVM-compatible form. Architectural drift here is the silent way a ScummVM PR gets bounced — keep it tight from Phase 2 onward.

For the concrete API contract (which classes to subclass, which calls to make, what the upstream PR must satisfy), see docs/02-SCUMMVM-INTEGRATION.md. This vision doc owns the principles; that doc owns the implementation surface.


Game Logic Strategy

Game logic will be reconstructed via two approaches, in priority order:

A. Data-driven (preferred). Behavior inferred from object.ini, Scooby.eng, and observed disc layout. Minimal disassembly. If object.ini can describe a behavior — room exits, hotspot actions, cursor mappings, inventory rules — read it from object.ini.

B. Binary-assisted (fallback). Where data files don’t fully specify behavior — puzzle state machines, animation timing, save-game format — trace the relevant subroutine in Scooby.exe via Ghidra and reimplement.

Rule: disassembly is a last resort. Every Ghidra-derived function adds Phase 4 scope. Prefer the data-driven path whenever it’s feasible. The 1,405-line object.ini strongly suggests TerraGlyph already exposed most behavior as data — exploit that.

WP-008 baseline (2026-06-03) — refines the A/B split with evidence. The Showdown object.ini analysis (scooby-exe.md §object.ini interpreter behavior) confirms the asset-binding and navigation graph are pure path A — every asset reference is a string in the WP-003 name-table convention (ROOM_*/OBJ_*/ANIM_*), no numeric indices, 215 OBJ entries discriminated by an ID= field with 5 values. But the puzzle / state logic is not in object.ini — no conditional if-X-then-Y structure exists, requiresobject only gates input events not outcomes, and the scrappyid=Global.Scrappy.* field references a script identifier resolved elsewhere. So path A handles binding + navigation; path B (Ghidra trace of the Scooby.eng “Failed to load room.” loader and the scrappyid script resolver) is unavoidable for puzzle / state behavior. The 1,405-line comment above is correct in spirit but should be read as “most of the asset / navigation layer is data” — not “most of the game logic is data.”


Risks & Unknowns


Development Phases

Per-phase work is tracked at the WP level in docs/work-packets/WORK_INDEX.md. The phase prose below sets the scope; the WP files specify the units of work and their exit criteria. ECs under docs/execution-checklists/ hold step-by-step playbooks for the WPs most likely to sprawl.

Phase 1 — Format Research

Work items:

Exit criteria (all required):

  1. At least one TGIFILE.ART entry extracted to PNG or BMP and matched visually against in-game output.
  2. TGIFILE.ART structure documented in docs/formats/tgifile-art.md: header layout (byte offsets, field sizes) and entry table (count, offsets, sizes).
  3. At least one audio container inspected; codec identified by name (even if not yet decoded).
  4. Engine-family question answered in writing: do Case File #1/#2 share format with Showdown, or do they need a separate engine?

Fail condition: inability to extract any visual asset from TGIFILE.ART blocks Phase 2 — revisit feasibility before continuing.

Phase 2 — ScummVM Engine Scaffold

Work items:

Detection requirements:

Exit criteria:

  1. Engine compiles cleanly against current ScummVM master.
  2. Each of the five candidate ISOs is correctly detected or correctly rejected (e.g. Case File #3).
  3. Engine launches without crash; at least one debug-channel message appears in the log.

Phase 3 — Resource Loading

Work items:

Exit criteria:

  1. The Room 1 background of Showdown renders correctly via ScummVM’s graphics layer.
  2. At least one interactive object from object.ini is positioned correctly on that background.
  3. UI/dialogue strings resolve from Scooby.eng and display correctly.
  4. One audio clip (music, SFX, or voice) plays through ScummVM’s audio mixer.

Phase 4 — Game Logic

Work items:

Exit criteria:

  1. Showdown in Ghost Town is playable end-to-end.
  2. No fatal errors or progression blockers across a full playthrough.
  3. All cutscenes play through ScummVM’s video subsystem with no external Bink runtime.

Phase 5 — Polish & Contribution

Scope rule (revised per Engine Lineage finding above):

Each generation extends the engine with one new adapter per axis; the shared engine core handles room/scene management, cursor/inventory, and puzzle state across all generations.

Work items:

Exit criteria:

  1. PR opened with at least Showdown in ADGF_TESTING.
  2. ScummVM wiki page published.
  3. PR accepted (with or without revisions) into ScummVM mainline.

Success Criteria

All required:

  1. Showdown in Ghost Town boots from an unmodified ISO mount with no patches to game data.
  2. A full playthrough completes to credits with no missing assets, fatal errors, or progression blockers.
  3. All cutscenes render through ScummVM’s video system (no external Bink runtime).
  4. The engine is accepted into ScummVM mainline at ADGF_TESTING or higher.

Stretch:


Tooling

Local working set, established during Phase 1:


Reverse engineering for interoperability is lawful in the US (17 U.S.C. § 107; Sega v. Accolade) and the EU (Software Directive 2009/24/EC, Article 6). ScummVM has operated under this framework since 2001. Game data is never bundled with the engine — players supply their own.


File Layout

C:\dev\scooby-engine\     ← this project (engine research + docs)
C:\dev\scummvm\           ← fork of scummvm/scummvm (engine implementation)
C:\pcloud\scooby-engine\  ← ISO images of original game discs (read-only)

Key References