XaiJu
hekili
hekili

patreon


The End of 2017

This is Part One of a two-part series.

First, thank you to all of my patrons, supporters, and contributors this year.  Both financial support and feedback are greatly appreciated, and resulted in some significant improvements and changes to the addon this past December.  Additionally, your donations helped me cover some of the cost of rebuilding my PC, which conveniently died on New Year's Eve.  Mahalo!

Now, for December's updates...

Performance:  Optimization

In December, I took some big steps with regard to optimization for the addon.  The short version:  the addon now does a better job of avoiding unnecessary "resets" where it reconsiders its recommendations.  For the most part, the addon responds to changes that occur -- you got a proc, you gained a resource, your target changed -- and that prompts the addon to see if something more important should be recommended.  However, sometimes the addon would prepare itself to make new recommendations and then decide it didn't need to actually update.  I revised the code so that it will no longer do the prep-work ahead of time if it doesn't actually need to change its recommendations.  This should be a significant improvement, especially for Monks, because the issue was worsened for every additional "display" that existed for your class.  Even ones that aren't in your spec.  Oops.

Performance:  Rechecking

Another measure taken to improve optimization is a rechecking system.  This is an artifact of basing the addon off of SimulationCraft.  Basically, SimulationCraft operates by looking at every 0.1s window of time and recommending the highest priority ability that has its criteria met at that time.  However, this addon looks forward in time -- not at what *is* ready, necessarily, but what *will be* ready, soonest.  It's a nuanced distinction and hard to describe at times.  A short example would be when you need to refresh a buff -- let's say Flametongue.

In SimulationCraft, one entry for Flametongue says "use the ability if you don't have the Flametongue buff, or if Flametongue has less than 4.8 seconds remaining."  SimulationCraft evaluates and decides whether to recommend Flametongue based on those criteria every 0.1s and simulates your behavior accordingly.  If you have 5 seconds on your Flametongue buff right now, then it won't use Flametongue now or in 0.1s.  At 0.2s, it decides to recommend it and you're set.

The addon doesn't want to have empty gaps in its recommendations whenever it can be avoided.  So when it checks whether to recommend Flametongue, it checks whether it is ready now, or at the next global cooldown, and it also now knows that "when Flametongue has 4.8 seconds remaining" then it should check again.  This has to be set up for each individual ability, and needs to be expanded to some specializations, but has helped prevent situations when abilities would otherwise just suddenly "pop up" in the recommendations at a certain timeframe, instead of anticipating the change.

Performance:  Resources

The addon also has a newer system for forecasting resource gains.  If you have an ability that generates additional energy over several seconds, the addon can now model that effectively and with increased efficiency.  This helps the addon make smarter recommendations when it is looking further into the future.  To keep performance sane, these resource gains are only calculated for a few seconds, but this appears effective and minimizes its impact on processing time.

Accessibility Improvements

After receiving a request from an addon user who plays the game along with a sight-impaired sibling, I've added some API functions that can be used via other addons (like WeakAuras) to report what abilities the addon is recommending.  For the addon user and his sibling, this meant WeakAuras could be set up with sound queues for different abilities, prompting him to use those abilities accordingly.

The API functions, for reference, are Hekili:GetAbilityInfo, Hekili:GetDisplayByName, Hekili:GetActiveDisplays, and Hekili_GetRecommendedAbility.

Toggles

I changed the way that disabled/toggled abilities are handled by the addon.  Before, they would be treated as if you simply did not know them, but this often caused conflicts in other action lists.  For instance, if you were playing a Retribution Paladin, when artifact abilities were toggled off, saving Wake of Ashes would trick the addon into thinking you should dump your Holy Power, anticipating that you'd gain it all back with Wake.

This is different from SimulationCraft because SimulationCraft doesn't toggle abilities on/off or save them (typically) for special events.  Because the addon lets you control whether certain abilities should be recommended, it also has to account for these toggles when making recommendations.  Now, instead of pretending you don't know the abilities, it just treats them as if they are on cooldown indefinitely.  This has been more effective and more compatible with a variety of default SimulationCraft action lists, which is generally the goal for this addon.

Aura Detection

Aura -- that is, buff and debuff -- detection has been fine-tuned and required several revisions.  In general, when you're checking whether your Rake buff is up, you're referring to your own cast with a specific spell ID.  Unfortunately, in some cases, you can apply a "Rake" buff (as Feral) if your brought Thisalee out into the world and she cast her own.  I refined the aura detection to be more sensitive and specific.  This has worked well and prevents the addon from telling you that Rake is falling off when it's actually seeing Thisalee's "Rake" ability.

Target Detection

Since Legion launched, the addon has been able to detect how many enemies you are fighting via two methods.  The first is by looking at what you've recently hit -- the addon assumes that they're still nearby and engaged with you for several seconds -- and the second is by looking at enemy nameplates and seeing how many are within a certain range.

The first method works well for both ranged and melee specs, but suffers from the fact that until the enemy has been hit, the addon does not know they are there.  The second method works well except that when enemy nameplates go off the screen, they are no longer counted.

I spent some time refining each of these to be more effective, and have plans for 2018 to further refine target counting.  As it turns out, how you want to count your targets is different for different classes and specializations.  An Elemental Shaman wants to multidot with Flame Shock on a council fight, but needs single-target recommendations for the rest of his/her priority because those targets are nowhere near each other.  An Affliction Warlock, however, might want to keep multidotting everyone in sight.  Basically, more work will be required to account for these differences.

Druids

I resolved a few significant bugs in the Feral Druid module.  Swipe, initially, wasn't implemented properly and this was resolved.  Most folks didn't notice because most of us take Brutal Slash for AOE fights, but Swipe is now properly modeled in Feral.

Paladins

Retribution Paladins were updated to match SimulationCraft changes and game changes (the tier 20 bonuses were inverted).

Shamans

Thanks to feedback, some issues with Elemental Shamans were sorted out.  Lava Beam wasn't shown properly, which has been fixed.  Totem Mastery was fixed and re-fixed to be more responsive.  Enhancement Shamans were given the ability to have the addon hold Earthen Spike temporarily -- using a keybind, you can tell the addon you'd like it to refrain from recommending Earthen Spike until you've chosen to use it yourself.  This can be helpful when you want to avoid using it on a pack of low-health adds who won't survive long enough for it to be beneficial.

Warlocks

The Affliction Warlock module is still a work-in-progress that has been on hold for some time.  However, I've gotten more and more questions about this spec and I will want to improve support in the near future.

Warriors

I fleshed out many of the Warrior abilities for both Fury and Arms.  This means that, when asking the addon to make multiple recommendations, each subsequent step will properly account for what happened when the previous ability was used.  I also modeled rage generation (quite accurately), making a fully-functional Warrior module much more realistic.  Newer action lists were imported from SimulationCraft and adjustments were made.  The biggest deficits for Warriors right now is that I have not developed the artifact traits, legendaries, and set bonuses -- all of which can have a significant impact on performance.

Other Classes

Any classes or specializations not detailed here received maintenance updates to their action lists and may have had minor bug fixes as well.

...and finally...

After a great deal of demand, Subtlety Rogue support has been added to the addon.  It is in initial alpha testing stages, but I have been using it and it works well in-general.  I will need to implement more of the artifact traits, uncommon talents, and legendaries, but you're welcome to give it a try now and give me feedback on what improvements might help more.

What's Next?

What *should* be next?  Should I prioritize Warlocks or Rogues or Warriors?  Work on target detection as noted earlier?  Clean up the configuration UI?  Create new display types?  Let me know on Discord ( https://discord.gg/3cCTFxM ) or Twitter ( @Hekili808 ).  And if you find any bugs, please report via CurseForge here ( https://wow.curseforge.com/projects/hekili/issues ).

More soon!



More Creators