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

EU4 - Development Diary - 27th of February 2018

Good day all. Tuesday rolls around as it often does and we're back with another Dev Diary for Europa Universalis IV. Today we'll talk about 2 things: Improvements to the Naval AI and the new National Ideas of the various Irish Earldoms.

Firstly the AI. For this I will pass the mic to the living legend among AI programmers @Chaingun

#####

Hello, I am Chaingun aka. Skynet, although my real name is Petter (non-Swedes feel free to pronounce as Peter). Today’s dev diary will put the lens on what kind of new AI bugs (and occasionally WAD behavior) you may expect from the 1.25 update accompanying Rule Britannia.

The main [AI] focus of 1.25 has been to sort out the less than ideal naval behaviors. Some of you may have the perception that France transporting all their troops to an island in the Pacific is a recent thing, though in fact the AI’s logic has always permitted that to happen. It has been showcased far more frequently beginning when @Gnivom fixed overseas war declarations, due to the increased frequency of AI troops transport attempts overseas.

This overall situation is interesting because it highlights some of the many perplexities of game AI development, of which I would like to recap:

  • Fixing an issue can make the AI worse indirectly because of another latent issue, as the naval transport situation illustrates. Another example would be reducing the AI’s siege army sizes to reduce attrition when it doesn’t understand how to distribute cannons in their armies.
  • Fixing an issue can make the AI worse because we actually create another issue by breaking something.
  • A symptom often has multiple causes. An example is the famous sleeping army bug which is in very general terms can be explained as the AI getting into an external or internal state it cannot handle, resulting in all the commands it attempts (if any) being invalid.
  • A cause can have multiple symptoms that seem entirely disconnected or otherwise have very far-fetched causal dependencies. Ottomans falling behind massively in tech due to AI refusing to invade a rebel held island (due to having fewer transports than rebel regiments times a constant) would be an example.
Game AI programming is not a recommended job if you don’t like hearing how stupid you are on the forums forever afterwards not tweaking for their pet issue when working on a fixed time schedule. The line between bug and feature is thin indeed.

Returning to transport issues; in 1.25 the naval invasion AI is constrained from moving more than 50% of their troops “abroad”, where abroad is defined as a different landmass on a different continent, and army divisibility is not subject to said restriction (so if France does just have one army, it may be found in South America all the same). However, this is just the naval invasion logic… the land army AI may still decide to walk across Eurasia with all their armies for obscure reasons. It’s something I would like to rectify in the future if I get time for it.

Another big problem with the naval AI of previous patches is that it’s simply extremely slow in transporting troops. This issue turned out to be complex, and a number of sub-issues were identified and dealt with to various degrees:

  • There were several bugs where AI fleet and/or an army awaiting transport actually would be forever stuck until reload or even after.
  • The AI can now actually split a fleet if not all transports are required.
  • Sailors had been rebalanced to actually matter for some countries. Nobody had taught the AI this, resulting in many large countries having 0 sailors all the time, in turn leading to fleets spending most of their time in repair. As this was a surprise to me as well, and the issue is highly complicated to fix, the AI may now cheat on sailors by conjuring them out of thin air if they run out. This allows seamlessly working towards fixing the sailors handling without the naval AI being utterly handicapped in the meantime.
  • The AI’s transport fleet (of e.g. Spain) would often be found sailing around in Indonesia or some other far away place, taking years to respond to anywhere else. For Great Britain, this was even worse as the warships that were needed to defend against invasion partook in said expeditions. A fairly intense rework in how the structure their fleets has been made as detailed in the next paragraph.
Initially, when I set out to improve the AI’s fleet response times, I thought it would be a matter of having fleets based in appropriate ports around the world. Unfortunately, the AI (and neither do human players) have enough ships for this. Even the largest colonizers in the world can at most field a couple of hundred warships and transports. Splitting up warships lightly can therefore be disastrous.

The solution settled for has been to make the AI place the bulk of its warships into a Home fleet, which is forbidden from venturing far from the home coast, and does not contain any transports. Because it does not contain transports, it will never be busy transporting troops. This behavior is conservative, but conservative behavior is better for AI in practice. Europeans will not attempt to challenge Ming with a large fleet of heavy ships, they do however pose a token challenge to someone attempting to land troops on their shores.

So were these changes enough to make the AI a formidable force at sea then? Astute players may have noticed the AI barely built any ships whatsoever. During Christmas, the AI’s economy was tweaked to build far more warships, force limit buildings, and float less money. It was bloody perfect for a while with the Ottomans fielding 1.5 million men. Much later, new army maintenance costs came into the picture later as a surprise wrecking AI economic balance, so the 1.25 release may have regressed in this regard. Still, it should be better than it was on the naval front.

The implication of this rework on the whole makes the AI a bit more capable at naval stuff. Its micromanagement is still terrible, and skilled players will still be able to play “lure the fleet away” tactics to invade Great Britain with ease. Players using house rules or otherwise not exploiting AI behavior may however find some challenge in making naval invasions sometimes where previously they would not.

It’s worth some amount of extraposition explaining why the human player will always beat the AI as it’s coded in EU4. The crux is, the AI in Paradox games is using a fixed manual coded strategy. The extent to which is changes its behavior in response to what a human opponent does is limited to the exact tactics pre-programmed by the human author. Merely the fact the AI will not change is enough for the human to pick counter-strategies that are very effective against whatever the AI is doing, whereas they can not go into the same extreme degree of specialization against another human opponent.

Lastly, let me state I’ve been here since the Autumn on EU4 as a consultant (I was working with PDS full time until around 18 months ago), but I am being reassigned from EU4 to SECRETPROJECT, still at PDS, where I have freedom to create many new and wondrous AI bugs, or maybe even let the AI create the bugs itself, as any intelligent being would.

That’s all for now.

#####

Cheers Chaingun. Next up we'll look at New National Ideas for the Irish. Ireland is one of those places that could honestly be divided up but we are satisfied with the setup we have reached in 1.25. The following National Ideas have been either added or amended, with credit to @macd21 who made considerable contributions to these:
  • Leinster
  • Kildare
  • Clanricarde
  • Tyrone
  • Ulster
  • Maccarthy
  • Ormond
  • Faly
  • Tyrconnell
  • Repurposed group set for united Ireland
With this the entire Island's nations have their own unique National Ideas, with a formable Ireland having their own set. Let's pick 3 to look at: Meath, Kildare and Ireland

MTH_ideas = {
start = {
fort_maintenance_modifier = -0.2
global_garrison_growth = 0.25
}

bonus = {
leader_siege = 1
}

innefectual_overlords = {
global_tax_modifier = 0.10
"The English government in Dublin and their Irish Parliament puppets have been weakened as result of England's many conflicts in the Hundred Years War and the War of the Roses. Their influence no longer holds any sway over the true lords of Ireland, and now is the time to strike out for our independence."
}
foreign_nationals = {
diplomatic_reputation = 1
"In 1487, the Irish lord John de la Pole, Earl of Lincoln, invited a host from Burgundy to Dublin to support the crowning of Yorkist English pretender Lambert Simnel. Ireland would make for a fine base of resistant against the English mainland, and forever keep the would-be occupiers at bay. We may also one day gain powerful supporters, such as the Kingdom of Spain."
}
mth_parliament_of_ireland = {
stability_cost_modifier = -0.10
"When the English were expelled from Dublin, they left behind an institution called the Parliament of Ireland. Meant as an instrument to subjugate us, we will instead use it to organise our efforts to resist a return of English rule."
}
mth_englishtown = {
culture_conversion_cost = -0.15
"Once known as Irishtown and a ghetto for native Irish in Dublin, we have turned the tables. The district is now relegated to the Englishmen who remain, there being forced to integrate into the new order."
}
mth_the_cess = {
global_tax_modifier = 0.1
"The Cess is a special tax for the purpose of maintaining the extraordinary garrisons required to keep our towns safe. The people resent the tax, but understand its necessity."
}
mth_trinity_college = {
adm_tech_cost_modifier = -0.1
"Ireland lacks an institution of higher learning. A Catholic university in Dublin would put Ireland on the academic map."
}
mth_siege_mentality = {
defensiveness = 0.20
"The people of Dublin and Meath have had to endure many sieges through the years. We understand how to survive them and how to resist them."

KID_ideas = {
start = {
global_unrest = -1
defensiveness = 0.20
}

bonus = {
prestige = 1
}

kid_lords_of_ireland = {
diplomatic_reputation = 1
"Through strategic marriages and alliances with both Gaelic and Anglo-Irish families, the rulers of Kildare maintain a degree of influence throughout the island of Ireland unmatched by any of their rivals. Such is their power that successive English monarchs appointed them as their Lords Deputy over the island."
}
kid_ear_of_the_king = {
improve_relation_modifier = 0.2
"Despite repeatedly betraying the crown, the FitzGeralds of Kildare talk their way out of trouble, returning home with a pardon and a promotion."
}
kid_silken_finery = {
land_morale = 0.10
"When Thomas FitzGerald renounced his allegiance to the English king, he did so accompanied by his retinue of armoured gallowglasses, who were bedecked with silken fringes on their helmets. When Thomas wavered in his course of action, an Irish bard recited to him a poem, calling upon the Silken Lord to avenge his father’s death."
}
wizard_earl = {
technology_cost = -0.05
"The 11th Earl of Kildare spent many years abroad, studying and learning much of the world. When he returned home, he brought with him a keen interest in alchemy. Such was his knowledge that his neighbours referred to him as the wizard earl, for he was thought to have magical powers."
}
the_curragh = {
cavalry_power = 0.1
"The wide open plains of the Curragh have long been used as a gathering place for armed forces, but also make it a popular site for horse racing, and later, horse training."
}
kid_architects_of_nation = {
build_cost = -0.1
"The ancestral seat of the FitzGeralds at Carton House is grand, but our fortunes have improved of late. We have drawn up plans for an even grander residence, that could serve not only as a family seat but also as the Earl's court."
}
kid_royal_irish_army = {
global_manpower_modifier = 0.1
"The forces sent by the King of England to subdue the Irish can easily be repurposed by the Peerage. By simply offering better pay the Earldom of Kildare could command a sizable force of English soldiers."


irish_ideas = {
start = {
land_morale = 0.1
trade_efficiency = 0.1
}

bonus = {
legitimacy = 1
republican_tradition = 0.5
}

irish_endurance = {
shock_damage_received = -0.1
"Decades of disease and famine have mostly pushed the English invaders from our lands. Meanwhile, the Irish people grow all the stronger from their harrowing experiences. Yes, there is no stronger man on God's green earth than an Irishman!"
}
the_clanns = {
same_culture_advisor_cost = -0.2
"The Clanns of Ireland make up a strong political body for land and family management. In smaller families, the family elected chieftain is in charge of maintaining the family and protecting their lands. Land and leadership is passed through the family electorate system of Tanistry. From the royal clanns the symbolic high king of Ireland is elected, creating a bond of union between the Irish families."
}
more_than_irish = {
global_unrest = -2
"Heartily did the Norman invaders embrace the Irish traditions; so much so that it was said they put on the airs of being 'More Than Irish'. The very nature of our culture is contagious, and for centuries yet will men embrace our way of life."
}
loyal_catholics = {
papal_influence = 1
global_heretic_missionary_strength = 0.02
"While the English may toil and spin in the winds of the Reformation, the Irish people as a whole are determined to remain under the wing of their lord The Pope."
}
ire_abundant_harvests = {
global_trade_goods_size_modifier = 0.10
"Now that the greedy, neglectful English landlords have been driven out of Ireland, our farmers are finally able to manage their produce in peace. Blights and crop failures are addressed as matters of critical state importance rather than as peripheral concerns of an irrelevant colony."
}
unconquerable_ireland = {
war_exhaustion = -0.02
"No English lord could contain the will of the Irish for long. Despite all efforts, rebellion after rebellion sprouted in an attempt to displace English rule. Insurgency after insurgency will spring up in their path, and Ireland shall never truly be theirs. And, as they sail from our lands, we shall further influence resistance against the protestant imperialists to on our eastern flank."
}
ire_gallowglasses = {
discipline = 0.05
"Formerly loose mercenary bands, the Gallowglasses are being consolidated into a national army. Their institutional experience is almost unrivalled, and their septs are the perfect foundations for regiments."


And that's our lot for today. Well, if I don't add an image then the front page won't be happy, so here we go:

meathinks the time for change is uppon England.jpg


Next week we'll show off the new unit models and music which will both be included as part of Rule Britannia. See you then!

Don't miss today's Rule Britannia Feature Stream with DDRJake on our twitch channel at 15:00 CET - the stream will as usual be available on Youtube if you can't make the livestream
 
Last edited by a moderator:
I have a quick question about the army AI logic that's tangentially related to this week's diary. Are there any plans to make the AI more committed to leaving behind armies for home defense? I know it probably isn't easy to program the AI to correctly identify when it should go on the offensive vs. staying on the defensive, but since the AI is already cognizant of nearby hostile powers, I wondered if it was possible for the AI to be less willing to commit its troops to an offensive war if it was "worried" about a possible invasion from a bordering nation. Or perhaps it would be possible to create a system that allowed nations to "pledge" a certain number of troops to allies when it is only a secondary participant, based on trust of ally, attitude to enemy, threats at home, etc, instead of sending its entire army to fight an all out war on behalf of its ally. Or would all of this be far too difficult to implement?
 
How would just removing sailors make the game better? It's probably a lot less time consuming to just let the AI cheat. The game would probably be a lot worse without the AI getting their navy cheats. The player is already cheating by not following a set of scripted rules, giving them a huge advantage over the AI.
They add nothing, make no sense and hamstring the AI to the point where they need yet another cheat to help them deal with it.

What, do my navies just throw 22 people into the sea every month? Please.
 
Next week we'll show off the new unit models and music which will both be included as part of Rule Britannia. See you then!

Damn, i was kinda hoping 1.25 would be upon us within a few days.
Guess that won't be the case if there is another rule britannia diary planned for next week.

Looking forward to all the changes, can't wait to play as GB in 1.25.
Keep up the good work team!
 
Or perhaps it would be possible to create a system that allowed nations to "pledge" a certain number of troops to allies when it is only a secondary participant, based on trust of ally, attitude to enemy, threats at home, etc, instead of sending its entire army to fight an all out war on behalf of its ally.

This part sounds really interesting to me, as it would not only make it less easy for players to abuse AI committing to distant wars, but it would also reduce the overwhelming "I get my big brother to punch you (or your big brother)". How often do valid strategies for small nation revolve around "ally Ottomans/Hungary/France/... and let them punch your enemy for you while you sit back and relax". If the big buddy would not be willing to commit his entire army to fight an entire war for his little pet ally, then playing small nations becomes more about playing well yourself than about restarting to get that ally (looking at you, Byzantium).
 
Damn, i was kinda hoping 1.25 would be upon us within a few days.
Guess that won't be the case if there is another rule britannia diary planned for next week.

Looking forward to all the changes, can't wait to play as GB in 1.25.
Keep up the good work team!

Unit renders usually are the last thing revealed of a new expansion, so I think release is getting closer
 
They add nothing, make no sense and hamstring the AI to the point where they need yet another cheat to help them deal with it.

What, do my navies just throw 22 people into the sea every month? Please.
And how would having unlimited amount of people to send at sea be more realistic? Sailors is the only thing preventing a formerly land locked country from becoming a major naval power a few years after conquering their first coastal provinces. Simply removing sailors wouldn't be a good solution. A rework of sailors (and navies in general) is needed, but simply removing them isn't a good solution. At this point in the game's life cycle I'm not sure it's worth it though, there are plenty of other issues in need of attention.
 
the AI may now cheat on sailors by conjuring them out of thin air if they run out

what about let ai go negative sailors. And while in negative, the Ai can repair warships and transports, but can't build any new ship, and will mothball trade fleet to free up sailors. lass cheaty than "conjuring them out of thin air"
 
MTH_ideas = {

innefectual_overlords = {
global_tax_modifier = 0.10
"The English government in Dublin and their Irish Parliament puppets have been weakened as result of England's many conflicts in the Hundred Years War and the War of the Roses. Their influence no longer holds any sway over the true lords of Ireland, and now is the time to strike out for our independence."
}

mth_the_cess = {
global_tax_modifier = 0.1
"The Cess is a special tax for the purpose of maintaining the extraordinary garrisons required to keep our towns safe. The people resent the tax, but understand its necessity."

Two tax modifiers? @DDRJake
Also Calais is a new tag? There is a rework of Dutch revolts?
 
While basically I agree modders are great at making AI (having the necessary amount of time available), making moddable AI in a game that does not otherwise expose a detailed modding API used by open AI code isn't great for developer made AI, because AI-centric APIs weigh on the ability of devs to change the AI. Very commonly, the reason the AI sucks is that the fundamental code structure is flawed and could use a complete rewrite. Exposing a public AI API prevents that.

E.g. we do have parts of the AI moddable via modifiers. The problem is, quite often modifiers are quite insufficient for writing good AI. So when e.g. Gnivom dared to circumvent modifier based building AI there was a massive improvement. Although in that case, he could still do it in a way that let modifiers still impact it.

First of all thanks for answering.
The things we can do with modifiers is indeed very limited. I also get where you are coming from, from an API perspective. But as AI modding in general is quite time consuming and test intense I made the experience that modding a system that has limits, but not too many of them like Medieval Total War where basically the whole AI script was visiable (with coding limitations of course) and could be almost replaced entirely by modders really took the game to another level. You already expressed how so many different things come together in AI management and it really is/was the same in TW as well. And you certainly could see that as different AI Mods and Total Conversion Mods had their AI Advantages and Disadvantages but in the end they were superior both in battle and on the campaign map to the developper AI in almost every aspect.
I don't know how the AI Code works in EU IV as long as it is not visible to us (which you know is not a lot) so I have no idea if deeper modibility could be achieved without so much work.
But maybe it could be considered for future releases, to make the AI as modable as possible. I believe even CA integrated some AI Mods in their later patches, cause they were just better than the base game.
And I think modders would be honored to contribute to the base game as well. We're kinda doing it for our own entertainment anyway.

Cheers
flogi
 
Sailors is the only thing preventing a formerly land locked country from becoming a major naval power a few years after conquering their first coastal provinces.

That's just not true. There is also the naval force limit, which will limit any nation with a single harbor (or a few coastal provinces) to a fleet that is a regional naval power at best, unless they're willing to throw a ton of monthly income on their navy. The number of nations that start land locked and have the income to go way over naval force limit once they reach the shore is low to zero. If you feel like 12-14 ships (which already take like 1-2 decades to build) are too much for a nation with a single harbor, then we should tune naval force limit.

This game has a lot of redundant parameters that do almost the same slightly differently. If we could get rid of some that don't really work (sailors) instead of introducing more (innovativeness ...), that would be awesome.