Second Chance

Research

Making the snooker real

There is a snooker club in Oakhaven called The Baulk Line, and one of its eight tables can be played. This page is about how much work that sentence is doing. Every dimension the rulebook actually specifies, the table matches exactly — and three of the numbers everybody quotes turn out not to be in the rulebook at all. The balls are driven by a sliding, rolling and spinning physics model with ball-on-ball throw, not by a canned animation. And before a line of the scoring was written we put 298 claims about the rules of snooker through an adversarial review, of which 34 came back wrong. The corrected rules are published in full at the rules of snooker, checked.

None of this is visible while you are playing, which is rather the point. What follows is the working.

A 1904 billiard hall: eight full-size snooker tables in two rows under a pitched north-light roof, each lit by its own long canopy light, with high windows down both walls and stools at the far end.
The Baulk Line, in engine. Eight tables; one of them plays.

The table is not “about right”

A snooker table is one of the most precisely specified objects in British sport. The rulebook gives the playing area, the ball diameter, the cushion height as a fraction of that diameter, and the spot positions in inches from named edges.1 Those numbers are the whole game: the pockets are barely wider than the balls, and a centimetre anywhere changes which shots are possible.

So the geometry lives in a single file, snooker_table.json,11 and nothing else in the project is allowed to hardcode any of it. The Blender script that builds the mesh reads it. The physics model reads it. The verifier reads it. The table you walk up to in the club is generated from the same numbers the solver collides against, which means the green you see and the line the ball actually bounces off cannot drift apart.

The contract, checked against the rulebook
MeasurementIn the gameOfficial 
Playing area356.9 × 177.8 cm11 ft 8½ in × 5 ft 10 inagrees
Ball diameter52.5 mm52.5 mmagrees
Ball mass142 gnominal 142 gagrees
Baulk line104.79 cm from centre29 in from the baulk cushionagrees
The D, radius29.21 cm11½ inagrees
Black spot146.065 cm from centre12¾ in from the top cushionagrees
Pink spot89.225 cm from centremidway, blue to top cushionagrees
Blue spotcentre of the tablecentre of the tableagrees
Apex redone ball diameter off the pinkas close as possible without touchingagrees
Rack row pitchd × √3/2a touching triangleagrees

Where the rulebook rounds to the nearest millimetre and the figure underneath is imperial, the game holds the imperial value. The baulk line is 29 inches from the bottom cushion, which is 736.6 mm; the book says 737.

Three of the numbers everybody quotes are not in the rulebook

Checking a table against the rules turns up something you would not guess from how confidently these figures circulate. The cushion nose height and both pocket mouth widths are not specified by any snooker rule.

The word “nose” does not appear in the WPBSA rulebook at all; its only height clause is floor-to-rail, which is furniture. And the current Section 1 rule on pockets reads, in full: “There shall be a pocket at each of the four corners of the table and one each at the middle of the longer sides.” No width, no radius, no undercut. There used to be a clause deferring pocket openings to templates held by the governing body. It was deleted in the August 2019 restructure.2

So these three are ours, taken from the best sources available, and they are labelled that way rather than dressed up as official:

Not specified by the rules — our figures, and where they come from
QuantityIn the gameBasis
Cushion nose height33.34 mm0.635 × ball diameter, from the World Pool-Billiard Association equipment specification — a pool body’s figure, scaled to a snooker ball.8
Corner pocket mouth86 mmTournament convention, measured at the right datum. Tight, deliberately.
Middle pocket mouth96 mmConvention, and the weakest of the three: the only attested middle figure we could find is 4 inches, measured at the top of the cushion rather than at the mouth.

The nose height is worth dwelling on, because the one peer-reviewed source that is specifically about snooker disagrees with us. Mathavan, Jackson and Parkin measured cushion impacts on a Riley Renaissance and then on the official World Snooker table, and put the nose at seven-fifths of the ball radius — 36.75 mm, against our 33.34.9 That is not a rounding difference. It moves the contact normal from 15.7° to 23.6°, which changes how much a ball hops off the cushion and how much spin it keeps.

We have kept 33.34 mm, for a reason that is itself in the rulebook: the English cushion has a flat face rather than a rounded one.10 A flat band about 9.5 mm deep centred near 33 mm spans roughly 28.6 to 38.1 mm, and brackets both candidates — so the effective contact height inside that band is a modelling choice rather than a fact. It sits in the source as a tuned constant with a stated range, not as a specification.

The number nobody typed in

The cloth is not a rectangle. A rectangular cloth would leave a triangle of green across each corner pocket, sitting exactly where the hole should be, and a ball would visibly roll over eighteen square centimetres of baize on its way into a pocket it had already legally entered. So the cloth is an octagon, chamfered across each corner on the fall line — the line the physics model pots a ball on.

The size of that chamfer is derived, not chosen. It falls out of the pocket geometry as 6.0796 cm. Which means the chord it cuts across the corner — the actual width of the opening — is that times the square root of two:

6.0796 × √2  =  8.598 cm

Our corner pocket mouth is 86 mm. Nobody entered that into the cloth. It is what the geometry produces when the cloth is cut on the same line the solver pots on — the art and the physics arriving at the same number from opposite directions. That is not agreement with a rule, because as above there is no rule. It is the contract agreeing with itself, which is the property that actually stops the green you see drifting away from the line the ball bounces off. The builder asserts it on every run, and the mesh refuses to build if it ever stops holding.13

The balls are not on rails

Every ball carries a position, a velocity, and a three-axis spin. The spin matters: two of its axes are the rolling spin and the third is the vertical-axis spin that makes side work. A shot is described by power, an aim angle, and where on the cue ball the tip strikes — and that contact point feeds straight into the model rather than being translated into a canned outcome. Above centre gives topspin, below gives screw, and off to one side gives side.

Miss the centre by too much and the model miscues, exactly as a real tip would, at a limit taken from the physics of a leather tip on a polished ball.

The constants, and what each one is for12
ConstantValueWhat it does
Sliding friction0.200Cloth against a ball that is skidding rather than rolling. Sets how far a screw shot drags before it takes.
Rolling resistance0.010Twenty times smaller. Why a rolling ball travels the length of the table and a sliding one does not.
Spin friction0.044Decay of side. Why side dies on a long shot and survives on a short one.
Ball-on-ball restitution0.950Snooker balls are hard. Very little energy is lost in the collision itself.
Ball-on-ball friction0.060Throw. The reason a cut shot does not go where the geometry says it should, and the reason side transfers to the object ball.
Cushion friction0.140The swing a ball takes off a cushion when it arrives carrying side.
Jaw restitution0.600Deliberately deader than a cushion. This is why a ball rattles in the jaws and stays down instead of springing back out.
Cue tip restitution0.750Leather on a ball.

The cushions get deader the harder you hit them

A cushion is not a constant. Rubber loses more energy the faster it is compressed, so the restitution starts at 0.88 for a ball arriving slowly and falls by 0.0006 for every centimetre per second of approach speed, with a floor at 0.68. Roll a ball gently into a cushion and it comes back well. Smash it and it comes back tired. Players know this without ever putting a number to it, and a table where it is not true feels wrong in a way that is hard to name.

The bounce is also applied in the right place. A cushion nose meets a ball 0.709 cm above its equator, not at its centre, so the impulse arrives off-axis and produces forward roll as a consequence rather than as an added fudge. An earlier version added that roll as a separate term and quietly created energy on every cushion.

The one piece of exact arithmetic in the whole integrator

Almost all of the model is stepped forward in small increments. One part is not, and it is the part that would otherwise break everything.

When a ball is sliding, the friction that converts skid into roll is fierce: the slip speed falls at roughly 687 cm/s², so three centimetres per second of skid is gone in four milliseconds — less than a single physics step. Step over that with ordinary arithmetic and the slip overshoots zero and reverses, which means the ball is now sliding the other way, and shots never come to rest.

The direction of the slip is constant while a ball slides, which means the moment it starts rolling can be solved rather than searched for:

t_roll = u / (3.5 × μ_slide × g)

The solver integrates exactly to that instant and then switches to the rolling branch. The rolling branch decays the spin rather than assigning it, because writing the rolling constraint directly creates a small amount of energy at every crossing — measured at 1.9×10−4 joules per step, which is nothing until it happens a thousand times.

Sixty-one checks, and the ones designed to fail

The physics exists twice: once as a Python reference model, and once as the Blueprint the game actually runs. The Python version is the specification. The Blueprint is verified against it — not by eye, but by marching both forward side by side and comparing the numbers.

The reference model runs 19 checks of its own, including two that are worth naming because they are the classic traps of rolling-ball physics. One asserts that a struck ball settles at exactly five-sevenths of its initial speed once it stops sliding, which is a result you can derive on paper and which a subtly wrong integrator will miss. The other asserts that the total energy in the system never rises, anywhere, ever.

The Blueprint is then checked against it in 61 comparisons: seven strikes, both racks, the stop scan, 400 substeps of the integrator marched in lockstep, ball-on-ball at 0°, 30° and 55° with throw and side transfer, short and long cushions, 45° rebounds with and without side, a corner jaw hit dead-on and at an angle, all six pockets, and ten frames of the adaptive substepping loop.

Every one of those suites carries controls that are supposed to fail. A test that only ever passes proves nothing about itself.

So the pocket suite includes a ball at the centre of the table and a ball just short of the fall line, both of which must not be potted — without them, a pocket routine that swallowed everything on the table would pass all six positive cases. The miscue suite includes a shot that must be clamped. The integrator suite includes a check that the ball genuinely travels and genuinely spins up, so that a model which did nothing at all could not sail through a comparison against another model doing nothing at all.

A pocket that swallowed the ball and looked like it could not

The corner pockets were rebuilt this week, with real holes cut through the cabinet, a tapering throat, and the curved leather plate that stops a ball skating off the table. Then the cushions were re-covered in baize, which on a real table runs over the rubber and stops at the pocket.

After which the corner pockets looked closed. A triangular spur of green appeared across each mouth, and a ball rolling into one appeared to be rolling into a wall.

It went in. It always went in. The balls here are driven by the solver rather than by the engine’s own physics, and a ball is potted the instant its centre crosses the fall line — so nothing modelled beyond that line can stop one, and no shot was ever affected. What was wrong was entirely what you could see, which is its own kind of bug: the game was behaving correctly and telling the player it was not.

The first diagnosis was that this was a colour problem — that the cheeks of the pocket jaws had been clothed when they should have stayed timber. That was wrong twice over. A photograph of a real table settles the first half: the jaw cheeks on a real snooker table are cloth, tapering to points at the mouth. And the actual measurement settles the rest.

This is the clear width between the two jaw cheeks measured at the height of a ball’s centre — which is above the cushion nose, where the cheeks have already begun to fall away from one another. That is why the first figure is wider than the 86 mm mouth quoted earlier: it is the mouth plus the nose set-back, and the two numbers are measured at different heights for different reasons. The mouth is the width a ball must pass; this is the width the ball’s widest part actually sees.

on the fall line        9.382 cm
1 cm past it           7.512 cm
3 cm past it           3.771 cm
5 cm past it           0.031 cm

The two jaw lines converge at 43° and cross about 4.6 cm past the fall line. So the drawn mouth closes to 0.031 cm while a ball needs 5.25 — and every ball sailed straight through it, because by then the solver had already potted it and the geometry was decoration. Recolouring the cheeks would have left the picture exactly as wrong and broken a correct surface on the way past.

The reason it took a measurement rather than a look is worth recording. The obvious way to probe a pocket is to fire a ray along the pocket axis from the fall line — and at a corner, that puts the origin of the ray off the table entirely. Every ray escapes into open air and reports a clear mouth. The instrument agreed with the bug.

The fix leaves the physics untouched. All eighteen cushion segments still exist and the solver still collides against every one of them; the eight corner jaw segments are simply no longer drawn, because they only occupy the space beyond the line at which a ball has already been potted. Eighteen segments collided against, ten drawn. The verifier now sweeps a ball-sized gap through every pocket on every build, with a bare-cloth control.

Then we went and read the rulebook properly

Geometry and physics get you a table. They do not get you snooker. Snooker is a rule set with a reputation for being simple to watch and unexpectedly deep to codify, and the parts that are hard to implement are exactly the parts a casual player never thinks about: what counts as a snooker, when a free ball is awarded, what a foul is actually worth, and what happens at the end of a frame when the scores are level.

So we researched it before writing any of it, across eight lines of enquiry — scoring and frame sequence, fouls and penalty values, free ball and snookers, table and equipment specification, expert break building, safety play, how other billiards games model an opponent's skill, and the language a referee actually uses. That produced 298 rule claims, each carrying a source — and the rules themselves, checked and grouped for reading, are now a page of their own.

And then, because a confidently stated wrong rule is worse than an admitted unknown, every claim that was not fully sourced first time — 40 of them — went to a second reviewer whose instruction was to refute it, defaulting to “wrong” unless it could find primary-source support.

Adversarial review of 40 contested claims
VerdictCountMeaning
Confirmed6Verbatim correct against the primary rulebook. Two of those six were flagged as correct but materially incomplete.
Corrected33The substance survived but detail was wrong, missing, or misattributed in a way that would have produced wrong play.
Refuted1False.

Thirty-four of forty. That ratio is the single most useful thing this exercise produced, and it is why the research happened at all.

Five of the corrections, and why each one matters

The rulebook renumbered its own fouls. A citation to “Section 3 Rule 10” means different things depending on which edition you are holding — and there are not two numberings but four, verified by extracting the text of the actual PDFs. In the current book, Rule 11 is the enumerated list of fouls and Rule 10 is only the procedure that follows one. A developer who checks a contents page, sees “10 Fouls”, and implements from there gets the wrong rule.2

“Snookers required” is the wrong phrase, and it is load-bearing. A player may not concede a frame unless penalty points are required — not snookers. The snooker wording is superseded, and the difference is not cosmetic: concede is the one button that can silently delete the most distinctive phase of snooker, the long grind where a player behind plays for fouls rather than pots.3

The points-available arithmetic had a hole in it. With R reds left, the maximum a player can still score is R × 8 + 27. That is the number every scoreboard uses to decide whether snookers are needed. It is also wrong the moment a free ball is on the table, because a free ball can add to the total — and the failure is silent, because the number it returns looks perfectly plausible. A player sixty behind with six reds left is told they need snookers when they do not.4

The miss rule lost a clause in 2019 and the internet has not noticed. There used to be a score-based exception covering the case where the points available equal the points difference. It was deleted. The live rule turns on a strict inequality where the old one turned on an inclusive one — one character of difference in a foul handler, which decides frames in precisely the tight end-of-frame positions that snooker is judged on.5

And one claim was simply false. A widely mirrored account of “American snooker” holds that fouls are always worth seven points, among other differences. Followed back, all four of its rule differences rest on a single footnote pointing at an archived page headed “Billy Aardd’s Club American Snooker HOUSE RULES”, which states on its own face that the rules are used by one student pool room in Socorro, New Mexico. It is not a governing body's text and never was. A flat seven-point foul would destroy snooker's entire safety economy, because the whole tactical game rests on fouls being worth four unless a higher-value ball is involved.6

None of these are exotic. Every one of them is the kind of detail a snooker game ships wrong, and every one of them changes a number on screen in a situation the player will eventually reach. They were found by making a reviewer argue against the research rather than summarise it.

The reference the review kept coming back to

Where sources disagreed, the primary document won. The current rulebook was pulled directly rather than quoted second-hand, and identified precisely enough to be checked again later: MD5 eccd17794ef9ed58f7a99c0d6be59aea, last modified 26 March 2026, still the live edition on the governing body's site at the time of writing.1 Several claims that read as settled fact online turned out to be quoting editions that have been superseded for years.

We also went looking for a second governing body to check it against, and there is not one. The International Billiards and Snooker Federation publishes no independent English rule text — its rules page carries amendment notes from 2014 and a link onward that is dead.7 The World Snooker Federation, World Seniors, World Women’s Snooker and the disability tour all run the same WPBSA book. That is worth stating plainly, because “both governing bodies agree” is the sort of reassurance it would have been easy to write without checking, and it would have been false.

What this is for

The table, the cloth, the pockets, the cue and the ball physics are built and in the game. You can walk into The Baulk Line, pick the cue up off the rail, and hit a ball — and when it hits another ball it will throw slightly, and when it comes off a cushion carrying side it will swing.

A scoring system is intended, and will be built on the research above.

Beyond that there is nothing to announce and no date. This page exists because the research was worth writing down, and because the next person building a snooker game in a game engine can have the thirty-four corrections for free.

The pockets are barely wider than the balls. That is the whole game, and it is why a centimetre anywhere matters more here than almost anywhere else we have built.

References

Primary sources are the governing bodies’ own rule texts. Where a claim rests on a secondary source, it is marked as such.

  1. World Professional Billiards and Snooker Association. Official Rules of the Games of Snooker and English Billiards. Revised September 2024 (the 2024–25 rulebook). Primary. Retrieved from wpbsa.com/rules/. PDF MD5 eccd17794ef9ed58f7a99c0d6be59aea, last modified 26 March 2026. Table and ball specification: Snooker Section 1, Rules 1–2. Verified byte-identical in substance to the May 2022 reprint; the November 2019 edition differs in one word.
  2. WPBSA, op. cit., Snooker Section 1, Rule 1(g) (pockets); Snooker Section 3, Rule 11 (“Penalty Values”, the enumerated foul list) and Rule 10 (“Fouls”, the procedure that follows one). Primary. S1 R1(g) states only that pockets exist, with no dimensions; the clause deferring pocket openings to templates authorised by the governing body survived to the 2014 edition and was deleted in the August 2019 restructure. That same restructure swapped the Rule 10 / Rule 11 ordering — four distinct numberings of Section 3 were identified by extracting the text of the respective PDFs.
  3. WPBSA, op. cit., Snooker Section 4, Rule 2. Primary. The current text gates concession on penalty points required. The “snookers required” formulation is the superseded 2014 wording and remains in wide secondary circulation.
  4. WPBSA, op. cit., Snooker Section 3, Rule 12 (Free Ball), with Section 2 definitions. Primary. The free-ball interaction is what makes the naive R × 8 + 27 points-available formula return a wrong result.
  5. WPBSA, op. cit., Snooker Section 3, Rule 14 (“Foul and a Miss”), with Rule 14(b) on replacing the balls. Primary. The score-based exception present in the 2011–2019 editions is absent from the current text. Confirmed against the May 2022 and November 2019 editions.
  6. “American snooker”, Wikipedia. Secondary, and not relied upon. Its four claimed rule differences rest on a single cited footnote to an archived page headed “Billy Aardd’s Club American Snooker HOUSE RULES”, self-described as the house rules of one venue at New Mexico Tech, Socorro. Recorded here as a worked example of a widely repeated claim that does not survive being followed back to its source.
  7. International Billiards and Snooker Federation, rules page. Sought as an independent cross-check, and found not to be one. The IBSF publishes no independent English rule text: its rules page carries 2014 amendment notes and links onward to a dead World Snooker URL. The WSF, World Seniors, World Women’s Snooker and WDBS all run the WPBSA book. Recorded here because “two governing bodies agree” is a claim we expected to be able to make and could not.
  8. World Pool-Billiard Association. Recommended Equipment Specifications, effective November 2001. Primary, but adjacent code. The source of the 0.635 × ball-diameter cushion nose height used here. It is a pool body legislating for pool; the figure is scaled to a snooker ball and is a sound engineering choice, but it is not a snooker rule and is not presented as one.
  9. Mathavan, S., Jackson, M. R., and Parkin, R. M. “A theoretical analysis of billiard ball dynamics under cushion impacts.” Proceedings of the Institution of Mechanical Engineers, Part C: Journal of Mechanical Engineering Science, 224(9), 2010, pp. 1863–1873. Peer-reviewed, and the only snooker-specific measurement of cushion geometry we found. Taken on a Riley Renaissance and on the official World Snooker table. Puts the cushion nose at 7R/5 — 36.75 mm, against the 33.34 mm used here. The disagreement is documented rather than resolved.
  10. WPBSA, op. cit., English Billiards Section 2, Rule 4 (“Cushion Faces”). Primary. The rulebook’s only statement about cushion profile, and the reason a flat contact band brackets both candidate nose heights.
  11. Project source, ArtSource/snooker_table.json. The geometry contract. Regenerated from snooker_physics.py, never hand-edited; read by the mesh builder, the solver and the verifier alike.
  12. Project source, ArtSource/snooker_physics.py. The reference physics model and the source of every constant tabulated above. Self-verifying: 19 checks plus 3 positive controls that are required to fail.
  13. Project source, ArtSource/snooker_play.py. The Blender mesh builder. Drives every vertex from the contract, and asserts on each run that the cloth chamfer chord equals the official corner pocket mouth.

Elsewhere

Join the list