A Quick Guide To Hand Testing Weapon Stats in Shooters
Jan 24, 2020 16:46:10 GMT -5
eLantern, illram, and 2 more like this
Post by exaltedvanguard on Jan 24, 2020 16:46:10 GMT -5
I write this guide as a quick reference for future generations to find in the void. I've noticed that even big-name youtubers are measuring some stats poorly, so I figured a reference might be helpful for anyone interested in doing such things. Also, I'm bored.
Damage:
The easiest stat to understand and test, and probably the most important. If the game has a numerical health amount this is super easy. Fire a shot into the body and see how much health they lost. If there is no numerical health, health is generally standardized to 100 and gun damage is calculated from there. If a gun kills in 2 shots, it does at least 50 damage. But it might do 50, it might do 99. If a gun kills in 3 shots, it does at least 34 damage (not 33, that's 4 shots), but less than 50.
1 shot = 100 damage
2 shot = 50-99 damage
3 shot = 34-49 damage
4 shot = 25-33 damage
And so on. If you want exact damage numbers, you can combine multiple weapons of difference damages to attempt to narrow things down. For example, if a single bullet from a 2 shot gun and single bullet from a 4 shot gun result in death, you know that the 2 shot gun must be doing at least 67 damage, since the 4-shot gun's bullet can't have caused more than 33 damage. That said, finding exact damage numbers is rarely relevant to gameplay so this kind of deep dive isn't always necessary. Number of shots to kill is far more important for assessing a gun.
The last thing to take note of is that many games have different damage areas. Headshots for example, normally do more damage. Sometimes torso shots will do more damage than limb shots. This is game specific and you'll need to be consistent with where you're hitting the target.
Rate of Fire (RoF):
The second most important stat, since this combined with damage will give you your Time to Kill (TTK).
Measuring rate of fire boils down to firing a given number of bullets, timing how long it takes (via counting frames), and calculating the RoF from there. Whenever you are analyzing frame content, it is best to do so using UI elements whenever possible. This is because animations can be somewhat inconsistent and/or subjective. By looking instead at the UI elements, it eliminates a lot of human error. Pretty much any shooter will have an ammo counter so this is easy. It's fairly simple to do. Capture your game screen of you firing using a capture card or screen-recording software, then load the video in any video player/editor capable of playing frame-by-frame. Make sure you know the framerate of the video as that will be important later.
Consider the following image where we fire 4 shots represented by the red lines. After each shot, there is a delay represented by the blue line that must happen before the next shot is fired. Naturally, the faster the gun shoots the smaller the delay would be, and vice versa. This delay between shots is generally measured in milliseconds (1/1000 of a second) and is referred to as "FireDelay."
So how do we calculate our rate of fire? Since we're looking at frames, we're going to start the timer the moment the gun fires. So in this example of 4 shots, we want to find the very first frame that the ammo counter says 3. It may be blurry between 3 and 4. You just want to find the first frame that you see a change from 4. This is considered to be frame 0. Then you start counting frames up 123456... until you see the ammo counter say 0. Again, the transition from 1 to 0 may be blurred, you just want the first frame you can see 0 starting to form.
Now we know how many frames it took to fire 4 shots. Let's arbitrarily say it took 15 frames. Now we just need to know our frame rate to know how long that took. Most Call of Duty games run at 60fps on console, so we're going to use that for this example. 15 frames at 60 frames per second. 15/60 = 0.25 seconds. Easy! Now the next part is what most people screw up on.
Look at the image above again. Where did we measure? We measured from the Red line 1 to Red line 4. That means we only measured 3 blue lines (3 fire delays), not 4! It's our number of rounds fired minus 1, because we have no way of measuring that final fire delay. So we can simply use the equation: FireDelay = Time/(Bullets - 1)
So in this example of 4 bullets in 15 frames at 60fps, our fire delay is 0.083 seconds/round.
Converting this into Rounds per Minute is just basic unit conversion. RPM = 1/FireDelay*60
So our final fire rate for this example is 723 RPM. This is where the vast majority of people (including major youtubers) stop their testing. 723 is kind of an odd number though, but it can be easily explained by our next concept:
Frame Rounding:
Counting frames is an inexact science. At 60 fps, there is 16.67 milliseconds between each frame being drawn, which doesn't sound like a lot, but it can cause some pretty significant errors in your math. Consider the following image, where each frame is represented by a green bar.
There are two scenarios here, one represented by the red bar and one by blue. Both of these scenarios will first be visible on frame 0. Red occurred just slightly before the frame was drawn while blue started just barely after the previous frame was drawn. Both red and blue bars also end after frame 2 was drawn. Red ends just after frame 2 while blue ends just before frame 3. This means that both of these scenarios will first be visible on frame 0 and will end on frame 3. In other words, when you measure these both will be measured as being 3 frames long, despite the fact that Red is really more like 2.1 frames long and blue is 3.9 frames long.
So when we frame-count something, it's appropriate to consider that whatever we counted is up to a frame off in either direction.
So to go back to our previous example of firing 4 bullets from the gun, it's more appropriate to say that the 4 shots were fired in 14-16 frames. Which means our fire rate is no slower than 675 RPM and no faster than 771 RPM. That's a huge gap! How do we know what the firerate actually is? Well first off, we should fire more bullets. Firing 30 or even 60 rounds is going to give us a lot more frames. And that +/- 1 frame will mean a lot less when you dealing with several hundred frames instead of just a handful. Beyond that, we can fire different amounts of bullets. By firing 30, then 29, then 28, etc we can get ranges which vary ever so slightly and narrow things down to a single fire rate. If one test tells us that the fire rate is between 675 and 771, and a second test tells us it's between 650 and 740, we know our fire rate is somewhere between 675 and 740. And then a third test is 720-800, meaning we can narrow it to 720-740.
Time to Kill (TTK)
This is mathematically derived from the damage and rate of fire and should be pretty easy if you made it this far. Take the number of shots to kill (STK), subtract 1, and multiply by your fire delay. We subtract 1 because the fire-delay that occurs after the last round doesn't matter - the guy's already dead.
TTK = (STK - 1)*FireDelay
Conclusion:
If you made it this far, thanks for reading! If there's interest, I will update this post with how other stats, such as aim down sight time, range, and movement speed can be measured.
Damage:
The easiest stat to understand and test, and probably the most important. If the game has a numerical health amount this is super easy. Fire a shot into the body and see how much health they lost. If there is no numerical health, health is generally standardized to 100 and gun damage is calculated from there. If a gun kills in 2 shots, it does at least 50 damage. But it might do 50, it might do 99. If a gun kills in 3 shots, it does at least 34 damage (not 33, that's 4 shots), but less than 50.
1 shot = 100 damage
2 shot = 50-99 damage
3 shot = 34-49 damage
4 shot = 25-33 damage
And so on. If you want exact damage numbers, you can combine multiple weapons of difference damages to attempt to narrow things down. For example, if a single bullet from a 2 shot gun and single bullet from a 4 shot gun result in death, you know that the 2 shot gun must be doing at least 67 damage, since the 4-shot gun's bullet can't have caused more than 33 damage. That said, finding exact damage numbers is rarely relevant to gameplay so this kind of deep dive isn't always necessary. Number of shots to kill is far more important for assessing a gun.
The last thing to take note of is that many games have different damage areas. Headshots for example, normally do more damage. Sometimes torso shots will do more damage than limb shots. This is game specific and you'll need to be consistent with where you're hitting the target.
Rate of Fire (RoF):
The second most important stat, since this combined with damage will give you your Time to Kill (TTK).
Measuring rate of fire boils down to firing a given number of bullets, timing how long it takes (via counting frames), and calculating the RoF from there. Whenever you are analyzing frame content, it is best to do so using UI elements whenever possible. This is because animations can be somewhat inconsistent and/or subjective. By looking instead at the UI elements, it eliminates a lot of human error. Pretty much any shooter will have an ammo counter so this is easy. It's fairly simple to do. Capture your game screen of you firing using a capture card or screen-recording software, then load the video in any video player/editor capable of playing frame-by-frame. Make sure you know the framerate of the video as that will be important later.
Consider the following image where we fire 4 shots represented by the red lines. After each shot, there is a delay represented by the blue line that must happen before the next shot is fired. Naturally, the faster the gun shoots the smaller the delay would be, and vice versa. This delay between shots is generally measured in milliseconds (1/1000 of a second) and is referred to as "FireDelay."
So how do we calculate our rate of fire? Since we're looking at frames, we're going to start the timer the moment the gun fires. So in this example of 4 shots, we want to find the very first frame that the ammo counter says 3. It may be blurry between 3 and 4. You just want to find the first frame that you see a change from 4. This is considered to be frame 0. Then you start counting frames up 123456... until you see the ammo counter say 0. Again, the transition from 1 to 0 may be blurred, you just want the first frame you can see 0 starting to form.
Now we know how many frames it took to fire 4 shots. Let's arbitrarily say it took 15 frames. Now we just need to know our frame rate to know how long that took. Most Call of Duty games run at 60fps on console, so we're going to use that for this example. 15 frames at 60 frames per second. 15/60 = 0.25 seconds. Easy! Now the next part is what most people screw up on.
Look at the image above again. Where did we measure? We measured from the Red line 1 to Red line 4. That means we only measured 3 blue lines (3 fire delays), not 4! It's our number of rounds fired minus 1, because we have no way of measuring that final fire delay. So we can simply use the equation: FireDelay = Time/(Bullets - 1)
So in this example of 4 bullets in 15 frames at 60fps, our fire delay is 0.083 seconds/round.
Converting this into Rounds per Minute is just basic unit conversion. RPM = 1/FireDelay*60
So our final fire rate for this example is 723 RPM. This is where the vast majority of people (including major youtubers) stop their testing. 723 is kind of an odd number though, but it can be easily explained by our next concept:
Frame Rounding:
Counting frames is an inexact science. At 60 fps, there is 16.67 milliseconds between each frame being drawn, which doesn't sound like a lot, but it can cause some pretty significant errors in your math. Consider the following image, where each frame is represented by a green bar.
There are two scenarios here, one represented by the red bar and one by blue. Both of these scenarios will first be visible on frame 0. Red occurred just slightly before the frame was drawn while blue started just barely after the previous frame was drawn. Both red and blue bars also end after frame 2 was drawn. Red ends just after frame 2 while blue ends just before frame 3. This means that both of these scenarios will first be visible on frame 0 and will end on frame 3. In other words, when you measure these both will be measured as being 3 frames long, despite the fact that Red is really more like 2.1 frames long and blue is 3.9 frames long.
So when we frame-count something, it's appropriate to consider that whatever we counted is up to a frame off in either direction.
So to go back to our previous example of firing 4 bullets from the gun, it's more appropriate to say that the 4 shots were fired in 14-16 frames. Which means our fire rate is no slower than 675 RPM and no faster than 771 RPM. That's a huge gap! How do we know what the firerate actually is? Well first off, we should fire more bullets. Firing 30 or even 60 rounds is going to give us a lot more frames. And that +/- 1 frame will mean a lot less when you dealing with several hundred frames instead of just a handful. Beyond that, we can fire different amounts of bullets. By firing 30, then 29, then 28, etc we can get ranges which vary ever so slightly and narrow things down to a single fire rate. If one test tells us that the fire rate is between 675 and 771, and a second test tells us it's between 650 and 740, we know our fire rate is somewhere between 675 and 740. And then a third test is 720-800, meaning we can narrow it to 720-740.
Time to Kill (TTK)
This is mathematically derived from the damage and rate of fire and should be pretty easy if you made it this far. Take the number of shots to kill (STK), subtract 1, and multiply by your fire delay. We subtract 1 because the fire-delay that occurs after the last round doesn't matter - the guy's already dead.
TTK = (STK - 1)*FireDelay
Conclusion:
If you made it this far, thanks for reading! If there's interest, I will update this post with how other stats, such as aim down sight time, range, and movement speed can be measured.