Log inGet started
← Explore

Retro Arcade

An arcade cabinet running three complete console emulators written in Luau: Game Boy, NES, and CHIP-8. Pick a console from the carousel, play built-in carts or upload your own ROMs, with per-user saves and sound. Consoles are plug-in emulatorCore assets on a shared retro.host foundation, so new cores drop in and the packages can be installed into any world.

World media
About this world

Retro Arcade

An arcade cabinet world with three working console emulators, all written in Luau and running entirely inside the Zero engine. Walk up to the cabinet, pick a console from the carousel, and play Game Boy, NES, or CHIP-8 games on a CRT-style screen, alone or with friends in the same world.

What it can do

  • Play three consoles today: Game Boy / Game Boy Color, NES, and CHIP-8, each a complete software emulator with video, sound, and input.
  • Bring your own games: the loader's Upload from your computer button opens a file picker for your own ROM files. Uploads persist per user and the cabinet auto-resumes your last-played cartridge.
  • Keep your progress: battery-backed saves (Pokémon and friends) persist per user across sessions.
  • Sound: emulated audio channels are bridged to MIDI voices, so the NES APU and Game Boy channels actually play.
  • Multiplayer by nature: it's a Zero world, so everyone in it shares the space. One machine runs at a time on the cabinet; controls engage when you pick a console and release on Esc while the game keeps playing attract behind the menu.

How it was made

Each emulator is a pure Luau implementation, built and verified in-engine:

  • Game Boy: the original core of this world; full CPU/PPU/APU emulation with cartridge header validation and battery save persistence.
  • NES: a 6502 interpreter with cycle-exact timing (verified against the nestest golden log, all 8991 lines), iNES cartridge loading with mappers NROM/MMC1/UNROM/CNROM, a scanline PPU with scrolling and sprite-zero hit, an APU voice model, and controller input. Hot paths use fused opcode dispatch and a single-pass scanline compose to hit console frame budgets.
  • CHIP-8: a quirk-configurable core with demo carts.

The consoles share one foundation, retro.host: display output to a screen texture, ROM library management, frame pacing, save persistence, MIDI voices, and the loader UI. Each console component delegates its lifecycle to this host and contributes only the emulation core itself. Consoles register as emulatorCore assets (an asset type defined by this world), and the cabinet discovers whatever cores exist, builds the carousel with captured title screens as cover art, and lists each console's cartridges. The screens are materials with a CRT effect (toggleable), and the UI uses Press Start 2P and VT323 fonts shipped as font assets.

How others can use it

  • Play: launch the world and use the cabinet. Keyboard controls engage when you select a console; Esc returns to the select screen.
  • Fork it: fork the world to get the whole arcade as a starting point for your own.
  • Reuse the pieces: retro.package contains the host scaffolding, the CHIP-8 and NES cores, and the screen materials; gameboy.package contains the Game Boy core. Install them into your own world to embed a playable console anywhere.
  • Add a console: implement your core as a module driven by retro.host, package it as a <name>_core.emulatorCore asset with cover art and a cart list, and add it to the world. The cabinet picks it up on its next scan.

Comments · 0

Open discussion — no rating attached. Ask questions, swap notes, follow threads.

Sign in to join the discussion.