Challenge: 
Version: 
2
Winner?: 
No
Code Snippet: 
sync on : sync rate 80
randomize timer()

#constant grav = 0.4

type T
    x# as float
    y# as float
    sx# as float
    sy# as float
    fade# as float
    col as integer
endtype
dim S(0) as T

`Media
box 0, 0, 4, 4, 0, 0, rgb(255, 255, 255), 0
box 0, 4, 4, 8, 0, 0, 0, rgb(255, 255, 255) 
box 4, 4, 8, 8, 0, rgb(255, 255, 255), 0, 0
box 4, 0, 8, 4, rgb(255, 255, 255), 0, 0, 0
get image 1, 0, 0, 8, 8, 1

`Start timer
t# = timer()
sp# = 20

do

    cls

    `Start particles
    if timer() - t# => sp#
    
        `reset timer
        t# = timer()

        `Makle a particle
        array insert at bottom S()
        b = array count(S())
        
        S(b).x# = mousex()
        S(b).y# = mousey()
        S(b).sx# = -5.0 + (rnd(1000)*0.01)
        S(b).sy# = -rnd(500)*0.01
        S(b).fade# = 255.0
        S(b).col = rgb(rnd(255), rnd(255), rnd(255))
        
    endif

    `Handle all particles
    if array count(S()) > 0
        for a = array count(S()) to 1 step -1
            HandleParticle(a)
        next a
        CleanUp()
    endif

    `Faster or slower particles
    sp# = 20
    if mouseclick() = 1 then sp# = 1
    if mouseclick() = 2 then sp# = 40

    sync
loop

function HandleParticle(a)
    
    `Update position
    inc S(a).sy#, grav
    inc S(a).x#, S(a).sx#
    inc S(a).y#, S(a).sy#

    `Handle fading
    dec S(a).fade#, 5
    
    `Draw particle
    sprite a, S(a).x#, S(a).y#, 1
    set sprite diffuse a, rgbr(S(a).col), rgbg(S(a).col), rgbb(S(a).col)
    set sprite alpha a, S(a).fade#
    
    `Delete particle
    if S(a).fade# <= 0
        delete sprite a
        array delete element S(), a
    endif
    
endfunction

function CleanUp()
    for i = array count(S()) + 1 to 7500
        if sprite exist(i) > 0 then delete sprite i
    next i
endfunction