| Latest revision |
Your text |
| Line 1: |
Line 1: |
| {{plink|Fire Rate}}, also known as '''Bullets Per Second''', is a stat that | | {{plink|Fire Rate}}, also known as '''Bullets per second''', is a stat that determines the amount of [[ammo]] that will be fired by the weapon per second. Several heroes have abilities that can increase their fire rates to shoot faster, but it can also be decreased, primarily through other enemy's items. |
| determines the amount of [[ammo]] that will be fired by the weapon per second. | |
| Its inverse is called ''gun cycle time'', which instead measures
| |
| '''seconds per bullet'''.
| |
|
| |
|
| Several heroes have [[abilities]] that increase their Fire Rate to shoot faster,
| | The inverse of this is called ''gun cycle time'', which instead measures '''seconds per bullet'''. |
| and it can also be decreased, primarily through enemy [[items]]. All bonuses and
| |
| slows are combined into a single '''total modifier''', which is then applied to
| |
| the hero's base Fire Rate.
| |
|
| |
|
| == Calculation == | | == Math == |
| === Total modifier ===
| | The final Fire Rate change is calculated with separate rules for bonuses and slows: positive bonuses (buffs) are additive, while negative modifiers (slows) are multiplicative. |
| Bonuses and slows are combined under separate rules: positive bonuses are additive, while slows are multiplicative.
| |
|
| |
|
| :<math>\text{Total Modifier} = (\text{Sum of Bonuses}) - \left(1 - \text{Total Slows}\right)</math> | | It is important to note that the total change to Fire Rate cannot be reduced below '''-50%'''. Any calculated value lower than this will be capped at -50%. |
| | |
| | The simplified formula is: |
| | :<math>\text{Fire Rate Modifier} = (\text{Sum of Bonuses}) - \left(1 - \text{Total Slows}\right)</math> |
|
| |
|
| Where: | | Where: |
| * '''Sum of Bonuses''' = all positive bonuses added together (e.g., {{#tag:math|{{#expr: {{DataProp|Ricochet|BonusFireRate}}/100 }} + {{#expr: {{DataProp|Swift Striker|BonusFireRate}}/100 }} }}) | | * '''Sum of Bonuses''' = All positive buffs added together (e.g., <math>0.25 + 0.20</math>) |
| * '''Total Slows''' = the result of multiplying the remaining values of each slow: <math>(1 - \text{Slow}_1) \times (1 - \text{Slow}_2) \times \dots</math> | | * '''Total Slows''' = The result of multiplying the remaining values of each slow: <math>(1 - \text{Slow}_1) \times (1 - \text{Slow}_2) \times \dots</math> |
|
| |
|
| Any total modifier lower than '''-50%''' is capped at that value.
| | === Examples === |
| | |
| === Applying the modifier === | |
| The total modifier is not applied the same way in both directions. Its effect depends on its sign:
| |
| | |
| * If the total modifier is '''positive''', it increases Fire Rate directly:
| |
| :<math>\text{Final Fire Rate} = \text{Base Fire Rate} \times (1 + \text{Total Modifier})</math>
| |
| * If the total modifier is '''negative''', it instead increases the gun cycle time, the interval between shots:
| |
| :<math>\text{Final Fire Rate} = \frac{\text{Base Fire Rate}}{1 + |\text{Total Modifier}|}</math>
| |
| | |
| Because a negative modifier lengthens the interval rather than shortening the rate, it reduces the number of bullets fired per second by less than its stated value:
| |
| * A '''-10%''' modifier leaves '''{{#expr: 100 / 1.1 round 1}}%''' of base Fire Rate.
| |
| * A '''-25%''' modifier leaves '''{{#expr: 100 / 1.25 round 1}}%''' of base Fire Rate.
| |
| * A '''-50%''' modifier, the maximum, leaves '''{{#expr: 100 / 1.5 round 1}}%''' of base Fire Rate, a reduction of only {{#expr: 100 - 100 / 1.5 round 1}}% in bullets per second.
| |
| | |
| Positive modifiers have no equivalent discrepancy: a +50% modifier grants a full 50% more bullets per second. The in-game UI reports the total modifier itself, not the resulting change in bullets per second.
| |
|
| |
|
| === Examples ===
| | ==== Combined Bonuses and Slows ==== |
| ==== Combined bonuses and slows ==== | |
| For an example with multiple sources: | | For an example with multiple sources: |
| * '''+{{DataProp|Ricochet|BonusFireRate}}%''' Fire Rate from {{ItemIcon|Ricochet}} | | * '''+25%''' Fire Rate from {{ItemIcon|Ricochet}} |
| * '''+{{DataProp|Swift Striker|BonusFireRate}}%''' Fire Rate from {{ItemIcon|Swift Striker}} | | * '''+20%''' Fire Rate from {{ItemIcon|Swift Striker}} |
| * '''-{{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}} | | * '''-25%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}} |
| * '''-{{DataProp|Suppressor|FireRateSlow}}%''' Fire Rate Slow from an enemy's {{ItemIcon|Suppressor}} | | * '''-35%''' Fire Rate Slow from an enemy's {{ItemIcon|Suppressor}} |
|
| |
|
| First, the groups are calculated separately: | | First, calculate the groups separately: |
| * '''Bonuses:''' {{#tag:math|{{#expr: {{DataProp|Ricochet|BonusFireRate}}/100 }} + {{#expr: {{DataProp|Swift Striker|BonusFireRate}}/100 }} {{=}} {{#expr: ({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 }} }} | | * '''Bonuses:''' <math>0.25 + 0.20 = 0.45</math> |
| * '''Slows:''' {{#tag:math|(1 - {{#expr: {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100 }}) \times (1 - {{#expr: {{DataProp|Suppressor|FireRateSlow}}/100 }}) {{=}} {{#expr: 1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100 }} \times {{#expr: 1 - {{DataProp|Suppressor|FireRateSlow}}/100 }} {{=}} {{#expr: (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) }} }} | | * '''Slows:''' <math>(1 - 0.25) \times (1 - 0.35) = 0.75 \times 0.65 = 0.4875</math> |
|
| |
|
| They are then combined into the total modifier:
| | Then combine them in the final formula: |
| :{{#tag:math|\text{Total Modifier} {{=}} {{#expr: ({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 }} - (1 - {{#expr: (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) }}) {{=}} {{#expr: ({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 }} - {{#expr: 1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) }} {{=}} {{#expr: (({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100))) round 4 }} }} | | :<math>\text{Final} = 0.45 - (1 - 0.4875)</math> |
| | :<math>\text{Final} = 0.45 - 0.5125 = -0.0625</math> |
|
| |
|
| Because the total modifier is negative, it is applied to the gun cycle time:
| | This results in a '''-6.25%''' final change. The in-game UI typically rounds this value to the nearest whole number, displaying '''-6%'''. |
| :{{#tag:math|\text{Final Fire Rate} {{=}} \frac{\text{Base Fire Rate} }{1 + {{#expr: abs(({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100))) round 4 }} } {{=}} {{#expr: (1 / (1 + abs(({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100))))) round 3 }} \times \text{Base Fire Rate} }}
| |
|
| |
|
| The hero therefore fires '''{{#expr: ((1 - 1 / (1 + abs(({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100))))) * 100) round 1 }}%''' fewer bullets per second, while the in-game UI displays the total modifier of '''{{#expr: (({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100))) * 100 round 0 }}%''', rounded to the nearest whole number.
| | ==== Maximum Slow Reduction ==== |
| | |
| ==== Maximum slow reduction ==== | |
| For an example with only slows applied: | | For an example with only slows applied: |
| * No positive Fire Rate bonuses (0) | | * No positive Fire Rate bonuses (0) |
| * '''-{{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}} | | * '''-25%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}} |
| * '''-{{DataProp|Suppressor|FireRateSlow}}%''' Fire Rate Slow from an enemy's {{ItemIcon|Suppressor}} | | * '''-35%''' Fire Rate Slow from an enemy's {{ItemIcon|Suppressor}} |
| * '''-{{DataProp|Rusted Barrel|FireRateSlow}}%''' Fire Rate Slow from an enemy's {{ItemIcon|Rusted Barrel}}
| |
|
| |
|
| The calculation is: | | The calculation is: |
| :{{#tag:math|0 - (1 - ({{#expr: 1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100 }} \times {{#expr: 1 - {{DataProp|Suppressor|FireRateSlow}}/100 }} \times {{#expr: 1 - {{DataProp|Rusted Barrel|FireRateSlow}}/100 }}))}} | | :<math>0 - (1 - (0.75 \times 0.65))</math> |
| :{{#tag:math|0 - (1 - {{#expr: (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) * (1 - {{DataProp|Rusted Barrel|FireRateSlow}}/100) }}) {{=}} {{#expr: (0 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) * (1 - {{DataProp|Rusted Barrel|FireRateSlow}}/100))) round 4 }} }} | | :<math>0 - (1 - 0.4875) = -0.5125</math> |
| | |
| This results in a calculated modifier of '''{{#expr: (0 - (1 - (1 - {{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}/100) * (1 - {{DataProp|Suppressor|FireRateSlow}}/100) * (1 - {{DataProp|Rusted Barrel|FireRateSlow}}/100))) * 100 round 2 }}%'''. Due to the cap, the value is raised to the maximum of '''-50%''', which is then applied to the gun cycle time:
| |
| :{{#tag:math|\text{Final Fire Rate} {{=}} \frac{\text{Base Fire Rate} }{1 + 0.5} {{=}} {{#expr: 1 / 1.5 round 3 }} \times \text{Base Fire Rate} }}
| |
|
| |
|
| Even under the maximum possible slow, the hero still fires two thirds of the bullets per second of an unslowed hero.
| | This results in a calculated slow of '''-51.25%'''. Due to the cap, this value is raised to the maximum reduction of '''-50%'''. |
|
| |
|
| == Base Fire Rate == | | == Base Fire Rate == |
| Values referenced from [[Hero Comparison Table]]. | | Values referenced from [[Hero Comparison Table]]. |
|
| |
|
| {{#invoke:HeroDataArrays|heroRoundsPerSecondTable}}
| |
| Notes: | | Notes: |
| * Due to a bug, {{HeroIcon|The Doorman}}'s and {{HeroIcon|Paige}}'s weapons have incorrect fire rate values listed in the game UI. The values listed here are accurate. | | * Due to a bug, {{HeroIcon|The Doorman}}'s and {{HeroIcon|Paige}}'s weapons have incorrect fire rate values listed in the game UI. |
| * {{HeroIcon|McGinnis}}' and {{HeroIcon|Victor}}'s weapons have a wind-up time before reaching maximum fire rate. | | * {{HeroIcon|McGinnis}}' and {{HeroIcon|Victor}}'s weapons have a wind-up time before reaching maximum fire rate. |
| | {{#invoke:HeroDataArrays|heroRoundsPerSecondTable}} |
|
| |
|
| == Sources == | | == Sources == |
| === Fire Rate === | | === Fire Rate === |
| {{Item stat table|Fire Rate}} | | {{Item stat table|Fire Rate}} |
| * {{ItemIcon|Burst Fire}} additionally increases Fire Rate by +{{#invoke:ItemData|get_prop|Burst Fire|ActivatedFireRate}}% for {{#invoke:ItemData|get_prop|Burst Fire|AbilityDuration}} seconds after hitting an enemy hero. | | * {{ItemIcon|Burst Fire}} additionally increases Fire Rate by +{{#invoke:ItemData|get_prop|Burst Fire|ActivatedFireRate}}% for {{#invoke:ItemData|get_prop|Burst Fire|AbilityDuration}} seconds after hitting an enemy hero. |
| * {{ItemIcon|Heroic Aura}}'s Fire Rate bonus is doubled for nearby player minions within its {{#invoke:ItemData|get_prop|Heroic Aura|ActiveRadius}} radius. | | * {{ItemIcon|Heroic Aura}}'s Fire Rate bonus is doubled for nearby player minions within its {{#invoke:ItemData|get_prop|Heroic Aura|ActiveRadius}} radius. |
| * {{ItemIcon|Golden Goose Egg}} grants random [[Permanent Buffs]], including Fire Rate.
| |
| ==== Map Spawns ====
| |
| * [[Golden Statue]]s can provide a permanent increase: +'''{{MiscData|firerate_permanent_pickup|Modifer|ScriptValues|1|value}}'''% Fire Rate before 10 minutes, +'''{{MiscData|firerate_permanent_pickup_lv2|Modifer|ScriptValues|1|value}}'''% Fire Rate after 10 minutes, and +'''{{MiscData|firerate_permanent_pickup_lv3|Modifer|ScriptValues|1|value}}'''% Fire Rate after 30 minutes.
| |
| * [[Powerup]] runes can provide a temporary Gun buff that provides +'''{{MiscData|gun_powerup_pickup|Modifer|ModifierValues|1|valueMin}}'''% to +'''{{MiscData|gun_powerup_pickup|Modifer|ModifierValues|1|valueMax}}'''% Fire Rate for {{MiscData|casting_powerup_pickup|Modifer|Duration}} seconds (scaling with game time from 5 to 40 minutes).
| |
|
| |
|
| === Fire Rate Slow === | | === Fire Rate Slow === |
| {{Item stat table|Fire Rate Slow}} | | {{Item stat table|Fire Rate Slow}} |
| | |
| | === Map spawns === |
| | * [[Golden Statue]]s can provide a permanent increase: +<b>1.5</b>% Fire Rate before 10 minutes, +<b>2</b>% Fire Rate before 30 minutes, or +<b>2.5</b>% Fire Rate after 30 minutes. |
| | * [[Powerup]] runes can provide a temporary Gun buff that provides +'''12'''% to +'''35'''% Fire Rate for 160 seconds (scaling with game time from 5 to 40 minutes). |
|
| |
|
| {{Stat Navbox}} | | {{Stat Navbox}} |
| [[Category:Stats]]
| |