374:(t,n,s)=>{const i=s(555);class e extends Array{constructor(t,n,s){super(),this.orgRnd=s,this.conRand=new i.myRandom(Math.round(1e3*s)),this.indRand=new i.myRandom(Math.round(1e3*R.random_dec()));for(let s=0;s<t;s++){const t=new Array;for(let s=0;s<n;s++)t.push(0);this.push(t)}}WriteN(t,n,s){const i=Math.max(0,Math.min(this.length-1,Math.round(n*this.length))),e=Math.max(0,Math.min(this[i].length-1,Math.round(s*this[i].length)));this[i][e]=t}ReadN(t,n){const s=Math.max(0,Math.min(this.length-1,t*this.length)),i=Math.max(0,Math.min(this[0].length-1,n*this[0].length));return this.Eval(s,i,!0)[2]}Grow(t,n,s,i,e){this.NoiseGrowth(12*(.155+.65*this.conRand.rnd()),100*this.conRand.rnd(),.025,-.5*this.conRand.rnd()-.5,.5+.5*this.conRand.rnd(),!1,1,1,e),this.NoiseGrowth(12*(.45+.65*this.conRand.rnd()),100*this.conRand.rnd(),.025,-.5*this.conRand.rnd()-.5,1,!0,10*this.conRand.rnd(),.03+.06*this.conRand.rnd(),e),this.NoiseGrowth(8,100*this.conRand.rnd(),.006,-.5*this.conRand.rnd()-.5,.5+.5*this.conRand.rnd(),!1,1,1,e),this.Erode(15e3,.05,30,.2,.06,!0,2*t,n,2*s,i),this.Resize(T,T),this.NoiseGrowth(24,100*this.conRand.rnd(),.004,-.25*this.conRand.rnd()-.75,1,!1,100*this.conRand.rnd(),.012,e);const r=100*this.conRand.rnd();this.NoiseGrowth(24*.67,100*this.conRand.rnd(),.012,-.3*this.conRand.rnd()-.3,1,!0,r,.012,e),this.NoiseGrowth(7.92,100*this.conRand.rnd(),.022,-.3*this.conRand.rnd()-.3,1,!0,r,.012,e),this.NoiseGrowth(6,100*this.conRand.rnd(),.015,-1,1,!0,10*this.conRand.rnd(),.012,e),this.Erode(7e4,.05,40,.2,.05,!0,t,n,s,i),this.Normalize(),this.Resize(2*T,2*T),this.Erode(1e5,.05,40,.2,.05,!0,t/2,n,s/2,i)}NoiseGrowth(t,n,s,e,r,h,o,a,l){const d=this.RandomTransformation();for(let c=0;c<this.length;c++)for(let u=0;u<this[c].length;u++){const f=i.Rotate(c*d[1],u*d[2],d[0]),M=(Math.min(r,Math.max(e,(l?-1:1)*i.noise(f[0],f[1],n,s)))-e)/Math.max(.1,r-e)*(h?.75+.75*Math.min(.5,Math.max(-.5,(l?-1:1)*i.noise(c,u,o,a))):1);this[c][u]=Math.round(1e3*(this[c][u]+Math.round(1e3*t*M/30)/1e3))/1e3}}Curvature(t,n,s){return 10*(this.Eval(t,n,!0)[2]-this.MidH(t,n,s))}MidH(t,n,s){return(this.Eval(t-s,n-s,!0)[2]+this.Eval(t-s,n+s,!0)[2]+this.Eval(t+s,n+s,!0)[2]+this.Eval(t+s,n-s,!0)[2])/4}Eval(t,n,s){const i=Math.max(0,Math.min(this.length-2,t)),e=Math.max(0,Math.min(this[0].length-2,n)),r=Math.max(0,Math.min(this.length-2,Math.floor(i))),h=Math.max(0,Math.min(this[0].length-2,Math.floor(e))),o=i-r,a=e-h,l=this[r][h],d=this[r+1][h],c=this[r][h+1],u=this[r+1][h+1],f=l*(1-o)*(1-a)+d*o*(1-a)+c*(1-o)*a+u*o*a;if(s)return[0,0,Math.round(1e3*f)/1e3];const M=(d-l)*(1-a)+(u-c)*a,p=(c-l)*(1-o)+(u-d)*o;return[Math.round(-1e3*M)/1e3,Math.round(-1e3*p)/1e3,Math.round(1e3*f)/1e3]}Resize(t,n){t<1&&(t=1),n<1&&(n=1);const s=new e(0,0,this.conRand.rnd());if(this.length<2)return s;if(this[0].length<2)return s;const i=(this.length-1)/t,r=(this[0].length-1)/n;for(let e=0;e<t+1;e++){const t=new Array;for(let s=0;s<n+1;s++)t.push(this.Eval(e*i,s*r,!0)[2]);s.push(t)}this.splice(0,this.length);for(let t=0;t<s.length;t++)this.push(s[t])}Normalize(){let t=99999,n=-99999;for(let s=0;s<this.length;s++)for(let i=0;i<this[s].length;i++)t>this[s][i]&&(t=this[s][i]),n<this[s][i]&&(n=this[s][i]);if(Math.abs(n-t)>1)for(let s=0;s<this.length;s++)for(let i=0;i<this[s].length;i++)this[s][i]=Math.round(1e3*(this[s][i]-t)/Math.max(.1,n-t))/1e3;else for(let n=0;n<this.length;n++)for(let s=0;s<this[n].length;s++)this[n][s]=Math.round(1e3*(this[n][s]-t))/1e3}Erode(t,n,s,i,e,h,o,a,l,d){if(this.length-1<1)return;if(this[0].length-1<1)return;const c=this.length-1,u=this[0].length-1;for(let f=0;f<t;f++){let t=Math.round(1e3*this.indRand.rnd()*c)/1e3,f=Math.round(1e3*this.indRand.rnd()*u)/1e3,M=1,p=0;const g=Math.max(1,.5*this.indRand.rnd()*s);let m=0,C=0;const S=1/g;for(let s=0;s<g;s++){let s=Math.floor(t),c=Math.floor(f);if(s<=0||c<=0||s>=this.length-1||c>=this[0].length-1)break;const u=t-s,g=f-c,R=this.Eval(t,f,!1);m=n*m+(1-n)*R[0],C=n*C+(1-n)*R[1];const x=Math.sqrt(m*m+C*C);if(x>.001?(m/=x,C/=x):(m=0,C=0),t+=m,f+=C,t<.5||f<.5||t>this.length-1.5||f>this[0].length-1.5||0==m&&0==C)break;const y=this.Eval(t,f,!0)[2]-R[2],w=Math.max(.01,-y*M*40);if(p>w||y>0){const n=y>0?Math.min(y,p):(p-w)*i*r(t,f,h,l,d);p-=n,this[s][c]=Math.round(1e4*(this[s][c]+n*(1-u)*(1-g)))/1e4,this[s+1][c]=Math.round(1e4*(this[s+1][c]+n*u*(1-g)))/1e4,this[s][c+1]=Math.round(1e4*(this[s][c+1]+n*(1-u)*g))/1e4,this[s+1][c+1]=Math.round(1e4*(this[s+1][c+1]+n*u*g))/1e4}else{const n=Math.min(-y,(w-p)*e*r(t,f,h,o,a)),i=Math.min(n*(1-u)*(1-g),this[s][c]);this[s][c]=Math.round(1e4*(this[s][c]-i))/1e4;const l=Math.min(n*u*(1-g),this[s+1][c]);this[s+1][c]=Math.round(1e4*(this[s+1][c]-l))/1e4;const d=Math.min(n*(1-u)*g,this[s][c+1]);this[s][c+1]=Math.round(1e4*(this[s][c+1]-d))/1e4;const M=Math.min(n*u*g,this[s+1][c+1]);this[s+1][c+1]=Math.round(1e4*(this[s+1][c+1]-M))/1e4,p+=i+l+d+M}M-=S}}this.RoundAll()}RoundAll(){for(let t=0;t<this.length;t++)for(let n=0;n<this[t].length;n++)this[t][n]=Math.round(1e3*this[t][n])/1e3}RandomTransformation(){return[Math.round(1e3*this.conRand.rnd()*Math.PI)/1e3,Math.round(1e3*(1+this.conRand.rnd()))/1e3,Math.round(1e3*(1+this.conRand.rnd()))/1e3]}}function r(t,n,s,e,r){return s?Math.round(1e3*(.25+.75*(Math.min(.5,Math.max(-.5,i.noise(t,n,r,e)))+.5)))/1e3:1}t.exports={Mountain:class{constructor(t,n,s,i){const r=R.random_dec();this.t0=new e(100,100,r),this.t0.Grow(t,n,s,i,!1),this.t1=new e(100,100,r),this.t1.Grow(t,n,s,i,!0);for(let t=0;t<this.t0.length;t++)for(let n=0;n<this.t0[t].length;n++){TERCHANGE||(this.t1[t][n]=this.t0[t][n]);const s=.5*(this.t0[t][n]+this.t1[t][n]);let i=Math.max(0,Math.min(1,(Math.sqrt(t*t+n*n)-630)/150));MILL&&FLATTEN||(i=0),this.t0[t][n]=this.t0[t][n]+i*(s-this.t0[t][n]),this.t1[t][n]=this.t1[t][n]+i*(s-this.t1[t][n])}this.c0=new e(this.t0.length,this.t0[0].length,0),this.c1=new e(this.t0.length,this.t0[0].length,0)}CalculateLight(){for(let t=0;t<this.c0.length;t++)for(let n=0;n<this.c0[t].length;n++){let s=2.5*(.4+.6*this.t0[t][n]);this.c0[t][n]=.3*s*this.t0.Curvature(t,n,20)+.4*s*this.t0.Curvature(t,n,6)+3*s*this.t0.Curvature(t,n,.5),s=2.5*(.4+.6*this.t1[t][n]),this.c1[t][n]=.3*s*this.t1.Curvature(t,n,20)+.4*s*this.t1.Curvature(t,n,6)+3*s*this.t1.Curvature(t,n,.5)}}Evaluate(t,n,s){let i=0;const e=2*(t+S/2)%(this.t0.length-1),r=2*(n+S/2)%(this.t0[0].length-1);return i=s.terrain<.5?this.t0.Eval(e,r,!0)[2]:this.t1.Eval(e,r,!0)[2],i}Color(t,n,s){let i=0;const e=2*(t+S/2)%(this.c0.length-1),r=2*(n+S/2)%(this.c0[0].length-1);return i=s.terrain<.5?this.c0.Eval(e,r,!0)[2]:this.c1.Eval(e,r,!0)[2],i}},Array2D:e}},413:t=>{function n(t){let n=new Uint32Array(1);return n[0]=1664525*t[0]+1013904223,n}const s=(Math.sqrt(4)-1)/3,i=(1/Math.sqrt(4)-1)/3;function e(t,n,i,e){return{dx:-n-t*s,dy:-i-t*s,dz:-e-t*s,xsb:n,ysb:i,zsb:e}}const r=[[0,0,0,0,1,1,0,0,1,0,1,0,1,0,0,1],[2,1,1,0,2,1,0,1,2,0,1,1,3,1,1,1],[1,1,0,0,1,0,1,0,1,0,0,1,2,1,1,0,2,1,0,1,2,0,1,1]],h=[-11,4,4,-4,11,4,-4,4,11,11,4,4,4,11,4,4,4,11,-11,-4,4,-4,-11,4,-4,-4,11,11,-4,4,4,-11,4,4,-4,11,-11,4,-4,-4,11,-4,-4,4,-11,11,4,-4,4,11,-4,4,4,-11,-11,-4,-4,-4,-11,-4,-4,-4,-11,11,-4,-4,4,-11,-4,4,-4,-11],o=[0,2,1,1,2,2,5,1,6,0,7,0,32,2,34,2,129,1,133,1,160,5,161,5,518,0,519,0,546,4,550,4,645,3,647,3,672,5,673,5,674,4,677,3,678,4,679,3,680,13,681,13,682,12,685,14,686,12,687,14,712,20,714,18,809,21,813,23,840,20,841,21,1198,19,1199,22,1226,18,1230,19,1325,23,1327,22,1352,15,1353,17,1354,15,1357,17,1358,16,1359,16,1360,11,1361,10,1362,11,1365,10,1366,9,1367,9,1392,11,1394,11,1489,10,1493,10,1520,8,1521,8,1878,9,1879,9,1906,7,1910,7,2005,6,2007,6,2032,8,2033,8,2034,7,2037,6,2038,7,2039,6],a=[0,0,1,-1,0,0,1,0,-1,0,0,-1,1,0,0,0,1,-1,0,0,-1,0,1,0,0,-1,1,0,2,1,1,0,1,1,1,-1,0,2,1,0,1,1,1,-1,1,0,2,0,1,1,1,-1,1,1,1,3,2,1,0,3,1,2,0,1,3,2,0,1,3,1,0,2,1,3,0,2,1,3,0,1,2,1,1,1,0,0,2,2,0,0,1,1,0,1,0,2,0,2,0,1,1,0,0,1,2,0,0,2,2,0,0,0,0,1,1,-1,1,2,0,0,0,0,1,-1,1,1,2,0,0,0,0,1,1,1,-1,2,3,1,1,1,2,0,0,2,2,3,1,1,1,2,2,0,0,2,3,1,1,1,2,0,2,0,2,1,1,-1,1,2,0,0,2,2,1,1,-1,1,2,2,0,0,2,1,-1,1,1,2,0,0,2,2,1,-1,1,1,2,0,2,0,2,1,1,1,-1,2,2,0,0,2,1,1,1,-1,2,0,2,0];t.exports={makeNoise3D:function(t){const l=[];for(let t=0;t<a.length;t+=9){const n=r[a[t]];let s=null,i=null;for(let r=0;r<n.length;r+=4)i=e(n[r],n[r+1],n[r+2],n[r+3]),null===s?l[t/9]=i:s.next=i,s=i;i.next=e(a[t+1],a[t+2],a[t+3],a[t+4]),i.next.next=e(a[t+5],a[t+6],a[t+7],a[t+8])}const d=[];for(let t=0;t<o.length;t+=2)d[o[t]]=l[o[t+1]];const c=new Uint8Array(256),u=new Uint8Array(256),f=new Uint8Array(256);for(let t=0;t<256;t++)f[t]=t;let M=new Uint32Array(1);M[0]=t,M=n(n(n(M)));for(let t=255;t>=0;t--){M=n(M);const s=new Uint32Array(1);s[0]=(M[0]+31)%(t+1),s[0]<0&&(s[0]+=t+1),c[t]=f[s[0]],u[t]=c[t]%24*3,f[s[0]]=f[t]}return function(t,n,e){const r=(t+n+e)*i,o=t+r,a=n+r,l=e+r,f=Math.floor(o),M=Math.floor(a),p=Math.floor(l),g=(f+M+p)*s,m=t-(f+g),C=n-(M+g),S=e-(p+g),R=o-f,x=a-M,y=l-p,w=R+x+y;let E=0;for(let t=d[x-y+1|R-x+1<<1|R-y+1<<2|w<<3|w+y<<5|w+x<<7|w+R<<9];void 0!==t;t=t.next){const n=m+t.dx,s=C+t.dy,i=S+t.dz,e=2-n*n-s*s-i*i;if(e>0){const r=f+t.xsb,o=M+t.ysb,a=p+t.zsb,l=c[255&r],d=c[l+o&255],g=u[d+a&255];E+=e*e*e*e*(h[g]*n+h[g+1]*s+h[g+2]*i)}}return.009708737864077669*E}}}},479:(t,n,s)=>{const i=s(555);var e=new i.myRandom(0);function r(t,n,s,i,r,h){return t*r+h>FRAME-r&&t*r-h<FRAME-r||n*r+h>FRAME-r&&n*r-h<FRAME-r||t*r+h>s*r-FRAME&&t*r-h<s*r-FRAME||n*r+h>i*r-FRAME&&n*r-h<i*r-FRAME?.1+.4*e.rnd():0}function h(t,n){return 3==t[3]?n<.5||n>1.1:t[3]==(STRIPES>.5?2:1)?n<.6||n>1.1:0==t[3]&&2*t[5]<t[2]/U-.1}function o(t,n,s){const i=t%n;return i<s||i>n-s?.1+.35*e.rnd():0}function a(t,n,s){return 0==t[3]||3==t[3]?Math.max(o(t[0],n,s),o(t[1],n,s)):0}function l(t,n){if(0==t[3]||3==t[3])return 0;const s=Math.floor((t[0]+.1)/S),r=Math.floor((t[1]+.1)/S),h=Math.floor((t[2]+.1+Z)/S),o=1+.6*Math.round(.5+.5*i.noise(s,r,h,.23));let a=t[0]+100*t[1],l=t[2]+Z;1==t[3]&&(a=100*t[0]+t[1]+100*S);const d=(a+.4*n*(e.rnd()-.5))%o,c=(l+.4*n*(e.rnd()-.5))%2,u=Math.floor(a/o),f=Math.floor(l/2);if(c+t[5]<3)return 0;const M=1.2*(.12+.12*Math.round(.5+.5*i.noise(u,f,0,1.3))),p=.25+.4*Math.round(.5+.5*i.noise(u,f,77,.73));if(d<M)return 0;if(d>o-M)return 0;if(c<p)return 0;if(c>1.5)return 0;if(i.noise(u,f,11,6.73)<.15)return 0;return(i.noise(u,f,-11,4.73)>.4?1:-.75)*(.6+.3*Math.round(.5+.5*i.noise(u,f,-111,7.73))/2)*(.5+.5*e.rnd())}function d(t,n){const s=Math.floor(2*t[0]),r=Math.floor(2*t[1]),h=Math.floor(2*(t[2]+Z));let o=0,a=0,l=0;return 0==n||3==n?Ztype>.5?(l=t[0],o=h,a=r):(l=t[1],o=s,a=h):2==n?XYtype>.5?(l=t[0],o=r,a=h):(l=t[2],o=s,a=r):XYtype>.5?(l=t[1],o=h,a=s):(l=t[2],o=r,a=s),e.rnd()-.5+.15*Math.sin(.125*l+3*Math.floor(.2*l*i.noise(o,a,0,2134.567))+122*i.noise(o,0,a,2134.567))}t.exports={renderLight:function(t,n,c,u,f){0==t&&(mainCtx.fillStyle="#000000",mainCtx.fillRect(-10,-10,u+20,f+20));const M=Math.floor(t/2)%2==0,p=t%2%2==0;e=new i.myRandom(t);const g=Math.floor(t/4),m=CAM.planeY,C=CAM.planeX;let R=CAM.GetVector();const x=Math.max(10,Math.round(1e6/u));let y=Math.ceil(f/x),w=0,E=f;const b=Math.round(u/2),A=-b,L=Math.round(f/2);for(let v=0;v<y;v++){const B=Math.min(x,E);try{console.log("rendering pass "+(t+1)+", fragment "+(v+1)+"/"+y)}catch{}w+=B,E-=B;const P=mainCtx.getImageData(0,E,u,B),O=P.data,I=-L+w-B,G=-L+w;for(let t=A;t<b;t++){const x=t+b;if((!M||x%2!=1)&&(M||x%2!=0))for(let M=I;M<G;M++){const y=M+L;if(p&&y%2==1)continue;if(!p&&y%2==0)continue;let w=i.addVec(CAM.planeO,C,c*(t+e.rnd()));w=i.addVec(w,m,SQUEEZE*c*(M+e.rnd()));const b=i.getColorIndices(x,y,u,f,E),A=[O[b[0]],O[b[1]],O[b[2]]];let v=[0,0,0];s.g.D=1;let B=i.Trace(w,R,n,!1,!1);const P=i.IsFrame(x,y,u,f,c,0);if(null==B||P){const t=i.RayPlane([0,0,-Z],[0,0,1],w,R);t[3]&&(B=[t[0],t[1],t[2],3,P?500:t[4],200])}if(null!=B){let t=[0,0,0];t=0==B[3]?i.addVec(B,[0,0,1],.045*S*e.rnd()+.05):i.addVec(B,R,-.02*S*e.rnd()-.02);let n=0;DMAP.WriteN(P?0:B[4],x/u,y/f);let M=.2*(P?0:1-(B[2]+Z+12)/(Z+U+25))+.9*Math.min(1,Math.max(0,B[4]-410)/370);s.g.D=8;for(let s=0;s<2;s++)if(e.rnd()>.2+.8*M&&!P){const s=i.Trace(t,i.RotateXZ(LV[0],LV[1],LV[2],.2*(e.rnd()-.5),.15*(e.rnd()-.5)),.2*T,!0,!0);n+=null!=s?(1.25*Math.min(1,s[0]/(.2*T))+.125)/2:.5675}else n+=P?.75-.4*Math.pow(e.rnd(),2):.06*e.rnd()+.12;P||3!=B[3]||(n*=1.1+.2*e.rnd()),n+=l(B,.1+.4*M)*(1.3-.5*M),!P&&h(B,n)&&(n-=2*o(B[STRIPES>.5?0:1],S/16,.08)),!P&&GRID&&(n-=a(B,S,.125)*(SMGRID?.5:1)),!P&&SMGRID&&(n-=.8*a(B,S/2,.125)),n-=2*r(x,y,u,f,c,.125);const p=(1-.2*n)*d(B,B[3])*(1-M);let g=0==B[3]?1.125*(n+.125+.3*p):1.125*(n+.3*p);0==B[3]&&(g=1.22*g+(.5+e.rnd())*B[5]),P||(g=1.35*g-.1);let m=[TERCLR[0],TERCLR[1],TERCLR[2]];0!=B[3]&&(m=[CUTCLR[0],CUTCLR[1],CUTCLR[2]]);const C=P?.3:M/1.5,w=3==B[3]?125:155;m[0]+=C*(w-m[0]),m[1]+=C*(w-m[1]),m[2]+=C*(w-m[2]),v=[m[0]*g,m[1]*g,m[2]*g]}O[b[0]]=g*A[0]/(g+1)+v[0]/(g+1),O[b[1]]=g*A[1]/(g+1)+v[1]/(g+1),O[b[2]]=g*A[2]/(g+1)+v[2]/(g+1)}}mainCtx.putImageData(P,0,E)}}}},
↓ show full (12,828 bytes)