I think it would be better to change the way the units can miss their target.
Actually, each weapons has a probability to miss (depending on the distance), and at each shoot, a random generator decides if the round will shoot the ennemy or not. If yes, the shoot is perfect, but if not, the round goes randomly in one of the 8 cases around the target. So, an unit can shoot a moving target as well as an immobile one, no care if it is big or small (cannon hardpoint or tank trap, Dragon body or Cyborg) with the same probability !
I propose, instead of this, to randomly choose, at each shoot, the deviation angle and the direction of this deviation (between 0 and 360°) of the round, which will be independant of the distance of the target. These values could be obtained with these kind of formulas : Adev = Amax*(R^(1/S)) and Ddev = 360*R
with Adev and Ddev the angle and direction of the deviation, Amax the maximum deviation angle and S the spread of the shoots (both defined for each weapon and moduled with the researches) and R a random number between 0 and 1.
So, if Amax and S are small (for example with Amax=3° and S=0.5), the weapon will be more accurate than if Amax=10 and S=1.
And when the target is very close, there would be no reason to miss it !


