memoscan
← all memos

Memo 0x1f90d9a4…1deb56 on Ethereum

let useA,prngA,prngB; class Random { constructor() { useA = false; let sfc32 = function (uint128Hex) { let a = parseInt(uint128Hex.substr(0, 8), 16); let b = parseInt(uint128Hex.substr(8, 8), 16); let c = parseInt(uint128Hex.substr(16, 8), 16); let d = parseInt(uint128Hex.substr(24, 8), 16); return function () { a |= 0; b |= 0; c |= 0; d |= 0; let t = (((a + b) | 0) + d) | 0; d = (d + 1) | 0; a = b ^ (b >>> 9); b = (c + (c << 3)) | 0; c = (c << 21) | (c >>> 11); c = (c + t) | 0; return (t >>> 0) / 4294967296; }; }; // seed prngA with first half of tokenData.hash prngA = new sfc32(tokenData.hash.substr(2, 32)); // seed prngB with second half of tokenData.hash prngB = new sfc32(tokenData.hash.substr(34, 32)); for (let i = 0; i < 1e6; i += 2) { prngA(); prngB(); } } random_dec() { useA = !useA; return useA ? prngA() : prngB(); } } function rnd() { return R.random_dec() } function vecscl(v,k) { let w=[]; for (let i=0; i<v.length; i++) { w[i] = v[i]*k; } return w } function clamp(x) { return Math.max(0,Math.min(1,x)); } function dot2(x,y) { return x[0]*y[0]+x[1]*y[1]; } R = new Random(); let C,D,body,gl,Shader; document.body.style.backgroundColor = "#030303"; console.log("Calian by Eric De Giuli"); C=({body}=D=document).createElement('canvas'); body.appendChild(C); gl=C.getContext('webgl2'); Shader=(typ,src)=>{ const s =gl.createShader(typ); gl.shaderSource(s,src); gl.compileShader(s); if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) { console.error(`Error compiling ${typ === gl.VERTEX_SHADER ? "vertex" : "fragment"} shader "${src}":`); console.log(gl.getShaderInfoLog(s)); } return s; } var GET = {}; var query = window.location.search.substring(1).split("&"); for (var i = 0, max = query.length; i < max; i++) { if (query[i] === "") continue; var param = query[i].split("="); GET[decodeURIComponent(param[0])] = decodeURIComponent(param[1] || ""); } let simp,colp,vs,fs; let Lx,Ly,Nx,Ny; Nx = 512;if (GET.N) { Nx=GET.N; } Ny=Nx; const head = /\bHeadlessChrome\//.test(navigator.userAgent); let PI = 3.1415926; let pal,pj,inv; let palp = [3,5,3,4,1,2,4,4,1,3,2,2,4,2,3,3]; palp = vecscl(palp,1/46); let cumpal = []; cumpal[0]=0; for (let i=1; i<palp.length; i++) { cumpal[i]=cumpal[i-1]+palp[i-1]; } let st = 1; pj=1; let palr = rnd(); while (st<palp.length && cumpal[st]<palr) { st++; } st--; let pj2 = Math.floor(11*rnd()); (tokenData.tokenId%1000000==0)&&(st=1); inv=0; switch(st) { case 0: pj=6;pj2=7; break; // embers in half light case 1: pj=11;pj2=7; break; // liquid circuit case 2: pj=1;pj2=5; break; // alpenglow case 3: pj=1;pj2=0; break; // zabriskie point case 4: pj=3;pj2=9; break; // aurum case 5: pj=6;pj2=0; break; // tunguska case 6: pj=5;pj2=7; break; // nocturne case 7: pj=11;pj2=5; break; // kind of blue case 8: pj=11;pj2=4; break; // inferno case 9: pj=11;pj2=0; break; // constellation case 10: pj=0;pj2=0;inv=1; break; // white heat case 11: pj=3;pj2=3;inv=1; break; // calanque case 12: pj=2;pj2=0; break; // bouquet case 13: pj=2;pj2=10; break; // spectral case 14: pj=10;pj2=8; break; // the forest path to the spring case 15: pj=10;pj2=4; break; // abalone } pal = new Uint8Array(10*4*2); for (let k=0; k<11; k++) { // which colour in palette for (let k2=0; k2<2; k2++) { // which palette let pp = (k2==0) ? pj : pj2; let kk = Math.min(k,pals[pp].length-1); pal[3*k+3*10*k2] = pals[pp][kk][0]; pal[3*k+3*10*k2+1] = pals[pp][kk][1]; pal[3*k+3*10*k2+2] = pals[pp][kk][2]; if (inv) { pal[3*k+3*10*k2] = (pal[3*k+3*10*k2]+180)%360; } //invert colour } } let kp,km,kv,kw,kl,rand; rand = []; for (let i=0; i<Nrand; i++) { rand[i]=rnd(); } let k0=1; let kl0=0.001; kp = new Float32Array(N); km = new Float32Array(N); kl = new Float32Array(N); switch(st) { case 0: kp = [0.66, 0.95, 0.94, 0.037, 0.89, 0.26, 0.90, 0.94, 0.65, 0.76, 0.54, 0.11, 0.50, 0.66, 0.96, 0.74, 0.91, 0.33, 0.15, 0.85]; break; case 1: kp = [0.97, 0.01, 0.89, 0.08, 0.78, 0.98, 0.16, 0.80, 0.53, 0.91, 0.40, 0.54, 0.84, 0.44, 0.14, 0.75, 0.45, 0.33, 0.47, 0.95]; break; case 2: kp = [0.72, 0.85, 0.51, 0.08, 0.98, 0.29, 0.91, 0.19, 0.69, 0.24, 0.99, 0.32, 0.84, 0.03, 0.97, 0.14, 0.09, 0.04, 0.08, 0.26]; break; case 3: kp = [0.14, 0.95, 0.24, 0.09, 0.05, 0.18, 0.96, 0.04, 0.47, 0.18, 0.13, 0.38, 0.21, 0.85, 0.66, 0.05, 0.15, 0.23, 0.25, 0.48]; break; case 4: kp = [0.58, 0.02, 0.03, 0.84, 0.43, 0.40, 0.95, 0.76, 0.15, 0.55, 0.04, 0.49, 0.49, 0.55, 0.52, 0.07, 0.22, 0.16, 0.31, 0.37]; break; case 5: kp = [0.21, 0.10, 0.21, 0.13, 0.07, 0.42, 0.26, 0.77, 0.28, 0.67, 0.79, 0.10, 0.28, 0.20, 0.04, 0.21, 0.35, 0.125, 0.75, 0.87]; break; case 6: kp = [0.40, 0.28, 0.88, 0.36, 0.92, 0.96, 0.79, 0.24, 0.99, 0.73, 0.68, 0.03, 0.09, 0.52, 0.11, 0.29, 0.95, 0.01, 0.01, 0.62]; break; case 7: kp = [0.10, 0.27, 0.31, 0.05, 0.40, 0.24, 0.67, 0.00, 0.02, 0.92, 0.75, 0.11, 0.40, 0.55, 0.97, 0.45, 0.12, 0.15, 0.54, 0.56]; break; case 8: kp = [0.17, 0.81, 0.64, 0.19, 0.52, 0.27, 0.59, 0.11, 0.65, 0.87, 0.36, 0.17, 0.66, 0.10, 0.95, 0.08, 0.50, 0.43, 0.92, 0.13]; break; case 9: kp = [0.59, 0.56, 0.03, 0.14, 0.58, 0.05, 0.80, 0.00, 0.09, 0.75, 0.80, 0.55, 0.07, 0.27, 0.46, 0.08, 0.35, 0.01, 0.17, 0.63]; break; case 10: kp = [0.021, 0.68, 0.20, 0.04, 0.46, 0.40, 0.30, 0.76, 0.19, 0.20, 0.78, 0.50, 0.10, 0.58, 0.61, 0.13, 0.25, 0.39, 0.63, 0.38]; break; case 11: kp = [0.11, 0.18, 0.02, 0.15, 0.49, 0.90, 0.73, 0.77, 0.69, 0.93, 0.95, 0.76, 0.78, 0.32, 0.13, 0.70, 0.07, 0.04, 0.30, 0.76]; break; case 12: kp = [0.15, 0.27, 0.17, 0.11, 0.61, 0.44, 0.65, 0.21, 0.82, 0.79, 0.40, 0.33, 0.43, 0.22, 0.02, 0.07, 0.50, 0.13, 0.95, 0.34]; break; case 13: kp = [0.89, 0.46, 0.48, 0.30, 0.38, 0.18, 0.13, 0.68, 0.20, 0.87, 0.92, 0.56, 0.06, 0.25, 0.32, 0.10, 0.05, 0.11, 0.31, 0.55]; break; case 14: kp = [0.90, 0.025, 0.064, 0.439, 0.208, 0.154, 0.261, 0.085, 0.268, 0.917, 0.780, 0.709, 0.087, 0.068, 0.684, 0.057, 0.480, 0.282, 0.174, 0.819]; break; case 15: kp = [0.81, 0.79, 0.38, 0.80, 0.19, 0.22, 0.39, 0.047, 0.82, 0.98, 0.90, 0.28, 0.12, 0.24, 0.12, 0.69, 0.62, 0.20, 0.99, 0.71]; break; } for (let i=0; i<N; i++) { km[i]=k0*rnd(); } for (let i=0; i<N; i++) { kl[i]=kl0*rnd(); } if (km[0]<0.15*k0 && st!=10 && st!=3 && st!=1) { kp[15]=0.69;kp[16]=1.34; } let nx = 2+Math.floor(8*rnd()); let ny = 2+Math.floor(8*rnd()); let rr = rnd(); let n4 = Math.floor(Math.exp(4*rnd())); let rbg = Math.floor(15*rnd()); // initial conditions const tex0 = new Uint8Array(Nx*Ny*4); let th; for (let x = 0; x < Nx; x++) { for (let y = 0; y < Ny; y++) { let i = x+Nx*y; let r2 = (x-Nx/2)**2+(y-Ny/2)**2; r2/=(Nx*Nx+Ny*Ny)/4; switch(rbg) { case 0: r2 = Math.sin(x/nx)*Math.sin(y/ny)*Math.sin(25*r2)>.1+.5*rr; break; case 1: r2 = Math.sin(x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(25*r2)>0.5*rr; break; case 2: r2 = Math.sin(y*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(25*r2)>0.5*rr; break; case 3: r2 = Math.sin(y*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(2*(x-Nx/2)/(y-Ny/2)+1*(y-Ny/2)/(x-Nx/2))>0.5*rr; break; case 4: r2 = Math.sin(Math.sin(x/Nx*n4)*y/Ny*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(2*(x-Nx/2)/(y-Ny/2)+1*(y-Ny/2)/(x-Nx/2))>0.5*rr; break; case 5: r2 = Math.sin(Math.sin(x/Nx*n4*PI)*y/Ny*(1-y/Ny)*ny*PI)*Math.sin(x/Nx*nx*PI)>0.6*rr; break; case 6: r2 = Math.sin(Math.sin(y/Ny*n4*PI)*x/Nx*(1-x/Nx)*nx*PI)*Math.sin(y/Ny*ny*PI)>0.6*rr; break; case 7: r2 = Math.sin(30*x/Nx*nx*PI)*Math.sin(x/Nx*nx*PI)>0.6*rr; break; case 8: r2 = Math.sin(30*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)>0.6*rr; break; case 9: r2 *= .7*(Math.sin(20*(x/Nx-0.5)*nx)+Math.sin(2*(y/Ny-0.5))); break; case 10: r2 = r2*Math.sin(20*r2*nx)>.3*rr; break; case 11: r2 = Math.sin(r2*nx*Math.tan(n4*x/Nx+9*y/Ny))>.6*rr; break; case 12: th = Math.atan2(y-Ny/2,x-Nx/2); r2*=1+0.2*Math.cos(nx*th)*(1+0.6*Math.sin(nx/ny+3*nx*th)*(1+0.6*Math.cos(5*nx*th))); r2*=.72; break; case 13: th = Math.atan2(y+(.3+.4*km[3])*Ny,x-.5*Nx); r2 = Math.sin(10*nx*(x-y)/Nx*PI)*Math.sin((y+x)/Ny*ny*PI+th*ny*nx)>(.2+km[2]*.8)*rr; break; case 14: r2=0.6+.4*rr; } tex0[4*i] = Math.floor(rnd()*255*(r2)); tex0[4*i+1] = Math.floor(rnd()*255*(1-r2) ); tex0[4*i+2] = Math.floor(rnd()*255*(1-r2) ); tex0[4*i+3] = Math.floor(rnd()*255*(r2) ); } } dzc=0; dzp=dzc; let loc_a,loc_ac,loc_img,loc_img00,loc_res,loc_t,loc_rand,loc_palc,loc_kp,loc_km,loc_kl,loc_kv,loc_kw,loc_imgc,loc_imgc2,loc_resc,loc_Lc,loc_tc,loc_randc,loc_aavg,loc_bavg,loc_dxy,loc_dxyc,loc_rc,loc_rcc; function thrower(prog) { if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) { console.log(`Link failed:\n${gl.getProgramInfoLog(prog)}`); console.log(`VS LOG:\n${gl.getShaderInfoLog(vs)}`); console.log(`FS LOG:\n${gl.getShaderInfoLog(fs)}`); throw 'AARG DED'; } } simp = gl.createProgram(); // simulation program vs = Shader(gl.VERTEX_SHADER, src_vert); fs = Shader(gl.FRAGMENT_SHADER, src_simp); gl.attachShader(simp, vs); gl.attachShader(simp, fs); gl.linkProgram(simp); gl.useProgram(simp); thrower(simp); function gul(pr,lab) { return gl.getUniformLocation(pr,lab); } loc_img=gul(simp,'img'); loc_img00=gul(simp,'img00'); loc_res=gul(simp,'res'); loc_t =gul(simp,'t'); loc_rand =gul(simp,'rand'); loc_kp =gul(simp,'kp'); loc_km =gul(simp,'km'); loc_kl =gul(simp,'kl'); loc_dxy =gul(simp,'dxy'); loc_rc =gul(simp,'rc'); gl.uniform1i(loc_img,0); gl.uniform1i(loc_img00,1); gl.uniform2f(loc_res,Nx,Ny); loc_a = gl.getAttribLocation(simp, "a"); gl.activeTexture(gl.TEXTURE0); gl.vertexAttribPointer(loc_a, 2, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(loc_a); colp = gl.createProgram(); // colour program vs = Shader(gl.VERTEX_SHADER, src_vert); fs = Shader(gl.FRAGMENT_SHADER, src_colp); gl.attachShader(colp, vs); gl.attachShader(colp, fs); gl.linkProgram(colp); gl.useProgram(colp); thrower(colp); loc_imgc=gul(colp,'img'); loc_imgc2=gul(colp,'img2'); loc_palc=gul(colp,'pal'); loc_resc=gul(colp,'res'); loc_Lc=gul(colp,'L'); loc_tc =gul(colp,'t'); loc_randc =gul(colp,'rand'); loc_dxyc =gul(colp,'dxy'); loc_rcc =gul(colp,'rc'); gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer()); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0]),gl.STATIC_DRAW); gl.uniform1i(loc_imgc,0); gl.uniform1i(loc_imgc2,2); gl.uniform2f(loc_resc,Nx,Ny); loc_ac = gl.getAttribLocation(colp, "a"); //'a'); gl.activeTexture(gl.TEXTURE0); gl.vertexAttribPointer(loc_ac, 2, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(loc_ac);