Alright, i had dropped this, but in the middle of working on some 2d particles, i discovered a temporary soloution...
REM Project: Advanced 2D particles by Chris Hanna
REM Created: 12/25/2007 4:18:24 PM
REM
REM ***** Main Source File *****
REM
sync on
sync rate 60
hide mouse
ink rgb(80,80,80),0
box 0,0,2,2
ink rgb(255,255,255),0
dot 1,1
get image 1,0,0,2,2,1
`load image "A2dP.bmp",1,1
CLS
box 0,0,20,20
get image 2,0,0,12,12,1
CLS
particlenum=10
de=5
d=5
a=7
ae=7
dim particlespeed(1000)
dim particledetracterstatus(1000)
dim particleattractorstatus(1000,10)
dim particlelife(400)
color backdrop rgb(0,0,0)
sprite 4,mousex(),mousey(),2
scale sprite 4,50
offset sprite 4,sprite width(4)/2,sprite height(4)/2
do
`emmiter
if rightkey()=1
inc particleemmiterX
endif
if leftkey()=1
dec particleemmiterX
endif
if upkey()=1
dec particleemmitery
endif
if downkey()=1
inc particleemmitery
endif
sprite 2,particleemmiterX,particleemmitery,2
offset sprite 2,sprite width(2)/2,sprite height(2)/2
set sprite priority 2,1
`targetplacement
sprite 4,mousex(),mousey(),2
scale sprite 4,50
offset sprite 4,sprite width(4)/2,sprite height(4)/2
set sprite diffuse 4,100,100,100
`swap between detracter and attractors and clear all
if scancode()=2
detractORatract=1
endif
if scancode()=3
detractORatract=2
endif
if spacekey()=1
for a=5 to 8
if sprite exist(a) then delete sprite a
next a
endif
`attrector placement
if detractORatract=2
if mouseclick()=2
if aordt<0
sprite ae,mousex(),mousey(),2
offset sprite ae,sprite width(ae)/2,sprite height(ae)/2
set sprite diffuse ae,0,255,0
inc ae
aordt=100
endif
endif
endif
if ae>8
ae=7
endif
`detracter placement
if detractORatract=1
if mouseclick()=2
if aordt<0
sprite de,mousex(),mousey(),2
offset sprite de,sprite width(de)/2,sprite height(de)/2
set sprite diffuse de,255,0,0
inc de
aordt=100
endif
endif
endif
if de>6
de=5
endif
dec aordt
`particle creation
if particlenum<300
if mouseclick()=1
sprite particlenum,particleemmiterX,particleemmiterY,1
set sprite priority particlenum,1
set sprite particlenum,0,1
offset sprite particlenum,sprite width(particlenum)/2,sprite height(particlenum)/2
set sprite diffuse particlenum,40,100,200
targetangle#=(atanfull(particleemmiterX-sprite x(4),particleemmiterY-sprite y(4)))+rnd(100)-50
rotate sprite particlenum,-targetangle#
particlespeed(particlenum)=rnd(2)+3
particlelife(particlenum)=100
inc particlenum
endif
endif
if particlenum=250
particlenum=10
endif
`particle mangement
for p=10 to 300
if sprite exist(p)=1
move sprite p,particlespeed(p)
`detractors
Detractor(5,p)
Detractor(6,p)
`attractors
Acctractor(7,p)
Acctractor(8,p)
`bounries
if sprite x(p)>screen width() then d=1
if sprite x(p)<0 then d=1
if sprite y(p)<0 then d=1
if sprite y(p)>screen height() then d=1
alpha#=(255*particlelife(p))/100
set sprite alpha p,alpha#
if sprite alpha(p)=0 then d=1
particlelife(p)=particlelife(p)-1
if d=1
delete sprite p
particledetracterstatus(p)=0
particleattractorstatus(p)=0
d=0
endif
endif
next p
text 0,0,"leftclick-spawn particles"
text 0,12,"arrowkeys-move particle emmiter"
text 0,24,"spacekey-place particle target"
text 0,36,"mode:"+str$(detractORatract)
text 0,48,"FPS:"+str$(screen fps())
sprite 9,0,0,2
scale sprite 9,20000
set sprite diffuse 9,1,1,1
set sprite alpha 9,140
sync
loop
Function Acctractor(a,p)
if sprite exist(a)
DistXa# = ABS(sprite x(p) - sprite x(a))
DistYa# = ABS(sprite y(p) - sprite y(a))
Dista# = SQRT( (DistXa#*DistXa#)+(DistYa#*DistYa#) ) : `Hypotenuse
if Dista#<100
if particleattractorstatus(p,a)=0
atopangle#=atanfull(sprite x(p)-sprite x(a),sprite y(p)-sprite y(a))
rotate sprite p,-atopangle#
particleattractorstatus(p,a)=1
endif
else
particleattractorstatus(p,a)=0
endif
endif
if sprite exist(a)
circle sprite x(a),sprite y(a),100
endif
endfunction
Function Detractor(d,p)
if sprite exist(d)
DistXd# = ABS(sprite x(p) - sprite x(d))
DistYd# = ABS(sprite y(p) - sprite y(d))
Distd# = SQRT( (DistXd#*DistXd#)+(DistYd#*DistYd#) ) : `Hypotenuse
if Distd#<100
if particledetracterstatus(p)=0
dtopangle#=atanfull(sprite x(p)-sprite x(d),sprite y(p)-sprite y(d))
rotate sprite p,-dtopangle#+180+rnd(20)-10
particledetracterstatus(p)=1
endif
else
particledetracterstatus(p)=0
endif
endif
if sprite exist(d)
circle sprite x(d),sprite y(d),100
endif
Endfunction
All the sprites you want to see have a priority of 1
there is a back sprite with a priority of 0. this sprite is constantly redrawn with a high alpha value, so its a little bit see through, but not much.
Since it has a high alpha value, it covers up the trails the other sprites leave behind.
Im sure that there are still trails left, but i cant see them.
The code above is a 2d particles test, but focus in on the motion blur, pay no attention to the suckyness of the particles...