Fire Rate: Difference between revisionsGive feedback
Gammaton32 (talk | contribs) →Base Fire Rate: link |
Gammaton32 (talk | contribs) →Fire Rate: egg |
||
| (6 intermediate revisions by 4 users not shown) | |||
| Line 1: | Line 1: | ||
{{plink|Fire Rate}}, also known as '''Bullets | {{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'''. | |||
Several heroes have [[abilities]] that increase their Fire Rate to shoot faster, | |||
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 == | ||
=== 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> | |||
The | Where: | ||
:<math>\text{Fire Rate | * '''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 === | === 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 | ==== 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}} | ||
* '''- | * '''-{{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: | 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 | 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 == | == Base Fire Rate == | ||
Values referenced from [[Hero Comparison Table]]. | Values referenced from [[Hero Comparison Table]]. | ||
{{#invoke:HeroDataArrays|heroRoundsPerSecondTable}} | {{#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 == | == 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}} | ||
{{Stat Navbox}} | {{Stat Navbox}} | ||
[[Category:Stats]] | |||