WP-010: ScummVM fork + empty engines/scooby/ scaffold
Status: 📦 Queued Phase: Pre-Work (before Phase 2; benefits Phase 1) Depends on: — Companion EC: EC-005 Estimated effort: Half-day
Goal
Fork scummvm/scummvm to barefootbetters/scummvm, create an
empty-but-compilable engines/scooby/ skeleton, record the HEAD commit
hash in docs/02-SCUMMVM-INTEGRATION.md, and define the debug channel
names from §9. This pins the ScummVM API target before Phase 1 findings
are translated into implementation decisions, and defines the debugging
vocabulary before WP-001’s Ghidra annotations are written.
Background
docs/02-SCUMMVM-INTEGRATION.md currently reads “ScummVM version pin:
TBD.” Every concrete API call and signature in that document is floating
against an unspecified target. Pinning the commit hash now means:
- API drift between “when docs were written” and “when code is written” surfaces immediately as a compile error — not a PR review comment six months from now.
- Debug channels (§9 of the integration doc) are defined as names before
the WP-001 Ghidra session. When you label a function in Ghidra as
“TGIFILE.ART loader →
resourcechannel”, that label uses the same channel name that will appear in the actualdebugC()call. Naming channels after doing Ghidra instead of before guarantees a reconciliation pass. - An empty-but-compiling scaffold proves the detection/engine compilation split (§10) works before there is real code to debug. The split is easy to get right on empty files; it is painful to retrofit.
This WP intentionally pulls forward a subset of Phase 2 scope. The Phase 2 WPs that implement actual engine behavior are unchanged — this only covers the structural setup that makes Phase 2 implementable.
Scope
In scope:
- Fork
scummvm/scummvm→barefootbetters/scummvmon GitHub - Clone fork locally to
C:\www\scummvm\; create ascooby-enginebranch - Create
engines/scooby/with the minimum files required for a clean build:scooby.h+scooby.cpp—ScoobyEngine : Engine; emptyrun()returningCommon::kNoError; debug channels registered in constructordetection.h+detection.cpp—MetaEngineDetectionstub; emptyADGameDescriptiontable; compiled separately from enginemetaengine.h+metaengine.cpp—MetaEnginestub;hasFeature()returnsfalsefor all flags until Phase 2 implements themmodule.mk— lists all.otargets; confirms detection/engine splitconfigure.engine— engine declaration,default_state = disabled
- Confirm clean build:
./configure --enable-engine=scooby && make - Confirm clean omission:
./configure --disable-engine=scooby && make - Record the forked HEAD commit hash in
docs/02-SCUMMVM-INTEGRATION.md - Define debug channel names in
scooby.cppviaDebugMan.addDebugChannel():resource,graphics,audio,script,input - Push the branch to
barefootbetters/scummvm
Out of scope:
- Any game logic, resource loading, or scene rendering (Phase 2/3)
ADGameDescriptiontable entries — require Phase 1 MD5 values not yet knownPOTFILES— premature until translatable strings exist- macOS / Linux build verification (Phase 5 gate; Windows confirms scaffold correctness)
Dependencies
scummvm/scummvmGitHub fork (public repo; no special access)- ScummVM Windows build prerequisites: mingw-w64 (or MSVC), SDL2, zlib
(see
README.mdin the scummvm repo for the current Windows build guide) docs/02-SCUMMVM-INTEGRATION.md§10 for the exactmodule.mkandconfigure.enginepatterns to follow
Exit criteria
barefootbetters/scummvmexists on GitHub, forked fromscummvm/scummvm.- Local clone at
C:\www\scummvm\on ascooby-enginebranch (notmaster— keeps the PR delta clean when the time comes). ./configure --enable-engine=scooby && makesucceeds with zero errors../configure --disable-engine=scooby && makealso succeeds cleanly.- HEAD commit hash of
scummvm/scummvmat fork time recorded indocs/02-SCUMMVM-INTEGRATION.mdheader field “ScummVM version pin.” - Debug channel names defined in
scooby.cppconstructor viaDebugMan.addDebugChannel()— even if they emit nothing yet.
Deliverables
barefootbetters/scummvmfork on GitHub,scooby-enginebranch,engines/scooby/skeleton- Updated
docs/02-SCUMMVM-INTEGRATION.md— commit hash + debug channel names
Notes
- The
configure.enginedefault_statemust be disabled — standard for a newADGF_TESTINGengine. It is not promoted to enabled until the engine has shipped a stable upstream release. - Rebase discipline: set up an
upstreamremote pointing atscummvm/scummvmand rebase thescooby-enginebranch monthly. The longer the fork drifts, the harder the eventual upstream PR rebase becomes. Start the habit now while the diff is empty. - The empty
ADGameDescriptiontable is correct at this stage. Populating it with real MD5 hashes and generation flags is Phase 2 work, after Phase 1 produces canonical file fingerprints. - Pick one build toolchain (mingw-w64 is the most common contributor path on Windows) and use it consistently through Phase 5. Switching toolchains mid-project creates subtle ABI and warning-set differences.
- WP-001 Ghidra session can proceed in parallel once this WP defines the debug channel names. The names are what WP-001 needs for Ghidra annotation alignment — a working engine is not required.