0x24fafa02…b330sent to0x13aae6f9…9533·#13,768,689·view on Etherscan
// WORLDS - DECEMBER 8, 2021 - Kenny Vaden (c) License: CC-BY-NC-SA
p5.disableFriendlyErrors=true;
class Random {
constructor() {
this.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;
var 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;
};
};
this.prngA = new sfc32(tokenData.hash.substr(2,32));
this.prngB = new sfc32(tokenData.hash.substr(34,32));
for (let i = 0; i < 1e6; i += 2) { this.prngA(); this.prngB(); }
}
rnd_dec() {
this.useA = !this.useA;
return this.useA ? this.prngA() : this.prngB();
}
rnd_num(a,b) { return a+(b-a)*this.rnd_dec(); }
rnd_int(a,b) { return Math.floor(this.rnd_num(a,b+1)); }
randVNoRep (numm) {
for (var arr=[],i=0;i<numm;i++) { arr[i]=i+1; }
var tm,cr,tp=arr.length;
if (tp) while(--tp) { cr=this.rnd_int(0,tp); tm=arr[cr]; arr[cr]=arr[tp]; arr[tp]=tm; }
return arr;
}
}
function mk2DArr(c,r) {
let arr=new Array(c);
for (let i=0; i<arr.length; i++) { arr[i]=new Array(r); }
return arr;
}
function hxtrgb(hx) {
let hxx=hx.replace('#',''),bgi=parseInt(hxx,16);
return( [(bgi>>16)&255,(bgi>>8)&255,bgi&255] );
}
function rgbthx (rgb) {
let hx="#"+hex(rgb[0],2)+hex(rgb[1],2)+hex(rgb[2],2); return (hx);
}
function SplineR (pv,np) {
let ip = new Array(2*pv.length);
for (let i=0;i<pv.length;i++) { let a=i*2;ip[a]=i+1;let b=a+1;ip[b]=pv[i]; }
let gg=getCurvePoints(ip),gk=new Array(0.5*gg.length-1);
for (let i=0; i < gk.length; i++) { gk[i] = gg[(2*i+1)]; }
let iw = Math.floor(gk.length / np);
let outpt = new Array(np); for (let i=0; i < np; i++) { outpt[i] = gk[(i*iw)]; }
outpt[np] = pv[pv.length-1]; outpt[0] = pv[0]; return outpt;
// Epistemex (c) 2013-2014 License: MIT
function getCurvePoints(points,tension,numOfSeg,close) {
'use strict'; tension=(typeof tension==='number')?tension:0.75;
numOfSeg = numOfSeg?numOfSeg:250;
let pts,l=points.length,rPos=0,rLen=(l-2)*numOfSeg+2+(close?2*numOfSeg:0);
let rs=new Float32Array(rLen),cache=new Float32Array((numOfSeg+2)*4),cachePtr=4;
pts=points.slice(0);
if (close) { pts.unshift(points[l-1]); pts.unshift(points[l-2]); pts.push(points[0],points[1]); }
else {pts.unshift(points[1]); pts.unshift(points[0]); pts.push(points[l-2],points[l-1]); }
cache[0]=1;
for(let i=0;i<numOfSeg;i++) {
let st=i/numOfSeg,st2=st*st,st3=st2*st,st23=st3*2,st32=st2*3;
cache[cachePtr++]=st23-st32+1; cache[cachePtr++]=st32-st23;
cache[cachePtr++]=st3-2*st2+st; cache[cachePtr++]=st3-st2;
}
cache[++cachePtr]=1; parse(pts,cache,l);
if (close) {
pts=[];pts.push(points[l-4],points[l-3],points[l-2],points[l-1]);
pts.push(points[0],points[1],points[2],points[3]);
parse(pts,cache,4);
}
function parse(pts,cache,l) {
for (let j=2;j<l;j+=2) {
let pt1=pts[j],pt2=pts[j+1],pt3=pts[j+2],pt4=pts[j+3],
t1x=(pt3-pts[j-2])*tension,t1y=(pt4-pts[j-1])*tension,
t2x=(pts[j+4]-pt1)*tension,t2y=(pts[j+5]-pt2)*tension;
for (let t=0;t<numOfSeg;t++){
let c=t<<2,c1=cache[c],c2=cache[c+1],c3=cache[c+2],c4=cache[c+3];
rs[rPos++]=c1*pt1+c2*pt3+c3*t1x+c4*t2x;
rs[rPos++]=c1*pt2+c2*pt4+c3*t1y+c4*t2y;
}
}
}
l=close?0:points.length-2,rs[rPos++]=points[l],rs[rPos]=points[l+1];
return rs;
}
}
function zspline(fcz,nc,macro) {
let cl=Array(nc*(fcz.length-1));
for (let i=0;i<fcz.length-1;i++) {
for (let j=0;j<nc+1;j++) {
let awt=(j+1)/nc; if (macro===1) { awt=1-((j+1)/nc); }
let ak=hxtrgb(fcz[i]),bk=hxtrgb(fcz[i+1]),lst=Array(3);
for (let k=0;k<3;k++) { lst[k]=Math.round(ak[k]*awt+bk[k]*(1-awt)); }
cl[(i*nc+j)]=rgbthx(lst);
}
}
cl[0]=fcz[0]; cl[cl.length-1]=fcz[fcz.length-1];
let kl=new Array(nc); for (let j=0;j<nc;j++) { kl[j]=cl[j*(fcz.length-1)];}
kl[0]=cl[0]; kl[kl.length-1]=cl[cl.length-1];
return kl;
}
function HSM (Mtx,cols,rows,Nits) {
for (let k=0;k<Nits;k++) {
for (let j=0;j<rows;j++) {
for (let g=1;g<cols;g++) { Mtx[g][j]=Mtx[g-1][j]*.3 + Mtx[g][j]*.7; }
for (let i=0;i<(cols-1);i++) { Mtx[i][j]=Mtx[i+1][j]*.3+Mtx[i][j]*.7; }
}
}
return Mtx;
}
function VSM (Mtx,cols,rows,Nits) {
for (let k=0;k<Nits;k++) {
for (let i=0;i<cols;i++) {
for (let g=1;g<rows;g++) { Mtx[i][g]=Mtx[i][g-1]*.3+Mtx[i][g]*.7; }
for (let j=0;j<rows-1;j++) { Mtx[i][j]=Mtx[i][j+1]*.3+Mtx[i][j]*.7; }
}
}
return Mtx;
}
function getCol(matrix,col) {
let kll=[]; for (let i=0;i<matrix.length;i++) { kll.push(matrix[col][i]); }
return kll;
}
let R,SQ;
R = new Random();
function precalcs () {
let SQB=[],KLR=[],STW=[],RTS=[],XV=[],YV=[];
let randC=R.rnd_int(1,100);
let ftx=R.rnd_num(.4,.6), bdraw=R.rnd_int(60,90), klmt=R.rnd_int(7,20);
let fcz=[],bgc=0,lsc=0,rs=0,spd=0,xr=0,yr=0,ncirc=0,nsq=0;
if (randC===1) { // GHOST
fcz=[rgbthx(color(240)),rgbthx(color(250)),rgbthx(color(255))];
bgc="#d50909",ccr="#000000",ftx=1,klmt=0,bdraw=1;
}
if (randC===2) { // SAV
fcz=["#4555a3","#3351b3","#286d5b","#37ab6e","#fe723d","#fe723d","#c77e6d"];
bgc="#0587d3",ccr="#fffef4",ftx=R.rnd_num(.75,.85),bdraw=R.rnd_int(60,80);
}
if (randC===3) { // BLEACHED
fcz=["#ffcfcf","#ffe0a8","#ffffb4","#8fa99b","#b0b0ec"];
bgc="#FFFFFF",ccr="#000000",ftx=R.rnd_num(.65,.85),bdraw=R.rnd_int(60,75);
}
if ((randC>3)&&(randC<=6)) { // WESTERN
fcz=["#503D2E","#314c6a","#058789","#D54B1A","#E3A72F","#F0ECC9"];
bgc="#FFFFFF",ccr="#000000",ftx=R.rnd_num(.65,.8),bdraw=R.rnd_int(50,75);
}
if ((randC>6)&&(randC<=9)) { // FLORO
fcz=["#4762ff","#4762ff","#ff3574","#ff5950","#f1b700","#aaff00","#00aaff","#6b3eff","#6b3eff"];
bgc="#c000e8",ccr="#000000",ftx=R.rnd_num(.75,.85),bdraw=R.rnd_int(60,80);
}
if ((randC>9)&&(randC<=12)) { // SANDSTONE
fcz=["#595643","#4E6B66","#ED834E","#EBCC6E","#EBE1C5"];
bgc="#FFFEDF",ccr="#000000",ftx=R.rnd_num(.6,.9),bdraw=R.rnd_int(40,80);
}
if ((randC>12)&&(randC<=15)) { // TAN
fcz=["#3E4147","#FFFEDF","#DFBA69","#5A2E2E","#2A2C31"];
bgc="#EFEECC",ccr="#000000",ftx=R.rnd_num(.6,.9),bdraw=R.rnd_int(40,80);
}
if ((randC>15)&&(randC<=18)) { // REDRUM
fcz=["#ECD078","#D95B43","#C02942","#542437","#53777A"]; klmt=0;
bgc="#AC2005",ccr="#000000",ftx=R.rnd_num(.65,.9),bdraw=R.rnd_int(60,80);
}
if ((randC>18)&&(randC<=22)) { // WAVES
fcz=["#FFFEDF","#FFFEDF","#BCC499","#92A68A","#7B8F8A","#506266","#354336"];
bgc="#F5DD9D",ccr="#000000",ftx=R.rnd_num(.55,.75),bdraw=R.rnd_int(10,30);
}
if ((randC>22)&&(randC<=27)) { // BLUE
fcz=["#44749D","#C6D4E1","#FFFFFF","#EBE7E0","#BDB8AD"];klmt = R.rnd_int(15,20);
bgc="#314c6a",ccr="#000000",ftx=R.rnd_num(.25,.35),bdraw=R.rnd_int(60,90);
}
if ((randC>27)&&(randC<=31)) { // MALBEC
fcz=["#C60052","#FF714B","#ACFFE9","#ACFFE9"];klmt = R.rnd_int(10,20);
bgc="#540045",ccr="#280904",ftx=R.rnd_num(.75,.95),bdraw=R.rnd_int(50,70);
}
if ((randC>31)&&(randC<=50)) { // DESERT
fcz=["#84B295","#ECCF8D","#BB8138","#AC2005","#2C1507"];
bgc="#2F4F4FFF",ccr="#000000",ftx=R.rnd_num(.6,.9),bdraw=R.rnd_int(40,80);
}
if ((randC>50)&&(randC<=62)) { // NIGHTSWIM
fcz=["#F2B118","#9EB2DA","#797EA2","#7783B2","#525C76","#485773","#2C1507","#211709"];
bgc="#000000",ccr="#F2B118",ftx=R.rnd_num(.6,.7),bdraw=R.rnd_int(60,80);
}
if ((randC>62)&&(randC<=77)) { // HCD
fcz=["#ecd891","#828751","#354336","#39579d","#82a2d5","#bccbe0"];
bgc="#F2B118",ccr="#000000",ftx=R.rnd_num(.65,.9),bdraw = R.rnd_int(40,70);
}
if ((randC>77)&&(randC<=84)) { // KIAWAH
fcz=["#314c6a","#84aace","#888984","#e2e4e3","#96826a"], klmt=R.rnd_int(5,8);
bgc="#344f6d",ccr="#fe833a",ftx=R.rnd_num(.55,.75),bdraw = R.rnd_int(30,60);
}
if ((randC>84)&&(randC<=90)) { // OG(OldGuitarist)
fcz=["#2d4762","#357d8b","#276574","#bacfbc","#7d5a3e","#a98a53"],klmt=10;
bgc="#1e374d",ccr="#b2beba",ftx=R.rnd_num(.7,.85),bdraw=R.rnd_int(35,60);
}
if ((randC>90)&&(randC<=95)) { // ARROWBEAR
fcz=["#2c1a0f","#50311c","#885e36","#b9976c","#d5c0a3"], klmt=0;
bgc="#f9f6ed",ccr="#251710",ftx=R.rnd_num(.8,.9),bdraw=R.rnd_int(25,50);
}
if ((randC>95)&&(randC<=100)) { // FIREFALL
fcz=["#5e1f1f","#8d130e","#c60d1b","#d78a30","#f4d984"],klmt=R.rnd_int(8,12);
bgc="#ffb900",ccr="#000000",ftx=R.rnd_num(.65,.72),bdraw=R.rnd_int(60,75);
}
let macro=R.rnd_int(0,1),nLn=R.rnd_int(15,16);
if (macro===1) { nLn=R.rnd_int(20,25); }
let cols=nLn,rows=nLn,xsm=2+(nLn-11);
if (macro===1) { xsm=2+(nLn-16) }
let insc=R.rnd_num(1,10),unsc=R.rnd_num(1,4);
let fcs=zspline(fcz,100,macro),fc=fcs[1];
let szdet = Math.min(window.innerWidth,window.innerHeight*2);
let wd=szdet, ht=szdet*.5, M=wd/4000;
let crxx=wd*R.rnd_num(.25,.75),cryy=ht*R.rnd_num(.2,.8);
let crr = ht*R.rnd_num(.65,.95);
let xsp=1.5*(wd/cols),ysp=1.25*(ht/rows);
let xgrid=mk2DArr(cols,rows),ygrid=mk2DArr(cols,rows);
let unz,inz;
for (let j=0;j<rows;j++) {
unz = R.rnd_num((-1*unsc),unsc)*xsp;
for (let i=0;i<cols;i++) {
inz = R.rnd_num((-1*insc),insc)*xsp;
xgrid[i][j]=(i-1.5)*xsp+unz+inz;
ygrid[i][j]=(j-.75)*ysp+R.rnd_num(-0.1,0.1)*ysp;
}
}
xgrid=HSM(xgrid,cols,rows,xsm);
xgrid=VSM(xgrid,cols,rows,xsm);
let iws=R.randVNoRep(cols);
let hk=0,ik=0,nk=0,x1=0,x2=0,y1=0,y2=0,sklr=0;
for (let iw=0; iw<iws.length; iw++) {
let ih=iws[iw]-1;
let xvc=getCol(xgrid,ih),yvc=getCol(ygrid,ih);
let scf=R.rnd_num(.85,1.10); nk=R.rnd_int(0,2);
if (macro===1) { nk=R.rnd_int(4,6); }
let kspc = R.rnd_num(20,150)*M*((ih+1)/(iws.length+1));
if (R.rnd_int(1,10)>4) {
let xvt=SplineR(xvc,20),yvt=SplineR(yvc,20);
if (macro===1) { xvt=SplineR(xvc,60),yvt=SplineR(yvc,60); }
for (let kk=0;kk<ih+nk;kk++) {
let sww=M*R.rnd_num(1.5,5);
sklr = R.rnd_int(1,80);
sklr=rgbthx([sklr,sklr,sklr,255]);
if ((klmt!==0)&&(R.rnd_int(1,klmt)===1)) { sklr = '#ffed8b'; }
for (let j=1; j<yvt.length; j++) {
lsc=1; let rkk=kk*kspc;
x1=xvt[j]+rkk;x2=xvt[j-1]+rkk;y1=yvt[j];y2=yvt[j-1];
if (((x1>0)&&(x1<wd))||((x2>0)&&(x2<wd))) {
if (((y1>0)&&(y1<ht))||((y2>0)&&(y2<ht))) {
SQB[hk] = new p5.Vector(lsc,0);
XV[hk] = new p5.Vector(x1,x2);
YV[hk] = new p5.Vector(y1,y2);
KLR[hk] = new p5.Vector(sklr,sklr);
STW[hk] = new p5.Vector(sww);
RTS[hk] = new p5.Vector(0,0);
hk+=1;
}
}
}
}
}
nk=R.rnd_int(2,6);
let nspln=R.rnd_int(rows,20),pk=nLn*0.4;
if (macro===1) { nspln=R.rnd_int(rows,24); pk=nLn*0.8; }
let xvs=SplineR(xvc,nspln);
let yvs=SplineR(yvc,nspln);
let rws=R.randVNoRep(yvs.length-1);
kspc=R.rnd_num(-200,200)*M;
let jj,xq,yq,mm,rxx,ryy,rr;
let clim=30; if (macro===1) { clim=60; }
let sqlim=700; if (macro===1) { sqlim=2750; }
let xlw=-.05*wd,xup=wd*1.05,ylw=-.05*ht,yup=ht*1.05;
for (let hh=0;hh<yvs.length-1;hh++) {
let jj=rws[hh];
x1=xvs[jj],x2=xvs[jj-1],y1=yvs[jj],y2=yvs[jj-1];
let dst=dist(x1,y1,x2,y2);
for (let kk=0;kk<nk;kk++) {
let rtst=R.rnd_int(1,100);
let spwt=(nspln/R.rnd_int(80,100));
let rkk=kk*spwt*dst*2;
let lny=R.rnd_num(1.4,1.9);
let sww=M*R.rnd_num(1.85,2.25)*lny;
let tex=round(ftx*R.rnd_int(230,254))+1;
let plthrsh=4; if (macro===1) { plthrsh=0; }
if ((rtst >= 4)&&(R.rnd_int(1,10)>plthrsh)&&(nsq<sqlim)) {
lsc=2;
ik=Math.round(R.rnd_num((-.9*pk),(.9*pk))+99*(ih/cols));
while (ik<1||ik>99) { ik=Math.round(R.rnd_num((-.9*pk),(.9*pk))+99*(ih/cols)); }
ryy = R.rnd_num(.90,1.75)*dst*scf;
rxx = spwt*ryy*R.rnd_num(.5,.75);
xq=rkk+(x1+x2)*.5+R.rnd_num(0,.2*dst);
yq=(y1+y2)*.5+R.rnd_num(0,.2*dst);
mm=atan2((x2-x1),(y1-y2));
if (R.rnd_int(1,100)<=bdraw) {fc=R.rnd_int(1,40);} else if (randC===1) {fc=R.rnd_int(225,255);} else {fc=fcs[ik];}
sklr=R.rnd_int(1,50);
sklr=rgbthx([sklr,sklr,sklr,255]);
if ((klmt!==0)&&(R.rnd_int(1,klmt)===1)) { sklr='#ffed8b'; }
let rsc=R.rnd_num(1.7,2.4);
if (macro===1) { rsc=rsc*.7; }
if (((xq>xlw)&&(xq<xup))&&((yq>ylw)&&(yq<yup))) {
nsq+=1;
SQB[hk] = new p5.Vector(lsc,tex);
XV[hk] = new p5.Vector(xq,rxx);
YV[hk] = new p5.Vector(yq,ryy);
KLR[hk] = new p5.Vector(sklr,fc);
STW[hk] = new p5.Vector(sww);
RTS[hk] = new p5.Vector(mm,rsc);
hk+=1;
}
} else if ((rtst < 4)&&(ncirc<clim)) {
lsc=3; ncirc+=1;
let gs=R.rnd_num(140,190);
rr=M*(Math.pow(gs,R.rnd_num(1.2,1.35)))*scf;
xq=(x1+x2+rkk)*.5+R.rnd_num(0,.2*dst);
yq=(y1+y2)*.5+R.rnd_num(0,.2*dst);
let ncc = round(rr/(45*M))
for (let jo=0;jo<ncc;jo++) {
let plthrsh=4; if (macro===1) { plthrsh=1; }
if (R.rnd_int(1,10)>plthrsh) {
rs = rr*(1-(jo/(ncc+2)));
if (macro===1) { rs = rs*.8; }
xr=R.rnd_num(-.026,.026)*rs; yr=R.rnd_num(-.026,.026)*rs;
spd = R.rnd_int(-2,2);
ik=Math.round(R.rnd_num((-.75*pk),(.75*pk))+99*(ih/cols));
while (ik<1||ik>99) { ik=Math.round(R.rnd_num((-.75*pk),(.75*pk))+99*(ih/cols)); }
if (randC===1) { fc=R.rnd_int(155,255);
} else if (R.rnd_int(1,100)<=bdraw) { fc=R.rnd_int(1,40);
} else {fc = fcs[ik];}
sklr=R.rnd_int(1,60);
sklr=rgbthx([sklr,sklr,sklr,255]);
let lny=R.rnd_num(1.4,1.9);
let sww=M*R.rnd_num(1.85,2.25)*lny;
if ((klmt!==0)&&(R.rnd_int(1,klmt)===1)) { sklr='#ffed8b'; }
if (((xq>xlw)&&(xq<xup))&&((yq>ylw)&&(yq<yup))) {
SQB[hk] = new p5.Vector(lsc,tex);
XV[hk] = new p5.Vector(xq,xr);
YV[hk] = new p5.Vector(yq,yr);
KLR[hk] = new p5.Vector(sklr,fc);
STW[hk] = new p5.Vector(sww);
RTS[hk] = new p5.Vector(spd,rs);
hk+=1;
}
}
}
}
}
}
}
SQ={SQB,XV,YV,KLR,STW,RTS,hk,bgc,crxx,cryy,crr,ccr,wd,ht,M,macro};
return(SQ)
}
function orbb (ccr,crxx,cryy,crr,alph) {
let clr=color(ccr); clr.setAlpha(alph)
push(); fill(clr); noStroke(); circle(crxx,cryy,crr); pop();
if (crxx+crr>SQ.wd) { push(); fill(clr); noStroke(); circle(crxx-SQ.wd,cryy,crr); pop(); }
if (crxx-crr<0) { push(); fill(clr); noStroke(); circle(crxx+SQ.wd,cryy,crr); pop(); }
}
function setup() {
rectMode(CENTER); angleMode(RADIANS);
precalcs();
if (SQ.macro===1) { noLoop() }
if (SQ.macro===0) { frameRate(30) }
createCanvas(SQ.wd,SQ.ht);
}
let ngL=0,ngLV=0,ngLA=0;
function draw() {
ngLA = map(mouseX, 0, width, -.02, .02);
ngLV = constrain(ngLV, -.04, .04);
background(SQ.bgc);
SQ.crxx+=ngLV*SQ.M*150;
if (SQ.crxx>(SQ.wd+SQ.crr)) { SQ.crxx = SQ.crr; }
if (SQ.crxx<-1*SQ.crr) { SQ.crxx = SQ.wd-SQ.crr; }
orbb(ccr,SQ.crxx,SQ.cryy,SQ.crr,255);
for (let NF=5, pp=1;pp<(1+NF);pp++) {
let blr=(1+(Math.abs(ngLV*.6)/pp))*SQ.crr,alf=180/NF;
orbb(ccr,SQ.crxx,SQ.cryy,blr,alf);
}
for (let j=0;j<SQ.hk;j++) {
push();
stroke(SQ.KLR[j].x);
strokeWeight(SQ.STW[j].x);
if (SQ.SQB[j].x>1) {
clr=color(SQ.KLR[j].y); clr.setAlpha(SQ.SQB[j].y); fill(clr);
translate(SQ.XV[j].x,SQ.YV[j].x);
}
if (SQ.SQB[j].x===2) {
rotate(SQ.RTS[j].x); scale(SQ.RTS[j].y);
rect(0,0,SQ.XV[j].y,SQ.YV[j].y);
} else if (SQ.SQB[j].x===3) {
rotate(SQ.RTS[j].x*ngL);
circle(SQ.XV[j].y,SQ.YV[j].y,SQ.RTS[j].y);
} else if (SQ.SQB[j].x===1) {
line(SQ.XV[j].x,SQ.YV[j].x,SQ.XV[j].y,SQ.YV[j].y);
}
pop();
}
push();noFill();stroke(0);strokeWeight(20*SQ.M);rect(0.5*SQ.wd,0.5*SQ.ht,SQ.wd,SQ.ht); pop();
ngLV += ngLA; ngL += ngLV; ngL = (ngL % (2*PI));
}