Jump to content

Recommended Posts

Attack Speed Calculator

version 1.0.5, PoE v3.06 compliant




PREFACE:
- When I have just introduced myself to PoE, I quickly noticed that something feels strange. Weapon tooltips are vague. Attack speed bonuses are providing non-uniform gains. Also there have appeared many questions when it came to the build optimizations.
If you are interested in attack speed mechanics behind the game facade, than here it is, the aggregated info on this topic.

NOTE:
- This is still a WiP. Additional sections/explanations will be added over time.


 
BASICS:
- One of staple notions in PoE is [action]. Action is character's activity, be it a swing, pistol fire or spell cast.
- Every action consists of minimum two phases: [attack] which included the attack animation per se, and [recovery] which role-playing speaking is the duration for your character catching his breath and getting ready for the next attack.
- A specific set of ranged weapons, namely: crossbow, arbalest, pistol, blunderbuss and arquebus have an additional phase called [reloading] during which the character reloads the weapon in question.
 
The phases go one after another. And visually a full action cycle can be presented in the following manner:

RANGED:
 
gcYin15.png
 
MELEE:

UfGeyRU.png

* As you have noticed there is also a small delay between two actions. Tbh I haven't found any trace of it in the source code, but it's always there when you doing frapsing tests. It has a value of 5-7 frames which corresponds to  0.166-0.233 seconds. Most likely it is related to UnityEngine itself and the way it periodically checks for the events; with 1-2 frame variance coming from stuttering in case Unity was busy with something.
 

 
BASE VALUES:
 
- When trying to decide which weapon to choose, an important factor is how fast each weapon is. UI Tooltips are not providing the exact values. And those categories are actually quite inaccurate. So:
 
WEAPON BASE VALUES:
 
QqMIkII.png
 
DRUID FORMS BASE VALUES:
 
J4Ok5DE.png
 
ANIMAL COMPANIONS BASE VALUES:

s8osOtj.png

Speadsheets: link



P.S. If you want to check these base values yourself, feel free to use a simple mod I've made for this purpose.
It will print some extra data in the combat log, each time any party member is performing an attack:

QsnJlEL.png
(it will also 'catch' existing recovery modifying talents/buffs/armor; but unfortunately not the weapon enchants; at least not yet)

Installation is quite simple, as it was made to work with IEMod Framework.
- download IEMod. 5.1.0-beta Launcher for 2.03.0788 ZIP content preview will suit.
- copy the INFOMod.pw.dll in the same /Mods folder, where IEMod.pw.dll is
- launch PatchworkLauncher
- add the mod in active mods (you can leave IEMod unchecked)
- select "Launch with Mods"

The dll can be downloaded here: INFOMod.pw.dll
Or you can download the project itself: link Edited by MaxQuest
  • Like 22
Link to comment
Share on other sites

REDUCING ACTION DURATION:
- In order to increase your dps, you can do two things: increase your damage coefficient and reduce the time it takes an action to complete.
- Various buffs, talents and enchants do affect different action phases, and we'll have to examine them each, one by one:
 



ATTACK PHASE DURATION: 
- it might come as surprise, but not a single 'attack speed' buff, talent, enchant or modal does affect this phase.
- duration of this phase is affected only by your dexterity modifier:
 
StatAttackSpeedMultiplier = 1f + (float)(dexterity - 10) / 33.3f
AttackDuration = BaseAttackDuration / StatAttackSpeedMultiplier;
 


RECOVERY PHASE DURATION:
- is affected by armor penalties and all the buffs, items and enchants that do state that they do affect "attack speed".
- these effects can be grouped in several major categories, namely:
  • ArmorSpeedFactor
  • AttackSpeedMultiplier
  • RateOfFireMultiplier (ranged only)

- and for non-spells (i.e. for auto-attacks, primary-attacks and full-attacks), the following are also factored in:

  • MeleeAttackSpeedMultiplier (melee only)
  • RangedAttackSpeedMultiplier (ranged only)
  • Single1HWeapRecovFactor + SingleWeaponSpeedFactorAdj (otherwise)

* How exactly these categories influence the final recovery duration check the tables below.



RELOAD PHASE DURATION:
- is affected by armor penalties and all the talents, buffs and modals that do state that they do affect "reload speed". Specifically there are only 4 of them: Gunner (talent), Sure-Handed Ila (chant), Swift Aim (modal) and Vicious Aim (modal).
- Swift Aim and Vicious Aim are mutually exclusive (i.e. cannot be enabled at the same time)
- Swift Aim suppresses Sure-Handed Ila's reloading speed bonus.

^ These are factored multiplicatively. E.g. a blunderbuss has 5s (or 150 frames) reloading duration.
A character with Gunner talent, Swift Aim and 20 Dex, will have following reloading duration:
ReloadDuration = 150 / (1.2 * 1.5) / 1.3 = 64 frames

A chracter with Gunner talent, Vicious Aim and 5 Dex, will have following reloading duration:
ReloadDuration = 150 / (1.2 * 0. 8) / 0.85 = 184 frames



So, these are all speed related categories:
4bGAFiw.png

And this is how durations are computed:
faMjj2p.png
The referenced image is the one that contains weapon base values from the top post: http://i.imgur.com/QqMIkII.png

 

P.S. #forthehistory: Obsolete attack/recovery system can be found here.

 



BASHING SHIELDS SPEED:
- bashing shield acts like a weapon in your offhand
- attack with your offhand does not suffer from Single1HWeapRecoveryFactor penalty (i.e. your hand with bashing shields attacks and recovers as fast as an offhand dagger while dual-wielding)
- attack with your main hand (while you have bashing shield in the offhand) still does suffer from Single1HWeapRecoveryFactor penalty.
- 1h + bashing_shield does not benefit from Two-Weapon Style talent. But yes, it does benefit from Weapon and Shield Style.



FULL ATTACK ACTION:
Some abilities are marked as full-attack actions. What does this mean is:
- if you have a [1h + nothing], [1h + shield] or [2h]: your action consists of: weapon_attack followed by weapon_recovery.
- if you have [1h + 1h] or [1h + bashing_shield]: your action consists of: offhand_attack, followed by main_hand attack and mainhand_recovery. I.e. you deal damage with BOTH weapons, and offhand recovery is skipped completely. (that's why if you have two weapons, and one of them has speed enchant, it's better to place it in main hand)



[1H + NOTHING] vs [1H + SHIELD] vs [1H + 1H]DW vs [1H + BASHING_SHIELD]
Imagine a naked 10 DEX character in following situations:
1. DW daggers: {[delay + MH attack + MH recovery] -> [delay + OH attack + OH recovery]}
2. Dagger + Bashing Shield: {[delay + MH attack + MH recovery] + [delay + OH attack + OH recovery]}
3. Dagger + Simple Shield: {[delay + MH attack + MH recovery]} -> {[delay + MH attack + MH recovery]}
4. Dagger + Nothing: {[delay + MH attack + MH recovery]} -> {[delay + MH attack + MH recovery]}

{} - repeating sequence
[] - full action

V1. There are no buffs:
1. DW daggers: {[5f + 20f + 16.66f] + [5f + 20f + 16.66f]} (i.e. 41.66 frames action for MH, and same for OH)
2. Dagger + Bashing Shield: {[5f + 20f + 33.33f] + [5f + 20f + 16.66f]} (i.e. 58.33 frames action for MH, and 41.66 for Shield)
3. Dagger + Simple Shield: {[5f + 20f + 33.33f]} -> {[5f + 20f + 33.33f]} (i.e. 58.33 frames action for MH)
4. Dagger + Nothing: {[5f + 20f + 33.33f]} -> {[5f + 20f + 33.33f]} (i.e. 58.33 frames action for MH)

V2. DAoM:
1. DW daggers: {[5f + 20f + 0f] + [5f + 20f + 0f]} (i.e. 25 frames action for MH, and same for OH)
2. Dagger + Bashing Shield: {[5f + 20f + 16.66f] + [5f + 20f + 0f]} (i.e. 41.66 frames action for MH, and 25 for Shield)
3. Dagger + Simple Shield: {[5f + 20f + 16.66f]} -> {[5f + 20f + 16.66f]} (i.e. 41.66 frames action for MH)
4. Dagger + Nothing: {[5f + 20f + 16.66f]} -> {[5f + 20f + 16.66f]} (i.e. 41.66 frames action for MH)

V3. Zero Recovery (assuming you have achieved it in all 4 cases):
1. DW daggers: {[5f + 20f + 0f] + [5f + 20f + 0f]} (i.e. 25 frames action for MH, and same for OH)
2. Dagger + Bashing Shield: {[5f + 20f + 0f] + [5f + 20f + 0f]} (i.e. 25 frames action for MH, and 25 for Shield)
3. Dagger + Simple Shield: {[5f + 20f + 0f]} -> {[5f + 20f + 0f]} (i.e. 25 frames action for MH)
4. Dagger + Nothing: {[5f + 20f + 0f]} -> {[5f + 20f + 0f]} (i.e. 25 frames action for MH)

Summary:
1. [1H + Nothing]
- at zero recovery, is the best crit-based dps option, as you deal damage at the same rate as DW, while also having +12 acc and +15% hit-to-crit conversion from One-Handed Style.
- it is the hardest setup to achieve zero recovery with
- it is the worst setup for full attacks (alongside with [1H + Simple Shield])

2. [1H + Simple Shield]
- at zero recovery, you deal damage at the same rate as DW, but also have a bonus of having a shield, plus extra def and reflex via Weapon and Shield Style talent
- it is easier to achieve zero recovery than with [1H + Nothing] because durganized shield reduces 1H recovery penalty
- it is the worst setup for full attacks (alongside with [1H + Nothing])

3. [1H + 1H] DW
- is the easiest setup to achieve zero-recovery and Two-Handed Style helps to do it even faster
- can keep Vulnerable Attack, without losing zero-recovery
- is the best setup for full attacks, as you will strike with both weapons

4. [1H + Bashing Shield]
- is a better setup for full attacks, than [1H + Nothing] or [1H + Simple Shield]. It's especially great if it has any procs attached to it, like Barricade does.
- allows you to benefit from Shield defences, Durgan Enchant:Shield and Weapon and Shield Style talent
- have the same attack/recovery as of small offhand weapon while dual-wielding; but has a higher interrupt duration 0.5 instead of 0.35
- cannot be echanted with weapon quality enchants or lashes.
- at zero recovery, it is a clear dps loss (from auto-attack perspective) when compared with any other alternative. But it can be used by non-dps tanks, on whom you'd like to have some special effect, if present.
- this setup can provide a dps-gain over [1H + Simple Shield], but mostly in the early game and vs very low crush-DR monsters; and yeah the biggest gain would be if you have no recovery reducing means except DAoM potion.



CREDITS:
This article was a community effort. As such, thanks to all contributors, testers, motivators, those who gave ideas or spotted relevant errors. Especially to Kaylon and his Attack Speed 2.0 thread were it all started, AndreaColombo, Boeroer, Loren Tyr, Elric Galad, JerekKruger, and others) Edited by MaxQuest
  • Like 15
Link to comment
Share on other sites

Although each point of Dex does increase your attack, recovery and reload speeds by 3%, the relative gain is usually less.

Check the following table for a visual representation:

 

Me4uwio.png

 

This is due to the following two factors:

- the inter-action delay, which happens to be ~5 frames between any two actions. I don't know exactly how Unity works, but there seems to be some onUpdate schedule system which ticks periodically and checks for queued abilities, and that could be it's tick rate. If I am not mistaken it's possible to get into the same tick (i.e. get rid of the delay) but you would need to have 500+ dexterity.

- the intristic diminishing returns. It's like: 3/2 > 4/3 > 5/4 > 6/5 and so on. Add a drop to a drop, and you get twice the amount; throw that drop into the sea, and nothing has changed.

Edited by MaxQuest
  • Like 6
Link to comment
Share on other sites

Can we sticky this thread mods please?

  • Like 2

"Those who look upon gods then say, without even knowing their names, 'He is Fire. She is Dance. He is Destruction. She is Love.' So, to reply to your statement, they do not call themselves gods. Everyone else does, though, everyone who beholds them."
"So they play that on their fascist banjos, eh?"
"You choose the wrong adjective."
"You've already used up all the others.”

 

Lord of Light

 

Link to comment
Share on other sites

Sooo.... 2handers have the same recovery as 1handers? How come?

Yeap. Both logging and fraps testing have shown that two-handers have the same attack and recovery durations as average one-handers.

 

No point in reserving the posts, there is only a limited edit period.

Hmm, are you sure? I've tried to edit my very first post here (dated jan. 2016), and was able to.

 

 


P.S. Updated the mod. And logged some stacking-related info here.

Edited by MaxQuest
  • Like 2
Link to comment
Share on other sites

 

 

No point in reserving the posts, there is only a limited edit period.

Hmm, are you sure? I've tried to edit my very first post here (dated jan. 2016), and was able to.

 

It seems things have changed recently, we used to have only half an hour for edits.

  • Like 2
Link to comment
Share on other sites

If I am reading this right armor adds a flat recovery speed that is not affected by attack speed multiplier?

 

Also row 3 has 20 Dex listed when I believe it is supposed to read 10.

  • Like 1
Link to comment
Share on other sites

Many thanks for digging through the source code and doing the experimentation. I'm too busy with work to do this stuff myself. I'll update the wiki with the information from here.

 

Also, one of the things that really disappointed me in PoE was the fact that instead of adopting an equivalent of the personal initiative round system that the Infinity Engine games had, Obsidian designed a combat system around seconds and tenths of seconds, calculated in a nebulous manner so that not even the developers themselves can explain or document it. I really hope they change this for PoE2, or at least heavily tune it, so that combat is easier to read and information is communicated to the player in a clear way.

Edited by Gairnulf
  • Like 3

A Custom Editor for Deadfire's Data:
eFoHp9V.png

Link to comment
Share on other sites

If I am reading this right armor adds a flat recovery speed that is not affected by attack speed multiplier?

This requires a longer explanation. Will be able to provide it tomorrow (not from the phone).

Also row 3 has 20 Dex listed when I believe it is supposed to read 10.

Fixed )
  • Like 1
Link to comment
Share on other sites

If I am reading this right armor adds a flat recovery speed that is not affected by attack speed multiplier?

 

Also row 3 has 20 Dex listed when I believe it is supposed to read 10.

 

Recovery multiplier is

 

(2 - prod[1 + IASi] + armour malus)/(1 + 0.03*[dex-10])

 

So lets say you have a speed weapon, durganized weapon, frenzy and heavy plate, then before dex it's

 

2 - (1+0.2)*(1+0.15)*(1+0.33) + 0.5 = 0.6646

 

If you have 20 dex then your final recovery is 0.6646/1.3 = 0.51123

  • Like 1
Link to comment
Share on other sites

Subscribing thread.

  • Like 1

"Time is not your enemy. Forever is."

— Fall-From-Grace, Planescape: Torment

"It's the questions we can't answer that teach us the most. They teach us how to think. If you give a man an answer, all he gains is a little fact. But give him a question, and he'll look for his own answers."

— Kvothe, The Wise Man's Fears

My Deadfire mods: Brilliant Mod | Faster Deadfire | Deadfire Unnerfed | Helwalker Rekke | Permanent Per-Rest Bonuses | PoE Items for Deadfire | No Recyled Icons | Soul Charged Nautilus

 

Link to comment
Share on other sites

If I am reading this right armor adds a flat recovery speed that is not affected by attack speed multiplier?

Ok, let me explain:

 

There are a plethora of different buffs, enchants, talents and abilities that do affect the final value of your recovery duration.

Generally they can be grouped in specific categories and the game has a variable for each of them, namely:

 

- ArmorSpeedFactor

- AttackSpeedMultiplier

- RateOfFireMultiplier

- MeleeAttackSpeedMultiplier

- RangedAttackSpeedMultiplier

all with default values of 1

 

Looking at the source I see that after each attack (i.e. right after the attacking phase), system computes how long the recovery duration should be. It looks a bit messy, but for a ranged weapon attack, it can be summarized as follows:

 

speed_coef = (ArmorSpeedFactor - 1) + (AttackSpeedMultiplier - 1);
speed_coef+= (RateOfFireMultiplier - 1) + (RangedAttackSpeedMultiplier - 1)
recovery_duration = last_attack_duration * (1 - speed_coef) / recovery_factor
recovery_duration = max(0, recovery_duration)

// where recovery_factor for non dual-wielding is 0.6
// and recovery can't get lower than zero
// also ArmorSpeedFactor is a sum for armor recovery penalties. 
// E.g. durganized leather will result in ArmorSpeedFactor = 1 - 0.3 + 0.15 = 0.85

 

As you can see bonuses from different categories are applied additively.

But bonuses that belong to the same multiplier category are applied multiplicatively.

 

For example:

- having swift aim and gloves of swift aim, will result in: AttackSpeedMultiplier = (1 + 0.2) * (1 + 0.15) = 1.38

- having swift aim and cautious attack, will result in: AttackSpeedMultiplier = (1 + 0.2) * (1 - 0.2) = 0.96

 

Worth mentioning that:

- when trying to figure out what category does a bonus belong, tooltips cannot be always trusted. Vicious Aim for instance does affect RateOfFireMultiplier. (full list to come)

- ranged weapon attacks are affected by ArmorSpeedFactor, AttackSpeedMultiplier, RangedAttackSpeedMultiplier, RateOfFireMultiplier and 1H/DW recovery factor

- melee weapon attacks are affected by ArmorSpeedFactor, AttackSpeedMultiplier, MeleeAttackSpeedMultiplier and 1H/DW recovery factor

- spells and abilities are affected by ArmorSpeedFactor, AttackSpeedMultiplier, and may have their own recovery factor

- spells and abilities, that do quality as AttackRanged, can also benefit from RateOfFireMultiplier.

 


Also, one of the things that really disappointed me in PoE was the fact that [...] Obsidian designed a combat system around seconds and tenths of seconds, calculated in a nebulous manner so that not even the developers themselves can explain or document it. I really hope they change this for PoE2, or at least heavily tune it, so that combat is easier to read and information is communicated to the player in a clear way.

100% agree. Obsidian has overcomplicated things bringing the attack/recovery confusion to a whole new level. Mechanics should generally be straight-forward and transparent to the player.

Edited by MaxQuest
  • Like 4
Link to comment
Share on other sites

100% agree. Obsidian has overcomplicated things bringing the attack/recovery confusion to a whole new level. Mechanics should generally be straight-forward and transparent to the player.

30 minutes with the Backer Beta gave me the same opinion which I still hold now when I have over 160 hours with the full game. It's an interesting game largely in spite of its combat system.

A Custom Editor for Deadfire's Data:
eFoHp9V.png

Link to comment
Share on other sites

lol you whiners, nobody wants to play a game where tiny daggers attack at the same rate as huge battle axes

 

P.S. AwesomeButton sent me

Attack speed has always been unclear since the beginning of CRPG. It has always involved some weird fractions, decimal number, etc... As the audience (even gamers) are reluctant to see it, game designers are likely to simply hide the numbers instead of showing frightening maths.

 

For example, I have never found on the web a clear explaination about how Dual Wield and its perks worked in Skyrim.

 

That's true that there is confusion in PoE, but only for optimal build seekers. I'm pretty sure casual gamers is totally happy with the unclear description from tooltip. That won't change that much game experience. For Casual player, "fast', "faster", "average" and "+20% faster" are clear enough.

Edited by Elric Galad
  • Like 1
Link to comment
Share on other sites

lol you whiners, nobody wants to play a game where tiny daggers attack at the same rate as huge battle axes

^ Had a rough day, ehh?

 

It's an interesting game largely in spite of its combat system.

To be honest I actually do like this system. But I don't like non-consistency and confusion. E.g:

 

- If the weapon is marked as slow, player is logically to expect that it will be slower.

- If action was broken into attack and recovery phases, it could be mentioned which phase exactly is affected by the buffs. 

 

I hope this stuff will be more transparent in PoE2, and the 'linearity' of dps(spd) gain getting addressed as well :)

 

For Casual player, "fast', "faster", "average" and "+20% faster" are clear enough.

Hah. I usually do the first run a pure RP one, without thinking of mechanics. But those "increase x by 20%" abilities felt really strange to me. As a new player I just assumed that they were bugged, because full action cycle wasn't shortening proportionally to the tooltip value. And here started the testing... Edited by MaxQuest
  • Like 3
Link to comment
Share on other sites

lol you whiners, nobody wants to play a game where tiny daggers attack at the same rate as huge battle axes

 

P.S. AwesomeButton sent me

Get out of here Infinitron, go back to the Codex to the other fanboys :lol:

 

Also, "20% faster" can't ever be clear. "20%" of what?

Edited by Gairnulf

A Custom Editor for Deadfire's Data:
eFoHp9V.png

Link to comment
Share on other sites

 

lol you whiners, nobody wants to play a game where tiny daggers attack at the same rate as huge battle axes

 

P.S. AwesomeButton sent me

Get out of here Infinitron, go back to the Codex to the other fanboys :lol:

 

Also, "20% faster" can't ever be clear. "20%" of what?

 

 

Speed.

  • Like 1
Link to comment
Share on other sites

Speed.

 

Last time I checked, it was impossible to calculate any % of a word. Fractions tend to only work with numbers.

  • Like 3

"Time is not your enemy. Forever is."

— Fall-From-Grace, Planescape: Torment

"It's the questions we can't answer that teach us the most. They teach us how to think. If you give a man an answer, all he gains is a little fact. But give him a question, and he'll look for his own answers."

— Kvothe, The Wise Man's Fears

My Deadfire mods: Brilliant Mod | Faster Deadfire | Deadfire Unnerfed | Helwalker Rekke | Permanent Per-Rest Bonuses | PoE Items for Deadfire | No Recyled Icons | Soul Charged Nautilus

 

Link to comment
Share on other sites

The system is actually pretty good, yeah obviously it needs a bit of refinement for POE 2, but absolutely no wholesale changes. Best to just tweak slightly otherwise you end up in the beginning again, just with a new system that no one understands.

I'd also add that really it's only a tiny handful of rather dedicated people who are really complaining....

For the majority this really doesn't seem to be an issue. You can never design a game for the hardcore theory crafters, if you did you'd go broke.

Not to say that I don't find this interesting and think there is room for improvement.... It's just that this being the Internet there is some over exaggeration as to how big the problem is.

"Those who look upon gods then say, without even knowing their names, 'He is Fire. She is Dance. He is Destruction. She is Love.' So, to reply to your statement, they do not call themselves gods. Everyone else does, though, everyone who beholds them."
"So they play that on their fascist banjos, eh?"
"You choose the wrong adjective."
"You've already used up all the others.”

 

Lord of Light

 

Link to comment
Share on other sites

The system is actually pretty good, yeah obviously it needs a bit of refinement for POE 2, but absolutely no wholesale changes. Best to just tweak slightly otherwise you end up in the beginning again, just with a new system that no one understands.

Agreed. The system is ok, but the numbers could be tweaked, and some formulas adjusted for the sake of consistency.

 

For example, imagine if atomic action would consist of [attack_animation + recovery_phase].

The duration of this action would be:

1.5s for fast melee

2.0s for average melee

2.5s for slow melee weapons

 

Now, all 'attack speed' and 'recovery penalties' being converted to "+/- x% action speed".

Thus for instance speed enchant, would reduce the action speed proportionally to it's tooltip. E.g. 1.5s => 1.5/1.2 = 1.25s.

 

And the game itself then would calculate what the attack and recovery durations should be, in order to achieve that 1.25s as their sum. Be it both being reduced proportionally; or only recovery, and only when it gets down to zero, attack duration starting being reduced as well; it doesn't matter.

 

With the current system, it is 1.666s => 0.666 + 1.111 * 0.8 = 1.555s. I.e. the benefit is twice less than expected. But it rises way to fast once you stack more of speed stuff. Hence it's disproportional.

 

For the majority this really doesn't seem to be an issue.

It's more of an issue for the developers themselves. Non-consistency always causes trouble when devs come back to adjust the system. Especially it it was written by one programmer and than maintained by the other; which happens when the driving force is transferred to another project. Edited by MaxQuest
  • Like 4
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...