Repository navigation
Expand file tree
/
Copy pathfeature.html
More file actions
501 lines (458 loc) · 44 KB
/
Copy pathfeature.html
File metadata and controls
501 lines (458 loc) · 44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pool Masters — Roadmap</title>
<style>
:root{
font-family:Inter,ui-sans-serif,system-ui,sans-serif;
--bg:#07110d;--panel:#0d1d16;--panel2:#10241a;--line:#20372c;
--green:#42d983;--text:#ecf6ef;--muted:#8fa89a;--muted2:#6d8175;
--yes:#42d983;--yes-bg:#123526;--partial:#ffc957;--partial-bg:#2b230f;
--no:#5a6b62;--no-bg:transparent;--star-bg:#1d4a34;--star:#8ff0bb;
}
*{box-sizing:border-box}
body{
margin:0;color:var(--text);background:radial-gradient(circle at 20% 0,#123526 0,transparent 36%),var(--bg);
line-height:1.5;padding-bottom:80px;
}
header{
max-width:1180px;margin:0 auto;padding:clamp(40px,7vw,80px) clamp(20px,4vw,32px) 20px;
}
.eyebrow{color:var(--green);font-size:.72rem;font-weight:900;letter-spacing:.17em;text-transform:uppercase}
h1{font-size:clamp(2.2rem,5vw,3.4rem);line-height:1.05;letter-spacing:-.03em;margin:14px 0 18px}
h1 em{font-style:normal;color:#93bda6}
header>p{color:var(--muted);max-width:680px;font-size:1.05rem;margin:0 0 8px}
.meta{color:var(--muted2);font-size:.82rem;margin-top:18px}
main{max-width:1180px;margin:0 auto;padding:0 clamp(20px,4vw,32px)}
section{margin-bottom:56px}
h2{font-size:1.3rem;margin:0 0 6px;letter-spacing:-.01em}
h2 .n{color:var(--green);margin-right:8px}
.section-sub{color:var(--muted);font-size:.9rem;margin:0 0 20px;max-width:760px}
/* verdict cards */
.verdict-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.card{background:linear-gradient(145deg,var(--panel2),#0a1711);border:1px solid var(--line);border-radius:16px;padding:18px 20px;box-shadow:0 20px 50px #0005}
.card h3{margin:0 0 8px;font-size:.95rem;display:flex;align-items:center;gap:8px}
.card p{margin:0;color:var(--muted);font-size:.85rem}
.card.strength h3::before{content:"●";color:var(--green)}
.card.gap h3::before{content:"●";color:var(--partial)}
/* roadmap list */
.roadmap{display:grid;gap:10px}
.rm{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:start;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px 18px}
.rm .rank{font-size:1.4rem;font-weight:900;color:var(--green);min-width:28px}
.rm h4{margin:0 0 4px;font-size:.95rem}
.rm p{margin:0;color:var(--muted);font-size:.83rem}
.rm .tag{font-size:.66rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:999px;white-space:nowrap;align-self:start}
.tag.high{background:#2b1414;color:#ff9d9d;border:1px solid #5a2a2a}
.tag.med{background:var(--partial-bg);color:var(--partial);border:1px solid #4a3a1a}
.tag.done{background:#123526;color:#8ff0bb;border:1px solid #2f6a4b}
.rm.shipped{border-color:#2f6a4b;background:linear-gradient(145deg,#0f2a1d,#0b1c14)}
.rm.shipped .rank{color:var(--star)}
.tag.low{background:#132018;color:#9fc4ab;border:1px solid #2a4636}
/* legend */
.legend{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:18px;font-size:.8rem;color:var(--muted)}
.legend span{display:inline-flex;align-items:center;gap:7px}
.dot{width:11px;height:11px;border-radius:4px;display:inline-block}
.dot.yes{background:var(--yes)}
.dot.partial{background:var(--partial)}
.dot.no{background:var(--no)}
.dot.star{background:var(--star)}
/* comparison table */
.table-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:16px;background:var(--panel)}
table{border-collapse:collapse;width:100%;min-width:920px;font-size:.83rem}
thead th{
position:sticky;top:0;background:#0f2117;z-index:2;
padding:14px 12px;text-align:left;border-bottom:1px solid var(--line);
font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
}
thead th.ours{color:var(--green)}
thead th small{display:block;font-weight:500;text-transform:none;letter-spacing:0;color:var(--muted2);margin-top:3px;font-size:.7rem}
tbody th{
position:sticky;left:0;background:var(--panel);z-index:1;
text-align:left;padding:10px 14px;font-weight:600;font-size:.83rem;
border-bottom:1px solid #182a20;white-space:nowrap;
}
tbody td{padding:10px 12px;border-bottom:1px solid #182a20;text-align:center}
tbody tr:last-child th,tbody tr:last-child td{border-bottom:0}
tbody tr:hover td,tbody tr:hover th{background:#0f2117}
td.ours,th.ours-col{background:#0e2118}
.cat-row th{
position:static;background:var(--panel2)!important;color:var(--green);
font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;padding:9px 14px;
border-bottom:1px solid var(--line);border-top:1px solid var(--line);
}
.cat-row td{background:var(--panel2)}
.pill{display:inline-flex;width:22px;height:22px;border-radius:7px;align-items:center;justify-content:center;font-size:.75rem;font-weight:900}
.pill.yes{background:var(--yes-bg);color:var(--yes)}
.pill.partial{background:var(--partial-bg);color:var(--partial)}
.pill.no{color:var(--no)}
.pill.unk{color:var(--muted2);font-weight:600}
.dot.unk{background:transparent;border:1px dashed var(--muted2)}
.pill.star{background:var(--star-bg);color:var(--star)}
.sources{color:var(--muted2);font-size:.78rem;line-height:1.9}
.sources a{color:#8ed0ad;text-decoration:none}
.sources a:hover{text-decoration:underline}
footer{max-width:1180px;margin:40px auto 0;padding:20px clamp(20px,4vw,32px);border-top:1px solid var(--line);color:var(--muted2);font-size:.8rem}
@media (max-width:640px){
table{font-size:.76rem}
thead th,tbody td{padding:8px}
}
</style>
</head>
<body>
<header>
<p class="eyebrow">Pool Masters · Roadmap</p>
<h1>What we have built,<br><em>and what is next.</em></h1>
<p>One roadmap. It compares the game with five commercial pool titles, lists what has shipped, ranks what is
worth building next, and names the things we are deliberately not copying.</p>
<p class="meta">Compiled September 2026 from each game's own store listing, so it shows what
they advertise, not everything they do. Where a listing does not mention a feature the table says
<strong>?</strong> (unknown), never "no". See Sources. Generated by <code>tools/build-roadmap.mjs</code>.</p>
</header>
<main>
<section>
<h2><span class="n">01</span>The field</h2>
<p class="section-sub">Five commercial games, chosen to span the market: the mobile giant, a
free-to-play PC title, and three paid PC games from a career-focused simulator to a
27-game collection.</p>
<div class="verdict-grid">
<div class="card"><h3 style="color:var(--green)">Pool Masters</h3><p>This project. Free in any browser, installable, with no ads and no purchases. Live voice and video in the match, a host-authoritative simulation, a shot coach, replay links, a daily shot, a career, challenges, house rules, and game modes nobody else lists.</p></div>
<div class="card"><h3>8 Ball Pool</h3><p>Miniclip. Free with in-app purchases; 4.8 million ratings on the App Store. 8-ball and 9-ball, ranked leagues that unlock venues, clubs and club quests, collectible cues, tables and avatars, friend challenges, spectating, controlled chat, and aim guidelines.</p></div>
<div class="card"><h3>Pure Pool Pro</h3><p>VooFoo Studios. $24.99 on PC. Career in 8-ball and 9-ball with handcrafted opponents across hundreds of events, challenge games, a daily challenge, leaderboards, crossplay online and local multiplayer, and unlockable cues, ball sets and baize.</p></div>
<div class="card"><h3>Virtual Pool 4</h3><p>Celeris. $24.99 on PC, with a mobile version. 27 games including snooker, billiards and straight pool, two career modes, single and double elimination tournaments, a trick-shot library, and video tutorials.</p></div>
<div class="card"><h3>Cue Club 2</h3><p>$18.99 on PC. Pool and snooker: 6, 7, 8, 9, 10-ball, 14.1, speed pool, killer and snooker, customisable rules, 2 to 4 players and spectating, bars to unlock, tables from 6 to 12 ft, and slow-motion replay with save.</p></div>
<div class="card"><h3>Real Pool 3D (Poolians)</h3><p>Free with in-app purchases on Steam. 8-ball, 15-ball, snooker and coin-team games, teams of up to six, more than ten prized events a day, avatars, profiles, chat and a friends list.</p></div>
</div>
</section>
<section>
<h2><span class="n">02</span>Shipped <small style="color:var(--muted2);font-weight:500">(22)</small></h2>
<p class="section-sub">Everything below is live. Each card says what it does and, where it matters, what it does not do yet.</p>
<div class="roadmap">
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>A second game mode — 9-ball</h4>
<p><strong>Shipped.</strong> Ten-ball diamond rack, lowest-ball-first, the cushion rule,
9-on-a-legal-shot wins (combinations included), 9 re-spotted on a foul, ball in hand
after any foul. It reused the whole physics/rendering/networking stack — this was a new
<code>rules.js</code> variant and a smaller rack, exactly as scoped. Available in
practice, private tables and quick play; unranked until the ranking tables know
which game a result came from.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Replay links</h4>
<p><strong>Shipped.</strong> Every shot is recorded as it plays — by the host from its
simulation, by guests and spectators from the snapshots they receive — and
<em>Copy replay link</em> packs it into a URL. A full 16-ball break is about 1,000
characters. Anyone can open the link and watch it (at full or quarter speed), with
sound. It records positions rather than re-simulating inputs, on purpose: two
JavaScript engines needn't agree to the last bit on sin, cos or pow, and billiards
amplifies a last-bit difference into a different shot.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Trick-shot / practice drill library</h4>
<p><strong>Shipped.</strong> Eleven one-shot drills on fixed tables, from a straight-in pot to
draw, follow, stop, bank, combination and kick shots, with a level, a tip, a
<em>Show me</em> that dials in the aim, power and spin, and progress kept in the
browser. A solve the hint aimed completes the drill but sets no record. Every drill is
proven solvable: a solver searched the real physics for each one, and the tests run its
hint through the game again, so a physics change that breaks a drill fails the build.
It also caught that the break tip was wrong (full power with no spin scratches every time).</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Achievements / trophies</h4>
<p><strong>Shipped.</strong> Twenty-seven trophies in seven groups (racks, nine-ball, skill,
opponents, practice, social, league), each with a progress bar toward its target, a toast
when one unlocks and a trophy case in the header. Stats are derived from what happened on
the table, so host and guest agree, and kept per device. Building it also found and fixed
a real bug: a shot that ended before the host's first snapshot was invisible to a guest.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Physics-constant inspector</h4>
<p><strong>Shipped, read-only.</strong> TABLE → <em>How the physics works</em> lists every constant the
simulation runs on (friction, restitution, spin decay, rest threshold, the fixed step), what each does,
the power-to-speed curve in game units and m/s, and ball and pocket size per table. Values are read live
from <code>physics.js</code>, and a test fails if a constant is added there without being described,
so the panel cannot drift. It is deliberately not tweakable: the same numbers drive every game, so
every player sees the same shot.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Daily shot</h4>
<p><strong>Shipped.</strong> One fixed table a day, the same for everyone, that a search of the real physics has shown can be solved. Difficulty rises through the week, the result is a shareable line, and there is no account or server, so it works offline. Two trophies hang off it.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Shot coach</h4>
<p><strong>Shipped.</strong> After a shot, the 🎓 Coach grades it against the best the AI can find from the same table: what you potted or why it was a foul, how often a shot like yours works for a steady player, and the coach's own pick with its odds, both watchable as replays on the table as it stood. It is the AI's play-it-out check turned on a person, and its answer is reproducible for a given table.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Hot-seat: two players, one device</h4>
<p><strong>Shipped.</strong> Pass the phone: no room code, no account, no network, and it works offline. It is the practice game with a second person where the AI was, so it plays both 8-ball and 9-ball with ball in hand, races to three, and names the players throughout. Ranked results and stats are deliberately left out.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Bank pool and one-pocket</h4>
<p><strong>Shipped.</strong> Two more games on a full rack of fifteen, first to eight. In bank pool a ball only scores if it touched a cushion on its way in; in one-pocket each player owns a foot corner and a ball scores for whoever owns the pocket it dropped in. Both are one pure rules function, the AI plays both (it finds bank shots by mirroring the pockets and confirming each candidate with a real play-out), and the shot coach knows what counts.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Cosmetics earned, not bought</h4>
<p><strong>Shipped.</strong> Trophies unlock four cues, four felts and three rail woods; locked choices show the trophy that unlocks them, and the trophy case says what each one gives. Everything that was free stays free, and the game still has no ads or purchases.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Career mode</h4>
<p><strong>Shipped.</strong> A ladder of ten opponents and venues across all four games that opens up as you win, on seven rungs of AI from novice to legend, with trophies and cosmetics as rewards. No server needed.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Challenge games</h4>
<p><strong>Shipped.</strong> Speed Pot, Perfect Potter and Clear the Table, each with a best.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>10-ball and straight pool</h4>
<p><strong>Shipped.</strong> Ten-ball on the nine-ball rules; straight pool as a race to 30 with re-racks and a point off a foul (uncalled).</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>House rules</h4>
<p><strong>Shipped.</strong> Race length, what the cue ball does after a foul, who breaks, the straight-pool score, and jump shots on or off. Online tables carry the rules and are never ranked when they are not the defaults.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Jump shots</h4>
<p><strong>Shipped.</strong> An optional house rule: a Jump button hops the cue ball over a ball in its way. In 2D the ball swells while it is airborne; in 3D it really rises.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Aim snapping and a follow-the-shot camera</h4>
<p><strong>Shipped.</strong> Aim snaps to the middle of a pocket (or a one-cushion bank) when you are close, can be turned off, and the 3D camera can follow the ball with an adjustable eye height.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Rogue Pool</h4>
<p><strong>Shipped.</strong> A solo roguelike run: clear each table within its shots, take one of three random upgrades (wider pockets, extra shots, lives, jump charges, a scratch shield, a second wind), and lose a life when you run out. The same seed is the same run.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Chaos Pool</h4>
<p><strong>Shipped.</strong> A scored game to 15 with a random twist dealt before every shot: a bonus pocket worth three, a bomb ball that blasts its neighbours, or a gravity well that bends the balls. The host deals it, so both players see the same one.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>A tidier lobby and a first-run tutorial</h4>
<p><strong>Shipped.</strong> The lobby is grouped: a primary row (Find a game, Practice vs AI, Two players on one device), the game settings (game, AI, table, house rules), then Sharpen your game (How to play, Daily shot, Drills and trick shots, Challenges, Puzzle maker) and Solo runs (Career, Rogue Pool). A new player is offered a five-step tutorial once: aim, power, cutting, spin and banks, each an ordinary drill with a plain explanation and a Show me.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Curated trick shots</h4>
<p><strong>Shipped.</strong> Twenty tables that one shot clears completely (eight with two balls, eight with three, four with four), under Drills. Each has a Show me button that sets up and plays the proven shot. Every one was found by searching the real physics, and the tests replay each through the physics, so a change that breaks one fails the build.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Obstacle tables</h4>
<p><strong>Shipped.</strong> A table option in the lobby for practice and two players on one device: Bumpers, Walls, Portals or the Gauntlet. Balls bounce off bumpers and walls and come out of the paired portal going the same way; a jump shot hops a bumper or wall. The AI, the solver and the physics all see them. Not yet: online tables, and placing your own in the puzzle maker.</p></div>
<span class="tag done">Shipped</span>
</div>
<div class="rm shipped">
<div class="rank">✓</div>
<div><h4>Puzzle maker</h4>
<p><strong>Shipped.</strong> Arrange a table, pick the ball to pot, and the computer searches the real physics for a shot. Only proven-solvable tables can be shared, and a puzzle link re-proves itself when it is opened.</p></div>
<span class="tag done">Shipped</span>
</div>
</div>
</section>
<section>
<h2><span class="n">03</span>What is worth building next</h2>
<p class="section-sub">Ranked by how many of the five have it and how well it fits what
the game already is. Each item names who has it.</p>
<div class="roadmap">
<div class="rm">
<div class="rank">1</div>
<div><h4>Tournaments and brackets</h4>
<p>Four of the five have tournaments, and it is the feature that gives a player a reason to come back tomorrow. Virtual Pool 4 offers single and double elimination, with handicaps; Real Pool 3D runs ten prized events a day. We have a race-to-3 match and nothing above it. The bracket logic is pure and easy; the cost is that a tournament needs shared, durable state, which means new database tables.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: 8 Ball Pool, Virtual Pool 4, Cue Club 2, Real Pool 3D</p></div>
<span class="tag high">High impact</span>
</div>
<div class="rm">
<div class="rank">2</div>
<div><h4>Killer and more than two players</h4>
<p>Cue Club 2 seats up to four and lists killer; Real Pool 3D has teams of up to six. Hot-seat for three or four players, killer/cut-throat, and two-versus-two are cheap to add to the shared-device mode. More than two online players changes the host-authoritative model and is a large piece of work.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: Cue Club 2, Real Pool 3D</p></div>
<span class="tag med">Next</span>
</div>
<div class="rm">
<div class="rank">3</div>
<div><h4>Ghost race</h4>
<p>Play against a friend’s recorded run of a drill, daily shot or Rogue table, shown as a ghost cue ball. Replays already record positions, so this needs no server: the run travels in a link.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: Nobody listed</p></div>
<span class="tag med">Next</span>
</div>
<div class="rm">
<div class="rank">4</div>
<div><h4>Friends list and clubs</h4>
<p>8 Ball Pool, Pure Pool, Virtual Pool 4 and Real Pool 3D have friends; 8 Ball Pool adds clubs and club quests. Deferred for now, since both need new database tables and it is not needed yet.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: 8 Ball Pool, Pure Pool Pro, Virtual Pool 4, Real Pool 3D</p></div>
<span class="tag low">Deferred</span>
</div>
<div class="rm">
<div class="rank">5</div>
<div><h4>Replay director and accessibility</h4>
<p>Replays record positions, so they can be played from any camera: scrub, slow-mo through the contact, orbit the cue ball. Separately, colour-blind-safe ball patterns, spoken shot commentary and larger touch targets, since every game here relies on colour alone to tell solids from stripes.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: Nobody listed</p></div>
<span class="tag low">Lower priority</span>
</div>
<div class="rm">
<div class="rank">6</div>
<div><h4>Called shots in straight pool, and Checkpoint or Rumble</h4>
<p>Straight pool here is uncalled, unlike the real game. Pure Pool also has Checkpoint and Royal Rumble challenge modes we do not.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: Pure Pool Pro, Cue Club 2</p></div>
<span class="tag low">Lower priority</span>
</div>
<div class="rm">
<div class="rank">7</div>
<div><h4>Snooker and carom</h4>
<p>Three of the five have snooker or carom billiards. It means a bigger table, different balls and scoring, and a different physics tuning. A large piece of work for a different audience, so it stays at the bottom.</p>
<p style="margin-top:6px;font-size:.76rem;color:var(--muted2)">Seen in: Virtual Pool 4, Cue Club 2, Real Pool 3D</p></div>
<span class="tag low">Lower priority</span>
</div>
</div>
</section>
<section>
<h2><span class="n">04</span>What we are deliberately not copying</h2>
<p class="section-sub">Commercial games have things that make money, not things that make a
better game. Naming them keeps the roadmap honest.</p>
<div class="roadmap">
<div class="rm">
<div class="rank">✕</div>
<div><h4>A coin economy, loot boxes and a paid pass</h4><p>8 Ball Pool sells coins, a Pool Pass and random items. Pool Masters has no ads and no purchases, and that is worth more to a player than another currency. Cosmetics stay earned.</p></div>
<span class="tag low">Not planned</span>
</div>
<div class="rm">
<div class="rank">✕</div>
<div><h4>Perks from owning more cues</h4><p>8 Ball Pool grants power for a bigger cue collection, which rewards spending. Cosmetics here are only cosmetic.</p></div>
<span class="tag low">Not planned</span>
</div>
<div class="rm">
<div class="rank">✕</div>
<div><h4>VR</h4><p>Real Pool 3D lists it as a tag. It would need a headset-first rebuild for a very small audience.</p></div>
<span class="tag low">Not planned</span>
</div>
<div class="rm">
<div class="rank">✕</div>
<div><h4>A native mobile app wrapper</h4><p>Four of the five competitors are mobile-native. The installable PWA already works offline for practice, and wrapping it for the app stores is ongoing work (review, push, updates) for no new game. The PWA is the mobile app.</p></div>
<span class="tag low">Not planned</span>
</div>
</div>
</section>
<section>
<h2><span class="n">05</span>Full comparison</h2>
<p class="section-sub">Scored from each game's store listing. A dashed <strong>?</strong> means the
listing does not say, which is different from "no".</p>
<div class="legend">
<span><i class="dot yes"></i> Has it</span>
<span><i class="dot partial"></i> Partial / limited</span>
<span><i class="dot no"></i> Its listing shows it does not</span>
<span><i class="dot unk"></i> Not stated in the listing I read (unknown, not "no")</span>
</div>
<div class="table-scroll">
<table>
<thead>
<tr>
<th>Feature</th>
<th class="ours">Pool Masters<small>this project</small></th>
<th>8 Ball Pool<small>Miniclip · free, IAP</small></th>
<th>Pure Pool Pro<small>VooFoo · $24.99</small></th>
<th>Virtual Pool 4<small>Celeris · $24.99</small></th>
<th>Cue Club 2<small>$18.99</small></th>
<th>Real Pool 3D<small>Poolians · free, IAP</small></th>
</tr>
</thead>
<tbody>
<tr class="cat-row"><th colspan="7">Rules and games</th></tr>
<tr><th>8-ball and 9-ball</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Rule variants beyond 8/9-ball<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Ours: 10-ball, bank pool, straight pool, one-pocket and Chaos Pool. Virtual Pool 4 lists 27 games; Cue Club 2 lists 6, 7, 10-ball, 14.1, speed pool and killer; Pure Pool has challenge games.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill no">–</span></td><td><span class="pill partial">~</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Straight pool (14.1)<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Ours is uncalled: every ball scores, a foul costs a point, first to thirty.</div></th><td class="ours"><span class="pill partial">~</span></td><td><span class="pill no">–</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Snooker or carom billiards</th><td class="ours"><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Party or arcade modes (killer, speed pot, rumble)<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Pure Pool: Speed Pot, Checkpoint, Perfect Potter, Royal Rumble. Ours: Speed Pot, Perfect Potter, Clear the Table, Rogue Pool and Chaos Pool. Killer is still to do.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Customisable rules<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Cue Club 2 lists "fully customisable rules". Ours: race length, ball in hand, who breaks, the straight-pool score, jump shots.</div></th><td class="ours"><span class="pill partial">~</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Table sizes<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Ours: 7, 8 and 9 ft. Cue Club 2: 6 to 12 ft.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr class="cat-row"><th colspan="7">Progression</th></tr>
<tr><th>Career or campaign against set opponents<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Pure Pool: hundreds of events, handcrafted opponents. Virtual Pool 4: Pro Tour and Hustler careers. Cue Club 2: bars, trophies. Ours: a ten-opponent ladder.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill no">–</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Tournaments and brackets<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Virtual Pool 4: single and double elimination, with handicap. Real Pool 3D: ten prized events a day.</div></th><td class="ours"><span class="pill no">–</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Ranked league with tiers<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Ours: Elo league (8-ball only). 8 Ball Pool: league levels that unlock venues.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill partial">~</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Daily challenge<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Pure Pool: Daily Clearance. Ours: the daily shot.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill no">–</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Unlockable cosmetics<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Cues, tables, ball sets, baize, avatars, chalk, depending on the game.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Clubs or guilds<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">8 Ball Pool: Club Quests.</div></th><td class="ours"><span class="pill no">–</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Achievements or trophies</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr class="cat-row"><th colspan="7">Multiplayer and social</th></tr>
<tr><th>Online player-versus-player</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Friends list or friend codes<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Deferred for us: no friends list yet.</div></th><td class="ours"><span class="pill no">–</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Local two-player on one device</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>More than two players at a table<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Cue Club 2: 2 to 4 players. Real Pool 3D: teams of up to six.</div></th><td class="ours"><span class="pill no">–</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Spectating live games</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Text chat<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">8 Ball Pool: "controlled chat" with unlockable emoji.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Voice and video in a match</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Crossplay across platforms<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Ours: any browser, and an installable app.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr class="cat-row"><th colspan="7">Practice and learning</th></tr>
<tr><th>Practice against the AI</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td></tr>
<tr><th>Trick shots or drills<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Virtual Pool 4 has a trick-shot library. Ours: eleven proven-solvable drills, and a puzzle maker.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Build and share your own puzzles<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">None of the listings mention it. Ours proves each puzzle solvable before it can be shared.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Tutorials or coaching<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Virtual Pool 4: video tutorials. Ours: the shot coach grades your shot against the AI's.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Slow-motion replay<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Cue Club 2: replay with a save facility.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Shareable replay by link</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill no">–</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>Aim guidelines</th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr class="cat-row"><th colspan="7">Platform and business</th></tr>
<tr><th>Runs with no install<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">8 Ball Pool has had a browser version; the others are Steam or app-store installs.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill partial">~</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td></tr>
<tr><th>Mobile<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Cue Club 2 is Windows, touchscreen compatible.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill yes">✓</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill yes">✓</span></td><td><span class="pill partial">~</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td></tr>
<tr><th>VR support<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">Real Pool 3D lists VR as a tag; its page gives no detail.</div></th><td class="ours"><span class="pill no">–</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill unk" title="not stated in the listing">?</span></td><td><span class="pill partial">~</span></td></tr>
<tr><th>Free, with no ads and no purchases<div style="font-weight:400;color:var(--muted2);font-size:.72rem;margin-top:3px;white-space:normal;max-width:300px">The others charge upfront or sell coins, passes or DLC.</div></th><td class="ours"><span class="pill yes">✓</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td><td><span class="pill no">–</span></td></tr>
</tbody>
</table>
</div>
</section>
<section>
<h2><span class="n">06</span>Sources</h2>
<p class="sources">
<a href="https://apps.apple.com/us/app/8-ball-pool/id543186831" target="_blank" rel="noopener">8 Ball Pool</a> — App Store listing.<br>
<a href="https://en.wikipedia.org/wiki/8_Ball_Pool" target="_blank" rel="noopener">8 Ball Pool</a> — Wikipedia.<br>
<a href="https://store.steampowered.com/app/3456930/Pure_Pool_Pro/" target="_blank" rel="noopener">Pure Pool Pro</a> — Steam page.<br>
<a href="https://store.steampowered.com/app/336150/Virtual_Pool_4/" target="_blank" rel="noopener">Virtual Pool 4</a> — Steam page.<br>
<a href="https://store.steampowered.com/app/366690/Cue_Club_2_Pool__Snooker/" target="_blank" rel="noopener">Cue Club 2</a> — Steam page.<br>
<a href="https://store.steampowered.com/app/670290/Real_Pool_3D__Poolians/" target="_blank" rel="noopener">Real Pool 3D (Poolians)</a> — Steam page.<br>
<a href="https://www.pockettactics.com/pool-games" target="_blank" rel="noopener">The best pool games in 2026</a> — Pocket Tactics.<br>
<a href="https://github.com/tailuge/billiards" target="_blank" rel="noopener">tailuge/billiards</a> — open-source browser pool, for its physics and replay ideas.<br>
<a href="https://ekiefl.github.io/projects/pooltool/" target="_blank" rel="noopener">Pooltool</a> — open-source physics research simulator.
</p>
</section>
</main>
<footer>Pool Masters roadmap · built from public store listings for internal planning, not as a competitive claim.</footer>
</body>
</html>