AC vs ACv2?

Discussion in 'The Veterans' Lounge' started by Sirene_Fippy, Apr 16, 2014.

  1. Geroblue Augur

    If you need the ability to have a nice large calculation result that requires a long, and you use a short, it isn't going to work.
  2. Serriah_Test Augur


    That's what I said... though I was pretty wordy! :p
    You cant cram an int into a short because the register size isn't large enough and it will shave off your most significant bits... if it somehow gets past the compiler. My point was that long vs short, etc, had no bearing on any calculations (like Integer math does). That's all for the compiler to worry about.

    public static void main(String[] args) {
    short intel, wis;
    int result;

    intel = 255;
    wis = 255;
    result = intel + wis;

    System.out.println(result);
    }

    output: 510

    Using the appropriately sized primitive type speeds things up (if you know your value caps). It's not noticeable on a small procedure like mine, but when you're doing a million of these function calls every 6 seconds, it's very noticeable. Had I used an INT for intel and wis, i'd be using more of the registers and requiring more clock cycles. I think when you are using 2 shorts, it uses half a register for each rather than half of 2 registers.

    I wonder when SOE allowed us to break the stat cap beyond 255 if they actually changed the primitive type, or just made another variable line and added them together. I don't know how scalable the old servers were and if you could easily change a table. I seem to recall my brief stint using Oracle servers that it wasn't possible without a data migration.. or I just wasn't knowledgeable enough =D

    Meh. I work on smaller servers and applications than EQ so I've never had a need to find out ;)
  3. Random_Enchanter Augur

    Yakk, Marshall the points we should be trying to discuss (make?) is not the return on sheild AC to migitation AC but at what point does number or % increse in migitation AC effect the DI distrabution. because lets be honest, it makes almost no sence to upgrade 100 worn AC if it doesn't change the DI, be that sheild AC, buffed AC or worn AC. What we need to start doing is parsing the difference in migitation AC per class to determine the exact effect (if any) of migitation AC increases on DI.
  4. Serriah_Test Augur


    Yes, what will everyone find out...?

    /readies 2 hander with 2 lifetap procs thread....
    /grin
  5. Tearsin Rain Augur

    we've been doing those parses for over a decade - the problem is that there's too many variables and too little info known about how the combat code.
    this is pretty much all we know:
    more atk = higher DI, higher AC = lower DI

    how much atk does a given mob have? we have no idea.
    how does ATK and AC interact with each other? we have no idea.

    there are just so many unknown factors that make parsing useless for anything except for a specific mob, it can't tell us anything about the game's combat in general besides what we already know which is: moar AC iz gud.
  6. Brohg Augur

    Dzarn, thank you thank you thank you for posting this.

    Also, if well wishes or, like, cookies can make this part



    happen any faster, you just let me know.
  7. Random_Enchanter Augur

    the calculated forumlas will be the same regardless of the mobs attack (liniar or exponental) as such the effect will be the same. A parse based off the same char, same buffs, same mob with the char using a sheild vs no sheild vs less geared ac and knowing the shown AC and given the DI spread will tell use a lot as we now know the true mitigation AC forumla.
    with sheild gives us a baseline
    with less geared ac (= sheild ac amount) tells the difference in DI difference gained from the added AC
    with out sheild tells the difference in DI difference gained from the sheild from worn.
    As it is the same mob on all three the mob's attack remains the same, thus the difference in the three parses becomes RNG and ac based. Longer parses pull out the RNG.
  8. Tearsin Rain Augur

    let me preface this entire post by saying i'm not trying to argue with you or shoot down what you're saying - this isn't me trying to say you're wrong, i'm just presenting my thoughts on why the info you're talking about may not give the details you're implying it will, in order to further discussion about what we know and don't know regarding EQ's combat mechanics.

    but again, all that does (at best) is give us AC breakpoints for a single mob.
    we still won't know how much ATK that mob has, and it won't help much in terms of gearing because two mobs in the same zone can (and often do) have vastly different atk values.
    you can even have different ATK values within the same spawn point, since most spawn points have multiple level variations on the same mob.

    not really it won't, no - it will just tell us "moar AC iz gud" and in theory if you parse it enough give us an idea of AC breakpoints against specific NPCs.

    except that damage parsing has really never worked that way in EQ - you can't just run a parse without a shield, then a parse with a shield, and go "okay so 250 AC equals out to -2 DI across the board".
    combat parsing in EQ rarely gives anything other than trends or the rough area of a breakpoint.

    which still doesn't tell us anything except AC points for that particular mob.
  9. Yakk New Member

    But that has absolutely nothing to do with 1+softcap%^2, so I'm not sure how I'm supposed to read Marshall's mind.
    You mean which of the 20 damage levels is chosen on a given attack? That, from all intents and purposes, seems to be a relatively continuous function of AC, at least at the granularity we can tease it out from parses.
  10. Random_Enchanter Augur

    starting points, pull the data from one mob, then run same tests with a different mob, and another etc. Trend lines will start to show and more accuracy can be given. I personaly would rather like to hear "+AC(%?) between A and B lowers DI by 1" rather than "moar AC ez gud". While I agree it wont give us exacts it will give us a general idea which I belive is a LOT better than what has been known for the past 15 years.

    would you rather make pointless arguments over a forumla thats been spoiled or try to use the spoiled forumla to figure out the aproxamite next step?

    Correct, and i for one want to know at what aproxamite increase in Migitation AC (rAC? still dont know) does that start to show sigficant levels of improvment. With improvment being defined as lower damage level hit. If as an enchanter i want to know this, since it basicaly defines the upgrade path to take, I would think all tanks want to know this as you all get hit way more than me (or so I hope).
  11. Tearsin Rain Augur

    but, again, combat in EQ simply doesn't work that way - you're suggesting something which fundamentally does not exist.
    you'll never, ever have a scenario wherein you run a parse and can see "okay the average DI is X" and then add 50 AC and run another parse and can see "okay the average DI is X-1".
    you'll never see parses like that because that's not how EQ's combat system operates, so unfortunately "+AC(%?) between A and B lowers DI by 1" is a formula that can never and will never exist.
    (or, at least, never in the sense that it provides actionable information within the current context of the game and the gearing options available)

    the issue though is that the 'next step' is just as shrouded as it was before dzarn made his post.
    knowing how the game derives your AC is interesting and esoteric but ultimately completely pointless if we don't know: A. how the system calculates AC vs DI, B. how ATK and AC interact to determine DI, and C. how much ATK a given mob has.

    you'll never ever see it that simply, damage intake doesn't change in terms of max hit, it changes in terms of average DI distribution.
    over the years, we've seen that as your AC increases you see a general trend in your average DI distribution lowering - there's no single breakpoint we've ever found, there's no point at which you can say "okay you need precisely X amount of AC to shift the average DI down one"... and as i said, even if you did the insanely massive amount of parsing required in order to narrow that down to that level, it would only be relevant for that one single mob.
  12. Brogett Augur

    Some ideas to test.

    1) Attack a dummy while constantly varying mitigation. I did this and you can see the graph earlier in this thread. Basically just using something like the old ranger auto-fire program to do a "/say increase mitigation" every minute. Then attack for several hours and you'll see a graph over time of your DI20 chance. It works in reverse too - mob attacking you - but it's tediously slow to gather data IMO and you can't do it with multiple dummies hitting you unless you can use cycle NPC key in there too.

    2, 3, 4) repeat experiment 1 but using progressively higher levels attack.

    Then we get a series of curves. Again, are they the same curve just shifted (AC - attack) or the same curve by stretched/squashed (AC/attack or similar)?

    The shape of the curve is also important. Basically it's graphing the dependency of one variable on another (and on several hidden ones). You can see which bits are asymptotes (DI 20 is) and which bits are not (DI 1), etc.

    Player attack is more complex than mob attack too as there is the second roll; rand(damage_table)/100+1. This is also heavily clipped, so likely it is doing a random with larger extents and being clipped in < and > code checks. This roll is also affected by attack it seems.
  13. Random_Enchanter Augur

    I'm not trying to narrow it down to a single number, I'm trying to narrow it down to a range of numbers. And while yes it will be different per mob per expantion, there are so many similaritys between all mobs and all expantions that while a generization is made, it will be a better generlization than "more ac is good", even if the better generilzation is "more ac is good, but only in increments of 100".
    Nuke < Missile < Mortar round < Gernade < Bullet < Knife < Needle; they all kill you its just a matter of aim need in order for it TO kill. I'm suggesting that the work be done to go from the Nuke level to the missile or mortar level and I highly doubt that at this time we can get it down any more, though i would challange people to try.
  14. Yakk New Member

    The generalization is "more AC is good". No parse has found a point where AC stopped doing something, and no parse has found "step" response to more AC.

    What more, reducing which of the DI's you take by 1 is only one of the effects of AC -- it also reduces variance in incoming damage. In content that survival is in question, it isn't the average blow or set of blows that kills you if you are using runes+mez/root or healing to keep you alive: it is above average blows ("damage spikes") that kill you (together with above average number of hits caused by multiple creatures/multiple attacks/flurries/avoidance failures).

    Individual creatures have been parsed with varying amounts of AC, and almost every time this is done it turns out that picking the item with more AC was the better choice (after making sure you have relevant mitigation foci: but in todays itemization environment, that is pretty much a given).

    As an enchanter, you should know the relative value of AC on your shield compared to elsewhere, which is (3/4 + 3/4*1/4)/(1/4) = (9/16 + 3/16)*4 = (12/4) = 3x the value of AC on other slots. For warriors, (3/4 + 1/4*.35)/(.35) =~ 2.4x, for Knights (3/4 + 1/4*.33)/.33 =~ 2.5x

    The more interesting part of the above is that it shows the impact of AGI and hAGI on mitigation and avoidance AC.
  15. Fortizeemo New Member

    Trying to wrap my brain around all this math with a hangover is making my brain hurt.o_O

    I noticed it asked elsewhere in this thread something about how atk values factor into the player defensive calculations. My apologies if this was brought and I missed it.

    I had to do a little a digging to find but here was the thread from the druidsgrove regarding our attack debuffs.
    http://thedruidsgrove.org/archive/eq/t-13107.html

    At the time little was understood about how they work and Fenier's research on the topic ended up clarifying and quantifying alot of useful information about how mob damage is calculated.
    Sirene_Fippy likes this.
  16. artofnoise Augur

    to Dzarn and all who were involved (present and past) in this EQ "white paper"... Thank you! ... Holy StatStun, Batman!

    Recognizing that our displayed "AC" and "ATK" values are highly complicated, I re-submit that those lines have NEW labels such as "Defensive" and "Offensive", and make "AC" and "ATK" represent a total of worn + effect (buffs, tribute, etc.) Better yet, split them between worn and effect, but that might be too much. Anything that would help separate the raw values from the "supercalculisticexpressionalidocious" values would be a helpful.

    I say this knowing full well that this is an extremely loaded issue. The problem is that most players have no idea what they are looking at next to "AC" or "ATK" and thus are often left to form their own conclusions. Not to mention the fact that it is nearly impossible in today's high end game to figure out if you need to burn AAs on more ranks of "Enhanced Aggression".

    Adding more actual "tips" to the Inventory window's insanely underused "Tip" window might be even more helpful (hint hint).

    Thank you for all that you Dev folks do and please know that, even when we scream and yell, we all (mostly) still love you. ;)
  17. Fenthen aka Rath

    WTB better mitigation for Clerics/Bards over 10k AC!
  18. menown Augur

    (3/4 + 3/4*1/4)/(1/4) = (9/16 + 3/16)*4 = (12/4) = 3x

    3/4 =/= 9/16

    Sorry, on my phone in Taiwan right now so I am not going to type much..
  19. Daegun Augur

    True, to a point. If you have been following recent posts on TSW and EGN, I've run some comparative studies today on very old content. For the purposes of figuring out if "more ac" stopped showing an advantage, I did use current pets with astronomic ac values as they are capable of more raw mitigation than any player can presently achieve. I cross checked this "big gap" in one case by comparing it to a player tank. I was hoping to see more minimum hits vs eq classic mobs and fewer DIs, but as you can see below, that wasn't really the case. Remember that this same naked pet can expect a max DI of 15 on current xp group trash content with druid attack debuffs, and a max DI of 17 on current xp group trash without any debuffs.

    Test mobs: Trash from zone in of Vex thal, a hill giant from North Karana.

    For the trash mob in Vex thal, the max DI scored on an EM15 earth pet was DI 11 with a minimum (DI 1) hit rate of 76%.

    For the hill giant in North karana, the maximum hit on the same earth pet was DI 11 with a minimum DI hit rate of 78%.

    For a hill giant on a raid geared warrior, the maximum hit was DI 12 with a minimum hit rate of 76%.

    I did a follow-on test where the EM15 pet was given certitude and full bard ac songs. In this very old content with the gains on armor class from buffs/songs, the maximum DI was still DI 11 with a minimum hit rate of 78%. Flaws with these parses were the total number of hits - low compared to many of the parses I've recently done. The ac/mitigation difference between the pet and the raid geared warrior have already been shown to be astronomical based on relevant content parses. This did translate to very small differences on very old content - but they were minor and frankly irrelevant. Having said that, there WAS a difference Yakk, so in a way you are correct. AC was still doing something, but the amount of ac required to do something was huge ... huge. I did not parse the mobs with druid attack debuffs - I'm curious just how many DIs you can knock off with the combination of high ac and attack debuffs.

    Because of how the equations work serverside, what we do know is it's a dynamic relationship between the attacker and the attack-ee. Once you saturate the mob that you are fighting, there is a progressive decline in the potency of armor class - but even then, benefits can be measured. This relationship will be all over the place from tank to tank and mob to mob as the numbers and variables ... too many to take account for. Given what the best PC tanks can accomplish with the best gear these days, though ... PC tanks are a long way away from this point of diminishing returns.

    For all intents and purposes, more ac is always more good. Mathematically, more ac (and mob debuffs) is likewise more important for tank safety than many give credit to.
  20. Yakk New Member

    So, you might want to factor in the #hits to give a confidence interval on your min hit rate and max DI.

    Suppose we aim for a 99.7% or 3 standard deviations of "confidence".

    If you observe 0 events in T trails (in this case, a trial is a hit), then you can say that if the probability was 1-.003^(1/T) or greater, there would be a 99.7% chance that you'd have seen at least 1 hit.

    For min hit, things get a bit more complicated.

    If the real chance of a min hit is X%, then after T (with T reasonably large) trials 99.7% of the time you are going to see between X%+3*sqrt( X%(1-X%) / T ) and X%-3*sqrt( X%(1-X%) / T ).

    Now, the error bars (+/- 3*sqrt( X%(1-X%) / T )) are maximal at X=50%. So rather than going to all the work of inverting the relationship between X and the observed value, we just take maximal error bars, and punt.

    X% +/- 3 * sqrt( 1/4T ) = X% +/- 3/2 sqrt(1/T)
    which is nice and easy to work with.

    So if you observe 76% of hits are for the lowest DI in a parse of 10000 hits, then you can say that if the actual chance of getting lowest DI was outside of
    76% +/- 3/2 sqrt(1/10000)
    = 76% +/- 3/2 sqrt(1/10000)
    = 76% +/- 3/2 / 100
    = 76% +/- 1.5%
    = the range 74.5% to 77.5%
    then there would be less than a 0.003% chance of seeing your parse (which is pretty surprising!)

    If two different parses have such ranges that do not overlap, then you can be rather confident in saying the engine is giving a different chance of that event happening.

    If they do overlap, it is more complicated, as the odds that one of them was surprisingly low and the other surprisingly high is more unlikely than one or the other being far from where you'd expect it to be. It means if you want to say something confident about them being different, you may have to do more work.

    The nice thing about these two rules is that they are pretty easy to use mechanically.

    If you observe X% is a particular event in T trials, be confident that saying the actual value is X% +/- 3/2 sqrt(1/T) (remember than 1% = 0.01 without the percent)

    If you observe 0 instances of an event in T trials, be confident that saying the chance of the event happening is less than 1-.003^(1/T). (Note that you could use the above, but this is a much tighter bound, because the math is easier here)

    A 10k hit parse with 0 of some event means saying the event has a <0.06% chance is reasonable.
    A 1k hit parse with 0 of some event means saying the event has a <0.6% chance is reasonable.
    A 100 hit parse with 0 of some event means saying the event has a <6% chance is reasonable.

    I'm using 3 standard deviations for my standard of reasonableness, which some would consider unreasonably strict.
    Brogett likes this.