Neon 8-Ball Pool
3D 8-ball pool with real ball physics — HTML5
Overview
A full 8-ball pool game on a warm 3D pool table: real ball physics, official-style rules with fouls and ball in hand, three computer levels and two players on one device.
- Ball physics with sub-steps: ball-to-ball collisions, cushions, pockets and friction
- 8-ball rules: break, open table, solids vs stripes, fouls, ball in hand, 8-ball last
- Computer opponent with three levels that picks and plans its shots
- Two players on one device (hot-seat) mode
- Aim guide, pull-back power stroke, 3D and top-down cameras
- Warm pool-hall look with numbered ball textures, music and sound effects
- Touch, mouse and keyboard controls, portrait and landscape
- No libraries, no build step, works on any static host
Requirements
- Any modern browser (Chrome, Edge, Firefox, Safari 15+, iOS and Android)
- Any static web host — no server code, no database
Technology: HTML5 · WebGL (own renderer) · Web Audio · JavaScript.
Quick start
- Unzip the package.
- Upload the
game/folder to your web host, for example as/games/8-ball-pool/. - Open
https://your-site.com/games/8-ball-pool/index.html. No install, no database, no server code.
To try it on your computer first, start any local web server inside game/:
cd game
python3 -m http.server 8080
# then open http://localhost:8080/index.htmlBrowsers block some features (workers, 3D model files) for pages opened straight from disk, so always test through a web server.
How to play & controls
Drag to aim, pull back and release to shoot (or use the power bar). Pot all your balls — solids or stripes — then sink the 8-ball to win. Fouls give your rival ball in hand.
| Aim | Drag on the table or move the mouse · ← / → keys |
|---|---|
| Shoot | Pull back and release · power bar · Space |
| Ball in hand | Drag the cue ball to a free spot |
| Sound / camera | Buttons on the table screen · Menu bottom-left |
File structure
game/index.html | The page: start menu markup and the GAME_CONFIG settings (texts, difficulty levels, colours). |
|---|---|
game/host.js · game/host.css | The host: start menu, loading, countdown, pause on tab switch, result card. |
game/games/8-ball-pool/game.js | The game itself: rules, computer opponent, rendering, input, sound. |
game/games/_shared/neon3d.js | Small WebGL renderer used for the 3D view (no library needed). |
game/games/8-ball-pool/assets/ | Models, textures and sound (44 files). |
game/fonts/ | Inter and Unbounded fonts, self-hosted (OFL). |
documentation/index.html | This documentation. |
LICENSE.txt · THIRD-PARTY.txt · CHANGELOG.md | Licence terms, bundled components, version history. |
Configuration
The start menu is driven by window.GAME_CONFIG in game/index.html:
name, titleHtml, kicker, lead, howTo | Texts of the start menu (titleHtml may use <em> for the coloured word). |
|---|---|
levels | Difficulty buttons: [key, label, hint]. The keys are the computer levels the game knows: easy, normal, hard. |
defaultLevel | Level selected on the first visit (the player's last choice is remembered). |
hotseat | true = show the "2 Players · same device" button. |
players | Names used for the two players in two-player mode. |
backUrl (optional) | Adds a "← All games" link to the start menu, e.g. back to your games page. |
Colours: --acc and --acc2 in the <style> line of index.html; --menu-bg is the menu background picture.
Customise & rebrand
Gameplay settings live near the top of game/games/8-ball-pool/game.js. Search for these names:
TW / TH / R | Table size and ball radius. |
|---|---|
POCKETS | Pocket positions and sizes. |
VMAX / FRIC / E_BALL / E_RAIL | Top shot speed, rolling friction, ball and cushion bounce. |
AI_LEVEL | Aim error and shot planning of each computer level. |
COLORS / SEAT_C | Ball colours and the colours of the two players. |
Art and sound
Replace files in game/games/8-ball-pool/assets/ with your own, keeping the same file names and formats (WebP images, MP3 sound).
Name and credit
Change the <title>, the meta description and the menu texts in index.html. The small "Made by Vortaxis Studio" credit may be kept or removed.
Embed in a page
<iframe src="/games/8-ball-pool/index.html" title="Neon 8-Ball Pool"
width="100%" height="680" allow="fullscreen; autoplay"
style="border:0;border-radius:16px"></iframe>Game portals (CrazyGames, Poki, itch.io and similar) accept the game/ folder as an HTML5 upload; add their SDK calls in host.js (start, result, pause).
FAQ
Does it need a server or database?
No. It is static HTML, CSS and JavaScript. Any web host works; it plays fully offline once loaded.
Is there online multiplayer?
Not out of the box: you play against the computer or with a friend on the same device. The game code accepts a multiplayer adapter (ctx.multiplayer: sendMove / onMove), so online play can be added with your own real-time server — we can quote it as custom work.
Can I change the art, colours and texts?
Yes. Texts and colours are in index.html, gameplay values near the top of game.js, and all pictures, models and sounds are plain files you can replace.
Does it work on phones?
Yes — touch, mouse and keyboard controls, portrait and landscape, high-DPI screens.
What is the difference between Licence and Full source?
Licence = one end product (yours or one client's). Full source = one production domain for you and your clients, including white-label, paid games and SaaS. Neither allows reselling the game or its source on its own.
Can I put it on game portals and show ads?
Yes, in your own end product. Add the portal or ad SDK calls in host.js.
Support & updates
Updates are free. Questions are answered for 6 months after purchase (12 months with Full source) — write to hello@vortaxis.com or use vortaxis.com/store. Need a custom version (your art, online play, leaderboards, a portal SDK)? Ask for a quote.