fuzzyworld

nordic-skating / commit

docs: islands and marks; screenshots of an island and of tracks

b2c4db9fa189cafe1cc0562d712ef1e74e448633 · Pavel Safronov · 2026-10-10 09:23:10 -0700 · parents b8af453df11d

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

docs: islands and marks; screenshots of an island and of tracks

Usage: 1.1K in / 978.6K out / 157.4M cached (session tally)
rtk:   1.7M saved, 25.3% over 2685 cmds (global/lifetime)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
 PLAN.md                               |  38 ++++++++++++++++++++--------------
 README.md                             |  17 ++++++++++++++-
 docs/screenshots/about.png            | Bin 223380 -> 223447 bytes
 docs/screenshots/aeroplane.png        | Bin 379985 -> 380544 bytes
 docs/screenshots/aurora-phone.png     | Bin 248331 -> 249769 bytes
 docs/screenshots/aurora.png           | Bin 308695 -> 307857 bytes
 docs/screenshots/autopilot.png        | Bin 228582 -> 225527 bytes
 docs/screenshots/blizzard.png         | Bin 188152 -> 191089 bytes
 docs/screenshots/comet.png            | Bin 267754 -> 266095 bytes
 docs/screenshots/dusk.png             | Bin 259879 -> 259044 bytes
 docs/screenshots/far.png              | Bin 264310 -> 266775 bytes
 docs/screenshots/fork.png             | Bin 338555 -> 335791 bytes
 docs/screenshots/island-alongside.png | Bin 0 -> 187465 bytes
 docs/screenshots/island.png           | Bin 0 -> 307249 bytes
 docs/screenshots/islets-dusk.png      | Bin 197347 -> 197278 bytes
 docs/screenshots/islets.png           | Bin 301341 -> 301437 bytes
 docs/screenshots/landscape.png        | Bin 283066 -> 282478 bytes
 docs/screenshots/night.png            | Bin 263598 -> 261847 bytes
 docs/screenshots/pass.png             | Bin 226163 -> 226360 bytes
 docs/screenshots/sea.png              | Bin 234363 -> 235753 bytes
 docs/screenshots/settings.png         | Bin 216884 -> 216511 bytes
 docs/screenshots/snow.png             | Bin 280581 -> 280049 bytes
 docs/screenshots/steering.png         | Bin 176770 -> 174419 bytes
 docs/screenshots/thin-ice.png         | Bin 285090 -> 284706 bytes
 docs/screenshots/tracks.png           | Bin 0 -> 268253 bytes
 tools/screenshots.mjs                 |  14 +++++++++++++
 26 files changed, 53 insertions(+), 16 deletions(-)

diff --git a/PLAN.md b/PLAN.md
index 7efb122..8288e17 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -108,32 +108,40 @@ Pavel, 2026-10-10: more details in the scene are welcome, and named these.
 the wind too loud over the ice? Are shooting stars too frequent? The aeroplane is
 silent; should it be?
 
+**Built since, waiting to be looked at** (2026-10-10).
+- **Cracks made by the skater, and skate tracks.** The marks are drawn on a picture of
+  the hundred metres square of ice round the skater. Tracks and the scratch of each
+  push are always left; cracks are drawn where they are heard, and a push on cracking
+  ice starts more. Seen working as a drawing; the cracks have not been seen in the app
+  itself, only the tracks.
+- **A long island in the middle of the lake**: see "Channels that part and join again".
+
+**Still to judge.** Are the tracks too faint against the ice's own cracks, which are the
+same colour? Should they fade with time? Do the cracks read as cracks?
+
 **Named and not yet built.**
 - **Snow drifts**: snow lying on the ice in streaks blown by the wind, building up in
   a blizzard. They would want to slow a skater and deaden the ice's sound where they
   lie, which is the "bad ice" of the first description of this app.
-- **Cracks made by the skater**: on ice thin enough to crack, the cracks that are now
-  only heard would be seen, spreading from under the skates and left behind. This
-  needs a way to draw on the ice where the skater has been, which would also give
-  skate tracks, loops and all, as in the film.
-- **A long island in the middle of the lake**: see "Channels that part and join again".
 
 **Further ideas, none started**: a moon and its phase; mist that thins and thickens;
 dawn; how wooded and how hilly the banks are; the colour of the aurora; birds; a far
 shore with the lights of a house at night; satellites; a bare rock, as in the film.
 
-### Channels that part and join again
+### Channels that part and join again — built, waiting to be tried
 
 **Pavel's question**: is this something like a long island of grass in the middle of a
-lake or river? **Yes.** Today a fork's two channels draw apart and never meet again:
-the lake is a tree. The other kind is an island with water both sides that comes back
-together beyond it: a few hundred metres long, low, covered in reeds like the islets,
-or wooded like the banks. The skater picks a side, and both lead on to the same lake.
-
-It is a smaller thing to build than it sounds, since a fork already is two channels
-drawn side by side: this is a fork whose channels come back to the same line. What it
-needs that forks do not have is the rejoining: both channels drawn all the way along
-the island, and the skater's channel becoming the one channel again at its far end.
+lake or river? **Yes**, and that is what was built (2026-10-10): a low bank of reeds
+180 to 480 m long, in the middle of a channel, with water both sides that is one water
+again beyond it.
+
+It turned out simpler than a fork whose channels rejoin. The island is a thing standing
+in one channel, like an islet but long: the channel is made wider by the island's width
+where it stands, and the skater has the water on whichever side of it they are on. No
+channel is left or joined.
+
+**Still to judge.** Is one every 5 km right? Do the reeds read as an island from a
+distance, or as a smudge? Should some islands be wooded, like the ones at forks?
 
 ### 3. Installable app — built, not yet tried on a phone
 
diff --git a/README.md b/README.md
index 807484c..9f90030 100644
--- a/README.md
+++ b/README.md
@@ -50,7 +50,7 @@ one side of every fork, for as long as you leave it.
 | Steer left or right | Drag sideways from wherever you touch; or tilt the phone, with Tilt on | ← → or A D |
 | Tilt to steer, on or off | The Tilt button at the bottom left (phones and tablets only) | |
 | 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 |
+| Choose a way at a fork, or a side of an island | A touch towards it on the way up | the same |
 | Sound on or off | The button at the top right | M |
 | Go to another lake | Randomize, at the top left | R |
 
@@ -246,8 +246,23 @@ its path.
   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.
 
+- **It has long islands.** Low banks of reeds, 180 to 480 m long and up to 32 m across,
+  standing in the middle of a channel with water both sides: the channel parts round
+  one and is one again beyond it. The water either side is as wide as the channel
+  would have been, so the lake swells where an island is. A touch of steering on the
+  way up to one chooses the side; with none, the island has a side it prefers. About
+  one every 5 km, and none near a fork or in a pass.
+- **It keeps the marks made on it** (`src/render/marks.ts`). The skates leave a line,
+  and each push a scratch to one side and then the other; on ice thin enough to crack,
+  the cracks that are heard are also seen, where they were heard from, and a push on
+  such ice starts more from under the skate. The marks lie on the hundred metres square
+  of ice round the skater, so a skater who turns back or circles an islet comes on their
+  own tracks, as in the film; further off than that the lake forgets.
+
 <img src="docs/screenshots/fork.png" alt="The lake parting round a wooded island ahead" width="640" />
 
+<img src="docs/screenshots/island.png" alt="A long island of reeds ahead in the middle of the lake" 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" />
diff --git a/docs/screenshots/about.png b/docs/screenshots/about.png
index f899118..cfaff71 100644
Binary files a/docs/screenshots/about.png and b/docs/screenshots/about.png differ
diff --git a/docs/screenshots/aeroplane.png b/docs/screenshots/aeroplane.png
index 3b9fa6b..0a36426 100644
Binary files a/docs/screenshots/aeroplane.png and b/docs/screenshots/aeroplane.png differ
diff --git a/docs/screenshots/aurora-phone.png b/docs/screenshots/aurora-phone.png
index 50e2217..fe65915 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 0454504..1b4a3ed 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 ecd1761..82c97ec 100644
Binary files a/docs/screenshots/autopilot.png and b/docs/screenshots/autopilot.png differ
diff --git a/docs/screenshots/blizzard.png b/docs/screenshots/blizzard.png
index 0035b1a..3efbc17 100644
Binary files a/docs/screenshots/blizzard.png and b/docs/screenshots/blizzard.png differ
diff --git a/docs/screenshots/comet.png b/docs/screenshots/comet.png
index a1c4ad9..d251767 100644
Binary files a/docs/screenshots/comet.png and b/docs/screenshots/comet.png differ
diff --git a/docs/screenshots/dusk.png b/docs/screenshots/dusk.png
index d0fc084..e6b8813 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 27ce902..10728f3 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 3fdafc2..84883c9 100644
Binary files a/docs/screenshots/fork.png and b/docs/screenshots/fork.png differ
diff --git a/docs/screenshots/island-alongside.png b/docs/screenshots/island-alongside.png
new file mode 100644
index 0000000..3a233c1
Binary files /dev/null and b/docs/screenshots/island-alongside.png differ
diff --git a/docs/screenshots/island.png b/docs/screenshots/island.png
new file mode 100644
index 0000000..17d6e86
Binary files /dev/null and b/docs/screenshots/island.png differ
diff --git a/docs/screenshots/islets-dusk.png b/docs/screenshots/islets-dusk.png
index 8c69f95..a94ef68 100644
Binary files a/docs/screenshots/islets-dusk.png and b/docs/screenshots/islets-dusk.png differ
diff --git a/docs/screenshots/islets.png b/docs/screenshots/islets.png
index a9cdaaa..5eb4eba 100644
Binary files a/docs/screenshots/islets.png and b/docs/screenshots/islets.png differ
diff --git a/docs/screenshots/landscape.png b/docs/screenshots/landscape.png
index e0d0a70..6b56ba5 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 37d4fd0..0f66b43 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 12901f6..8295446 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 6c195f7..891781f 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 18dcd0a..6c11178 100644
Binary files a/docs/screenshots/settings.png and b/docs/screenshots/settings.png differ
diff --git a/docs/screenshots/snow.png b/docs/screenshots/snow.png
index d9d5c69..9672530 100644
Binary files a/docs/screenshots/snow.png and b/docs/screenshots/snow.png differ
diff --git a/docs/screenshots/steering.png b/docs/screenshots/steering.png
index c53a544..cc37201 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 2582919..f205977 100644
Binary files a/docs/screenshots/thin-ice.png and b/docs/screenshots/thin-ice.png differ
diff --git a/docs/screenshots/tracks.png b/docs/screenshots/tracks.png
new file mode 100644
index 0000000..e6546d4
Binary files /dev/null and b/docs/screenshots/tracks.png differ
diff --git a/tools/screenshots.mjs b/tools/screenshots.mjs
index 805a7c3..72be2eb 100644
--- a/tools/screenshots.mjs
+++ b/tools/screenshots.mjs
@@ -35,6 +35,20 @@ const SHOTS = [
   // A bed of reed islets, just down the lake from where it starts.
   { name: 'islets', query: '?seed=1&weather=clear&time=day&s=150', viewport: { width: 844, height: 390 }, act: async () => {} },
   { name: 'islets-dusk', query: '?seed=1&weather=clear&time=dusk&s=7040', act: async () => {} },
+  // A long island of reeds in the middle of the lake: coming up to it, and alongside it.
+  { name: 'island', query: '?seed=1&weather=clear&time=day&s=2880', viewport: { width: 844, height: 390 }, act: async () => {} },
+  { name: 'island-alongside', query: '?seed=1&weather=clear&time=dusk&s=3010', act: async () => {} },
+  // Out at sea, held hard over for a whole circle: the skater comes round onto their own tracks.
+  {
+    name: 'tracks',
+    query: '?seed=1&weather=clear&time=day&s=7880',
+    viewport: { width: 844, height: 390 },
+    act: async (page) => {
+      await page.keyboard.down('ArrowRight')
+      await page.waitForTimeout(12_500)
+      await page.keyboard.up('ArrowRight')
+    },
+  },
   // The same water at the other times of day.
   { name: 'dusk', query: '?seed=1&weather=clear&time=dusk&s=5200', viewport: { width: 844, height: 390 }, act: async () => {} },
   { name: 'night', query: '?seed=1&weather=clear&time=night&s=5200', viewport: { width: 844, height: 390 }, act: async () => {} },