The Creative Process:
Good news everyone! I've decided to give you a little insight into the leader powers in Halo Wars. I'm Vijay Thakkar, currently a programmer at Robot Entertainment and was a programmer on Halo Wars at Ensemble Studios. I spent a good deal of my time working on many parts of Halo Wars, most notably the leader powers. Hopefully you after reading this, you'll have a more insight into how we got to the powers we have in the shipping game and the game development process in general. Enjoy!
The leader powers in Halo Wars had a variety of roles to fill: they needed to illustrate the identity of each of the leaders, to stand out as different gameplay than the traditional RTS, to break stalemates in games, etc. Most apparently to me, they really needed to make the player feel powerful and dominating on the battlefield. All this needed to, of course, fit inside of an RTS world and be balanced. Quite the challenge we had ahead of us.
I personally took the reigns on the power system during the latter portion of the project. We had a few of the powers implemented via our scripting system and had recently created a code driven power system (see Marcin Szymanski's dev diary for some history there), but we still had over half the powers to create and all of them to polish. We were in a pretty great place at that point: lessons learned from previous powers and a new system that made prototyping simpler, it was a rich breeding ground for some awesome out of the box ideas.
The actual process of creating the powers in Halo Wars was something that depended on strong collaborating from all disciplines: art, design, programming and sound. All the departments needed to work closely together through the entire process to get them right. The environment that we fostered at Ensemble Studios made this process a blast - ideas that anyone on the team had could be a source of inspiration (not just design). This made for a flexible environment where even a programmer had opportunities to contribute to the design and prototype ideas. Trying out new ideas is one of the best parts of game development, hands down.
Heal / ODST
The secondary powers (powers shared between leaders) were some of the first that actually made their way into the game, because of a necessity to demonstrate their influence on the minute to minute gameplay. They were simple in their concepts and involved a fairly basic input system - fire and forget, for the most part. Fortunately, this was an excellent illustration of the strength in our visual scripting system. Our designers were able to jump and implement a simple version of the effect they needed without lots of programmer support. Embracing the attitude of being able to quickly experiment with and try out an idea in game became pivotal to iterating towards some amazing powers.
The Healing Power went through many different iterations on whether or not it worked in combat.
Heal and ODST are great examples: they were added into the game very early and actually stayed in their initial state until fairly late in the lifecycle of Halo Wars. However, as the edge case bugs started to appear (dropping ODST squads inside of buildings, oh no!) and as we entered the polish phase of the project, it became evident that we needed to move their implementations to code. This allowed us to tailor the timing and effects to each power, gave us the chance to more easily reuse parts of the codebase that were not exposed to the scripting system, and to maintain consistency between the other powers that had been implemented in code. Inevitably, a single code path for one system produces significantly less bugs than trying to maintain multiple systems.
Early ODST pods may have been a bit strong and broke the ground.
Disruption was actually one of the powers that was on the chopping block until the absolute last minute. In a technical sense it wasn't a necessary power to balance the game, but not including it would have required us to scale down the strength of the other powers (especially the Covenant) dramatically, since the game would lack a direct counter. Personally, the concept of lessening the impact of any of our powers hurt me down to my gamer core. Needless to say, I was very happy to see that quick turnaround on the concept and implementation allowed us to include it in the end.
Cryo was so good at one point, it even stopped Disruption from working.
Disruption was probably the fastest power to go from concept to final implementation in game. We relied heavily on reusing pieces that we had built for the other powers: the fly by of the Shortsword bomber, the targeting UI, the Spirit of Fire sound effects, and much of the basic structure were lifted almost directly from Cryo. The unique elements were only finished in time because of fast work from everyone involved. We used a custom animation for the motion of the bomb's arc and its explosion, the sound crew contributed to really getting the effect of the lightning crackling and the ticking down of the bomb, and programming added in the decaying radial pulse and the bolt of lightning emitted when a power was diffused (when a Covenant leader came into range, for example). Some great teamwork and intelligent compromises late in the process are what let us keep Disruption in the game, and helped keep the other powers as strong as they are.
Cryo was the first of the major leader powers that had a high level concept where I was able to work with the design team to try out some ideas out and see inspiration took us. The concept behind Cryo was to create something that illustrated the very scientific nature of Anders' character via a freezing effect. On the surface, Cryo doesn't appear to be as powerful compared to the other powers, and that is because it was coined as a support power. It was designed to really shine when combined with an army or with another player's powers (the exception being air units, which it can be particularly devastating against). Armed with some ideas on how to make freezing feel awesome in an RTS, I cracked my coding knuckles and jumped right in.
Cryo also froze entire Firebases into blocks, sometimes unintentionally.
The first implementation of Cryo felt astonishingly bland, however. The first design dropped down a persistent whirlwind-style area of freezing that gradually froze any units that got stuck inside of it. Unfortunately, this presented as a pretty confusing mess to the player, not fully understanding why their units were sometimes freezing and sometimes not, and not fully understanding what the penalty was. For a variety of reasons, it just didn't work. We had to iterate on the design of Cryo quite a bit to get the effect somewhere that really felt as good as it needed to.
We really started to get there when we took a fundamental shift to making the power closer to an instant effect. Even with that change, something didn't quite feel there. Once we tried cascading the freeze effect on the unfortunate units that were to be frozen is what really started to make the effect shine. Essentially, the instant the power goes off (with that oh-so-satisfying ice explosion sound), all units that will be affected are found, and we freeze each one individually from the center to the outer edge with a very slight time delay between each unit. The whole effect happens in under a second, but that heartbeat between freezes helped tremendously to give the power a better execution time line.
Cryo is the bane of every air unit, even Pelicans on your side far away from the bomb.
However, the complexity of the power quickly started to spider web out because the Cryo power was created after the wide majority of the units were completed. It became evident that many different pieces of the simulation would need to be touched to really support the concept of being frozen. What happens when you freeze a spartan that is in the middle of jacking a vehicle? How about if you freeze a reactor? Or a unit that is in the middle of walking out of a base? (Sadly, the first implementation answered the last question by having the unit permanently stuck inside of the building. Doh.) All of those problems needed to be solved and then implemented. Before we were finished, we actually customized our entire building and unit destruction system to include the concept of a 'frozen' part, containing slightly different behavior than parts that were normally thrown off. That is what allowed frozen tanks and frozen air units to break apart into chunks of ice that felt heavier and more dense instead of sending their parts everywhere, in the case of a normal explosion.
Once the larger pieces were solved, a little tightening up of the visuals got the power up to a level that really made it feel awesome. By that point, another programmer had finished the necessary code work to render an additional material layer on the units (an effect we also used for the Mac Cannon's targeting system) which let us put an ice texture on frozen units giving a stronger effect than cold particle effects alone. Frozen air units were given the appearance of struggling to fly via physics impulses, and their instant kills were cascaded over a short period of time (similar to the initial freezing effect) , and the power really started to tighten up. I think we knew we finally hit the mark when it felt awesome to see a flock of banshees attacking your base, because you knew you could send them to the ground to shatter under the force of a fully upgraded Cryo bomb. Beautiful.
Well, that's all for this week. Tune in next week for more about the Arbiter's Rage and the Brute Chieftain's Vortex. Thanks for Reading!