Weapon Spread is the value that determines by how much fired shots can deviate from intended targets (the center of the crosshair). The higher the spread, the more inaccurate weapons are.
Spread Calculation
Setting | Default | Description |
---|---|---|
fRunningSpreadPenalty | 0.2 | Used when calculating RunPenalty |
fStandingSpreadPenalty | 0.1 | Used when calculating StandingPenalty |
fUnaimedSpreadPenalty | 0.2 | Used when calculating UnaimedPenalty |
fWalkingSpreadPenalty | 0.1 | Used when calculating WalkingPenalty |
fWalkingSpreadPenalty | 0.1 | Used when calculating WalkingPenalty |
fCrippledArm1HSpreadPenalty | 0.2 | Used when calculating ArmConditionPenalty |
fCrippledArm2HSpreadPenalty | 0.4 | Used when calculating ArmConditionPenalty |
fCrippledArms1HSpreadPenalty | 0.4 | Used when calculating ArmConditionPenalty |
fCrippledArms2HSpreadPenalty | 0.6 | Used when calculating ArmConditionPenalty |
fWobbleToSkillConversion | 0.5 | Used when calculating SkillBonusMultiplier |
fMinGunSpreadValue | 0.01 | Used when calculating PlayerSpread |
fWeapStrengthReqPenalty | 0.025 | How much each point of STR under the weapon's requirement affects spread |
fWeapSkillReqPenalty | 0.01 | How much each point of the associated skill under the weapon's requirement affects spread |
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:
- 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
The WSp is completely static and based on the weapon's "Min Spread" value. It is affected by:
- 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.
Many people probably have also noticed the "Spread" value in weapon tabs. That value does nothing at all. It didn't do anything in Fallout 3 either, unless spread penalties based on weapon conditions were re-enabled.
Now what the PSp does is influence the character's hand sway. The higher the PSp the more their hand will sway around, causing their shots to go off target. The sway experienced while using a weapon's scope is exactly the same as the hand sway. The WSp on the other hand simply influence at what angle a 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:
Function | Formula |
---|---|
UnaimedPenalty | fUnaimedSpreadPenalty * !isAiming |
RunningPenalty | fRunningSpreadPenalty * isRunning * isMoving |
WalkingPenalty | fWalkingSpreadPenalty * !isRunning * isMoving |
StandingPenalty | fStandingSpreadPenalty * !isSneaking |
ArmConditionPenalty | fCrippledArm1HSpreadPenalty * RIGHT Arm Crippled * isUsing1HWeapon |
fCrippledArm2HSpreadPenalty * EITHER Arm Crippled * isUsing2HWeapon | |
fCrippledArms1HSpreadPenalty * BOTH Arms Crippled * isUsing1HWeapon | |
fCrippledArms2HSpreadPenalty * BOTH Arms Crippled * isUsing2HWeapon | |
SkillBonusMultiplier | 1 - (fWobbleToSkillConversion * Player Skill{max 100} / 100) |
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:
Setting | Default | Description |
---|---|---|
fGunWobbleChaseDriftTime | 0.75 | ??? |
fGunWobbleMultScope | 1.0 | See the description in the Fallout 3 formula. This acts like a multiplier to weapon sway while looking through a scope, but does NOT affect the real weapon sway when firing. It should be left as 1, unless handicaps when scope aiming are desired. |
fNonAttackGunWobbleMult | 0.5 | This is the multiplier to weapon sway while the player is NOT attacking, i.e. pulling the trigger. This can help to make high values of PSp less jarring in terms of sway animations while just having the weapon out. |
fNPCMaxGunWobbleAngle | 15.0 | This caps the maximum amount of PSp for actors other than the player, as per the final conversion to degrees. |
Attribution
This article is licensed under the Creative Commons by-sa license. It uses material from the GECK Wiki article Gun Spread Formula.