
Description
!! Execute the script inside the level !! (()=>{let G=window.G||(window.G={});G.stop&&G.stop();if(G.lv!==currentLevel){G.lv=currentLevel;G.o=thisLevel.map(r=>r.slice())}charCount=charCount2=0;char=[];charDepths=[-1,-1];control=1e4;const w=levelWidth,h=levelHeight,n=Math.floor(w*h*.3),p=Math.ceil(n/75),o=[];let ph=0,t=0,k=0;const each=f=>{for(let y=0;y<h;y++)for(let x=0;x<w;x++)f(x,y)};const rd=()=>{tileDepths=[[],[],[],[]];each((x,y)=>{tileShadows[y][x]=[];tileBorders[y][x]=[]});getTileDepths();calculateShadowsAndBorders();for(const c of [osc1,osc2]){c.width=Math.floor(w*30*pixelRatio);c.height=Math.floor(h*30*pixelRatio)}osctx1.setTransform(pixelRatio,0,0,pixelRatio,0,0);osctx2.setTransform(pixelRatio,0,0,pixelRatio,0,0);drawStaticTiles()};const st=()=>{const m=thisLevel.map(r=>r.slice());each((x,y)=>{let c=0;for(let i=-1;i<2;i++)for(let j=-1;j<2;j++)if((i||j)&&thisLevel[y+j]&&thisLevel[y+j][x+i]==10)c++;m[y][x]=(thisLevel[y][x]==10?c==2||c==3:c==3)?10:1});each((x,y)=>thisLevel[y][x]=m[y][x]);rd()};const s=()=>{each((x,y)=>thisLevel[y][x]=G.o[y][x]);o.length=0;for(let i=0;i<w*h;i++)o.push(i);for(let i=o.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[o[i],o[j]]=[o[j],o[i]]}ph=t=k=0;rd()};const tk=()=>{t++;if(ph==0){each((x,y)=>{if(x<=t-y%4)thisLevel[y][x]=1});rd();if(t>=w+3){ph=1;t=0}}else if(ph==1){for(let i=0;i<p&&k<n;i++){const c=o[k++];thisLevel[Math.floor(c/w)][c%w]=10}rd();if(t>=75){ph=2;t=0}}else if(t%5==0)st()};const ky=e=>{if(e.key.toLowerCase()=='r'){_keysDown[82]=false;s()}};window.addEventListener('keydown',ky);G.id=setInterval(tk,40);G.stop=()=>{clearInterval(G.id);window.removeEventListener('keydown',ky)};s()})();