Page 1 of 5 1 2 3 ... LastLast
Results 1 to 10 of 41
  1. #1
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50

    Damage Formula Thread

    Introduction:

    The actual damage formulas in FF14 have been a bit mysterious for awhile. Most theorycrafting uses the old approximate formula derived from valk: http://valk.dancing-mad.com/

    However, the formula is known to be "off", particularly for high levels of DTR. There have been some efforts to identify a more accurate damage formula.

    After some period of time, I did some specific testing to get precise data sets and came up with some equations using a "wide" range of data, but not necessarily a comprehensive set of data (note: STR replaced with DEX for Bards or INT for DoM jobs).


    Ability damage:

    (WD*.2714745 + STR*.1006032 + (DTR-202)*.0241327 + WD*STR*.0036167 + WD*(DTR-202)*.0010800 - 1) * (potency/100)

    Autoattack damage:

    (WD*.2714745 + STR*.1006032 + (DTR-202)*.0241327 + WD*STR*.0036167 + WD*(DTR-202)*.0022597 - 1) * (weapon_delay/3)

    Edit: Updated the formulas above from the post on page 3, so that they are the same and there is no confusion. Posts on page1-3 may reference the prior formulas which are very close but different.

    Note: these formulas aren't intended to actually be the damage formula. They only "fit" the actual damage results I tested fairly well.

    Anyways, before posting anything further, I wanted people to randomly verify/confirm these formulas with their own stats. I've derived these formulas based on the following datasets:

    1. DRG 46 WD 496 STR 310 DTR
    2. DRG 46 WD 420 STR 202 DTR
    3. DRG 46 WD 258 STR 202 DTR
    4. DRG 6 WD 466 STR 310 DTR
    5. DRG 6 WD 420 STR 202 DTR
    6. DRG 6 WD 258 STR 202 DTR
    7. BLM 69 WD 502 INT 242 DTR

    As a result, I used a pretty wide range of stats, but I didn't spend time assessing any intermediate results.

    This is where you come in:

    If you all don't mind, check the formulas above against your own damage results for various attacks. Keep in mind there should be a +/- 5% RNG variance on damage. The formula includes a dataset based on BLM damage.

    Specifically looking for:

    1. Confirmation against Bard damage.
    2. Confirmation against Summoner damage.
    3. Random curiosity comparison to WHM/SCH heals.
    (1)
    Last edited by EasymodeX; 02-12-2014 at 01:36 AM.

  2. #2
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    I have been playing with deriving the damage formula from parse data for about a month now, and basically I have come to a simple conclusion... Its archetype based.
    Or more specifically, the formula itself is likely the same, ESPECIALLY if you write it in an expanded form, so you have your Weapon Damage component, Str/Dex/Int/Mind component, Det component, and second order combinations... WD*Int, WD*Det, Int*Det, Det^2, etc... but with a different set of coefficients for each archetype.

    Here is the data set I have been building and working with so far:

    Data
    Class (WD 'A') (Int 'B') (Det 'C') (Parse Pot) ("Untraited")
    BLM 8 272 202 0.502409091 0.358863636
    BLM 8 305 202 0.5515 0.393928571
    BLM 8 325 202 0.587318182 0.419512987
    BLM 8 351 202 0.624240909 0.445886364
    BLM 8 389 226 0.688059091 0.491470779
    BLM 8 416 246 0.737877273 0.527055195
    BLM 8 290 213 0.527922 0.377087143
    BLM 8 328 238 0.596055 0.425753571
    BLM 36 277 202 0.969 0.692142857
    BLM 36 310 202 1.06959 0.763992857
    BLM 36 330 202 1.11954 0.799671429
    BLM 36 356 202 1.20386 0.8599
    BLM 36 394 226 1.31427 0.938764286
    BLM 36 421 246 1.41968 1.014057143
    BLM 36 295 213 1.02556 0.732542857
    BLM 36 333 238 1.14481 0.817721429
    BLM 69 303 220 1.64099 1.172135714
    BLM 69 336 220 1.78894 1.277814286
    BLM 69 356 220 1.88979 1.34985
    BLM 69 382 220 2.00502 1.432157143
    BLM 69 420 244 2.19151 1.565364286
    BLM 69 447 264 2.34258 1.673271429
    BLM 69 321 231 1.73815 1.241535714
    BLM 69 359 256 1.93527 1.382335714
    BLM 69 499 286 2.61 1.864285714
    BLM 69 452 261 2.35766 1.684042857
    BLM 69 458 295 2.43871 1.741935714
    BLM 69 467 295 2.48967 1.778335714
    BLM 69 461 261 2.42551 1.732507143
    BLM 69 471 295 2.50604 1.790028571
    BLM 69 467 303 2.49654 1.783242857
    BLM 59 451 277 2.12119 1.515135714
    MNK 41 404 237 1.11406 1.11406
    MNK 5 382 237 0.456889 0.456889
    MNK 5 267 202 0.336513 0.336513
    PLD 46 341 225 0.999282 0.999282
    PLD 5 319 225 0.363854 0.363854
    PLD 5 205 202 0.25037 0.25037

    My testing methodology is as follows.
    Write down the stats and class.
    Using ACT to log data, spam a high potency - highly repeatable ability for about 3 minutes, which is roughly 50-70 hits. (I used Blizzard 3, Bootshine, and Fast Blade)
    From the ACT data, remove all critical hits, then divide the total damage minus crits by the total number of non-crit hits, and divide again by the potency of the attack... This gives the value in the 5th column, which is the average value of ONE non-crit potency for that class with those stats.

    I started doing this for BLM, which is why I have a mountain of BLM data. The "untraited" column is for adjusting that pile of BLM data to try and match the data from other classes.
    Now I can construct a model, several models, that match the BLM data points to an average error of under 0.4%... BUT this model fails to match the other class's data. My errors on MNK and PLD tend to range from 3% to 6%. Keep in mind this error is after accounting for the BLM's 1.4 OR 1.43 damage mod, and testing MNK without Fists of Fire or any GL stacks, and testing PLD without any buffs or Oaths up.

    So under the same testing conditions, a potency model, and I have tried very many... Valk's, Puro's, various ones using Det-202, using "Stat-Base" and "Stat/Base" where "Base" is determined by taking the stat minus all gear minus allocated points minus racial stat, which leaves how much the Job gives... all 1st order, all 2nd order, mixed-combined 1st and 2nd order... ugh...
    Anyway, ranting aside, IT DOES NOT WORK! There is no catch-all equation for all classes...
    BUT!
    If I use ONLY my BLM data, I get my <0.4% error... Now when I (just recently) took my 6 data points for MNK and PLD... MELEE classes, not CASTERS... I had 0 error. I literally had micro-percent errors... Granted its for 6 datapoints instead of 30, but that is very significant, and leads to a simple, logical conclusion...

    There are 2 potency formulas. One for all Casters and a different one for all Melee.

    This makes sense since casters do not get an autoattack. So you have the same base formula, but one has greater coefficients to offset the loss of autoattack, while the other has smaller coefficients but has an additional part, likely the same formula with yet a 3rd set of coeffs, which is the autoattack component.

    With all of that said, I am going to keep poking at this formula and gathering more data when Im bored, particularly for melee classes, and I should get some WHM data in there too to see how it stacks up against BLM.

    Regarding some of the more gritty details, I am doing all of this in Excel using the Data Analysis toolkit's Regression function. I am also modeling the non-linear equation as a super-positioned linear set such that I can use the linear regression function... Basically I am expanding the model and giving each thing a coefficient.
    You will notice that at the top of my data I have WD, Int, Det labeled as A, B, C. This is to slightly simplify my model construction. So far the best model I have is as follows:

    A+B+C + AB+AC+BC + B^2+C^2 + 0 (no constant intercept)

    This is the mixed model that essentially says that WD, Str/Dex/Int/Mind(stat), and Det all have a unique contribution, then (stat) acts on WD, Det acts on WD, and Det acts on (stat), and lastly there is a small, typically negative correction factor for (stat)^2 and Det^2. Note that WD^2 is not included here, simply because in all of my models, WD^2 had the smallest contribution BY FAR and each model was actually MORE accurate without the WD^2 component. I also have typically seen better results when the coefficient was 0, meaning that if all of your stats are 0, your potency is 0, not some small magical value.

    So this equation looks ugly as all hell, and even worse when every single term had some monstrous 6-12 digit coefficient attached to it... But this is the most accurate. Given this data, you could combine terms and simplify it down into something more manageable, or remove the term with the significantly lowest contribution and rerun the new model... Eventually you will lose significant accuracy, but even a model such as: A*(B+C) + B*C + B^2 + C^2 + B + C is still very accurate, and much less cumbersome than the "complete" model used above.

    That is about all I want to say for the time being. I will continue gathering data and try to work out two solid models for casters and melee... Hopefully the WHM data fits the BLM model, otherwise its going to turn into a huge headache. =)
    (2)
    Last edited by Kenji1134; 12-31-2013 at 02:11 AM.

  3. #3
    Player
    Nyaanyaa's Avatar
    Join Date
    Dec 2013
    Location
    Gridania
    Posts
    45
    Character
    Nyaanyaa Mewmew
    World
    Excalibur
    Main Class
    Conjurer Lv 50
    Hello EasymodeX,

    I've been doing tests on the Cure formula myself during the last couple weeks. I've been gathering data, but haven't come to any definite conclusions yet. What I deem the most important step currently is determining whether it's:

    HP=floor(3%±RHP),
    HP=floor(3%±floor(RHP)),
    HP=floor(3%±round(RHP)),
    HP=round(3%±RHP),
    HP=round(3%±floor(RHP)), or
    HP=round(3%±round(RHP))

    where:
    HP = HP cured, and
    RHP = Raw Healing Power (basically where all the MND*x stuff etc. goes)

    because as long as we don't know that, everything else will be off. For the damage formula you would simply replace HP with Damage, RHP with Raw Damage, and 3% with 5%.

    Cheers,
    Nyaanyaa

    EDIT: Kenji, the problem with the average values is that we don't know if those are the values that the formula actually spits out before deviation occurs (which I deem very unlikely), or if that's simply the average you get after all the rounding is done. To find the actual ranges of possible Raw Damage values, the minimum and maximum damage dealt for every data set are critical.
    (0)
    Last edited by Nyaanyaa; 12-31-2013 at 01:46 AM.

  4. #4
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50
    Quote Originally Posted by Kenji1134 View Post
    Here is the data set I have been building and working with so far:
    I don't understand your data.

    BLM 8 272 202 0.502409091 0.358863636

    According to what you posted, the .5 column is your "potency-redacted" damage multiplier. The .359 column has the 30% BLM trait removed. However, 0.50241 / 1.3 = 0.3865.

    What is the original data for the average damage for those values?

    My formula has the result, for that particular line of data, of an expected 104.1 average damage for Blizzard 3 (high potency repeatable attack), with a damage range of [98.9 .. 109.3].


    In any case, I'm not a fan of using average values of a population for precise measurements (and then fitting an equation into the measurements).

    My method for data collection:

    1. Parsed a spammy high potency attack until the maximum value divided by minimum was 1.105-ish. Generally speaking, damage values have a range of 0.95x - 1.05x from RNG. 1.05/.95 = 1.1053. Once that range is achieved, you know you have "good" data.

    I included crits, but divided them by 1.5. They were irrelevant for the most part, but they resulted in a new min or max once every 10 data sets or so.

    2. Averaged the minimum and maximum. This average should be closer to "real" than the average of the total population of data.


    Quote Originally Posted by Kenji1134 View Post
    There are 2 potency formulas. One for all Casters and a different one for all Melee.
    Sho me ur dmg numberz. The averages are fine, too. I simply can't use your column 5/6 values because I don't know how you calculated those.
    (2)
    Last edited by EasymodeX; 12-31-2013 at 01:54 AM.

  5. #5
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50
    Quote Originally Posted by Nyaanyaa View Post
    What I deem the most important step currently is determining whether it's:

    HP=floor(3%±RHP),
    HP=floor(3%±floor(RHP)),
    HP=floor(3%±round(RHP)),
    HP=round(3%±RHP),
    HP=round(3%±floor(RHP)), or
    HP=round(3%±round(RHP))
    Where the heck is the 3% stuff coming from?

    Healers are weird .
    (0)

  6. #6
    Player
    Nyaanyaa's Avatar
    Join Date
    Dec 2013
    Location
    Gridania
    Posts
    45
    Character
    Nyaanyaa Mewmew
    World
    Excalibur
    Main Class
    Conjurer Lv 50
    Quote Originally Posted by EasymodeX View Post
    Where the heck is the 3% stuff coming from?

    Healers are weird .
    From Valk: http://valk.dancing-mad.com/methodol...reaterthanfive
    "The key difference with Healing is that the +/- deviation from the average is only 3% as compared to 5%."

    I can also attest to that from the data I gathered myself.
    (1)

  7. #7
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50
    That sounds pretty tough to nail down; I've never attempted to discern between flooring and rounding before / don't really know where to start except with the actual formula then disproving the wrong cases.
    (0)

  8. #8
    Player
    Nyaanyaa's Avatar
    Join Date
    Dec 2013
    Location
    Gridania
    Posts
    45
    Character
    Nyaanyaa Mewmew
    World
    Excalibur
    Main Class
    Conjurer Lv 50
    Take this data set of mine:
    Lv: 9
    Trait: N/A
    M.Dmg: 14
    MND: 34
    DTR: 34
    minHP: 64
    maxHP: 67

    For "HP=round(3%±RHP)" you have:
    RHP*0.97≥63.5 because round(63.5)=64, and
    RHP*1.03<67.5 because round(67.5)>67;

    so you have:
    RHP≥65.4639, and
    RHP<65.5340.

    You can therefore write:
    65.4639≤RHP<65.5340, or more accurately
    63.5/0.97≤RHP<67.5/1.03.

    That gives you a range of all possible RHP values for that specific data set given that HP=round(3%±RHP). Then you adjust a value of your choice (I do that with MND) and just keep gathering more data and RHP ranges, then you take all the minimum RHP values and graph them, and do the same with the maximum RHP values (or rather threshold RHP since RHP must be below that value). Check if any progression that makes sense (linear, exponential, whatever) is possible given that range. If no progression is possible, the construction is proven false. If all the aforementioned constructions are proven false (I'm starting to lean to that with the data I currently have, but I don't want to jump to conclusions just yet), the formula is likely something such as:

    HP=round(3%±round(RHP)/2),
    HP=round(3%±round(RHP)/3), ...
    HP=round(3%±floor(RHP)/2), etc.
    (0)

  9. #9
    Player
    Kenji1134's Avatar
    Join Date
    Mar 2011
    Posts
    666
    Character
    Aleksandr Deicide
    World
    Cactuar
    Main Class
    Marauder Lv 70
    Quote Originally Posted by EasymodeX View Post
    I don't understand your data.

    BLM 8 272 202 0.502409091 0.358863636

    According to what you posted, the .5 column is your "potency-redacted" damage multiplier. The .359 column has the 30% BLM trait removed. However, 0.50241 / 1.3 = 0.3865.

    What is the original data for the average damage for those values?

    My formula has the result, for that particular line of data, of an expected 104.1 average damage for Blizzard 3 (high potency repeatable attack), with a damage range of [98.9 .. 109.3].

    In any case, I'm not a fan of using average values of a population for precise measurements (and then fitting an equation into the measurements).

    My method for data collection:

    1. Parsed a spammy high potency attack until the maximum value divided by minimum was 1.105-ish. Generally speaking, damage values have a range of 0.95x - 1.05x from RNG. 1.05/.95 = 1.1053. Once that range is achieved, you know you have "good" data.

    I included crits, but divided them by 1.5. They were irrelevant for the most part, but they resulted in a new min or max once every 10 data sets or so.

    2. Averaged the minimum and maximum. This average should be closer to "real" than the average of the total population of data.

    Sho me ur dmg numberz. The averages are fine, too. I simply can't use your column 5/6 values because I don't know how you calculated those.

    For the "untraited" column, I divided by 1.4, not 1.3.
    The reason for this was that when I was initially leveling BLM, and later WHM, I tried to determine whether the two damage increasing traits stacked, were additive, or multiplicative.
    Back then my answer was pretty much "Additive". I recorded my damage on a lvl 39 Ice Sprite at 39, and then at 40, using the same gear, and the difference was about 27-29%.
    So I started at 1.1x at 39. If it is additive, I would be at 1.4x, 1.4/1.1 = 1.2727 ~ 30% more.
    If its multiplicative then I would see a straight 30% increase, but mine was less, but the difference is small.
    If it just replaces the old trait, then I would see 1.3/1.1 = 1.1818 ~ 20%... I had a lot more than 20%, so I am pretty sure it does not replace it.

    But TBH it does not really matter. I have tried not adjusting the BLM potency, I have tried dividing by 1.4 and 1.43... the formula does not give a good result for melee classes.

    As for getting numbers. I have heard the (max+min)/2 theory, and have tested it. It does work, and the result is very close to just averaging the non-crit damage, OR adjusting the crit damage and averaging everything.
    So, here's 100 hits of B3, copied from ACT, using the 69-471-295 setup, which had 2.50604 potency last time. (Potency is calculated by taking whatever your preferred averaging value is and dividing by the potency of the attack spammed, in this case 220 for B3)

    DMG Crit? Uncritted
    861 TRUE 574
    856 TRUE 570.6666667
    855 TRUE 570
    837 TRUE 558
    835 TRUE 556.6666667
    824 TRUE 549.3333333
    813 TRUE 542
    807 TRUE 538
    801 TRUE 534
    799 TRUE 532.6666667
    575 FALSE 575
    575 FALSE 575
    575 FALSE 575
    574 FALSE 574
    573 FALSE 573
    572 FALSE 572
    572 FALSE 572
    571 FALSE 571
    571 FALSE 571
    570 FALSE 570
    570 FALSE 570
    569 FALSE 569
    569 FALSE 569
    569 FALSE 569
    568 FALSE 568
    568 FALSE 568
    566 FALSE 566
    566 FALSE 566
    566 FALSE 566
    566 FALSE 566
    564 FALSE 564
    564 FALSE 564
    562 FALSE 562
    561 FALSE 561
    561 FALSE 561
    559 FALSE 559
    559 FALSE 559
    558 FALSE 558
    558 FALSE 558
    558 FALSE 558
    557 FALSE 557
    556 FALSE 556
    556 FALSE 556
    555 FALSE 555
    554 FALSE 554
    553 FALSE 553
    553 FALSE 553
    553 FALSE 553
    552 FALSE 552
    552 FALSE 552
    552 FALSE 552
    551 FALSE 551
    549 FALSE 549
    549 FALSE 549
    549 FALSE 549
    548 FALSE 548
    548 FALSE 548
    547 FALSE 547
    547 FALSE 547
    547 FALSE 547
    546 FALSE 546
    546 FALSE 546
    546 FALSE 546
    545 FALSE 545
    545 FALSE 545
    544 FALSE 544
    544 FALSE 544
    544 FALSE 544
    544 FALSE 544
    544 FALSE 544
    542 FALSE 542
    542 FALSE 542
    541 FALSE 541
    541 FALSE 541
    541 FALSE 541
    541 FALSE 541
    541 FALSE 541
    540 FALSE 540
    539 FALSE 539
    539 FALSE 539
    537 FALSE 537
    536 FALSE 536
    535 FALSE 535
    535 FALSE 535
    533 FALSE 533
    533 FALSE 533
    532 FALSE 532
    531 FALSE 531
    531 FALSE 531
    531 FALSE 531
    531 FALSE 531
    528 FALSE 528
    528 FALSE 528
    527 FALSE 527
    525 FALSE 525
    523 FALSE 523
    522 FALSE 522
    521 FALSE 521
    521 FALSE 521
    520 FALSE 520

    Average of all (from Uncritted column)
    Average 549.9733333
    Pot 2.499878788
    (0.2% off previous test)

    (Min+Max)/2 (again Uncritted column)
    Min 520
    Max 575
    Value 547.5
    Pot 2.488636364
    (0.7% off previous test), also max/min = 1.10577... a bit less than your desired 1.1053

    Removing crits (everything that didnt crit - 90 datapoints)
    Average 549.6888889
    Pot 2.498585859
    (0.3% off previous test)

    All accurate to within 1% of the old test. The choice of whether to use the total average, the (min+max)/2 method, or removing crits is up to the person doing the math. I just happened to choose to remove crits simply because I do not particularly like the (min+max)/2 method.
    With that method, you can have X hits that dont change or improve the accuracy of your test, then suddenly one magic hit outside the range will change things.
    When using an average, EVERY new hit improves your test, rather than waiting out some magical hit that may come in 50 casts, 100 casts, or 1000 casts.

    Keep in mind that no matter how you do this, unless you have something like 1000 hits per datapoint, there WILL be some error. As an engineer by trade and a general math guy, <1% for this kind of testing is good enough. Especially since your accuracy cap is based on your smallest unit over your damage, so my min and max uncritted, my smallest unit error is:
    100/520 and 100/575 = 0.174% to 0.192%. This is THE lowest error possible due to the unit size... make of that what you will.
    (1)
    Last edited by Kenji1134; 12-31-2013 at 03:08 AM.

  10. #10
    Player
    EasymodeX's Avatar
    Join Date
    Sep 2013
    Posts
    900
    Character
    Lunairetic Emx
    World
    Midgardsormr
    Main Class
    Lancer Lv 50
    So, here's 100 hits of B3, copied from ACT, using the 69-471-295 setup, which had 2.50604 potency last time.

    Min 520
    Max 575
    Value 547.5
    also max/min = 1.10577... a bit less than your desired 1.1053
    Np, with rounding / truncation, I expect that metric to always be a bit off, especially for smaller damage levels. 1.10577 is prettydamnclean.

    I plugged in the stats into my formula and it predicts an average damage of 549.9*, with a range of 522.4-577.4.

    * I used a BLM trait multiplier of 1.3, assuming the second trait replaces the first trait.

    Not bad but slightly off. I'll plug your data point into my spreadsheet and re-run solver a few dozen times.

    Edit: Seems like your data point helps stretch/scale the formula for high WD+DTR combinations.


    Quote Originally Posted by Kenji1134 View Post
    With that method, you can have X hits that dont change or improve the accuracy of your test, then suddenly one magic hit outside the range will change things.
    When using an average, EVERY new hit improves your test, rather than waiting out some magical hit that may come in 50 casts, 100 casts, or 1000 casts.
    In terms of debating the method ...

    I agree with you for an open-ended test where you're trying to measure something unknown or something with "real"/unknown variation. In this context, that is not the case. We know/assume that the expected results are 95%-105% of the average. Therefore we know what range we are looking for -- if the data set has a max/min of 1.100 or 0.987, we know to wait for the next magic hit (or two).

    When using an average, every new hit can also reduce the accuracy of your test ... randomly.

    When I was getting my 7th set from my impatient BLM buddy, I was actually watching the ACT parse as it happened and calculating the max/min until the ratio grew large enough to exceed 1.105. It was actually stuck on 1.100 or so for almost a whole minute until he got a new max damage 3 points higher so I could tell him to stop.


    For the case of the data you posted, the result from the avg(min,max) method is 547.5 and the avg(population) is 549.97 -- I'd bet the former number is more accurate.

    ... and more importantly it only takes a few minutes to test per datapoint T.T
    (1)
    Last edited by EasymodeX; 12-31-2013 at 03:36 AM.

Page 1 of 5 1 2 3 ... LastLast