Swish Shots: A Free-Throw Range of Moving Hoops

Work a night practice range of free throws, in one small offline HTML file: drag back and release to arc the ball along a dotted preview, hoops drift on rails, streaks light the score runes and a shot clock keeps every possession honest. A three.js court, crowd and synth audio, all built in code.

Swish Shots: A Free-Throw Range of Moving Hoops

Bring the court, the hoops and the rules, and optionally the shot arc, the clock and streak numbers, the look and the UI text. The Skill returns a downloadable Skill (the free-throw project, a customize guide, headless verification) and one playable example run.

How it works

  1. Your coding agent copies the working game and follows the customize guide: court dressing, hoop motion, the drag-aim preview, scoring and streaks, palette and the synth audio.

  2. The original was an open-ended shooting toy; this rewrite adds the full loop: a shot clock, moving hoops on rails, streak scoring and a best run that persists.

  3. The game is played headlessly under the sandbox policy: menu, start, two missed drags, two made shots, a streak reset, pause and mute, the Chinese UI and a phone shot.

Frequently asked questions

Does it call a model or need a key?

No. The Skill gives your agent a working game, a customize guide and verification; the game itself makes no network calls and calls no model.

Why is the demo sandboxed?

The frame has an opaque origin and no network access, so the scene can’t read anything from this page or reach the internet.

Is the game bilingual?

Yes. Both the page and the game’s own UI switch between English and Chinese.

Where does it come from?

It is a rewrite: the mechanics were rebuilt from scratch over a much-loved shooting-toy idea, with no original code, art or audio carried over.

Does it work on mobile?

Yes: drag and release shoots under touch. Verified under touch emulation, not on real devices.

Why is there no online generation?

Building a new scene needs a model key inside the sandbox, which the backend doesn’t support yet. Run the Skill with your own agent for now.