• 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 - 9th of April 2019

Bonjour everyone! It is I, Le French Paradox and I will be your host for this Dev Diary.

Today we will talk about Tech Debt. As @DDRJake has been saying, tech debt has been an important focus for the EU4 team since the release of 1.28.3, the latest support patch we did for the Spain update. While our designers are thinking very hard about the yet-to-be-announced big expansion that is to come, we programmers have been busy tidying up the EU4 codebase.

tidying up.jpg

Microsoft should team up with Netflix, I would watch the hell out of this show

Jokes aside, we keep talking about Tech Debt but realize it might be a bit confusing, especially for our non-programming crowd.

While EU4 was announced at GamesCon 2012, the actual development started a year before, which makes the code 8 years old. And of course, the team at the time didn't reinvent everything, bits were pulled from EU3, some of which are still in use today. I'll let you speculate which is which in the comments.

As I'm sure you all know, technology is a rapidly evolving thing, and software engineering is no exception. In 10 years the development practices have evolved, both because the industry keeps learning and inventing new ways to solve problems, and because the ecosystem (the hardware and software that runs our games) also changes.

10 years ago, SSDs were not that widespread, 1080p was pretty new, DirectX 10 was all the rage in previews and most people were so hostile to Windows Vista that they kept running XP in 32 bits.
That is not to say that EU4 was using only stuff from the late 2000s or early 2010s until now. Over time our engineers have done their best to keep the game up to date, but some stuff inevitably slips through the cracks. It's the accumulation of all this aging stuff that we call tech debt(*).

Here's a few examples of those things that we have tackled so far.

64 bits
As the BattlePope already explained in a past DD, 32 bits was a reasonable choice when EU4 development started, but today 64 bits in the norm.
With that done EU4 will keep running with the next update of MacOS (which removes 32 bit compatibility altogether) and also be able to use more RAM. While there are no immediate plans to increase the memory usage of the game significantly, mods that add a lot of provinces and tags should be able to break the previous ceiling.

Rendering
It is no secret that our games do not use cutting edge graphics. True to its board game heritage, Europa Universalis is mostly about showing a world map with some cool dudes (and elephants) fighting on top of it. Yet if you take a look at the Imperator preview, you will see that our graphics experts have learnt a trick or two since EU4's release.

2xnk41.jpg


While Boromir is (was?) right, we still managed to replicate some of the improvements they have made. The main one is that the colorizing of the provinces on the map is now done mostly on the GPU, while in the past it used to consume precious CPU cycles to display whatever horrible experiment in bordergore your game was about.

capture.PNG

Let's play 7 differences, can you spot what changed from the current release in this beta screenshot?

Crash reporter
Our game never crashes, it just tactically exits. Yet when it happens, we want to know all about it. It helps our QA to reproduce the issue and our programmers to isolate the piece of code responsible and fix it.
Since EU4's release our engine team has made a new and improved crash reporter that brings us more data and help find problems faster. First of all, it now works on Linux and MacOS, meaning we will be able to investigate issues on those platforms much easier. Secondly, it allows us to add some metadata to the dump, such as the current year, the list of enabled mods or how many 6/6/6 heirs died to a hunting accident, helping us understand what triggered the issue.

Startup time
Improving the loading time of the game is something we always want to do. While we can't really apply the best fix to the issue (discontinue Windows support, the game just starts so much faster on Linux and MacOS, trust me), we managed to find some things we could do.
The most notable one was the upgrade of PhysFS, a 3rd party software that a lot of videogames use to load all resources (files on disk, mods, DLCs...). While still far from Unix performance, it should shave off a couple seconds from the startup time on Windows.

capture.PNG

Experienced Byzantium players recommend playing on Linux or Mac due to the very fast restart time

General performance
The speed of the game is, of course, always a concern. Every night, we run a couple games on benchmark machines and always make sure that the averages are below a certain value (80ms per in-game day is our current high threshold).
While you may think that performance would improve over time (due to new hardware for example), in practice the average usually go up during the development phase of a new expansion, and is then worked upon to bring it back to acceptable values.
Contrary to popular thought, adding new features in the game is not the only (or even main) source of performance regression. In fact, one big factor is simply the addition of tags and provinces.
Consider this: for every two countries in the game, a bunch of stuff needs to be computed each in-game day (relations, AI attitude...). For every two provinces in the game, the game has to know the way from A to B (what we call pathfinding). This is known as a quadratic problem. For those who don't favor math, it means that for X provinces, the problem complexity is X squared. Doubling the number of provinces does not double the number of computations needed, it quadruples it. Over the years, part of our job has been to allow EU4 to grow from around 2000 provinces to more than 4000 provinces.
Keep in mind though that in software engineering an optimization that makes something 0.1% faster is considered pretty good, 1% excellent and 10% probably means you introduced a serious bug (or fixed a very serious one). How do we manage to improve anything with those numbers? Simple: all those add up in the end.

That's all for today! Should you like to know more meaty details of the tech stuff, you can check-out my blog where I get into more practical details about development practices.

Next week we should return to a more classic Dev Diary by our designers, unless you can help me convince Jake to revamp the wine trade good to include grape kinds and soils and finally settle which of the Burgundian or Bordelaise tradition of winemaking is the best.

(*) It's a bit more complicated than that but should be enough for the sake of this diary
 
Last edited:
Thanks so much for your attempts at improving performance. I am an owner on a big mod that adds thousands of provinces (with more to come) and my worst fear is that the game will eventually become unplayable and all the work will be useless.
 
Isn't Play then Exit quite fast ?
I mean I'm sure it's almost instant for me.

I have EU4 installed on a SSD via NVME, so no SATA overhead, and it takes roughly 53 seconds to get to exit to desktop on main menu. This method is annoying slow and a by-product of forcing the restart and is a terrible UI design to start with.

As a comparision, kill task processs EU 4 method takes only 5 seconds at the most. As you can use shortcut to execute it pretty quickly. Ctrl + tab + del, then click down arrow until you are on EU 4 and alt + E (shortcut for right click and press end task).

I am on a high end PC here. Ryzen 1700X, AMD Vega 64, 8 GB of RAM, and SSDs. This has been an issue for as long forcing EU 4 to restart patch on my older PC. So it were worse back then.
 
Dear MatRopert
I am wandering whether there is any chance to make EU4 supporting for more than Latin-1, and any possibility to make EU4 use fonts, not bitmaps nowadays?
We, Chinese and also those Japanese, should have waited for supporting to more than Latin-1 for five years, I wish there could be any possibility to see that.

btw,
if there is any chance to expand the size of world map?EU4 has great limit on expanding the map size. I am interested on it for years.

And more,
if there would be any official tools to make it easy to fill provinces history?I know this should be in need for not only EU4, but also IR group. I wish in one day, this tool could be invented.

thank you for your grand development diary, this is the best dev diary this year until now!I really love your CTD reason finder, and you will save more and more modders!
 
Maybe this has been answered already but I couldn't find anything, so... Is something being done about the "Loading history files" part of the startup taking forever? Every other step of starting the game is fairly quick, but the history files part always takes one or two minutes for me. My computer isn't exactly new but it's not ancient either; 4th gen i5 CPU, 16gb ddr3 RAM and an SSD disk.
 
I have EU4 installed on a SSD via NVME, so no SATA overhead, and it takes roughly 53 seconds to get to exit to desktop on main menu. This method is annoying slow and a by-product of forcing the restart and is a terrible UI design to start with.

Indeed this feels weird... I have an old PC, only thing I have more than you is RAM, rest is way worse (i5 3570k - Radeon HD 7850) and I'm pretty sure I can start and close normally EU4 2 times within 1 minute.
I do agree that this doesn't feel good at all if you need to wait that long.
 
The problem is a bit more complex than MP which is the most easy one to see.

But for instance, let say that income and expense are multithreaded. I could be earning cash but because I spent all my cash on building an army, I have 0 left. Then, if the expense is calculated first, I will need to take a loan, while it would not have been true if I got the income first or if I got both at the same time.

In battle you cannot make one side hit before the other as it would randomly give advantage to one side...
There are a lot of thing that cannot be multithreaded while some are easy and some might be hard but possible.
But that isn't true entirely, one could offload half of eu4 mechanics to one core and the others to another as not everything is tied together and only at the end do they come together, say gold and prestige and other values ought to be able to be run on a seperate core as army routing and battles.

Heck, if even half of ai considerations are run on a different core it shouldn't matter because maybe there would be some lag for decisions of ai, but the player has that as well. So an ai deciding what route to take for armies doesn't need to know how the battle performs.
 
Indeed this feels weird... I have an old PC, only thing I have more than you is RAM, rest is way worse (i5 3570k - Radeon HD 7850) and I'm pretty sure I can start and close normally EU4 2 times within 1 minute.
I do agree that this doesn't feel good at all if you need to wait that long.

Hmm twice as quick? You may be operating on a different OS environment than I am. This test was done on windows 10 64 bit edition. I suspect that history file is the main culprit for this long-loading time.

Correction I do have 16 GB of ram. My bad.
 
On the topic of stealing code from other games, would it be possible to adopt Stellaris's lag handling(i.e just slowing the game while maintaining the same "target speed" rather than decreasing speed) into EU4 (and all other Clausewitz games for that matter)? The speed dropping whenever someone lagspikes rather than the game just temporarily slowing to let them catch up does get annoying.
 
Crash reporter
Secondly, it allows us to add some metadata to the dump, such as the current year, the list of enabled mods or how many 6/6/6 heirs died to a hunting accident, helping us understand what triggered the issue.
Will it help to find "memory leak" problems (or whatever)? I mean problems starting after playing several hours? Like spending some time in modded trade view, selecting provinces in peace deal and then oops... you try to save game, but no existing files shown and trying to save lead to crash without saving of course. And some other crashes on save.
 
So it seems they made the overlay of diagonal lines cross provinces
Dev:
capture.PNG

My current img (yes, it's moved slightly):
unknown.png


Differences:
- Higher def borders
- Extended "occupied" dashes.
- (Maybe) different lake water texture

That's it.

EDIT: Damn, why noone puts spoiler tag in the reply editor, and I have to guess how to write it?
 
Maybe this has been answered already but I couldn't find anything, so... Is something being done about the "Loading history files" part of the startup taking forever? Every other step of starting the game is fairly quick, but the history files part always takes one or two minutes for me. My computer isn't exactly new but it's not ancient either; 4th gen i5 CPU, 16gb ddr3 RAM and an SSD disk.
I take you're playing on Windows? NTFS (the way Windows arrange your files on your disk) is notably bad at accessing a lot of small files (such as our history files).
This is the main reason why Linux and MacOS starts much faster.
An obvious solution would be to put all core data in one big zip file but it's trickier than it sounds.
Will it help to find "memory leak" problems (or whatever)? I mean problems starting after playing several hours? Like spending some time in modded trade view, selecting provinces in peace deal and then oops... you try to save game, but no existing files shown and trying to save lead to crash without saving of course. And some other crashes on save.
I don't recall a problem like this. Did you make a bug report?
Today's crash dumps are already pretty telling on what went wrong.
The tool itself will help for those edge cases where your game crashes but we can't find a reproducible way to trigger it.
 
I tried to most accurately represent the screenshot, here are the differences I found:
  1. Borders are cleaner
  2. Stripes on occupied provinces or in this case, provinces in the HRE owned by non-HRE countries, stripes continue pas the border and doesn't "fade out", instead it continues until the province limits.
  3. Image of country shields at the bottom doesn't "cut" their shadow like they do now:
    shield.png
  4. It seems like the yellow stripes, orange stripes and elector colours are brighter/lighter
  5. You can zoom in further (if I zoom in further right now it angles the map kind off horizontally)
  6. Bigger space between border lines (perhaps they seem smaller because of low quality borders, dunno)
  7. EDIT: Province borders are thinner and cleaner/sharper as well as darker, I think state borders are also darker and sharper
If someone has found anything else, please share!
map.png
 
I tried to most accurately represent the screenshot, here are the differences I found:
  1. Borders are cleaner
  2. Stripes on occupied provinces or in this case, provinces in the HRE owned by non-HRE countries, stripes continue pas the border and doesn't "fade out", instead it continues until the province limits.
  3. Image of country shields at the bottom doesn't "cut" their shadow like they do now: View attachment 470184
  4. It seems like the yellow stripes, orange stripes and elector colours are brighter/lighter
  5. You can zoom in further (if I zoom in further right now it angles the map kind off horizontally)
  6. Bigger space between border lines (perhaps they seem smaller because of low quality borders, dunno)
  7. EDIT: Province borders are thinner and cleaner/sharper as well as darker, I think state borders are also darker and sharper
If someone has found anything else, please share!
View attachment 470176
I might have been a bit confusing here.
When I said "play 7 differences" it's a reference to a french kid game that may or may not translate well.
In this particular image there should be mostly one difference, but maybe you'll spot something I didn't :)