User:SnakeChomp/Formula Formatting test
Spread = PerkModifiers(IronSightsBonus * CrouchBonus * (ConditionPenalty + SkillBonus) * (WalkPenalty + RunPenalty) + ArmPenalty)
PerkModifiers is a function that modifies the input value using any perks active on the actor that have a "Calculate Gun Spread" Entry Point and returns the result.
IronSightsBonus = fGunSpreadIronSightsBase + fGunSpreadIronSightsMult * IsUsingIronSights
CrouchBonus = fGunSpreadCrouchBase + fGunSpreadCrouchMult * IsSneaking
ConditionPenalty = fGunSpreadCondBase + fGunSpreadCondMult * WeaponCondition
SkillBonus = fGunSpreadSkillBase + fGunSpreadSkillMult * ActorSkillValue
WalkPenalty = fGunSpreadWalkBase * !IsRunning + fGunSpreadWalkMult * IsWalking
- !IsRunning means that if IsRunning is 1, !IsRunning is 0, and vice versa.
RunPenalty = (fGunSpreadRunBase + fGunSpreadRunMult) * IsRunning
ArmPenalty = fGunSpreadArmBase + fGunSpreadArmMult * ArmCondition
IsUsingIronSights is 1 if the actor is aiming with iron sights and 0 otherwise.
IsSneaking is 1 when the actor is sneaking and 0 otherwise.
WeaponCondition is the condition of the weapon equipped by the actor
- This value is 1.0 at 100%, 0.5 at 50% and 0.0 at 0%
ActorSkillValue is the actor's skill value for the skill used by the weapon.
- The skill value used is specified on the weapon form
IsRunning is 1 if the actor is running and 0 otherwise.
IsWalking is 1 if the actor is walking and 0 otherwise.
ArmCondition is the condition of the actor's arm. A value of 0 indicates a crippled arm, a value of 1 indicates a non crippled arm.
- Note: It is not known at this time whether only the condition of the weapon arm (right arm) matters, or if the condition of both arms is used.
- PerkModifiers is a function that modifies the input value using any perks active on the actor that have a "Calculate Gun Spread" Entry Point and returns the result.
- IronSightsBonus = fGunSpreadIronSightsBase + fGunSpreadIronSightsMult * IsUsingIronSights
- CrouchBonus = fGunSpreadCrouchBase + fGunSpreadCrouchMult * IsSneaking
- ConditionPenalty = fGunSpreadCondBase + fGunSpreadCondMult * WeaponCondition
- SkillBonus = fGunSpreadSkillBase + fGunSpreadSkillMult * ActorSkillValue
- WalkPenalty = fGunSpreadWalkBase * !IsRunning + fGunSpreadWalkMult * IsWalking
- !IsRunning means that if IsRunning is 1, !IsRunning is 0, and vice versa.
- RunPenalty = (fGunSpreadRunBase + fGunSpreadRunMult) * IsRunning
- ArmPenalty = fGunSpreadArmBase + fGunSpreadArmMult * ArmCondition
- IsUsingIronSights is 1 if the actor is aiming with iron sights and 0 otherwise.
- IsSneaking is 1 when the actor is sneaking and 0 otherwise.
- WeaponCondition is the condition of the weapon equipped by the actor
- This value is 1.0 at 100%, 0.5 at 50% and 0.0 at 0%
- ActorSkillValue is the actor's skill value for the skill used by the weapon.
- The skill value used is specified on the weapon form
- IsRunning is 1 if the actor is running and 0 otherwise.
- IsWalking is 1 if the actor is walking and 0 otherwise.
- ArmCondition is the condition of the actor's arm. A value of 0 indicates a crippled arm, a value of 1 indicates a non crippled arm.
- Note: It is not known at this time whether only the condition of the weapon arm (right arm) matters, or if the condition of both arms is used.
PerkModifiers is a function that modifies the input value using any perks active on the actor that have a "Calculate Gun Spread" Entry Point and returns the result.
IronSightsBonus = fGunSpreadIronSightsBase + fGunSpreadIronSightsMult * IsUsingIronSights
CrouchBonus = fGunSpreadCrouchBase + fGunSpreadCrouchMult * IsSneaking
ConditionPenalty = fGunSpreadCondBase + fGunSpreadCondMult * WeaponCondition
SkillBonus = fGunSpreadSkillBase + fGunSpreadSkillMult * ActorSkillValue
WalkPenalty = fGunSpreadWalkBase * !IsRunning + fGunSpreadWalkMult * IsWalking
- !IsRunning means that if IsRunning is 1, !IsRunning is 0, and vice versa.
RunPenalty = (fGunSpreadRunBase + fGunSpreadRunMult) * IsRunning
ArmPenalty = fGunSpreadArmBase + fGunSpreadArmMult * ArmCondition
IsUsingIronSights is 1 if the actor is aiming with iron sights and 0 otherwise.
IsSneaking is 1 when the actor is sneaking and 0 otherwise.
WeaponCondition is the condition of the weapon equipped by the actor
- This value is 1.0 at 100%, 0.5 at 50% and 0.0 at 0%
ActorSkillValue is the actor's skill value for the skill used by the weapon.
- The skill value used is specified on the weapon form
IsRunning is 1 if the actor is running and 0 otherwise.
IsWalking is 1 if the actor is walking and 0 otherwise.
ArmCondition is the condition of the actor's arm. A value of 0 indicates a crippled arm, a value of 1 indicates a non crippled arm.
- Note: It is not known at this time whether only the condition of the weapon arm (right arm) matters, or if the condition of both arms is used.
Game settings used by this formula[edit | edit source]
Setting | Default | Description |
fGunSpreadIronSightsBase | 1 | Used when calculating IronSightsBonus |
fGunSpreadIronSightsMult | -0.65 | Used when calculating IronSightsBonus |
fGunSpreadCrouchBase | 1 | Used when calculating CrouchBonus |
fGunSpreadCrouchMult | -0.4 | Used when calculating CrouchBonus |
fGunSpreadCondBase | 0 | Used when calculating ConditionPenalty |
fGunSpreadCondBase | 0 | Used when calculating ConditionPenalty |
fGunSpreadSkillBase | 0.5 | Used when calculating SkillBonus |
fGunSpreadSkillMult | -0.0050 | Used when calculating SkillBonus |
fGunSpreadWalkBase | 1 | Used when calculating WalkPenalty |
fGunSpreadWalkMult | 0 | Used when calculating WalkPenalty |
fGunSpreadRunBase | 1 | Used when calculating RunPenalty |
fGunSpreadRunMult | 0 | Used when calculating RunPenalty |
fGunSpreadArmBase | 0.5 | Used when calculating ArmPenalty |
fGunSpreadArmMult | -0.5 | Used when calculating ArmPenalty |
Minimum Spread[edit | edit source]
The gun spread value used by the game engine will never be less than the "Min Spread" value specified on the weapon form for the equipped weapon. If the value given by the formula is less than the "Min Spread" value, the value from the formula will be ignored and the "Min Spread" value for the weapon will be used instead.
Most weapons have a non zero value for "Min Spread". Therefore, no matter how skilled you are with the weapon or what perks you have, your weapon will always have a slight amount of spread. One notable exception to this are sniper rifles, which have 0 minimum spread, allowing weapon spread to be eliminated with a small guns skill of 100.
Notes[edit | edit source]
This formula has been derived by systematically tweaking the settings using the console and observing the effects on the magnitude of weapon sway.
Spread is also taken into account when determining VATS accuracy, and is the primary way that weapon skill affects VATS accuracy.
The default value of 1 for fGunSpreadWalkBase is important in this formula. Without it, the (WalkPenalty + RunPenalty) part of the equation would be 0 when not moving, negating the other spread calculations.
The "spread" value on the weapon form is ignored by the game engine. Only the "min spread" value is used.
Game settings not used by this formula[edit | edit source]
These are variables that should logically have an impact on this formula but do not appear to have any effect on the player character's gun spread when tweaked. Further research into these settings should be performed. Perhaps they only effect NPC gun spread?
- fGunSpreadHeadMult
- fGunSpreadHeadBase
- fGunSpreadNPCArmBase
- fGunSpreadNPCArmMult
- fNPCMaxGunWobbleAngle
Other notable game settings[edit | edit source]
- fGunWobbleMultScope
- Default value: 1.0
- This setting controls how much scoped weapons will wobble when aiming with the scope, but it does not modify the weapon spread. If you modify some game settings to give the sniper rifle considerable wobble and set this setting to 0, the cross hairs will not wobble when you use the scope, but the bullets will still fly off course because the gun is still wobbling (you just don't notice it anymore). Because of this, you should avoid modifying this setting, or else you will confuse players.