fuzzyworld

nordic-skating / commit

docs: islets, turning round, and choosing a fork by a touch; screenshots retaken

df2b82155b20a4f006c690a22fd29edc180a74b9 · Pavel Safronov · 2026-10-09 22:31:25 -0700 · parents 4f816cf08087

Claude Code usage: this commit ≈0 out / ≈0 cached · cost unknown (no per-model trailer) · session 1 tally 890 in / 763.1K out / 98.7M cached · usage by commit and session

docs: islets, turning round, and choosing a fork by a touch; screenshots retaken

Usage: 890 in / 763.1K out / 98.7M cached (session tally)
rtk:   1.7M saved, 25.3% over 2676 cmds (global/lifetime)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
 PLAN.md                           |  48 +++++++++++++++++++++++++-------------
 README.md                         |  42 ++++++++++++++++++++++-----------
 docs/screenshots/about.png        | Bin 204991 -> 220741 bytes
 docs/screenshots/aurora-phone.png | Bin 254161 -> 257058 bytes
 docs/screenshots/aurora.png       | Bin 306257 -> 308826 bytes
 docs/screenshots/autopilot.png    | Bin 230188 -> 224400 bytes
 docs/screenshots/dusk.png         | Bin 256975 -> 256346 bytes
 docs/screenshots/far.png          | Bin 246816 -> 263103 bytes
 docs/screenshots/fork.png         | Bin 347891 -> 339255 bytes
 docs/screenshots/islets-dusk.png  | Bin 0 -> 199445 bytes
 docs/screenshots/islets.png       | Bin 0 -> 300858 bytes
 docs/screenshots/landscape.png    | Bin 285369 -> 280324 bytes
 docs/screenshots/night.png        | Bin 261463 -> 262214 bytes
 docs/screenshots/pass.png         | Bin 252723 -> 223768 bytes
 docs/screenshots/sea.png          | Bin 231337 -> 232429 bytes
 docs/screenshots/settings.png     | Bin 213619 -> 218822 bytes
 docs/screenshots/steering.png     | Bin 199063 -> 178461 bytes
 docs/screenshots/thin-ice.png     | Bin 279129 -> 284279 bytes
 tools/screenshots.mjs             |   3 +++
 19 files changed, 63 insertions(+), 30 deletions(-)

diff --git a/PLAN.md b/PLAN.md
index 5648cc2..13286ed 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -111,24 +111,40 @@ it, pale on the colour of black ice.
 
 **Open.** It opens in whichever orientation the phone is held. Should it lock to one?
 
-### 4. An obstacle to loop around: the patch of grass
+### 4. Islets to skate round, and turning right round — built, waiting to be tried
 
 **Pavel's idea.** In the film the skater does a loop around a patch of grass and then
-carries on. Add that, as a kind of fork or obstacle. More complex forks are also welcome.
-
-**Sketch.** A small island of reeds or grass standing in the ice in the middle of a
-channel, a few metres across. It is the fork that already exists made very short: the
-channel parts round it and joins again 20 to 40 m later. The autopilot goes round one
-side; the skater may choose the other, or circle it.
-
-**Open questions.**
-- Circling it means turning back. The skater can now do that in principle (item 1,
-  "Kept open on purpose"); the lake's forks and the shore kept behind the skater cannot
-  yet.
-- The film has not been looked at for this: find the scene and see what the skater
-  actually does, and how big the patch is.
-- Channels that fork and later rejoin, and three-way forks, would both come from the
-  same work. Worth doing together?
+carries on. Add that, as a kind of fork or obstacle. More complex paths are welcome.
+
+**What the film shows** (looked at 2026-10-09): from 2:12 to 2:35, a skater weaving
+among small tufted islets of reeds standing in the ice, several to a cluster. Also a
+bare rock in the lake at 1:52, and at 0:35 ice covered in looping white skate tracks.
+And at 1:17 the ice is measured on camera: 45 mm. The sound alone gives 41 mm.
+
+**What was built.**
+- **Islets**: reeds on humps of frozen ground, 5 to 15 m across, in beds. The autopilot
+  steers round them; a skater steering at one is turned aside at the last moment, and
+  nobody can get onto one.
+- **Turning right round.** The limit on how far off the lake's line the skater could
+  point is gone from open water. Held over, the skater circles, 16 m in radius, and can
+  skate back up the lake; let go and the autopilot turns them down it again. The land,
+  the ice's thickness and the view all follow whichever way the skater faces.
+- **A touch chooses at a fork.** With steering now turning, holding it over until the
+  fork would be a circle, so a touch one way within 200 m of a fork is taken as asking
+  for that side.
+
+**Still to judge, by feel.**
+- Is circling an islet with a finger possible, and pleasant? The circle is 16 m in
+  radius whatever the islet's size.
+- Is it too easy to turn round by accident? Holding a steer for seven seconds does it.
+- Are there too many islets, or too few? Do the reeds look like reeds?
+
+**Not done, and wanted or possible.**
+- Forks of three, and channels that part and join again.
+- A bare rock, as in the film. A drawing of the skater's own tracks on the ice, as in
+  the film: with loops now possible, they would show them.
+- Forks cannot be gone back through: a skater who turns back above a fork stays in the
+  channel they chose, which is the right water but would matter if tracks were drawn.
 
 ### 5. Check the chirps against the film — tried, and the film cannot say
 
diff --git a/README.md b/README.md
index d1b1903..c03f78e 100644
--- a/README.md
+++ b/README.md
@@ -15,9 +15,9 @@ in which Mårten Ajne skates a small lake outside Stockholm.
 
 ## Status
 
-**Step 5 of 6: forks, passes and open sea.** The lake runs on for ever between snowy,
-wooded shores, forking every few kilometres, pinching to narrow passes and opening out
-until no shore can be seen. The skater skates it, and the ice sings under every stride at
+**Step 5 of 6, and a good deal since.** The lake runs on for ever between snowy, wooded
+shores, forking every few kilometres, pinching to narrow passes, opening out until no
+shore can be seen, and dotted in places with islets of reeds to weave between. The skater skates it, and the ice sings under every stride at
 a pitch set by how thick it is there. Thin ice is black, sings high and cracks under
 you. Nobody falls through: how thick the ice is decides only how it sounds.
 
@@ -47,7 +47,8 @@ one side of every fork, for as long as you leave it.
 | To | Touch or mouse | Keyboard |
 |---|---|---|
 | Steer left or right | Drag sideways from wherever you touch | ← → or A D |
-| Choose a way at a fork | Steer towards it before the island begins | the same |
+| Turn right round, or circle an islet | Hold the steer over | the same |
+| Choose a way at a fork | A touch towards it on the way up to the fork | the same |
 | Sound on or off | The button at the top right | M |
 | Go to another lake | Randomize, at the top left | R |
 
@@ -113,8 +114,10 @@ address asks for a time whatever the settings say.
 <img src="docs/screenshots/night.png" alt="The lake at night, the Milky Way overhead" width="640" />
 
 Steering turns the skater: the harder the steer, the tighter the curve, up to a circle
-16 m in radius, with a moment to lean into it. A shore cannot be reached; near one the
-skater is turned to run along it. Let go and the skater straightens up where they are,
+16 m in radius, with a moment to lean into it. Held over, the skater turns right round
+and can skate back up the lake, or round and round; that needs open water, about 24 m
+of it on the side being turned towards. A shore cannot be reached; near one the skater
+is turned to run along it. Let go and the skater straightens up where they are,
 keeps that line for a second and a half, and then eases back to the autopilot's own.
 
 The autopilot does not skate a straight line. It carves long, slow S-curves down the
@@ -126,9 +129,11 @@ and no two are the same, so neither are the speeds.
 
 The screen is kept awake while the page is open, where the browser allows it.
 
-At a fork the lake parts round an island. Until the island begins, a little over 200 m
-after the fork, you are in whichever of the two channels you are nearer the middle of,
-so steering across takes the other one. After that there is land between.
+At a fork the lake parts round an island. A touch of steering one way, from 200 m
+before the fork, is taken as asking for that side, and the autopilot does the rest; with
+no touch it takes the side the fork prefers. Until the island begins, a little over
+200 m after the fork, you can still change, by steering the other way. After that there
+is land between, though a skater who turns back can go round its tip.
 
 ## The ice
 
@@ -178,19 +183,28 @@ its path.
   or more: a stretch of sea. Near a fork it is always ordinary, so that a fork reads as
   one.
 
+- **It has islets.** Tufts of reeds on humps of frozen ground, 5 to 15 m across,
+  standing in the ice as they do in the film, where the skater weaves between them.
+  They come in beds: about a quarter of the lake's half-kilometres have some, one every
+  50 m or so, and the rest have none. Each has at least 9 m of ice between it and a
+  shore, and there are none in a narrow pass or near a fork. The autopilot goes round
+  them; a skater steering straight at one is turned aside at the last moment.
+
 <img src="docs/screenshots/fork.png" alt="The lake parting round a wooded island ahead" width="640" />
 
+<img src="docs/screenshots/islets.png" alt="An islet of reeds standing in the ice, with more beyond it" width="640" />
+
 <img src="docs/screenshots/sea.png" alt="Ice to a hazy horizon with no shore in sight" width="640" />
 
 - **The skater has a place, a direction and a speed** (`src/skater.ts`), and steering is
   turning. The autopilot steers by the same means and within the same limits, aiming at
   a point 18 m ahead on its wandering line, so every path on the lake is an arc. The
-  skater may point up to 50° off the line of the channel; that is a rule of its own,
-  and lifting it would let them turn right round.
+  skater may point any way at all, back up the lake included; left alone, the autopilot
+  turns them down it again.
 - **The skater is kept on the ice.** They have the width of the channel less 2 m at each
-  shore. Within 8 m of the edge of that they may point less and less towards it. Where
-  the lake narrows faster than a skater could steer clear, their room starts closing
-  200 m early. Out at sea they may go no further than 150 m from the middle.
+  shore. Within 24 m of the edge of that they may point less and less towards it, down
+  to not at all at the edge. Where the lake narrows faster than a skater could steer
+  clear, their room starts closing 200 m early, whichever way they are going. Out at sea they may go no further than 150 m from the middle.
 - **Thickness is a function too**, and is painted on the ice from a small map of the 768 m
   around the skater that is redrawn every 32 m (`src/render/ice.ts`).
 - **The skater never leaves the origin of what is drawn.** The shores and islands are
diff --git a/docs/screenshots/about.png b/docs/screenshots/about.png
index cc0f809..e9cbaea 100644
Binary files a/docs/screenshots/about.png and b/docs/screenshots/about.png differ
diff --git a/docs/screenshots/aurora-phone.png b/docs/screenshots/aurora-phone.png
index e215bb4..1fa491a 100644
Binary files a/docs/screenshots/aurora-phone.png and b/docs/screenshots/aurora-phone.png differ
diff --git a/docs/screenshots/aurora.png b/docs/screenshots/aurora.png
index 53fc82b..79db5b4 100644
Binary files a/docs/screenshots/aurora.png and b/docs/screenshots/aurora.png differ
diff --git a/docs/screenshots/autopilot.png b/docs/screenshots/autopilot.png
index b7e12f2..1d6ef0f 100644
Binary files a/docs/screenshots/autopilot.png and b/docs/screenshots/autopilot.png differ
diff --git a/docs/screenshots/dusk.png b/docs/screenshots/dusk.png
index c1daa25..7e693f3 100644
Binary files a/docs/screenshots/dusk.png and b/docs/screenshots/dusk.png differ
diff --git a/docs/screenshots/far.png b/docs/screenshots/far.png
index fc32422..f7bae61 100644
Binary files a/docs/screenshots/far.png and b/docs/screenshots/far.png differ
diff --git a/docs/screenshots/fork.png b/docs/screenshots/fork.png
index 7f7ed79..bdab069 100644
Binary files a/docs/screenshots/fork.png and b/docs/screenshots/fork.png differ
diff --git a/docs/screenshots/islets-dusk.png b/docs/screenshots/islets-dusk.png
new file mode 100644
index 0000000..79aa6f3
Binary files /dev/null and b/docs/screenshots/islets-dusk.png differ
diff --git a/docs/screenshots/islets.png b/docs/screenshots/islets.png
new file mode 100644
index 0000000..fc10a32
Binary files /dev/null and b/docs/screenshots/islets.png differ
diff --git a/docs/screenshots/landscape.png b/docs/screenshots/landscape.png
index 9bdd234..b77e627 100644
Binary files a/docs/screenshots/landscape.png and b/docs/screenshots/landscape.png differ
diff --git a/docs/screenshots/night.png b/docs/screenshots/night.png
index 82784ad..d9f889b 100644
Binary files a/docs/screenshots/night.png and b/docs/screenshots/night.png differ
diff --git a/docs/screenshots/pass.png b/docs/screenshots/pass.png
index baeb115..ec45f7a 100644
Binary files a/docs/screenshots/pass.png and b/docs/screenshots/pass.png differ
diff --git a/docs/screenshots/sea.png b/docs/screenshots/sea.png
index 24ae971..03c47a9 100644
Binary files a/docs/screenshots/sea.png and b/docs/screenshots/sea.png differ
diff --git a/docs/screenshots/settings.png b/docs/screenshots/settings.png
index 0519cae..5dde400 100644
Binary files a/docs/screenshots/settings.png and b/docs/screenshots/settings.png differ
diff --git a/docs/screenshots/steering.png b/docs/screenshots/steering.png
index 03742ee..4ffadf9 100644
Binary files a/docs/screenshots/steering.png and b/docs/screenshots/steering.png differ
diff --git a/docs/screenshots/thin-ice.png b/docs/screenshots/thin-ice.png
index c13dc6b..af2adce 100644
Binary files a/docs/screenshots/thin-ice.png and b/docs/screenshots/thin-ice.png differ
diff --git a/tools/screenshots.mjs b/tools/screenshots.mjs
index dbb8785..a696c72 100644
--- a/tools/screenshots.mjs
+++ b/tools/screenshots.mjs
@@ -32,6 +32,9 @@ const SHOTS = [
   // Impossibly thin ice lies to the left of the middle here, faintly lit from within.
   { name: 'thin-ice', query: '?seed=1&time=day&s=2795', viewport: { width: 844, height: 390 }, act: async () => {} },
   { name: 'about', query: '?seed=1&time=day&s=400', act: async (page) => { await page.click('#about') } },
+  // A bed of reed islets, just down the lake from where it starts.
+  { name: 'islets', query: '?seed=1&time=day&s=150', viewport: { width: 844, height: 390 }, act: async () => {} },
+  { name: 'islets-dusk', query: '?seed=1&time=dusk&s=7040', act: async () => {} },
   // The same water at the other times of day.
   { name: 'dusk', query: '?seed=1&time=dusk&s=5200', viewport: { width: 844, height: 390 }, act: async () => {} },
   { name: 'night', query: '?seed=1&time=night&s=5200', viewport: { width: 844, height: 390 }, act: async () => {} },