Hey, I just wanted to tell you all about Uniform Soldier Aiming, which is in CTE right now, and will be put into vanilla soon with the next patch.
I've been the guy campaigning about this from the start and I've been in dialogue with the dev who made it "jjju" months before CTE came out, and I'm still talking to him about Uniform Soldier Aiming now, so I know my stuff!
What's Uniform Soldier Aiming?
Uniform soldier aiming (UsA for short) is a new, optional way for the game to set your sensitivity factor when using scopes, based on the sight FOV, to try to give you the most uniform feeling sensitivity, regardless of the magnification.
The original requested purpose of the feature was either to provide the best sensation of sensitivity, or the best practical sensitivity for muscle memory, but it turns out both are one and the same.
Some notes about FOV
BF4 vanilla uses a hor+ FOV system. That means it takes the FOV angle you tell it to use, converts it from a horizontal angle to a vertical angle based on a 4:3 screen, then uses that vertical FOV angle to render the game. That means if your screen is wider than a 4:3 screen, your horizontal FOV is actually wider. Most games use this system so don't worry about it.
BF4 CTE and eventually Vanilla are going to move to a dual hor+ and vertical system where you see what vertical value your horizontal value becomes. Right now CTE is using this bar. The idea behind using both is because having the vertical value makes it easier for players to do calculations, which is exactly what you do here on symthic!
All the FOV values obtained from the files are vertical FOV numbers
The iron sight and RDS sights have a FOV value in the files of 40 and 50 respectively, however this is not necessarily true if FOV scaling is enabled. If FOV scaling is enabled, then for these sights, the ADS FOV equals Hip_FOV * (Sight_FOV_Value / Default_Hip_FOV). Default Hip FOV is 55 vertical.
So if you have a vertical FOV of 74 (which is current vanilla FOV 90) and you are using iron sights, your ADS FOV is 75 * (50/55) = 68.2 vertical
How CTE UsA works
To use UsA it has to be turned on in the control menu.
The UsA formula is tweakable with a "coefficient" variable (which I will call C in the maths), which can be edited by changing the value of "GstInput.SoldierUniformAimingCoefficient" in the setting file.
When the coefficient C = 0, then the formula used to calculate a sight's sensitivity factor is: SensFactor = tan(ZoomFov/2)/tan(HipFov/2)
At this setting, the formula acts to make the "mouse velocity to linear screen center velocity ratio" constant. What that means is that if you could measure the velocity of the image where it passes the screen center, when moving the mouse at a constant speed, between two different FOVs, there would be no change.
When the coefficient is C > 0, then the formula is SensFactor = atan(tan(ZoomFov/2)*C) / atan(tan(HipFov/2)*C)
To understand where this formula comes from, the original idea was to use the formula ZoomFov/HipFov to synchronize the "mouse distance to half FOV angle turn" number to make it constant for all scopes. What that would do would be to make it so that it would take the same mouse movement to move something at the top edge center of your screen to your cross hairs, no matter what FOV you were at.
When this formula was converted to work on synchronizing the horizontal mouse distance to half FOV angle turn number, the following equation was obtained:
SensFactor = atan(tan(ZoomFov/2)*W/H) / atan(tan(HipFov/2)*W/H)
Where W is screen Width
And H is Screen Height
Which means the current formula replaces W/H with C.
So if C = W/H, the horisontal half FOV turn distance will be constant.
By changing H to any distance you want, you can effectively calculate the value needed to synchronize the mouse distance needed to move something any screen distance away from your cross-hairs to the screen center across all FOVs
If you haven't figured out already, the sensitivity factor is another thing which multiplies you mouse position change to define your angular position change.
Tuning the Coefficient
The new default for the coefficient is 1.333333, which is 4/3, however the old default used to be 0, so you will need to manually edit the setting, or reset your control settings to take advantage of it.
Here I'll discuss the effects of various C values to help you get an idea of their effect.
C = 0 (Old default)
C = 0 looked promising for a constant sensation of sensitivity on paper, but not in practice.
At C = 0, high FOV sights work fine, but low FOV (High magnification) scopes feel less sensitive. This isn't necessarily a bad thing if you are looking for it.
There may still be some merit in this formula for possible better aiming at things near the screen center, but it's dubious.
C = 4/3 (New default)
This is the best working value we have found so far. Incidentally, it's the same value used in counter-strike games!
C = 4/3 makes all the scopes feel the same speed, and should provide a good sensitivity relationship to maintain drag shooting muscle memory across sights too.
C = 1
C = 1 makes the mouse distance to half vertical FOV synchronized.
C = 1 works very well enough for sensitivity sensation, but may become inaccurate for muscle memory at the left and right extremes of the screen.
C = W/H
Setting C to your aspect ratio on a wide angle screen to synchronize your horizontal angles may work, but might not be optimal.
It will work fine on high FOV sights as always, but at low FOV high zoom sights, it will feel a bit faster than normal.
Try it out if you want.
Soldier Zoom Sensitivity
Zoom sensitivity allows you to define how great your ADS sensitivity is in relation to your hipfire sensitivity. It works with UsA on or off.
Basically it's just a percentage set in the menu which all your ADS sensitivities will be multiplied by to get your new value.
Soldier Zoom Sensitivity Advanced options
In the settings file, there are the following new variables in CTE.
GstInput.SoldierZoomSensitivityCloseMagnRange 1.000000
GstInput.SoldierZoomSensitivityCloseRange 1.000000
GstInput.SoldierZoomSensitivityIronSight 1.000000
GstInput.SoldierZoomSensitivityLongRange 1.000000
GstInput.SoldierZoomSensitivityMediumRange 1.000000
GstInput.SoldierZoomSensitivityVeryLongRange 1.000000
All of these variables act the same as Soldier Zoom Sensitivity, but for specific classes of scopes, so if you don't like any of the current sensitivity options available, you can tune each set of sights how you like.
What's making it to vanilla?
All the options seen here will make it to vanilla eventually, probably exactly as they are right now, however, the next patch to go out unfortunately has an outdated version of UsA where the Coefficient is locked to 0 and not present in the settings file, so the sensitivity when using UsA won't feel perfect just yet.
Also note that all the stuff that involves file editing isn't available to console users, so that means no coefficient tuning (locked to 4/3 by default once the second vanilla update fixes it), and no per scope class sensitivity options.
But I don't want it!
You don't have to use it, it's all optional.
And if you don't like the feel of UsA because you are used to the old RDS sensitivity, you can tune your Zoom Sensitivity to make them the same, and let UsA deal with all the other sights.