Construct Quarter – Heroes


Construct Quarter Project Page

This post goes over the heroes I implemented in the construct quarter. This will include a description of their abilities and some notes about their development.
In general, I was less concerned with faithfully keeping to World of Warcraft as source material for my heroes. I wanted to use Reforged’s high quality assets as much as possible. There are far less custom options because it’s much more difficult to create custom models that are of the same level of quality as those that ship with the game. Therefore, hero design was more informed by what I had to work with than what would be an accurate representation of the corresponding specialization in World of Warcraft.

Samuro, the Blademaster

Samuro was the first hero I implemented. It seemed like a logical next step after using Samuro as the hero for my War3C# Tutorial and also using him for my Hero Data Framework Proof of Concept. After heroes in the Patchwerk Prototype turned out to be much more challenging to pilot than I intended, one of my primary goals with this first hero was to create a tank that was very easy to pilot. Towards this end: the interactions between his abilities are relatively limited, he a powerful panic button in Mirror Image, and one of his abilities is a passive ability.

Rexxar, the Beastmaster

The next hero I implemented was Rexxar. He is basically the same as in the prototype because I felt like he worked out pretty well. He’s probably the easiest damage dealer to pilot.

Zelath Goldhide, the Holy Priest

With a tank and a damage dealer done, the next step was to implement a healer. The priest is pretty similar to the prototype version except he has an extra ability, Desperate Prayer. Even though he has an additional ability, he’s probably easier to pilot than he was in the prototype. Compared to the prototype, I significantly increased the power and cooldown time of most abilities.

Eldin Sunstrider, the Frost Mage

After hitting the First Heroes Milestone where I had a hero of each type, the next hero I implemented was the Frost Mage. I like Frost Mage as a specialization because it has a great mechanic that is easy to understand and implement. Half of the mage’s abilities apply the Chilled debuff and the other half deal extra damage if the target is Chilled, which functions somewhat similarly to the Frost Mage’s Shatter mechanic in World of Warcraft.

This was the first point where the limitations of the Hero Data Framework appeared. I learned that “dummy” spells based off channel cannot apply debuffs or fire missiles. To get that sort of behavior, you need to build a system on top that listens for your channel spell cast and sends a missile or casts a dummy version of some spell that applies a debuff. I decided not to implement these systems, reasoning that for most heroes I would have enough base spells to work with to do most of what I wanted. I think this mostly turned out to be true, but I want to specifically reflect on the usefulness of the Hero Data Framework in a future post.

I initially wanted the Frost Mage’s second ability to be Ice Lance, but there were no spells I could use as a base that would fire a missile but had no other side-effects. The closest I got was death coil, which is what I used for a while, but even that has a green special effect on the target that cannot be removed. I eventually replaced it with Ice Beam, which was based on Chain Lightning.

Joe, the Unholy Death Knight

I had a Blood Death Knight Tank named Joe in the Patchwerk Prototype. I wanted to bring him back but I already had my first Tank in Samuro and I already knew I wanted the second tank to be a Paladin. Because I had two ranged damage dealers, I had space for more melee damage dealers and brought in Joe as an Unholy Death Knight. Originally I wanted him to be focused on Area of Effect damage, having the spell Death and Decay rather than Outbreak. However, in Warcraft 3, Death and Decay deals damage based on a percentage of the target’s max health and it could not be changed to deal an absolute amount of damage.

Thrall, the Enhancement Shaman

Though I was considering a few different Specializations to be the final melee damage dealer, ultimately I decided on Enhancement Shaman just because it fit decently well with a good set of base spells. He was pretty boring in the first pass, but just adding additional special effects to his abilities made him feel much more satisfying to play. I would have preferred he weren’t mounted but unfortunately the unmounted version of the Thrall model has very few animations

Mokumbo, the Restoration Druid

Restoration Druid is my favorite specialization in World of Warcraft so I knew I wanted to include it as my other healer. I’m very happy that some of the key spells like Rejuvenation and Tranquility already exist in Warcraft 3. I think Restoration Druid turned out well alongside Holy Priest. Whereas Priest has reactive main abilities and a proactive ultimate ability in Guardian Spirit, Restoration Druid has proactive main abilities and a reactive ultimate ability in Tranquility.

Larentor Dawnfury, the Paladin

I knew I wanted Paladin to be the other Tank from the beginning, but the original plan was for him to be a fairly difficult character to contrast with Samuro. However, I implemented him last and it had become clear to me how hard piloting 8 heroes was going to be. Therefore, I figured it didn’t need to be made harder. Originally, I wanted Lay on Hands to instead be Final Stand. Final Stand makes the Paladin invulnerable for a short time and forces all nearby enemies to attack him. Unfortunately I couldn’t find a clean way to force enemies to continue attacking an invulnerable target, they would always stop as soon as their first attempted attack failed to deal damage.

Conclusion

Implementing heroes was a bit more annoying than I expected it to be. For abilities to do certain things like fire missiles or apply debuffs, they had to be based on an ability that already did those things. Furthermore, a lot of abilities had completely unchangeable properties they inherited from their base abilities. This combination often led to frustration. However, compared to the prototype, I was able to implement more Heroes that were more complex in a shorter amount of time.