Author: zoopercat (page 2 of 15)

Healer sims (Part 3) – modeling actual healing

Part 3 of this series covers actual healing. This is where we answer the BIG question: how do you sim healers?

How real players heal in-game

In order to answer the question, “how do you sim healers,” we should look at how real players heal.

Let’s say you are the team’s star healer (because I know you are). Let’s also say a new Resto Druid joins the team and asks for your advice on healing. Some of your advice might include:

(You can mouseover linked spells for tooltips. Also, in case you aren’t familiar with Resto Druids, I have notes in italics. )

  • Keep Lifebloom (HoT) on the tank (or yourself if you have the Photosynthesis talent). If possible refresh it when there are 4.5 seconds or less left on the HoT. (You get a larger “bloom” heal on the final tick of Lifebloom. Refreshing with less than 30% of the HoT duration remaining will also trigger the “bloom” and extend the duration of the HoT with no loss of ticks). 
  • Use Regrowth (Big Heal + HoT)  on the lowest health person when you have the Clearcasting buff. (Regrowth is generally a high-cost mana spell that does a lot of healing. Spamming it is a quick way to run out of mana. The Clearcasting buff makes it free to use)
  • Use Wild Growth (AoE HoT) when 6+ people in the raid are injured and you have some Rejuvenations (HoT) out. (The Resto Druid mastery increases your healing by 5% for every HoT on the target)

Healing boils down to a set of rules, like the ones above. But they also need to be put in priority order. Let’s look at another set of possible rules and how they  might compete for priority:

  1. Keep Lifebloom (HoT) on the tank, refreshing within 4.5 seconds of the final tick.
  2. Use Swiftmend (a life-saving instant-heal) if a raid member’s life drops below 30%.

Let’s assume there is only 1 second left on the tank’s lifebloom who is at 70% health and someone’s health just dropped below 30%. Which rule do you execute first?

Your answer determines the priority order of those two rules. In this example, the tank doesn’t appear to be in immediate danger, so we’d put the Swiftmend rule at the top.

But what would make you refresh Lifebloom on the tank over healing that other player? Perhaps if the tank’s life was at 50%? Or maybe if you are in a high tank-damage phase of the fight where every last bit of healing on the tank is critical. We’ll come back to this in a bit.

As you probably already know, healing can end up being a complicated set of rules that you are always reacting to in a fight. Let’s see how those can be translated into a healing sim.

Translating healing rules into the simulator

This section is not a tutorial on programming a simulator. Instead, it is intended to help you understand how the simulator is programmed to think like a human.

Simple rules

As long as you can describe a rule, it can be programmed into the simulator. Let’s look at how a Lifebloom spell is implemented in the simulator:

Healing apls - example spell


That rules says to use Lifebloom on the tank if there are 4.5 or less seconds left on the hot (HotRemainingSec). The simulator also has convenience functions for HoTs built right in, so you can replace that rule with CanRefreshHoT(Lifebloom).

These rules can be as simple or as complex as you want.

Complex rules

Speaking of complex rules – let’s come back to the example where you have to choose who to heal first: refresh Lifebloom on the tank or use Swiftmend on the person who just dropped below 30% health.

Let’s say there is a phase in the fight where the tank takes massive damage and he needs every last heal. This is where the advanced features of the healing simulator come into play.

Remember in part 2 of this series we talked about how boss fights are modeled? The major-tank damage phase of a boss fight is flagged so that the healing ‘rules’ can react to a dangerous situation just like a real player would. The priority of rules might look like this:

  1. If it’s a major-tank damage phase, use Lifebloom on the tank, refreshing it within 4.5 seconds of the final tick
  2. Use Swiftmend if a raid member’s life drops below 30%
  3. Use Lifebloom on the tank, refreshing it within 4.5 seconds of the final tick

You see the Lifebloom rule is there twice because the priority is important. It takes top priority only if it’s during a major tank-damage phase, otherwise, players below 30% health are more important. This is one way to program the simulator to make sure it picks the right spells and targets at the right time.

Grouping rules

As your team’s star healer, you probably don’t think of your spell rules and priority like that last example. You aren’t listing Lifebloom out in your head twice… always asking first, “Are we in a major tank-damage phase? If so, I should use Lifebloom, if not, I should do something else.”

Instead, you probably say to yourself, “When I am in a major-tank damage phase, switch to this set of rules.” You might also say, “When we are in a heavy raid-wide AoE damage phase, switch to my heavy AoE healing.”

Our ‘grouping’ feature in the simulator allows us to organize these healing rules to be more similar to how us humans think. The groups of rules might look like this:

  • When we are in a major-tank damage phase, jump to this set of rules:
    • Use Ironbark on the tank (a damage reduction buff)
    • Keep Lifebloom on the tank and refresh it with 4.5 or less seconds left
    • If the tank’s life drops below 60%, use Swiftmend (instant, life-saving heal)
    • Etc.
  • If a big AoE damage part of the fight is about to happen, use these rules:
    • Pre-HoT as many raid members as possible with Rejuvenation. Then when the AoE phase starts:
    • Pop cooldowns
    • Use Tranquility (big raid-wide AoE heal). (Note: big cooldowns like this are coordinated with other healers on the team, which the simulator accounts for. See “Other team healers” section for more info)
    • Etc
  • During normal phases of the fight, use these rules:
    • Use Swiftmend on any player who drops below 30% health
    • Use Wild Growth (AoE) when 6+ players are injured and you have Rejuvenations out
    • Use Lifebloom on the tank and refresh it with 4.5 second or less left
    • Etc.

These types of groupings allow for a simulated player to anticipate and prepare for specific events, just like players do in a real fight.

What about unexpected events, like healing someone who stands in the fire?

In part 2 of this series, we talked about how the boss script can account for people standing in fire. It’s a philosophical decision: do you want to simulate your team under the assumption they execute the fight well, that several people stand in fire, or do you want to make it a random chance? Whichever you pick, the boss script can be customized for that.

As for the healing rules, you can cover those to handle either situation. Rules like these will cover the fire standers:

  • Use Swiftmend (instant, life-saving heal) on anyone below 30% health
  • Use Rejuvenation on injured allies, starting with the most injured first
  • Use Wild Growth if 6+ members are injured

Those will be a part of your healing rules whether the boss script assumes the best or worst of your team. How often the simulator executes those rules will depend on the boss script, which controls who is taking damage and how much damage they are taking.

Adding Human Fuzziness

Humans don’t think like a computer, and we also don’t heal as exact as a computer can.

As humans, we aren’t waiting to use a heal until someone is at exactly 75% health… we use it when someone’s health bar looks like it is in that ballpark.

The simulator has a built-in feature to account for this.

Let’s say this is one of your rules:

  • HoT anyone who has 75% health or less

The simulator will put a HoT on anyone between 70% and 80% health because it has a +/- 5% buffer built in.

As a human, you inherently know that you should not just heal anyone below 75% health, but that you should also start with the person who has the lowest health.  So your rule would actually look like this:

  • HoT anyone who has 75% health or less, starting with the most injured player.

The simulator has another built-in human fuzz factor when trying to find the most injured player. As a computer, it can obviously pick between someone with 62% health and 62.5% health.

As a human, we won’t be that exact, especially in the middle of a chaotic battle. The simulator orders people by the most-injured, but then adds some ‘fuzz’ to be more human-like. If several of lowest players are within 5% of each other, one will be randomly chosen.

Other team healers & overhealing

Now that we’ve covered how to handle your healing, what about other healers on the team? They are also modeled in the simulator.

Right now, we model 3 types: a Restoration Druid, a Restoration Shaman, and a Mistweaver Monk. We did that to cover the different healing ‘styles’ you would find on a typical team.

Each of these types of healers has a set of basic spells they use under certain conditions. Let’s look at the Restoration Druid for an example. The AI healer has the following spells:

  • Tranquility (raid-wide AoE spell with a long cooldown that is usually coordinated with other healers)
  • Swiftmend (life-saving instant-heal)
  • Wild Growth (raid-wide AoE HoT)
  • Efflorescence (HoT on a target location)
  • Regrowth (direct heal + Hot)
  • Lifebloom (HoT)
  • Rejuvenation (HoT)

These spells also have conditions. For example, the conditions for Rejuvenation are:

  • Use Rejuvenation if an ally is at 85% health or lower
  • Use Rejuvenation if an AoE phase is coming up in 8 seconds or less (to pre-HoT the raid)

These “AI Healers” act like your other raid healers. This means they are reacting to similar environmental queues and health bars. They might heal someone you just put a HoT on or they might finish casting a big heal on the most injured player before you do. Both of these scenarios cause you to overheal.

These healers and their rules can also be customized through the theorycraft wiki. It’s pretty advanced, so if you want some help, hit us up on the forums. I hope to have some nice videos for this during Battle for Azeroth.

Coming up in part 4: Simming healing styles & theorycraft

We take a step back and look at how to evaluate healers by comparing rotations and looking at different metrics.

Simming healers BFA - part 4


Healer sims (Part 2) – modeling boss fights

Part 2 in this series looks at how boss mechanics and phases get incorporated into a healing simulation.

As a real (human) healer, you react to your environment. If the raid takes a ton of damage all at once, you use a big AoE cooldown. If a tank takes spike damage, you use an instant heal. If no one is under immediate danger, you HoT a few people or use small, mana efficient heal.

Every time you fight that boss, it seems like chaos. However, boss mechanics are very predictable and happen on a specific timer. That means it is easy to model into a simulator.

Each attempt on the boss feels chaotic because who gets hit and how many people get hit changes on each attempt. Some people run out of fires quickly, others don’t.

Our healing simulations can account for all of this. Below are some examples, but everything can be customized since the simulator is controlled by the open-source wiki.

Defining boss mechanics in the simulator

This is best explained by example.  Let’s take a common boss mechanic where someone is randomly targeted to take a lot of damage, and that repeats on a timeline.

To create that spell in the simulator, I’d have to designate a target, when it happens, and how much it hits for. Not so bad, right?

To make that work, I would program the following variables into the boss script:

  • Target: 1 random player, melee or ranged
  • Time: target someone 15 seconds into the fight and repeat every 20 seconds thereafter, until phase two.
  • Damage: 50% of ally health

To continue this example, let’s say some raid-wide damage happens at the start of phase 2. There are a few things I would program differently:

  • Target: entire raid
  • Time: start of phase 2
  • Damage: 70% damage multiplied by a random variant (to account for differing health pools)
  • Event type: Predictable AoE

Notice that the ‘Event Type: Predictable AoE’ flag shows up. This is important because it lets the simulator act like a human would, and it holds your big AoE heal until this event happens.

While the Single Target spell is predictable on a timeline, we don’t know who it will hit, so as a healer, it’s not possible to plan ahead. But for something like the AoE event,  healers can plan ahead.

Player positioning

Sometimes it matters where each player is – maybe they take more damage from a mechanic, or maybe it affects the healing they get. The simulator accounts for both.

For example, sometimes when the boss casts an AoE spell, players take less damage the further away they are (like the transition phase for Garothi). In the simulator, we can program melee to take more damage than ranged if we want to assume they don’t run as far away. Or we could  add an even greater variance in damage formula to account for some people running really far and others not so much.

In another example, some healing spells heal a group of players in a targeted area. We can define the number of players in an area and how far apart they are spread out.

Tanks also get special treatment in the simulator

Tanks are one of the most important targets to keep alive since a wipe is very likely if one goes down. So they’ve earned some special logic in the healing simulations.

Regular boss mechanics are easily programmable, like auto attacks and other single-target hits that focus on the tank instead of the rest of the raid. But let’s look at something a little more tricky and life-threatening.

Let’s say a boss applies a stacking debuff that causes the tank to take bigger and bigger hits. The tank starts to take critical, life-threatening damage at 4 stacks, but can’t swap with the OffTank until 6 stacks. Here’s how I’d program that into the simulator:

  • Target: tank
  • Time: start at 10 seconds
  • Repeat: stack debuff every 3 seconds
  • Max stacks: 6 (tank swap)
  • Damage: 15% of tank’s health per stack
  • Event Type: Tank

You might recognize the “Event Type” flag from the AoE example. This time, it is telling the simulator that is a predictable mechanic for the tank, who will be taking a large amount of damage. This lets the simulator plan ahead and pre-HoT the tank before she reaches 4 stacks and then gets ready to pop cooldowns and use big heals until the tank swap.

But what about that guy who stands in fire?

We all have a firestander on the team, don’t we? (I admit, I’ve stood in my fair share of fires, no judging here!) One common concern regarding healing simulations is, “You can’t predict when someone will stand in a fire.”

That’s true, you can’t predict it. Neither can a simulator.

So both humans and computers are in the same boat… neither can see the future. But we can simulate the chance of this happening, which would looks like this:

  • Create a damage effect in the boss script – let’s call it “Fire Patch”
  • Give Fire Patch a chance to target someone
  • Once someone is targeted, give Fire Patch a chance to either do damage, or not do damage (to simulate someone who moves out of it). This could be adjusted to the average your teammates tend to stand in fire.

There’s also one more important thing to consider: we use healing simulations to determine what talents to use, what gear to pick, and which stats are best. And all of those things have to be chosen before the fight begins – you can’t change talents mid-fight to cast bigger heals on a fire stander.  You can’t magically change all of your gems and enchants to haste mid fight so you can spam heals on a tank who’s about to die.

We have to make some decisions before the fight begins.

My advice is to choose one of the following strategies ahead of time, then use the simulator to account for that. For example, you might want to pick talents and gear assuming one of the following…

  • Your team will execute the fight really well
  • Some people on your team will mess up, but nothing drastic
  • The number of fire standers in your raid will drive you crazy

If you pick the first option, you might end up with gear that does the most overall healing. If you pick the last option, you might end up with gear that has really high burst healing but not as much total throughput. You could even do something crazy and have one of your healers on the team gear assuming the worst, and everyone else gear assuming the best or somewhere in between. That way, if someone does take a huge spike in damage, you have a healer equipped to cover it.

Up Next

Now that I covered the incoming raid damage, next I’ll talk about how to heal that damage. Healers don’t have a ‘rotation’ like DPSers do, but their logic is still very programmable. Simulate healers - part 3 - healing rotation

Healer simulations (Part 1) – Factors that need to be accounted for

Healers have gone so long without a simulation model, that “you can’t sim healers” often gets passed off as a fact.

It’s obviously more difficult to sim healers than DPS, but nowhere near impossible.

We started working on this in Legion and we’ve iterated on healing simulation models throughout that expansion. It proved to be pretty solid for the last tier, so now it’s ready for a featured debut in BfA.

I probably shouldn’t call this article series a ‘featured debut’ because that makes it sound like I have an action-packed, entertaining line up for you.  This is probably going to read more like a documentary… it won’t be as entertaining, but like any good documentary it should be educational, eye-opening, and dispel some myths. I just hope it doesn’t put you to sleep.

What factors need to be taken into account for a healing simulation?

One of the biggest challenges when creating a healing simulator has been, “Can we account for all of the necessary variables?”

To get a starting point, let’s look at DPS for a just a moment. Simulating DPS boils down to damaging a boss, switching to adds when necessary, and moving out of fire (among a few other small things).

Simulating healers requires reacting not only to boss mechanics, but the ever-changing health of each raid member. Things get a lot more complicated for healing sims.

So what’s needed to build an accurate healing simulation?

Damage taken by raid members: you have to know how much people get hit for so you know who to heal and how much healing they need.

  • Tank damage, including auto attacks from the boss, raid-wide damage, and spike damage
  • Player damage, including random-target boss mechanics and standing in fire
  • Raid damage, including raid-wide AoE damage

Boss fight mechanics and phases: this is important so the simulator can plan ahead just like you would in a real fight. For example, this allows the simulator to account for things like:

  • Phases: Pre-HoT team members before a big AoE spell
  • Phases: Save big healing cooldowns for a specific phase of the fight
  • Mechanics: tank swaps might make you change healing targets or heal differently if one of the tanks has a stacked debuff or a ticking DoT

Other sources of healing: 

  • Other healers on the team, including how many and how much they heal
  • The aggressiveness and/or skill of your other healers. This accounts for healers that might always outheal or underheal the rest of the team, which factors into overhealing
  • Overhealing: other healers are being simulated with their own logic, which lets us sim overhealing for all of your spells
  • Sharing big cooldowns: some parts of a fight benefit from coordinating the use of big heal cooldowns within the healing team

Your healing: The simulator needs to know  how you heal in a real fight so it can make decisions like a real player.

As a healer, you don’t really have a ‘rotation,’ you have a set of rules that respond to the environment and players’ health bars. You react to what’s going on around you. Here are some examples:

  • Heal the player with the lowest health first
  • If no one is missing a lot of health, use a small, mana-efficient heal on people who aren’t at 100%
  • Keep HoTs on the tank
  • If someone takes spike damage, use an instant, big heal to save them

Metrics: When you simulate a healer, you need some outputs to determine which talent or item has potential to do more healing.

  • HPS (Healing per Second) – A good measure of total throughput (on meters, it isn’t always a good measure of who your best healers are)
  • Ally Deaths – Another measure of how good a healer is – how many people died in the fight?
  • Mana – did you run out of mana? How much did that affect your total healing?

Simulating everything in these lists:

The simulator accounts for everything listed above (and more), which we’ll get into during this series of articles.  Meanwhile, if you think something is missing or have questions or ideas, head over to the forums to discuss these articles.

Healing simulations - modeling boss damage

Tank sims (Part 3) – DPS, Heals, & Metrics

As a tank, do you have enough gear to live through damage spikes? Can you live long enough for your healing team to help you recover? Are you tanky enough that you can use gear and talents that favor DPS a bit more?

By accurately modeling a healing team and measuring your tankiness vs damage, we can use tank simulations to answer these questions. Continue reading

Tank Sims (Part 2) – Modeling bosses & rotations

There isn’t much use for a tank simulator unless you have something to tank. I know, I’m captain obvious over here.

The boss mechanics and how tank ‘rotations’ interact with them are the core of tank simulations (and I think, the most interesting). I’m covering both of those things in this post (Part 2). Continue reading

Tank sims (Part 1) – Overview

Simulating DPS, even as a tank, is pretty straightforward. Most people who are familiar with simulators ‘get’ this concept and have used tank sims for this purpose.

Simulating your survival as a tank isn’t as straightforward and requires a more complex system. Since it’s complex and new to most people, I’ll be covering the system in detail in this series of tank-simulation articles. Continue reading

Uldir – Taloc guide to analyzing DPS

Taloc is mostly single target, with a phase in the middle where you kill some adds. There’s a moderate amount of movement, some of which puts melee out of range of the boss. This isn’t a guide on how to kill the boss, rather some analysis on how the boss will impact your damage, trinkets, and other gear. Continue reading

BfA updates for Ask Mr. Robot

We have some exciting updates and new features launching on Monday. If you have any questions for feedback, visit this forum thread.

One trend stands out in our BfA site: all gear and stat recommendations are based on simulations we do for you ahead of time, so you don’t have to do it yourself.

Continue reading

Stat Analysis – automatic “stat weights”

I put “stat weights” in quotes, because there’s a lot more to stats than just a simple set of weights. Stats seem simple, but they are actually quite complex if you want to “min-max.”

Stats are complicated because… Continue reading

Join the GloNet for BfA

If you’ve ever wished you didn’t have to run ‘stat weights’ every time you changed talents or gear, you’re reading the right article.

We’ve been doing it for you throughout most of Legion. That’s what our “Adaptive Gearing Strategies” do – they use simulation data that’s customized to your character. That’s possible because we’ve already simulated the required talent and gear setups for you, ahead of time. Continue reading

Older posts Newer posts

© 2020 Mr. Robot's Blog

Use the tools on AskMrRobot.comUp ↑