Post feature RSS Darkest Hour - Dev Diary #21 - Mobilization system

Darkest Hour has a brand new mobilization system that will be explained in this dev diary.

Posted by on

Darkest Hour - Dev Diary #21 - Mobilization system

Follow us on:

Today, we’ll introduce to our Mobilization System.

Since the biggest task in creating a game is balancing it, the issue of manpower had to be carefully thought. Most previous systems using the Europa engine were more or less arbitrary for that reason, something about which we felt uneasy. Deeming that using real-life values and concepts could help (after all, a game is a – rather crude – model of the real world), we started to work on a new MP system.

The first step was to change the MP distribution on the map. It now follows the actual distribution of the world population around 1936 (at least between the countries, inner distribution is sometimes less accurate, depending on the sources we found), something that can be easily modded with the scenario files or the province.csv file. To make things simple, we used the ratio 1 on-map MP = 1,000,000 inhabitants IRL.
Once this was done, it was possible to set realistic recruitment and mobilization systems. Once we logically agreed that 1 in-pool MP (the manpower actually used to make units) should stand for 1,000 men, we could make calculations to set realistic growth rates, and MP availability.

Nations of Darkest Hour’s era were mostly characterized by highly militarized societies. Many of them enforced a mandatory military service, with reserves liable to mobilization, and those which did not generally had an elaborated system of territorial forces, to make sure they could quickly have a strong military force at hand in case of war. After many thoughts and debates, we decided to take inspiration from this model.

For that purpose, we used the now defunct “professionalism/conscription” slider. Now called “mobilization/demobilization”, it reflects the level of militarization of a country, ranging from having no armed forces at all, to a fully mobilized population. Each step reflects a particular military system:

  1. Demilitarized: the country has no standing army, its defense generally relies only on police forces or militia (i.e. Costa Rica).
  2. Fully professional army: the country has a professional force of volunteers, it can build any military unit (i.e. USA at the start of the game).
  3. Selective conscription or part-time military service: only a part of a class of age is incorporated for military service (i.e. USA after the Selective Service Act), or the whole class but for short instruction periods (i.e. Switzerland).
  4. Conscription – normal term: the situation of most European countries in 1936. A whole class is incorporated for, generally, 1 year.
  5. Conscription – extended term: the same as the previous but with a longer term – typically 2 years, (i.e. Germany from 1937 or 1938).
  6. Conscription – long term: conscription of a whole class for 3 years (i.e. France in 1913) or even longer (but in that case it was often coupled to a selective conscription, i.e. USSR or at least Tsarist Russia IIRC).
  7. Partial mobilization: often an immediate pre-war measure. Classes that had just accomplished their military service term are recalled under the flag, as they are generally liable for such a thing for a few years after the end of their term (in France it was called “availability” and lasted three years). Some reserve units are activated, reservists are sometimes called back too.
  8. General mobilization: the standard wartime measure of that era. All men between 20 and 45/50 are mobilized (though in practice many remain in the civilian life, at least for some time), all reserve units are activated.
  9. Extended mobilization: a further effort to face the bloody needs of war. Men previously left back in their factories are transferred to the front, age limits for military service is often pushed to 18-50/55 years old.
  10. Total mobilization: the supreme sacrifice, the last effort to put men on the battlefield. Every man fit for military service is mustered in, with teenagers of 15/16 and old men up to 60 or 65 also incorporated – often as a militia.

Please note that daily MP growth is now extremely slow in peacetime. In any army, while young men are regularly conscripted, others complete their active service duty and return to civilian life. Therefore, the actual growth of militarily available men in peacetime is proportional to the growth rate of the overall population – for the sake of simplicity we put it at the average, rounded value of world population growth between 1920 and 1940: 1% per year, divided between 365 days… a very low, but realistic growth, indeed.

The principle is that, when you need MP to expand your military and recruit new units while at peace, you must extend the duration of the military service. By doing so, you’ll receive a new class of age, that is, a small part of your male population that will be conscripted in your military – thus being available to form new units (in exchange for some dissent of course). Thanks to the new on-map distribution, the amount of manpower given by this will be proportional to the country’s population. Also, the proportions used for these calculations are taken from data about the mid-30’s armies, ensuring a more realistic system.

To accomplish this we improved the existing manpowerpool command: now it can add a percentage of the total manpower available in all the controlled national provinces:

Improved manpowerpool command – added optional [when = 1/[0]] switch. When set 1 add the MP as percentage (value = x.x) of the MP in all controlled national provinces.

So for example passing from one-year conscription (level 4) to two-years conscription (level 5) will give you a quantity of manpower equal to 0.45% of the population of the national provinces under your control.

To avoid adding complexity to the engine, these reforms of the military system are driven by decisions, rather than by moving the slider directly. The generic decision will be available as soon as you’ll run low on MP. In peacetime, you can’t go beyond partial mobilization. General mobilization was an exceptional measure, only taken in case of serious crises, and the “mobilization is not war” principle most often proved delusional, as in 1914. Thus, except in specific situations simulated by events, you need to be at war to enact general mobilization and further steps.
Since the mobilization-demobilization slider should only be moved by events, we added the ability to prevent a user from moving a slider:

Added another option to policy_effects.csv for each policy slider: MANUAL_OR_ BY_INFLUENCE _MOVES (0 – no slider moves are possible except by events, 1 – manual slider moves are allowed too, 2 – moves by Influence are allowed too)

Modders will probably appreciate this possibility for their own projects.

But what can we do with all that MP? In real life, countries that mobilized their men at war often formed reserve divisions with them, generally in a few weeks. Though inactive, those divisions were generally in actual existence, merely as an administrative. Because in DH we previously chose to extend build times for divisions to a realistic level, we included these reserve divisions in the starting orders of battle. They appear severely understrength (to reflect their reserve nature) and with outdated equipment (reserve divisions were generally armed with older weapons). It’s up to the player/AI to reinforce these divisions once they mobilized.

This can be done thanks to a new command that lets you set, add or substract strenght to a unit and take/return manpower to the pool. Here's the code:

Added new event command to change unit’s current STR (MP taken/returned from/to the pool). Applies to unit in redeployment or sent as expeditionary forces too:
   command = { type = strength which = all/land/air/naval/unit type when = 0/1 where = 0/1 [org = x.xx] value = +/- x.xx }
   which    - specifies unit type(s)
   when   - 0 – set STR value (if value = 0.0 then the this unit will be instantly deleted), 1 – add to STR value (final STR cannot be less then 0.01 or 1% and more then max unit STR, usually 1.0 or 100%)
   where   - 0 – take/return MP from/to the pool. If there is not enough MP then the command is skipped. 1 – Ignore MP pool (MP not taken/added to it).
   value   - 0.0 (0%) to 1.0 (100%). Can be negative if when = 1
   org   - Percentage of the current ORG that should remain if when = 0 (0.0 – set ORG to 0%, 1.0 – keep current ORG unchanged. Default is 1.0. NOTE: This value is modified by the actual STR change for each division). Set ORG to percentage of max. Org if when = 1

It is a very powerful command, with many uses. First of all, it can add manpower to units and subtracts it from the manpower pool and viceversa. Units are processed from a sorted list (ARM, MECH, MOT and some others get priority; reinf. priority check-box is also taken into account) one by one (some take MP, others could return MP, so the list is always processed to the end even if the current MP is 0), so if you have enough manpower for only 10 divisions out of 50, then only 10 will be reinforced. Moreover if a unit receives strenght it can lose organization (to simulate the arrival of reserves), but this change is proportional to the strenght added: a division that receives only 10% of its strenght will lose half the organization lost by a unit which receives 20% of its strenght.
Moreover, setting strenght = 0 will delete the units, so with a single command you can instantly delete for example all the militias or all the air units of a country.

Here are some examples of how to use this new command:

action = {
      name = "Set STR to 5% to land units"
      command = { type = strength which = land when = 0 where = 0 org = 1.0 value = 0.05 } #org unchanged
   action = {
      name = "Set STR to 100% to land units"
      command = { type = strength which = land when = 0 where = 0 org = 0 value = 1 }  #org reduced proportionally
   action = {
      name = "Set STR to 5% to naval units"
      command = { type = strength which = naval when = 0 where = 0 org = 1.0 value = 0.05 } #org unchanged    
   action = {
      name = "Set STR to 100% to naval units"
      command = { type = strength which = naval when = 0 where = 0 org = 0 value = 1 }  #org reduced proportionally
   action = {
      name = "Set STR to 5% to air units"
      command = { type = strength which = air when = 0 where = 0 org = 1.0 value = 0.05 } #org unchanged        
   action = {
      name = "Set STR to 100% to air units"
      command = { type = strength which = air when = 0 where = 0 org = 0 value = 1 }  #org reduced proportionally
   action = {
      name = "Set STR to 5% to all units"
      command = { type = strength which = all when = 0 where = 0 org = 1.0 value = 0.05 } #org unchanged
   action = {
      name = "Set STR to 100% to all units"
      command = { type = strength which = all when = 0 where = 0 org = 0 value = 1 } #org unchanged
   action = {
      name = "Delete all submarines units"
      command = { type = strength which = submarine when = 0 where = 0 org = 0 value = 0 } #org unchanged
   action = {
      name = "Add 5 STR to land units"
      command = { type = strength which = land when = 1 where = 0 org = 1.0 value = 0.05 } #org unchanged        
   action = {
      name = "Remove 10 str from all land units"
      command = { type = strength which = land when = 1 where = 0 org = 0 value = -0.1 }  #org unchanged

That's all for now, but I'm sure you'll have a lot of questions about this, so feel free to ask them!

Darkest Hour Screenshot

Darkest Hour Screenshot

Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.