RetroConsole
An arcade cabinet on one entity: one screen, one cartridge list spanning every installed console, at most one machine running. Drop it on a flat panel carrying `console_screen_mat` and every `emulatorCore` asset in the world appears in its loader.
RetroConsole
An arcade cabinet on one entity: one screen, one cartridge list spanning every
installed console, at most one machine running. Drop it on a flat panel
carrying console_screen_mat and every emulatorCore asset in the world
appears in its loader.
- Pick a cartridge (or upload / fetch by URL) and it routes to its console by extension, boots that core, and tears down whatever ran before — ten installed consoles cost one machine's frame time.
- Controls engage on pick; Esc releases them. While released the cabinet keeps running in attract mode and the keyboard belongs to the player.
- The active core letterboxes into the shared 256×240 screen texture at integer scale.
- Battery saves and the player's uploaded cartridges persist per console in runtime data, exactly like the standalone console components.
Quick start
local id = tools.use("primitives", "cube", "arcade", 0, 2, 0)
local e = entity.find("arcade")
e.localScale = { 3.2, 3.0, 0.05 }
e.component.get("Model").material = asset.resolve("console_screen_mat", "material")
e.component.add("RetroConsole", {})
Adding a console
Publish a <name>_core.emulatorCore asset (in any package) with the spec
contract documented in emulatorCore.assetType — the cabinet discovers it
live. Name core assets so their identity does not collide with the machine
module (nes_core.emulatorCore beside nes.module).
Scoped to this part · feeds back into the world's score.