Digging basins to the lower rim left a 9-18 grain vertical cliff on each lake's high side
(owner screenshots, seed 766733). From each edge inward the ground now falls at most 0.7 grains
a column and is never raised above the natural surface. New no-cliff check in t_lakes.js;
world hashes re-baselined (shallow ore: 2 cells changed, on a lake bank).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The lake lip was Math.min(surfY), the highest ground (y grows downward), so water was poured
above the lower rim and, once levelled, ran up to the trade dock on 4 of 12 seeds. The lip is
now the lower rim edge minus one, and each lake stays 80 grains from spawn. Seed hashes and
the shallow-ore hash re-baselined (changes only under lake basins); golden fixtures also
freeze surfY/dirtY/AMB from the previous generator.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Volume-preserving levelling pass for water bodies of 50+ cells; the dock foundation is placed
first so it cannot erase levelled water. Seed hashes re-baselined (water and air only).
Started by Codex, finished and reviewed by Claude after Codex hit its usage limit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Written by the local model (qwen3-coder-30b) in a sandboxed worktree via local-run; reviewed by Claude.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Written by the local model (qwen3-coder-30b) in a sandboxed worktree via local-run; reviewed by Claude.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Written by the local model (qwen3-coder-30b) in a sandboxed worktree via local-run; reviewed by Claude.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Belts, filters, screw conveyors, shafts and pipe pieces never fill a rectangle;
a diagonal belt drag stays sloped with Shift held.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stickiness gated every diagonal step, so clay lumps, snow, wood chunks,
ash and dirt crawled down sloped walls (a clay grain never got down a
20-piece slope). It now applies only grain against grain: a grain
resting on anything built always tries its diagonal step, so chutes
carry every material while heaps keep their shape. The random draw is
unchanged, so generated worlds stay the same.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A slope's seal can sit in a cell its neighbour leaves open (a slope's
open corner, or under a grate, screw or screen), but removal only
cleared it when the neighbour was a sloped wall, so cutting a sloped
belt next to a sloped filter or grate could leave a one-cell belt that
nothing owned and nothing could remove. Removal now asks whether the
neighbour fills that cell itself, and loading a world clears belt and
screen cells that no block or seal owns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Downhill runs have no cleats, so they no longer draw the sidewall or
ribs either: placed, as ghosts, or in the drag preview, which now knows
the belt's direction. Uphill runs keep the wall and ribs.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>