Fire Rate: Difference between revisions

No edit summary
 
(23 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[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.
{{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.
Its inverse is called ''gun cycle time'', which instead measures
'''seconds per bullet'''.


A permanent Fire Rate buff can be obtained from [[Gold Urn]]s.
Several heroes have [[abilities]] that increase their Fire Rate to shoot faster,
==Sources of Fire Rate==
and it can also be decreased, primarily through enemy [[items]]. All bonuses and
{{#invoke:ItemsByStat|tablefy|BonusFireRate|+X% Fire Rate|%}}
slows are combined into a single '''total modifier''', which is then applied to
{{Stats}}
the hero's base Fire Rate.
 
== Calculation ==
=== 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]]