    rem Particles Functionality

    rem Standard Setup Code for all examples
    sync on : sync rate 0 : color backdrop rgb(0,128,0)
    set text font "arial" : set text size 16
    set text to bold : set text transparent

    rem Load images
    ImageNumberA=1 : load image "snow.bmp",ImageNumberA
    ImageNumberB=2 : load image "fire.bmp",ImageNumberB
    ImageNumberC=3 : load image "spec.bmp",ImageNumberC

    rem Make special particle effects
    ParticleNumberA=1 : make snow particles ParticleNumberA, ImageNumberA, 500,-5,5,5, 10,10,10
    ParticleNumberB=2 : make fire particles ParticleNumberB, ImageNumberB, 500, 5,5,5, 10,10,10

    rem Make textured particle effects
    ParticleNumberC=3
    make particles ParticleNumberC, ImageNumberC, 10, 10.0
    position particles ParticleNumberC, -3, 0, 10
    gosub _usingvectors

    rem Make colored particle effects in the air
    ParticleNumberD=4
    make particles ParticleNumberD, 0, 10, 10.0
    position particles ParticleNumberD, 3, 2, 10
    set particle emissions ParticleNumberD, 1
    set particle speed ParticleNumberD, 0.005
    set particle velocity ParticleNumberD, 10

    rem Setup camera
    position camera 0,1,0
    point camera 0,1,400

    rem Main loop
    desc$="Particle Effects"
    while mouseclick()=0

    rem Camera control to view particles
    if upkey()=1 then move camera 0.1
    if downkey()=1 then move camera -0.1
    if leftkey()=1 then turn camera left 1
    if rightkey()=1 then turn camera right 1

    rem Spark across floor using mouse
    rot#=wrapvalue(rot#+1.0)
    color particles ParticleNumberC, rnd(255), rnd(255), rnd(255)
    position particles ParticleNumberC, (mousex()-320)/50.0, 0, 10
    rotate particles ParticleNumberC, 0, 0, rot#

    rem Trigger random particle commands
    if rnd(50)=1 then show particles ParticleNumberD
    if rnd(50)=1 then hide particles ParticleNumberD
    if rnd(5)=1 then set particle emissions ParticleNumberC, 2+rnd(8)
    if rnd(5)=1 then set particle speed ParticleNumberC, (2+rnd(1))/100.0
    if rnd(5)=1 then set particle velocity ParticleNumberC, 4+rnd(2)
    if rnd(5)=1 then set particle gravity ParticleNumberC, rnd(5)
    if rnd(5)=1 then set particle life ParticleNumberC, 50+rnd(50)
    if rnd(5)=1 then set particle floor ParticleNumberC, rnd(1)
    if rnd(5)=1 then set particle chaos ParticleNumberC, rnd(10)/10.0
    if rnd(5)=1 then color particles ParticleNumberD, rnd(255), rnd(255), 0

    rem Expressions
    set cursor 0,0
    print "PARTICLES DATA"
    print "exist:";particles exist(ParticleNumberC)
    if particles exist(ParticleNumberC)=1
     print "x:";particles position x(ParticleNumberC)
     print "y:";particles position y(ParticleNumberC)
     print "z:";particles position z(ParticleNumberC)
    endif

    rem Show Framerate
    text 20,screen height()-40,desc$
    fps$="DBPro Fps: "+str$(screen fps())
    text screen width()-20-text width(fps$),screen height()-40,fps$

    rem Update screen
    sync

    rem End loop
    endwhile

    rem Delete particles
    delete particles ParticleNumberA
    delete particles ParticleNumberB
    delete particles ParticleNumberC
    delete particles ParticleNumberD

    rem End program
    end

    _usingvectors:

    VectorNumber=1 : ParticlesNumber=3
    result==make vector3(VectorNumber)
    set vector3 VectorNumber, -3, 0, 10
    position particles ParticlesNumber, VectorNumber
    set vector3 VectorNumber, 0, 0, 45
    rotate particles ParticlesNumber, VectorNumber
    set vector3 to particles position VectorNumber, ParticlesNumber
    set vector3 to particles rotation VectorNumber, ParticlesNumber
    rot#=z vector3(VectorNumber)
    result=delete vector3(VectorNumber)

    return