Water pours off ledges several times faster, raining clouds spread boiled-off water (t21)

- Liquids step up to 8 cells a tick toward a drop (fewer the thicker they are), and a top-layer
  grain looks 4 times as far for one, so pools empty and thin film drains. A 100-wide pool
  empties in about 50 s; the old code left 24-650 grains stranded on wide ledges.
- Only a top-layer grain stepping sideways wakes the row ahead, so settled lakes still sleep.
- World generation settles at the old speed: seeds make the same worlds as before.
- Cooled steam under a roof no longer stays steam for ever (its heat area slept).
- Raining clouds keep drifting at half pace and rain over a band either side, so a waterfall into
  a hot shaft no longer rains straight back on its own lake.
- New test/t_water.js; t_weather rain-location checks; t_conveyors counts steam in flight;
  t_molds seeds the random burning-bed check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-24 20:44:06 -04:00
co-authored by Claude Opus 5.5
parent 99d04b4972
commit ea1dd387b1
10 changed files with 195 additions and 20 deletions
+13
View File
@@ -338,6 +338,19 @@ above, including:
version's narrow fade too sharp.
Unexplored ground is pure black, not dark grey (the owner: "should be black anyway").
- **Water pours faster, and boiled-off rain spreads out (t21, 2026-10-24).** The owner found water
running off a ledge slower than expected. Only the top layer of a pool flows, so pools emptied
at a trickle and the old code left 24-650 grains stranded on a wide ledge for good.
- A liquid now steps up to 8 cells a tick toward a drop instead of 1, fewer the thicker it is
(water 8, molten copper 5, slag 4, magma 2, glass 1). A grain on top may look 4 times as far
for a drop, so thin film left behind drains too. A 100-wide pool empties in about 50 s
(it never fully emptied before); settled lakes still sleep.
- Raining clouds keep drifting downwind at half pace, and rain falls over a cloud's band and the
band either side. Before, a waterfall into a shaft hot enough to boil it could rain straight
back on its own lake.
- World generation settles the land at the old water speed, so every seed keeps making the
same world.
## Ideas not built yet
- **Concrete**, as a stronger wall material from rubble.
+5 -4
View File
@@ -226,10 +226,10 @@ Exploration only: never changes grains or the random stream.
- functions: fogAlloc, fogMark, fogSeen, fogInit, fogLook, fogRevealAround, fogRevealAll
- variables: FOG, FOG_SENSE, FOG_SENSE_FADE, fog, FW, FH
### src/sim/cells.js (176 lines)
### src/sim/cells.js (187 lines)
Cell helpers (setCell, move, enter) and the falling-sand movement of powders, liquids and gases (simMove).
- functions: setCell, swapCells, move, enter, powder, passable, liquid, gas, simMove
- variables: SORTP
- variables: SORTP, LSTEP, LFILM
### src/sim/heat.js (246 lines)
Heat: conduction, melting and freezing, reactions, fire and air, steel.
@@ -320,7 +320,7 @@ The bot: movement and collision with the world.
Milestone checks (the ledger) and the sky roof line used for cooling.
- functions: checkLedger, updateRoof
### src/sim/weather.js (85 lines)
### src/sim/weather.js (87 lines)
Weather: clouds from steam, rain and snow, and the world water count.
- functions: wrnd, resetWeather, rainGap, worldWater, absorbSteam, spawnRain, rainAt, weatherTick
- variables: WBAND, WS, weather
@@ -329,7 +329,7 @@ Weather: clouds from steam, rain and snow, and the world water count.
simTick: one simulation step, in order.
- functions: simTick
### src/sim/worldgen.js (344 lines)
### src/sim/worldgen.js (346 lines)
World generation: noise, layers, ores, caves, water, trees, and clearing tiny hard specks.
- functions: makeNoise, fbm, clearHardSpecks, generateWorld, generateWorldAsync
- variables: SPECK_MIN
@@ -476,6 +476,7 @@ The frame loop and boot.
- `test/t_racks.js`: Rack intake, FIFO storage, gate, removal and saved-state validation.
- `test/t_smooth.py`: The smooth look: the WebGL pass compiles, draws, falls back cleanly, and the thermal lens still works.
- `test/t_stone.js`: Uses for waste rock and sand: glass bricks from a fan furnace, the Saw, the silo and builders' orders.
- `test/t_water.js`: Water conservation, settling, ledge pouring, boundaries, pipes and phase changes. Tall worlds keep geothermal heat out of the ponds.
- `test/t_weather.js`: Weather: no more springs; steam rises into clouds and rains back; showers; snow when it is freezing.
- `test/t_world.js`: Trees from acorns, charcoal, brick, density, water/lava/snow/ice, full-bag refunds, drill reach, ballistic blowing, snowy mountains.
- `tools/map.py`: Regenerate the file and symbol index at the end of docs/PROJECT_MAP.md.
+20
View File
@@ -4,6 +4,26 @@ What agents have done, newest first. Add an entry for every piece of work: the d
note or request it was for, what changed, the files touched, the tests run, and anything left
open or not verified. Keep each entry short; the git history has the details.
## 2026-10-24: t21 phase 1: water test pass, faster pouring, rain spreads (Claude Code, Codex)
- `test/t_water.js` (20 checks): conservation, levelling and sleep, pools pouring off ledges,
world edges and corners, pumps, freezing and thawing, boiling and condensing, a pool draining
into a hot shaft.
- `liquid()`/`move()` in `src/sim/cells.js`: multi-cell steps (`LSTEP`, scaled by `FLUID`),
a longer reach for top-layer grains (`LFILM`), and waking the row ahead only when a top-layer
grain steps sideways (waking on every liquid move kept 207 of 2048 areas busy after a reload).
`worldSteps` settles with both at 1: seeds 777, 77 and 4242 hash the same as before.
- Found: cooled steam drifting under a roof could stay steam for ever, because its heat area
slept. `gas()` now keeps the heat pass on it.
- `weatherTick()`: raining clouds drift at half pace; rain falls over the band and one either
side. `t_weather`: 'close to where it gathered' now samples drops in the air (landed water
spreads); a new wind check.
- Test fixes, not weakening: `t_conveyors` pit check counts steam on its way up (the water total
was exact); `t_molds` burning-bed check seeds `RS` (its result hung on earlier tests' draws:
0.28-1.04 depending on the sequence, identical on the old and new code).
- Steady cost after a reload (2048x1024): 1.26 -> 1.24 ms/tick. Tests: `run_all.py --browser`
ALL PASSED. Screenshots `shots/t21-pour-120.png`, `shots/t21-pour-900.png`.
## 2026-10-24: t1: bars stack neatly, Rack blocks store them (Claude Code, Codex)
- `232f5af`: `entTick` snap-and-tip (`entSupportCount`, `src/sim/items.js`);