Skip to builds

Archery game (axes)

The second heavy build was a playable archery game: draw a real force-draw curve, loose one arrow, and thread it through twelve aligned axe-heads, with swept collision so the fast arrow can't tunnel through the rings. Every bit of it built procedurally in code.

  • GLM 5.2
  • Kimi K3

The prompt

# Build Prompt — Odysseus and the Trial of the Bow

This is a playable 3D archery game of Odysseus'
famous shot from the _Odyssey_: draw the great bow and send a single arrow through
twelve aligned axe-heads.

---

You are a world-class WebGPU, Three.js, and TSL graphics engineer AND game developer;
create a production-quality, fully playable 3D archery game: **Odysseus and the Trial
of the Bow.**

Deliver a directly runnable index.html and main.js using native ES modules, with no
framework, build step, image texture, HDRI, model, or video. Everything — the bow, the
arrow, the axes, the hall, the figures — is built procedurally in code.

## The game
The player is Odysseus in the great hall of Ithaca. Twelve bronze axe-heads stand
upright in a row down the hall, each with a ring/socket hole, **all holes aligned**.
The goal: **draw the bow and shoot one arrow cleanly through all twelve holes.**

**Core mechanic — draw and release:**
- **Draw:** press-and-hold (mouse/touch) to draw the bowstring back. Model a real
  **force–draw curve** — string tension rises with draw length and stores elastic
  energy; the bow visibly bends and the string pulls taut. Holding too long introduces
  a **noise-driven aim sway** (simplex "breathing" that grows with hold time), so a
  perfect shot requires timing, not just full power.
- **Aim:** move to aim; give a subtle aiming reticle and a faint **ballistic
  trajectory-arc preview** sampled from the same physics model (assist toggle).
- **Release:** let go to loose the arrow. Launch velocity comes from the stored draw
  energy. The arrow flies with **gravity, quadratic aerodynamic drag, and
  fletching-stabilized spin (angular momentum)**, plus a subtle **archer's-paradox**
  flex as it leaves the bow.
- **Physics loop:** integrate with a **fixed-timestep accumulator** (semi-implicit
  Euler or Verlet) so the simulation is stable and deterministic regardless of frame
  rate.
- **Collision:** use **continuous / swept collision detection** — raycast the
  arrowhead along its travel each substep — so the fast arrow cannot **tunnel** through
  the thin aligned rings. Test passage through each ring's inner radius vs. striking
  the blade. Passing all twelve = win; clipping any axe = miss. Score each pass by how
  centered the arrow threads the ring.

**Feel & feedback:**
- On release, a brief **time-dilation slow-motion** (scale delta time, not
  frame-skip) with an **arrow-cam** that follows the arrow down the line of axes, plus
  a motion trail.
- Clear **win** (arrow threads all twelve, the hall reacts) and **miss** (which axe it
  hit) states, and a quick retry.
- Optional: **Web Audio synthesized** SFX — bow creak on draw, string twang on
  release, arrow whoosh, thunk on hit (no imported audio files).
- Optional: suitors watching in the background; a shot counter / best streak.

## Rendering quality (hold this bar)
- Use **WebGPURenderer** and **TSL**. **ACES filmic** tone mapping and **TSL bloom**.
- **PBR metallic-roughness** materials: high-metalness anisotropic **bronze**
  axe-heads with **Fresnel rim light**, procedural **wood-grain** (noise) on the bow
  and hall beams, **FBM / triplanar stone** for the walls and floor.
- Torch-lit atmosphere: **noise-driven torch flicker**, **volumetric light shafts /
  god rays**, **emissive flames** with bloom, **depth-based haze** down the hall, and
  **instanced dust motes** drifting in the light.
- **Soft shadows (PCF / shadow maps)** and **ambient occlusion**. Use **instanced
  rendering** for the twelve axes, the watching suitors, and particles.
- Camera: a **critically-damped spring** rig — over-the-shoulder aim → arrow-cam on
  release → ease back on retry. **Depth-of-field focus pull (bokeh)** during the
  slow-mo, a subtle **FOV kick** on full draw, and **camera shake** on release.
  (Free-orbit allowed for replay only.)

## Runtime handling (required)
Handle WebGPU detection with a graceful message, loading and failure states, window
resize, touch input, capped DPR, hidden-tab pausing, accessibility (keyboard-playable
alternative to draw/aim/release, reduced-motion option), and performance safeguards.
Show a live FPS readout and a difficulty/assist control (arc hint on/off, waver
amount).

## Deliverable
Return complete, executable code and brief launch instructions — no placeholders, no
invented APIs, no console errors, no hidden fallback rendering. The game must actually
be playable and winnable.

The exact prompt from the published test.

The builds

GLM 5.2 · Screenshot of the buildRuns in your browser

The full write-upGLM 5.2 vs Kimi K3: Which Cheap Coding Model Actually Wins?Read the article

Written by

Pat Simmons. Pat tests AI models and tools on the AI for Mortals YouTube channel.

AI FOR MORTALS.

Your daily AI edge that will make everyone wonder how you do it all.

Every weekday, the practical AI updates that matter, and exactly what to do with them.

The latest in AI, in plain English. Free, every weekday.