Game: World of Warcraft: The Burning Crusade
Game Element: Nightbane, the final boss in Return to Karazhan
Discipline: Content Design
In this post-mortem, we’ll explore a real-life case of how feedback can sometimes surprise us and how things we envisioned in our minds didn’t match reality.
If you’ve followed my previous posts, you’ll note how I spent quite a bit of time getting the basic components of Nightbane’s flight mode to work.
Once that was settled, it was time to actually decide what he was doing to do while in the air.
One part was clear – Ranged DPS could have a blast nuking away at him while he was flying around, but Rogues and Warriors don’t care much for doing a /dance while the rest of the raid is having fun.
So I added waves of skeletons that ran in from both sides to attack the melee.
… Unfortunately, that didn’t quite work.
Geoff (Holy Priest): Augh! What the hell!
Me: What’s wrong?
Geoff: I keep dying to the bloody skeletons.
Me: Can’t the melee pull them off?
Geoff: They get one or two… but then the next wave spawns in and aggros me.
Me: I could make them immune to healing aggro.
Geoff: Nah, that’s not the problem – also its a bad idea to randomly disable core game rules.
The problem is you need two tanks – one for each side – AND a tank for Nightbane.
That’s just crazy.
Geoff: Well, I guess a shaman or something could tank the dragon while he’s in the air.
Me: Maybe I should just spawn the skeletons in the crowd instead.
Geoff: That’s a good idea if you can sell it right.
Me: What if he hocks up the bone blasts like a cat with a bad hairball?
Geoff: … that’s a really gross image, but yeah, it works.
So I went and did that… but Geoff’s idea about a Shaman tank stuck with me.
Wouldn’t it be cool if a Hunter or Shaman was the perfect target for a flying dragon?
I remembered doing much of the same thing on High King Maulgar – another raid in development – and thought it was pretty cool.
Nightbane at the time had a giant fireball breath. Plus… well… bones are like stones… right… and stones are physical, right?
So I switched the attack to be of Physical school – expecting that Shaman or Hunters would be the perfect match.
Distracting shot, that’s a thing, right?
Geoff: You know, it makes more sense now that the skeletons are spawning in the middle of the pack, but its not really clear why they randomly appear.
Me: I could improve things by making all of the skeletons appear at once.
Geoff: They would just turn and gank one person to death if you did that.
Me: Ooh, what if instead of one little bone blast, he did like a channelled c0ne of bone vomit.
Geoff: Remind me to never spend Halloween with you.
Me: The spawning would all happen at once, you’d know who the target was and it would be cool.
And so the next iteration went into work.
Now, the bone breath did physical damage, surged out in a burst and dealt AoE damage – this was so that the guy who was the target of the bone breath would want to run away from the pack.
That would be the final version of the ability… except for one issue.
Scott: Hey, I just noticed a couple problems with Nightbane?
Scott: Well, for one thing… Nightbane is tauntable.
Me: Yeah, I want the tank to be easily able to regain aggro when he lands.
Scott: Uhm, yeah, we aren’t allowing that in Karazhan. That kind of mechanic belongs only in dungeons or on adds.
Me: Are you sure?
Scott: I noticed his melee damage multiplier is uh… really high.
Me: Too high?
Scott: Higher than Archimonde.
Me: … I may have overtuned it.
Me: I did want him to hit really hard.
Scott: Well, we need 10-man healers to be able to handle him. If you want big numbers, turn down his attack damage multiplier and turn down his attack speed.
He’ll attack more slowly, but hit hard when he does.
Scott: Oh, and one more thing. Nightbane is a dragon. At the very least, he should fear the enemies.
Me: … okay.
Now I was in a bit of a situation.
I had a quest boss that became a raid boss that went from very predictable to very dangerous and chaotic.
I wanted target switching to happen while in the air and for the tanks to be able to pull aggro when he landed.
I couldn’t rely on taunt and I had to mitigate both high damage numbers and a group-wide fear.
To handle this I made several tweaks:
- I added a 3.0 second cast time to Nightbane’s fear. That ensured the raid had an exact timing for when the fear would go off. It also synchronized nicely with his howl animation.
- I reduced the duration of the fear from 8 seconds down to 3 seconds.
- I made fear reset his melee swing timer
- This should ensure no more than one melee swing got off during the fear.
- Aggro Wipes
- I made Nightbane reset his threat (target) table every time he lifted off or landed. This way, high dps, high threat targets should pull aggro, making it important that *someone* is damaging him while in the air and keeping aggro off the healers
- I also removed the standard hate-wipe that was attached to fear abilities, ensuring that if someone with Shadow resistance gear fought him, they wouldn’t pull aggro by not getting hit by fears.
- Finally, I added a tail swipe and a melee cleave to complete the “Dragon” package.
Then during testing… several observant QA people noticed that if you never ran onto the balcony, you would be locked into the instance, with the dragon in combat… but never able to kill you.
- Exploit Prevention
- So to combat this, I added a 30k fireball attack that was only supposed to trigger if someone was in an “unpathable” location.
What actually happened when it went live?
- Air Tanking
- For a little while, tanky DPS actually tried to hold aggro on Nightbane
- However, the “RSTS” (Random secondary target system) Fireball attack confused matters. People often couldn’t tell when nightbane was targetting a particular person.
- Issue: Clarity
- The idea of a specialized targetting system to prefer mail targets wasn’t noticed.
- Furthermore, a bug in the Earth Shield code caused all hate to be redirected to the tank, rather than a shaman. This trivialized both the skeletons and the tanking
- Skeleton summoning
- Because the best option was for the tank to pick up all of the adds while wearing Earth Shield
- Everyone would just clump in the middle during the breath attack.
- To avoid clumping, I placed a standard Rain of Fire attack with an alternate “burnt ground” visual into the encounter
- Players elected to stay swarmed up and move as a group from side to side
- Fear, Aggro and Slow Swings
- While the slow swings worked, there was a little-known bug where melee attacks would be queued up, rather than delayed, during some spells. As a result, Nightbane would sometimes get an “extra” melee swing in if an attack was parried just before the fear spell.
- As a result, people put an immense amount of effort into ensuring a Shaman or Fear Ward spells was present while facing Nightbane.
- Anti-exploit fireballs
- While these fireballs correctly killed players who didn’t zone in, they also nailed the entire raid when someone happened to pull aggro while standing on the roof.
- This would cause the raid to almost instantly wipe.
Sometimes, everything you try to do to prevent a problem just doesn’t work.
When it became clear we couldn’t fix it consistently, we simply reduced the damage Nightbane did via a hotfix and made sure he was an experience players could beat.
The next patch included a blocking wall to keep players from accidentally walking onto the roof.
In the end, you have to make your game the kind of experience players want to play.
No amount of clever planning or tricky tactics can overcome a bad impression.
Collecting feedback and double-checking with your colleagues can save you a big failure, especially before doubling down on risky and clever tactics to overcome a problem.
I assumed that since some creatures were on the ground, the tanks would be able to handle it and taunt Nightbane.
But the “taunt” ability was blocked in Karazhan, luckily I had my conversation with Scott to figure it out before launch.
I also didn’t take into consideration the cooldowns of certain tools & abilities of other classes that I hadn’t played with.
So it’s important to play every class a bit and learn about the restrictions on every player to create epic and challenging content that is enjoyable for everyone.
This lesson served me well at Riot when I reworked champions.