here's some code if it helps:
SeedRnd MilliSecs() Global ParticleList:TList = CreateList() 'A partical object, handles particals Type TParticle 'set fields Field x:Float,y:Float,a:Float = 1,r:Int 'x cords, y cords, alpha, rotation Field ox:Int,oy:Int 'original x, original y Field img:TImage 'partical image Field dx:Float,dy:Float, da:Float 'x direction, y direction(if it moves at all), direction alpha(if it fades) Field maxdistance:Int 'The max distance it can live/travel, in frames. Field fade:Int 'If the particle fades or remains constant Field z:Int 'the level it's drawn at 'Create a new partical to be updated 'X cord, Y cord, Partical Image, (Direction in degrees, traveling speed, frames that it lasts, if it fades) Method Create:TParticle(_x:Int, _y:Int, _img:TImage, _dir:Int = 0, _speed:Float = 0, frames:Int = 1, _fade:Int = False, _z:Int = 0) ListAddLast(ParticleList,Self) x = _x y = _y ox = _x oy = _y img = _img dx = Sin(_dir) * _speed dy = Cos(_dir) * _speed da = 1.0 / frames maxdistance = frames If _fade fade = True End If End Method 'Update a particle object Method Update:TParticle() x:+dx y:+dy If fade a:-da SetRotation(r) SetAlpha(a) DrawImage img,x,y SetRotation(0) SetAlpha(1) maxdistance:- 1 If Not maxdistance Then Destroy() End If End Method 'Updates all the particles at a Z level Method UpdateAll(z:Int = 0) End Method Method SetPAlpha(alpha:Float) a = alpha End Method Method SetPRotation(rot:Int) r = rot End Method Method Destroy() ParticleList.Remove(Self) End Method Method SetX(_x:Int) x = _x End Method Method SetY(_y:Int) y = _y End Method Method DistanceTraveled:Float() Local returnx:Float=Abs(ox-y) Local returny:Float=Abs(oy-y) Return returnx+returny End Method End Type 'places a partical at said point for said duration, fading optional, as is moving Function EmitPartical(_x:Int, _y:Int, image:TImage, frames:Int, fade:Int = True, dir:Int = 0, speed:Float = 0) Local part:TParticle = New TParticle.Create(_x, _y, image, dir, speed, frames, fade) End Function AppTitle = "Partical trail test" Graphics 800,600,0 SetBlend alphablend 'Create a dot image (our partical) Global dot:TImage = CreateImage(20, 20) DrawOval 0, 0, 20, 20 GrabImage(dot,0,0) While Not KeyHit(KEY_ESCAPE) Cls EmitPartical(MouseX(),MouseY(),dot,10) For Local UpdateParticles:TParticle = EachIn ParticleList UpdateParticles.Update() Next Flip Wend End