• 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.
Showing developer posts only. Show all posts in this thread.

Meneth

Crusader Kings 3 Programmer
153 Badges
Feb 9, 2011
10.056
5.406
www.paradoxwikis.com
  • Europa Universalis IV: Common Sense
  • Crusader Kings II: Holy Knight (pre-order)
  • Crusader Kings II
  • Crusader Kings II: Sword of Islam
  • Crusader Kings II: Legacy of Rome
  • Crusader Kings II: Sunset Invasion
  • Crusader Kings II: The Republic
  • Hearts of Iron IV: Expansion Pass
  • Steel Division: Normand 44 Sign-up
  • Stellaris: Digital Anniversary Edition
  • Crusader Kings II: Way of Life
  • Mount & Blade: With Fire and Sword
  • Mount & Blade: Warband
  • Magicka: Wizard Wars Founder Wizard
  • Hearts of Iron IV: Death or Dishonor
  • Europa Universalis IV: El Dorado
  • Hearts of Iron IV: Colonel
  • Hearts of Iron IV: Field Marshal
  • Surviving Mars: Digital Deluxe Edition
  • BATTLETECH: Flashpoint
  • Crusader Kings II: Conclave
  • Surviving Mars
  • Cities: Skylines Industries
  • Stellaris: Galaxy Edition
  • BATTLETECH
  • Hearts of Iron IV Sign-up
  • Stellaris Sign-up
  • Hearts of Iron IV: Cadet
  • Stellaris: Humanoids Species Pack
  • Prison Architect
  • Crusader Kings II: The Old Gods
  • Cities: Skylines - Campus
  • Hearts of Iron IV: No Step Back
  • BATTLETECH - Digital Deluxe Edition
  • Crusader Kings Complete
  • Cities: Skylines - Parklife
  • Europa Universalis IV
  • Age of Wonders III
  • Hearts of Iron IV: Expansion Pass
  • Europa Universalis IV: Cradle of Civilization
  • 500k Club
  • Stellaris: Leviathans Story Pack
  • Crusader Kings II: Reapers Due
  • Europa Universalis IV: Mandate of Heaven
  • Europa Universalis III Complete
  • Cities: Skylines - Mass Transit
  • Europa Universalis III Complete
  • Cities: Skylines - Green Cities
  • Teleglitch: Die More Edition
  • Europa Universalis IV: Rule Britannia
Good afternoon, everyone. I’m Magne “Meneth” Skjæran, back again for another dev diary. The list of previous topics I’ve covered is getting too long to include in full, so I’ll just include some of my favorites: modding, optimization, and quality of life.
Today I’ll be covering one of those topics once more: optimization. I’ll also talk a bit about what we’ve done to improve the AI in the upcoming patch; I’ll even share the whole AI changelog, which is by far the biggest in CK2’s history.

Let’s start out with optimization. Optimization hasn’t been a focus on anywhere near the level it was in The Reaper’s Due, but with the sheer number of new provinces we’ve added in Tibet, the Tarim Basin, and the Middle East, we wanted to ensure the game wasn’t slowed down. So during development we spent some time profiling the game to identify parts that might be made faster, and have kept track during development of the average speed of the game in our overnight hands-off campaigns.

The result of this was roughly 50 changes across a variety of different systems, ranging from tiny optimizations to a few large ones. The largest, sadly, was simply fixing a performance issue introduced earlier in JD’s development, but still this resulted in a noticeable improvement over 2.7.

Here’s a small selection of the changes we made:
  • Ported HoI4's optimization to GUI focus processing
  • A few optimizations to unit map icons
  • Courtiers now only check events every 50 days instead of 20
  • Checking if minor titles need an update is now done in parallel
  • Informed the AI that we changed how decadence works years ago and it shouldn't give titles to its family members just for the hell of it
  • Unlanded characters will no longer take the "become council member" ambition
  • Added "ai_check_interval" parameter for decisions. This determines how rarely the AI checks a given decision, and can be useful for performance-heavy decisions that don't need to be checked often
  • Plot and ambition selection is now done in parallel, and applied in series
  • Raid armies now only re-evaluate where to go if they have a compelling reason, or haven't done so in a while, like regular armies
Essentially, a bunch of small changes, including some increased parallelization.
On top of this, we also made a few changes to avoid unnecessary characters getting generated:
  • Restricted a few events/decisions that would generate characters to playable characters, and one to non-mercenaries only
  • Improved PopulateCourt so that more characters than necessary aren't generated, by better counting councilors, counting existing concubines, and ensuring only AI characters that would want to marry generate marriage candidates
  • Characters currently in hiding or prison can no longer impregnate women, who were already excluded from impregnation if they were in hiding or prison
  • Made AI baron generation try to find an appropriate character in court first; only if that fails is a new character generated
  • Fixed naval mercs generating sub-unit commanders
As a result, despite the significant number of provinces 2.8 adds, and the extra characters arriving from China, the game now plateaus at a similar level to 2.7:
upload_2017-10-16_12-0-37.png

For comparison, here’s a similar graph from Reaper’s Due:
vMnckpc.png

Sadly I don’t have a similar chart from MnM. To the best of my knowledge, in MnM it would look very similar to JD’s chart.

There’s been a bunch of other minor changes between what I’ve listed above, but they’re too many and too technical to be especially interesting.
Overall, in our tests, these changes combined have resulted in the first decade of the game being 8 to 16% faster than 2.7. As you can tell, this varies some by PC, but every single machine we tested it on ran faster in 2.8 than 2.7. Note that as our main goal was simply to ensure that no slowdown had occurred, we only have precise metrics for the first decade, though our overnight tests indicate that roughly the same result holds through for long-term performance as well.
We’ve also taken a few steps to reduce memory use a little, though we don’t expect this to be noticeable except perhaps for those on machines with very little RAM.

Now, let’s move onto the AI. The CK2 AI has always had a few idiosyncrasies, though the character-based nature of the game means that this doesn’t hurt the game experience as much as it might in other games, since human beings doing silly stuff is quite normal. However, some areas can be frustrating even with that taken into account, such as troop movements, and the AI having little regard for border gore when handing out titles.
In 2.8 we’ve therefore spent quite a bit of time on various parts of the AI. Without further ado, here’s the full AI changelog for 2.8:
- Fixed one way AI characters that should have AI could end up with no AI
- The AI now actually considers the idea of sending its army to a province if its friends are there or adjacent, even if the province is otherwise a bit boring
- The AI now actually realizes that friendly armies standing near a potential target is a good thing even if it doesn't personally own those armies
- Once the AI gets to its allies it won't decide that if it can't attach due to supply, it is better for everyone if it just packs its bags and goes home. Instead it will now try to stick close
- The AI is now vaguely aware of the existence of tribal vassals when evaluating whether a faction has a real chance of succeeding
- The AI now checks to see exactly how many liege levies it'll deny its liege by revolting, rather than going "eh, half my levies I guess?"
- The AI now takes tribal vassals into account in most decisions where it considers how strong a potential enemy or ally is, rather than simply pretending they don't exist
- Fixed aggression from ambitions having 20 times as big an effect as intended
- AI will now also call allies to arms if the estimated answer is a "maybe," to force them into making a decision.
- Raiding adventurers now realize once they've been settled that maybe, just maybe, they should consider their new realm their base of army operations, and return armies there when they're not up to anything
- AI: Should be snappier to evaluate settlement decisions when needed
- If defensive pacts are disabled, the AI will no longer think no one could possibly be a threat to it
- AI: Made the Pope less reluctant to accept requests for excommunication
- AI (Conclave): Will never pick Heritage or Faith Focuses for children of the right culture and religion
- Tributaries are now always aware that their tributary relationship benefits their suzerain more than them, and that they could potentially break free
- The AI no longer gets increasingly reckless the more "rational" it is; being enlightened by your intelligence turns out not to make your troops any better
- The army AI no longer thinks that just because two destinations are pretty much equally good, it should switch back and forth between the two and thus never get anywhere
- The army AI now understands that if it has bothered to start a siege, maybe there was a good reason to do so, so we shouldn't just run off right after just because another destination looks very slightly better
- Taught the AI that more loot means a province is a better target for looting
- The army looter AI now actually realizes that if all the loot in a province is protected by holdings and the army isn't big enough to siege them, it isn't actually a good loot target
- The AI now considers any strong realm nearby a potential threat
- Taught vassals how to send alliance offers to other vassals
- Informed the AI that we changed how decadence works years ago and it shouldn't give titles to its family members just for the hell of it
- Told the AI that if it is the attacker in a war, it *might* be a good idea to actually go attack the defender even if you're targeting their whole realm rather than a specific title within it, and it is a bit of a long walk
- The AI has learned how to spell, and no longer look for "soceities" missions when they're actually called "societies" missions. With this newfound ability to spell, the AI is better at identifying mission targets
- Taught nomads that if they rise in revolt in response to an attempt to split their clan, maybe they should accept it next time rather than rise again and again
- The AI is no longer deathly afraid of going overseas to help its allies just because the enemy is a bit far away
- The AI no longer thinks that just because a province is *someone*'s capital, it's a good target; it is now more discerning and only cares if it is the capital of an enemy
- The AI is now a bit more aware of just how superior heavy cavalry is to light infantry
- The AI now no longer thinks that enemy armies adjacent to other enemy armies are just on vacation, and won't help out if it were to attack
- Gave the AI a crash course in how to hand out titles
- Gave the AI a crash course in how to transfer vassals in a way that won't make you want to claw your eyes out
- The AI now realizes that just because it has occupied everything it borders, it shouldn't skip out on occupying the non-bordering stuff
- Taught the AI a few things about how supply works, and why a doomstack isn't always the best way to deal with it while travelling to its destination. The AI is hard of hearing, so it only partially understood this lesson, but partial understanding beats no understanding, right?
- Taught the Pope Geography 101, with an emphasis on what "distance from Catholicism" and "size of kingdom" means in the context of Crusades, and why this means that invading India when Egypt is right there might be a bad idea
- Informed the AI that just because their ideal commander can't lead troops right now, doesn't mean they should just skip assigning a commander to the flank they wanted to assign that commander to
- The AI now realizes that once it is landed, it should base its army in its capital rather than have it stand in the middle of nowhere, taking attrition, just because it happened to spawn in the middle of nowhere many years ago
- Betrothed men no longer go "nah, can't fulfill this betrothal" after sending a marriage offer which you accidentally reject. They will also no longer decide to not bother to resend the offer while mumbling "let's see how *they* like being ignored"
- Told just-spawned raiding adventurers "hey, your fleet is right over there" so that they wouldn't disband instantly when spawning on an island with no good raid targets, due to thinking that getting across the sea is simply impossible
- Members of small reformed religions are now a bit more fond of joining Great Holy Wars and the like
- The AI has finally come to the realization that it is allowed to invite its own vassals and courtiers to plots, not just the vassals and courtiers of the target

Shortly put, this fixes some of the more blatant mistakes the military AI would make, though I’m sure there’s still some left; I’ve personally still observed a few AI loops where the AI will start and stop moving every day, but sadly that wasn’t reproducible from save and thus couldn’t be fixed. It should be a bit more committed to its actions now, and better at figuring out where it should actually be going.
Beyond that, the AI is now much better at handing out titles and transferring vassals. For the hand-out part, it tries to avoid making existing vassals stronger, instead preferring to create new ones, and tries to maintain its culture and religion if reasonably possible, as well as strengthening its dynasty. For vassal transfers, it now tries to give it to adjacent vassals so that sub-vassals don’t end up scattered all over their realm. Inheritance will still lead to that kind of thing, but that’s historical, so not something we consider much of an issue.
There’s been a number of other tweaks, but one I think people will be especially glad to hear of: the Pope should no longer be calling random crusades for India when he’s got targets much closer at hand.

That’s all for today. If you’ve got any questions, feel free to ask them in the thread.
 
Last edited:
Is the new patch gonna increase multiplayer stability?
We've fixed a number of old MP issues, but we've doubtlessly introduced new ones too. It's seemed reasonably stable in our internal MP, but we've had out of syncs from time to time too (though we play with more aggressive out of sync detection than the release version has).
As far as I can tell it shouldn't be any worse than the current release at least, and is probably better now, but with MP it's difficult to know for sure.
 
Nice! A few questions:
- Regarding the checking of strength from vassals that can be called, does this work for all governments with vassal CTA or just tribal_government?
- Has there been any changes to raiding adventurers being able to march all the way to e.g. Rome or Constantinople without anyone on the way figuring that they should stop them because the raiding adventurers never bothered to stop to loot a province on the way?
- How does the AI evaluate whether a strong nearby realm is a threat? Relative levies + retinues + standing mercs/event troops? Relative levies + retinues + standing mercs/event troops + allies + tribal vassals? Realm size? Something else?
- Regarding the AI now understanding that HC beats LI, does it also understand the relative strength of other unit types?
- Regarding Papal Geography 101, has the Pope (and other rel heads) also gotten Papal Holding Types 101 and been taught that picking some place with castles and cities beats attacking random tribes and that taking unsettled land in the steppes is something to be done after the rest of the world has been secured?
1. All, yes.
2. No
3. The first, yes, plus tribal vassals
4. It always sorta understood it, but it normalized things some which reduced the strength ratio. E.G., if unit 1 is 4 times as strong as unit 2, it'd consider it something like twice as strong. Now it is much closer to 4. So that'll affect all unit types, yes. Note that the AI still isn't aware of how powerful some tactics are though, so units that heavily lean towards a single unit type will still be underestimated; just not as badly as before
5. It takes size into account now, meaning # of holdings (with a bit of influence from empty slots), so for realms that are roughly as distant it'll prefer the heavily settled one. It doesn't specifically check for tribes and steppes though

With those AI improvements, will we see less realms breaking (which is sometimes a good thing for variety) ?
Shouldn't affect it too much, not directly at least.
I hope this means, apart from crusade targets being more sensible, that crusade and jihad armies (and overall armies) will also show more cohesion in that there is one or more big stacks upto supply limit with other smaller ones nearby, instead of just haphazardly sieging down counties while the enemy picks them of one stack at a time?
They should be somewhat more coordinated now due to some of the other changes in the list, yeah.

Will the AI offer Alliance more? I often found the AI sometimes a bit imcompetent inn creating Alliance. Like the Asturias who often gets eaten up because they are unable to form Alliance with France, Italy or their strong vassals to compete against a stronger power of Umayyad.
We haven't changed how external alliances are handled. The AI will offer alliances to other vassals far more often than it used to though.
 
Why? He does not excommunicate almost anyone. Also the effects of exommunication are pretty minor compared to what it was.
Less reluctant, not more!

Will this mean that every raider no longer beelines strait for constantinople?
They won't go there if it's already looted and they can't siege it, at least.
 
This is all excellent stuff. One thing that I am mildly concerned about though -

> Made AI baron generation try to find an appropriate character in court first; only if that fails is a new character generated

What if they are people that I am keeping in my court for a reason, like if I want to give them a claim later, or are people I want pre-emptively invited to my court to be married off at a later point that I want. Or my heir, who I want to keep safe. Autogenerate is fantastic for spawning characters of your specific culture and religion, however Barons don't have Court Physicians and only ever get a low level education, so that is a worry for courtiers I wanted to have more control over.

New Crusade choices are nice too. I am assuming that also applies for Jihads and GHWs.
It's just for the AI, and it only checks its own court, so it's not gonna be stealing your characters.
 
Can I request a change? Can a couple, both of whom under specifically house arrest in the same court, be able to have children who are automatically under house arrest as well? This is to properly model the 12er Imamate in captivity; in 867 the future 11th Imam is in captivity, as his his father the 10th, but it's impossible for a 12th Imam to be born. It's also impossible for him to marry, but I can get around that part at least.
Main issue is that house arrest is purely script, while imprisonment as a whole is code. So the code doesn't know they're not in separate cells.
So ideally it'd be something we'd fixed, but it is unlikely to happen unless we for other reasons decide to move more of the impregnation logic to script.

I was hoping it would realize that the unguarded loot in constantinople would be less than the loot of castles it can actually siege down.
Can't remember quite how I handled it so... maybe?
 
Hello, will you do something about marriage A.I? It's an absolute random mess right now. Rulers and their offspring often marry commoners with low stats. They marry way outside their culture group and even religion, even though there are plenty of spouses in their culture/religion group.
It's something we want to look into, but it is not on the table for 2.8.
 
Meaning that there should be less counts of Epirus who work part-time as viceroys of Mallorca?
Indeed.
Though islands will still be a bit odd when it comes to vassal transfers and the like, since there's nothing adjacent to them.
But they should no longer end up directly holding it at least.
 
@Meneth: please don’t put changelogs in code tag, it’s barely readable without scrolling left and right :(

To save screen real estate, spoiler tag works much better.
Changed it to a spoiler.

@Meneth

It would be great if there could be some women characters getting generated in each court the first few decades after game start.
Why ? Well in my games i see several landed lords without wives the first few decades, as there seem to be neither high nor low nobiity
wives available..or they are not allowed to leave their court ("too good skills" seem to be one of those culprits and "found my calling",
which seems a bit silly when stuck in some barony tier holding).
The game does generate women for unmarried rulers if there's no decent target available in their court. However, it might currently be slightly too lenient about what's a "decent target", leading to no one getting generated even though they don't want to marry that "decent target".
Haven't noticed any massive issues with this though.
 
Tears of happiness. But does muslim AI understand now that he can appoint a good son (or grandson) by giving out titles, not only first born?
Their own unlanded kids is the AI's first priority when handing out titles.
 
Whoever wrote that changelog: you are brilliant :D
<3

Any fix done that will decrease the mid game extreme border gore?
The improved vassal transfer logic helps a bit, but mostly with internal border gore. Doesn't help much border gore between realms.
 
"AI now understands that idle armies adjacent to the target are a threat"
Oh wow. This will make my wars a lot harder, AI baiting was the way I won most of my hardest wars. Looking forward to playing that!
You can still bait the AI, it's just a bit harder now. Keep them two provinces away for example and the AI won't realize.
The player being able to beat the odds by messing with the AI is fine in my opinion; just shouldn't be too blatantly easy :p
 
Can you adjust Nomads so they prefer to give land adjacent to their vassal nomads?

When they settle as a tribe the fact that their vassals have land all over the place usually ends up causing a ridiculous mess. Plus nomads should have a HUGE preference for fully linked lands since how the hell will they get their horses to their new pastures?

They might also need something to make them lose far flung empty counties unconnected to the empire since nobody is going to cross half the known world to let their horse feed there.
Part of the update to the grant and transfer logic did exactly this :)
It's not perfect or anything, but the results are far better than in 2.7.
 
What event creates young females?
It happens in code, not by event.

The first is anytime a ruler acquires land and is over their demense limit. Either through inhereting it or through holy wars. When this happens, they give away titles that are adjacent or close to their capital, or baronies in their capital, and keep distant, weak, penalized, counties. A good AI would give away these distant titles for others to manage and keep their strong, centralized locations. Hopefully you can look into this.
Part of the title grant overhaul improved this a lot. We iterate over titles backwards now, so it checks the newest titles first. It also tries to avoid giving away stuff in its capital duchy, and also any other duchy it holds personally (prioritizing keeping capital duchy stuff over secondary duchy stuff).
So combined, that makes it in most cases much more sensible than it is right now, and at worst equally stupid.
Though it still prioritizes getting rid of baronies, even if they're in the capital, above getting rid of distant counties.

There’s also constant surge of revolts everywhere, attempting to increase council power, and they always fail. Why do factions lose so often? They clearly aren’t taking into account proper strength of the liege and themselves. Can you look into this and make sure the right numbers are being used? Every game I’ve played I’ve seen revolts in dozens of places and they all constantly have less men than their liege. This is just dumb. A faction shouldn’t fire unless they have at least 120% of the lieges potential troops post-revolt. Currently it’s just done wrongly.
We improved the strength calculation some in 2.8; it didn't properly understand how many troops it'd deny to its liege by revolting, leading it to in many cases overestimate its strength.
So now it's a script issue if anything. Should be better in 2.8 than in 2.7, anyway.
 
Do you think the choice is still right to abandon baronies in the capital?
Probably not, but it doesn't make a big enough difference for us to care all that much. With the exception of your capital, it generally makes sense to give away baronies first, so it makes the logic more straight-forward.

And besides this one point. Do you know why the AI creates additional top titles when it need not to?
I'm not sure what the original reason for this is, but there's a define somewhere to turn it off.