A game's ends in one picture

Each cell is the chart of that end, scored by the rules.

A game, end by endDrawings (6): End 1: away 1; End 2: home 1; End 3: away 3; End 4: home 1; End 5: away 1; End 6: away 1.A game, end by endEnd 1: away 1Curling stones, End 1Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.65 to 6.01. 8 Stone.1 Shot rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.65 to 6.01.away 1: 2.21 ft from the buttonhome 2: 1.67 ft from the buttonaway 3: 5.12 ft from the buttonhome 4: 6.01 ft from the buttonaway 5: 1.65 ft from the button, the shot rockhome 6: 3.87 ft from the buttonaway 7: 4.06 ft from the buttonhome 8: 3.41 ft from the button8 Stone12345678End 2: home 1Curling stones, End 2Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.63 to 6.32. 8 Stone.1 Shot rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.63 to 6.32.away 1: 5.14 ft from the buttonhome 2: 0.63 ft from the button, the shot rockaway 3: 1.98 ft from the buttonhome 4: 6.32 ft from the buttonaway 5: 1.38 ft from the buttonhome 6: 1.82 ft from the buttonaway 7: 2.92 ft from the buttonhome 8: 5.46 ft from the button8 Stone12345678End 3: away 3Curling stones, End 3Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 3 Counting stone. By outcome: counting 3. 8 Stone. 8 stones. By outcome: stone 5, counting 2, shot-rock 1. By team: away 4, home 4. Values from 0.73 to 6.42. 8 Stone.1 Shot rockBy outcome: shot-rock 1.3 Counting stoneBy outcome: counting 3.8 Stone8 stonesBy outcome: stone 5, counting 2, shot-rock 1. By team: away 4, home 4. Values from 0.73 to 6.42.away 1: 0.75 ft from the button, countinghome 2: 5.01 ft from the buttonaway 3: 0.87 ft from the button, countinghome 4: 2.02 ft from the buttonaway 5: 0.73 ft from the button, the shot rockhome 6: 4.28 ft from the buttonaway 7: 5.33 ft from the buttonhome 8: 6.42 ft from the button8 Stone12345678End 4: home 1Curling stones, End 4Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.2 to 5.36. 8 Stone.1 Shot rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.2 to 5.36.away 1: 4.88 ft from the buttonhome 2: 4.41 ft from the buttonaway 3: 5.36 ft from the buttonhome 4: 1.2 ft from the button, the shot rockaway 5: 2.36 ft from the buttonhome 6: 4.57 ft from the buttonaway 7: 2.2 ft from the buttonhome 8: 2.81 ft from the button8 Stone12345678End 5: away 1Curling stones, End 5Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.45 to 6.37. 8 Stone.1 Shot rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 0.45 to 6.37.away 1: 6.37 ft from the buttonhome 2: 6.16 ft from the buttonaway 3: 3.31 ft from the buttonhome 4: 1.96 ft from the buttonaway 5: 4.98 ft from the buttonhome 6: 1.81 ft from the buttonaway 7: 0.45 ft from the button, the shot rockhome 8: 0.88 ft from the button8 Stone12345678End 6: away 1Curling stones, End 6Drawn as: a curling sheet, 45.72 by 4.75 metres, with a house at each end (the 12-, 8- and 4-foot circles round the button), the tee, back, hog and centre lines and the hacks. Data: 1 Shot rock. By outcome: shot-rock 1. 1 Counting stone. By outcome: counting 1. 8 Stone. 8 stones. By outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.19 to 6.53. 8 Stone.1 Shot rockBy outcome: shot-rock 1.1 Counting stoneBy outcome: counting 1.8 Stone8 stonesBy outcome: stone 7, shot-rock 1. By team: away 4, home 4. Values from 1.19 to 6.53.away 1: 1.19 ft from the button, the shot rockhome 2: 1.72 ft from the buttonaway 3: 4.44 ft from the buttonhome 4: 1.98 ft from the buttonaway 5: 4.48 ft from the buttonhome 6: 4.71 ft from the buttonaway 7: 4.8 ft from the buttonhome 8: 6.53 ft from the button8 Stone12345678

The picture above was drawn when the docs were built. The script below draws it again with the published package.

import { curlingStones } from "@johnmorrisdotca/kyogijo-stadiums/charts";
import { drawGrid } from "@johnmorrisdotca/kyogijo-stadiums/layouts";

const luck = (n) => {
  const v = Math.sin(n * 12.9898) * 43758.5453;
  return v - Math.floor(v);
};
const bell = (n) => luck(n) + luck(n + 1) + luck(n + 2) - 1.5;
const stones = Array.from({ length: 240 }, (_, i) => {
  const inHouse = luck(i * 7) < 0.45;
  return { x: bell(i * 5) * (inHouse ? 3 : 2.5), y: inHouse ? bell(i * 11) * 3 : -8 - 9 * luck(i * 13), team: i % 2 ? "home" : "away" };
});
const ends = [0, 1, 2, 3, 4, 5].map((end) => {
  const chart = curlingStones(stones.slice(end * 8, end * 8 + 8).map((s, i) => ({ ...s, y: s.y > -2 ? s.y : s.y * 0.4, number: i + 1 })), { end: end + 1, id: `end-${end + 1}` });
  return { drawing: chart, label: `End ${end + 1}: ${chart.totals.scoring ?? "blank"} ${chart.totals.points}` };
});
const svg = drawGrid(ends, { columns: 3, width: 900, title: "A game, end by end" });

This page imports the package from jsDelivr (major version 0), which serves only versions that have been published to npm. A feature added after the last release is not in it: the page then keeps the picture above and says why. The docs were built from version 0.6.1.