Wizard DPS Web App

Discussion in 'Casters' started by kizant, Mar 17, 2017.

  1. kizant Augur

    I've been working on a web app the past few weeks that I thought I'd share with everyone. It's not what I really intended to do but I needed components for simulating a spell rotation and calculating damage, etc. So, it was helpful to make a simple web app for testing purposes. Then after about a week I figured why not focus on the calculator aspect first? Maybe some other folks would find it useful and I'm sure I'm not the only one who's been intimidated by Beimeith's spreadsheet. As awesome as it is.

    I have spent a lot of time on the Test server resetting AAs and verifying everything works out correctly. For the basic calculations I think everything is solid. I get exactly what I get in game with the same setup. I'm a little less confident in how I'm estimating fuse procs and claw damage but I think what I have is fair. Although, I do have plans to rework my estimates for claw syllables but what it's doing isn't that bad.

    Oh and a few caveats. My focus is on raiding current content. The few areas where I have more options than necessarily were because they were useful for testing and super easy to do. I'm also not too concerned about things like casting time and mana usage. I've pretty much hard coded all the casting times of spells to what they are with raid gear and piety. Plus I'm only doing rk3 version of everything. Unless there's a lot of interest in seeing that stuff I probably won't be addressing it further.

    I also spent some time recently cleaning up the UI so hopefully it's not too horrible to figure out. I haven't tested in many browsers but I think Firefox and Chrome should be fine. Just pick some spells and you'll see it do stuff. It works like a multibind and tries to cast the first spell that's available. I'm trying to keep it accurate to the game as possible. Although, there's one or two bugs in EQ I haven't implemented yet. You can hover over spell in the spell timeline and it'll show you a good amount of the details that went into the calculation. You can zoom in and out and I try to keep the different charts in sync. It works pretty well in shorter time frames. If you go for 500 seconds or more it may be a little less great. I've got some ideas how to improve on that thought. I'm also still working on how to expose the data for procs and spells like wildether since it's really a combination of spells averaged out. Right now, you just won't see any details for that stuff. Anyway, here's the link. Maybe someone will find it useful!

  2. gotwar Gotcharms

    Can't click "like" enough times!

    Do Mages next! All the framework is already there, just need the spells and numbers for each Magician AA!
    IblisTheMage, Bleve and Sancus like this.
  3. Skvoid Elder

    Just done a couple short tests on target dummy in guild hall, I have all rank 3 spells but only rank 4 of Dicho, full TBM raid gear 1259 spell dmg and max AA for all spells and abilities I use and EoK arms. Plugging in my spell rotation and only running fury of ro, its about 10k dps off what I am getting from gameparse, it predicts my rotation (Claw, Vortex, Fuse, Skyblaze, Rimeblast, AA nukes in between) should get me 93k dps and I get 84k dps. I cast till OOM don't use gambit and click off any twincasts I get. (I use a E spam key with spell gems 1-6 bound to it)

    I had a play with spells and a rotation that according to your parser would give me 100k sustained only got me 74k dps, (Dicho, Vortex. Fuse, Ethereal sky, Cloudburst, Claw, with AA nukes in between)

    What do you think the best rotation is for burn and max sustained DPS?

    I also noticed that parsers assumes 48% crit rate, I did three parse of between 211 and 248 seconds and my parser got my crit rate at 35% 30% 39% of total (45%, 38%, 50% as dirdmg, what is the difference here?)

    Burn Crit rate with everything up only seems to get you to 98% crit rate? Best burn i get could out of the app was 485k DPS.

    Anyway a interesting app, it's a lot of fun to play around with, good work!
  4. gotwar Gotcharms

    Kiz can more accurately answer your questions but...

    Anytime you add Claw into the rotation the numbers are going to be a bit off because of the way its coded. Something about adding averages. Claw seemed like the biggest headache to code from listening to Kiz try to work that one out. If you get screwed by the RNG on your claw procs, you could end up with much lower numbers, for example.

    You have to do much longer parses to get a solid return on crit rate. Think more like 1000 casts rather than 100. That being said, there was reasoning behind 48% crit rate rather than 45%, but I'm not a Wizard so I don't remember what that is.

    Differences between actual DPS vs calculated DPS should be close, but won't be exact. RNG plays a factor here. The app tells you what your DPS *should* be based on averages. It's science, but not exact science. Lag can also play a factor on long parses due to GCD lockouts (hence the GCD override). The higher your ping, the higher your GCD override should be to compensate.

    The app makes it easy(ish) to discover "whats my optimal cast order in scenario X" as it can change depending on ADPS/burns.

    All of that being said... I think Kizant posted this to both get feedback and help test potential errors in the app, so the more people who play with it the more accurate it can be. I know he's spent a ton of time over the last few weeks making sure the actual damage calculations are correct, but mistakes do happen!
    Sancus likes this.
  5. Sancus Augur

    This is really cool. I can't imagine how much work this took to put together, especially with Claw, which, from experience (well, with Chaotic), can be a to approximate.

    Keeping in mind this all seems like magic to me and I have no clue how difficult it would be to add these in, a few things I'd love to see:
    • Season's Wrath
    • Dichotomic Reinforcement
    • Chromatic Haze (the proc)
    • Multiple uses of ADPS abilities, or, alternatively, a manual override for the duration of ADPS abilities
    • Tome of the Obulous
    I'd love to see a Mage version too, but I imagine that's a large amount of work even with the framework in place.
    Maelyce likes this.
  6. Sancus Augur

    For the first part, my guess is the app approximates DPS based on having the chance to proc twincast from claw (and the subsequent 18s of twincasting), which means just clicking it off will yield lower DPS. /testcopy-ing and using test dummies (where buffs expire) probably would better align with what the app predicts. That's on top of RNG issues with claw that gotwar mentioned.

    As far as crit rate, Wizards have a passive crit rate for direct damage of 48% (45% from FoM, 2% innate, 1% DoN). However, if you're doing some other type of damage (e.g. DoT damage from Pyromancy), gamparse will report a lower overall crit rate. You should be able to see what type of damage is pulling down your reported crit rate in gamparse. Either way, it isn't a huge deal; the direct damage crit rate is the important part, since that's what this app predicts.

    For burn crit rate, what duration did you use? You should be able to get above 98% crit rate with ADPS depending on your duration. One of the reasons it's often lower though is that Frenzied Devastation only boosts the crit rate of nukes that use counters, which means that Forces (and possibly other things?) won't benefit from its crit rate modifier. In those cases, your overall crit rate will be lower than the crit rate most of your nukes have.
  7. Skvoid Elder

    Good explanations guys, yea I guess if he's assuming that claw procs TC at some kind of average clicking it off when it procs will lower my DPS compared to his average.(test dummy in GGH means buffs don't drop ofc, so I would need to somehow make sure I click it off after 18 seconds)

    The burn i just used the duration he had in there which is 120 (seconds I assume?) So in theory you should be at max everything for duration.

    I had pryo on so the dot from that maybe affecting my crit rate reporting.
  8. Sancus Augur

    On a semi-related note regarding the calculation side of things, I think it's understating the impact of Claw's twincast proc.

    If you put in only Claw as your rotation (i.e. casting claw on refresh), it gives the first claw a 5% twincast chance and each subsequent claw a 15% twincast chance. I don't think that accurately estimates the chance to twincast, and I'll try to explain why:

    Claw 1:
    Twincast Chance: 5%
    Chance to proc twincast: 10.45%=(.95*.1)+(.5*(.1+(.9*.1)))

    Probability of 18s of twincast: 10.45%
    Probability of no twincast: 89.55%

    TC Chance of spells cast between Claw 1 and 2: 14.928%

    Claw 2:
    Twincast Chance: 14.928%
    Chance to proc twincast: 11.344%

    Probability of 18s of twincast: 11.344%
    Probability of 10.5s of twincast: 8.465%
    Probability of no twincast: 80.192%

    TC Chance of spells cast between Claw 2 and 3: 23.818%

    Claw 3:
    Twincast Chance: 23.818%
    Chance to proc twincast: 12.274%

    Probability of 18s of twincast: 12.144%
    Probability of 10.5s of twincast: 9.188%
    Probability of 3s of twincast: 6.856%
    Probability of no twincast: 71.812%

    TC Chance of spells cast between Claw 3 and 4: 31.779%

    Claw 4:
    Twincast Chance: 25.265%
    Chance to proc twincast: 12.274%

    Probability of 18s of twincast: 12.274%
    Probability of 10.5s of twincast: 9.836%
    Probability of 3s of twincast: 7.045%

    TC Chance of spells cast between Claw 4 and 5: 33.075%

    And it continues on. For readability I didn't include the math, but I copied my spreadsheet into google docs. I apologize for how terrible the readability is.

    Essentially, because claw twincasting causes you to receive claw reflection twice, the probability that you twincast is generally higher than 15%. I don't know what a great way to approximate it would be, though.
  9. Xikteny Augur

    Very neat!
  10. kizant Augur

    Thanks for the comments! It wasn't toooo hard to put together but I am software developer to begin so the only thing I had to really learn was the EQ specifics. There's been a lot of good answers to the questions so far but I'll see if I can add a little more detail.

    You picked a rather difficult spell rotation but there are some things to look for which may effect the results you're seeing in a real situation. Thanks for testing it and the feedback!

    1. You really do need to spam that key as fast as you can. I have my logitech mouse auto repeat set to every 50ms to get similar numbers. If I up to even 200ms I start to see a difference.

    2. There is lag to consider. Were to total spell counts similar between the app and Gamparse? If it has a few more casts and you have a higher ping you might want to up the GCD override to like 1.9 and see if that helps. If you really want to figure out a good number then can tell you what I do.

    3. There's A LOT of randomness with that spell lineup. You would really need to run it for a fairly long time to see it average out to what I'm estimating the with the app. Plus were you letting twincast run at all or really just clicking it off entirely? I'll explain more about my claw estimate works in a different post but you would have to let it run for 20 seconds.

    4. The crit rate is very concerning. My timeline will show 48% without extra ADPS and using the default settings. Others have explained where that comes from. But in my stats window in the top left it should show a crit rate based on the average from the spells being used. So, like an AA nuke will get 48% if only FD is running but Skyblaze gets 98%. Then it'll report the average of the two. With default settings I'm seeing 69% with only Skyblaze and AA nukes turned on. Was the Gamparse rate a lot different than what the stats window said?

    5. Also there's a very small difference with how I'm figuring out numbers vs Gamparse that only really matters in short time frames. I'm starting from time zero on my timeline even though a spell may not land until 2 seconds in. Gamparse I believe starts counting when it sees the first damage reported/spell hitting. So if it says it took 100 seconds then my app is probably basing everything off 102 seconds.
  11. kizant Augur


    Those are all good suggestions. The tome is something I was actually adding yesterday but got distracted with real work and never finished. :( You may have noticed that you can resize most the ADPS. Only ITC/FD/AD/CH will autoresize on you when charges run out. The others can be as long or short as you want. That's my one workaround that I use myself for seeing how things work out with like 2 Auspice in a row. It's not helpful for planning a long time frame...but in the mean time you can try that if you haven't. It's definitely on the list of things to do as well as addressing some performance an UI issues with longer time frames. Season's Wrath!! I knew I forgot an easy one. I told myself that once I implement chomatic haze that I should add that too since it works almost entirely the same as far as being on the timeline and having charges. But I forgot.

    For Gift of Chromatic Haze, I'll probably add another input box to let you choose how often to use it. It procs like what 8% of the time when encs nuke or stun? I forget off-hand but maybe I could default it to being applied to a single spell every 15 or 20 seconds and let you choose up to once a minute?

    As far as making a Mage version I don't have any clue at the moment how I'd handle pets/melee stuff since I haven't considered that at all. The ADPS and gear are all basically the same right? Adding standard spells that just do damage is very easy. Are there any complicated abilities that you think will make it hard? I don't know a lot about Mages. After I refactor a few more things I may be able to do something. Ideally, I'll get to a point where ADPS, equipment, and spells are all data driven and I can just swap out different json files. We'll see.
  12. kizant Augur

    You bring up a really good point and that's the kind of feedback I was hoping for so thanks for that. I avoided claw for a while because it seemed pretty hard to do. The 15% twincast your seeing is 10% from the claw proc and 5% from your AAs. To be clear, since twincast procs 10% of the time I decided to run a full duration twincast at a reduced rate of 10% every time claw is used. I thought I was being clever with reusing the twincast code I had already written in a simple way. But maybe it is underestimating it hmmmm.

    Yes. You're right. I'm going to redo claw and I think the new version will take everything into consideration. I just thought of how to make it fit into the 'framework' I have for charged based abilities. Right now, it's kind of doing it's own thing on the side. It's funny really. Programming this stuff is actually way easier than putting together the mathematical formula in your head. All I need to do is setup a current state and implement the spell casting logic that modifies the state. Then just 'cast' some spells and let it tell me the answer. This is basically how it works:

    1. Cast claw. It updates the current state by adding 10% twincast rate to the current value. So, we go from 5% to 15%.

    2. Then I 'cast' a 2nd claw with a modifier that is basically the current twincast rate. I already do this for every spell that can be twincast to figure out the additional damage to add. What happens is the 2nd cast will use the modifier to reduce any existing counters by a percentage but it'll calculate damage based on full counters being used. Then at the end it will return dmg * modifier. That way I keep counters representative of the fact that I'm only casting a partial spell but I also get a more accurate percent of the damage that would be done. I think it's been working ok.

    So, in the Claw case, the 2nd/modified cast it will update the current twincast rate like its already doing but it will be 'modified' by the 15% modifier. It'll go from 15% to 15% + 15% * 10%.

    3. Then the next round of spell casts will happen and I'll let the application surprise me with the answer it comes up. :D Fingers crossed. Anyway I'll think about it some more. This is just my first thought on how to make it work easy. I could me missing something. If the numbers go crazy high then I'll know it's probably wrong. I'll also add that it won't go on forever or anything. I have a separate process for finding expired timers and removing the modifications. So, a few claws in it'll max out as the first claw procs start expiring.

    OH and a silly question. How long does twincast last? Every time I use it it's different. I just hard coded 20 seconds for now to be lazy. I know it's technically 3 ticks but I guess beneficial buff AA stuff modifies it too or its just random I don't know. I can't keep track of everything that's one reason that motivated this app in the first place.
  13. Skvoid Elder

    I ran a couple more parses.I run oom in about 250 274 seconds not using any mana return abilities, using Claw, Vortex, Fuse, Skyblaze, Rimeblast, with AAs nuke in between. I let Tc cast run for roughly 18 20 seconds before clicking off. This time I did 120k dps and then 111k dps, obviously getting lucky on claw TC procs can really up your dps, as well as refreshes on gambit, which is why I like to cast it on cooldown. So it seems a little too conservative maybe if you let TC run for its duration?
  14. kizant Augur

    Yep it probably is a little low right now. We'll see what the new version can do. I may get to tomorrow I'm not sure.

    You also asked about the best spell rotations to use. I don't have a good answer to that because it depends on so many things that are outside of what this app can show. Like who wants to accidentally cast Shocking Vortex when your enc just hit Chroma Haze? Not to mention mana usage from Cloudburst or Dicho can get out of control. Like you're probably seeing.

    That said, you definitely want Cloudburst in your sustained lineup. Try Claw, Vortex, Fuse, Cloudburst, Skyblaze. Leave Rimeblast out unless you have AD/FD/ITC going. In that case maybe try Fuse, Skyblaze, Vortex, Rimeblast taking real world issues into consideration. Now with twincast spell active? That's a different story entirely. You'll have to do some experimenting.
  15. Sancus Augur

    Thanks for pointing that out, I saw you could rearrange/move them, but didn't realize they were resizable.
    IIRC it's a 5% proc rate, I'm not sure what the translates into in terms of how often it procs on average. Allowing a choice of how frequently to have it proc sounds great though.
    For main pets, I don't think it's worth trying to approximate their damage. You'll see huge variations depending on raid, mob AC, if they're lagging, etc, much of which isn't visible to players. For Remorseless Servant pets, I think the easiest option is to include an option to set their damage and lifespan (e.g. 350k over 40s), and then to add that to DPS (350k/40). That isn't a perfect solution because it would require someone to manually change it when changing/adding ADPS, but RS pet damage also varies quite significantly fight to fight, which is compounded by the fact that they can die early depending on AEs/ramp. Additionally, one of the main abilities that boosts them (Theft of Essence) depends significantly on the AC of the mob, which is fairly difficult to discern. I don't think it's a big deal any way you slice it though; the spell modeling is the important part.

    As far as Mage spells, the only one we have that's particularly annoying to model is Chaotic, which can likely be modeled similar to claw. There are a few differences, but they should be minor. The rest are all basic spells with set damage. It would probably require an option to choose the # of pets on the mob for Storm, but otherwise Storm's just a normal nuke.

    If it's possible, it would be pretty cool.

    Thanks for taking a look at that. The new method sounds better, but I don't know that I'm visualizing it properly in my head, so I'll wait to see what happens in the app.

    I looked back at a parse I ran a while ago (on my Mage w/ Chaotic), and the average length was just about 21 seconds. It was about a 10 hour parse, and I took the average length of each twincast that was less than 25s. They were all at least 18s.
  16. kizant Augur

    That doesn't sound too bad for pets. I'll let you know but if you want to help test and figure out to estimate stuff then I'll try to do it. Maybe in a couple weeks I could start on it.

    Nice! Thanks a lot. Saves me time from trying to figure it out. Maybe I'll bump it up to 21 but at least it's not too far off.
  17. Beimeith Lord of the Game

    Sancus gave correct information regarding the amount of passive crit rate (48% provided you have everything).

    One thing that wasn't mentioned however is that you will generally see a lower than average crit rate on live due to Arcane Fusion. Fusion has a crit rate cap of 15% because Elidroth was an idiot and thus it will always skew the numbers ever so slightly downward.

    Keep in mind this is a small amount, maybe +/- 1-3% depending on the length of the parse and luck, though it might be a point or two more in a very short parse with extremely bad luck. It would never be something as high as 10% though.

    Not quite. Gamparse starts from the first damage it sees, minus 1 second so that it can assign it as a DPS value. Or to put it another way, when GamParse sees First Blood, it counts that as Time1, which means Time0 was 1 second before First Blood. DPS is Damage / Time, and since Time cannot equal zero because dividing by zero makes the universe explode First Blood has to be > 0 so it is 1.

    This is why your Total Damage = DPS for the first nuke/hit of a fight. You open with a Chromatic Haze and nuke for 2 million and show as 2 million dps, and then your next nuke hits for 500kx2 3 seconds later and your dps plummets down to 750k because 3m/4s = 750k dps.

    While it could in theory be changed to try and detect the beginning of a spell cast that starts a fight, the problem is it is virtually impossible to ensure that that method works consistently and without consistency parsing is worthless. I'd rather it be just a tiny, tiny bit off, but be a tiny, tiny bit off in the same way for everyone, every time, than have it work perfectly some of the time and be way off the rest of the time.
    IblisTheMage and gotwar like this.
  18. kizant Augur

    Ah okay that makes sense. Good to know!

    Oh and about Arcane Fusion. You happen to know an official proc rate for it? I did some parsing and ended up going with 4%.

    And for anyone doing a direct comparison between live and the web app, I'm not even counting it as an actual spell cast. So, it's not being counted at all in the crit rate. I'm just appending an extra 4% of its average damage to spells that meet the 3 second requirement. I think that's a fair way of doing it but if anyone has other thoughts let me know.

    Also, for anyone looking very closely I broke Sorcerer's Vengeance while working on adding the dps augs two days ago. That's why the numbers are off a bit. I'm fixing that now while adding Tome of Obulous.
  19. Vrinda Augur

    First, thank you kizant for doing this! It's been amazing to play with the EQ Wizard DPS Tool instead of tweaking my spell lineup for the 50th time and running yet another long parse to see what kind of difference it makes.
    Can you put a self quote in your sig? :)
  20. Bleve Lorekeeper

    Omg Kazint - I LOVE this! Been playing with it all day.

    One question - do you take into account Claw clearing spell gem timers for stuff like Fuse and Dico which have super long refresh? Theoretically I should see one or two more Dicho casts if I throw Claw into the mix, but I don't see that happening on the app. Is there a way for the app to tell me total spells cast, broken down by each spell?
    Maelyce likes this.