MW2 Raycast Arcade — Three Complete Games Inside the Pre-Game Lobby
C++ · Custom raycaster · Claude + IDA · Xbox 360 · arkg0d.xex
The Xbox 360 gives me no graphics API inside MW2 — the only rendering primitive available is a single engine call that draws one flat-colored rectangle. On top of that call I built a software raycasting/3D system, and then three complete games that run on it, playable right over the pre-game lobby as part of the arkg0d.xex. Every wall, monster, playing card, and letter of text below is untextured colored quads.
DEAD CIRCUIT
A survival-horror roguelite FPS in the spirit of CoD Zombies. Push east through an endless procedurally generated city while a Director system paces the horror — trickle spawns, hordes, blackouts — against 9 enemy types with 10 guns. ~5,800 lines.
NEON 21
Blackjack in a 3D neon room — proof the system isn’t just a wall-caster. Every card is a real object in world space that arcs, spins, and flips mid-air, dealt under real casino rules. ~2,450 lines.
WYRMFALL
A Monster-Hunter-style hunting game where every hunt generates both the monster and the wilderness — 5 biomes, part-targeting combat, and a forge-and-hunt-again loop. ~6,300 lines.
Read more
Each quad costs one engine draw call, so every frame fits a hard budget of about 400 quads. The 3D scenes stay under it by casting one ray per screen column, merging adjacent wall faces into single trapezoids, and depth-clipping and capping sprites. The engine back-face-culls anything wound counter-clockwise, so all geometry routes through one gatekeeper function that forces clockwise winding — and applies screen shake for free. Text is a hand-rolled vector stroke font; there are no textures and no fonts anywhere.
All of it lives inside a 2010-era console toolchain: C++03, no STL, no exceptions, no heap allocations — fixed-size arrays only, with <math.h> as the only header. Saves are tiny binary blobs of 20–44 bytes per game. I build each game against a PC shell that reproduces the exact same constraints, including the culling quirk, so console bugs surface on PC first — porting a finished game to the 360 means wiring up exactly three functions.
In MW2, each game hooks the frame right after the stock UI paints and only runs in the lobby — load into a match and it stops. While one is on, the mod captures the controller and zeroes it out for the game underneath, so the lobby never reacts to your inputs; hold Back to exit and the controller goes back. It’s all host-side by design: local render commands and the host’s controller, nothing ever runs on another player’s console.