Dev Diary #37: Enemy Army Lists
In this diary, we take a look at how enemy army lists were done in the past, and why and how we decided to rework them!
[h2]What are Army Lists?[/h2][hr][/hr]When talking about army lists, we refer to any system that determines which and how many enemy units show up in any given mission. As the game progresses, battles get bigger and player units and equipment get more powerful; the enemies also have to scale up.
On top of that, completely new enemy factions enter the game, and others might fade out. All the while, some units are too powerful or too weak to throw at the player early or late in the game, so these have to also fade in and out.
Some missions will also require only a certain type of unit to show up, or might need a completely different lineup. Best examples are defense and attack missions against Pirates. When attacking, all Pirate units should be mobilized with trucks, but while defending, this does not make much sense for them, so they should only deploy foot units with the occasional chaingun support truck.
[h3]The First Iteration - Battle Brothers Style[/h3][hr][/hr]When starting out, we decided to lean on our experience from Battle Brothers, our first game, where we had a system for this in place that worked well. The system was simple but powerful, giving us designers full control over which enemy units, in which combinations, appear. It also required a huge amount of manual setup.
We implemented almost the same system in MENACE for the first iteration of our army lists. For each enemy faction, for example, bandits, undead, or orcs, we created a text file with a bunch of lists. Each list consisted of a selection of units, where each unit had its own associated point cost. The total of that list was the total point cost of this particular army list entry.
On top of that, each list could include flags like “offensive” or “defensive” to separate them by mission type.

With this system, we always had full control over the combinations of enemies that appeared, since we had to create them by hand. We could make sure that at no point the enemy would roll up with five EMP teams or five rocket trucks and nothing else.
All army lists made sense as they would bring some base infantry, specialized teams, and some fire support for a well-rounded enemy force.
To ensure that certain lists appear only in specific missions, we could add flags to each list; they would only be picked when the mission activates the corresponding flag.

This is where the trouble starts, though.
For each supply point value a mission can have, we had to create a variety of army lists by hand. For example, at 700 supply points, we had to create 10 or so army lists with different combinations of units that all add up to about 700 points. And we had to do this for virtually any supply point cost you can have in the game, from 450 to 2000.
Now, what happens when the game tries to pick for 890 points, but there is no list for this amount, only one for 830 and one for 950 points? To make sure there are always enemies in a battle, we had to allow the game to pick a list close to the intended amount.
So it could happen that the player brings 890 points, while the enemy brings only 830 or 950 points, making the player either too weak or too powerful.
To make sure there was always a fitting list, we had to create hundreds of unit combinations, and by doing so, we lost track of what combinations existed and which didn't, leading to a lot of confusion and ultimately defeating one of the main pros of the system: Having control over enemy compositions.
The real pain then only started when adding a new unit type to a faction, which regularly happens, as ALL lists for that faction had to be adjusted to include the new unit. This was an insane amount of work.
[h3]The New Army List System[/h3][hr][/hr]From the above, it was obvious that we needed a completely new system. Here is how it works now.
Enemy Units
Each enemy unit now has an associated supply point cost and a min- and max-campaign progression. This allows us to make sure certain units only show up after the player progresses a bit in the game, or alternatively, that weak early game units do not show up anymore at a certain point in the game:

Mission Templates
Each individual mission now has a list of possible enemy armies with a pick weight attached. This makes sure we only have offensive armies on a mission where Pirates are on the attack:

Armies
We completely ditched the old lists and created a new Army template that we are using. Each faction can have as many of these as we want, but in many cases, just one list will be enough. Each army has a name, a faction it is assigned to, a min- and max- campaign progression setting, and a list of unit entries.
Each unit entry has an initial pick weight and a “weight multiplier after pick”:

Here is how it works:
The game checks how many supplies are available for a given mission and which enemy armies are assigned to it. It then picks an army based on the pick weight and the required campaign progress. These weights are added together and then divided by the individual weight.
So, for example, one army with 10 and one with 20 will have the first army picked at 33% and the other at 66% of all instances.
Now that we have picked an Army, the game starts adding units to the mission from the list. Each unit has a chance to be picked based on the weight, as explained above. Note that the weights do not have to add up to 100%. All weights are added together, so we do not have to take care of what the total is. We can just increase or decrease weights as we like to make units show up more or less.
Units that have an individual campaign progress requirement that is above the current game progress will not be picked, even if they are in the list. So, as you can see, there is a Rogue Army heavy tank in the early game army with a pick weight above 10. However, the tank has a campaign requirement of 20, so it will not show up until players have completed 20% of the game (all numbers are just exemplary).
Now it gets really interesting!
Once a unit is picked for the first time, its weight gets multiplied by its weight multiplier after pick. For example, a conscript unit, which is supposed to show up a lot in the early game, has a factor of 0.8.
So after a conscript gets picked, their weight gets reduced by just 20%. On the other end, an officer squad, once picked, will have its weight reduced by 80% making it highly unlikely to be picked again.
This gives us a lot of freedom in designing armies. We can make sure certain units have a very low chance of showing up (low weight) while others have a very high chance of showing up but in very low numbers (high weight, low multiplier), and others are likely to show up and are numerous as well (high weight, high multiplier).
[h3]Benefits of the New System[/h3][hr][/hr]The benefits of the new system are all around. We save an insane amount of time as we do not have to create individual army lists. Also, the game will now match a mission's supply limit very closely, picking units that exactly fit the limit.
We can now create an army for just one mission, tweak the number a bit, and enjoy a unique army selection for this mission if needed. At the same time, we can ensure that certain units and even armies do not appear before or after specific campaign progress.
Most importantly, we can now add new units to existing armies within minutes, and they will appear in the game with minimal effort. This is actually the main reason why we redesigned the system.
We added it just this week, and it is not in the demo, so expect it to be improved and changed a bit in the future!
[h2]Engage, Explore, and Stay Informed[/h2][hr][/hr][p]Be sure to check out our tips and tricks thread for more tactics to help you out in-game.
There's also the The Beginner’s Guide explains how to manage squads, prepare missions, and handle combat. For more details, you can also visit the community wiki, and follow our how-to-play video.
You can find us on Discord, BlueSky, Twitter, YouTube, Facebook, and Reddit for discussions, updates, and feedback. You can also subscribe to our monthly MENACE newsletter on our website — just scroll to the bottom of the page to sign up.
[dynamiclink][/dynamiclink]