• 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.

CK3 Dev Diary #36 - Gotta Go Fast

Good afternoon everyone,

I’m Magne “Meneth” Skjæran, one of the programmers on Crusader Kings 3. You might know me from my work on CK2 and the Paradox Wikis. Of particular relevance today is my work on performance and AI in CK2. Today I’m going to talk about how we’ve worked with these two areas in CK3 to ensure a better game experience than CK2.

Performance
Let's start off by talking about performance.
Over the course of CK2’s lifecycle we made numerous improvements to performance, and when Holy Fury released it was the best it has ever been. The release version today feels like molasses compared to how the game performs after its long and venerated life.
CK2 has been a standout amongst PDS’ games when it comes to performance, which means we have a lot we have to live up to. As such performance has been a priority throughout the development of CK3, and especially as it has neared release. Our approach to a number of tech systems differ from CK2 for the sake of performance, and this has given us some great results.

The two systems that differ the most from CK2 for the sake of performance are threading and rendering. The two are heavily intertwined, so much so that you can’t really talk about one without talking about the other.
In CK2 our approach was pretty simple. The game as a whole was structured around the main thread. The main task of the main thread was to update the gamestate so the game progresses. In order to render frames so the users can see what’s going on, it would periodically stop updating the gamestate in order to make a frame instead. The rendering would then take over entirely until done with the frame.
During gamestate updates it would thread a large number of different operations. The way we structured this in CK2 was largely based around the characters themselves. The daily update for characters were split into a handful of segments with different rules for parallelization. For instance, during one part it would be illegal for one character to check any information that belongs to another character. During another, it would be illegal for it to change any information it owns that is visible to other characters. These restrictions meant that these updates could be done in parallel; each thread doing the same section for a different character. In practice it worked reasonably well; CK2 is a heavily parallel game and has had significant speed gains from increased parallelization. Similar setups were applied to other objects too, like titles, plots, etc.
However, there were also some significant drawbacks. The biggest one being the various rules on what the programmer can and cannot do in each update. Violating one of these rules would generally result in an OOS, breaking the multiplayer experience. Occasionally it could even crash the game. There was also a significant overhead in having to process every character in the game with most checks just resulting in “we have no need to do this part of the update”.

So in CK3 we replaced this system entirely. We moved from object-level parallelism to system-level parallelism. Now instead of processing several characters at the same time we instead process several different systems. For instance, we might update the scheme system at the same time as the opinion system. This allowed us to simplify the rules of what you can and cannot do massively: now during parallelism the only limitation is that we can’t change any visible information; we must instead store the changes we want to do and then apply them a bit later in series. Simplifying the rules means that fewer bugs are introduced, in particular OOSes. And it tends to be easier to identify what could be parallelized than it was in CK2, resulting in more work being done in parallel than before.
pasted image 0.png

[A chart of time spent on most of the parallel updates]

Furthermore, this works great with CK3’s new approach to rendering. In CK3 rendering is a separate thread rather than done on the main thread. It still needs to synchronize a lot with the main thread, as we can’t be checking an object that’s being changed. So we have a system of locks; when the render thread needs to access the gamestate, the gamestate isn’t allowed to change itself, and when the gamestate is changing itself, the render thread must wait until it can access the gamestate. Similarly to CK2, the gamestate will while updating itself periodically check if the render thread needs access, in which case it’ll hand off control for a short while. But the big difference is that a significant part of the work done on the render thread does not require any access to the gamestate, and can thus be done in parallel with the gamestate update.
And do you remember the rule I mentioned earlier? The parallel updates to the gamestate aren’t allowed to change visible state, so during these updates it is safe to update the render thread. So overall the section where the render thread might have to wait is pretty small, and it ends up doing most of its work at the same time as the gamestate.
Now, we do still have some object-level parallelism left, most notably the AI. But the AI in CK3 is set up to never change the gamestate directly, so rendering can continue while the AI figures out what to do.

Overall these changes have meant that CK3 has better thread utilization than CK2, a more stable framerate, and that it is harder for programmers to make threading mistakes that lead to bugs, OOSes, and crashes.

For a point of comparison, I did a quick test on my machine comparing CK2 and CK3. I simply let the game run at full speed for a minute, and compared the frame rate and how far the game progressed. Both games got equally far in; starting in September 1066 they both got to April 1069. However, CK3’s frame rate was much higher and more stable than CK2’s. Considering CK3’s far better graphics, these results are exactly what I was hoping for.

Let's take a look at the difference threading makes. I set up a simple test; I ran the game for 1 minute on my machine at max speed, first with threading fully enabled, then with threading disabled. You can see it for yourself below. Left is with threading, right is without:
The red line you see in the video is the time between each frame. For 60 FPS it should be at or below the green horizontal line.
As you see, the difference is staggering. Without threading the framerate is dreadful, and the game progresses far more slowly. With threading the game progressed 958 days, while without it only progressed 546 days. That is, it ran 75% faster with threading, and with a far far better framerate.
The machine I’m running this on is my home PC, which at the time of recording had an i7 4770K, a GTX 1080, and 16 GB of 2400 MHz RAM, running at the highest graphical settings. The CPU and RAM are both quite old and by this point far outperformed by newer models, though the GPU is still solid. Max speed on this is high enough that I almost never use it in normal play, instead mostly using speed 3 and 4.

So beyond what has been mentioned, how do we work with performance on CK3? We periodically dedicate time to ensuring that any new performance issues are dealt with, and investigating opportunities for further improvement. This often means increased threading, or reworking systems to be more performant. One of my favorite ways to make the game faster however, is by slightly modifying the design to avoid expensive calculations that the player won’t be affected by. To take one example we update the progress of the player’s council tasks every single day. But for the AI we only do so once a month. The player is unlikely to ever notice the difference, but this way we reduce the cost of these updates to 1/30 of what they otherwise would be. Optimizations like this are all over the place in CK3 (and to some extent in CK2); there are a lot of small shortcuts that can be done that have a huge impact on performance but little or no impact on the player experience.

AI
Now it is time to talk a bit about the AI as well.
The person who has been in charge of AI for most of CK3’s development is Niklas “Captain Gars” Strid, but he’s currently on parental leave. For the last year or so I’ve been helping out with the AI, and now in his absence the full responsibility of it has fallen on me.
Since I didn’t design the AI, this is going to be briefer than it might’ve been if Niklas was here to write it, but I’ll cover some of the basic ideas behind how we’ve handled the AI in CK3.

Our main goal with the AI has been that it should make the game more fun for the player. This has several aspects to it:
  • It should provide some level of challenge, because steamrolling from the get go isn’t fun
  • It should avoid doing things that are frustrating, even if it would make it “smarter”
  • It should feel as if it’s a plausible actor within a Medieval world
These goals all have both overlap, and parts where they’re in opposition to one another. For instance, avoiding frustration does result in a slightly less challenging AI, but that’s often a sacrifice that makes sense.

One of the biggest structural changes in CK3’s AI is how it deals with its military. In CK2, if there were multiple AIs on the same side in a war, they would essentially act independently from one another with some systems for coordination. This usually worked fine, but sometimes it’d lead to a lack of coordination between allies and the AI taking odd decisions.
In CK3 we’ve designed the system from the ground up to handle multiple AIs on the same side. Instead of each AI commanding their own troops, they assign their troops to a war coordinator that handles all decision making; the individual decision making is just what troops to assign (which kicks in if there’s more than one war they could participate in).
As such AIs tend to act in a much more coordinated manner.
However, that doesn’t address coordination with the player. CK2’s approach here in the end was to introduce an AI order system where you’d simply tell the AI what to do. We don’t currently have that in CK3, but the AI still has a focus on assisting the player. Generally speaking the AI will try to keep its armies very close to the player, and help out in battles even if those battles will be lost with its help. An AI order system like in CK2 might still improve this further, but the gap is much smaller than in CK2 so we decided it would not be a priority for release. Additionally, the existence of the order system in CK2 significantly complicated the AI code, making further development of it more difficult, so there’s a tradeoff to be considered when it comes to the # of bugs it’ll introduce, and the slowdown to AI development it would be likely to cause.

So that covered “provide some level of challenge”, but what about avoiding frustration? There’s a lot of small things here and there designed to do that, but let’s talk about a couple of concrete examples. In CK3 the AI has a system I tend to call “stand and fight”. If the player (or any other enemy) is near its army, will beat it, and there’s no real hope of winning the war as all its troops are already gathered, then instead of running away the AI will find a nearby defensive location and wait there for up to a month for the enemy to wipe it out. This way instead of dragging its demise out it makes a last stand in a good location. The result is that the player doesn’t have to chase down armies nearly as much as in CK2, but that it only tends to kick in for wars the player is clearly going to win regardless.
Similarly, often the game design itself is created with the AI at least partially in mind. We’ve talked about the fort mechanics earlier, but the quick recap is that walking deep into enemy territory without sieging first is going to kill most of your troops. The AI will thus virtually never do it, so when you’re behind your own lines you have the time to regroup and figure out what to do. Similarly, there’s little temptation to try to chase down the AI deep into its territory. This helps keep the focus more on siege warfare, which is very fitting for the era.
It contributes to every goal I’ve mentioned: The AI ends up better due to there being fewer options available, so we could make it smarter in picking between those. The player gets less frustrated. And it emphasises a historical aspect of the era, while avoiding silly chases halfway around the world.

Now, that’s been a whole lot of talk about military AI. What about the rest of it? The overall approach there’s generally pretty similar to CK2, though rebuilt from scratch. The AI will periodically check a variety of possible actions, and take them if they make sense. There’s some randomization, and AI personality affects a variety of actions, to ensure that the game feels alive rather than deterministic.
More of the AI can be modded than in CK2, as the interaction system has far less hardcoding. There’s still parts that are hardcoded, such as actions that aren’t interactions, but overall it should be possible to influence a bit more of the AI than in CK2.
Reduced hardcoding has also meant that balancing the AI is easier for us than in CK2, as a programmer doesn’t always have to be involved. Especially once we get feedback from a large player base after release, this and various architectural improvements in the code compared to CK2 should make iterating on the AI easier than before.
Huge parts of what other characters do is also handled by events and so on to a greater extent than in CK2.

Generally speaking, the goal of the non-military AI is to make the world feel alive. This has occasionally meant needing some restrictions to ensure the player doesn’t get overwhelmed. For instance, we’ve had to on numerous occasions restrict seduction against the player so that they don’t get absolutely spammed if they happen to play one of the few female rulers around at game start.

Overall the AI should in many ways feel similar to in CK2, but with more of a focus on making the best possible experience for the player. After release it should be easier for us to further improve on the AI than it was in CK2.
PC Upgrade
20200727_221955 (1).jpg

[My newly upgraded PC]
Funnily enough, between when I first wrote this dev diary and when it was set to go out, I decided that it was finally time to upgrade my PC. I replaced my aging i7 4770K with a nice modern Ryzen 9 3900X, and my 16 GB of 2400 MHz RAM with 32 GB of 3600 MHz RAM.
So I re-recorded my 1 minute test with full threading, which you can see here:

As you can see, this runs the game at a level I can only describe as unplayably fast. In a minute it progressed 1498 days, 56% further than my old CPU. The framerate is also more stable than before, so I’m quite happy with the results.

pasted image 0 (1).png

[My new machine running the game at 1000 FPS. Only while paused in one particular corner of the map though]

That’s all for today, folks!
Next week we’ll be back to talk more about modding.
 
  • 93Like
  • 87Love
  • 22
  • 7
Reactions:
In CK3 the AI has a system I tend to call “stand and fight”. If the player (or any other enemy) is near its army, will beat it, and there’s no real hope of winning the war as all its troops are already gathered, then instead of running away the AI will find a nearby defensive location and wait there for up to a month for the enemy to wipe it out. This way instead of dragging its demise out it makes a last stand in a good location. The result is that the player doesn’t have to chase down armies nearly as much as in CK2, but that it only tends to kick in for wars the player is clearly going to win regardless.

For stand and fight does that factor in advantage unit type etc or just numbers and terrain? Also does it factor the terrain in the stand and fight as if in grass lands it would be a rout of epic proportions while in mountains it would be a near equal fight?
 
This all sounds great but oh man does it bother me that the arrangement of the colors in the legend don't match up with the colors in the graph.

In CK3 the AI has a system I tend to call “stand and fight”. If the player (or any other enemy) is near its army, will beat it, and there’s no real hope of winning the war as all its troops are already gathered, then instead of running away the AI will find a nearby defensive location and wait there for up to a month for the enemy to wipe it out. This way instead of dragging its demise out it makes a last stand in a good location.
I'm liking the sound of this. I would imaging that they take on last look through their possible alliances before they slot into 'stand and fight' mode, though? Assuming that the defensive party can still form alliances and call people in once a war has declared, as they can in CKII.
 
Endowing an AI with the abstract concept of long-term goals would be pretty difficult I think. And honestly it seems to me that the player is the one with an 'unfair' advantage by playing long term, not even historical rulers had that much foresight. That said our best bet for a seemingly sophisticated AI is probaly to make it smart enough at every decision. If it marries, and declares war, and manages vassals etc in an intelligent manner it will probably feel more interesting.
Something to keep in mind is that long term thinking for the player is also absurdly long term. In real life, you arent planning most things out literally decades ahead of time...but that is a pretty typical situation for the player, who plans out goals they know they might take decades or even a few centuries to complete.

We need to remember that long term in real life is more of the next 2 decades at most sort of affair, as very few plans can survive that long to begin with and not have something go and make it impossible. So an AI realistically planning something long term is still going to appear to the CK2 player as doing something short term due to the skewed perspective the CK2 has.
 
  • 15
  • 3Haha
  • 1Like
  • 1
  • 1
Reactions:
The AI will focus on one unless it has enough troops to handle more than one.

We've got SSAO for the character portraits.

The AI marries quite a bit, yes.
Taking the vows is handled in AI script, so I'm not familiar with how that's balanced.
What's SSAO? Not techy person asking...
 
  • 1
  • 1
  • 1Haha
Reactions:
Well, I guess it depends on what you mean by "works quite well".

I suspect I'm not the only person to have observed that AI characters do not act like anything resembling real-life humans with a sense of long-term goals or long-term concerns about the kingdom.

Of course, I don't expect AI in a game to be as smart or wise as a real-life human, but I think it's untrue to say that the lack of strategic AI is not noticeable.

I also suspect that most of the playerbase do not act like anything resembling real-life humans with flaws, weaknesses, desires, and strengths, but instead play in the manner of transcendent gods imposing their unchangeable will on hundreds of years of history.
 
  • 9
  • 3Haha
  • 1Like
  • 1
Reactions:
For instance, we’ve had to on numerous occasions restrict seduction against the player so that they don’t get absolutely spammed if they happen to play one of the few female rulers around at game start.

:( This should be an option you can select if you want it. For scientific purposes of course.
 
  • 2Haha
  • 1
  • 1
Reactions:
It's like you didn't even *try* to understand what I was getting at.

It explains why sometimes a feature that you personally think is really important is sidelined for other work. From the perspective of the devs, and maybe even most of the player base, the 1000+ hours of dev work it takes to perfect the AI could be better used developing multiple other features.

I understood the phrase itself just fine. I was pointing out that, without further qualification, it can be used as a excuse to criticize any part of the game development you like whatsoever. Anything is opportunity cost for anything else. In other words, you have to justify why it applies particularly to strategic AI and not some other thing, such as graphics, decisions, lifestyles, etc.

Also, I happen to think it is not correct. You can't complain about "diminishing returns" on a mechanism that doesn't even exist yet.
 
  • 5
  • 3
Reactions:
I also suspect that most of the playerbase do not act like anything resembling real-life humans with flaws, weaknesses, desires, and strengths, but instead play in the manner of transcendent gods imposing their unchangeable will on hundreds of years of history.

But that's okay. The game and game developers are not responsible for governing what the players want to do with the game they buy. If you want to role-play, that's great. If you want to exploit every mechanic in the book, savescum to your favorite version of history, or use the console, then go wild and have fun.
 
  • 5
  • 1
Reactions:
Also, I happen to think it is not correct. You can't complain about "diminishing returns" on a mechanism that doesn't even exist yet.

And yet, so many are complaining about the AI despite not having played with it.

There are a million reasons why a person might not move against a rival duke who is messing with the realm's balance of power. Many of them are personality-based, which the game simulates with trait-based decision making. Instead of indignantly demanding that the devs must devote resources in exactly your preferred way and arguing with people who give you valid reasons against it, wait until the game is out and point to specific examples of behavior you find immersion breaking.

For my money, the AI focusing on the shorter term (years not decades/centuries) pretty much exclusively makes sense from both a roleplaying and performance perspective. That's not to say that there aren't plenty of bizarre, facepalm worthy moves I've seen the AI make, but I don't see how implementing a long-term perspective for the AI will solve most of those, and honestly will probably make many of them worse, as other people have said. I can only imagine what kind of ludicrous 4D chess plans would be developed, partway implemented, and then abandoned unfulfilled due to massively changed circumstances.
 
  • 10
  • 2
  • 1
Reactions:
And yet, so many are complaining about the AI despite not having played with it.

There are a million reasons why a person might not move against a rival duke who is messing with the realm's balance of power. Many of them are personality-based, which the game simulates with trait-based decision making. Instead of indignantly demanding that the devs must devote resources in exactly your preferred way and arguing with people who give you valid reasons against it, wait until the game is out and point to specific examples of behavior you find immersion breaking.

For my money, the AI focusing on the shorter term (years not decades/centuries) pretty much exclusively makes sense from both a roleplaying and performance perspective. That's not to say that there aren't plenty of bizarre, facepalm worthy moves I've seen the AI make, but I don't see how implementing a long-term perspective for the AI will solve most of those, and honestly will probably make many of them worse, as other people have said. I can only imagine what kind of ludicrous 4D chess plans would be developed, partway implemented, and then abandoned unfulfilled due to massively changed circumstances.

Did you even notice that your second paragraph completely defeats the arguments you offered in your first one? First you attack someone for discussing AI "because the game isn't out yet" and next you yourself start chattering about "facepalm worthy moves" by the AI... despite the game not being out yet. I guess we can't talk about anything until the game comes out, by your reasoning.

In any event, there is this game CK2 which is already out, and signs indicate the AI here will be very similar to the AI there, which my questions to the devs are confirming. So we actually do have a sound model to work from.

The entire point of having a strategic AI is the fact that patching up "specific examples of behavior" amounts to jury-rigging for various symptoms, but not addressing the root cause behind a large collection of odd behaviors done by AI. You can't substitute for the absence of an AI in a chess program with a big pile of static reaction scripts set to trigger at fixed board conditions.
 
  • 9
  • 2
Reactions:
Did you even notice that your second paragraph completely defeats the arguments you offered in your first one? First you attack someone for discussing AI "because the game isn't out yet" and next you yourself start chattering about "facepalm worthy moves" by the AI... despite the game not being out yet.

In any event, there is this game CK2 which is already out, and signs indicate the AI here will be very similar to the AI there, which my questions to the devs are confirming. So we actually do have a sound model to work from.

The entire point of having a strategic AI is the fact that patching up "specific examples of behavior" amounts to jury-rigging for various symptoms, but not addressing the root cause, of a large collection of odd behaviors done by AI. You can't substitute for the absence of an AI in a chess program with a big pile of static flags set to trigger at fixed board positions.

Ok, gonna try and make this as clear as possible:

Yes, in my second paragraph I was discussing the CK2 AI, which as you say is quite similar to the CK3 AI in that it does not feature long term "strategic" thinking. It has, however, been "rebuilt from the ground up" for CK3 according to the DD, so while we know that it's not more "strategic" according to your definition, it will be different and apparently improved from CK2. It is useless to complain about behavior you have not seen, and yet you are assuming that, despite the rebuild, the AI will make many of the same mistakes from CK2.

In CK2, I have seen many boneheaded moves by the AI. Bad marriages, terrible war declarations, idiotic murder plots. But in CK3, if those are minimized by the rebuilt system, then I'm perfectly happy. I'm not going to complain until I see the results. You are assuming that the new AI is bad because it doesn't feature this arbitrary thing that you want, which is long term "strategic" thinking. You are assuming without evidence that without that, the AI will recreate many of the errors that we have all seen in CK2 that affect immersion.

And you might be right! I'm sure there will be *some* highly questionable moves, it's simply inevitable in a game as complicated as CK. But we just don't know. If the new AI isn't much better than the old, I will be right there with you in pointing out ways it could be better. Paradox is very receptive to constructive feedback. But you're just complaining based on an assumption right now.
 
  • 8
  • 2
  • 1
Reactions:
Did you experiment with double buffering game state, or at least parts of it? You can eliminate pretty much all lock waits with it if you want. Do you have statistics about how much the threads wait on locks?

Thanks for writing a performance related DD, I was a bit worried, because I have a pretty old PC (FX-8350, 16GB RAM, GTX 970), but based on what you wrote I'm pretty sure I'll be able to run it fairly smoothly.
While double buffering definitely has some advantages, it also massively complicates a lot of things, and essentially means having to rework a lot of systems from the ground up.
The time spent locking is low enough at this point that it seems unlikely for double buffering to be worth it.

We do have stats on lock waits, yes. In our automated overnights, that tends to be under 5% of the time spent by the render thread and by the gamestate thread.

considering majority people play Single player anyways I think these games should've been focused on it from the beginning.
There's focusing on single player, and then there's making multiplayer quite literally unplayable. Introducing OOSes means introducing unplayability.
 
  • 15
  • 6
  • 1Like
Reactions:
Does the one month start counting down as soon as the AI decides to start moving to a defensible location, or does it start when they reach that location? It would be strange to see them choose to stand and fight only for it to take 3 weeks to move to the defensible location and then leave again in a week.

And do you do anything to prevent the AI from moving to the same position every 3 months assuming the war keeps dragging on for some odd reason (perhaps the player is fighting 2 wars and isn't bothering with that one atm)? Or does the map just generally have enough defensible locations that it's unlikely the AI will just rubberband back to the same place every few months?
That starts counting down after they arrive at the more defensible location.

Stand & fight only kicks in if the strong enemy army is close enough to be a threat (a few provinces away at most), so the AI looping in that manner should be rare; it'll generally try to avoid getting that close in the first place, so normally it only kicks in if you're actually trying to chase them down. If it kicks in when you're not chasing them it usually just leads to them moving a province or two to be more defensible, staying there for a month, then doing something else (like try to siege something back).

Thank you so much for prioritizing fun over challenge. It sounds like every decision you made about AI is what I would have wanted, so I'm really happy about that. Question about the speed, though. Max speed seems to be a lot faster than in CK2 depending on your specs, are the other speeds similarly effected? Or will 3 speed in CK3 be the same as 3 speed in CK2?
Speed 5 is uncapped, speeds 1 through 4 have a target tick rate, so don't depend on the speed of your PC (unless your PC isn't fast enough to achieve that speed).
The target tick rates don't match exactly to CK2; they've been tweaked a bit.

Am I interpreting correctly that if I can run CK2 that I can run CK3?
Not necessarily. Especially if your GPU is weak.

Any drawbacks of the new system? Or any other erason why it hasn't been considered/adopted for CK2? Advance in technology at some point maybe?
The biggest drawback is that it takes a lot of work to apply it to an existing game.
There's also tons of tradeoffs compared to other possible systems, but going into detail on those would be out of scope.
Compared to what it replaced though, there's virtually no downside when making a new game.

So let's say the Italy AI appoints France as their "war coordinator" and while France has Italy's troops up near Normandy a civil war breaks out. Does Italy regain control of its armies in order to go win their civil war or do they just lose all control?
I believe in that case, Italy would grab its troops back.
 
  • 21
  • 1Like
  • 1
Reactions:
Because sometimes the AI does stupid stuff like wasting piety and gold when it really should be saving them to become a king
The AI does have some systems specifically for this.
All money the AI earns is divided between a few different pools:
  • Short term: Vast majority of expenses
  • Long term: Creating titles, buildings, a few other things
  • Warchest: Savings in case of war; needs to be full in order for it to declare
  • Special: Things like the Pope trying to always keep some money around in case people ask for money
This all sounds great but oh man does it bother me that the arrangement of the colors in the legend don't match up with the colors in the graph.
They do match up but they're in reverse order. It's long annoyed me too, but never quite enough that I've looked into fixing it.

What's SSAO? Not techy person asking...
Screen space ambient occlusion.
It's a lighting technique that makes things look nicer/more realistically lit.
 
  • 27
  • 1
Reactions:
All I really want from the AI is for it not to arrange marriages between 12-year-old boys and women who will be infertile by the time the groom is old enough to marry.
 
  • 15
  • 2Like
  • 1
Reactions:
Nice optimizations. I know a lot of people who gave up on long games because of slowdown, so this looks like a good step towards addressing that.
Also, thank you for doing something about "ping pong" armies.
 
  • 1
Reactions:
All I really want from the AI is for it not to arrange marriages between 12-year-old boys and women who will be infertile by the time the groom is old enough to marry.
I've used it strategically to lock a woman out of being able to spawn for her dynasty, but it'd be nice to have it not happen by accident or stupidity.
 
  • 4
  • 2
Reactions:
Sounds great. I'm no programmer, but of what little I do know, my gut feeling is that new Paradox strategy games ought to run a lot smoother with today's far more common high-core, high-thread count CPUs. I have a 6c/12t Ryzen myself.