Weapon Spread (Fallout: New Vegas)

Spread is the value that determines by how much your shots can deviate from intended targets (the center of the cross hair). The higher the spread, the more inaccurate weapons are.

Settings
These settings all affect the player's spread. Now the total spread consists of two major factors, the player's spread (from here on referred to as PSp) and the weapon's spread (referred to as WSp). The PSp is very variable, being affected by the players weapon skill, movement, arms and much more. Here is an overview of all the factors that affect PSp: The WSp is completely static and based on the weapon's "Min Spread" value. It is affected by: Many people probably have also noticed the "Spread" value in weapon tabs. That value does nothing at all. It didn't do anything in FO3 either, unless you re-enabled spread penalties based on weapon conditions. I'm not sure if it's possible to enable that in FNV, haven't really looked into that.
 * Weapon Skill
 * Perk effects
 * Crouching
 * Aiming control pressed, be it Scope/Iron Sights/Weapon zoom
 * Standing/Walking/Running
 * Using a 1 or 2 handed weapon and having 1 or 2 arms crippled
 * Weapon's required strength
 * Weapon's required skill
 * Weapon Mods with Decrease Spread effects, or as a byproduct of Split Beam effects.
 * Ammo Effects that alter spread. These used to alter PSp before an official patch corrected it.

Now what the PSp does is influence your character's hand sway. The higher the PSp the more your hand will sway around, causing your shots to go off target. The sway you experience while using a weapon's scope is exactly the same as your hand sway. The WSp on the other hand simply influence at what angle your bullet will leave the gun barrel, it will not cause any sway of the scope or player's hand.

Functions
Following are the calculations that are used to determine the player's exact spread:

Notes:
 * Walking and Running Penalties exclude each other.
 * As do Arm Condition Penalties.
 * "1 Handed" weapons are those that return GetWeaponAnimType == 4, on the actor, i.e. pistols. The ArmConditionPenalty to them only applies when having both arms crippled (fCrippledArms1HSpreadPenalty), or when having the right one crippled (fCrippledArm1HSpreadPenalty). The game doesn't consider the left arm to be holding them, not even when aiming in ironsights.

Then there's the weapon requirements: if Weapon Required Strength > Player Strength StrReqPenalty = (Weapon Required Strength - Player Strength{max 10}) * fWeapStrengthReqPenalty The Weapon's Required Strength can be lowered by perks with the Modify Weapon Strength Req entry point. Skill requirements don't work correctly: if Weapon Required Skill > Player Skill SkillReqPenalty = (Weapon Required Skill - Player Skill{max 100}) * 0.1 * fWeapStrengthReqPenalty fWeapSkillReqPenalty does not appear to have any effect in vanilla game, its use in the skill requirement formula somehow usurped by fWeapStrengthReqPenalty.

NOTE: the game's loading screens claim that requirements also affect melee weapons' attack speed, but this does not appear to be the case. Weapon requirements do not seem to affect melee weapons in any capacity. Strength requirements do affect the throwing distance of thrown weapons like spears, etc. but not grenades.

Perks
There are two perk entry point functions that can affect PlayerSpread:
 * The main one is Calculate Gun Spread (CGS, entry function nº 34), which a bit counter-intuitively affects PlayerSpread exclusively, not WeaponSpread at all. This entry point is applied after all other parts of the formula, and can lower PlayerSpread under the fMinGunSpreadValue setting.
 * The other one is Modify Aiming Move Speed, which alters the RunningPenalty and WalkingPenalty parts of the formula. The penalty for running or walking is divided by the value of Modify Aiming Move Speed, however it cannot divide below 1.

So, the final spread value for the player with perks ends up like: PlayerSpread before CGS = max [fMinGunSpreadValue, SkillBonusMult * (UnaimedPenalty + {(WalkingPenalty OR RunningPenalty) / Modify Aiming Move Speed multiplier} + StandingPenalty + ArmConditionPenalty + SkillReqPenalty + StrReqPenalty)] PlayerSpread = GetPerkModifier 34 (PlayerSpread before CGS), weapon ref

Weapon Spread is: WeaponSpread = WeaponMinSpread - WeaponModBonus A from Decrease Spread mods

Player Final Spread is: FinalSpread = WeaponModBonus B from Split Beam mods * (Ammo Modifier * ((PlayerSpread + WeaponSpread) * 0.0175))

If the attacker is an actor and not the player, the Final Spread is: FinalSpread = WeaponModBonus B from Split Beam mods * ((Ammo Modifier * ((PlayerSpread + WeaponSpread) * 0.0175)) * fNPCMaxGunWobbleAngle * 0.0175 + (Ammo Modifier * ((PlayerSpread + WeaponSpread) * 0.0175)))

Other
A few settings can affect spread more indirectly: