Much better would be to use a short function instead of an sqs..
And never ever 'catch' the fired bullet in the script/function, always 'catch' it in the eventHandler..
This way even under FPS of 1 the bullet gets 'caught', when 'catching' it in a script when the FPS is lower than 15 the chances of actually 'catching' it become pretty low (lotsa experience with this..)..
The init.sqs
myTAG_dispersion = preprocessFile "dispersion.sqf"
The eventHandler:
this addEventHandler ["fired",{_bul = (nearestObject [(vehicle this), _this select 4)]; [_this select 0,_bul,(velocity _bul),(speed _bul)] call myTAG_dispersion}]
The dispersion.sqf:
private ["_sht","_prj","_vel","_spd","_dispA","_dispB"];
_sht = _this select 0;
_prj = _this select 1;
_vel = _this select 2;
_spd = _this select 3;
_dispA = (_spd*(0.03-(skill _sht)/100));
_dispB = _dispA*2;
_prj setVelocity [(_vel select 0) - _disp + random(_dispB),(_vel select 1) - _disp + random(_dispB),(_vel select 2) - _disp + random(_dispB)];
Not tested so no guarantees it will work 'out of the box'..
:2c: