Saturday, September 16, 2017

Thoughts on Game Design: XP Management Systems for Tower Defense Games

Two years ago, before I first started working on the Tower Defense Starter Kit, I had done some research on various games from the genre to understand the design process behind the underlying gameplay mechanics. Among the lot were popular games like Kingdom Rush & Defense Grid, as well as their lesser-known counterparts like Anomaly Defenders & Sentinel 4. Each of those games had some interesting unique feature that made them stand out & Sentinel 4 actually had quite a few of them going for it. Of special note among these, was the fact that towers leveled up on their own over time. This single design choice added a whole new layer of tactics when it came to tower placement, right from the early stages of a mission.

A couple of months ago, I finally got around to adding an experience based auto-leveling system to the toolkit. While I thoroughly enjoyed Origin8's (Sentinel 4 Developer) take on tower defense, one aspect that concerned me was the decision to use a last-hit driven XP management system. I've never been a fan of this mechanic, as it kind of negates the impact of all other entities that were crucial to taking down a target. So I ended up experimenting with alternative solutions, hoping to find something that can level out the playing field. But before delving further into that topic, I'm going to point out the different options available to us, so as to provide a better idea about the reasoning behind the final decision.

Last-Hit based XP Management System

First, we have a last-hit based XP distribution system, whereby an entity gains experience by landing the killing blow on an enemy. It works especially well in games where the player controls only one character at any point in time, as the designer does not have to worry about sharing XP with other entities. It is also easy to implement & tweak since the experience gain directly depends on the player & enemy levels. However when multiple entities are vying for experience at the same time, distributing XP based on kills could lead to balance issues.

To provide an example for such a scenario, let us consider two common types of towers in Tower Defense games: Laser towers & Sniper Towers. Laser towers do continuous damage against a single target & hence excel at clearing out waves of low HP targets with ease. Sniper towers, on the other hand, fire extremely powerful rounds at a single target with a considerably high reload time to boot. This makes them ineffective against fast moving crowds but can take down tougher opponents relatively quickly. Under normal circumstances, both seem to have their own advantages & disadvantages, & thus end up being useful under different types of scenarios.

However, upon further inspection, I noticed that the advantages conferred by the system don't always hold up. When you factor in late-game scenarios, especially in endless wave modes, the Laser towers in spite of dealing a lot of damage, might not get a lot of kills. At the same time, the Sniper towers owing to their much higher burst damage output might have a higher chance of taking down targets. Over time, this could make them level up faster, thus increasing their damage output, which ends up getting them more kills, thus rendering them capable of dealing significant damage even as tougher enemies start spawning. This could lead to the Laser towers becoming less useful over time, as the damage output fails to keep up with increasing enemy HP.

Of course, there is the option to provide XP to all towers in the vicinity of a fallen enemy, making sure to give an extra bonus to the tower that dealt the killing blow. But I did not want to go down that route unless there was no other choice.

Damage based XP Management System

Next, we have the less ubiquitous damage driven system which distributes XP for every instance of damage inflicted by a game entity. This ensures that every participant gains experience based on their individual contributions. However, it does come with its own set of problems. For one, it will increase the complexity of the process flow by a slight margin, as projectile based towers will have to listen to the impact data of every single projectile, before getting the XP returns. This extra effort might really not be worth it, since the player may not even notice its passive impact, among all the different actions that are required to be performed. The second, & more important issue is that certain AoE towers like Flamethrower towers might end up dealing huge amounts of damage against crowds, thus enabling them to level up much faster than their contemporaries. An additional side effect of this system is the possibility of not getting any XP from shots that miss. For example, Artillery towers fire slower arcing shots that can easily miss their mark, unless the target path has been anticipated before launching the projectile. All of these problems combined would entail the project requiring more amount of time dedicated to maintaining game balance. And that leads us to the third system.

Output based XP Management System

After coming to terms with the potential difficulties associated with both the aforementioned systems [when applied within the tower defense game space], I tried breaking down the issue to see if there is a way to come up with something that had the advantages of both while reducing the unnecessary side effects. The solution sprung up in the form of an output based experience gain system. In this scenario, towers gain experience at the end of every output cycle, irrespective of whether it led to the death of an enemy, or the amount of damage inflicted. In a game where the player is directly in charge of the output generation, this system, if not monitored, could be exploited easily to gain experience without actually engaging in combat. However, the towers being completely free of the player's volition are not capable of the same & can be trusted to always play a fair game.

This new system essentially combines the reduced complexity of the first system with the evenly distributed experience gains of the second. As far as the player is concerned, the tower keeps accruing more XP everytime it attacks an enemy, albeit at different rates. Moreover, it provides a high level of predictability in terms of XP growth, as it's entirely reliant on the tower's rate of fire. By comparing the total output generated by each tower in a specified amount of time, the distribution of XP can be easily balanced by the designer. Even so, one disadvantage that pops out when compared to the first system is that the amount of XP gained per cycle does not depend upon the enemy levels. However, this can also be easily taken care of, by introducing the wave number/cycle data to act as an XP multiplier.

And thus, after considering all the options, I ended up going for an output driven system for XP growth. While it may not be feasible for most types of games, it seems well-suited for use in the Tower Defense genre.