A procedural retro-futurist arcade platform with 28 original games, four creative and system experiences, a generated Meta-Arcade Hall, and no bundled ROMs or copied game assets.
BiosSystem Neon Arcade keeps the existing BiosSystem/retro-game-replicas repository slug for continuity. Build original arcade replicas, procedurally generated Neon worlds, and a cabinet-style launcher from one TypeScript codebase.
These are unedited 640x480 frames exported from the production build after keyboard input, with the cabinet CRT presentation excluded. They show the current implementation, not concept art or a promise of final quality. The gallery was refreshed through the passing production-frame capture run on 2026-09-13; Cyber-Caster and Neon Kombat now show verified live impact states rather than idle encounter setup. The v2.6 overhaul is still in progress: the first twenty-eight scene passes do not yet meet every animation, accessibility, and art-direction acceptance criterion in the visual production plan.
Neon Vector — current ship, asteroid materials, and deep-space background.
| Neon Danmaku | Neon Kombat |
|---|---|
![]() |
![]() |
| Neon Breaker | Neon Cyber-Caster |
|---|---|
![]() |
![]() |
| Neon Relay | Neon Epoch |
|---|---|
![]() |
![]() |
| Neon Pong | Froggie Crosser |
|---|---|
![]() |
![]() |
| Space Defenders | Brave Bird |
|---|---|
![]() |
![]() |
| Tetris Pulse | Minefield Signal Sweep |
|---|---|
![]() |
![]() |
| Pixel Runner | Cyber Chasm |
|---|---|
![]() |
Capture provenance: tests/e2e/flagship-visuals.spec.ts, Chromium, reduced motion enabled, production build. The Cyber-Caster fixture verifies weapon recoil, muzzle flash, enemy damage, score, and hit timing; the Kombat fixture drives the real P1 input path until a verified hit, combo, and hit-stun state. Background plates are original generated artwork; gameplay actors and effects are rendered by the game. Documentation screenshots are not included in the production bundle.
The v2.6 visual-foundation milestone upgrades all twenty-eight gameplay scenes plus the four hub, studio, and runtime experiences while preserving their deterministic rules and compact delivery. Recent action passes add distinct projectile and pickup silhouettes, motion-safe high-load rendering, richer objective and damage states, and production-frame regression coverage. The v2.5 sandboxed 32-bit bytecode VM, validated .neongame format, and lazy-loaded Homebrew Cartridge Player remain intact.
Require Node.js 24 or a compatible current Node runtime.
git clone https://github.com/BiosSystem/retro-game-replicas.git
cd retro-game-replicas
npm ci
npm run devOpen the Vite address printed by the development server. Build and verify the production web app with:
npm run lint
npm test
npm run build
npm run baseline
npm run test:regression
npm run test:cross-browserInstall Rust only when building the Tauri desktop shell:
npm run tauri dev
# or
npm run tauri build| Area | Current implementation |
|---|---|
| Arcade catalog | 28 original games, the generated Meta-Arcade Hall, Sound Workshop / Tracker Studio, Cabinet Art / Decal Workshop, and Homebrew Cartridge Player |
| Runtime | Phaser 4, TypeScript, Vite, lazy game-scene loading, fixed 60 Hz Arcade Physics |
| Input | Keyboard, touch, Xbox, PlayStation, Nintendo, 8BitDo, arcade encoders, generic controllers, local Player 1 and Player 2 actions |
| Game flow | Difficulty selection, solo and supported local multiplayer modes, pause, restart, shared Game Over, high-score entry, achievements |
| Cabinet UI | Generated Nine Slice panels, animated controls, deterministic local player profiles, procedural avatars, and shared HUD frames |
| Rendering | 640x480 pixel-art canvas, integer 4:3 or 16:9 framing, CRT presets, generated Nine Slice UI, procedural avatars, backgrounds, particles, and effects |
| Audio | Four-channel FM tracker studio, cached pulse waves, bounded source scheduling, capped generated effects, spatial cabinet audio, and optional AudioWorklet and Wasm DSP paths |
| Persistence | Local score ledgers, preferences, tracker projects and cabinet BGM slots, deterministic replays, IndexedDB Neon Epoch save states, generated save previews |
| Connectivity | Manual direct WebRTC peers, copyable lobby invites, fixed snapshot rollback core, local-first verified score gossip, presence mesh, optional spatial voice |
| Extensibility | Sandboxed .neongame bytecode cartridges, validated declarative stage mods, visual graph compiler, signed packages, and procedural sound patches |
| Delivery | Offline PWA, hardened Nginx container, loopback-only Compose template, optional Tauri desktop shell |
The 32-entry cabinet catalog contains 28 playable games and four hub, workshop, or runtime experiences.
Classic cabinet replicas: Snake Evolution, Neon Pong, Neon Vector, Neon Breaker, Froggie Crosser, Space Defenders, Tetris Pulse, Minesweeper, Pixel Runner, Brave Bird, and Cyber Chasm.
Modern arcade games: Cyber-Racer, Neon Cyber-Caster, Neon Tactics, Neon Labyrinth, Neon Danmaku, Neon Kombat, Neon Relay, and Prism Spiral.
Procedural Neon worlds: Neon Odyssey, Neon Chrono, Neon Paradox, Neon Nexus, Neon Genesis, Neon OS, The Singularity, Event Horizon, and Neon Epoch.
Hub, studios, and homebrew: Meta-Arcade Hall generates a walkable DDA-rendered cabinet space with spatial audio and optional connected-peer presence. Sound Workshop / Tracker Studio creates and assigns four-channel .neonseq music. Cabinet Art / Decal Workshop creates validated vector cabinet skins. Homebrew Studio / Cartridge Player runs sandboxed .neongame cartridges and includes the generated Neon Invader reference game.
Open SOUND WORKSHOP / TRACKER STUDIO from the cabinet selector to edit CH1 lead, CH2 harmony, CH3 bass, and CH4 rhythm patterns. The studio persists the active song, FM patch, order list, and cabinet BGM assignment in the browser. Reject malformed saved data and start a fresh project safely.
| Control | Action |
|---|---|
Z S X D C V G B H N J M |
Enter C-3 through B-3 notes |
Q 2 W 3 E R 5 T 6 Y 7 U |
Enter C-4 through B-4 notes |
Arrow keys and Tab |
Move the cell cursor and change channel |
Delete or Backspace |
Clear the selected cell |
Space or F5 |
Play or stop the song |
F6, F8, F9 |
Play pattern, stop, record |
[ and ] |
Adjust FM modulation and audition the patch |
F1, F2, F3 |
Select low-pass, high-pass, or band-pass filter |
O, L, Ctrl+W |
Export .neonseq, load .neonseq, render WAV |
Open HOMEBREW STUDIO / CARTRIDGE PLAYER to launch the bundled Neon Invader reference cartridge or load a validated .neongame file. The player runs deterministic 32-bit bytecode at 60 FPS with a 100,000-instruction frame quota and a maximum 1 MiB module heap. Cartridges have no DOM or scene access. They can only issue sanitized vector draw and synth-note commands, read an input bitmask, and read the clock through the explicit host bridge. Invalid or quota-violating files stay contained in a cabinet error dialog.
Render the core arcade experience at 640x480 with pixel-art sampling. Select Clean Pixel, Arcade CRT 1980s, Trinitron 1990s, or Bypass. Calibrate stable scanline phase and 0% to 8% overscan, then select AUTO, HIGH, MEDIUM, or LOW quality. The CRT path supports gamma-aware bloom, curvature, chromatic aberration, phosphor masks, vignette, program caching, and a source-canvas fallback.
Use Cabinet Control to switch between Classic 1980s and 2026 Overdrive visuals. Classic selects the authentic CRT baseline. Overdrive adds bounded dynamic scene lights, a single pooled GPU particle render node, selective glow for effects, directional camera feedback, and a display-only 30 to 50 ms hit-stop on major impacts. These effects never alter fixed-step simulation, collision bounds, input timing, or replay state. Canvas and headless renderers keep the established pooled-particle fallback.
Open Player Profile with P or the west controller button. Keep one deterministic avatar seed and bounded player name on the device. Reroll the procedural pixel avatar without downloading an image. Reuse the identity in the lobby, high-score entry, and leaderboard center. Render featured-game score, stage, combo, health, and status values through the shared generated HUD contract.
Open Cabinet Control, then Controller Setup, to view live controller inputs and adjust a per-controller scaled-radial or radial deadzone, trigger threshold, and Fire binding. Profiles use a vendor and product fingerprint when available, prevent duplicate bindings, and stay local to the browser. WebHID support is optional and activates only after selecting Connect WebHID from the controller overlay. Disconnecting the primary controller during an active game opens Pause automatically.
Generate gameplay graphics, sprites, particles, previews, levels, worlds, music, and sound effects from code. The audio engine bounds concurrent generated effects to 24 voices, bounds tracker source scheduling to 48 active sources, and reports shared-worklet buffer underruns into runtime telemetry. Several advanced systems, including WebGPU compute, WebXR, WebCodecs, SharedArrayBuffer, AudioWorklet, and Wasm SIMD, activate only after capability checks. Deterministic CPU and browser-safe fallbacks remain the baseline path.
Neon Breaker keeps classic paddle and ball collision inside the fixed 60 Hz Arcade Physics world, then routes impact sparks through the pooled CPU and Overdrive GPU particle paths. Cyber-Racer advances its speed, lane, score, boost, and ghost race in fixed 60 Hz ticks while rendering a generated pseudo-3D road, horizon palette, city skyline, and bounded engine-exhaust light pulses. Both preserve stable scene keys, unified controller mappings, local profile-backed high scores, and Classic mode fallbacks.
Open NETPLAY to enter the Cabinet Netplay Lobby. Host and challenger seats show connection, controller, and ready status. Use the six-character room label to organize the session, then exchange the full fragment-only invite for manual WebRTC SDP negotiation. The browser does not send that fragment to the web host. Enable NETPLAY HUD in Cabinet Control to show RTT, jitter, packet loss, rollback depth, and the recommended zero to two frame input delay. The v2.3 rollback core uses fixed binary snapshots and a twelve-frame input window, starting with versioned state contracts for Neon Vector and Tetris Pulse. Offline cabinet play remains the default while individual games adopt deterministic rollback simulations.
The production build keeps the Tracker Studio, visualizer, and cartridge player components behind the cabinet's lazy scene loader. It generates no downloaded UI, avatar, music, or sprite payload.
The current v2.6 branch passes TypeScript analysis, 362 Vitest checks across 131 files, three bundle-gate fixtures, and all 72 local Chromium regressions. The production output is 1,891,281 bytes, leaving 58,719 bytes below the 1,950,000-byte ceiling. Linux Firefox remains authoritative for cross-browser validation because this workstation's local Firefox installation has a Windows side-by-side mozglue failure; WebKit smoke tests and locked Cargo tests previously pass. Follow the live GitHub Actions workflow for the protected-branch result.
Build the web app as a dedicated origin. Keep it at the origin root because the PWA and service worker use root-relative paths.
cp compose.example.yaml compose.yaml
docker compose up --build -d
curl --fail http://127.0.0.1:8080/healthzThe tracked Compose template binds only to loopback, uses an unprivileged read-only Nginx runtime, drops Linux capabilities, and enables no-new-privileges. Route the public domain to 127.0.0.1:8080 through an HTTPS reverse proxy. Do not embed the app in an iframe because the production security policy denies framing.
- Architecture
- Roadmap
- Developer how-to
- Add a game
- Contributing
- Engine contracts and measured subsystem notes
- Attribution and license register
- Security policy
Release source under the MIT License. Use the original implementations and generated assets in this repository. Review the attribution register before adding third-party software or content. Do not add third-party game ROMs, copied sprites, copied music, or executable community JavaScript.













