0xecc60439…2cdbsent to0xa7d8d9ef…d270·#13,200,029·view on Etherscan
es:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},tall:(t,e,i,s,h,o)=>{var n=1-Math.pow(h/8,2),h=.95*n/(i+s);return{splitWidthChance:h*i,splitDepthChance:h*s,splitRepeatChance:.05*n,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}},chaos:(t,e,i,s,h,o)=>({splitWidthChance:.49,splitDepthChance:.49,splitRepeatChance:0,splitChoices:[.1,.2,.3,.4,.5,.6,.7,.8,.9],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)}),peteRepeat:(t,e,i,s,h,o)=>({splitWidthChance:.3,splitDepthChance:.3,splitRepeatChance:.3,splitChoices:[.25,.5,.75],numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/(k+o),6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/(k+o),6))),1)})},blockSplitChances:{traditional:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}),agridustrial:(t,e,i,s,h)=>({splitWidthChance:.2,splitDepthChance:.2,splitRepeatChance:.6,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}),monolith:(t,e,i,s,h)=>({splitWidthChance:0,splitDepthChance:0,splitRepeatChance:0,splitWhere:0,numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}),biggerInCenter:(t,e,i,s,h)=>{t=J(t,e,i,s),e=Math.min(l(t,0,n/3,0,1),1),t=(5<h?.85*e:+e)/(i+s);return{splitWidthChance:t*i,splitDepthChance:t*s,splitRepeatChance:5<h?.05*e:0,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}},smallerInCenter:(t,e,i,s,h)=>{t=J(t,e,i,s,!1),e=Math.min(Math.max(l(t,0,n/2,2,0),0),1),t=(5<h?.95*e:+e)/(i+s);return{splitWidthChance:t*i,splitDepthChance:t*s,splitRepeatChance:5<h?.05*e:0,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}},short:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}),tall:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}),chaos:(t,e,i,s,h)=>{h=3<h?.85:1;return{splitWidthChance:h/2,splitDepthChance:h/2,splitRepeatChance:0,splitWhere:L(.1,.9),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)}},peteRepeat:(t,e,i,s,h)=>({splitWidthChance:.3,splitDepthChance:.3,splitRepeatChance:.3,splitWhere:L(.2,.8),numRepetitionsX:Math.max(Math.floor(L(1,Math.min(i/k,6))),1),numRepetitionsZ:Math.max(Math.floor(L(1,Math.min(s/k,6))),1)})},buildingSplitChances:{traditional:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),agridustrial:(t,e,i,s,h)=>({splitWidthChance:.8,splitDepthChance:.05,splitRepeatChance:.1,splitWhere:.2,createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),monolith:(t,e,i,s,h)=>({splitWidthChance:0===h?0:.2,splitDepthChance:0===h?0:.2,splitRepeatChance:0===h?0:.05,splitWhere:L(.4,.6),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),biggerInCenter:(t,e,i,s,h)=>{e=J(t,e,i,s,!1);return{splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.05,splitWhere:L(.2,.8),createLevelChance:l(e,0,n/2,1.2,0),numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}},smallerInCenter:(t,e,i,s,h)=>{e=J(t,e,i,s,!1);return{splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.05,splitWhere:L(.2,.8),createLevelChance:l(e,0,n/3,0,1.2),numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}},short:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),tall:(t,e,i,s,h)=>({splitWidthChance:.33,splitDepthChance:.33,splitRepeatChance:.1,splitWhere:L(.2,.8),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),chaos:(t,e,i,s,h)=>({splitWidthChance:.4,splitDepthChance:.4,splitRepeatChance:0,splitWhere:L(.2,.8),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1}),peteRepeat:(t,e,i,s,h)=>({splitWidthChance:.3,splitDepthChance:.3,splitRepeatChance:.3,splitWhere:L(.2,.8),createLevelChance:1,numRepetitionsX:Math.floor(L(1,Math.min(i/k,6)))||1,numRepetitionsZ:Math.floor(L(1,Math.min(s/k,6)))||1})},buildingHeightGenerator:{traditional:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*2,agridustrial:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*2,monolith:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*2,biggerInCenter:(t,e,i,s,h,o)=>{i=J(t,i,s,h,!1);return l(i,0,Math.sqrt(n*n+n*n),3,0)*Math.min(Math.min(s,h),n/40)},smallerInCenter:(t,e,i,s,h,o)=>{i=J(t,i,s,h,!1);return l(i,0,Math.sqrt(n*n+n*n),.5,3)*Math.min(Math.min(s,h),n/40)},short:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*1,tall:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*3.2,chaos:(t,e,i,s,h,o)=>L(L(.1,.3),L(1,1.4))*Math.min(Math.min(s,h),n/40)*L(1.5,3),peteRepeat:(t,e,i,s,h,o)=>L(.2,1)*Math.min(Math.min(s,h),n/40)*2}},this.attributes=this.initBiome()}initBiome(){const e={};var i=Object.keys(this.biomes);for(let t=0;t<i.length;t++){var s=i[t];e[s]=this.biomes[s][this.type]}return e}decideType(){this.type=I(11,this.typePercentages,Object.values(Q))}},et=new class{constructor(t,e,i,s){this.x=t-i/2,this.z=e-s/2,this.width=i,this.depth=s,this.weather,this.sun,this.create()}display(){this.sun=new q,this.weather=new V(this.x,60,this.z,this.width,this.depth),this.weather.decideWeather(),this.weather.initWeather(),this.weather.display();const t=new N(this.x,this.z,this.width,this.depth);t.display();var e=t.boxes;const i=new THREE.BufferGeometry,s=[],h=[],o=[];for(let t=0;t<5;++t){s.push(...this.geometries_[t].attributes.position.array);var n=s.length/3;h.push(...this.geometries_[t].attributes.normal.array);const u=[...this.geometries_[t].index.array];for(let t=0;t<u.length;++t)u[t]+=n-4;o.push(...u)}const a=new THREE.MeshPhongMaterial;i.setAttribute("instanceColor",new THREE.InstancedBufferAttribute(new Float32Array(G),3)),i.setAttribute("position",new THREE.Float32BufferAttribute(s,3)),i.setAttribute("normal",new THREE.Float32BufferAttribute(h,3)),i.setIndex(new THREE.BufferAttribute(new Uint32Array(o),1));const r=["attribute vec3 instanceColor;","varying vec3 vInstanceColor;","#include <common>"].join("\n"),l=["#include <begin_vertex>","\tvInstanceColor = instanceColor;"].join("\n"),p=["varying vec3 vInstanceColor;","#include <common>"].join("\n"),c=["vec4 diffuseColor = vec4( diffuse * vInstanceColor, opacity );"].join("\n");a.onBeforeCompile=function(t){t.vertexShader=t.vertexShader.replace("#include <common>",r).replace("#include <begin_vertex>",l),t.fragmentShader=t.fragmentShader.replace("#include <common>",p).replace("vec4 diffuseColor = vec4( diffuse, opacity );",c)};const d=new THREE.InstancedMesh(i,a,e.length);for(let t=0;t<e.length;t++){const m=new THREE.Matrix4,M=new THREE.Vector3;M.x=e[t].x,M.y=e[t].y,M.z=e[t].z;const w=new THREE.Vector3;w.x=e[t].width,w.y=e[t].height,w.z=e[t].depth,m.compose(M,new THREE.Quaternion,w),d.setMatrixAt(t,m)}y.add(d),d.receiveShadow=!0,d.castShadow=!0}step(t){this.weather.step(t)}create(){const t=new THREE.PlaneBufferGeometry(1,1);t.rotateY(Math.PI/2),t.translate(.5,0,0);const e=new THREE.PlaneBufferGeometry(1,1);e.rotateY(-Math.PI/2),e.translate(-.5,0,0);const i=new THREE.PlaneBufferGeometry(1,1);i.rotateX(-Math.PI/2),i.translate(0,.5,0);const s=new THREE.PlaneBufferGeometry(1,1);s.translate(0,0,.5);const h=new THREE.PlaneBufferGeometry(1,1);h.rotateY(Math.PI),h.translate(0,0,-.5),this.geometries_=[t,e,i,s,h]}}(0,0,n,n);et.display();const it=[Math.PI/8,Math.PI/6,Math.PI/4,Math.PI/3];c===n/4&&it.shift();const st=it[Math.floor(l(Rt(p[8]),0,1,0,it.length-1e-9))];let ht=st;o=[Math.PI/4,Math.PI/8,Math.PI/16,Math.PI/64,-Math.PI/4,-Math.PI/8,-Math.PI/16,-Math.PI/64];const ot=o[Math.floor(l(Rt(p[11]),0,1,0,o.length-1e-9))]+$;let nt=ot;function at(t){t=d+t/10;t<0||t>1.5*n||(d=t,wt(),rt())}function rt(){et.weather.fog&&(y.fog.density=a?.005:l(Math.pow(d,1/3),0,Math.pow(1.5*n,1/3),.025,.006))}window.addEventListener("resize",function(){i=window.innerWidth/window.innerHeight,u.aspect=i,m.aspect=i,wt(),u.updateProjectionMatrix(),m.updateProjectionMatrix(),B.setSize(window.innerWidth,window.innerHeight)},!1),window.addEventListener("wheel",t=>{at(t.deltaY)});let lt=0,pt=0,ct=!1,dt=!0;const ut=[];let mt;function Mt(e){return t=>{e&&(t.pointerId=e),function(e){for(let t=0;t<ut.length;t++)if(ut[t].pointerId==e.pointerId){ut.splice(t,1);break}}(t),ut.length<2&&(mt=-1),ct&&(lt=0,pt=0,ct=!1)}}function wt(){m.left=-d*i,m.right=d*i,m.top=d,m.bottom=-d,m.updateProjectionMatrix()}window.addEventListener("pointerdown",t=>{t.button||(ut.push(t),lt=t.offsetX,pt=t.offsetY,ct=!0)}),window.addEventListener("pointermove",e=>{if(ct){for(let t=0;t<ut.length;t++)if(e.pointerId==ut[t].pointerId){ut[t]=e;break}var t;2===ut.length?(t=Math.abs(ut[0].clientX-ut[1].clientX),0<mt&&at(mt-t),mt=t):1===ut.length&&((t=ht-(pt-e.offsetY)/300)<Math.PI/2&&t>-Math.PI/2&&(ht=t),nt-=(lt-e.offsetX)/300,lt=e.offsetX,pt=e.offsetY)}}),window.addEventListener("pointerup",Mt()),window.addEventListener("pointercancel",Mt()),window.addEventListener("pointerout",Mt()),window.addEventListener("pointerleave",Mt()),window.addEventListener("contextmenu",Mt(1)),window.addEventListener("keydown",function(t){switch(t.key){case"p":dt=!dt;break;case"r":d=c,wt(),nt=ot,ht=st,rt();break;case"c":M=a?u:m,a=!a,y.camera=M,et.weather.display(),et.weather.rain?.updateSize(),rt();break;case"z":ht=Math.PI/4,nt=Math.PI/4+$,d=a?+n:1.4*n,rt(),wt();break;case"t":A?B.setClearColor(X,1):B.setClearColor(0,0),A=!A;break;case"1":B.setPixelRatio(.25);break;case"2":B.setPixelRatio(.75);break;case"3":B.setPixelRatio(.9);break;case"4":B.setPixelRatio(1)}});let ft=new THREE.Clock;function Rt(t){return l(t,0,255,0,1)}requestAnimationFrame(function t(){var e=ft.getDelta(),i=a?h:d;dt&&(nt+=e*(2*Math.PI/240)),et.step(e),M.position.x=Math.cos(nt)*Math.cos(ht)*i,M.position.y=Math.sin(ht)*i,M.position.z=Math.sin(nt)