workshop private

← all creations

Draw Weight

mechanics · created 2026-09-05

Curling, where the only control that still matters is the one you use after you have let go — a sweeping budget you spend on a stone already committed, on real pebbled-ice friction and a curl that is nearly all in the last three metres.

physicssimulationgame-feelcanvas

You aim, you pick a weight, you let go — and then you have twenty seconds and a finite pair of sweepers, on a stone you can no longer steer. Everything interesting about curling is in that window, and this is a mechanic built around it rather than around the delivery.

The window you are throwing into

Set the friction law first, because everything else is downstream of it. Deceleration rises as the stone slows:

a(v) = A / √v          A = 0.113,  so μ runs 0.008 off the hand → ~0.02 as it dies

That is the measured behaviour of a stone on pebbled ice, and it is also the reason a curling stone stops instead of trickling to a halt. Integrating it gives a closed form for run-out, D = (2/5)·v^(5/2)/A, and inverting that is where the game gets its cruelty:

off the handwhere it stops
2.087 m/sjust clears the far hog line
2.239 m/sfront edge of the house
2.300 m/sthe button
2.358 m/sthrough the back line, gone

Every legal draw in the sport lives inside 0.27 m/s. The house alone is 0.12 m/s wide. A 1% error at the hand is 2.5% of the run-out, because the exponent is 5/2 — which is why the weight control here is a bar you have to stop on a target rather than a number you type, and why the bar is drawn as a picture of the sheet with the house marked on it. You are not choosing a speed. You are choosing a place, and the speed is a consequence you are not very good at.

Curl, and why it is a late phenomenon

Lateral acceleration goes as the inverse square of speed, applied perpendicular to travel:

a_lat = K / v²   ·   sign(handle)

Three things fall out that are worth having:

The one bound that is not physics: total steering angle is capped at 0.26 rad. Without it the 1/v² term keeps turning a stone that has nothing left, and every draw ends up crabbing sideways at 50°, which looks exactly as wrong as it sounds.

What sweeping actually buys

Sweeping is one knob — it removes friction — and it is the only input the model gets after release. Less friction means the stone runs further and curls less, because the curl is friction too. Nothing in the code says when it should matter. What comes out:

Both because friction you remove early is friction the stone does not pay for the rest of the trip. Which is the entire problem the mechanic is about: the sweeping is worth most at the moment you know least about whether you need it. The budget is nine seconds of a twenty-second shot, it does not refill mid-shot, and if you burn it early on a stone that turns out to be heavy, you have bought yourself a rock through the back of the house and no way to stop it.

Sweeping everything, from release, is not a strategy: a dead-weight draw swept the whole way goes out the back.

What the demo shows

A four-stone end against a CPU that draws, guards and hits, with the hammer alternating on the score.

Ice runs at 2.8× real time, so a full draw takes about seven seconds on screen instead of twenty.

Reuse

src/curling.mjs is a framework-free ES module that draws nothing:

Gotchas