Sidewall belt and screen drawing, cheaper cleat checks (t42, t43)

Far sidewall drawn behind the load with cleat ribs at their physics
positions; sloped screens get a tinted mesh between rails and shake only
when loaded. Powder skips cleat checks outside chunks that have cleats,
and empty slopes let their chunks sleep. Record the screw conveyor and
stall/carry-depth decisions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 20:08:21 -04:00
co-authored by Claude Opus 5.5
parent 578b55316b
commit 3ee85429fd
14 changed files with 248 additions and 59 deletions
+17
View File
@@ -411,6 +411,12 @@ above, including:
shake; none climbs a 45° slope. So filters are flat or downhill
only; to sort while lifting, run a sloped belt up, then a filter. Not built yet.
- **Conveyor drawing and sleep follow-up (t42/t43, 2026-10-26).** The owner wants visible
rubber ribs on the actual cleat raster, filled corrugated far walls behind the load, and
smooth continuous mesh with rails for inclined screens. Walls stop at the slope ends;
only loaded screens shake. Empty moving cleats must let chunks sleep. Keep pocket transport,
uphill throughput near 71 grains/s and exact sorting unchanged.
- **Sidewall belts with moving cleats (t42, 2026-10-26).** To replace the old full-column
grip, use moving barrier lines rather than material cells: the barrier mask blocks normal
powder movement without overwriting grains, terrain or parts. Cleats stand perpendicular
@@ -432,6 +438,17 @@ above, including:
Both looks use a sturdy mesh frame with a small tick-based shake only while loaded;
idle mesh has no running belt animation. No old uphill-save migration was added.
- **Screw conveyors stay, in every direction (2026-10-26).** The owner asked whether screw
conveyors are still needed now that belts climb 45°, whether they're realistic, and what a
downward screw is for. Kept as they are: real plants use both (screws for steep, vertical and
enclosed runs; belts for long, cheap, high-volume ones), and a downward screw is the same
machine turning the other way, useful for letting material down at a steady rate.
- **Stalls are the player's to fix, but visible; belts carry a realistic depth (t45,
2026-10-26).** An overloaded belt line jammed against a screw conveyor above it. The owner
agreed that's realistic and stays the player's problem, but wants a warning on the stalled
belt and the animation stopped on everything affected, and belts limited to a realistic
load depth instead of carrying 96-grain stacks. Not built yet.
## Ideas not built yet
- **Concrete**, as a stronger wall material from rubble.
+12 -12
View File
@@ -220,7 +220,7 @@ Starter furnace designs and the milestone list shown in the notebook.
- functions: smelterBlueprint
- variables: STARTER_DESIGNS, MILESTONES
### src/sim/world.js (105 lines)
### src/sim/world.js (106 lines)
World state: the per-cell typed arrays, alloc(), ambient temperature by depth, waking.
- functions: emit, bagCap, discover, alloc, depthU, depthY, meanSurface, computeAmbient, fillNoise, wakeXY, wakeHeatXY, wakeIdx, wakeHeatIdx
- variables: W, H, N, CW, CH, NCH, mat, temp, life, flags, stamp, part, mach, digp, noiseB, airS, netId, isPow, occ, surfY, dirtY, graniteY, basaltY, magmaY, roofY, AMB, worldSeed, surfBase, underD, shallowD, lapse, BW, BH, NB, blockP, blockV, ents, bgm, flyers, ghostBlocks, ghostMolds, awake, hot, hotLvl, powderArea, roofDirty, loadWakeOrder, loadWakePending, loadWakeIndex, tick, tickStamp, machines, molds, nets, pcells, powerDirty, beltL, beltR, screwLists, brokenMachines, ghostMachines, ghostBlocked, EV, bot, bag, bagTotal, player, seen, ledger, stats
@@ -230,9 +230,9 @@ 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 (218 lines)
### src/sim/cells.js (223 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, wakeBotPowder, simMove
- functions: setCell, swapCells, move, enter, enterFree, powder, passable, liquid, gas, wakeBotPowder, simMove
- variables: SORTP, SORTP_FUEL, LSTEP, LFILM, CORNER_SEAL
### src/sim/heat.js (265 lines)
@@ -269,10 +269,10 @@ How belts, filters and screw conveyors move what is on or in them. What rests on
- functions: conveyorStep, carryColumn, beltDrain, launchGrain, rebuildFilters, filterCarry, carryBeltsAndFilters, setFilter, filterRun, roomFor, screwSpread, screwIntake, diagonalScrewNext
- variables: CARRY_DEPTH, filterR, filterL, filtersDirty
### src/sim/slope-conveyors.js (51 lines)
### src/sim/slope-conveyors.js (66 lines)
Cleats are moving barriers, not material cells. A cleat supports a finite pocket; the bare face never holds grains.
- functions: cleatFoot, pocketDepth, slopeCleatsTick, screenNudge
- variables: CLEAT_SPACING, CLEAT_HEIGHT, CLEAT_REACH, SCREEN_NUDGE_TICKS, cleatCarrying, cleatMask, cleatCells, slopePhase
- functions: cleatFoot, pocketDepth, slopeCleatsTick, screenNudge, wakeCleatLoad
- variables: CLEAT_SPACING, CLEAT_HEIGHT, CLEAT_REACH, SCREEN_NUDGE_TICKS, cleatCarrying, cleatChunks, cleatMask, cleatCells, slopePhase
### src/sim/blocks.js (219 lines)
Building blocks: placing, integrity, removing, lines and rectangles of blocks.
@@ -361,12 +361,12 @@ Drawing (src/render/): browser only. This file: the renderer state R, colour tab
Propagated coloured light from glowing and burning cells.
- functions: builtForLight, looseForLight, computeLight
### src/render/slope-belts.js (150 lines)
### src/render/slope-belts.js (176 lines)
Drawing only: the face stays on its simulation cells; the band hangs below it.
- functions: slopeBeltConnections, flatBeltCaps, prepareSlopeBelts, slopeBeltSegment, slopeBeltCorner, slopeBeltShape, slopeBeltAt, slopeBeltColor, screenLoaded, slopeDetailAt
- variables: slopeBeltJoins, slopeBeltHalo, beltCaps, slopeAcross, slopeAlong, slopeDistance
- functions: slopeBeltConnections, flatBeltCaps, prepareSlopeBelts, slopeBeltSegment, slopeBeltCorner, slopeBeltShape, slopeBeltAt, slopeBeltColor, screenLoaded, slopeWallShape, slopeWallAt, slopeDetailAt, slopePreviewCleat
- variables: slopeBeltJoins, slopeBeltHalo, beltCaps, slopeAcross, slopeAlong, slopeDistance, slopeWallOwner
### src/render/world.js (447 lines)
### src/render/world.js (456 lines)
Scale colour without changing the smooth-look class.
- functions: fogColor, diagonalScrewJoins, diagonalScrewShape, diagonalScrewBlock, drawWorld
- variables: SCREW_CLASS, diagonalJoins, diagonalAcross, diagonalAlong, diagonalCap
@@ -384,7 +384,7 @@ Smooth look: WebGL setup, texture uploads, drawing and adaptive resolution.
- functions: smCompile, smoothAvailable, smUpload, smoothDraw, smoothPace
- variables: SM, smBytes
### src/render/slope-belt-shader.js (85 lines)
### src/render/slope-belt-shader.js (99 lines)
Smooth slope shading, kept beside the shared CPU geometry in slope-belts.js.
- variables: SM_SLOPE_HELPERS, SM_SLOPE_DRAW
@@ -481,7 +481,7 @@ Gamepad input.
- functions: padPressed, pollPad
- variables: PAD
### src/ui/previews.js (248 lines)
### src/ui/previews.js (250 lines)
Cursor previews: shared grid helpers, air streaks and tool preview dispatch.
- functions: blockRectPx, drawGrid, previewColor, drawAirStreaks, drawReachCircle, drawPreviews, previewBlock
+26
View File
@@ -4,6 +4,32 @@ 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-26: t42/t43 drawing and performance follow-up (Codex)
- Filled the far sidewall down to the belt, behind grains, with two-tone pixel corrugation
and a continuous smooth 45-degree band. Rubber ribs use the physics mask in all eight
phases. Fixed smooth wall seams; matched ghosts, cursor previews and menu icons.
Smooth screens retain tinted mesh, now between solid rails without the pixel overlay;
loaded-only shake and transport are unchanged.
- Empty cleats only wake nearby load; per-chunk flags bypass mask reads for distant powder.
Empty eight-block slope: 3 -> 0 moving areas after 120 ticks. Uphill sand/gravel/copper ore
71.3 grains/s, coal 71.2; exact sorting retained. Isolated 1f8a89d -> current, median five
generated falling-world samples: no slopes 2.006 -> 2.063 ms/tick; 50 slopes 1.952 -> 2.076.
Powder probe with cached zero flag: 45.02 -> 50.56 ms (2.14M calls); residual 12 percent
microbenchmark overhead, about 3 percent in the generated no-slope world. Existing loaded
576-block stress: 0.515 -> 1.064 ms/tick. slope-cost.js records the reproducible methodology;
raw results /tmp/t42-perf-{pre,after}-isolated.txt. Pre-t42 loaded slopes use old grip physics.
- Files: sim cells/slope-conveyors/world; render slope-belts/slope-belt-shader/world;
UI previews/build-menu; t_slope_belt_art.js, t_smooth.py, slope-cost.js; PROJECT_MAP,
DESIGN and t42/t43 reports. Reused enterFree for the ordinary entry rules.
- Final python3 test/run_all.py --browser: ALL PASSED (26 headless suites, 360 play,
16 smooth checks; art suite 57). Before/after suite outputs differ only by five new
checks (/tmp/t42-output.diff). Opened shots/t{42,43}-follow-{belt,screen}-{pixel,smooth}-z{4,8}.png;
rechecked smooth belt after fixing seams; opened t42-follow-ghosts-{pixel,smooth}-z8.png
with both updated menu icons visible. Added sleep, border/load wake, wall geometry,
grain colour and smooth grain-class checks. Rebuilt dist, regenerated map; both tasks Review.
Owner playtest and hardware GPU appearance remain unverified. No commit.
## 2026-10-26: t42: sidewall belts with moving cleats (Codex)
- Continued the uncommitted prototype. `sim/slope-conveyors.js` supplies moving barrier