coolmodi / SpellCalc

A WoW classic addon providing information for spells, like actual damage done, crit and hit chance, scaling etc.
43 stars 8 forks source link

Feature: ignore regeneration option for DPM/HPM #33

Closed mikmoore closed 11 months ago

mikmoore commented 2 years ago

Great addon!

Motivation

Personally, I find spell efficiency more useful when computed without passive regeneration.

The way one assesses total efficiency depends on both DPM and DPS. Blending time into DPM makes that analysis harder, not easier. Regen-aware DPM (and DOOM, but that has other uses) artificially favors low costs and slow casting when these are strictly inferior to a higher cost (with the same effect-per-cost) and fast casting.

Consider 3 spells and a regeneration of 10mp5: (1) 100 damage for 20 mana in 3.0sec cast -> 5 DPM-raw, 7.14 DPM-regen (2) 100 damage for 20 mana in 1.5sec cast -> 5 DPM-raw, 5.88 DPM-regen (3) 200 damage for 40 mana in 3.0sec cast -> 5 DPM-raw, 5.88 DPM-regen

In raw terms, all do 5 DPM. A regen-aware DPM calculation insists that (1) is the most efficient. In truth, (1) is less efficient because you could use spell (2) or (3) half the of time, spend the other half making a sandwich while doing /dance and enjoying out-of-5SR regeneration, and do identical DPS to (1) while having more mana left over at the end.

In non-hypotheticals, I notice that the low cost of lifebloom results in a massive distortion of its HPM when including regeneration - it has a raw HPM around 25 but regeneration can inflate this to 55 in SpellCalc. It is definitely the most efficient druid heal, but by a factor of 2 rather than 5. One can witness the same effect with any downranked spell - it will have inferior DPS but regen-aware DPM can muddy the comparison by giving the illusion of efficiency.

Feature

Could we get a new DPM/HPM tooltip that excludes passive regeneration? By passive regeneration, I mean only spirit and mp5 based regeneration. I would still include mana returns from procs and crits, discounts from clearcasting, etc because those apply only when casting a spell.

coolmodi commented 2 years ago

The only way to actually compare spells in their efficiency is to calculate the effective cost for a common HPS/DPS target value. I had that as an experimental feature a while back but never used it in the end, which is why I scrapped it again. As it is now I at least know that I could effectively put out ~3k raw HPS at 50+ HPM if I roll LB on 4 targets. In other words, the current value at least represents reality for the "spam" case, while a value without regeneration taken into account would just be a purely theoretical value.

I understand why you'd want a "raw" per mana value though, it can be somewhat more useful for comparing spells, and I agree that the current solution can be misleading if looking at it ignorantly. I'll see how much work it is to implement a second value when I have the time.

mikmoore commented 2 years ago

Thanks for the reply! It had been my intention to follow this up with a PR. I got tangled up between holidays and not actually knowing LUA or the UI frontend. It was easy enough to naively modify the code to not account for regeneration, but it resulted in some downstream mistakes on spells with special-case calculations, as I hadn't adjusted those as well. I went back and forth a lot, as there was no perfect solution, but among the less disruptive and more promising solutions was to record the while-casting regen of each spell and then make the relevant DPM adjustments later.

Hopefully I'll have some time next month to assemble a mostly-viable PR, but if you get to it first then just as well.