Particles fall from above into darkness occupied only by one. The particles are emitted from a central point you can control with your cursor or finger, particles that become trapped in the orb become…
_='u=[Q/2,0];TeLprevDefaultO&&(O[0]Mu[0@X;u[1@Y};b.mouseb.touchz f(~B1;6z h(eLx=u[0] y=u[1] c-2 a-1 b+2}fV$;:9;9~e:>=HU:):-=2*9,9=-9*=B8$>=Q$)$-=,=-9*=B8;d,g=$-Lx,m=:-LyT=1<*/(g*g+m*m))9*=-B5;T*=2ZKa)+",Kc)+",15N+T,7+TMB02>9&&-B02<9&&6;for(k=[],l=0;1400!=l;l++)k.push(new fMl=0;z n(e,g7=40`+20;$=e;:=g}nV%#0f0";beginPaarc(,?2*PIM%:sin)/2;7cosM1>7&&(7=1Ml++};d=new n(B5*^/2MrglobalAlpha=B2;wGa,??vJ,vMcGv,??aJ,a)Z2?1?2N??^Md.dfor(j in k)k[j].d(_};v=docum.createElem("canvas"MvJ=aJ/8;v=a/8;w=v.getCtext("2d"_;~is.zfuncti`*random()_MrequestAnimatiFrame(r)^Q,HUZrgb(V.prototypLdUeightQWidOLtargetTouchesN0)"Rect) e.K"+round(100*~J.widG.drawImage(B0.@]=Lcli?0,:~y9~a7~b6h(is)}%stroke$~xinnermovT;;fillStyl";if(var ent.hU(l/300(7+Lb)){||0>=`+B5,$,:,7thone=+=c.(M ;L~c=z(=4`';for(i in g=' $%679:?@BGJKLMNOQUVZ^_`z~')with(_.split(g[i]))_=join(pop());with(Math)eval(_)
Xz0ndT1bUS8yLDBdO1QHZRVMcHJldhlEZWZhdWx0C08mJigPT1swXU11WzBAWDt1WzFAWX07Yi4QbW91c2UeYi4QdG91Y2geeiBmKBV+D0IxOzZ6IGgoZRVMeD11WzBdCXk9dVsxXQljBi0yCWEGLTEJYgYrMn1mViQOCDs6Djk7OQ5+ZRs6Pj0fSFUUOik6LT0yKjksOT0tORMIKj1COBskPj1RFCQpJC09CCwIPS0IEzkqPUI4OxoPZCxnPSQtTHgsbT06LUx5G1Q9MTwWKhYvKGcqZyttKm0pKTkqPS1CNTtUKj0yWkthKSsiLEtjKSsiLDE1ThIrVCw3K1RNQjAyPjkmJi1CMDI8OSYmNjtmb3IoGms9W10sbD0wOzE0MDAhPWw7bCsrKWsucHVzaChuZXcgZk0abD0wO3ogbihlLGcVNz00MGArMjA7JD1lOzo9Z31uViUcIzBmMCI7DGJlZ2luUGERCwxhcmMoEiw/MipQSU0lCzoOc2luFykvMjs3DmNvcxdNMT43JiYoNz0xTWwrK307ZD1uZXcgbihCNSpeLzJNcgcVDGdsb2JhbEFscGhhPUIyO3dHYSw/P3ZKLHYYTWNHdiw/P2FKLGEYKVoyPzE/Mk4/P15NZC5kC2ZvcihqIGluIGspa1tqXS5kKF99O3Y9ZG9jdW0ZLmNyZWF0ZUVsZW0ZKCJjYW52YXMiTXZKPWFKLzg7dhg9YRgvODt3PXYuZ2V0QxB0ZXh0KCIyZCJfO34RaXMuemZ1bmN0aRBgKnJhbmRvbSgpX01yZXF1ZXN0QW5pbWF0aRBGcmFtZShyKV5RLB9IVVodHHJnYihWLnByb3RvdHlwTGQHFVVlaWdodFEfV2lkEU9MdGFyZ2V0VG91Y2hlc04wKSIdUmVjdAspCWUuSyIrcm91bmQoMTAwKn5KLndpZBFHLmRyYXdJbWFnZShCMC5AXT1MY2xpGT8wLDp+eTl+YTd+YjZoKBFpcyl9JQxzdHJva2UkfngfaW5uZXIebW92D1Q7HTsMZmlsbBxTdHlsDyIbO2lmKBp2YXIgGWVudBguaFUXKGwvMzAwFig3K0xiKRUpexR8fDA+PRNgK0I1LBIkLDosNxF0aBBvbg9lPQ4rPQxjLgsoTQk7TAh+Ywc9eigGPTRgJztmb3IoaSBpbiBnPScGBwgJCwwODxAREhMUFRYXGBkaGxwdHh8kJTY3OTo/QEJHSktMTU5PUVVWWl5fYHp+Jyl3aXRoKF8uc3BsaXQoZ1tpXSkpXz1qb2luKHBvcCgpKTt3aXRoKE1hdGgpZXZhbChfKQ==
u=[innerWidth/2,0];
touchEvents=function(e){
e.preventDefault();
if(e.targetTouches){
e=e.targetTouches[0];
}
u[0]=e.clientX;
u[1]=e.clientY;
};
b.onmousemove=touchEvents;
b.ontouchmove=touchEvents;
var ball=function(){
this.g=.1;
this.s();
}
ball.prototype.s = function(){
this.x=u[0];
this.y=u[1];
this.vx=Math.random()*4-2;
this.dy=Math.random()*4-1;
this.r= Math.random()*4+2;
}
ball.prototype.draw = function(){
this.x+=this.vx;
this.y+=this.dy;
this.dy+=this.g;
if(this.y>=innerHeight || this.y<=0) {
this.y-=this.dy*2;
this.dy=-this.dy*Math.random()+.5;
this.vx*=.8;
}
if(this.x>=innerWidth || this.x<=0) {
this.x-=this.vx;
this.vx=-this.vx*Math.random()+.5;
this.dy*=.8;
}
hit=this.hitTest(d);
if(hit) this.dy*=-.5;
hit*=2;
c.fillStyle='rgb('+Math.round(this.dy*100)+','+Math.round(this.vx*100)+',150)';
c.fillRect(this.x,this.y,this.r+hit,this.r+hit);
if(this.dy<.02 && this.dy>-.02) {
this.s();
}
}
ball.prototype.hitTest = function(obj){
var vx = this.x - obj.x;
var dy = this.y - obj.y;
var distance = (vx * vx) + (dy * dy);
var area = (this.r + obj.r)*(this.r + obj.r);
return (area / distance)>1;
}
var z = [];
for (i=0;i!=1400;i++){
z.push(new ball());
}
var m,i=0;
var dragon = function(x,y){
this.r=Math.random()*40+20;
this.x=x;
this.y=y;
}
dragon.prototype.draw = function(){
c.strokeStyle='#0f0';
c.beginPath();
c.arc(this.x,this.y,this.r,0,2*Math.PI);
c.stroke();
this.y+=Math.sin(i/300)/2;
this.r+=Math.cos(i/300);
if (this.r<1) this.r=1;
i++;
}
d=new dragon(innerWidth*.5,innerHeight/2);
r = function(){
c.globalAlpha=.2;
w.drawImage(a,0,0,v.width,v.height);
c.drawImage(v,0,0,a.width,a.height);
c.fillStyle='rgb(20,10,20)';
c.fillRect(0,0,innerWidth,innerHeight);
d.draw();
for(j in z) {
z[j].draw();
}
requestAnimationFrame(r);
}
v=document.createElement('canvas');
v.width=a.width/8;
v.height=a.height/8;
w=v.getContext('2d');
requestAnimationFrame(r);