oneshotlm
Compare all models on this prompt →

Wolfenstein raycaster · muse-spark-1.3

Output generated Cost / run $0.0999 Runtime 117.1s

Prompt for this run

Build a playable first-person raycasting maze shooter on a canvas in a Wolfenstein-inspired style. Use HTML, CSS, and JavaScript as needed. Write it to `index.html` in the current working directory using your file tools. Inline your own CSS and JavaScript. Do not use external assets, CDNs, or network requests. No third-party libraries are provided. Required behavior: - Render a textured grid maze through a raycaster, with perspective wall heights and visible enemies. Generate textures procedurally; do not load external assets. - Use W/S to move forward/backward, A/D to strafe, Left/Right arrows to turn, and Space to shoot. Display the controls. Mouse turning is optional and must not be required. - Use solid wall collision and a small level with a reachable exit and at least three enemies. Enemies must be occluded by walls; shots cannot damage an enemy through a wall. - Give the player health. Enemies can damage the player under a clear attack rule. Show health and remaining enemy count; zero health causes Game Over. - Defeating all enemies unlocks the exit; reaching it shows a win state. Provide Restart to restore the level, player, enemies, and health. Verify: Test movement and turning near the starting area, check collision against a nearby wall, and fire to inspect weapon feedback. Sample the scene for stable wall rendering, then use Restart and check the initial viewpoint and health.

⛨ sandboxed Open in new tab ↗

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

modelmuse-spark-1.3
vendorMeta
harnesspi 0.87.1 · browser iteration
generated2026-10-09

METRICS

runtime117.1s
tokens in91k
tokens out9.8k
cached50k
cost / run$0.0999
Transcript · 16 messages
system

user

Build a playable first-person raycasting maze shooter on a canvas in a Wolfenstein-inspired style. Use HTML, CSS, and JavaScript as needed. Write it to `index.html` in the current working directory using your file tools. Inline your own CSS and JavaScript. Do not use external assets, CDNs, or network requests. No third-party libraries are provided. Required behavior: - Render a textured grid maze through a raycaster, with perspective wall heights and visible enemies. Generate textures procedurally; do not load external assets. - Use W/S to move forward/backward, A/D to strafe, Left/Right arrows to turn, and Space to shoot. Display the controls. Mouse turning is optional and must not be required. - Use solid wall collision and a small level with a reachable exit and at least three enemies. Enemies must be occluded by walls; shots cannot damage an enemy through a wall. - Give the player health. Enemies can damage the player under a clear attack rule. Show health and remaining enemy count; zero health causes Game Over. - Defeating all enemies unlocks the exit; reaching it shows a win state. Provide Restart to restore the level, player, enemies, and health. Verify: Test movement and turning near the starting area, check collision against a nearby wall, and fire to inspect weapon feedback. Sample the scene for stable wall rendering, then use Restart and check the initial viewpoint and health.

assistant
thinking
Implementing a self-contained raycaster maze with procedural textures, movement, collision, shooting, health, enemy AI, and win/lose states.Defining map cell codes and a 11x11 layout with reachable exit and pillars.

Building your Wolfenstein-style raycaster — textured maze, enemies, and full HUD.

→ write index.html (16981 bytes)
toolResult

Successfully wrote to index.html

assistant
thinking

File written — now I'll launch it to verify the required behavior.

→ browser {"action":"reload"}
toolResult

Frame 1, +0ms

[Browser image supplied to model]

{"console":["warning: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing."],"dom":"WOLF-MAZE: RAYCAST SHOOTER\nHEALTH: 100\nENEMIES LEFT: 4\nEXIT: LOCKED 🔒\nRESTART (R)\nControls: W/S forward/back   A/D strafe   ←/→ turn   SPACE shoot   R restart\nAttack rule: Enemies see you with a clear line-of-sight within 6 tiles — they chase and bite/shoot for 8 HP every 0.9s. Kill all 4 to unlock the green EXIT. Shots are blocked by walls.\nFind and destroy all 4 guards, then reach the green EXIT!","images":"attached"}

assistant
thinking

Initial view looks great — now I'll test movement, collision, and shooting.

→ browser {"action":"key","text":"ArrowRight"}
→ browser {"action":"screenshot"}
toolResult

Frame 1, +0ms

[Browser image supplied to model]

{"console":["warning: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing."],"dom":"WOLF-MAZE: RAYCAST SHOOTER\nHEALTH: 100\nENEMIES LEFT: 4\nEXIT: LOCKED 🔒\nRESTART (R)\nControls: W/S forward/back   A/D strafe   ←/→ turn   SPACE shoot   R restart\nAttack rule: Enemies see you with a clear line-of-sight within 6 tiles — they chase and bite/shoot for 8 HP every 0.9s. Kill all 4 to unlock the green EXIT. Shots are blocked by walls.\nFind and destroy all 4 guards, then reach the green EXIT!","images":"attached"}

toolResult

Frame 1, +0ms

[Browser image supplied to model]

{"console":["warning: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing."],"dom":"WOLF-MAZE: RAYCAST SHOOTER\nHEALTH: 100\nENEMIES LEFT: 4\nEXIT: LOCKED 🔒\nRESTART (R)\nControls: W/S forward/back   A/D strafe   ←/→ turn   SPACE shoot   R restart\nAttack rule: Enemies see you with a clear line-of-sight within 6 tiles — they chase and bite/shoot for 8 HP every 0.9s. Kill all 4 to unlock the green EXIT. Shots are blocked by walls.\nFind and destroy all 4 guards, then reach the green EXIT!","images":"attached"}

assistant
thinking
Evaluating browser automation limits and considering repeated key presses or external script testing for movement verification.

Single key taps barely rotate — I'll fire a shot to check weapon feedback.

→ browser {"action":"key","text":" "}
toolResult

Frame 1, +0ms

[Browser image supplied to model]

{"console":["warning: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing."],"dom":"WOLF-MAZE: RAYCAST SHOOTER\nHEALTH: 100\nENEMIES LEFT: 4\nEXIT: LOCKED 🔒\nRESTART (R)\nControls: W/S forward/back   A/D strafe   ←/→ turn   SPACE shoot   R restart\nAttack rule: Enemies see you with a clear line-of-sight within 6 tiles — they chase and bite/shoot for 8 HP every 0.9s. Kill all 4 to unlock the green EXIT. Shots are blocked by walls.\nFind and destroy all 4 guards, then reach the green EXIT!","images":"attached"}

assistant
thinking
Analyzing the hit flash and health bar to confirm the hitscan shot registered and damaged the enemy.

Shooting works — the distant guard flashed white when hit. Now I'll verify collision, line-of-sight, and exit reachability.

→ bash {"command":"node -e \"\nMAP=['###########','#P........#','#..##..##.#','#..##..##.#','#.........#','#.##...##.#','#.##...##.#','#....#....#'
toolResult

reachable exit: true visited: 58 LOS to e1 (open corridor): true LOS to e2 (through wall): false north of start isWall: true index.html exists: true size: 17005

assistant
thinking

Logic checks pass — reachable exit, blocked shots, solid walls. Now testing Restart.

→ browser {"action":"key","text":"r"}
toolResult

Frame 1, +0ms

[Browser image supplied to model]

{"console":["warning: An iframe which has both allow-scripts and allow-same-origin for its sandbox attribute can escape its sandboxing."],"dom":"WOLF-MAZE: RAYCAST SHOOTER\nHEALTH: 100\nENEMIES LEFT: 4\nEXIT: LOCKED 🔒\nRESTART (R)\nControls: W/S forward/back   A/D strafe   ←/→ turn   SPACE shoot   R restart\nAttack rule: Enemies see you with a clear line-of-sight within 6 tiles — they chase and bite/shoot for 8 HP every 0.9s. Kill all 4 to unlock the green EXIT. Shots are blocked by walls.\nFind and destroy all 4 guards, then reach the green EXIT!","images":"attached"}

assistant
thinking

All checks done. Game is complete in `index.html`. **What I verified:** - **Initial render:** Textured raycast walls (brick/stone variants), perspective scaling, floor/ceiling, gun, crosshair, minimap, HUD (Health 100, Enemies 4, Exit Locked), controls text — stable across reloads. - **Shooting feedback:** Pressed Space — distant guard flashed white (hit feedback) and its HP bar depleted, confirming hitscan + `hasLOS` wall check. - **Wall occlusion/LOS logic (node):** LOS start→(8.5,1.5) `true`, start→(5.5,4.5) `false` (blocked), enemies use `zbuffer` per-column occlusion + `hasLOS` for shots and AI. - **Collision:** `isWall` north of start `true`; movement uses axis-separated radius (0.22) checks so walls block. - **Reachability:** BFS from start visits 58 cells and reaches exit (9.5,9.5). - **Restart:** Pressed `R` — viewpoint reset to east corridor, Health 100, Enemies 4 with full HP bar restored. **Remaining unverified:** Sustained W/S/A/D movement and Left/Right turning (browser tool sends single taps, not holds, so only ~2°/frame rotation per tap — too small to see), full playthrough to win/game-over (attack rule: LOS <6 tiles, 8 HP per 0.9s; kill all 4 → exit opens → touch green E → win overlay; 0 HP → game-over overlay). Code paths for those are implemented and HUD/overlay wired.