const hash=tokenData.hash,renderState=[];let renderStateIndex=0;const rareIndices=[],legendaryIndices1=[],legendaryIndices2=[],canvasWidth=window.innerWidth,canvasHeight=window.innerHeight;let upperAlphaSquare,upperAlphaTriangle,upperAlphaSquareLegendary,upperAlphaTriangleLegendary;const upperAlphaRareFill=40,opacityChangeAnimationSec=1.5,rareTimeBeforeFill=1,colorChangeSpeedLegendary=1.43,legendarySpinSpeedStart=.0015;let legendarySpinSpeed=0;const legendaryFriction=.99,legendaryTimeBeforeFill1=2,legendaryTimeBeforeFill2=4;let drawingAreaDims,angle,legendaryAngle,colorAngle,dims,rRed,rGreen,rBlue,tRed,tGreen,tBlue,startingDims,angleModifier,createCanvasDivider,dimsLimitFactor,drawingAreaMultiplier,baseLineWidth,upperRareDimsFillLimit,upperLegendaryDimsFillLimit1,upperLegendaryDimsFillLimit2,squareLayerAlpha,triangleLayerAlpha,legendarySquareLayerAlpha,legendaryTriangleLayerAlpha,legendarySquareLayerAlphaRender,legendaryTriangleLayerAlphaRender,spinAnglePlus=!0,lineWidth=0,isLegendary=!1,isRare=!1,isPaused=!1,rareFillAlpha=upperAlphaRareFill,squareLayerAlphaMovingUp=!0,triangleLayerAlphaMovingUp=!0,fillAlphaMovingUp=!0,legendarySpinEnabled=!0,secondsPrev=0,rareTimeSec=0,legendaryLayer1TimeSec=0,legendaryLayer2TimeSec=0;function setup(){frameRate(60),setupColorsAndEverything(),strokeWeight(lineWidth),rectMode(CENTER),noFill(),background(0)}function setupCanvas(){drawingAreaDims=Math.min(canvasWidth,canvasHeight)*drawingAreaMultiplier,createCanvas(canvasWidth,canvasHeight)}function setupColorsAndEverything(){(isLegendary=parseInt(hash.slice(2))%20==0)||(isRare=parseInt(hash.slice(2))%5==0),rRed=nextInt(2),rGreen=nextInt(2),rBlue=nextInt(2);for(let e=0;e<5&&!(rRed+rGreen+rBlue>60);e++)rRed=nextInt(2),rGreen=nextInt(2),rBlue=nextInt(2);tRed=nextInt(2),tGreen=nextInt(2),tBlue=nextInt(2);for(let e=0;e<5&&!(tRed+tGreen+tBlue>60);e++)tRed=nextInt(2),tGreen=nextInt(2),tBlue=nextInt(2);let e=Math.sqrt(.299*Math.pow(rRed,2)+.587*Math.pow(rGreen,2)+.114*Math.pow(rBlue,2)),a=Math.sqrt(.299*Math.pow(tRed,2)+.587*Math.pow(tGreen,2)+.114*Math.pow(tBlue,2));upperAlphaSquare=map(Math.abs(e-255)+20,20,255,20,100),upperAlphaTriangle=map(Math.abs(a-255)+20,20,255,20,100),squareLayerAlpha=upperAlphaSquare,triangleLayerAlpha=upperAlphaTriangle,0===(angleModifier=(nextInt(2)-125)/10)&&(angleModifier=.01),0===(createCanvasDivider=nextInt(3)-2047)&&(createCanvasDivider=1),(dimsLimitFactor=(dimsLimitFactor=nextInt(1))%4+nextInt(1)/15)<.85&&(dimsLimitFactor=.5+nextInt(1)/15),drawingAreaMultiplier=.25+nextInt(1)/15*.35;const r=Math.min(canvasWidth,canvasHeight);lineWidth=Math.max(nextInt(1)/15,.4),baseLineWidth=lineWidth,upperAlphaSquare+=map(Math.abs(baseLineWidth-1)+.4,.4,1,1,15),upperAlphaTriangle+=map(Math.abs(baseLineWidth-1)+.4,.4,1,1,15),isRare&&(upperAlphaSquare*=.9,upperAlphaTriangle*=.9),isLegendary&&(upperAlphaTriangle*=.7,legendarySquareLayerAlphaRender=legendarySquareLayerAlpha=upperAlphaSquareLegendary=1.25*(upperAlphaSquare*=.7),legendaryTriangleLayerAlphaRender=legendaryTriangleLayerAlpha=upperAlphaTriangleLegendary*=1.25),upperAlphaSquare=Math.round(upperAlphaSquare),upperAlphaTriangle=Math.round(upperAlphaTriangle),lineWidth*=r/644,renderState.length=isRare?6600:!isLegendary&&lineWidth>.7?9900:11e3,renderState.fill(-1e6),setupCanvas();const n=5+nextInt(1)/15*5;startingDims=createCanvasDivider<0?-1*Math.min(Math.abs(-drawingAreaDims*dimsLimitFactor+5),r/n):Math.min(drawingAreaDims*dimsLimitFactor-5,r/n),upperRareDimsFillLimit=.4*drawingAreaDims,upperLegendaryDimsFillLimit1=.3*drawingAreaDims,upperLegendaryDimsFillLimit2=.5*drawingAreaDims,dims=startingDims,angle=0,colorAngle=0,legendaryAngle=0,isPaused=!1,latestSliceIndex=2}function draw(){const e=millis()/1e3,a=e-secondsPrev;secondsPrev=e,isPaused||(updateVisualisation(a),drawVisualisation())}function nextState(e){dims-=drawingAreaDims/createCanvasDivider,legendarySpinSpeed>0&&(spinAnglePlus?legendaryAngle+=legendarySpinSpeed:legendaryAngle-=legendarySpinSpeed,legendarySpinSpeed*=legendaryFriction,legendaryAngle%=1e5),angle+=angleModifier,angle%=1e5,colorAngle+=colorChangeSpeedLegendary*e,colorAngle%=1e5;const a=upperAlphaSquare/opacityChangeAnimationSec*e,r=upperAlphaTriangle/opacityChangeAnimationSec*e,n=upperAlphaRareFill/opacityChangeAnimationSec*e,i=upperAlphaSquareLegendary/opacityChangeAnimationSec*e,l=upperAlphaTriangleLegendary/opacityChangeAnimationSec*e;squareLayerAlphaMovingUp?(squareLayerAlpha=Math.min(squareLayerAlpha+a,upperAlphaSquare),legendarySquareLayerAlpha=Math.min(legendarySquareLayerAlpha+i,upperAlphaSquareLegendary)):(squareLayerAlpha=Math.max(squareLayerAlpha-a,0),legendarySquareLayerAlpha=Math.max(legendarySquareLayerAlpha-i,0)),triangleLayerAlphaMovingUp?(triangleLayerAlpha=Math.min(triangleLayerAlpha+r,upperAlphaTriangle),legendaryTriangleLayerAlpha=Math.min(legendaryTriangleLayerAlpha+l,upperAlphaTriangleLegendary)):(triangleLayerAlpha=Math.max(triangleLayerAlpha-r,0),legendaryTriangleLayerAlpha=Math.max(legendaryTriangleLayerAlpha-l,0)),fillAlphaMovingUp?(rareFillAlpha=Math.min(rareFillAlpha+n,upperAlphaRareFill),legendarySquareLayerAlphaRender=Math.min(legendarySquareLayerAlphaRender+i,legendarySquareLayerAlpha),legendaryTriangleLayerAlphaRender=Math.min(legendaryTriangleLayerAlphaRender+l,legendaryTriangleLayerAlpha)):(rareFillAlpha=Math.max(rareFillAlpha-n,0),legendarySquareLayerAlphaRender=Math.max(legendarySquareLayerAlphaRender-i,0),legendaryTriangleLayerAlphaRender=Math.max(legendaryTriangleLayerAlphaRender-l,0)),(dims<=-drawingAreaDims*dimsLimitFactor||dims>=drawingAreaDims*dimsLimitFactor)&&(dims=startingDims)}function updateVisualisation(e){renderStateIndex>=renderState.length&&(renderStateIndex=0),isRare&&(rareTimeSec+=e)>=rareTimeBeforeFill&&(rareIndices.push(renderStateIndex),rareIndices.length>30&&rareIndices.shift(),rareTimeSec=0),isLegendary&&(legendaryLayer1TimeSec+=e,legendaryLayer2TimeSec+=e,legendaryLayer2TimeSec%=100,(legendaryLayer1TimeSec%=100)>=legendaryTimeBeforeFill1&&!legendaryIndices2.includes(renderStateIndex)&&(legendaryIndices1.push(renderStateIndex),spinLegendary(),legendaryIndices1.length>15&&legendaryIndices1.shift(),legendaryLayer1TimeSec=0),legendaryLayer2TimeSec>=legendaryTimeBeforeFill2&&!legendaryIndices1.includes(renderStateIndex)&&(legendaryIndices2.push(renderStateIndex),spinLegendary(),legendaryIndices2.length>7&&legendaryIndices2.shift(),legendaryLayer2TimeSec=0)),nextState(e);const a=drawingAreaDims/2,r=drawingAreaDims/2;let n=dims;isLegendary?legendaryIndices1.includes(renderStateIndex)?n=Math.min(upperLegendaryDimsFillLimit1,Math.abs(n)):legendaryIndices2.includes(renderStateIndex)&&(n=Math.min(upperLegendaryDimsFillLimit2,Math.abs(n))):shouldFill(renderStateIndex)&&(n=Math.min(upperRareDimsFillLimit,Math.abs(n))),renderState[renderStateIndex++]=angle,renderState[renderStateIndex++]=a,renderState[renderStateIndex++]=r,renderState[renderStateIndex++]=.7*n,renderState[renderStateIndex++]=.7*n,renderState[renderStateIndex++]=a-n,renderState[renderStateIndex++]=r,renderState[renderStateIndex++]=a+n,renderState[renderStateIndex++]=r,renderState[renderStateIndex++]=a,renderState[renderStateIndex++]=r-n}function drawVisualisation(){blendMode(BLEND),background(0);let e=baseLineWidth<.7?ADD:BLEND;e=isRare?BLEND:e,isLegendary&&(e=ADD,translate(width/2,height/2),rotate(legendaryAngle)),blendMode(e);for(let a=0;a<renderState.length;a+=11){let r=a;const n=renderState[r++],i=renderState[r++],l=renderState[r++],t=renderState[r++],d=renderState[r++],p=renderState[r++],s=renderState[r++],g=renderState[r++],h=renderState[r++],y=renderState[r++],u=renderState[r++];if(push(),isLegendary||translate(width/2,height/2),rotate(n),isLegendary){noStroke();const e=shouldFill(a);if(e){const e=legendarySquareLayerAlphaRender/3,a=e+(Math.sin(colorAngle)+1)*e;blendMode(ADD),fill(rRed,rGreen,rBlue,Math.min(a,legendarySquareLayerAlphaRender)),rect(i,l,t,d)}if(e){const e=legendaryTriangleLayerAlphaRender/3,a=e+(Math.sin(colorAngle)+1)*e;blendMode(ADD),fill(tRed,tGreen,tBlue,Math.min(a,legendaryTriangleLayerAlphaRender)),triangle(p,s,g,h,y,u)}}const o=shouldFill(a);stroke(rRed,rGreen,rBlue,squareLayerAlpha),o?(fill(rRed,rGreen,rBlue,Math.min(rareFillAlpha,squareLayerAlpha)),blendMode(BLEND),rect(i,l,t,d)):(noFill(),blendMode(e),rect(i,l,t,d)),stroke(tRed,tGreen,tBlue,triangleLayerAlpha),o?(fill(tRed,tGreen,tBlue,Math.min(rareFillAlpha,triangleLayerAlpha)),blendMode(BLEND),triangle(p,s,g,h,y,u)):(noFill(),blendMode(e),triangle(p,s,g,h,y,u)),pop()}}let latestSliceIndex=2;function nextInt(e){latestSliceIndex+e>=64&&(latestSliceIndex=2);const a=latestSliceIndex,r=a+e;return latestSliceIndex=r,parseInt(hash.slice(a,r),16)}function shouldFill(e){return isLegendary?legendaryIndices1.includes(e)||legendaryIndices2.includes(e):isRare&&rareIndices.includes(e)}function spinLegendary(){legendarySpinEnabled?(legendarySpinSpeed=legendarySpinSpeedStart,spinAnglePlus=Math.random()<.5):legendarySpinSpeed=0}function keyPressed(){return 32===keyCode?isPaused=!isPaused:49===keyCode?(isPaused&&(isPaused=!1),squareLayerAlphaMovingUp=!squareLayerAlphaMovingUp,triangleLayerAlphaMovingUp||squareLayerAlphaMovingUp||(triangleLayerAlphaMovingUp=!0)):50===keyCode?(isPaused&&(isPaused=!1),(triangleLayerAlphaMovingUp=!triangleLayerAlphaMovingUp)||squareLayerAlphaMovingUp||(squareLayerAlphaMovingUp=!0)):51===keyCode?(isPaused&&(isPaused=!1),squareLayerAlphaMovingUp=!0,triangleLayerAlphaMovingUp=!0,fillAlphaMovingUp=!0):52===keyCode&&(isRare||isLegendary)?(isPaused&&(isPaused=!1),fillAlphaMovingUp=!fillAlphaMovingUp):53===keyCode&&isLegendary&&(legendarySpinEnabled=!legendarySpinEnabled),!1}
↓ show full (9,622 bytes)