| Latest revision |
Your text |
| Line 1: |
Line 1: |
| {{plink|Fire Rate}}, also known as '''Bullets Per Second''', is a stat that
| | [[File:Bullets per sec icon.png|64px]] '''Fire Rate''', also known as '''Bullets per sec''', is a stat that [[heroes]] start with and can obtain more through [[items]]. Fire rate determines the amount of [[ammo]] that will be fired by the weapon per second. |
| 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,
| | A permanent Fire Rate buff can be obtained from [[Gold Urn]]s. |
| 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 ==
| | {{Stats}} |
| === Total modifier ===
| |
| 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>
| |
| | |
| Where:
| |
| * '''Sum of Bonuses''' = all positive bonuses added together (e.g., {{#tag:math|{{#expr: {{DataProp|Ricochet|BonusFireRate}}/100 }} + {{#expr: {{DataProp|Swift Striker|BonusFireRate}}/100 }} }})
| |
| * '''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.
| |
| | |
| === 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 ====
| |
| For an example with multiple sources:
| |
| * '''+{{DataProp|Ricochet|BonusFireRate}}%''' Fire Rate from {{ItemIcon|Ricochet}}
| |
| * '''+{{DataProp|Swift Striker|BonusFireRate}}%''' Fire Rate from {{ItemIcon|Swift Striker}}
| |
| * '''-{{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}}
| |
| * '''-{{DataProp|Suppressor|FireRateSlow}}%''' Fire Rate Slow from an enemy's {{ItemIcon|Suppressor}}
| |
| | |
| First, the groups are calculated separately:
| |
| * '''Bonuses:''' {{#tag:math|{{#expr: {{DataProp|Ricochet|BonusFireRate}}/100 }} + {{#expr: {{DataProp|Swift Striker|BonusFireRate}}/100 }} {{=}} {{#expr: ({{DataProp|Ricochet|BonusFireRate}} + {{DataProp|Swift Striker|BonusFireRate}})/100 }} }}
| |
| * '''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) }} }}
| |
| | |
| They are then combined into the total modifier:
| |
| :{{#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 }} }}
| |
| | |
| Because the total modifier is negative, it is applied to the gun cycle time:
| |
| :{{#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 ====
| |
| For an example with only slows applied:
| |
| * No positive Fire Rate bonuses (0)
| |
| * '''-{{DataProp|Vexing Bolt|Upgrades.1.FireRateSlow}}%''' Fire Rate Slow from {{HeroIcon|Sinclair}}'s {{AbilityIcon|Vexing Bolt}}
| |
| * '''-{{DataProp|Suppressor|FireRateSlow}}%''' 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:
| |
| :{{#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 }}))}}
| |
| :{{#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 }} }}
| |
| | |
| 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.
| |
| | |
| == Base Fire Rate ==
| |
| Values referenced from [[Hero Comparison Table]].
| |
| | |
| {{#invoke:HeroDataArrays|heroRoundsPerSecondTable}}
| |
| 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.
| |
| * {{HeroIcon|McGinnis}}' and {{HeroIcon|Victor}}'s weapons have a wind-up time before reaching maximum fire rate.
| |
| | |
| == Sources ==
| |
| === 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|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 ===
| |
| {{Item stat table|Fire Rate Slow}}
| |
| | |
| {{Stat Navbox}}
| |
| [[Category:Stats]]
| |