fuzzyworld

nordic-skating / commit

docs: how the ice cracks; and what a figure and a view from behind would take

94b3b29fac1508038e5092532dd7235c19ef4df6 · Pavel Safronov · 2026-10-10 15:22:22 -0700 · parents c123191e1e30

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

docs: how the ice cracks; and what a figure and a view from behind would take

Usage: 1.3K in / 1.1M out / 189.3M cached (session tally)
rtk:   1.7M saved, 25.3% over 2693 cmds (global/lifetime)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
 PLAN.md                               |  52 +++++++++++++++++++++++++++-------
 README.md                             |  16 ++++++++---
 docs/screenshots/about.png            | Bin 228324 -> 226914 bytes
 docs/screenshots/aeroplane.png        | Bin 373494 -> 345858 bytes
 docs/screenshots/aurora-phone.png     | Bin 244606 -> 236951 bytes
 docs/screenshots/aurora.png           | Bin 309866 -> 289040 bytes
 docs/screenshots/autopilot.png        | Bin 203312 -> 189181 bytes
 docs/screenshots/blizzard.png         | Bin 224810 -> 181606 bytes
 docs/screenshots/comet.png            | Bin 264360 -> 277652 bytes
 docs/screenshots/dusk.png             | Bin 258024 -> 233670 bytes
 docs/screenshots/far.png              | Bin 277082 -> 254036 bytes
 docs/screenshots/fork.png             | Bin 337280 -> 327506 bytes
 docs/screenshots/island-alongside.png | Bin 187937 -> 210011 bytes
 docs/screenshots/island.png           | Bin 311364 -> 328058 bytes
 docs/screenshots/islets-dusk.png      | Bin 197038 -> 199652 bytes
 docs/screenshots/islets.png           | Bin 298472 -> 294338 bytes
 docs/screenshots/landscape.png        | Bin 281658 -> 253280 bytes
 docs/screenshots/night.png            | Bin 265652 -> 241177 bytes
 docs/screenshots/pass.png             | Bin 229983 -> 237300 bytes
 docs/screenshots/sea.png              | Bin 235244 -> 224383 bytes
 docs/screenshots/settings.png         | Bin 236119 -> 235018 bytes
 docs/screenshots/snow.png             | Bin 318141 -> 281763 bytes
 docs/screenshots/steering.png         | Bin 269382 -> 219260 bytes
 docs/screenshots/thin-ice.png         | Bin 287613 -> 279066 bytes
 docs/screenshots/tracks.png           | Bin 278012 -> 247850 bytes
 25 files changed, 53 insertions(+), 15 deletions(-)

diff --git a/PLAN.md b/PLAN.md
index dfbd980..641e27d 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -124,17 +124,16 @@ silent; should it be?
   itself, only the tracks.
 - **A long island in the middle of the lake**: see "Channels that part and join again".
 
-**To improve, from Pavel's look at them** (2026-10-10).
-- **The cracks the skater makes are too thick and look pixelated as they appear.** They
-  are drawn a pixel and a half wide on a picture with ten pixels to the metre, so a
-  crack is 15 cm across and its steps show. A crack wants to be a hairline: either a
-  finer picture over a smaller square, or cracks drawn as thin lines of their own
-  instead of into a picture, and coming in over a moment instead of all at once.
-- **The cracks the ice already has are not very realistic.** They are a picture 32 m
-  square, repeated: thirty jagged lines scattered at random. Real black ice cracks in
-  long straight runs that meet at angles and stop at one another, in networks, with
-  the wet-looking white of a healed crack and a different look for a fresh one. To be
-  taken care of eventually, and with the item above: the two should look like one thing.
+**Improved on Pavel's look at them** (2026-10-10), waiting to be looked at again.
+- **The cracks the skater makes were too thick and pixelated.** They were drawn into a
+  picture with ten pixels to the metre. They are now lines of their own, a pixel wide at
+  any distance, and a crack runs out from its middle at 28 m/s instead of appearing whole.
+  Tracks and push scratches are drawn the same way.
+- **The cracks the ice already has were not realistic**: thirty jagged lines at random.
+  They are now a network made the way ice cracks: a few long, nearly straight runs, and
+  later cracks that leave an earlier one at a wide angle and stop at the next.
+- Still not done: the picture of the ice's own cracks repeats every 32 m, and they are
+  painted, so close to they are softer than the hairlines the skater makes.
 
 **Still to judge.** Are the tracks too faint against the ice's own cracks, which are the
 same colour? Should they fade with time?
@@ -281,6 +280,37 @@ falls through and nothing is scored. Falling is written and switched off (`RULES
 one is a maybe, as an option beside the relaxed one and never instead of it. Ideas: time
 spent on singing ice, distance without falling, a set course against the clock.
 
+### A figure, and a view from behind them
+
+Asked about by Pavel on 2026-10-10: what would it take to add a figure and make this a
+third-person game? Not started. In short: the lake needs nothing, the skater already
+knows everything a figure would act out, and the work is the figure itself.
+
+**What is there already.** The skater has a place, a direction, a speed, a rate of turn,
+and a stride with the moment of each push in it (`src/skater.ts`): everything a figure's
+pose is made from. The world is drawn round the skater and would be drawn round a camera
+a few metres behind them without change.
+
+**What it needs.**
+1. **A camera that follows**: some metres behind and above, easing after the skater
+   rather than bolted to them, and kept out of the banks, trees and islets, which in a
+   pass 5 m to a side is most of the problem. And a way to choose the view.
+2. **The figure.** There are no models in this project and no way of loading any. Either
+   one is made here of simple shapes, in keeping with trees that are cones, and moved by
+   rule from the stride (push leg out and back, the other gliding, arms swinging, a lean
+   into turns); or a made model with made animations is brought in, which means a loader,
+   a megabyte or more to download and keep offline, a licence to honour, and finding a
+   skating animation, which are rare. The first is the recommendation.
+3. **What a figure shows up.** A shadow under it, or it floats. Tracks from each skate in
+   turn, not one line down the middle. Something to see it by at night. A faint
+   reflection in black ice would be cheap and would look like the film.
+
+**The risk** is the figure's movement: an awkward skater is worse than none. The view
+from the eyes should stay, as a choice.
+
+**It is also most of multiplayer.** Other players have to be drawn as something, and
+this is the something.
+
 ### Game controller — built, not tried with one
 
 Either stick or the direction buttons steer; Y or triangle goes to another lake; X or
diff --git a/README.md b/README.md
index ff7ea3e..d5351b3 100644
--- a/README.md
+++ b/README.md
@@ -272,12 +272,20 @@ its path.
   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.
+- **Its ice is cracked the way ice cracks** (`src/ice/cracks.ts`). A few long cracks
+  run nearly straight for tens of metres; later ones start from the side of an earlier
+  one, leave it at a wide angle, and stop where they meet another, since a crack cannot
+  cross a crack. So the cracks are a network of long runs joined at T's, with finer ones
+  between, and each is painted as it looks in clear ice: a bright edge at the surface
+  and its face going down into the ice beside it.
 - **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.
+  a crack opens where each near one is heard from, and a push on such ice starts more
+  from under the skate. A crack is a star of a few arms that fork, and it runs out from
+  its middle over a moment. Every mark is a hairline, a pixel wide however near. They
+  stay where they were made, so a skater who turns back or circles an islet comes on
+  their own tracks, as in the film; the lake remembers the last few thousand stretches
+  of line and forgets the ones before.
 
 <img src="docs/screenshots/fork.png" alt="The lake parting round a wooded island ahead" width="640" />
 
diff --git a/docs/screenshots/about.png b/docs/screenshots/about.png
index 54dcac9..4c33171 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 577d0a0..0fbd401 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 9e83080..2ce9fcf 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 5fec0d6..29e16a8 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 c19482c..8054d1a 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 ee9dc87..86caca0 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 0e06435..b2fa7c0 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 5eb966a..39585e8 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 d8bcfea..d597044 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 1d1fa99..babcab9 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
index 00afef9..7b3f029 100644
Binary files a/docs/screenshots/island-alongside.png and b/docs/screenshots/island-alongside.png differ
diff --git a/docs/screenshots/island.png b/docs/screenshots/island.png
index 48c35a4..0c9e71c 100644
Binary files a/docs/screenshots/island.png and b/docs/screenshots/island.png differ
diff --git a/docs/screenshots/islets-dusk.png b/docs/screenshots/islets-dusk.png
index c794a8b..69a625e 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 00fd2f0..8a157d8 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 7802681..fb17f56 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 468f9df..4fe22bf 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 133b779..c9fe818 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 1da40a5..cbd21fc 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 bba5cb9..af3d2b0 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 426d67c..faea993 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 33dda4e..f3ff21a 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 2cf7050..d670f30 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
index c8a32c9..483a533 100644
Binary files a/docs/screenshots/tracks.png and b/docs/screenshots/tracks.png differ