Help file code below or just copy it from the post
; PROJECT : particle
; AUTHOR : user
; CREATED : 7/21/2009
; EDITED : 7/26/2009
; THE NEW PARTICLE ENGINE VERSION 1.0
; ---------------------------------------------------------------------
`remove test when done
`#Include "Framesheetanims.pba"
`List of things to do
RemStart
~Create Animated particles
~Create Normal Particles
~Create Alpha Normal Particles
~Create Alpha Animated Particles
RemEnd
`1 for camera 0 for no camera
`Global ParticleCamera
`The number of the camera you want to use
`Global ParticleCameraNum
RemStart
`set sw and sh to global
Global ParticleSw
Global ParticleSh
`screen width
ParticleSw=GetScreenWidth()
`Screen Height
ParticleSh=GetScreenHeight()
RemEnd
`load particle images
Type particleimg
pimganimated
pimgnum
pimgframe
index
EndType
Dim partimg As particleimg List
`Particle Variables
Type particlevar
index
particleanime
particleanimated
particleframe
particlelife#
particledecrease#
particlex
particley
particlexdir
particleydir
particlealpha
particleimgnum
particlesprite
particlespeedx
particlespeedy
particleef
EndType
Dim particle As particlevar List
`test loop
RemStart
ParticleCamera=0
SetFPS 80
FrameSheetDefaultImageType=2
FrameSheetRGBMask=1
createnaptype(1,"dust.png",RGB(255,0,255))
createaptype(2,"duster.png",30,30,RGB(53,153,53))
Do
DrawOrderedSprites
`drawimage partimg.pimgnum,mousex(),mousey(),1
If MouseButton()=1
addparticle(1,1,1,0.01,MouseX(),MouseY(),1,1,2,2,1)
`addanimatedparticle(2,10,0,1,0.01,MouseX(),MouseY(),RndRange(1,2),RndRange(1,2),2,2,1,3)
FlushMouse
EndIf
If MouseButton()=2
deleteallparticle()
FlushMouse
EndIf
updateparticle()
Sync
Cls 0
Loop
RemEnd
`end of test loop
`functions
`add normal particle types(non-animated)
Function createnaptype(r,i$,e)
partimg = New particleimg
partimg.index=r
partimg.pimganimated=0
partimg.pimgnum=LoadNewFxImage(i$)
RGBMaskImage partimg.pimgnum, $00ffffff
ImageMaskColour partimg.pimgnum,e
EndFunction
`add animated particle types
Function createaptype(r,i$,fw,fh,e)
partimg = New particleimg
partimg.index=r
partimg.pimganimated=1
`pimgnum
partimg.pimgframe=LoadFrameSheet(i$,fw,fh,e)
EndFunction
`delete non animated type
Function deletenaptype(r)
deleteallparticle()
For Each partimg()
If partimg.index=r
DeleteImage partimg.pimgnum
partimg=null
EndIf
Next
EndFunction
`deleteanimated type
Function deleteaptype(r)
deleteallparticle()
For Each partimg()
If partimg.index=r
deleteframesheet(partimg.pimgframe)
partimg=null
EndIf
Next
EndFunction
`delete all types
Function deleteallparticletype()
deleteallparticle()
For Each partimg()
If partimg.pimganimated=0
DeleteImage partimg.pimgnum
partimg=null
EndIf
If partimg.pimganimated=1
deleteframesheet(partimg.pimgframe)
partimg=null
EndIf
Next
EndFunction
`Add animated Particle
Function addanimatedparticle(in,rate,palpha,plife#,plifed#,psx,psy,pdirx,pdiry,pspeedx,pspeedy,pspx,endframe)
particle = New particlevar
particle.index=in
particle.particlealpha=palpha
For Each partimg()
If particle.index=partimg.index
particle.particleframe=partimg.pimgframe
EndIf
Next
particle.particleimgnum=NewAnim(particle.particleframe,rate)
particle.particlelife#=plife#
particle.particledecrease#=plifed#
particle.particlex=psx
particle.particley=psy
particle.particlesprite=NewSprite(particle.particlex,particle.particley,getanimimage(particle.particleimgnum))
If particle.particlealpha=1
If particle.particlelife#>1 Then particle.particlelife#=1
If particle.particledecrease#>1 Then particle.particledecrease#=1
SpriteDrawMode particle.particlesprite,4
EndIf
particle.particlexdir=pdirx
particle.particleydir=pdiry
particle.particlespeedx=pspeedx
particle.particlespeedy=pspeedy
particle.particleanimated=1
particle.particleef=endframe
PositionSpriteZ particle.particlesprite,pspx
EndFunction
`Add non animated Particle
Function addparticle(in,palpha,plife#,plifed#,psx,psy,pdirx,pdiry,pspeedx,pspeedy,pspx)
particle = New particlevar
particle.index=in
particle.particlealpha=palpha
For Each partimg()
If partimg.index=in
particle.particleimgnum=partimg.pimgnum
EndIf
Next
particle.particlelife#=plife#
particle.particledecrease#=plifed#
particle.particlex=psx
particle.particley=psy
particle.particlesprite=NewSprite(particle.particlex,particle.particley,particle.particleimgnum)
If particle.particlealpha=1
If particle.particlelife#>1 Then particle.particlelife#=1
If particle.particledecrease#>1 Then particle.particledecrease#=1
SpriteDrawMode particle.particlesprite,4
EndIf
particle.particlexdir=pdirx
particle.particleydir=pdiry
particle.particlespeedx=pspeedx
particle.particlespeedy=pspeedy
particle.particleanimated=0
PositionSpriteZ particle.particlesprite,pspx
EndFunction
`Update particles
Function updateparticle()
For Each particle()
If particle.particleanimated=0
`left
If particle.particlexdir=1
particle.particlex=particle.particlex-particle.particlespeedx
EndIf
`right
If particle.particlexdir=2
particle.particlex=particle.particlex+particle.particlespeedx
EndIf
`up
If particle.particleydir=1
particle.particley=particle.particley-particle.particlespeedy
EndIf
`down
If particle.particleydir=2
particle.particley=particle.particley+particle.particlespeedy
EndIf
If particle.particlealpha=1
SpriteAlphaLevel particle.particlesprite,particle.particlelife#
EndIf
particle.particlelife#=particle.particlelife#-particle.particledecrease#
If particle.particlelife#<=0
If GetSpriteStatus(particle.particlesprite)=1
DeleteSprite particle.particlesprite
EndIf
particle=null
EndIf
EndIf
If particle.particleanimated=1
For Each partimg()
If particle.index=partimg.index
SpriteImage particle.particlesprite,Stepanim(particle.particleimgnum)
`left
If particle.particlexdir=1
particle.particlex=particle.particlex-particle.particlespeedx
EndIf
`right
If particle.particlexdir=2
particle.particlex=particle.particlex+particle.particlespeedx
EndIf
`up
If particle.particleydir=1
particle.particley=particle.particley-particle.particlespeedy
EndIf
`down
If particle.particleydir=2
particle.particley=particle.particley+particle.particlespeedy
EndIf
If particle.particlealpha=1
SpriteAlphaLevel particle.particlesprite,particle.particlelife#
EndIf
particle.particlelife#=particle.particlelife#-particle.particledecrease#
If particle.particlelife#<=0 Or (GetAnimPos(particle.particleimgnum)>=particle.particleef And particle.particleef<>0)
If GetSpriteStatus(particle.particlesprite)=1
DeleteSprite particle.particlesprite
EndIf
deleteanim(particle.particleimgnum)
particle=null
EndIf
EndIf
Next
EndIf
If particle<>null
PositionSprite particle.particlesprite,particle.particlex,particle.particley
EndIf
Next
EndFunction
`delete all particles
Function deleteallparticle()
For Each particle()
particle.particlelife#=0
Next
updateparticle()
EndFunction
Help FileParticle Command list:
createnaptype(Index,Dir,rgb)
dir = Where the image is stored.
rgb = Mask colour the colour which is not shown when the particles are created.
Description
This command is used to load and create a particle type for use in Addparticle.
addparticle(Index,ParticleAlpha,Particlelife,Particlelifed,Particlestartx,Particlestarty,ParticleDirectionx,Particledirectiony,Particlespeedx,Particlespeedy,Particlezposition)
Index = The index of an image.
ParticleAlpha = If set to 1 particle will use alpha.
Particlelife = How long the particle will appear for. If alpha is set to one the max life is 1.
Particlelifed = How much the life will decrease by. If alpha is set to one the max life decrease is 1.
Particlestartx = The X position the particle will start at.
Particlestarty = The Y position the particle will start at.
ParticleDirectionx = The X direction the particle will go. 1 for left, 2 for right.
ParticleDirectiony = The Y direction the particle will go. 1 for up, 2 for down.
Particlespeedx = The speed it will move with along the X.
Particlespeedy = The speed it will move with along the Y.
Particlezposition = The depth of which it is drawn.
Description
This command is used to make a non-animated, alpha or non-alpha particle.
createaptype(Index,dir,FrameWidth,FrameHeight,Rgb)
Index = The index of an image
Dir = Where the file is stored.
FrameWidth = The width of the animated frame.
FrameHeight = The height of the animated frame.
Rgb = The colour which will not be displayed when particles are drawn.
Description
This command is used to add animated particle types.
addanimatedparticle(Index,Rate,ParticleAlpha,Particlelife,Particlelifed,Particlestartx,Particlestarty,ParticleDirectionx,Particledirectiony,Particlespeedx,Particlespeedy,Particlezposition,endframe)
Endframe = The Frame which the animated particle is deleted. Set to 0 for off.
Index = The index of an image.
rate= The Speed of which the particle will animate at.
ParticleAlpha = If set to 1 particle will use alpha.
Particlelife = How long the particle will appear for. If alpha is set to one the max life is 1.
Particlelifed = How much the life will decrease by. If alpha is set to one the max life decrease is 1.
Particlestartx = The X position the particle will start at.
Particlestarty = The Y position the particle will start at.
ParticleDirectionx = The X direction the particle will go. 1 for left, 2 for right.
ParticleDirectiony = The Y direction the particle will go. 1 for up, 2 for down.
Particlespeedx = The speed it will move with along the X.
Particlespeedy = The speed it will move with along the Y.
Particlezposition = The depth of which it is drawn.
Description
This command is used to make a animated, alpha or non-alpha particle.
Updateparticle()
Description
Used to update the particle positions and animated particle images(Requires you to call draworderedsprites in your loop).
deleteallparticle()
Description
Delete all particles.
deletenaptype(index)
Index = The index of the type you wish to delete.
Description
Delete non animated particle types.
deleteaptype(index)
Index = The index of the type you wish to delete.
Description
Delete animated types.
deleteallparticletype()
Description
Delete all particle type.
Feel free to modify, and report any bug if you find any

.
I will also post an example and screenshots later.
[Edit]
I forgot to mention that this requires framesheetanims.pba V0.02