Results 1 to 20 of 82

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Time Bandit
    Join Date
    Oct 2009
    Posts
    141

    Default Vanshilar's Attack Speed Index and Formulae

    This thread is for some testing results and analysis on the attack swing animation speeds for different styles of fighting.

    On terminology: In Update 5, two weapon fighting (TWF) offhand attacks have become probabilistic, rather than in a set sequence. Furthermore, the main hand can have a chance to strike twice, or "doublestrike". Because of this, there may be some confusion when I talk about "attack speeds", since it may refer to multiple things. For this thread, I will generally be talking about the character's swing animations per minute, or how often they make a new swing animation (while standing still), not the proc rate of different attacks (main hand, offhand, glancing blows, doublestrike) per minute. "Alacrity" also means swing animations per minute, by the way. I will sometimes shorten "swing animations per minute" to "SPM".

    Summary of results:
    * Alacrity bonuses add together when they stack
    * Fast THF (greataxe, quarterstaff) swings per minute (BAB 20) is 86.50 * (100% + 1.0327 * sum of each boost%)
    * Slow THF (greatsword) swings per minute (BAB 20) is 86.63 * (100% + 0.9615 * sum of each boost%)
    * Fast THF twitch swings per minute (BAB 20) is 99.49 * (100% + 1.2763 * sum of each boost%)
    * Slow THF twitch swings per minute (BAB 20) is 102.22 * (100% + 1.1302 * sum of each boost%)
    * TWF swings per minute (BAB 20) is 86.66 * (100% + 1.1965 * sum of each boost%) (note TWF gets about 20% more than THF from each percentage of boost)
    * Unarmed (monk) swings per minute (BAB 20) is 93.23 * (100% + 1.2939 * sum of each boost%)

    Tested alacrity boosts (alacrity modifiers):
    * Jorgundal's collar gives a 10% boost (enhancement)
    * Madstone boots gives a 10% boost (enhancement)
    * Haste (spell) gives a 15% boost (enhancement)
    * Haste boost (skill) 1, 2, 3, and 4 give 15%, 20%, 25%, 30% boosts
    * Rogue Acrobat I gives 10% boost to quarterstaff
    * Rogue Acrobat II gives 5% boost to quarterstaff (total 15% since would also have Acrobat I)
    * Monk Wind Stance I gives 7.5% boost (enhancement) to unarmed (doublestrike chance not tested, other weapons not tested)

    Note that enhancement bonuses do not stack with each other; only the highest one applies.

    To plug into the formula, find the sum total of all applicable boosts, then plug that amount (as a percentage) into the above "sum of each boost%". Note that this is just the swing speed; doublestrike, offhand, and glancing blow proc rates effectively are multiplied by this.

    You can also use the chart below:

    Code:
    BAB 20 swing animations per minute
    Boost%	fTwitch	sTwitch	Unarmed	TWF	fastTHF	slowTHF
    0%	99.5	102.2	93.2	86.7	86.5	86.6
    5%	105.8	108.0	99.3	91.8	91.0	90.8
    10%	112.2	113.8	105.3	97.0	95.4	95.0
    15%	118.5	119.5	111.3	102.2	99.9	99.1
    20%	124.9	125.3	117.4	107.4	104.4	103.3
    25%	131.2	131.1	123.4	112.6	108.8	107.5
    30%	137.6	136.9	129.4	117.8	113.3	111.6
    35%	143.9	142.7	135.5	123.0	117.8	115.8
    40%	150.3	148.4	141.5	128.1	122.2	119.9
    45%	156.6	154.2	147.5	133.3	126.7	124.1
    50%	163.0	160.0	153.5	138.5	131.2	128.3
    55%	169.3	165.8	159.6	143.7	135.6	132.4
    60%	175.7	171.5	165.6	148.9	140.1	136.6
    Note that although the chart lists up to 60%, currently, for all styles, only up to 45% is possible, with the exception of fastTHF where rogue acrobat 2 with quarterstaff can get up to 60% (note that I have not tested quarterstaff twitching).




    Testing procedure:

    The testing was done in a tavern so that I can regen my clickies while testing. Due to processing limitations (i.e. my laptop sucks), I only video recorded a 320 x 240 part of the screen, at 10 frames per second, however at high quality. The last three lines of the combat log were recorded in the video, to see when boosts started and wore off. On later videos, I had the bright idea of also recording part of my hotbars and the frame rate, to provide visual confirmation as to whether or not the settings I used were correct (i.e. in a video that says the jorgundal's collar was used, whether or not it was actually used), and also to see if there was (processing) lag during the test. The tests were done in the past few days (9/17/2010-9/18/2010), so this is post-Update 6 and pre-Update 7.

    Because I did my testing with a rogue multiclass (BAB 16), the start of each test was to cast divine power. I have tested that there is an attack speed difference with using or not using divine power (around 1%), so it seems to work in giving me a full BAB 20 attack speed.

    The next part was to cast the haste spell if testing with it, then to activate either haste boost (if I'm testing it) or sprint boost (if I'm not testing haste boost), so that either way, there is a consistent 20-second timer. As soon as I hit a boost, I press the attack key, so any delay between activation and when the character starts swinging is due to the activation timer (the character does not have quickdraw) and not my laziness, so that I get the most time possible under boosted conditions.

    During analysis, I visually compared the frames from where I first started swinging to the last identical swing before the boost ended (i.e. if I used the first 2nd swing animation to start my comparison, then I also used the last 2nd swing animation before the boost ended to compare). I then noted which frames they were at. Then I went through and counted how many swings were between the two. Because different swings animations have different speeds, these were always done in multiples of an attack sequence, i.e. 4 swings. Thus the number of attacks were 4, 8, 12, 16, etc. in each test. I then divide by the time difference between the start and end, and multipled by 60 to get a figure for swings per minute (SPM). An example of this is below:



    Because I can visually compare the frames at the beginning and end of each test, I can ensure that they were "synced up" (i.e. at the same part of the swing animation or very close to it) to reduce the measurement error. On average, the total time from beginning to end of each test was around 17.6 seconds. Because the video was 10 frames per second, and I am choosing the end frame that matches the start frame the best (or vice versa), the error is at most 1 frame, or 0.1 seconds, or 0.57% of the total time. In other words, the attack speed measurements have a measurement error of 0.57%. Of course, there are other sources of error (such as lag), but the error due to the measurement process itself should only be this much.

    The videos were recorded under a wide variety of conditions. The different settings included:

    Enhancement bonus to alacrity: 0% (none), 10% (jorgundal's collar), or 15% (haste clickie)
    Action boost bonus to alacrity: 0% (none), 15% (haste boost 1), 20% (haste boost 2), 25% (haste boost 3), or 30% (haste boost 4)
    Competence bonus to TWF alacrity: 0% (none), or 10% (tempest)

    The setups included using dwarven axes (daxe) for TWF and a greataxe (gaxe) for two-handed fighting (THF). I also did some testing with khopesh (khop) and greatsword (gsword) but haven't gone through them yet. There are a variety of other setups that I'll post about when I get to them.

    I will upload the videos that I used to analyze onto Youtube so that anyone who wants to can go through them and analyze them. There's over 100 videos that I've made so far, so it may take a while for me to get them up.


    Testing analysis:

    THF:
    The testing was done with a greataxe (gaxe). I did record the testing using a greatsword (gsword) as well, but haven't gone through them yet. The testing results were as follows:

    Code:
    total frames from start to end:
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	167	167	184	176	169
    collar (10%)	175	176	170	183	176
    haste (15%)	168	169	184	177	171
    
    attack swing rounds (multiply by 4 for number of swings):
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	6	7	8	8	8
    collar (10%)	7	8	8	9	9
    haste (15%)	7	8	9	9	9
    
    swings per minute:
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	86.2	100.6	104.3	109.1	113.6
    collar (10%)	96.0	109.1	112.9	118.0	122.7
    haste (15%)	100.0	113.6	117.4	122.0	126.3
    Let me know if this ends up not being formatted correctly.

    In looking through this data, it should be apparent that the swing speed with multiple alacrity bonuses look pretty similar (or even identical) to the swing speed of just one alacrity bonus that's the sum of them. What I mean is that for example, the swing speed of the collar (10%) with 15% haste boost is 109.1 SPM, which is also the swing speed of just a single 25% haste boost. If they weren't identical, they were at most around 0.7 SPM off, which is just a 1-frame difference (limits of the measurement error).

    So with this in mind, I can organize the data by moving the collar (10%) and haste (15%) rows to the right, in line so that the total sums of the bonuses line up:

    Code:
    boost	0%	10%	15%	20%	25%	30%	35%	40%	45%
    none	86.2		100.6	104.3	109.1	113.6			
    collar		96.0			109.1	112.9	118.0	122.7	
    haste			100.0			113.6	117.4	122.0	126.3
    average	86.2	96.0	100.3	104.3	109.1	113.4	117.7	122.4	126.3
    The bottom row is the average of those numbers where multiple ones exist.

    Now, if you do a regular X-Y scatter plot of this data, you'll see that it ends up being pretty close to a straight line:



    However, the base SPM (i.e. without any bonuses) is a little bit low, by around 1 SPM or so. It's possible that this is just the limits of the measurement error (although it's above the measurement error) or something; after all, there was only one test of this, so there may have been other issues such as lag. At any rate, if we ignore that data point for now, the linear plot becomes somewhat cleaner:



    If you look at the y = mx + b trendline equation, it should be a little bit striking how close the m and the b are. In fact, it turns out that the observed SPM (except without any boosts) will be very close to the following formula:

    THF swings per minute = 87.2 * (100% + sum of each boost%)

    with the caveat that in the absence of any boosts, THF swing speed is around 86.2 SPM. The error between this formula and the above experimental results is at most about +-0.30 SPM, or +-0.28% of the values.

    Remember that this was tested using a gaxe; I'll update if I find out that gsword SPM measurements are different from this, or, for that matter, if it turns out that different races have different swing speeds (this was tested using a dwarf).

    TWF:
    In much the same vein, I can do the same for TWF. Testing was done with a daxe and khop, but I haven't analyzed the khop data yet so this data is using the daxe results. First, the data:

    Code:
    total frames from start to end:
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	166	165	178	170	183
    collar (10%)	174	170	184	176	169
    haste (15%)	188	183	176	187	180
    
    attack swing rounds (multiply by 4 for number of swings):
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	6	7	8	8	9
    collar (10%)	7	8	9	9	9
    haste (15%)	8	9	9	10	10
    
    swings per minute:
    enh_bonus	0%	15%	20%	25%	30%
    none (0%)	86.7	101.8	107.9	112.9	118.0
    collar (10%)	96.6	112.9	117.4	122.7	127.8
    haste (15%)	102.1	118.0	122.7	128.3	133.3
    There's an interesting quirk to this. Because my testing character also has the tempest prestige enhancement, and the tempest prestige enhancement currently still gives a 10% alacrity bonus, I have an additional source of alacrity boost to test with. Unfortunately I have to wait 3 days to respec to test the "in between" haste boost amounts, but here are the values for the tempest without using boosts and using the 30% boost:

    Code:
    total frames from start to end:
    enh_bonus	0%	30%
    none (0%)	173	187
    collar (10%)	179	173
    haste (15%)	170	184
    
    attack swing rounds (multiply by 4 for number of swings):
    enh_bonus	0%	30%
    none (0%)	7	10
    collar (10%)	8	10
    haste (15%)	8	11
    
    swings per minute:
    enh_bonus	0%	30%
    none (0%)	97.1	128.3
    collar (10%)	107.3	138.7
    haste (15%)	112.9	143.5
    In the same way as with THF, these can be shifted to the right to line up with the sum of the boosts:

    Code:
    boost	0%	10%	15%	20%	25%	30%	35%	40%	45%	50%	55%
    none	86.7		101.8	107.9	112.9	118.0					
    collar		96.6			112.9	117.4	122.7	127.8			
    haste			102.1			118.0	122.7	128.3	133.3		
    t_none		97.1						128.3			
    t_coll				107.3						138.7	
    t_haste					112.9						143.5
    average	86.7	96.8	102.0	107.6	112.9	117.8	122.7	128.2	133.3	138.7	143.5
    where the "t_" indicates the tempest values.

    Just like with THF, the swing speeds can be plotted by the amount of boosts:



    The results are pretty close to a straight line, even when there are no boosts involved. However, there's somewhat of a problem: the m and b do not match up. In fact, it turns out that m (which is the benefit per percent of alacrity boost) is 1.1965x that of b (which is the base swings speed). In other words, unlike THF, TWF actually gets a 6% swing speed increase for every 5% alacrity boost. For example, my tempest rogue, fully buffed up, gets a 55% boost (tempest 10% + haste 15% + haste boost 30%), but this turns out to provide an actual 66% increase in the number of attacks per minute, whereas a THF that got a 55% boost would have a 55% increase in the number of attacks per minute. Anyway, the formula for TWF would be:

    TWF swings per minute = 86.6 * (100% + 1.2*sum of each boost%)

    The error between this formula and the above experimental results are all within about +- 0.36 SPM, or +-0.32% of the values.


    How this compares with previous work done on attack speed:

    There has already been some studies done of attack speeds; for example, cforce's thread is here and Monkey_Archer's thread is here, and I'm sure there are others that escape my mind at the moment (feel free to let me know if there were others on attack speeds that I missed). However, those studies, and the DPS calcs derived from them, were done using duration (how long each swing lasts) as the base variable, where I use swing rate (how many swings per unit time) as the base variable. The previous work was also based on some developer comments as to how stacking works, namely, that the duration is decreased by the given bonus percentage and that different bonuses will stack multiplicatively. Unfortunately, fitting that model necessitated the use of "overhead" values and other fudge terms in the formula to make it fit the experimental data. Although the system may indeed use such values to ensure that the swing durations are appropriate, we as players are more concerned with the actual effect of those duration changes. Here, it would seem like the effect of the changes is that the swings per minute -- and thus the DPS increases linearly, according to the sum total of all the boosts. Indeed, if cforce's attack speed estimator were used and the results recorded, the estimated values would be:

    Code:
    boost	0%	10%	15%	20%	25%	30%	35%	40%	45%	50%	55%
    none	89.0		105.5	110.6	116.2	122.4					
    collar		100.9			114.5	119.8	125.7	132.2			
    haste			105.5			119.5	125.0	131.1	137.8		
    t_none		100.9						132.2			
    t_coll				109.6						142.6	
    t_haste					114.5						148.4
    estim	89.0	100.9	105.5	110.1	115.0	120.6	125.4	131.9	137.8	142.6	148.4


    which (looking at the trendline formula) is very close to my formula except that the base SPM is 89.1 rather than my 86.6. The difference may be due to performance differences between my POS laptop and cforce's top-notch system, server-side usage, recent updates, or a combination of the above and other factors. Otherwise, though, the resulting data is pretty similar. Of course, conceptually, it is much easier to think of a 10% alacrity bonus as "10% more DPS" rather than to muck around with overhead and such, which I think is the advantage of my formula.

    I will post some additional results in other attack styles as I get around to analyzing them.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

This form's session has expired. You need to reload the page.

Reload