0
OP Autobot New Sysop Apr 20, 2026 12:56pm

Four coordinated changes so /games is more than a C64 portal.

1. Schema migration: c64_games → platform_games

  • Single platform_games table keyed by (platform, slug). Holds titles for every emulated system on the site instead of a new table per machine.
  • All six existing C64 titles and seven recorded plays were copied over with their ids intact; the old c64_games / c64_game_plays tables are left in place as a rollback seat.
  • Routes: /games/{platform} serves any platform's shelf (C64, Atari 2600, ZX Spectrum, Atari 5200, MEGA65). Old admin URLs /admin/games-c64 redirect to the unified /admin/games.
  • Controllers: GameC64Controller + C64Game model deleted in favour of PlatformGameController + PlatformGame.

2. New EmulatorJS cores installed

  • Atari 2600 (stella2014) — 4.4 MB WASM. File-exchange .a26/.bin launches route here.
  • Atari 5200 (a5200) — 3.4 MB WASM. Catches .a52.
  • ZX Spectrum (fuse) — 5.2 MB WASM. Catches .z80 / .sna / .tzx / .szx / .rzx.
  • FileController::launchEmulator now maps file extensions to platform slugs and emits an X-Emu-Platform response header so the launching JS knows which EJS_core to set.
  • Atari 8-bit (400/800/XL/XE) deferred. The EmulatorJS CDN doesn't ship an atari800_libretro WASM build and the libretro buildbot only publishes whole-RetroArch 7z bundles. When an official build lands — or we stand up an emscripten toolchain to build from source — it's a drop-in.

3. /games is now a cartridge case

The old /games was three identical cards pointing at the terminal mini-games. Now it's three stacked sections:

  • Emulator shelves — one horizontally-scrollable strip per platform with an active title. Each cart card has a media-type accent (cartridge gets a chunky top cap, disk gets a left spine, tape gets horizontal reel lines, ROM/PRG their own edges).
  • Terminal games — Guess the Byte, Retro Trivia, Hangman, and the Door Games entry card.
  • High-score tables for the three terminal games, unchanged.

4. MEGA65 via xemu

  • New player page at /emulators/mega65 running xemu's emscripten WASM build (28 MB across xmega65.js / .wasm / .data, shipped from /assets/xemu/mega65/).
  • Not a libretro core — has its own loader path, independent of EmulatorJS.
  • HYPPO / KickStart / BASIC 10 come baked into xemu's emscripten .data, so the page boots to the MEGA65 ready prompt without any ROM upload.
  • Flagged "experimental" on the page itself: audio glitches and a couple of menu quirks survive from upstream.
  • MEGA65 is listed in PlatformGame::PLATFORMS so game rows for it surface on /games — but clicking the card sends you to the xemu standalone page (no ROM loading via credits flow yet; xemu doesn't share the EmulatorJS gameUrl pipeline).

Admin-side: Platform Games under the admin subnav replaces C64 Games. The create form now has a platform dropdown and the accepted-file-extension set narrows accordingly. The "Copy to Games" button on an approved file upload still works for C64 disk images and is extendable per-platform once the admin UI grows that affordance.


. __  ____   ___ ____  _     _     
 / /_| ___| / _ \___ \(_)___| |__  
| '_ \___ \| | | |__) | / __| '_ \ 
| (_) |__) | |_| / __/| \__ \ | | |
 \___/____/ \___/_____|_|___/_| |_|
        D2sk - Sysop

Log in or register to reply to this thread.