Homepage scene: scroll at the live block rate so spacing stays constant

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-josh 2026-10-03 21:17:16 +00:00
parent 0953ec7c00
commit 44075ba470

View file

@ -531,14 +531,14 @@ footer .wrap{padding-block:48px 32px}
if(liveMode){if(liveQ.length&&t-last>Math.max(60,1000/liveRate)){spawn(W+S,liveQ.shift());last=t;}}
else if(t-last>1000){spawn(W+S);last=t;}
var dt=16;
blocks.forEach(function(b){b.x-=speed*dt;var age=t-b.born;
var sp=liveMode?speed*Math.min(Math.max(1,liveRate),8):speed;blocks.forEach(function(b){b.x-=sp*dt;var age=t-b.born;
if(b.state==='mined'&&age>1200*k)b.state='proving';
if(b.state==='proving'){for(var i=0;i<4;i++){if(!b.claimed[i]&&Math.random()<0.012/k){b.claimed[i]=true;var fromTop=Math.random()<0.5;sparks.push({x:Math.random()*W,y:fromTop?-6:H+6,tx:b.x,ty:b.y,b:b,i:i,p:0});}}
if(b.shards.every(function(v){return v>=1;})){b.state='proven';b.glow=1;proven++;cp.textContent=proven;if(b.cp)setTimeout(function(){b.locked=true;locked++;cl.textContent=locked;ripples.push({x:b.x,y:b.y,r:S,a:1});ripples.push({x:b.x,y:b.y,r:S*0.5,a:1});},1800*k);}}
if(b.glow>0)b.glow-=0.02;});
sparks.forEach(function(sp){sp.p+=Math.min(0.08,0.035/k);sp.tx=sp.b.x;sp.ty=sp.b.y;if(sp.p>=1){sp.done=true;sp.b.shards[sp.i]=1;}});
sparks=sparks.filter(function(sp){return !sp.done;});
ripples.forEach(function(r){r.r+=2.2;r.a-=0.012;r.x-=speed*dt;});ripples=ripples.filter(function(r){return r.a>0;});
ripples.forEach(function(r){r.r+=2.2;r.a-=0.012;r.x-=sp*dt;});ripples=ripples.filter(function(r){return r.a>0;});
x.clearRect(0,0,W,H);
// faint lane rails
x.strokeStyle='rgba(42,42,48,0.6)';x.lineWidth=1;for(var l=0;l<lanes;l++){x.beginPath();x.moveTo(0,laneY(l));x.lineTo(W,laneY(l));x.stroke();}