0x7d330020…da62sent to0xa7d8d9ef…d270·#15,035,952·view on Etherscan
const hash=tokenData.hash,tokenId=Math.min(449,tokenData.tokenId%1000),PI=Math.PI,TC=THREE.Color,FL=Math.floor,ABS=Math.abs,xS=Uint32Array.from([0,0,0,0].map((e,r)=>parseInt(hash.substring(8*r+2,8*r+10),16))),prng=e=>{let r,t=xS[3];return xS[3]=xS[2],xS[2]=xS[1],xS[1]=r=xS[0],t^=t<<11,t^=t>>>8,xS[0]=t^r^r>>>19,FL(e*(xS[0]/4294967296))},prand=(e,r)=>e+prng(r-e);const V2=(x,y)=>new THREE.Vector2(x,y);var palette=!prng(6),palnumber=prng(7),rainbowWalls=!palette&&!prng(40),sakuraTrees=!prng(16),randTrees=!sakuraTrees&&!prng(4),drive=prng(3)?-1:1,bus=1==drive&&!prng(3),rainbow=!prng(14),traffic=prng(4);const vertexShader="precision highp float;attribute vec2 position;void main(){gl_Position=vec4(position,1.,1.);}",fragmentShader="precision highp float;uniform sampler2D uScene;uniform vec2 uResolution;\nfloat random(vec2 p){return fract(cos(dot(p,vec2(23.14,2.665)))*12345.6789);}void main(){vec2 uv=gl_FragCoord.xy/uResolution.xy;vec4 color=texture2D(uScene,uv);float step_u=1./uResolution.x;float step_v=1./uResolution.y;vec4 cRight=texture2D(uScene,uv+vec2(step_u,0.));vec4 cBottom=texture2D(uScene,uv+vec2(0.,step_v));float _dFdx=length(color-cRight)/step_u;float _dFdy=length(color-cBottom)/step_v;\nfloat g=sqrt(pow(_dFdx,2.)+pow(_dFdy,2.))*.006;if(g>.4 && uResolution.x>350.)color.rgb*=max(.5,1.-(uResolution.x-350.)/500.);color.rgb*=1.1-.8*(sqrt(pow(.5-uv.x,2.)+pow(.5-uv.y,2.)));vec2 uvRandom=uv;uvRandom.y*=random(vec2(uvRandom.y,1.));color.rgb+=random(uvRandom)*.06;gl_FragColor=color;}";class FX{constructor(e){this.r=e,this.s=new THREE.Scene,this.dC=new THREE.Camera,this.r.setPixelRatio(window.devicePixelRatio),this.r.antialias=!1,this.res=new THREE.Vector2,this.t=new THREE.WebGLRenderTarget(this.res.x,this.res.y,{format:THREE.RGBAFormat,stencilBuffer:!1,depthBuffer:!0}),this.m=new THREE.RawShaderMaterial({fragmentShader:fragmentShader,vertexShader:vertexShader,uniforms:{uScene:{value:this.t.texture},uResolution:{value:this.res}}}),this.p=new THREE.Mesh(new THREE.PlaneBufferGeometry(2,2),this.m),this.p.frustumCulled=!1,this.s.add(this.p),this.resize()}resize(){this.r.getDrawingBufferSize(this.res),this.m.uniforms.uResolution.value=this.res,this.t.setSize(this.res.x,this.res.y)}render(e,r){this.r.setRenderTarget(this.t),this.r.clear(),this.r.render(e,r),this.r.setRenderTarget(null),this.r.render(this.s,this.dC)}}var clock=new THREE.Clock,width=window.innerWidth,height=window.innerHeight;const R=new THREE.WebGLRenderer({premultipliedAlpha:!1,alpha:!0});R.autoClear=!1,R.setPixelRatio(window.devicePixelRatio),R.setSize(width,height),document.body.appendChild(R.domElement);const SC=new THREE.Scene;var tex1=new THREE.Texture(generateTexture());tex1.needsUpdate=!0,tex1.anisotropy=R.capabilities.getMaxAnisotropy(),tex1.wrapT=tex1.wrapS=THREE.RepeatWrapping;var w=.1+prng(10)/40,m=new THREE.ShaderMaterial({uniforms:{wind:{value:prng(2)?w:-w},cycle:{value:0},c1:{value:0},c2:{value:0},dt:{value:prng(1e3)}},vertexShader:"precision highp float;varying vec2 vUv;void main(){vUv=uv;gl_Position=vec4(position,1.);}",fragmentShader:"precision highp float;uniform sampler2D uScene;uniform float wind;uniform float dt;uniform float cycle;varying vec2 vUv;uniform vec3 c1,c2;float hash(float n){return fract(sin(n)*758.5453);}float noise(in vec3 x){vec3 p=floor(x);vec3 f=fract(x);float n=p.x+p.y*57.+p.z*800.;float res=mix(mix(mix(hash(n+0.),hash(n+1.),f.x),mix(hash(n+57.),hash(n+ 58.),f.x),f.y),mix(mix(hash(n+800.),hash(n+801.),f.x),mix(hash(n+857.),hash(n+858.),f.x),f.y),f.z);return res;}float fbm(vec3 p){float f=.5*noise(p);p*=1.39+cycle;for(float i=.25;i>.03;i/=2.){f+=i*noise(p);p*=2.02;}return f;}float borealCloud(vec3 p){p+=fbm(vec3(p.x,p.y,0.0)*0.5)*2.25;float a=smoothstep(.0,.9,fbm(p*2.)*2.2-1.1);return clamp(a,0.,1.);}void main(){float sp=dt*.1;vec4 color=vec4(mix(c1,c2,1.-vUv.y),1.);if(cycle>2.) color.g+=(borealCloud(vec3(vUv.x,vUv.y*.27,sp*.5))*clamp(2.*(vUv.y-(.5+.1*cos((vUv.x+sp)*6.))),0.,1.)); else color+=borealCloud(vec3(vUv.x+sp*wind,vUv.y*1.5,sp*wind*2.))*clamp((vUv.y-.5)*2.,0.,1.);gl_FragColor=color;}"}),bgplane=new THREE.Mesh(new THREE.PlaneGeometry(2,2),m);SC.add(bgplane);const ethpal=[16711680,16746240,16765696,14614282,10616586,720793,716799,1342965,5769983,12454655],ethcol=ethpal[prng(10)],c1s=[5942001,873670,1516381,331314],c2s=[16755200,6931446,15108792,3488657],pal=setBG(tokenId);function setBG(e){let r=[0,27,90,247,292,315,337,450],t=0;for(;e>=r[t];)t++;let o=FL(t/2),n=FL((t-1)/2),a=(e-r[t-1])/(r[t]-r[t-1]);return m.uniforms.c1.value=new TC(c1s[n]).lerp(new TC(c1s[o]),a),m.uniforms.c2.value=new TC(c2s[n]).lerp(new TC(c2s[o]),a),m.uniforms.cycle.value=o,o}const palettes=[[16777215,65484,10263708,13421772,16777215],[5263955,16777215,8350828,9144713,10658713],[46079,16514816,6984879,7517135,9356237],[10481022,15728257,5073487,7647099,11989670],[16724818,13225378,12605785,13343888,14393247],[16769858,16774072,9935176,12565583,13223227],[13191836,15007150,13071576,16692464,15119332]];var citypal=palettes[palnumber],numbers=[31599,9362,29671,29391,23497,31183,31215,29257,31727,31695],pats=new Array,numpat=1+5*prng(4);for(let e=0;e<numpat;e++)pats.push(randPat(6,6+3*prng(4),prng(3)));function randPat(e,r,t=1){let o=new Array(r);for(let t=0;t<r;t++)o[t]=new Array(e);if(t)for(let t=0;t<r;t+=3)for(let r=0;r<e;r++){o[t][r]=1;let e=r%2||prng(4)?0:1;o[t+1][r]=o[t+2][r]=e}else for(let t=0;t<r;t++)for(let r=0;r<e;r+=3){o[t][r]=1;let e=t%2&&!prng(2)?1:0;o[t][r+1]=o[t][r+2]=e}return o}var rPat=()=>pats[prng(pats.length)];const MLM=(e=0)=>new THREE.MeshLambertMaterial({color:0,emissive:0==e?0:16777215,emissiveIntensity:e});var M={walls:MLM(),dirt:MLM(),ground:MLM(),water:MLM(.02),core:MLM(.8),sidewalk:MLM(),vehicle:MLM(),rail:MLM(),panel:MLM(.4),neon:MLM(2),neon1:MLM(2),neon2:MLM(2),tree1:MLM(),tree2:MLM(),tree3:MLM(.15),cesped:MLM()};M.water.map=tex1;const COL=(e,r,t)=>new TC("hsl("+e+", "+r+"%,"+t+"%)");randColors();var rainbowRocks=!1;function randColors(){for(const e in M)M[e].color.set(prng(16777215));M.walls.color.set(COL(prand(50,360)+130,prand(20,60),prand(50,70))),M.core.color.set(COL(prand(10,100),prand(20,50),prand(50,95)));let e=prng(330);M.sidewalk.color.set(COL(e+20,15,60)),M.ground.color.set(COL(e,5,50)),e=prng(360),M.vehicle.color.set(COL(e,100,65)),M.rail.color.set(COL(e,100,80)),M.dirt.color.set(COL(prand(30,100),prand(30,80),80)),M.water.color.set(COL(prand(140,210),100,50)),M.tree1.color.set(COL(prng(60),100,40)),M.tree2.color.set(COL(prand(60,165),100,prand(40,70))),M.tree3.color.set(COL(320,100,60)),M.cesped.color.set(COL(prand(75,165),100,prand(40,70))),M.neon.color.set(COL(0,0,100));let r=prand(10,200);M.neon.emissive.set(COL(r,100,FL(50+10*Math.cos(3*r*PI/180)))),M.neon1.emissive.set(COL(prng(360),100,prand(30,60))),M.neon2.emissive.set(COL(prng(360),100,prand(30,60))),M.core.emissive.set(COL(prand(30,210),90,prand(80,100)))}palette&&(rainbowRocks=5==palnumber,M.walls.color.set(citypal[0]),M.core.color.set(citypal[1]),M.ground.color.set(citypal[2]),M.sidewalk.color.set(citypal[3]),M.dirt.color.set(citypal[4]));var post=new FX(R);const C=new THREE.OrthographicCamera(width/-2,width/2,height/2,height/-2,1e-4,1e4);var scale=350;C.zoom=Math.min(width,height)/scale,C.updateProjectionMatrix();var H,eth,RX=PI/6,RY=.75*PI,rotX=RX,rotY=RY,G=new THREE.Group,city=new THREE.Group,grid=2.15,gx=96,gz=96,cx=gx*grid*.5,cz=gz*grid*.5,border=6,minrec=15,gotHeli=!1,rtrees=prng(2),fam=prng(6),randFam=prng(2),lights=[],trains=[],roads=new Array(17);