Today I’d like to discuss the system of attributes as it stands for MidBoss. Some of the things I’ve decided may prove controversial, but I think in the end they’ll benefit the game.

MidBoss status menu (WIP)
MidBoss status menu (WIP)

As you can see in the image on the right, I’ve started on the gameplay portions of the game now, including figuring out how I want to do attributes (or stats, I’ll use these words interchangably).

This was a big sticking point because in the Python version stats didn’t work well at all. Magic was arguably overpowered, the first iteration as seen in the Ludum Dare version had an exponential growth of stats, and the second version remedied that but often left the player with no real agency in customizing their playstyle. For the new version I want a system that would has the following traits:

  1. Robust: It needs to be relatively easy to balance and keep balanced, even when adding new content. Additionally certain stats should not be clearly more important or feasible than others.
  2. No false choices: Most choices the player can make should be choices that will work out for the player. More on this later, but for example in a game where you play a fighter and strength controls damage while dexterity controls to-hit, this presents the player with a false choice; he can choose strength or dexterity, but clearly needs both.
  3. Easy to learn, hard to master: I wanted the system to be relatively easy and intuitive to pick up and start with, while keeping a certain depth and complexity for those who enjoy getting down and dirty with the numbers.
  4. Stats depend greatly on form: More on this later, but suffice it to say I was not happy with most stats coming from a simple point buy, with slight bonusses or penalties being applied depending on form.
  5. No to-hit rolls: While I understand the simulation value of to-hit rolls, they seem like something video games copied from tabletop gaming without thinking about it. I’ve never missed to-hit rolls in games that didn’t have them, and didn’t want them in MidBoss but I still wanted evasion mechanics.

To understand the solutions I came up with, lets look at

Robust

While making a robust system isn’t that hard, it becomes hard when you view it in the light of all the other things it needs to be, particularly fun. It’s easy to make a robust attribute system; just don’t let the player alter the progression of stats! But then you have no player agency and less fun.

Robustness had also been an issue in the old version. Possessing a form would simply add that form’s stats to your own. This meant, to put it in a simplified form, that if your stats were 5, with 5 from your current form, you could defeat a mob with stats of 8. That would make your stats 13. So the next form up needs to have stats higher than that.

At low levels this is manageable. But once your stats are say, 15 + 15, and the next form up has stats of 28, then suddenly possessing a new form means an absolutely massive increase in stats, causing any subsequent monster to need at least more than that, eventually leading to one-hit kills by forms two steps above your current, because they have stats 40 higher than you.

There’s also issues with adding new mobs, even at low levels. If I add an intermediate mob with stats of 13, then you will be able to instantly defeat that, and the next form, effectively causing you to progress in the game without any challenge whatsoever.

Needless to say, that didn’t work out. Moving on…

No false choices

An issue I have with many point buy attribute systems in video games is this; there are nearly identical stats for physical and magic (sometimes with archery thrown into the mix) and for the most part gameplay is balanced around you picking either one, increasing only the offensive stats of your chosen category, as well as picking up a decent smattering of defensive stats in both cases.

This is what I mean by false choice. Sure, there’s a choice; you could play a character that uses both magic and physical attacks, and has poor defense. It’s just that this is clearly a poor choice. Games generally only require one type of attack or the other to kill monsters, so having more options is generally not worth it. Splitting your focus between these means both are weaker than the developers probably anticipated, making the game too hard. Lacking defense is obviously the best way to get killed, unless the game is like Dark Souls and expects you to physically dodge virtually all attacks.

There’s other false choices inherent in RPGs as well, like mentioned earlier. A fighter will need strength and dexterity, and also constitution. There’s three attributes here, and though you can tweak the ratios there’s very little choice involved; you just need all of them.

I wanted to avoid false choices like this. One game which does this very well, and certainly inspired some design choices in the system I chose is Guild Wars 2. There are four stats, and for the most part (in PvE) they’re all viable choices because they have broader scope. Because of that these stats become more about customizing your gameplay into a certain direction (fast damage output, criticals, tanking, etc) rather than specifically tied to only a single game function. I call these meta stats, because they’re rather broader than the specific stats that determine your exact performance in specialistic ways.

This leads us to…

Easy to learn, hard to master

Guild Wars 2’s solution is very easy to pick up and play. You don’t need an intricate understanding of all the attributes and their exact functions to decide which playstyle you enjoy. The problem to me in Guild Wars 2 stems from the lack of complexity in the layer of stats which directly influence your performance underlying the four stats you can influence. For the most part I found myself simply stacking on more of the same stats through items as I had through my point buying.

Roguelikes appeal to a very different type of player, the type of players who like to number crunch and get the most out of their stats. I get this, because I do the same. With equipment bonuses and traits players can customize their progression further, beyond what their meta stats allow them.

So underneath the layer of the meta stats needed to be core stats which were derived from these meta stats. The array of these stats needed to be large enough that every stat governs a specific area, allowing players to specialize in this single area. This means number crunching can be done, it’s just not strictly necessary.

It also avoids false choices. Because your choice is no longer “do I put one point in strength or in dexterity” but the far more random “I have a helmet of +5 mana and +3 strength, do I want to use that or this skullcap of +5 strength”. That’s a real choice, because it’s not a given that within an expected period of time you will also gain the benefit of the helmet you didn’t pick.

Stats depend greatly on form

Meta attributes also solve this issue, I realized. In Guild Wars 2 meta attributes correspond in a certain ratio to normal attributes depending on your class. If we view possessing a form as a kind of changing of class, then meta attributes are suddenly very convenient. A meta attribute that focusses on damage may have a very different effect depending on whether your form is good at dealing out damage or bad at it, and in what way it prefers to deal damage.

For instance a rat would be bad, so while a focus in a damage meta stat would mean you’re strong (for a rat), a rat form wouldn’t be a good form for such a playstyle. On the other hand an ogre or a wizard would be much more synergistic. Both would respond well to being even more destructive, although in an ogre’s case this would lead to a higher strength stat and physical damage, while in a wizard’s case it would lead to higher power and magical damage. The playstyle remains the same; trying to deal lots of damage.

This also means that picking a form that has synergy with your meta attributes is important, which leads to different paths through forms for different players, and more divergent experiences while playing the game.

No to-hit rolls

This was something I struggled with briefly as a lover of the super fast and agile archetype of heroes. I like the idea of being able to evade attacks, but I know I don’t like the reality of missing due to a random number generator I have no control over.

The first problem with to-hit rolls is that they’re largely redundant. Video games aren’t nearly as big on simulation as tabletop games are. In the context of drama, spikes in efficiency and difficulty can be interesting; the hero is on their last legs but the evil knight fumbles his coup de grace and misses, the hero takes the chance to jam their sword through the villain’s chest and somehow emerges victorious!

If this scenario plays out in a game it can certainly be interesting, but if it plays out once it will play out more often and eventually you’re going to get sick of the RNG killing you half the time. There’s no narrative to contextualize anything, so it just winds up feeling cheap.Because of the volume of fights in video games even if you’re lucky and the RNG favours you most of the time, eventually it will favour the monster and you will have a bad day.

So having discussed all my gripes with attribute systems in general, how did I decide to tackle these issues in MidBoss? At the uppermost levels of attributes, you have your meta attributes:

  1. Viciousness, which controls damage output.
  2. Fiendishness, which controls criticals and strength of status effects.
  3. Relentlessness, which controls exhaustible resources used for attacking like MP and stamina.
  4. Deathlessness, which controls defensive attributes such as defense and HP.

Now these stats in and of themselves don’t do anything. They’re not used in any calculations in combat or even to determine how much of what resource you have, not directly. All they do, depending on your current form, is determine the height of your core attributes:

  1. Strength, physical damage.
  2. Power, magical damage
  3. Focus, critical chance.
  4. Force, status effect strength.
  5. Toughness, physical defense.
  6. Resistance, magical defense.
  7. Constitution, HP.
  8. Endurance, stamina (think World of Warcraft energy for rogues, but also used when attacking normally).
  9. Spirit, MP.

So your meta attributes let you tell the game whether you want to have higher damage over time, be more bursty, be able to attack for longer periods of time, or be more survivable. That translates into stats depending on your form, which you can further modify with buffs, traits and items.

These stats are all viable choices (to a point and depending on form), eliminating false choice from the equation. They’re also rather intuitive, I hope, and easy to pick up. The underlying core attributes have a bit more complexity, there’s a lot of them and you can tweak and fine tune in the direction you like. This satisfies the “easy to learn, hard to master” and the “no false choices” requirements.

Start of game example

The imp currently starts with 10 in all the meta attributes. However, the imp form is weak as established in the game’s narrative, weaker than all other dungeon denizens, so the multiplier used to calculate any core attribute is 0.5. This means an imp will start with 5’s in all their attributes.

A rat on the other hand is less monstrous than an imp; their meta stats are viciousness 7 (rats aren’t that strong), fiendishness 10 (they poison and go for the eyes), and relentlessness and deathlessness 5 because they’re easily killed. Through various multipliers, a rat’s stats are: strength 4, power 3, focus 6, force 6, toughness 3, resistance 3, constitution 3, endurance 3, spirit 2.

As you can see, an average rat is significantly weaker than the imp in all areas but criticals and status effect strength.

Now, part of the issue in the 2nd iteration of the Python version was to do with the start of the game. There was a catch 22 in that rats needed to be weaker than the imp so you could beat them, but because they were weaker once you possessed them there was very little progression to be had.

Here that’s not the case. Rats are weaker than the imp because they have lower meta stats, but their forms, relative to the imp’s, are actually stronger. If the imp possessed a rat the player’s stats would become: strength 6, power 4, focus 6, force 6, toughness 5, resistance 5, constitution 6, endurance 5, spirit 4.

The meta attributes still have the same value, but because of the improved multiplier the player is better off now they’re a rat, even though the rat was weaker in actual combat. Amusingly this also fits the narrative; the imp could level up and increase their meta stats to rival those of the dungeon’s final boss.

Unfortunately the imp is inherently the weakest creature in the dungeon and so the final boss would still be orders of magnitude stronger due to the better multipliers, forcing the player to possess more and more monsters to progress through the game and reach their full potential. Thus satisfying the “stats depend greatly on form” requirement.

Meta attributes and balance

This also covers robustness; because meta attributes do not have a fixed inherent value, you can’t categorically say one is better than the others. While viciousness would certainly be a good choice in most situations, if you’re in a form which relies on crits, tanking and condition damage to win the day it’s certainly no longer the best choice.

Meta attributes also make balancing easier. Decide at what point you want the player to be able to take on this creature, and give them slightly lower meta attributes but slightly higher multipliers. Once the multipliers are set balance can be fine-tuned by tweaking the four meta attributes, which is quicker than modifying an entire array of core attributes.

Certainly multipliers will need to be scaled up less steeply in higher levels, but that’s much more controllable than the exponential growth found in the first Ludum Dare iteration of the game. And because forms can have many configurations of multipliers having a more sideways progression of multiple mobs all close in power becomes a possibility, and adding in new creatures later will not ruin the balance of all creatures after it.

Sorry, I lied (just a little)

Finally we have two more attributes in that screenshot which haven’t been covered yet: accuracy and evasion. When I said I wanted there to be no to-hit rolls, I sort of lied just a little bit. What I meant to say is; I normally want there to be no to-hit rolls. As you can see, accuracy is 100% by default and evasion is 0%. That means that all things being equal you will hit things all the time.

Still, I like the idea of a high evade character. That’s why there might be traits, abilities, buffs, debuffs, and items that could raise or lower your accuracy or evasion. In that case, if your accuracy minus the enemy’s evasion tips below a 100%, there will be a to-hit roll.

Examples where this might happen might be a monster that has a penalty to accuracy for being clumsy like zombies, debuffs to accuracy such as blindness, quick monsters such as rats which get a bonus to evasion, buffs and abilities which increase your evasion, or aim type abilities which increase your accuracy for a single attack.

Finally one of the irritating things of taking away to-hit rolls in a game like this, as opposed to something like Oblivion or Skyrim is the possibility of ranged attacks becoming too strong. You can’t not hit when you have an eternity to make sure your targeting reticule for your attack hovers over your target. That’s why ranged, missile based attacks (whether they be physical such as arrows or magical such as firebolts) get a built in penalty to accuracy.

Well, that about wraps up it! I hope you enjoyed reading a bit about MidBoss’ design.