• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

Developer Diary | Small Features

Hey everyone! I'm Plankie, one of the game programmers on hoi4, and one of my favourite parts of developing a game is to work on the game AI. So when I was asked, almost a year ago, whether I wanted to take charge of a small AI feature, I was delighted! The goal of this feature was to make the AI better at concentrating their hardest and meanest divisions instead of spreading them out along an entire front line. This is something we've wanted to do for a long time and with the Germany-focused Götterdämmerung expansion, we had the perfect opportunity. We call this feature AI Force Concentration, or AIFC for short (an acronym which has caused many football-related jokes in the team).

AI Force Concentration

So
WHY did we want to focus on this?
Well, first of all, the AI has frankly not been very good at handling their armoured divisions. Sure, they produce tanks and assign them to fronts, but they are seldom concentrated enough to actually pose a threat for the defender.
Second, the AI always pushed along the entire front with equal effort. There's nothing strictly wrong with that, but most military operations have a strategic goal like capturing a city or a supply hub rather than just taking ground, so making a concentrated offensive effort towards a specific goal seems more realistic and human-like.
Third, we want to make the combat gameplay more dynamic and interesting for you as a player. If the enemy concentrates more and better divisions in a certain sector, it requires you to make choices. Should you meet the anticipated offensive head on, will you lure them into a trap, or use the opportunity to attack somewhere else?

small_features_1_aifc_1.png

The days before Operation Barbarossa. The AIFC divisions are visible in the right picture as the turquoise army, preparing to quickly take a supply hub in Volyn when the war kicks off.

Cool! How does it actually work then?
For the most important fronts, the AI considers whether it wants to concentrate its forces. If it has enough units available to both hold the line and still allocate units for offensive duty, then it will create an AIFC army. This army will receive the "best" divisions along the frontline, taking into account factors like attack and breakthrough stats, how experienced they are, how fast they can move, and so on.

The AI then evaluates possible targets close to the front line, for example supply hubs, ports, large cities and so on, and it finds a path from the front line to the chosen target. This path is determined according to the path-of-least-resistance principle, which essentially means that it tries to avoid river crossings, bad terrain, fortifications and so on, while also following railway lines in an attempt to avoid ending up in a situation where it can't supply the troops.

small_features_2_aifc_2.png

The paths evaluated by Germany before Barbarossa.

The AIFC armies follow those paths-of-least-resistance and will continuously update their orders to make sure that the front lines match up with the intended path. Of course, since placing too many units too close together might cause some problems with your Amazon deliveries (a.k.a. your supply situation), they will spread out somewhat along the neighbouring provinces.

But as they say, "a plan never survives contact with the enemy". This can be true for the AI as well. Because of this, it keeps track of how well an AIFC offensive is going. If the offensive is going well, by all means let's continue pushing. But if it stagnates and fails to make progress towards the target, then the AI sooner or later decides that the plan indeed didn't survive the enemy contact, and it tries to find another target for its next offensive. Similarly, if the offensive succeeds and the target is taken, the AI will start looking for new opportunities to concentrate their forces and break through, taking into account the newly conquered areas as a potential start of the offensive.

In order to make it feel like the AIFC behaviour is not static, the degree to which it is used is (mainly) tied to the doctrines an AI has unlocked. This means there will be a difference between for example fighting an early war Soviet Union compared to a late war Germany. Doctrines which narratively and stats-wise promote a higher force concentration will make the AI prefer using AIFC to a higher degree (fully scriptable of course, so all our wonderful mod creators can play around with it).

small_features_3_aifc_3.png

On the receiving end of an AIFC offensive.

More New Things
Thomas here now to add some more info about a selection of other things we have been working on. Aside from the AIFC, we have - as we tend to do - tried to touch up things here and there during the development of Götterdämmerung. So let’s take a quick look at some of the other smaller features and changes we have done:

New Technologies
The tech tree has as mentioned in the Special Projects Developer Diary received a few new techs relating to Special Projects. But those are not the only changes we have made to it. We have also added a few new techs to make research and gameplay slightly more diverse, and give you a few more options.

First of all we have added a few new Transport Plane Techs and related tech and equipment icons. The main benefit of researching these is that your transport planes gain more range, allowing you to paradrop or supply your troops at a greater distance.

small_features_4_transport_planes.png

One cannot have too many Junkers, right?

The other, slightly bigger change we have made is to forts. Previously everyone could build level 10 forts everywhere from the get go. Now the max fort level depends on the terrain the fort is in, and the techs you have researched - as well as other modifiers you can get from e.g. focuses. This means the engineering tab has received 5 new techs for forts - one general, and two each for Land Forts and Coastal Forts.

Initial maximum fort levels, without techs or other country specific modifiers are set to 6 for all Coastal Forts, and Land forts are as follows:
Plains: 5
Hills: 5
Urban: 5
Forest: 4
Mountain: 4
Desert: 4
Jungle: 3
Marsh: 3
(Note that values might change before release. Yes I know that I’ve said this already, but just to make sure the message gets across :) )

small_features_5_fortification_techs.png

The new fortification techs,

small_features_6_forts_in_state.png

Here we have upped our fortification capabilities a bit, just need to construct the actual forts

Command Power Cap
We have also slightly changed how the Command Power Cap works. The base Command Power Cap has been reduced, but your High Command will now increase it, so that with a good set of military commanders, you will have more Command Power at your disposal. This should make it less punishing to build up your high command, rewarding you for having a competent staff.

small_features_7_command_power.png

By adding von Rundstedt to our staff, we increase the Max Command Power by 20

Dams
As Mentioned in other dev diaries, there are now Dams in the game. They can be targeted by Raids which makes them a bit of a liability, but not by strategic bombing so they are relatively safe. What do they do? Their main effect is that they boost the state they are in, making it easier and better to invest in industry there. You can’t build new dams except through specific focuses.

Landmarks
Another thing you can see on the map, and that several of you have already noted in previous diaries and streams are what we call Landmarks. First of all, these look super cool on the map, and make countries more unique. But additionally they have small country level effects. A bit like National Spirits, but as buildings on the map. The cool thing with these bonuses is that they only apply to the country that originally owns the Landmark, so by capturing for example the Statue of Liberty, you can deny the USA their bonuses, but you won’t get them yourself.

small_features_8_landmark.png

A landmark in the UK

State and Province UI - minor QoL changes
In order to make the difference between State and Province effects a bit easier to see at a glance we have made some changes to the State and Province UI. The main focus of these changes were to ensure that Province Effects are in the lower part of the window, and state effects are in the upper section.
A special area for all state effects and a summary of all state related effects from buildings has been added at the bottom of the “State section”.

Some of the more unique Province level buildings, such as Dams, Landmarks, and Experimental Facilities, are displayed in the “Terrain section”, while the rest are displayed beneath it as before.

small_features_9_state view.png

The upper section, marked in yellow in this image, contains things that are relevant for the entire state, so e.g. state related modifiers have been moved up there. Down in the bottom section, we have collected all the info that relates to the province, such as terrain, weather, victory points etc. Not a drastic change in any way, but hopefully it should be a bit easier to understand what relates to what.

Area Defense QoL
We have also done some minor quality-of-life updates to the Area Defense settings. First of all, no specific settings are active by default when you open it up (unlike the old behaviour where all settings were activated by default). Instead, if no special setting is specified, the divisions will spread out as evenly as possible in the selected area. We changed this since a very common pattern when using Area Defense was to immediately unselect all the options one wasn't interested in, which led to a lot of unnecessary clicks.

small_features_10_ad_1.png

The new Area Defense settings for guarding borders and special project facilities (red arrows), and the updated supply setting (orange arrow).

The supply setting has received some small changes: Instead of trying to cover the supply hubs and ALL the railways, it will now cover supply hubs and railway junctions. It has also received a new icon depicting a supply crate instead of the previous railway icon. We have also added two new settings to Area Defense: Guarding borders, and guarding special project facilities.

small_features_11_ad_2.png

The new Area Defense setting for guarding borders

Horsies with different colours
All horses aren’t bays, or browns for that matter. This is something one of our artists, who happens to really like horsies, was very aware of and wanted to do something about. So after having convinced one of the programmers that this was a brilliant idea, they set out to make a few new textures and ensured that the horsies in the game now have more varied and realistic colours.

small_features_12_horsies.png

I assume these would be Hanoverians…

There's Always More....
That was a selection of the things we have been working on aside from the major features for Götterdämmerung. Of course, we have been up to more things. There is always some balancing, tweaking, and bug fixing work going on. And fixes to code and to the AI in general. We have made some changes to how we script things for example, that we hope to describe more in the upcoming modding diary (together with some other cool stuff). But for now, we hope that you have enjoyed this diary.

 
  • 90Like
  • 64Love
  • 6
Reactions:
Not really, no. Making things universally moddable comes at quite a performance cost, and the AI is already computationally expensive.
I don't mean complete universality - it's primarily about constants. Now some of them are available in defines, but the rest are hidden from modders. Why not give access to these constants? I don't think such a change will affect performance much.
 
I don't mean complete universality - it's primarily about constants. Now some of them are available in defines, but the rest are hidden from modders. Why not give access to these constants? I don't think such a change will affect performance much.

Which constants do you mean? We generally make any potentially constant values available in defines - so if something isn't there, the chances are it isn't actually a constant.
 
  • 2
Reactions:
Which constants do you mean? We generally make any potentially constant values available in defines - so if something isn't there, the chances are it isn't actually a constant.
In particular I'm basing this on bitmode's posts : e.g. this one and this one. From them I concluded that although some constants are available (e.g. PLAN_SPREAD_ATTACK_WEIGHT or PLAN_MAX_PROGRESS_TO_JOIN), there are still a lot of values that could be defines. Naturally, bitmode is based on some kind of reverse engineering, which implies the possibility of errors, but I doubt that there are no more constants that could be made available to modders. For example, the above link has this line describing the calculation of weights for attacking a province: "anti-stack 1: -1 per unit of the same country that is already attacking T". I haven't found a constant in defines that would be responsible for this "-1".

Another problem is that the available constants are poorly described. A brief note is usually not enough, and the lack of full description of "unit controller" mechanics almost makes modding a guessing game. For example, there is a constant PLAN_STICKINESS_FACTOR, which is described on the wiki as "if D's sticky province is P: × PLAN_STICKINESS_FACTOR, if D has a sticky province which is not P: ÷ PLAN_STICKINESS_FACTOR". But I have not been able to find out what “sticky province” is.

The third problem, if I may say so, is the lack of opportunities for modder influence on unit controller operation. For example, we have a summand when calculating the weight of a province when determining the direction of attack: <province victory points> × VICTORY_POINT_WORTH_FACTOR. Here it would be desirable to add a summand in the form of "<province modder points> × MODDER_POINT_WORTH_FACTOR", where <province modder points> could be set as a province modifier and MODDER_POINT_WORTH_FACTOR is a constant in defines. Unfortunately, there is no such option, while victory points obviously serve other purposes. Adding such a feature would give a nice expansion of possibilities for modders. Even in the simplest case you can draw paths for AI on the map with, for example, add_province_modifier =)

Just for another example, I posted a suggestion for attrition mechanics the other day. There, among other things, there is a proposal to add some constants. I find such changes quite painless for developers.
 
  • 1
Reactions:
It uses a "is-friend" criteria to determine which borders to not guard. This means it will ignore countries with military access, faction members and puppets/overlord.
Effect of non-aggression pacts?

This "is friend = don't worry about border" is a great feature.

"This means it will ignore countries with military access, faction members and puppets/overlord."

What about adding "have a non-aggression pact with neighboring nation" too?
 
What about adding "have a non-aggression pact with neighboring nation" too?
Duration of non-aggression pacts is partially contingent on troop levels in bordering states. Would such an exception cause issues with AI enforcing its NAPs?
 
The other, slightly bigger change we have made is to forts. Previously everyone could build level 10 forts everywhere from the get go. Now the max fort level depends on the terrain the fort is in, and the techs you have researched - as well as other modifiers you can get from e.g. focuses. This means the engineering tab has received 5 new techs for forts - one general, and two each for Land Forts and Coastal Forts.

Initial maximum fort levels, without techs or other country specific modifiers are set to 6 for all Coastal Forts, and Land forts are as follows:
Plains: 5
Hills: 5
Urban: 5
Forest: 4
Mountain: 4
Desert: 4
Jungle: 3
Marsh: 3
(Note that values might change before release. Yes I know that I’ve said this already, but just to make sure the message gets across :) )

View attachment 1202895
The new fortification techs,

View attachment 1202896
Here we have upped our fortification capabilities a bit, just need to construct the actual forts


Having finally had the opportunity to try (and enjoying) these changes myself, I was wondering if these changes warrants rethinking some of the nations that have already received country specific modifiers? For instance, Norway has a modifier (crumbling fotifications) that makes all (also newly built) Norwegian forts (anywhere in the world) 50% less effective to model that some forts in Norway were old. With these recent changes, Norways starting effective max fortification level is 2,5, and that country missing the 5th reasearch slot most minors have makes sinking research into fortification a less viable option.

Granted, I realize that this is as much an issue with the modifier itself being particularly ill conceived, but I believe these recent changes amplifies that problem, even though I am sure that was not the intention.
 
  • 1
Reactions:
So basically1.4 pre-nerf germany= war lasts around the time it did historically but tactics/invasions/counterattacks are completely off and the russians can barely defend (also a lot nukes)1.5 post-nerf germany= more accurate tactics (like d-day and the russian counter-assaults) and more accurate post war borders but the war lasts 1.5 years less than it should.