Part 3 of this series covers actual healing. This is where we answer the BIG question: how do you sim healers?
- Part 1: Intro: Simulating healers & the factors that need to be taken into account
- Part 2: Boss fight mechanics & raid damage: how that affects healing models
- Part 3: Modeling actual healing
- Part 4: Simming different heal styles & theorycraft
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:
- Keep Lifebloom (HoT) on the tank, refreshing within 4.5 seconds of the final tick.
- 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:
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:
- If it’s a major-tank damage phase, use Lifebloom on the tank, refreshing it within 4.5 seconds of the final tick
- Use Swiftmend if a raid member’s life drops below 30%
- 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:
- 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.