Sloped belts hold their load with moving cleats (t42); sloped filters are downhill shaking screens (t43)
The magic grip is gone: cleats every 8 face cells, 6 grains tall, carry pockets uphill (about 71 grains/s against 90 flat) and overflow rolls back. Sloped filters always run downhill; grains travel by gravity and a shake, and sorting stays exact. Drawing needs another pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -97,4 +97,24 @@ check('drawing leaves the seed, cells and saved block data unchanged', run(`(()
|
||||
}
|
||||
return snapshot() === before;
|
||||
})()`));
|
||||
for (const grade of [-1,1]) {
|
||||
flatWorld(run,160,120,112);
|
||||
run(`for(let k=0;k<6;k++)placeBlock(${grade<0?'BP_BELT_UP':'BP_BELT_DOWN'},1,12+k,${grade<0?20:12}+k*${grade},true);`);
|
||||
for(let phase=0;phase<8;phase++) {
|
||||
run(`rebuildPower();slopePhase.fill(${phase});slopeCleatsTick(false);prepareSlopeBelts(0,0,W,H);`);
|
||||
check(`grade ${grade} phase ${phase} draws exactly the physical cleat raster`,run(`(()=>{
|
||||
let drawn=0;
|
||||
for(let i=0;i<N;i++){const x=i%W,y=(i/W)|0,detail=slopeDetailAt(i,x,y);if(detail===1)drawn++;
|
||||
if((detail===1)!==Boolean(cleatMask[i] && !part[i] && !occ[i] && !mach[i] && (mat[i]===EMPTY || PH[mat[i]]===PH_GAS)))return false;
|
||||
}return drawn>0;
|
||||
})()`));
|
||||
}
|
||||
}
|
||||
flatWorld(run,160,120,112);
|
||||
run('placeBlock(BP_FILTER_DOWN,128,12,12,true);tick=0;prepareSlopeBelts(0,0,W,H);var idleJoins=slopeBeltJoins[12*BW+12];tick=2;prepareSlopeBelts(0,0,W,H);');
|
||||
check('empty screen has a stable frame',run('slopeBeltJoins[12*BW+12]===idleJoins'));
|
||||
run('setCell(47*W+48,SAND,20,0);prepareSlopeBelts(0,0,W,H);');
|
||||
check('loaded screen shakes the frame with the simulation tick',run('(slopeBeltJoins[12*BW+12]&64)!==0'));
|
||||
run('tick=4;prepareSlopeBelts(0,0,W,H);');
|
||||
check('loaded frame returns on the next shake beat',run('(slopeBeltJoins[12*BW+12]&64)===0'));
|
||||
done();
|
||||
|
||||
Reference in New Issue
Block a user