Club No.9

Lean in to aim, charge the shot, add spin, and replay every stroke in this first-person 3D pool hall. Copy the prompt to build it.

Loading preview...
Start with this prompt

Generate a first-person physics pool web game with bar mini-games and shot replays.

Snooker Hall

Switch rules and table to snooker

Try Kimi Build
Build a purely static, build-step-free first-person physics pool web game called "CLUB No.9" using Three.js + Rapier (@dimforge/rapier3d-compat), with a Chinese interface (Chinese-English toggle), desktop keyboard-and-mouse controls, and automatic spectator mode on touch screens.

Requirements:

Scene: load the Sketchfab bar model Bar Diorama as the pool hall (hide its built-in tables), use Poly Haven walnut textures for the cushions and cue wood finish, and a fireplace HDRI for environment reflections; generate all remaining textures — baize, ball numbers, flooring — procedurally on Canvas (deterministic PRNG, identical on every load).

Pool gameplay: Rapier rigid-body physics, 57.2mm regulation balls, table surface fitted to the model's cushions; first-person walk mode (WASD) plus E to lean in and aim; hold the left button to charge, scroll wheel to fine-tune power, Space to shoot; A/D for side spin, W/S for follow and draw, R to reset the cue; F for ball-in-hand, T to re-rack, G to switch between match and practice; the aim guide line can be toggled. Keep the physics core (sim.js) separate from rendering (world.js): physics is the single source of truth, rendering only reads and never writes, and the physics core must not depend on the DOM and must run tests in Node.

Rules: local two-player simplified Chinese eight-ball (the first ball potted after the break assigns groups, the black eight decides the game, fouls award ball-in-hand), plus a free practice mode; scoreboard, combo flames, achievement badges, and pot close-up cameras (can be disabled). Switch the game from Chinese eight-ball to snooker: use a 12-foot table with 15 reds, alternate reds and colors for scoring, and respot colors after they are potted. Add a century-break badge and a scoreboard, keeping the darts and dice bar mini-games unchanged. Replay system: every shot can be replayed (V), with a draggable timeline and 0.1x–1x variable speed.

Bar mini-games (props live permanently in the scene and trigger when the player walks up): darts (standard 20-segment board, trajectory solver, three darts per round, 180 badge), dice-cup high-low (a real dice cup model plus a separate Rapier mini world for shaking), whisky pouring, and Russian roulette (revolver model).

Audio: real CC0 pool samples from the Freesound community (ball impacts, cushions, pockets, break, rack, cheers, with multiple slice variants played at random) plus Web Audio procedural room reverb (impulse response generated from noise decay) and a limiter; the user provides a lounge jazz loop as BGM, M to mute.

Engineering: use an import map to pull in three/rapier; an i18n dictionary drives all copy; a settings panel (language / pot close-up / aim guide) and an "About · open-source assets and licenses" credit panel; three Node test suites under test/ for physics, darts, and bar logic.
Challenge Levels

Add trick-shot challenge levels

Try Kimi Build
Build a purely static, build-step-free first-person physics pool web game called "CLUB No.9" using Three.js + Rapier (@dimforge/rapier3d-compat), with a Chinese interface (Chinese-English toggle), desktop keyboard-and-mouse controls, and automatic spectator mode on touch screens.

Requirements:

Scene: load the Sketchfab bar model Bar Diorama as the pool hall (hide its built-in tables), use Poly Haven walnut textures for the cushions and cue wood finish, and a fireplace HDRI for environment reflections; generate all remaining textures — baize, ball numbers, flooring — procedurally on Canvas (deterministic PRNG, identical on every load).

Pool gameplay: Rapier rigid-body physics, 57.2mm regulation balls, table surface fitted to the model's cushions; first-person walk mode (WASD) plus E to lean in and aim; hold the left button to charge, scroll wheel to fine-tune power, Space to shoot; A/D for side spin, W/S for follow and draw, R to reset the cue; F for ball-in-hand, T to re-rack, G to switch between match and practice; the aim guide line can be toggled. Keep the physics core (sim.js) separate from rendering (world.js): physics is the single source of truth, rendering only reads and never writes, and the physics core must not depend on the DOM and must run tests in Node.

Rules: local two-player simplified Chinese eight-ball (the first ball potted after the break assigns groups, the black eight decides the game, fouls award ball-in-hand), plus a free practice mode; scoreboard, combo flames, achievement badges, and pot close-up cameras (can be disabled). Add a challenge mode: twenty preset table layouts that must be cleared in one or two shots. Rate each level with up to three stars based on time and strokes used. Add a level select screen to the main menu, and unlock new cue skins for completing challenges. Replay system: every shot can be replayed (V), with a draggable timeline and 0.1x–1x variable speed.

Bar mini-games (props live permanently in the scene and trigger when the player walks up): darts (standard 20-segment board, trajectory solver, three darts per round, 180 badge), dice-cup high-low (a real dice cup model plus a separate Rapier mini world for shaking), whisky pouring, and Russian roulette (revolver model).

Audio: real CC0 pool samples from the Freesound community (ball impacts, cushions, pockets, break, rack, cheers, with multiple slice variants played at random) plus Web Audio procedural room reverb (impulse response generated from noise decay) and a limiter; the user provides a lounge jazz loop as BGM, M to mute.

Engineering: use an import map to pull in three/rapier; an i18n dictionary drives all copy; a settings panel (language / pot close-up / aim guide) and an "About · open-source assets and licenses" credit panel; three Node test suites under test/ for physics, darts, and bar logic.
Beginner Lessons

Add aiming and spin lessons for new players

Try Kimi Build
Build a purely static, build-step-free first-person physics pool web game called "CLUB No.9" using Three.js + Rapier (@dimforge/rapier3d-compat), with a Chinese interface (Chinese-English toggle), desktop keyboard-and-mouse controls, and automatic spectator mode on touch screens.

Requirements:

Scene: load the Sketchfab bar model Bar Diorama as the pool hall (hide its built-in tables), use Poly Haven walnut textures for the cushions and cue wood finish, and a fireplace HDRI for environment reflections; generate all remaining textures — baize, ball numbers, flooring — procedurally on Canvas (deterministic PRNG, identical on every load).

Pool gameplay: Rapier rigid-body physics, 57.2mm regulation balls, table surface fitted to the model's cushions; first-person walk mode (WASD) plus E to lean in and aim; hold the left button to charge, scroll wheel to fine-tune power, Space to shoot; A/D for side spin, W/S for follow and draw, R to reset the cue; F for ball-in-hand, T to re-rack, G to switch between match and practice; the aim guide line can be toggled. Keep the physics core (sim.js) separate from rendering (world.js): physics is the single source of truth, rendering only reads and never writes, and the physics core must not depend on the DOM and must run tests in Node.

Rules: local two-player simplified Chinese eight-ball (the first ball potted after the break assigns groups, the black eight decides the game, fouls award ball-in-hand), plus a free practice mode; scoreboard, combo flames, achievement badges, and pot close-up cameras (can be disabled). Add a tutorial mode for beginners: four lessons covering leaning in to aim, charging and power control, side spin and follow/draw, and cue-ball positioning. Each lesson pairs a demo animation with three hands-on drills, during which the aim guide is forced on with the cue-ball target point marked. Replay system: every shot can be replayed (V), with a draggable timeline and 0.1x–1x variable speed.

Bar mini-games (props live permanently in the scene and trigger when the player walks up): darts (standard 20-segment board, trajectory solver, three darts per round, 180 badge), dice-cup high-low (a real dice cup model plus a separate Rapier mini world for shaking), whisky pouring, and Russian roulette (revolver model).

Audio: real CC0 pool samples from the Freesound community (ball impacts, cushions, pockets, break, rack, cheers, with multiple slice variants played at random) plus Web Audio procedural room reverb (impulse response generated from noise decay) and a limiter; the user provides a lounge jazz loop as BGM, M to mute.

Engineering: use an import map to pull in three/rapier; an i18n dictionary drives all copy; a settings panel (language / pot close-up / aim guide) and an "About · open-source assets and licenses" credit panel; three Node test suites under test/ for physics, darts, and bar logic.