let hash=tokenData.hash;let mintNumber=parseInt(tokenData.tokenId)%1000000;console.log("Hash: "+hash);console.log("Edition: "+mintNumber);class Rand{constructor(e,f){const a=Uint32Array.of(9,7,5,3);this.R=(e=1)=>e*(e=a[3],a[3]=a[2],a[2]=a[1],e^=e<<11,a[0]^=e^e>>>8^(a[1]=a[0])>>>19,a[0]/2**32),[...e+f+"ThxPiter"].map((e=>this.R(a[3]^=23205*e.charCodeAt())))}d(){return this.R()}n(e,f){return e+(f-e)*this.d()}i(e,f){return~~this.n(e,f+1)}b(e){return this.d()>e?1:0}c(e){return e[this.i(0,e.length-1)]}w(e){let f=0;for(let a=0;a<e.length;++a)f+=e[a][0];const a=this.d()*f;f=0;for(let d=0;d<e.length-1;++d)if(f+=e[d][0],f>=a)return e[d];return e[e.length-1]}}R=new Rand(hash,"StuckInALoop");let paused=!1;const pals=[[1,"Lola","463f3a","8a817c","bcb8b1","f4f3ee","e0afa0"],[1,"Cowabunga Dude","072ac8","1e96fc","a2d6f9","ff7b00","ff9500","ffaa00","ffb700","ffd000","ffdd00","ffea00"],[1,"Vintage Television","080708","3772ff","df2935","fdca40","e6e8e6"],[1,"Camper Van","001219","005f73","0a9396","94d2bd","e9d8a6","ee9b00","ca6702","bb3e03","ae2012","9b2226"],[1,"Pickle Breath","007f5f","2b9348","55a630","80b918","aacc00","bfd200","d4d700","dddf00","eeef20","ffff3f"],[1,"Expired Raspberry","ffbc42","d81159","8f2d56","218380","73d2de"],[1,"Peach Wave","f94144","f3722c","f8961e","f9844a","f9c74f","90be6d","43aa8b","4d908e","577590","277da1"],[1,"Rainbow Dust ","3c153b","8b1e3f","db4c40","ffc857","bce784","5dd39e","348aa7"],[1,"Tangerplant","ff6d00","ff7900","ff8500","ff9100","ff9e00","240046","3c096c","5a189a","7b2cbf","9d4edd"],[1,"Cyber Snack","f72585","7209b7","3a0ca3","4361ee","4cc9f0"],[1,"Tastes Like Burning","03071e","370617","6a040f","9d0208","d00000","dc2f02","e85d04","f48c06","faa307","ffba08"],[1,"Lagoonies Never Say Die","d9ed92","b5e48c","99d98c","76c893","52b69a","34a0a4","168aad","1a759f","1e6091","184e77"],[1,"The Other Venice","264653","2a9d8f","e9c46a","f4a261","e76f51"],[1,"Radio Tower","176bff","fdc552","f9d4d2","72754b","ff7348","fffbee","333333"],[1,"Naptime","d00000","ffba08","3f88c5","032b43","136f63"],[1,"Grape Waterslide","3c1642","086375","1dd3b0","affc41","b2ff9e"],[1,"The Black Parade","2b2d42","8d99ae","edf2f4","ef233c","d90429"],[1,"Two cream One sugar","f3e9dc","c08552","5e3023","895737","dab49d"],[1,"Ferris Wheel","ff595e","ffca3a","8ac926","1982c4","6a4c93"],[1,"Electric Boogaloo","ffbe0b","fb5607","ff006e","8338ec","3a86ff"],[1,"Vegetarian","dad7cd","a3b18a","588157","3a5a40","344e41"],[1,"Black & White","f8f9fa","e9ecef","dee2e6","ced4da","adb5bd","6c757d","495057","343a40","212529"]],pal=R.w(pals);console.log("Palette: "+pal[1]);const motions=["p.xz*=Rot(time*.05);","p.yz*=Rot(time*.05);","p.xy*=Rot(time*.05);","p.xz*=Rot(-time*.05);","p.yz*=Rot(-time*.05);","p.xy*=Rot(-time*.05);"];let motion=R.c(motions);const gridsize=R.i(3,6);const vertexShaderSource =`#version 300 es\nin vec2 aVertexPosition;void main(){gl_Position=vec4(aVertexPosition,0.0,1.0);}`;let fragmentShaderSource =`#version 300 es\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform vec2 u_resolution;uniform float u_time;uniform sampler2D u_tex0;uniform float u_rot;\n#define AA ${(paused?4:1)}\n#define BLUR 60.\n#define PI 3.14159265359\n#define TAU PI*2.\n#define MS 256\n#define MD 100.\n#define SD .0001\n#define FB ${R.d()* 6+6}\n#define LL 2.\n#define S smoothstep\nfloat Hash21(vec2 p){p=fract(p*vec2(${R.d()*123.34+123.34},${R.d()*456.21+456.21}));p+=dot(p,p+${R.d()*45.32+45.32});return fract(p.x*p.y);}vec4 toLinear(vec4 sRGB){bvec4 co=lessThan(sRGB,vec4(0.04045));vec4 hi=pow((sRGB+vec4(0.055))/vec4(1.055),vec4(2.4));vec4 lo=sRGB/vec4(12.92);return mix(hi,lo,co);}mat2 Rot(float a){return mat2(cos(a),-sin(a),sin(a),cos(a));}float Smin(float a,float b,float k){float h=max(k-abs(a-b),0.0)/k;return min(a,b)-h*h*k*(1.0/4.0);}float Box(vec3 p,vec3 b,float xz,float xy,float yz){for(float i=0.; i < FB; i++){p.xz*=Rot(xz);p.xy*=Rot(xy);p.yz*=Rot(yz);p=abs(p);}vec3 q=abs(p)-b;return length(max(q,0.0))+min(max(q.x,max(q.y,q.z)),0.0);}float Light(vec2 uv,float flare){float d=length(uv);float m=.2/d;float rays=max(0.,1.-abs(uv.x*uv.y*1000.));m+=rays*flare;uv*=Rot(3.14159/4.);rays=max(0.,1.-abs(uv.x*uv.y*1000.));m+=rays*.3*flare;m*=S(1.25,.2,d);return m;}vec3 LightLayer(vec2 uv,vec3 c){vec3 col=vec3(0.);vec2 gv=fract(uv)-.5;vec2 id=floor(uv);for(int y=-1;y<=1;y++){for(int x=-1;x<=1;x++){vec2 off=vec2(x,y);float n=Hash21(id+off);float size =fract(n*145.32);float light=Light(gv-off-vec2(n,fract(n*34.42))+.5,S(.85,1.,size)* .5);col+=light*size*c;}}return col;}vec3 Lights(vec2 uv,float time,vec3 c){vec3 col=vec3(0.);for(float i=0.; i<1.; i+=1./LL){float depth=fract(i);float scale=mix(20.,.5,depth); float fade=depth*S(1.,.95,depth); col+=LightLayer(uv*scale+i*643.3,c)*fade;}return col;}float Swirls(vec3 p){float res=0.;float o=${R.n(.3,.8)};vec3 p1=p;for(int i=0;i<20;++i){p=o*abs(p)/dot(p,p)-o;p.yz=vec2(p.y*p.y-p.z*p.z,1.5*p.y*p.z);p=p.zxy;res+=exp(-20.*abs(dot(p,p1)));}return res;}float GetDist(vec3 p,float time){${motion}float b1=Box(p+vec3(0.0,0.0,0.0),vec3(.45),${R.d()* Math.PI*2},${R.d()* Math.PI*2},${R.d()* Math.PI*2});float b2=Box(p-vec3(0.0,0.0,0.0),vec3(.45),${R.d()* Math.PI*2},${R.d()* Math.PI*2},${R.d()* Math.PI*2});return Smin(b1,b2,0.2);}float RayMarch(vec3 ro,vec3 rd,float side,float time){float dO=0.;for(int i=0; i<MS; i++){vec3 p=ro+rd*dO;float dS=GetDist(p,time)*side;dO+=dS;if(dO>MD||abs(dS)<SD)break;}return dO;}vec3 GetNormal(vec3 p,float time){float d=GetDist(p,time);vec2 e=vec2(.0075,0);vec3 n=d-vec3(GetDist(p-e.xyy,time),GetDist(p-e.yxy,time),GetDist(p-e.yyx,time));return normalize(n);}vec3 GetRayDir(vec2 uv,vec3 p,vec3 l,float z){vec3 f=normalize(l-p),r=normalize(cross(vec3(0,1,0),f)),u=cross(f,r),c=f*z,i=c+uv.x*r+uv.y*u,d=normalize(i);return d;}vec3 Render(vec2 uv,vec3 ro,vec3 rd,float time){vec3 col=vec3(0.);float d=RayMarch(ro,rd,1.,time);float IOR=1.52;if(d<MD){vec3 p=ro+rd*d;vec3 n=GetNormal(p,time);vec3 r=reflect(rd,n);vec3 rdIn=refract(rd,n,1./IOR);vec3 pEnter=p-n*SD*5.;float dIn=RayMarch(pEnter,rdIn,-1.,time);vec3 pExit=pEnter+rdIn*dIn;vec3 nExit=-GetNormal(pExit,time);float dens=.15;float optDist=exp(-dIn*dens);vec3 rdOut=refract(rdIn,nExit,IOR)*optDist;if(dot(rdOut,rdOut)==0.)rdOut=reflect(rdIn,nExit);rdOut=clamp(rdOut,-1.,1.);float dif=dot(n,normalize(vec3(1,2,3)))*.5+.5;vec4 t1=texture(u_tex0,rdOut.xy);vec4 t2=texture(u_tex0,n.xy);float fresnel=pow(1.+dot(rd,n),3.);vec3 lights=Lights(rdOut.xy,time,t2.rgb);${motion}float swirls=Swirls(p*1.5);col=mix(t1.rgb*t1.rgb,vec3(1),fresnel);col*=swirls;col*=(lights);}return col;}out vec4 fragColor;void main(){vec2 uv=vec2(0.);float time=u_time;vec4 col=vec4(0.0);vec4 tot=vec4(0.0);vec3 lp=vec3(0,0,0);for(int m=0; m<AA; m++){for(int n=0; n<AA; n++){vec2 o=vec2(float(m),float(n))/float(AA)-0.5;uv=(2.0*(gl_FragCoord.xy+o)-u_resolution.xy)/min(u_resolution.x,u_resolution.y); float dd=0.5+0.5*sin(gl_FragCoord.x*416.0)*sin(gl_FragCoord.y*647.0);time=u_time-0.5*(1.0/BLUR)*(float(m*2+n)+dd)/float(AA*AA);vec3 ro=vec3(1.,0.,1.);vec3 rd=GetRayDir(uv,ro,vec3(0,0,0),4.);col=vec4(Render(uv+0.0001,ro,rd,time),1.0); tot+=pow(col,vec4(0.4545));}}tot/=float(AA*AA);tot=clamp(tot,0.1,1.0);tot=tot*tot*(3.0-2.0*tot);tot+=tot*.15;tot=toLinear(tot);vec3 x=min(vec3(1.),tot.rgb/1.);tot=vec4(pow(clamp((x*(2.51*x+.03))/(x*(2.43*x+.59)+.14),0.,1.),vec3(1./2.20)),1.);fragColor=vec4(tot);}`;document.addEventListener("keydown",(e=>{const r=e.key;"s"===r&&(init(),render(),save()),"p"===r&&pause()}));const save=e=>{console.log("saving"),canvas.toBlob((e=>{const r=document.createElement("a");r.href=URL.createObjectURL(e),r.setAttribute("download","IfYouCouldDoItAllAgain_("+pal[1]+")_"+mintNumber+".png"),r.click()}),"image/png",1)},compileShader=(e,r,t)=>{const a=e.createShader(t);e.shaderSource(a,r),e.compileShader(a);if(!e.getShaderParameter(a,e.COMPILE_STATUS))throw"could not compile shader:"+e.getShaderInfoLog(a);return a},createProgram=(e,r,t)=>{const a=e.createProgram();e.attachShader(a,r),e.attachShader(a,t),e.linkProgram(a);if(!e.getProgramParameter(a,e.LINK_STATUS))throw"program failed to link:"+e.getProgramInfoLog(a);return a},init=e=>{const r=new Float32Array([-1,1,1,1,1,-1,-1,1,1,-1,-1,-1]),t=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,t),gl.bufferData(gl.ARRAY_BUFFER,r,gl.STATIC_DRAW);const a=compileShader(gl,vertexShaderSource,gl.VERTEX_SHADER),o=compileShader(gl,fragmentShaderSource,gl.FRAGMENT_SHADER);program=createProgram(gl,a,o),program.aVertexPosition=gl.getAttribLocation(program,"aVertexPosition"),gl.enableVertexAttribArray(program.aVertexPosition),gl.vertexAttribPointer(program.aVertexPosition,2,gl.FLOAT,!1,0,0),gl.useProgram(program),gl.bindBuffer(gl.ARRAY_BUFFER,t);for(var n=[offscreen0],l=[],g=0;g<n.length;++g){var i=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,i),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.REPEAT),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.REPEAT),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,n[g]),l.push(i)}gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,l[0])},render=e=>{gl.viewport(0,0,canvas.width,canvas.height),gl.clearColor(1,1,1,1),gl.clear(gl.COLOR_BUFFER_BIT),program.uPosition=gl.getUniformLocation(program,"u_resolution"),gl.uniform2fv(program.uPosition,[gl.canvas.width,gl.canvas.height]),program.uTime=gl.getUniformLocation(program,"u_time"),gl.uniform1f(program.uTime,.001*ctime),program.uTex0=gl.getUniformLocation(program,"u_tex0"),gl.uniform1i(program.uTex0,0),gl.drawArrays(gl.TRIANGLES,0,6),paused||(ctime=e-pdelta,requestAnimationFrame(render))};let colorcount=0;const createCell=(e,r,t,a,o)=>{if(o>0)R.d()>.5?(createCell(e,r,t,a/2,o-1),createCell(e,r+a/2,t,a/2,o-1)):(createCell(e,r,t/2,a,o-1),createCell(e+t/2,r,t/2,a,o-1));else{const n=txt0.createLinearGradient(e-t/2,r,t,a);colorcount++,n.addColorStop(0,"#"+pal.slice(2)[colorcount%(pal.length-2)]),colorcount++,n.addColorStop(1,"#"+pal.slice(2)[colorcount%(pal.length-2)]),txt0.fillStyle=n,o<2&&R.b(.85)&&(txt0.fillStyle="#FFFFFF"),txt0.fillRect(e-1,r-1,t+1,a+1)}},generateBg=e=>{offscreen0.width=canvas.width,offscreen0.height=canvas.height,createCell(0,0,canvas.width,canvas.height,gridsize)},updateAA=e=>{fragmentShaderSource=fragmentShaderSource.replace(/#define AA \d/gms,`#define AA ${e}`),init(),render()},pause=(e,r)=>{paused=!paused,0==paused?(pdelta+=performance.now()-ptime,ptime=0,updateAA(minAA),render()):(ptime=performance.now(),updateAA(maxAA))};let program,minAA=1,maxAA=4,ctime=0,ptime=0,pdelta=0;const canvas=document.createElement("canvas");innerWidth<.75*innerHeight?(canvas.width=innerWidth,canvas.height=1.333*canvas.width):(canvas.height=innerHeight,canvas.width=.75*canvas.height);const gl=canvas.getContext("webgl2",{antialias:!0});document.body.appendChild(canvas);const offscreen0=document.createElement("canvas"),txt0=offscreen0.getContext("2d");offscreen0.width=canvas.width,offscreen0.height=canvas.height,createCell(0,0,canvas.width,canvas.height,gridsize),init(),render();canvas.addEventListener('click',function(){console.log('pause');pause()});
↓ show full (11,156 bytes)