Ok, I made something like this a view months ago...
I'm sure there's a smarter way, but this works also:

Code:
function exploevent(PARTICLE *p)
{
p.x+=p.skill_b*time_step;  
p.y+=p.skill_c*time_step;  
p.z+=p.skill_d*time_step;
}

function pef(PARTICLE *p)
{
p.lifespan=100;
p.alpha =100;
p.size=2;
p.bmap = dreckp; 
p.flags |= TRANSLUCENT | BRIGHT | MOVE;
p.event=exploevent;
if(p.skill_a==0)
{
p.skill_b=random(40)-20;
p.skill_c=random(40)-20;
p.skill_d=random(40)-20;
p.skill_a=1;
}}



This makes a firework, but the particels hold their direction. laugh
Hope I helped you a bit. ^^
~greets


Hilf mir, dir zu helfen!