_ ____ ____ _ ____ _____
/ \ | _ \ / ___| / \ | _ \| ____|
/ _ \ | |_) | | / _ \ | | | | _|
/ ___ \| _ <| |___ / ___ \| |_| | |___
/_/ \_\_| \_\\____/_/ \_\____/|_____|
>>>> I N S E R T C O I N <<<<
A single cabinet, many machines. Hand-built retro and neo-retro games across Rust, C++, and the browser — each one from-scratch, asset-light, and deterministic. No engines-as-a-service, no store pages, just source you can build and play.
==================================================================
# TITLE GENRE TECH RUN
==================================================================
1 WII KART 3D kart racer Rust/macroquad cargo
2 UNCANNY CARNIVAL 3D skill suite Three.js/Vite npm
3 GALAGA (x2) Shoot 'em up C++ & Rust raylib
4 THE HTML CABINET 5 classics Vanilla JS browser
==================================================================
The fastest coin in the slot. Pick a machine:
> Just want to click and play? ...... open any *.html file (Cabinet #4)
> Have Node installed? ............... cd carnival && npm i && npm run dev
> Have Rust installed? ............... cargo run --release (Wii Kart)
Install only what the machine you want needs.
| Machine | Needs |
|---|---|
| The HTML Cabinet | A modern web browser. Nothing else. |
| Uncanny Carnival | Node.js 18+ and npm |
| Wii Kart | Rust 1.82+ (repo builds on 1.96) |
| Galaga (Rust) | Rust + CMake + MSVC toolchain + LLVM/libclang |
| Galaga (C++) | Visual Studio 2022 (C++ workload) + CMake |
Galaga's raylib backend compiles from source on first build — expect a slow, one-time warm-up, then instant rebuilds.
./ (repo root) · Rust + macroquad
A procedurally-generated, third-person 3D kart racer with that Mario-Kart-Wii "speed juice": drift charge → mini-turbo boost, a chase cam that widens its FOV as you accelerate, and a fixed 60 Hz simulation for stutter-free, reproducible runs.
cargo run --release
The aggressive release profile (fat LTO, codegen-units = 1, target-cpu=native
via .cargo/config.toml) makes the first build slow but the binary fast. For quick
iteration use plain cargo run (deps stay optimized, your crate builds fast).
+----------------------------------------------------+
| CONTROLS |
+----------------------------------------------------+
| Up / W .................. throttle |
| Down / S ................ brake / reverse |
| Left / A ............... steer left |
| Right / D ............... steer right |
| Space / L-Shift ......... drift (hold to charge) |
| L-Ctrl / F .............. fire item |
| Enter ................... confirm / start |
| [ ] .................... cycle (debug) |
+----------------------------------------------------+
carnival/ · Three.js + Vite
A browser 3D carnival skill-suite — 6 games across 5 difficulty tiers, with a custom deterministic physics kernel, procedural Web-Audio SFX, and a deliberate uncanny-valley art direction (hyper-real PBR on subtly wrong geometry, clinical fluorescent light, sickly neon rims). Zero RNG rigging — every score is honest.
cd carnival
npm install # first time only
npm run dev # dev server with hot reload -> http://localhost:5173
Other scripts:
npm run build # production bundle -> carnival/dist/
npm run preview # serve the built bundle
npm test # node --test on the physics kernel
The lineup: Shooting Gallery · High Striker · Balloon Dart · Ring Toss ·
Basketball · Skee-Ball. Design notes live in carnival/level_*.md.
galaga/ · raylib, in both C++ and Rust
The same faithful Galaga shooter implemented 1:1 in two languages — identical files, constants, update order, and fixed timestep — rendered through the same raylib so the only variable measured is language + runtime. Press V in either build to uncap the frame rate and read each one's headroom off the HUD.
Rust build:
galaga\build-rust.bat REM sets LIBCLANG_PATH, then cargo run --release
or manually:
set LIBCLANG_PATH=C:\Program Files\LLVM\bin
cd galaga\rust
cargo run --release
C++ build (MSVC):
galaga\build-cpp.bat
galaga\cpp\build\Release\galaga_cpp.exe
or from a x64 Native Tools Command Prompt:
cmake -S galaga\cpp -B galaga\cpp\build -G "Visual Studio 17 2022" -A x64
cmake --build galaga\cpp\build --config Release
+----------------------------------------------------+
| CONTROLS |
+----------------------------------------------------+
| Left / Right (or A / D) ... move |
| Space (or L-Ctrl) .......... fire |
| Enter ...................... start / restart |
| V .......................... uncap FPS (60 <-> ∞) |
| H .......................... toggle perf HUD |
| Esc ........................ quit |
+----------------------------------------------------+
Full write-up (HUD readout, capture mechanic, challenging stages): galaga/README.md.
./*.html · vanilla JavaScript, single file each
Five self-contained classics. No build, no server, no dependencies — double-click the file or open it in a browser and play.
+-------------------+------------------------------------------+
| FILE | GAME |
+-------------------+------------------------------------------+
| mario.html | Super Mario World |
| tetris.html | Tetris |
| dk64.html | DK64 — Jungle Japes Slice |
| kaboom.html | Kaboom! (Activision homage) |
| stacker.html | Stacker |
+-------------------+------------------------------------------+
On-screen instructions in each game cover the controls.
Arcade/
├── src/ Wii Kart — Rust source (main, physics, race, mesh_gen…)
├── Cargo.toml Wii Kart crate + release profile
├── .cargo/config.toml target-cpu=native tuning
│
├── carnival/ Uncanny Carnival — Three.js + Vite
│ ├── src/ game modules + physics/audio core
│ ├── test/ node --test suites
│ └── package.json
│
├── galaga/ Galaga — C++ vs Rust, same design twice
│ ├── cpp/ MSVC + raylib (CMake FetchContent)
│ ├── rust/ raylib-rs crate
│ ├── build-cpp.bat
│ └── build-rust.bat
│
├── *.html The HTML Cabinet (5 single-file games)
└── LICENSE
Every machine here follows the same maker's code:
- Deterministic. Fixed-timestep simulation, seeded RNG. Same inputs, same run.
- Honest. No rigged hitboxes or fudged scores — difficulty is real physics.
- Asset-light. Art and audio are procedural/synthesized; almost no binary files.
- From scratch. Custom physics, custom rendering paths, no game-engine crutches.
See LICENSE.
GAME OVER? PRESS ENTER TO CONTINUE
. . . . . . . . . . . .