View difference between Paste ID: NCCSwZap and 0syAnC9X
SHOW: | | - or go back to the newest paste.
1
The scope mouse sensitivity multipliers are completely incorrect for the different scope magnifications present in the game.  This severely impacts muscle memory for making shots while zoomed in between different scopes.
2
3
Currently, it seems that the DefaultFOV is used together with a multiplier (on a per-sight basis) to determine the zoomed in FOV for a scope.
4
The mouse sensitivity is also adjusted the same amount.  For example, if a scope is supposed to adjust the FOV to 35% of the original FOV, then it reduces
5
the mouse sensitivity to this amount as well.  But FOV is not linear in the view space!  So this will not result in similar feel.  To keep the same "sensitivity" at the zoomed in level, you must divide the existing sensitivity by the change in focal length.  Currently, this is not what happens, and as a result every single sight feels different zoomed in.
6
7
Example: zooming in on a "1x" sight, which decreases FOV by 10% in the game (not actually 1x), actually cuts the sensitivity by nearly half.  So your zoomed in muscle memory is completely different from your hipfire memory. 
8
9-
A "2x" scope (if it were to exist) should decrease the sensitivity by half.  A "3x" scope should decrease the sensitivity by a third.
9+
A "2x" scope (if it were to exist) should decrease the sensitivity by half.  A "3x" scope should decrease the sensitivity to a third.
10
Using the scheme implemented in game, if a scope has an FOV multiplier N, where 0 < N <=1, then the ScopeFOV is:
11
12
ScopeFOV = DefaultFOV*N
13
14
and the sensitivity is:
15
16
HipfireSens = MouseMultiplierSensitivity * MouseMultiplierSensitivitySlider
17
ScopeSens = HipfireSens * XFactorAiming * XFactorAimingSlider * N
18
19
Where it really should be (where cot denotes cotangent):
20
21
DefaultFocalLength = cot(DefaultFOV/2)  (DefaultFOV is divided by 2 because we're talking about the angle from the center of the screen to the top edge)
22
ScopeFocalLength = cot(ScopeFOV/2) (ScopeFOV from the original calculation)
23
24
Why the cotangent?  Consider the following diagram of the screen (apologies for poor ASCII art):
25
26
                  /   |
27
           /          |
28
     /                | y
29
/  t                  |
30
------------------
31
           x
32
33
Assume y spans from the middle of the screen to the top edge and x is the focal length of the in game camera.  t is the angle between the middle of the screen
34
and the top edge of the screen (the vertical FOV divided by 2).
35
The cotangent of t will give the ratio of x to y.  Assuming y is 1, as it scales linearly with vertical resolution anyway, we get cot y = x, the focal length.
36
37
Now, we can determine the magnification for the scope:
38
39
ScopePower = ScopeFocalLength/DefaultFocalLength
40
41
And finally, the correct multiplier for the scope sensitivity:
42
43
ScopeSensCorrect = HipfireSens / ScopePower
44
45
So, for an ACOG scope which is supposed to reduce FOV to 35% of the original, we would obtain the following values, assuming a DefaultFOV of 60:
46
47
DefaultFOV = 60
48
ScopeFOV = 21 (from 60 * 0.35, the multiplier for ACOG)
49
50
DefaultFocalLength = cot(60/2) = cot(30) = 1.732051 (approximately)
51
ScopeFocalLength =  cot(21/2) = 0.540569 (approximately)
52
53
ScopePower =  1.732051 / 0.540569 = 3.204125 (approximately)
54
55
Indeed, the ACOG actually has approximately 3.2x magnification at 60 FOV.  You can test this in game yourself. 
56
And the FOV of the ACOG, like all scopes, will vary depending on your DefaultFOV value.  Choosing smaller DefaultFOVs will result in more
57
scope zoom than higher DefaultFOVs.
58
59
Finally:
60
61
ScopeSensCorrect = HipfireSens / 3.204125
62
63
This will achieve the correct sensitivity for the scope using the game's given FOV.
64
65
Examples of games that implement this correctly are Battlefield 4, Battlefield 1, Battlefield V, Apex Legends, and Kovaak's FPS Aim Trainer.
66
67
To test my theory at 74 DefaultFOV, use the following settings in the config:
68
69
DefaultFOV=74
70
XFactorAiming=0.015509
71
72
Set the ADS slider to 57 when using ACOG and 94 when using a 1x scope.  This will result in very similar feel between the two scopes, despite the radically different zoom levels.
73
74
Now that Kali is in the game, with a 5x and 12x variable optic, switching between these slider values will no longer become practical.
75
76
Some simple suggestions to fix this:
77
78
* Provide sliders for all scope magnification levels in game, including 1x, 2.5x, 3x, 5x, and 12x
79
* Implement the above formula for mouse sensitivity changes between different scopes
80
* Provide finer grained XFactorAiming values in the config file, one per scope magnification (1x, 2.5x, 3x, 5x, and 12x)
81
82
Thank you.