SNOOKER — CREDITS AND SOURCES ============================= WHAT THIS IS ------------ An independent reimplementation of the sport of SNOOKER as a browser game, written from the published rules of the game. It reproduces no code, artwork, branding, text or data from any existing product. THE ORIGINAL ------------ Snooker was created in 1875 by Sir Neville Chamberlain, then a subaltern of the Devonshire Regiment stationed at Jabalpur, India, as a variation of the existing games of black pool and pyramids. The WPBSA rulebook's own frontispiece records him "pictured in Madras 1883 ... created the Sport of Snooker in Jubbulpore, India in 1875". The rules were codified by the Billiards Association (established 1885) and the Billiards Control Club (1908), amalgamated in 1919 as the Billiards Association and Control Council, renamed the Billiards and Snooker Control Council in 1971. All rights were purchased by and transferred to the World Professional Billiards and Snooker Association (WPBSA) in 1992. This app is NOT affiliated with, endorsed by, sponsored by or connected to the WPBSA, World Snooker Tour, World Snooker Ltd, the IBSF, the WSF, or any other governing body, tournament, player or manufacturer. THE PRIMARY SOURCE FOR THE RULES -------------------------------- World Professional Billiards and Snooker Association, "Official Rules of the Games of Snooker and English Billiards", Official World Rules revised: September 2024. Copyright (c) The World Professional Billiards and Snooker Association Limited 2024. https://wpbsa.com/rules/ Every rule this app implements is cited in the in-app Rules panel by Section, Rule and paragraph of that document. NO PART OF THE RULEBOOK IS REPRODUCED HERE: the app states each rule's effect in its own words and gives the number so a reader can look it up. The rulebook is copyright and its reproduction is expressly reserved. The following older editions were consulted only to identify what changed and when: the WPBSA rulebook of May 2022, of September 2019 and of November 2014, and the archived IBSF English rules of 2013 (which agree word for word with the 2014 WPBSA text). Two changes matter to an implementation: the foul-value list moved from Section 3 Rule 10 to Section 3 Rule 11 in the 2019 rewrite, and the free-ball "cannot be snookered by the nominated free ball" exception was WIDENED in August 2024 from "Pink and Black" to "only two object balls remaining ... Pink and Black, or Black and one other colour". This app implements the current, wider form. THE POCKETS — THE ONE THING NOBODY PUBLISHES -------------------------------------------- Section 1 Rule 1(g) of the 2024 rulebook is, in its entirety, a statement that there shall be a pocket at each of the four corners and one at the middle of each of the longer sides. It gives no opening width, no radius, no angle and no drawing. Earlier editions said the openings "shall conform to the templates owned and authorised by" the WPBSA — a proprietary, dated, PHYSICAL set of shaped blocks, three per pocket (jaw, undercut and fall), whose dimensions have never been printed by any governing body. The 2024 edition dropped even that cross-reference. The geometry used here is taken from the WPBSA's own 2005/6 rationalised pocket-template drawings, measured from the published artwork (drawn at 72 pixels to the inch): corner opening 3.313 in jaw arc r = 3.000 in fall arc r = 4.500 in middle opening 3.906 in jaw arc r = 3.125 in fall arc r = 2.094 in cushion nose line to slate edge line = 1.875 in, identical on both drawings The corner figure is corroborated independently by a table fitter's published match-table opening of 3 5/16 in (= 3.3125 in), which is the value this app uses. Three things follow that contradict what is commonly said about snooker pockets, and all three are implemented as drawn: the MIDDLE pockets are 17.9% WIDER than the corners; there is NO CUT ANGLE anywhere on either drawing, the jaws being pure circular arcs; and a tournament pocket carries NO UNDERCUT. Because none of this is a governing-body number, the app's test harness sweeps the opening across the whole plausible range (3.0 to 3.75 in) and reports the potting geometry as a function of it, so no result depends on one figure. WHERE THE TEMPLATE'S OWN NUMBERS DO NOT AGREE WITH EACH OTHER ------------------------------------------------------------ The 2005/6 drawings give three things per pocket: an OPENING, a JAW ARC RADIUS, and a NOSE-LINE-TO-SLATE-EDGE depth of 1.875 in. Modelling the jaws the way a jaw physically is - a convex knuckle tangent to the cushion face - those three cannot all hold at once. A knuckle of radius 3.125 in tangent to a face has its centre 81.6 mm behind that face, so the narrowest gap between two of them is 81.6 mm deep, and no inset brings it forward to the 47.6 mm slate edge. The alternative reading, putting the opening ON the slate-edge line, was implemented and measured: it produces a waist inside the mouth narrower than the opening, and the corner pocket then accepts a 5.6 mm band of aim against a 31.6 mm gap - which is not a snooker pocket either. Nothing published resolves this, so this app states its choice rather than burying it. The knuckles are convex arcs at the template's radii, tangent to their own cushion faces, and the inset is solved so their narrowest gap is exactly the template opening - 84.14 mm at a corner, 99.22 mm at a middle, which leaves 31.64 mm and 46.72 mm of clearance around a 52.5 mm ball. The 1.875 in fall is then measured from that narrowest line rather than from the nose line. The opening and the radii are the template's; the fall's datum is this app's, and it is the single assumption in the pocket that the drawings do not support. A ball may come to rest between the mouth and the fall line, hanging in the jaws. That is a real state - Section 3 Rule 9 legislates for balls on the edge of a pocket - and the app's test harness asserts that a resting ball is either on the playing area or in a pocket throat, and never anywhere else. It was that assertion, over four hundred maximum-power strokes, that found the fall line had been measured from the wrong datum in an earlier version. THE PHYSICS ----------- The rulebook specifies no coefficient of anything and no ball mass. Sources, each with the regime it was measured in: MEASURED ON SNOOKER EQUIPMENT (preferred wherever available): - S. Mathavan, M. R. Jackson and R. M. Parkin, "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):1863-1873 (2010). DOI 10.1243/09544062JMES1964. - S. Mathavan, M. R. Jackson and R. M. Parkin, "Application of high-speed imaging to determine the dynamics of billiards", American Journal of Physics 77(9):788-793 (2009). From these: ball-cloth sliding friction 0.212 (range 0.178-0.245); ball-cloth rolling resistance 0.0128; ball-cushion restitution 0.818 (linear fit; the group's quadratic fit shows it is speed-dependent, about 0.910 at low speed, and this app uses the linear value and says so); cushion friction 0.14, valid below 2.5 m/s normal approach; cushion nose height 1.4 ball radii above the cloth, i.e. 0.4 R above the ball's centre, so sin(theta) = 2/5; ball mass 0.1406 kg. NOTE: the widely quoted 63.5% of ball diameter is the POOL figure (BCA K-66 profile on a 57 mm ball) and is not the snooker one. This app had the pool number in it until the snooker measurement was found. PUBLISHED BILLIARD PHYSICS, applied to snooker for want of a snooker measurement: - David G. Alciatore, technical proofs supporting "The Illustrated Principles of Pool and Billiards": TP 3.1 (the 90-degree rule), TP 4.1 (distance for stun and natural roll to develop), TP A.5 (the effects of ball inelasticity and friction on the 90-degree rule), TP A.12, TP A.14, TP A.30, TP 2.1 (minimum tip friction for no-slip impact), TP B.2. From these: ball-ball restitution 0.94; ball-ball friction, both the constant 0.06 and the speed-dependent fit mu(v) = 0.009951 + 0.108 exp(-1.088 v); the miscue limit at half a ball radius; the tip relation omega = (5/2) b v / R^2. The engine reproduces all four rows of TP A.5's worked table to three decimal places, and the 5/7 rolling result and its closed-form slide distance exactly. - Squirt of 2.0 degrees at the miscue limit, from published measurements on real cues (1.8 to 2.5 degrees). RECONSTRUCTED, with no source, and marked as such in the code: - Vertical-axis (drilling) spin decay. - The nap. Section 1 Rule 1(c) fixes the DIRECTION of the nap but no source gives a magnitude, and the Mathavan group reports no evidence of nap directionality in their measurements, so this app models the nap as having no dynamical effect rather than inventing one. - Every colour of the table, the cushions and the woodwork. The rules name the seven ball colours and nothing else. - The opponent, entirely. No governing body specifies one. Its three standards are calibrated against the only professional figures that are actually published: points scored per frame by a top-16 player (54-63) and the fraction of frames containing a century (7.3-10.3%). Neither cuetracker.net nor snooker.org publishes a pot success percentage or an "average break", so those are REPORTED by the harness rather than asserted against a source. WHAT DIFFERS FROM THE REAL GAME ------------------------------- - There is no referee to judge intent, so the miss rule (S3 R14) is applied mechanically from the geometry, and its two judgement-based exemptions are applied by rule rather than by opinion. - A ball can never leave the cloth, so "causing a ball to be forced off the table" (S3 R11(b)(x)) cannot occur. The harness asserts this is true by construction over thousands of strokes rather than assuming it. - The stalemate re-rack (S3 R17) is not implemented. - Four-handed snooker (S3 R18) and six-red snooker (S3 R19) are not implemented. - The aiming line is an aid the real game does not have. It is drawn from the same ghost-ball solution the opponent uses, so it accounts for throw, and it can be switched off. - Frames are played one at a time; games and matches (S2 R2, R3) are not scored. BUILT WITH ---------- Hand-written WebGL2, with no libraries, no framework, no CDN and no external asset of any kind. The 4x4 matrix helpers in js/glmat.js and the vertex-stream and primitive scaffolding in js/render.js began as the corresponding files from petanque.skillsafe.ai, another app by the same author in the same campaign, and were rewritten for this game. Icons and the social card are generated by tools-images.py using Pillow.