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