This is as close as I can get. Not quite the way JCL suggested, but I couldnt get his suggestion to work at all.

This is still a bit "twitchy" when camera movement/rotation starts but that MAY be due to an over-abundance of particles,
the machine Im testing this on is a dog-box....
Code:
//NO changes in any other functions but these two...

function flame_alphafade(PARTICLE *p)
{
	start_color[0] = 200;
	start_color[1] = 180;
	start_color[2] = 100;
	
	end_color[0] = 128;
	end_color[1] = 50;
	end_color[2] = 50;
	
	vec_lerp(current_color[0], end_color[0], start_color[0], p.lifespan / flame_lifespan);

	p.red = current_color[0];
	p.green = current_color[1];
	p.blue = current_color[2];
	
	p.alpha = p.lifespan / flame_lifespan * 100;// * 0.3;
	if (p.alpha <= 0) p.lifespan = 0;
	
	
	VECTOR tVec;
	vec_diff(tVec, p.x, p.skill_x);                             //subtract Old camera position
	vec_rotate(tVec, vec_diff(NULL, camera.pan, p.skill1));     //rotate by old camera pan/tilt/roll
	vec_add(tVec, camera.x);    //add new camera position
	vec_set(p.x, tVec);         //position particle accordingly    
	//
	vec_set(p.skill1, camera.pan);	//set new LAST camera pan/tilt/roll
	vec_set(p.skill_x, camera.x);	//set new LAST camera position
}

// particle function: generates a fading explosion into vel direction
function effect_flame(PARTICLE *p)
{
   var temp[3];
   flame_randomize(temp, 1);
   vec_add (p.vel_x, temp);
   p.bmap = flame_particle;
   p.flags |= (BRIGHT | MOVE | TRANSLUCENT);
   p.lifespan = flame_lifespan;
   p.size = 3;
   vec_set(p.skill1, camera.pan);	//set LAST camera pan/tilt/roll
   vec_set(p.skill_x, camera.x);	//set LAST camera position
   p.event = flame_alphafade; // change to a shorter, faster function
}





"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial