Welcome to symthic forums! We would love if you'd register!
You don't have to be expert in bit baking, everyone is more than welcome to join our community.

You are not logged in.

Hey! If this is your first visit on symthic.com, also check out our weapon damage charts.
Currently we have charts for Battlefield 3, Call of Duty: Black Ops 2, Medal of Honor: Warfighter and Call of Duty: Modern Warfare 3

Nick 30075

2manyPosts4me

(1,936)

  • "Nick 30075" started this thread

Posts: 9,753

Date of registration
: Jan 7th 2012

Platform: PC

Location: 'Murrica

Battlelog:

Reputation modifier: 19

  • Send private message

1

Saturday, January 12th 2013, 7:59am

Spread and Recoil Recovery

For those of you reading this, expect a somewhat heavily mathematical post. Iíll give a summary at the end so if you donít want to see my math or the programs in MATLAB I wrote to automate this process, feel free to skip to the summary.

íHow I got to thisí


Writing this, I donít expect this to be nearly as important or interesting as Rezalís work on the Foregrip attachment, but Iíd like to get my work on this out there in case someone wants to use it as a tool for further work.

I derived the spread reset equation last semester trying to figure out the AN-94ís best rate of fireóthe one at which it maintains its perfect accuracy (which I think I calculated with .12 as the spread increase value, now that I think about it). I noted at the time that the resulting average rate of fire didnít depend on the amount of rounds fired. I found it interesting but didnít revisit it.

Later on, while writing my SKS review, I needed to derive the equation for its natural recoil recovery rates depending on its attachment structure. I decided to automate this process and wrote a MATLAB function to do this step-by-step for the SKS.

Iíve been asked three or four times recently natural settling rate (of recoil and spread) altered the effective rate of fire of each weapon. I redid my spread derivation and generalized the equation from my SKS review and found two formulas. Iíll go through the derivation below.


Explanation
One of the things thatís been brought up a lot recently is that spread and recoil recovery start not when a round fires but instead when the second round could be fired. This delay creates some interesting effects on rate of fire. If you wait for spread and recoil to settle between shots, you can see some interesting effects on the resulting rate of fire of the weapon.

Since you canít compensate at all for spread, itís obviously the main limiting factor when you talk about the performance of a weapon at range. It turns out that there is a rate of fire which gives you near-perfect accuracy on each shot in single-fire. Knowing this rate of fire may have applications for long-range shooting. However, as these tend to be rather high, I honestly donít expect us console peasants to worry too much about this, though itís definitely possible to get into the range of firerates at which this value is exceeded on console, much less PC.

Recoil tends to be much the same, except vertical recoil can be completely controlled and horizontal recoil can at least be somewhat compensated for. However, as the equations are linked, I decided it would be worth deriving and posting both equations at the same time.

These two factors, spread and recoil, limit your maximum rate of fire when firing in bursts of limited length. As such, it is important to understand where they tend to be for each weapon.


Assumptions:
1) Spread and recoil recovery start when the next shot could be fired.
2) Recoil recovers by finding the shortest route to the default aiming pointóthe hypotenuse of a triangle defined by horizontal recoil and vertical recoil.
3) No recoil compensation is performed.


Derivation of Equations
This all stems from the equation linking rate of fire and time between shots:
60/(RoF*(time between shots))=1

Spread recovery starts when the next round could be fired, at 60/RoF seconds.

Add to this the time it takes for spread or recoil to recover. Spread recovery is (SpreadIncrease/SpreadDecrease) and recoil recovery is (RecoilLength/RecoilDecrease).

Take 60/<this value> to get your new rate of fire. Itís actually quite simple.

In performing this estimation for bursts and sustained fire, interestingly enough, the length of the burst drops out of the equation for average spread recovery firerate. However, it heavily complicates the equation for recoil recovery (in the average case).


The Equations Themselves
The equations given calculate average fire rates. A longer burst requires more time to settle after itís done but the time between individual shots in the burst is shorter. Therefore, I felt justified in giving the averages rather than the timeline of shots.

n is the number of shots fired. The other values should be self-explanatory.

HRecoil is chosen by you. If you want to find just the vertical recoil value and assume that the weapon doesnít deviate horizontally (ideal, but not realistic), set HRecoil equal to zero. Youíll derive the vertical recoil equation. If you want to calculate the worst-case scenario (also not realistic), set HRecoil equal to its maximum value to either side. If you want to calculate the normal behavior, find the horizontal recoilís center and use that value. Note that on some weapons (those with balanced recoil), the center of recoil will be 0.

Spread recoveryósingle-fire or burst
RoF=60/[(60/RoF)+(SpreadInc/SpreadDec)]

Recoil recoveryógeneral case
RoF=60*n/[(60*n/RoF)+(RecoilLength/RecoilDec)]
Where RecoilLength is the length of a straight line between your aiming point and where the barrel is pointed. Itís the hypotenuse of a right triangle defined by horizontal and vertical recoil. Below are the equations for RecoilLength in all different cases.

Recoil recoveryójust verticalósingle or burst
RecoilLength=VRecoil*(InitialMultiplier+(n-1))

Recoil recoveryóhorizontal and verticalósingle-fire
RecoilLength=sqrt{(VRecoil*InitialMultiplier)^2+HRecoil^2}

Recoil recoveryóhorizontal and verticalóburst
RecoilLength=sqrt{[VRecoil*(InitialMultiplier+n-1)]^2+(HRecoil*n)^2}


MATLAB Code

Quick Instructions for the first function


Call the program from your Command Window as [a,b]=RecoveryFireRate( <inputs> ). Then look up a and b from your Workspace. a is the spread recovery rate of fire, b is the recoil recovery rate of fire.

MATLAB function text to calculate both--copy/paste/save for best effect


function [Spread_Reset_RPM,Recoil_Reset_RPM] = RecoveryFireRate(ShotsFired,RoF,SIncrease,SDecrease,VRecoil,HRecoil,RDecrease,InitialMultiplier)
%The inputs should be self-explanatory. Assume that spread and recoil
%recovery starts when the next round can be fired.
%SIncrease is spread increase per shot, not total spread

%For horizontal recoil, choose between the center of recoil (average), 0
%for pure vertical recoil, or the maximum value to see the worst-case
%average.

n=ShotsFired;

Net_Vertical_Recoil=VRecoil*InitialMultiplier+(n-1)*VRecoil;
Net_Horizontal_Recoil=HRecoil*n;

RecoilLength=sqrt(Net_Vertical_Recoil^2+Net_Horizontal_Recoil^2);
%This is the length of the hypotenuse created by the recoil. Recoil
%recovery acts along this line.

Spread_Reset_RPM=60/(60/RoF+SIncrease/SDecrease);
Recoil_Reset_RPM=n*60/(n*60/RoF+RecoilLength/RDecrease);
end

Quick instructions for the second program


Just call it in the Command Window as BestRecoveryRate( <inputs> ) and the ans output will be the rate of fire limited by whichever natural recovery rate is worse.

MATLAB function to calculate your maximum effective rate of fire permitting both recoil and spread to recover naturally


function [RecoveryROF] = BestRecoveryRate(ShotsFired,RoF,SIncrease,SDecrease,VRecoil,HRecoil,RDecrease,InitialMultiplier)
%The inputs should be self-explanatory. Assume that spread and recoil
%recovery starts when the next round can be fired.
%SIncrease is spread increase per shot, not total spread

%For horizontal recoil, choose between the center of recoil (average), 0
%for pure vertical recoil, or the maximum value to see the worst-case
%average.

n=ShotsFired;

Net_Vertical_Recoil=VRecoil*InitialMultiplier+(n-1)*VRecoil;
Net_Horizontal_Recoil=HRecoil*n;

RecoilLength=sqrt(Net_Vertical_Recoil^2+Net_Horizontal_Recoil^2);
%This is the length of the hypotenuse created by the recoil. Recoil
%recovery acts along this line.

Spread_Reset_RPM=60/(60/RoF+SIncrease/SDecrease);
Recoil_Reset_RPM=n*60/(n*60/RoF+RecoilLength/RDecrease);

if Spread_Reset_RPM > Recoil_Reset_RPM
RecoveryROF=Recoil_Reset_RPM;
elseif Recoil_Reset_RPM > Spread_Reset_RPM
RecoveryROF=Spread_Reset_RPM;
else
RecoveryROF=(Spread_Reset_RPM+Recoil_Reset_RPM)/2;
end
%Picks which recovery rate limits your rate of fire and selects that as
%your minimum firerate.
%If the two are too close for comparison, it averages them.

end



Summary and Conclusions
Iíve been using these equations in slightly simplified forms (and individually for each weapon) for some time now and my experience indicates that most weapons lose between approximately 50 and 150 rpm to let spread settle perfectly. Recoil is more trouble to calculate given its wide variety of values and dependency on burst length.

In a nutshell, for most weapons, feel free to spam the trigger while in single fire as itís hard to hit the maximum value for most weapons. Faster-firing weapons tend to lose more to their fire rates than slower-firing weapons of the same spread increase value.

The next post will contain spread recovery comparisons for each weapon. Iíll respond to questions and criticisms in the morning because itís 2am and Iím tired from staying up and writing this.
Emperor Nick of the Cult of Defibrillation
Sith Deity of Thread-Killing


I'm basically just a degenerate weeb who doesn't post much nowadays.

I'm secretly Old Man Symthic

Siggy thingies


Gaming Stuff


Words of Wisdom (not really)

Quoted from "Blue Panda"

You're fedorable :love:

Quoted from "ToTheSun!"

I have the highest postcount. Nick doesn't count.

Quoted

23:44 Lt_Col_Jesus: I'm -
23:44 Lt_Col_Jesus: Okay
23:44 Lt_Col_Jesus: I'm stabbing everyone
23:44 Lt_Col_Jesus: Bye guys
23:44 Nick: *flips table*
23:44 Legion: Bye, happy stabbing
23:44 *** Lt_Col_Jesus quit (Quit: off to murder the public at large).

Quoted

10:41 LB: You just...reanimated Steve Jobs.
10:41 Dice: Well that would be unfortunate, I was just getting used to him being dead.

Quoted from "Pheozero"

... fuck. Damn you hindsight!

Quoted

23:58 Failure117: CAUSE IM FREEE
23:58 Nick: AS A BIIIIRD NOW
23:58 Failure117: FREEE OF NICK'S WORM RAPE

Quoted

ViperFTW: HEY LOOK
ViperFTW: AN ALIEN LASER FISH THE SIZE OF THE SUN
ViperFTW: I WANT TO SWAT IT WITH MY COMICLY LARGE SWORD
ViperFTW: WITH
ViperFTW: THIS
ViperFTW: AS
ViperFTW: MY
ViperFTW: FUUUUCKING SOUNDTRACK :DDDD
(the album in question)

This post has been edited 1 times, last edit by "Blue Panda" (Aug 12th 2013, 1:19am)


Nick 30075

2manyPosts4me

(1,936)

  • "Nick 30075" started this thread

Posts: 9,753

Date of registration
: Jan 7th 2012

Platform: PC

Location: 'Murrica

Battlelog:

Reputation modifier: 19

  • Send private message

2

Saturday, January 12th 2013, 8:01am

Spread recovery RoF charts:


For some reason, the far right column is getting cut off on my screen. The link below is for anyone who's having the same issue.
http://i.imgur.com/uHW5J.png
Emperor Nick of the Cult of Defibrillation
Sith Deity of Thread-Killing


I'm basically just a degenerate weeb who doesn't post much nowadays.

I'm secretly Old Man Symthic

Siggy thingies


Gaming Stuff


Words of Wisdom (not really)

Quoted from "Blue Panda"

You're fedorable :love:

Quoted from "ToTheSun!"

I have the highest postcount. Nick doesn't count.

Quoted

23:44 Lt_Col_Jesus: I'm -
23:44 Lt_Col_Jesus: Okay
23:44 Lt_Col_Jesus: I'm stabbing everyone
23:44 Lt_Col_Jesus: Bye guys
23:44 Nick: *flips table*
23:44 Legion: Bye, happy stabbing
23:44 *** Lt_Col_Jesus quit (Quit: off to murder the public at large).

Quoted

10:41 LB: You just...reanimated Steve Jobs.
10:41 Dice: Well that would be unfortunate, I was just getting used to him being dead.

Quoted from "Pheozero"

... fuck. Damn you hindsight!

Quoted

23:58 Failure117: CAUSE IM FREEE
23:58 Nick: AS A BIIIIRD NOW
23:58 Failure117: FREEE OF NICK'S WORM RAPE

Quoted

ViperFTW: HEY LOOK
ViperFTW: AN ALIEN LASER FISH THE SIZE OF THE SUN
ViperFTW: I WANT TO SWAT IT WITH MY COMICLY LARGE SWORD
ViperFTW: WITH
ViperFTW: THIS
ViperFTW: AS
ViperFTW: MY
ViperFTW: FUUUUCKING SOUNDTRACK :DDDD
(the album in question)


Posts: 1,487

Date of registration
: Jul 20th 2012

Platform: PC

Battlelog:

Reputation modifier: 14

  • Send private message

3

Saturday, January 12th 2013, 8:43am

are we assuming a 2 round burst here, or does it not matter?

either way, REALLY good work nick.

Posts: 528

Date of registration
: Dec 24th 2011

Platform: PC

Battlelog:

Reputation modifier: 10

  • Send private message

4

Saturday, January 12th 2013, 8:57am

This is a very interesting theory (if it's safe for me to call it that)! I'm sure that many of the very technical members here will look into it.

Too bad that belt-fed machine guns don't have semi-automatic modes though (which is to be authentic of course). I could imagine doing the recoil test with the QJY-88 (Type 88 LMG) equipped with the bipod and flash suppressor since the recoil margin would be very low. The L85A2 is the best substitute I can find that has a semi-automatic mode. For the in-game tests, you would obviously use a "rapid fire" controller that can register a hefty of inputs (R1/RB presses) within a second.

EDIT: If I'm doing it correctly, then it seems like the AS Val should have a rate of fire of roughly 895 rounds per minute in the semi-automatic mode as long as it keeps on its horizontal recoil center (0.05 right). (This is using the recoil method.) So, that seems like good news for anybody that wants to abuse some sort of modded or third-party controller while maintaining the AS Val's initial recoil for every shot. With the extreme horizontal recoil (0.3 right), it still maintains a rate of fire of roughly 891 rounds per minute. So, that's virtually no recoil as the gun would resettle almost completely after each shot. You would just need to watch out a bit for spread at that firing speed.

This post has been edited 2 times, last edit by "CReaperDorian" (Jan 12th 2013, 9:24am)


Sokolovac

Administrator

(332)

Posts: 1,009

Date of registration
: Jan 7th 2012

Platform: PC

Location: Australia

Battlelog:

Reputation modifier: 9

  • Send private message

5

Saturday, January 12th 2013, 10:19am

Amazing work.
POI~

Greenatacker

Too cool for a title

(158)

Posts: 872

Date of registration
: Jun 4th 2012

Platform: PC

Location: Germany

Battlelog:

Reputation modifier: 6

  • Send private message

6

Saturday, January 12th 2013, 10:45am

Why does the UMP have 2 different Spread Recovery Values?
Random comma is, random

Spoiler Spoiler

like some kind of all kit terribad M16 clone.

Oh, an all kit m416?

Steam ID: greenatacker

Posts: 2,606

Date of registration
: Feb 10th 2012

Platform: PC

Location: Avalon, Somerset, England

Battlelog:

Reputation modifier: 12

  • Send private message

7

Saturday, January 12th 2013, 12:40pm

Why does the UMP have 2 different Spread Recovery Values?


I assume this is because it has 0.1 Spread Inc. when standing but 0.06 for crouching and prone.
Forum Rules

Hey guys, lets all remember here that this is Symthic, and we are all mature enough to debate a topic without becoming emotional or insulting. Ad Hominim attacks only demonstrate that your position is weak and that you've run out of supporting evidence and serve to undermine your own position. I hope no one here drops to that level.

Quotes


[Auto's] voice is like butter on the ears

I am quite positive auto's worst fear is a forum with no threads that need to be locked.

Cheapnub

Unregistered

8

Saturday, January 12th 2013, 12:54pm

Awesome work!

When I was making my neurotical AR BSH analysis, I too was thinking of this. I just briefly calculated the time you have to wait inbetween bursts, and that's it. But this...this is way more detailed and worked-out on this particular stat.
Either way, this is a very interesting workout. The effectiveness-nerds will be going to love this

If I may add in a little suggestion: I noticed that as your burst becomes bigger (going from a 3-round burst to a 5-round burst), when using a weapon with a faster ROF, the difference between the spread recovery ROF and the normal ROF becomes less and less (percentage-wise), in comparison to the slower weapons. This might be something that you will want to look into.

PS would you mind if I would link to this thread in my AR BSH topic, to clarify this particular stat a bit?

ToTheSun!

Be Creative.

(5,050)

Posts: 7,811

Date of registration
: Mar 9th 2012

Platform: PC

Location: Portugal

Reputation modifier: 19

  • Send private message

9

Saturday, January 12th 2013, 3:49pm

I'd revise those charts with actual in-game data. Since you don't have a PC, maybe ask rezal to do it? Pretty sure he'll find some inconsistencies.

Nick 30075

2manyPosts4me

(1,936)

  • "Nick 30075" started this thread

Posts: 9,753

Date of registration
: Jan 7th 2012

Platform: PC

Location: 'Murrica

Battlelog:

Reputation modifier: 19

  • Send private message

10

Saturday, January 12th 2013, 5:33pm

@tehmoriz
The spread recovery rates are for all burst lengths. The length of the burst drops out of the equation when you do the derivation. However it's an average. The time between shots in a 2-round burst is shorter but the recovery time is longer. Interestingly enough, they result in the same average rate of fire.

@Dorian
Assuming you compensate completely for vertical recoil, when looking at just the average horizontal recoil, you have 60/(60/900+.05/15) = 857 rounds per minute.

@Green
See Auto's post.

@Cheap
Yeah, go ahead and link it.
As far as the burst length goes, when I derived the spread equation, the length of the burst dropped out. The time for spread recovery is n*SInc/SDec and the time you're been firing is n*60/RoF. Add them together and take 60*n/<this number> and the n's divide out.

@Sun
That's why I said in my assumptions list that spread recovery started after the delay. Keep me posted on testing results.
Emperor Nick of the Cult of Defibrillation
Sith Deity of Thread-Killing


I'm basically just a degenerate weeb who doesn't post much nowadays.

I'm secretly Old Man Symthic

Siggy thingies


Gaming Stuff


Words of Wisdom (not really)

Quoted from "Blue Panda"

You're fedorable :love:

Quoted from "ToTheSun!"

I have the highest postcount. Nick doesn't count.

Quoted

23:44 Lt_Col_Jesus: I'm -
23:44 Lt_Col_Jesus: Okay
23:44 Lt_Col_Jesus: I'm stabbing everyone
23:44 Lt_Col_Jesus: Bye guys
23:44 Nick: *flips table*
23:44 Legion: Bye, happy stabbing
23:44 *** Lt_Col_Jesus quit (Quit: off to murder the public at large).

Quoted

10:41 LB: You just...reanimated Steve Jobs.
10:41 Dice: Well that would be unfortunate, I was just getting used to him being dead.

Quoted from "Pheozero"

... fuck. Damn you hindsight!

Quoted

23:58 Failure117: CAUSE IM FREEE
23:58 Nick: AS A BIIIIRD NOW
23:58 Failure117: FREEE OF NICK'S WORM RAPE

Quoted

ViperFTW: HEY LOOK
ViperFTW: AN ALIEN LASER FISH THE SIZE OF THE SUN
ViperFTW: I WANT TO SWAT IT WITH MY COMICLY LARGE SWORD
ViperFTW: WITH
ViperFTW: THIS
ViperFTW: AS
ViperFTW: MY
ViperFTW: FUUUUCKING SOUNDTRACK :DDDD
(the album in question)


Similar threads