Case study

A DOOM-style raycaster running inside Modern Warfare 2’s lobby.

An original first-person 3D engine running inside the Modern Warfare 2 lobby menu on Xbox 360 — no 3D engine, no external app. Every wall and enemy is drawn from a single flat rectangle. It’s a playable demo, built to show the kind of mini-games MW2’s pre-game lobby can host.

“A raycast 3D scene rendered entirely with 2D draw calls, running live inside MW2 on real hardware.”

WASD move · mouse aim · click shoot · R reload · F knife · E buy · Esc exit

The same engine, ported to JavaScript — same map, same constants, same colors, everything still drawn from flat rectangles.

How it works

The idea. I wanted to see how far I could push the game’s UI layer. The game only lets my code draw simple 2D shapes on the screen — so I set out to build a real-time 3D game out of nothing but flat rectangles.

  1. A game loop inside the game.

    I hook the game’s per-frame 2D render step, so my code runs every frame and draws on top of the menu — a full game loop, in-process, on real hardware.

  2. One primitive.

    The only tool I have is a single flat, 4-corner colored quad (one 2D draw call). Every wall, enemy, weapon, and letter on screen is built from that one rectangle. It’s the “pixel” of the whole engine.

  3. Faking 3D with a raycaster.

    This is the classic technique behind Wolfenstein 3D and DOOM. For each vertical column of the screen, I cast a ray across a 2D grid map, measure how far away the wall is, and draw one tall thin rectangle whose height is 1 ÷ distance. About 160 columns side-by-side = a convincing first-person 3D view. It’s pure math — no GPU 3D, no engine.

  4. Enemies that hide behind walls.

    Enemies are billboards (flat images that always face the camera). I project each one into the 3D view and clip it against a depth value I record for every screen column while drawing the walls — so enemies correctly disappear behind corners and walls. (This is a hand-rolled depth buffer.)

  5. A playable demo on top.

    From there it’s real game code: infinite rounds, enemy AI, weapons with reload, ammo, and recoil, a melee, sprint, health, a points economy, a HUD, and a game-over/restart loop — all still drawn from that one rectangle primitive. It’s a demo rather than a finished game — the point is proving the engine can carry one.

Why it’s cool. It’s a software 3D renderer and a playable demo, running as a mod inside a 15-year-old console game’s menu. It’s the kind of thing people assume needs a real engine — and it’s built out of a single colored rectangle. More than anything it’s a demonstration: whole custom mini-games can live inside MW2’s pre-game lobby.

How it was actually built

I didn’t reverse-engineer this by hand, and I don’t want to pretend I did. My workflow orchestrates Claude alongside IDA for working through the game’s code, and XECLI for reading and writing live memory on the console. I direct the research and the design, and I test everything on real hardware — but that AI-assisted stack is what made a project like this possible, and demonstrating the workflow is part of the point.

What it demonstrates

AI-orchestrated reverse engineering (Claude + IDA + XECLI) · Computer graphics from first principles (raycasting, depth buffering, billboard/sprite projection) · Real-time software rendering · Systems programming (C++, per-frame render hooks) · Working on a constrained PowerPC / Xbox 360 target.

What I want to try next

Co-op play. It may be possible if another person is also running the mod and I hook into the Xbox’s networking to connect the two consoles — two players inside the same raycast world. No promises yet; it’s the next experiment.