oneshotlm
Compare all models on this prompt →

Wolfenstein raycaster · qwen3.5-plus-20260420

Build a first-person raycasting maze shooter on a canvas in the Wolfenstein 3D style: WASD movement and arrow or mouse turning through a textured grid maze with enemies you can shoot. Procedural textures only, no external assets.

⛨ sandboxed Open in new tab ↗
transcript · 10 messages
user

Build a first-person raycasting maze shooter on a canvas in the Wolfenstein 3D style: WASD movement and arrow or mouse turning through a textured grid maze with enemies you can shoot. Procedural textures only, no external assets.

assistant
thinking
The user wants a complete Wolfenstein 3D-style raycasting maze shooter game in a single HTML file. This is a substantial project that needs:

1. Raycasting engine for 3D rendering
2. Procedural textures for walls
3. WASD movement + arrow/mouse turning
4. Enemy AI and shooting mechanics
5. A maze/map system
6. HUD (health, ammo, etc.)
7. All in one self-contained HTML file with no external dependencies

Let me plan the architecture:

**Map**: A 2D grid representing the maze
**Raycasting**: Cast rays for each column of the screen to render walls
**Textures**: Procedural generation using canvas - brick patterns, stone patterns, etc.
**Enemies**: Sprites rendered as billboards, positioned in the maze
**Shooting**: Ray-based hit detection
**Movement**: WASD for movement, mouse/arrow keys for rotation
**HUD**: Health bar, ammo count, weapon display

Let me build this comprehensively.

Key components:
- Canvas rendering with double buffering
- Raycasting algorithm (DDA - Digital Differential Analyzer)
- Texture mapping for walls
- Sprite rendering for enemies
- Simple enemy AI (move toward player, attack)
- Weapon rendering and animation
- Minimap
- Game states (playing, game over, win)

Let me write this out fully.
bash {"command":"date"}
toolResult

Sat Aug 1 20:59:19 UTC 2026

assistant
thinking
The user wants a Wolfenstein 3D-style first-person raycasting maze shooter with:
- WASD movement
- Arrow keys or mouse turning
- Textured grid maze (procedural textures)
- Enemies you can shoot
- All in a single index.html file
- No external resources

This is a substantial project. Let me plan the architecture:

1. **Raycasting engine** - Cast rays for each column of the screen to render walls with perspective
2. **Maze generation** - Procedural maze using a grid
3. **Procedural textures** - Generate wall textures, floor/ceiling, enemy sprites
4. **Player movement** - WASD + collision detection
5. **Turning** - Arrow keys + mouse look
6. **Enemies** - Sprite-based enemies that can be shot
7. **Shooting mechanics** - Raycasting for hit detection
8. **HUD** - Health, ammo, minimap

Let me build this comprehensively.

Key technical decisions:
- Canvas-based rendering
- DDA raycasting algorithm for walls
- Z-buffer for sprite depth testing
- Procedural textures generated via off-screen canvases or ImageData
- Game loop with requestAnimationFrame
- Minimap overlay

Let me write this out carefully.

I'll structure it as:
1. HTML/CSS for layout
2. JavaScript with:
   - Maze generation (recursive backtracker)
   - Texture generation (brick, stone, wood patterns)
   - Raycasting renderer
   - Sprite rendering (enemies)
   - Input handling
   - Game logic (shooting, enemy AI)
   - HUD rendering

Let me write the complete file.

I'll build a full Wolfenstein 3D-style raycasting engine with textured walls, enemies, shooting, and a minimap — all procedural, all in one file.

write /tmp/ws/index.html (37763 bytes)
toolResult

Successfully wrote 37763 bytes to /tmp/ws/index.html

assistant
thinking
Let me verify it's correct by reading back key sections and checking for any obvious issues.
bash {"command":"wc -l /tmp/ws/index.html && head -5 /tmp/ws/index.html && echo \"---\" && tail -5 /tmp/ws/index.html"}
toolResult

1094 /tmp/ws/index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> --- // Start render loop gameLoop(); </script> </body> </html>

assistant
thinking
Let me review the code for any issues. I noticed a few potential problems:

1. The `canMove` function might have out-of-bounds access when checking maze cells near the edges.
2. The enemy AI might not work perfectly due to collision issues.
3. The `wallTypes` variable needs to be declared at the top level properly.

Let me fix the edge case issues and ensure the maze boundary checks work properly.

Let me fix a couple of edge cases — the `canMove` function needs boundary checking and the wall texture selection could use improvement:

edit {"path":"/tmp/ws/index.html","edits":[{"oldText":"function canMove(x, y) {\n const margin = 0.2;\n return maze[Math.floor(y - margin)]
toolResult

Successfully replaced 1 block(s) in /tmp/ws/index.html.

assistant

The file is ready at `/tmp/ws/index.html`. Here's what's built: ## Features **Raycasting Engine** - DDA raycasting with textured walls (8 unique procedural textures: brick, stone, wood, tech panels, dark brick, blue tile, skull wall, metal) - Ceiling and floor rendering with distance shading and side-based lighting - Z-buffer for correct sprite occlusion - Head bob while walking **Controls** - **WASD** — move (strafe with A/D) - **Shift** — run - **Mouse** or **Arrow keys** — turn - **Click** or **Space** — shoot **Enemies** - Two types: red grunts (fast, low HP) and blue officers (tough, high damage) - AI: they patrol, alert when you shoot or they spot you, then chase and melee attack - Death animations and score tracking **HUD** - Health bar, ammo counter, score, enemies remaining, crosshair, minimap with player/enemy positions **Audio** - Procedural Web Audio API sounds for shooting, hits, kills, damage, and empty clicks **Game Flow** - Start screen → gameplay → death or win screens → restart - Procedurally generated mazes with loop openings for interesting navigation

TAKE IT TO CODE

A single self-contained HTML file — copy it and open in any browser, or reuse the prompt with your own pi-agent run.

RUN

modelqwen3.5-plus-20260420
vendorQwen
harnesspi-agent
generated2026-08-01

EVALUATION

2/5 partial

Only a start menu with instructions is shown; clicking ENTER DUNGEON never actually started the raycaster gameplay.

Vision grade · anthropic/claude-sonnet-5

MEASUREMENTS

Raw readings from the capture, not a verdict — the grade above is the only judgement. Percentages are how much of the screen changed; the measure under-reports sparse motion on a dark background.

idle motion0.0%
on click0.0%
on drag0.0%
on wheel0.0%
on enter + space0.0%
on arrow keys0.0%
on w/a/s/d0.0%
frame spread6.8 / 255
console errors0
js errors none

METRICS

runtime256.9s
tokens in46k
tokens out14k
cached0
cost / run$0.0388