sync on sync rate 60 randomize timer() type pos x as integer y as integer endtype #constant maxdots 5000 dim dots(maxdots) as pos for d=1 to maxdots dots(d).x=rnd(screen width()) dots(d).y=rnd(screen height()) next d do sync t=timer() c=abs(cos(t/100.0)*255.0) cls rgb(c,c,c) mx#=mousex() if mx#>=screen width()-1 mx#=1 endif if mx#=0 mx#=screen width()-2 endif my#=mousey() if my#=0 my#=screen height()-2 endif if my#=>screen height()-1 my#=1 endif position mouse mx#,my# lock pixels if mouseclick()=0 for d=1 to maxdots if d<maxdots/3 a=rnd(16)-4 else if d<maxdots*2/3.0 a=rnd(10)-2 else a=rnd(7)-1 endif endif if dots(d).x>mx# dots(d).x=dots(d).x-a else dots(d).x=dots(d).x+a endif if d<maxdots/3 a=rnd(16)-4 else if d<maxdots*2/3.0 a=rnd(10)-2 else a=rnd(7)-1 endif endif if dots(d).y>my# dots(d).y=dots(d).y-a else dots(d).y=dots(d).y+a endif next d else if mouseclick()=1 for d=1 to maxdots if d<maxdots/3 a=rnd(9)-1 else if d<maxdots*2/3.0 a=rnd(5) else a=rnd(3) endif endif if dots(d).x>mx# dots(d).x=dots(d).x+a/2.0+.5 else dots(d).x=dots(d).x-a/2.0+.5 endif if d<maxdots/3 a=rnd(9)-1 else if d<maxdots*2/3.0 a=rnd(5) else a=rnd(3) endif endif if dots(d).y>my# dots(d).y=dots(d).y+a/2.0+.5 else dots(d).y=dots(d).y-a/2.0+.5 endif next d else for d=1 to maxdots destx=mx#+d/(maxdots/80.0)-maxdots/(maxdots/40.0) desty=my#+sin((t/1000.0+d/(maxdots/5.0))*100)*100 if abs(dots(d).x-destx)>2 dots(d).x=dots(d).x-abs((dots(d).x-destx))/(dots(d).x-destx)*2 else dots(d).x=destx endif if abs(dots(d).y-desty)>2 dots(d).y=dots(d).y-abs((dots(d).y-desty))/(dots(d).y-desty)*2 else dots(d).y=desty endif next d endif endif for d=1 to maxdots if dots(d).x<0 dots(d).x=0 endif if dots(d).x>screen width() dots(d).x=screen width() endif if dots(d).y<0 dots(d).y=0 endif if dots(d).y>screen height() dots(d).y=screen height() endif if d<maxdots/3 dot dots(d).x,dots(d).y,rgb(rnd(255),0,0) else if d<maxdots*2/3.0 dot dots(d).x,dots(d).y,rgb(0,0,rnd(255)) else dot dots(d).x,dots(d).y,rgb(0,rnd(255),0) endif endif next d unlock pixels loop