Add ScummVM support and generalize manifest zip lookup
Add scummvm to the Dockerfile. Its binary lives at /usr/games/scummvm (Debian's convention for game packages), not reliably on $PATH under a non-login shell, so manifests reference it by absolute path. Generalize the manifest schema from a bare "zip" filename (implicitly under Games\dosbox\ on the SMB share) to "zip_path" (a full path relative to the share root), since the SCUMM games' zips live in their own folders (Games\Monkey Island\, Games\Indiana Jones\, etc.) rather than being colocated with their manifest like stuntcar/t7g were. Manifests themselves still all live in the Games\dosbox\ catalog directory regardless of where the actual zip sits. Added and verified (install/start/stop/uninstall via monkey2) manifests for: monkey, monkey2, atlantis, indy3, tentacle. Skipped the German CD release of Day of the Tentacle (loose files at the zip root, no single top-level folder - incompatible with the current extraction convention) and Curse of Monkey Island (untested, much larger). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NiNnj78HGx1KWyCCo39HSz
This commit is contained in:
@@ -14,24 +14,44 @@
|
||||
listing every `*.zip` on the SMB share with an Installed/Install status per game; the
|
||||
user clicks "Install" to fetch+extract a specific game into `${GAMES_HOME}` on demand.
|
||||
|
||||
- **Manifest-driven games + Start/Stop/Uninstall (test balloon, `stuntcar` only)**: games are
|
||||
no longer discovered from raw `*.zip` files on the share. `setup_server.py` now lists
|
||||
`*.json` manifests instead (one per game, e.g. `Games\dosbox\stuntcar.json`), each
|
||||
declaring `name`/`title`/`zip`/`start_cmd`. The web page grew Start/Stop/Uninstall buttons
|
||||
- **Manifest-driven games + Start/Stop/Uninstall**: games are no longer discovered from raw
|
||||
`*.zip` files on the share. `setup_server.py` lists `*.json` manifests instead (one per
|
||||
game, in the `Games\dosbox\` catalog directory), each declaring
|
||||
`name`/`title`/`zip_path`/`start_cmd`. The web page grew Start/Stop/Uninstall buttons
|
||||
alongside Install, driven entirely by that manifest — nothing about a game's identity or
|
||||
how to run it is hardcoded in the image anymore. Only `stuntcar.json` exists on the share
|
||||
so far (as a deliberate pilot); `t7g` has no manifest yet and will not show up in the setup
|
||||
page until one is added (`t7g.json` with a `start_cmd` for its `dosbox-0.74-3.conf`).
|
||||
`game.sh`/`scripts/start_game.sh` (the old `docker exec`-based launch path, with its
|
||||
hardcoded `DOSBOX_VERSION`/`run.bat` convention) were intentionally left untouched for this
|
||||
pilot and now overlap with the new Start button — worth reconciling (or removing) once the
|
||||
manifest approach is rolled out to all games.
|
||||
how to run it is hardcoded in the image anymore. Started as a `stuntcar`-only pilot, now
|
||||
extended to 6 games (see the SCUMM item below). `t7g` still has no manifest and won't show
|
||||
up in the setup page until one is added (`t7g.json` with a `start_cmd` for its
|
||||
`dosbox-0.74-3.conf`). `game.sh`/`scripts/start_game.sh` (the old `docker exec`-based
|
||||
launch path, with its hardcoded `DOSBOX_VERSION`/`run.bat` convention) were intentionally
|
||||
left untouched during the pilot and still overlap with the new Start button — worth
|
||||
reconciling (or removing) once every remaining game has a manifest.
|
||||
|
||||
- Create manifests for SCUMM engine games (Monkey Island, Day of the Tentacle, Indiana Jones,
|
||||
etc.). Note these are usually best run via ScummVM rather than raw DOSBox — `scummvm` isn't
|
||||
installed in the image yet, so this may need a Dockerfile change (add the `scummvm`
|
||||
package) alongside the manifests themselves, and each manifest's `start_cmd` would invoke
|
||||
`scummvm` with the right game-id instead of `dosbox run.bat -conf ...`.
|
||||
- ~~Create manifests for SCUMM engine games~~ Done: `scummvm` added to the Dockerfile
|
||||
(`/usr/games/scummvm`, not on `$PATH` by default under a non-login shell — manifests use
|
||||
the absolute path). Manifests live in the usual `Games\dosbox\*.json` catalog directory on
|
||||
the share, but their `zip_path` now points at wherever the game's zip actually already
|
||||
lived (`Games\Monkey Island\...`, `Games\Indiana Jones\...`, etc.) — this required
|
||||
generalizing the manifest schema from a bare `zip` filename (implicitly under
|
||||
`Games\dosbox\`) to a full `zip_path` relative to the share root, since these games weren't
|
||||
colocated with dosbox's. Added and verified end-to-end (install/start/stop/uninstall) via
|
||||
`monkey2`:
|
||||
- `monkey` — The Secret of Monkey Island
|
||||
- `monkey2` — Monkey Island 2: LeChuck's Revenge
|
||||
- `atlantis` — Indiana Jones and the Fate of Atlantis
|
||||
- `indy3` — Indiana Jones and the Last Crusade
|
||||
- `tentacle` — Day of the Tentacle
|
||||
|
||||
Skipped the German CD release of Day of the Tentacle on the share (`Day Of The Tentacle
|
||||
(CD DOS, German).zip`) — unlike every other zip here, it doesn't wrap its contents in a
|
||||
single top-level folder (loose files at the zip root plus a stray `MANIAC/` dir for the
|
||||
embedded Maniac Mansion easter egg), so it doesn't fit the current "zip's top-level folder
|
||||
== install name" extraction convention. Also skipped Curse of Monkey Island (much larger,
|
||||
untested) — could be added the same way if wanted.
|
||||
|
||||
ScummVM's own game-target IDs (`monkey`, `monkey2`, `atlantis`, `indy3`, `tentacle`)
|
||||
happened to exactly match each zip's existing top-level folder name, so no change was
|
||||
needed to the install/extraction logic itself, only to where zips are looked up from.
|
||||
|
||||
- Get game sound actually audible during play. `--device /dev/snd` is passed through and
|
||||
`alsa-utils` is installed, so DOSBox can write to an ALSA device inside the container, but
|
||||
|
||||
Reference in New Issue
Block a user