Challenge: 
Version: 
1
Winner?: 
No
Code Snippet: 
sync on
sync rate 0
cls
type particle_type
   color
   x as float
   y as float
   vx as float
   vy as float
   exist as boolean
   creation_time
endtype
global max_particle_amount
max_particle_amount=3000
dim particle(max_particle_amount) as particle_type
global time as float
oldtimer=timer()
global r as float
global last_tick
do
   cls
   time=(timer()-oldtimer)/1000.0
   oldtimer=timer()
   inpt()
   update_particles()
   sync
loop

function inpt()
   inc r,12
   h#=r/390.0
   while h#>1
      dec h#
   endwhile
   color=hsl(h#,1,0.5)
   add_particle(mousex(),mousey(),40.0*cos(r),40.0*sin(r),color)
endfunction

function update_particles()
   for n=1 to max_particle_amount
      if particle(n).exist
         particle(n).x=particle(n).x+particle(n).vx*time
         particle(n).y=particle(n).y+particle(n).vy*time
         particle(n).vy=particle(n).vy*1.01
         particle(n).vx=particle(n).vx*1.01
         ink particle(n).color,0
         box particle(n).x,particle(n).y,particle(n).x+2,particle(n).y+2
         if timer()>particle(n).creation_time+3000 or particle(n).x<0 or particle(n).x>screen width() or particle(n).y<0 or particle(n).y>screen height()
            particle(n).exist=0
         endif
      endif
   next n
endfunction

function add_particle(x#,y#,vx#,vy#,c)
   n=freeparticle()
   particle(n).exist=1
   particle(n).x=x#
   particle(n).y=y#
   particle(n).vx=vx#
   particle(n).vy=vy#
   particle(n).color=c
   particle(n).creation_time=timer()
endfunction

function freeparticle()
   n=1
   while particle(n).exist=1 and n<max_particle_amount
      inc n
   endwhile
endfunction n


function hsl(H#,S#,L#)

   local r
   local g
   local b
   if ( S# = 0 )                       `HSL values = 0 ˜ 1

      rR# = L# * 255                      `RGB results = 0 ˜ 255
      rG# = L# * 255
      rB# = L# * 255

   else

         if ( L# < 0.5 )
            var_2# = L# * ( 1 + S# )
         else

            var_2# = ( L# + S# ) - ( S# * L# )
         endif

         var_1# = (2 * L#) - var_2#

         R = 255.0 * Hue_2_RGB( var_1#, var_2#, H# + ( 1.0 / 3.0 ) )
         G = 255.0 * Hue_2_RGB( var_1#, var_2#, H# )
         B = 255.0 * Hue_2_RGB( var_1#, var_2#, H# - ( 1.0 / 3.0 ) )

   endif
color=rgb(r,g,b)
endfunction color

Function Hue_2_RGB( v1#, v2#, vH# )

   if ( vH# < 0 ) then vH# = vH# + 1
   if ( vH# > 1 ) then vH# = vH# - 1
   if ( ( 6 * vH# ) < 1 ) then res#=( v1# + ( v2# - v1# ) * 6.0 * vH# ): exitfunction ( res# )
   if ( ( 2 * vH# ) < 1 ) then exitfunction ( v2# )
   if ( ( 3 * vH# ) < 2 ) then res#=( v1# + ( v2# - v1# ) * ( ( 2.0 / 3.0 ) - vH# ) * 6.0 ):exitfunction ( res# )

Endfunction v1#