0x1808bbab…0434sent to0x0a1bbd57…3676·#16,601,317·view on Etherscan
r(let ec=0;ec<800*(targetSzW/targetSz)*.30000000000000004;ec++){let em=eh-20,ed=targetSzW+eh+20,eu=_random(em,ed),ef=_random(targetSz-r)+r,ey=ef+10+1e3,eg=map(ef,0,targetSz,0,mapW*$),e8=map(ef,0,targetSz,mapW-1,mapW*a),e3=constrain(floor(map(eu,em,ed,mapTrim+eg,e8-mapTrim)),0,mapW-1),ex=constrain(floor(map(ef,r,targetSz,floor(.7*mapH),mapH-1-mapTrim)),0,mapH-1),eS=hMap[e3][ex];eu+=cos(eS)*warpSz,ef+=sin(eS)*warpSz,ef+=map(eS,0,2*TAU,0,1)*terrainHt*1.5;let e1=_normalize(hMapNormal(e3,ex)),e2=_dot(e1,lgt);if(0!=eS){let e7=_random(4,4),eb=_createV(1,0);eb=_rotate(eb,2*noise(eu*noiseScale,ef*noiseScale,.1*_random(TAU))*TAU,0,0),eb=_scalarMult(eb,_random(e7));let ez=constrain(1.1*norm(e2,-1,1),0,1),e4=noise(e3*noiseScale*4+1e3,ex*noiseScale*4+1e3);if(.5>_random(1)){let e5=new SketchyEllipse(eu+eb.x,ef+eb.y,e7,e7,1,!1);e5.z=ey,e5.setWeight(2.5),e5.setMaxV(.3),e5.setAcc(.01),e5.setDensity(1),e5.setWobble(.1),e5.setAngle(_random(TAU));let e6=paletteColor(lerp(e4,ez,constrain(2*abs(ez-.5)+.1*_random(-1,1),0,1)));e5.setColor(color(red(e6),green(e6),blue(e6),64)),shapes.push(e5)}let eW=noise(e3*noiseScale*2+143283,ex*noiseScale*2+12739);if(eS<1.5*PI&&ex>4&&abs(e1.x)<3*plantThresh){let eP=noise(e3*noiseScale*9+1009,ex*noiseScale*9+1239);if(_random(1)<.2*map(abs(e3-mapW/2),0,mapW/2,.5,1)){if(eW>.15){if(_random(1)<.1*map(abs(e3-mapW/2),0,mapW/2,.8,1)&&e3>12&&e3<mapH-1-12&&ex>floor(.7*mapH)+2){let eC=-PI/2+_random(-1,1)*PI/8,eM=map(eP,0,1,5,12)*map(ef,l,targetSz,2,2.5);addCactus(eu+cos(eC)*eM*2,ef+sin(eC)*eM*2,eu+cos(eC)*eM*2,ef+sin(eC)*eM*2,ey-10,ez,eM,round(_random(1,3)),eC)}}else if(10.5>_random(1)&&e3>11&&e3<mapH-1-11)for(let ew=0;ew<2;ew++)addFlowerClump(eu+_random(-1,1)+.1,ef+_random(-1,1)+.1,ey-5,ez,map(eP,0,1,6,15)),addBush(eu,ef,ey-4,ez,map(eP,0,1,10,20)*map(ef,l,targetSz,4,8),e3,ex);addBush(eu,ef,ey-10,ez,map(eP,0,1,10,100)*map(ef,l,targetSz,4,8),e3,ex)}let eA=map(eP,0,1,2,3),eF=map(eP,0,1,1,2);for(let eV=-eA;eV<=eA;eV++)for(let ek=-eF;ek<=eF;ek++){let eH=floor(e3+eV+cos(lightAngle)*eA*.5),eD=floor(ex+ek+sin(lightAngle)*eF*.5);eH<0||eH>=mapW||eD<0||eD>=mapH||(lMap[eH][eD]=lerp(lMap[eH][eD],-1,.7))}}}}for(let ev=0;ev<1500.0000000000002;ev++){let eT=-eh-20,eq=targetSzW+eh+20,eE=_random(eT,eq),eN=_random(targetSz-r)+r,eL=eN+1e3,eB=map(eN,0,targetSz,0,mapW*$),eX=map(eN,0,targetSz,mapW-1,mapW*a),eY=constrain(floor(map(eE,eT,eq,mapTrim+eB,eX-mapTrim)),0,mapW-1),eI=constrain(floor(map(eN,r,targetSz,floor(.7*mapH),mapH-1-mapTrim)),0,mapH-1),eR=hMap[eY][eI];eE+=cos(eR)*warpSz,eN+=sin(eR)*warpSz,eN+=map(eR,0,2*TAU,0,1)*terrainHt*1.5;let ej=_normalize(hMapNormal(eY,eI)),eG=lMap[eY][eI],eQ=_magSq(hMapNormal2(eY,eI)),eU=max(1,floor(map(pow(abs(eN-eL+1e3),1),0,pow(abs(terrainHt)+abs(warpSz),1),1,_random(1,3))));for(let eJ=0;eJ<eU;eJ++){let eK=constrain(map(eQ,1e-4,8e-4,24,15),15,24),eO=new SketchyEllipse(eE,eN,5,eK*_random(.9,1.1),_random(1,2));eO.z=eL,eO.setWeight(3.5),eO.setMaxV(1),eO.setAcc(.02),eO.setDensity(2.5),eO.setWobble(.2),eO.setAngle(map(ej.x,1,-1,0,PI/2)+PI/4+(2*round(_random(1))-1)*PI+map(noise(eE*noiseScale,eN*noiseScale),0,1,-1,1)*PI/8*0);for(let eZ=0;eZ<eO.points.length;eZ++){let e9=eO.points[eZ],te=(2*noise(e9.x*noiseScale*4+100,e9.y*noiseScale*4+100)-1)*2*TAU;e9.x+=2*cos(te),e9.y+=2*sin(te)}let tt=1*norm(eG,-1,1),t$=noise(eY*noiseScale*4+1e3,eI*noiseScale*4+1e3),ta=paletteColor(lerp(t$,tt,map(abs(tt-.5),-.5,.5,.5,1)));eO.setColor(color(red(ta),green(ta),blue(ta),_random(64,100))),shapes.push(eO)}}for(let t_=0;t_<5e3;t_++){let ts=targetSzW+20,tl=_random(-20,ts),tr=_random(targetSz),tn=-1e4+tr,to=constrain(floor(map(tl,-20,ts,mapTrim,mapW-1-mapTrim)),0,mapW-1),ti=constrain(floor(map(tr,0,targetSz,mapTrim,mapH-1-mapTrim)),0,mapH-1);noise(to*noiseScale*3,ti*noiseScale*3);let tp=new SketchyEllipse(tl,tr,6,21*_random(.9,1.2),_random(1,1.5));tp.z=tn,tp.setWeight(3),tp.setMaxV(1),tp.setAcc(.02),tp.setDensity(2.5),tp.setWobble(.2);for(let t0=0;t0<tp.points.length;t0++){let th=tp.points[t0],tc=(2*noise(th.x*noiseScale*4+100,th.y*noiseScale*4+100)-1)*2*TAU;th.x+=2*cos(tc),th.y+=2*sin(tc)}let tm=noise(to*noiseScale*2-132,ti*noiseScale*2-132)*TAU,td=noise(to*noiseScale*5+0*cos(tm),ti*noiseScale*5+0*sin(tm)),tu,tf,ty=to-skyCenterX,tg=ti-skyCenterY,t8=sqrt(sq(ty)+sq(tg));if(ti<mapH*_){tu=skyPaletteColor(constrain(pow(map(t8,0,mapW/1.2,1,0),3)+.2*_random(-1,1),0,1));let t3=_rotate(_createV(1,0),atan2(tg,ty)-PI,0,0),tx=_rotate(_createV(1,0),td*PI,0,0),tS=map(t8,0,mapW/2,0,1),t1=_createV(lerp(t3.x,tx.x,tS),lerp(t3.y,tx.y,tS));tf=atan2(t1.y,t1.x)}else{let t2=ti-(mapH*_+(mapH*_-skyCenterY)),t7=sqrt(sq(to-skyCenterX)+sq(t2));tu=oceanPaletteColor(constrain(lerp(pow(map(t7,0,mapW/1.2,1,0),2),map(ti,.4*mapH,mapH,.8,0),.2)+.1*_random(-1,1),0,1)),tf=map(td,0,1,-1,1)*PI/4+PI/2+PI/8}let tb=norm(tf,0,TAU);tb=round(100*tb)/100,tb*=TAU,tf=lerp(tf,tb,.3),tp.setAngle(tf),tp.setColor(color(red(tu),green(tu),blue(tu),64)),shapes.push(tp)}shapes.sort(function(e,t){return-(e.z-t.z)})}let renderingIndex=0;function draw(){if(saving)++saveTime>80&&(hMap=null,shapes=null,window.location.reload(),noLoop());else{push(),translate(.5*width*(1-scl),.5*height*(1-scl)),scale(scl*sizeAdj,scl*sizeAdj),translate(0,-minY+(targetSz-(maxY-minY))/2),translate(-minX+(targetSzW-(maxX-minX))/2,0);for(let e=0;e<1e3;e++)if("done"==shapes[shapes.length-1].update()&&(renderingIndex++,shapes.pop(),0==shapes.length)){saveMode?(doDownload=!0,saving=!0):noLoop();break}pop(),doDownload&&(saveCanvas(canv,tokenData.hash,"png"),doDownload=!1)}}function addFlowerClump(e,t,$,a,_){let s=floor(_random(2,3));for(let l=0;l<s;l++){let r=_rotate(_createV(_random(5),0),_random(TAU),0,0);addFlower(e+r.x,t+.5*r.y,$,a,_,l)}}function addFlower(e,t,$,a,_,s){let l=_createV(e,t),r=sNoise.noise3D(e*noiseScale,t*noiseScale,2*s),n=_rotate(_createV(0,-5),r*PI/6,0,0),o=2*floor(_random(2,_));for(let i=0;i<o;i++){let p=new SketchyWeightedLine(l.x,l.y,l.x+1.5*n.x,l.y+1.5*n.y,.4,.1);p.setWeight(1),p.setMaxV(.1),p.setAcc(.01),p.setDensity(1),p.setWobble(.05),p.z=$;let h=treePaletteColor(map(i,0,o-1,0,.4));if(p.setColor(color(red(h),green(h),blue(h),64)),shapes.push(p),_random(1)<map(i,0,o-1,1,0)){let c=_rotate(n,PI/2,0,0),m=.8*_random(4,6),d=new SketchyEllipse(l.x+.5*c.x,l.y+.5*c.y,m*map(i,0,o-1,2,1),.8*m,.5,!1);d.z=$+.001,d.setWeight(2.5),d.setMaxV(.2),d.setAcc(.02),d.setDensity(2),d.setWobble(.1),d.setAngle(_random(TAU)),h=treePaletteColor(_random(.5)),d.setColor(color(red(h),green(h),blue(h),64)),shapes.push(d)}l=_add(l,n);let u=2*s+6*i;n=_rotate(n,-(r=sNoise.noise3D(e*noiseScale,t*noiseScale,u))*PI/4,0,0)}let f=floor(_random(5,7)),y=_random(TAU),g=a;for(let x=0;x<f;x++){if(.2>_random(1))continue;let S=1.2*_random(4,6),b=map(x,0,f,0,TAU)+_random(-1,1)*(TAU/f)*.4+y,z=_rotate(_createV(.8*S,0),b,0,0),W=new SketchyEllipse(l.x+.5*n.x+z.x,l.y+.5*n.y+z.y,.5*S,S,.5,!1);W.z=$+.001,W.setWeight(2.5),W.setMaxV(.2),W.setAcc(.02),W.setDensity(2),W.setWobble(.1),W.setAngle(b+PI/2);let P=petalPaletteColor(constrain(g+.2*_random(-1,1),0,1));W.setColor(color(red(P),green(P),blue(P),64)),shapes.push(W);let C=new SketchyEllipse(l.x+.5*n.x+z.x,l.y+.5*n.y+z.y,.505*S,1.01*S,.5,!1);C.z=$+1e-4,C.setWeight(2.5),C.setMaxV(.2),C.setAcc(.02),C.setDensity(2),C.setWobble(.1),C.setAngle(b+PI/2),P=petalPaletteColor(0),C.setColor(color(red(P),green(P),blue(P),64)),shapes.push(C)}let M=.8*_random(4,6),w=new SketchyEllipse(l.x+.5*n.x,l.y+.5*n.y,.6*M,M,.5,!1);w.z=$+.002,w.setWeight(2.5),w.setMaxV(.2),w.setAcc(.02),w.setDensity(2),w.setWobble(.1),w.setAngle(_random(TAU));let A=treePaletteColor(0);w.setColor(color(red(A),green(A),blue(A),64)),shapes.push(w)}function addTree(e,t,$,a,_){let s=new SketchyWeightedLine(e+2*_random(-1,1),t+2*_random(-1,1),e+2*_random(-1,1),t-_+2*_random(-1,1),map(_,23,160,.5,4),.15);s.setWeight(1.5),s.setMaxV(.25),s.setAcc(.02),s.setDensity(1),s.setWobble(.3),s.setAngle(0),s.z=$;let l=treePaletteColor(_random(map(a,0,1,0,.1)));s.setColor(color(red(l),green(l),blue(l),64)),shapes.push(s);let r,n=round(_random(12,15));for(let o=0;o<n;o++){let i=_random(.51,1),p=lerp(t,t-_,i);r=_createV(0,_random(-30)*constrain(map(i,.51,1,1.1,.3),.3,.8)*map(o,0,n,1,.5)),r=_rotate(r,_random(.5,1)*(.5>_random(1)?-1:1)*map(i,.51,1,PI/2,PI/3),0,0),r.y*=_random(1,map(i,.51,1,1,1));let h=new SketchyWeightedLine(e,p,e+r.x,p+r.y,.25,.1);h.setWeight(1.5),h.setMaxV(.3),h.setAcc(.02),h.setDensity(1),h.setWobble(.2),h.z=$;let c=treePaletteColor(0);h.setColor(color(red(c),green(c),blue(c),_random(64,128))),shapes.push(h);let m,d=round(_random(5,10));for(let u=0;u<d;u++){let f=_random(2,3)*map(u,0,d,1.5,1);m=_createV(_random(1.8*f),0),m=_rotate(m,_random(TAU),0,0);let y=new SketchyEllipse(e+m.x+r.x,p+r.y+m.y,4,1*f,_random(1,1.1),!1);y.z=$+map(u,0,d-1,-1,1),y.setWeight(2.5),y.setMaxV(1),y.setAcc(.02),y.setDensity(2),y.setWobble(.2),y.setAngle(map(noise(y.x*noiseScale*3,y.y*noiseScale*3),0,1,-1,1)*PI/6);let g=_normalize(_createV(-(.3*r.x)-m.x,.3*r.y+m.y+6)),x=pow(norm(_dot(g,lgt),-1,1),map(a,0,1,8,1))+map(a,0,1,0,.4);x=constrain(pow(x,2)+.2*_random(-1,1),0,1);let S=map(i,.51,1,.5,2.5),b=treePaletteColor(pow(x*S*1,1));y.setColor(color(red(b),green(b),blue(b),64)),shapes.push(y)}}}function addCactus(e,t,$,a,_,s,l,r,n){let o=l,i=round(_random(2,3));for(let p=0;p<i;p++){let h=o*constrain(map(p,0,max(1,i-1),.9,1)+.1*_random(-1),0,1),c=_rotate(_createV(map(p,0,max(1,i-1),0,.1)*h/2,0),_random(TAU),0,0),m,d;if(-1==r){(m=new SketchyEllipse($+c.x,a+c.y,h,h,.25,!1)).z=_+1e-7*p,m.setWobble(.1),m.setWeight(.8);let u=_normalize(_createV($+c.x-e,a+c.y-t)),f=_normalize(_createV(c.x,c.y)),y=1*norm(_dot(u,lgt),-1,1),g=1*norm(_dot(f,lgt),-1,1);d=pow(lerp(y,g,.5),2);let x=cactusFruitPaletteColor(d);m.setColor(color(red(x),green(x),blue(x),64))}else{(m=new SketchyEllipse($+c.x,a+c.y,h,h*_random(.8,1)*.9,.25,!1)).z=_-1e-4*p,m.setWobble(.2),m.setWeight(.8);let S=_normalize(_createV($+c.x-e,a+c.y-t)),b=_normalize(_createV(c.x,c.y)),z=1*norm(_dot(S,lgt),-1,1),W=1*norm(_dot(b,lgt),-1,1);d=constrain(pow(lerp(z,W,.5),2)+.3*_random(-1,1),0,1);let P=cactusPaletteColor(d);m.setColor(color(red(P),green(P),blue(P),64))}m.setWeight(1.5),m.setMaxV(1),m.setAcc(.02),m.setDensity(2),m.setAngle(n),shapes.push(m);let C=floor(.04*sq(o));o<3&&(C=0);for(let M=0;M<C;M++){let w=_rotate(_createV(sqrt(_random(1)),0),_random(TAU),0,0),A=_rotate(_setMag(_createV(w.x,w.y),_random(3,5)),n+PI/2+_random(-1,1)*PI/8,0,0);w.x*=.55*h*.95,w.y*=.95*h,w=_rotate(w,n+PI/2,0,0);let F=new SketchyWeightedLine($+w.x,a+w.y,$+w.x+A.x,a+w.y+A.y,1,.2);F.setWeight(1.5),F.setMaxV(.25),F.setAcc(.01),F.setDensity(1),F.setWobble(.05),F.z=_+.001;let V,k=cactusPaletteColor((V=d<.5?.8:.2)+.1*_random(-1,1));F.setColor(color(red(k),green(k),blue(k),64)),shapes.push(F)}}if(r>0){let H=_random([1,1,2]);for(let D=0;D<H;D++){let v=-PI/2+_random(-1,1)*PI/2.5,T=l*_random(.8,.9),q=$+cos(v)*(o+T)*.9,E=a+sin(v)*(o+T)*.9;addCactus(e,t,q,E,_,s,T,r-1,v)}}else if(0==r){let N=_random([0,1,2]);for(let L=0;L<N;L++){let B=-PI/2+_random(-1,1)*PI/3,X=max(.5*l,3),Y=$+cos(B)*(o+X)*.9,I=a+sin(B)*(o+X)*.9;addCactus(e,t,Y,I,_,s,X,r-1,B)}}}function addBush(e,t,$,a,_,s,l){let r,n=round(_random(4,5)*map(_,10,80,1,2)*max(1,.01*_));for(let o=0;o<n;o++){r=_createV(0,-_random(.1*_)),(r=_rotate(r,_random(-1,1)*PI/2,0,0)).y=-abs(r.y);let i=_normalize(hMapNormal(s,o)),p,h=round(.3*_random(10,20));for(let c=0;c<h;c++){let m=_random(2,3)*map(c,0,h,1.5,1);p=_createV(_random(1.5*m),0),(p=_rotate(p,_random(TAU),0,0)).y=-abs(p.y);let d=new SketchyEllipse(e+p.x+r.x,t+p.y+r.y,2*m,4,_random(1,1.1),!1);d.z=$,d.setWeight(1.5),d.setMaxV(1),d.setAcc(.02),d.setDensity(2),d.setWobble(.2);let u=_normalize(_createV(-(.3*r.x)-p.x,.3*r.y+p.y+6)),f=pow(norm(_dot(u,lgt),-1,1),map(a,0,1,8,1));f+=.4*_random(-1,1),f=constrain(f,0,1);let y=bushPaletteColor(constrain(f,0,1));d.setColor(color(red(y),green(y),blue(y),64)),d.setAngle(map(i.x,1,-1,0,PI/2)+PI/4+(2*round(_random(1))-1)*PI+PI/2+map(u.x,-1,1,1,-1)*_random(PI/4,PI/8)),shapes.push(d)}}}function _random(e,t){return void 0!=t?R.random_num(e,t):Array.isArray(e)?(0,e[floor(R.random_num(0,e.length))]):R.random_num(0,e)}