I believe the L4D2 Weapon Pack's sniper rifles used this method of movement-creates-spread, but it was more boolean.
But you could just create an equation that calculates their total velocity and uses it to create spread.
Random functions pulled from some other script i made:
function Player::getTotalVel(%this) //adds up the absolute values of player velocity on X, Y, Z axes and returns the number
{
%vel = %this.getVelocity();
%velx = mAbs(getWord(%vel, 0));
%vely = mAbs(getWord(%vel, 1));
%velz = mAbs(getWord(%vel, 2));
%totalVel = %velx + %vely + %velz;
say(%velx@"+"@%vely@"+"@%velz@"="@%totalVel);
return %totalVel;
}
function Player::getAvgVel(%this) //uses the above function to calculate the average of velocities on 3 axes
{
%totalVel = %this.getTotalVel();
%avgVel = %totalVel/3;
return %avgVel;
}