To bump this thread, and rehash this stuff again.
Duke: Having not fired an automatic weapon myself, are you confirming there that the grouping showed no gradual trend upwards. I was expecting with a gun firing in a burst, that the recoil of each shot would raise the barrel a fraction each time?
What i think the OP was hinting at:
For any shot, call the a function to calculate the first shot based on soldier's skill, firing mode and the weapon's general accuracy. So in theory, whether you fired a snap shot, burst shot or full auto; the chance of hitting on the first round is equal. But an aimed shot would have a bonus modifier to improve accuracy.
Subsequent shots would then call another recursive function or loop, where by the placement of each additional shot is calculated by moving the original path up a random amount and to the side a random amount. The random amounts would again be scaled by the weapon's accuracy and user's skill. The result would be a gradual zig zag pattern going upwards. On that note, any accuracy reported to the user should always be the first shot. I believe a method like this was used counterstrike for gun accuracy.
EDIT: Having looked into the combat.c code, I noticed that the two spread values included for each weapon correspond to the yaw & pitch deviation calculations. It could be possible to modify that method, and recurse/loop the subsequent shots off the previous shots yaw & pitch. Not 100% confident how it affects other methods in that code. Furthermore, it would require some weapon rebalancing and potentially change the combat tactics (multiple shots no longer as effective at long range).