# IRONMAW — Deep-Core Outbreak

A mobile-portrait, DOOM-style first-person shooter. Canvas raycaster, touch-first,
one hand-authored level, big grimy atmosphere. The deep-core mining station went
quiet — then it started chewing.

![hall](docs/hall.png)

## Look

The art is the point. Wall panels, the gun viewmodel, and the enemies were painted
with `gpt-image-2` in a single consistent gritty style; everything else — fog,
column shading, the floor/ceiling gradient, flickering light, the muzzle flash that
lights the room, and the red damage vignette — is procedural lighting done in the
renderer. Enemy + pickup billboards are magenta chroma-keyed and z-buffered against
the walls. The HUD marine grimaces as your health drops.

## Play

- **Left stick** — move / strafe
- **Drag the view** — turn
- **FIRE** — shoot the shotgun
- Find the **keycard**, open the **blast door**, reach the **exit pad**.
- Desktop: `WASD` + arrow keys, `Space` to fire, drag the view with the mouse.

## Run

```bash
npm install
npm run dev        # http://localhost:5173
npm run build      # type-check + production build to dist/
npm run test:e2e   # Playwright portrait smoke test
```

Portrait design resolution is 390×844; the stage scales to fit any viewport.

## Dev hook

`window.__game` exposes `{ phase, hp, ammo, enemies, hasKey, ready, px, py, teleport(x,y) }`
for inspection and end-to-end testing.

## Asset regeneration

Wall/enemy/gun art lives in `public/assets/`. To re-generate it (needs
`OPENAI_API_KEY`, budget ≈ $0.35):

```bash
python3 tools/gen_images.py all
```
