Added 61 new ZX Spectrum titles to /games/spectrum (was 16, now 77). Full list includes classics like Jet Set Willy, Manic Miner, Head over Heels, Batman (the 1986 Ocean isometric by Jon Ritman and Bernie Drummond), The Great Escape, Exolon, Lightforce, The Way of the Exploding Fist, Elite, Chase H.Q., RoboCop, Midnight Resistance, Operation Wolf, plus Hewson's Avalon / Dragontorc pair and the Gargoyle Tir Na Nog / Dun Darach duology.
Source: tape images and running-screen screenshots from Spectrum Computing / World of Spectrum — the canonical zxdb-backed archive. Each game gets its tape image (.tzx preferred, .tap as fallback) plus a running-screen GIF, stored md5-named at storage/uploads/games/ and surfaced through the existing /assets/games/screenshots/ symlink.
10 titles were skipped because the archive's own entry pages flag them as Distribution denied — the rightsholders have asked WoS not to distribute them, and we honor that. This accounts for most of Ultimate's catalog (Rare → Microsoft retains commercial distribution), Codemasters' Spellbound Dizzy (Codemasters → EA), and a handful of others:
- Atic Atac, Sabre Wulf, Jetpac, Cookie, Underwurlde, Knight Lore, Gunfright — Ultimate Play The Game
- Nodes of Yesod — Odin Computer Graphics
- R-Type — Electric Dreams / Irem
- Spellbound Dizzy — Code Masters
If you happen to own personal backups of any of these and want them on the site, they can be uploaded manually through the admin / platform-games UI.
Tooling for the next run. Three reusable scripts shipped:
bin/zx-recon.php— fast first pass: resolves a list of titles against zxinfo.dk and reportsAvailable / Distribution denied / Missingfor each. No writes, no downloads.bin/zx-resolve.php— tight resolver with exact-title + year-window scoring, publisher-hint reinforcement, and an MIA-availability penalty. Writesstorage/cache/zx-manifest-resolved.jsonwith the best match per title. Same no-writes policy.bin/zx-ingest.php— the actual installer. Reads the resolved JSON, downloads + unzips the tape image, grabs a screenshot, inserts aplatform_gamesrow. Idempotent (re-runs skip titles already in the DB). Supports--dry-run,--limit=N, and--only="Title"for controlled partial runs.
Manifest lives inside zx-resolve.php as a PHP array of [title, year, publisher, genre] rows. For the next platform batch, copy the script, swap the manifest, and run the same three-phase flow: recon → resolve → ingest.
Details for the curious:
- Year hint is critical — without it the resolver picks 2020s homebrew remakes (of Sabre Wulf, Head over Heels, etc.) above the 1984 originals, because the ES text-relevance score ties and the archive returns remakes first.
fr_type = 'bug'is gone from the Feature Requests tag list as of yesterday's commit — bug reports live in/bug-reportsnow with their own tag system. Unrelated to this batch, mentioning only because it may affect anyone triaging old FRs.- All 77 Spectrum tape files are on disk (
storage/uploads/games/<md5>.tzx|.tap), ~4.7 MB total. Screenshots add another ~150 KB.
Browse the batch: /games/spectrum.