Complete overhaul of the Trade Routes panel, adding several different views and options to filter, sort, and manage them
Message Settings control panel can now be used to customize the behavior of notification types, including pausing the game in single player
Rebindable hotkeys
Individual notification types can now be toggled to automatically pause the game in singleplayer
The Population panel now breaks down Pop Consumption and Taxes by strata
Loyalists and Radicals tooltips now reports which Professions and Interest Groups they can be found in
Convoy balance is now prominently displayed in the top bar (for countries with a coastline)
Certain mapmodes now switch with a (configurable) fading animation rather than instantly
New layout for map interaction panel with minimal buttonification, permitted easier tooltipping and navigation in each entry
New, better performing construction UI element below the time controls to distinguish private from government construction
Journal Entry panel can now display its progress as a progress bar, and display all conditional triggers (success/fail/timeout) as well as the effects that would happen
There is now an Important Action for when a Decision is available for you to take
Map Interaction List layout has been changed to improve tooltip usability
Literacy map mode
Infamy map mode
Global population map mode
Goods in specific markets can now be pinned and tracked in the Outliner
Lens bar icons will now take up the entire width of the screen depending on resolution, rather than always 15 per row
All characters, not just Generals and Admirals, can now be pinned to the Outliner
Production Methods now display a short summary of what they do without having to read the tooltip (inspired by the Visual Methods mod by FUN)
Morale for each side is now displayed on the Battle list item in the Front panel
A more compact variant of the Front map marker is now shown if a side doesn't have any troops there
Diplomatic Action map interaction list now shows a column for "Will Accept" / "Will Accept with Obligation". Inspired by "Deal or No Deal? Diplomatic UI Expanded" mod by Luk_Zloty
Numerous improvements to notifications such as price reports, mobilization, and declared interests to reduce notification spam
Shortcut Ctrl+B now pauses/unpauses the construction queue
It is now possible to see a tooltip breakdown of a side in a battle ended up with the number of initial units they did
C is now a shortcut for the "Confirm" action, such as default event options
Notification Feed items now animate properly and remember their states
Heatmap colors and values have been updated to make them easier to read, especially in states with low concentrations of something (Inspired by "Practical Heatmaps" mod by Ronin Szaky)
State images now include animated visual effects
Control buttons for Main Menu, Vickypedia, Message Settings, and Music Player in the top right corner now have tooltips
Diplomatic Action tooltips now list correct values for any potential income transfers involved in the pact
Institution tooltips now display their actual, scaled effect due to the investment level, not just the per-level values
Buildings under construction are now excluded from Productivity comparisons
The Expand Building map interaction list now display the amount of available Peasants and Unemployed in the state
The 4 most consumed goods are now displayed in Pop Lists (Inspired by "Visible Pop Needs" mod by Apprehensive-Tank213)
Interest Group panel and tooltip now displays their number of Loyalists and Radicals
The Pop's number of Loyalists and Radicals are now displayed in Pop Lists
Details on the Investment Pool is now displayed in the Buildings / Construction tab
The "Map List" is now referred to as "Ledger", and includes a mapmode dropdown
Expand Building map list panel now includes information on state Infrastructure and Labor
Total Pop Size is now displayed on the Overview tab as well as the Economy tab in the Pop panel
Ongoing Naval Battles are now accessible through the War panel
Conscript troops are now illustrated by an image suitable for their Production Methods
When starting a Naval Invasion, the number of Battalions and current Mobilization level is now displayed for each General
The meter on the Battle panel will now more reliably track the progression and predict the outcome of a battle
Currently unavailable Diplomatic Plays are now shown on the country panel in a special section, making it easier to determine why they're unavailable
Expand Building map list panel now display Taxation Capacity instead of Productivity when building Government Administrations
Convoys tooltip now turns into a paged list after 10 items instead of potentially expanding to fill the whole screen
Interest Groups will now show their Approval when pinned to the Outliner
The names of Battle Conditions are now displayed alongside their icons
Clicking the High Tensions alert will now open the Diplomacy interface instead of doing nothing
Total population per strata is now shown on the Population panel and Standard of Living tooltip
Literacy is now tracked over time and can be displayed in a chart
The effects of Turmoil on Construction Efficiency is now more clearly signaled in the Construction Queue
Front panel header now provides a navigational link to its Diplomatic Play even if it has not yet become a War
Attempting to form a low Legitimacy government now produces a warning confirmation box
Demoralized Manpower is now displayed on the Battle panel
Standard of Living Factors tooltip now includes impact from Pop Consumption
Added the Show More button to see the full breakdown of chart legends on the State Population tab as well
Improved explanation for why a state's Market Access is suffering
Improved Bureaucracy Usage tooltip on State and Pop levels
Notification rebalancing to decrease the frequency of the worst offenders
Tooltipping the "Tariffs Paid" value now produces a proper nested tooltip rather than an unlocalized string
The endgame screen is now clearer about the fact that it's possible to continue playing past the end-date
Goods Consumption factors are now added to the reasons for Radicals/Loyalists tooltip
"Involved in conflict" map mode is now switched to be the default only once you have taken a side in a Diplomatic Play
Pop Needs tooltip is now more readable
Generals and Admirals are now more open about which HQ they belong to
Battle tooltips now include Manpower metrics as well as Battalion/Flotilla numbers
The Journal Entry and Player Objectives outliner widgets are now more compact
The Convoy Cost tooltip on the Trade Route item now produces explanatory information when it is zero
Very long player names will now elide properly with a trailing ellipsis in the outliner
Goods tooltip "Go To Details" button will now navigate to the relevant detail panel depending on if a state/market context exist or not
New game concepts for the terms "Popup", "Feed", and "Toast"
Stray newlines are now omitted from Production Method tooltips
Overhaul of Construction Queue related code to optimize performance and improve Autonomous Investments
Optimized country trends to reduce memory usage
Optimized Pop Need caches to reduce memory usage
Optimization of Trade Route map interaction code to eliminate lag spikes
Reworked the Outliner Construction Queue to be considerably faster when many buildings construct at once
Optimized building map markers when constructing buildings in a state with a lot of Turmoil
Optimizations to pollution VFX particle counts
Improved performance when adding new buildings to the bottom of a very large construction queue
Increased the cutoff for what qualifies as a very small pop that should be merged into larger pops for performance reasons
Building Power Plants now cause a representative building model to appear in city hubs
Whaling Stations now have unique Production Method icons
Smoke plumes produced during and after battles have been visually enhanced
The presence of a Mass Migration Target in a state will now increase the number of Horse & Carriages on the roads
Revised table shader for improved lighting, tweaked transition between table and background
Flamethrower VFX is now improved when observing from different camera angles
Korean: Fixed placeholder text in Downsize Building tooltip
Chinese: Ensures tooltip for Interest Group Pop Attraction works even when a different delimiter than colon is used
Polish: typo that caused an unlocalized string to appear is now fixed in REVOLUTIONS_PROGRESS_TOOLTIP
Polish: concept_budget_construction_goods no longer generates errors
Fixed a reference to unlocalized key concept_promoting in the Interest Group tutorial
Fixed a reference to unlocalized key sepoy_mutiny for the war between East India Company and Hindustan
English: fixed a typo in DIPLOMATIC_ACCEPTANCE_NO_CUSTOMS_UNION
Polish: Fixed a missing space in the date string between the weekday and the month
New UI function MakeScope available for all UI types with a corresponding scope type, letting modders add scripted GUIs, access saved variables and modifiers in UI script, etc
Journal Entries can now define scripted buttons with custom triggers and effects
Diplomatic Plays can now be scripted with unique Relations requirements rather than being contingent on the same define
New effect set_ruling_party added
AI Strategies now have improved script comment documentation
References to unlocalized text in GUI script will now throw errors
Building group inheritance has been reworked to ensure overridden settings will always supercede default ones across the hierarchy
There is now a "governments" history step after Interest Group/Party setup but before elections that can be used to more precise political setups
New on-actions: on_secession_start and on_secession_end
Console command "investment_pool" will add money to investment pool
was_formed_from = TAG trigger added to check which country definition a new country was originally
New flag definition for a potential USA formed by Michigan
New script effect set_available_for_autonomous_investment to allow/disallow autonomous investment for certain building types in particular states
Diplomatic Plays can now be scripted with settings on whether starting wargoals should generate Infamy
Added new defines for fine-tuning of casualties caused by manpower vs casualties caused by Offense/Defense
remove_war_goal effect is now allowed to remove the last wargoal from a diplomatic play or war
Tariffs are no longer collected for routes between countries with Trade Agreement pacts
Fixed an issue where re-mobilization of battalions involved in a naval invasion could cause multiple simultaneous landing battles
Countries that cease to exist for unrelated reasons will now be properly removed from wars, ensuring the war will conclude eventually
Characters now perish from natural causes at a more natural pace
Fixed crash that occasionally happened while removing manpower from combat units (CCombatUnit::RemoveManpower)
Countries can now start Diplomatic Plays to Transfer Subject even if their Relations with the subject (rather than the overlord) is too good
Fixed an Out-Of-Sync error in multiplayer related to elections
Fixes an issue where Britain taking a Treaty Port in Great Qing would not properly end the Opium War
States which border each other only by provinces considered Impassable will no longer be treated as adjacent
It is no longer possible to queue up multiple levels of a Canal, Skyscraper, or other single-level building while there is a level already in the queue
Fixed a bug that caused generals to stand by in some cases rather than assign themselves to the new front after having won a naval invasion landing battle
Fixed an Out-Of-Sync error in multiplayer related to Diplomatic Plays
Sway interface will no longer pretend the AI will accept an offer they wouldn't when there is another offer they would
Winning a battle on an ally's front should no longer result in only capturing a single province
Fixed a bug that allowed players to start a Unification Play for a country that had already been formed
Fixed a bug that caused wargoals to not invalidate despite their holder or target no longer existing, resulting in wars continuing with no wargoals
Fixed a bug where if slavery had already been abolished/expanded before the revolution meter hits 100%, the American Civil War would fail to trigger or revolt with the wrong configuration of states
Fixed a bug that caused Generals to go home and Stand By when a front is destroyed but a new one created in the exact same place
Become Protectorate proposals will now work even when one party is a junior in a Customs Union, and will supersede that pact
The game now pauses correctly on the end date even in multiplayer
Fix out-of-bounds charts after switching countries
Fix out-of-bounds charts when viewing other countries
Fix map graphics and name flickering when the Culture map mode is activated
Countries with Slave Trade will now stop importing slaves if there are no available jobs for them to fill
The last Interest Group in government will now never spontaneously leave it under any circumstances
Enacting an Opium Ban as Great Qing no longer removes buildings other than Opium Plantation from the build queue
Highly developed states no longer display GDP incorrectly or with negative values
Overseas battalions with reduced Supply can no longer regain Morale in excess of that Supply score
Countries currently involved in an Independence War will no longer be annexed due to a (minor) Unification
The American Civil War will no longer end with the Union in a never-ending revolutionary state in case of a CSA win
Fixed several hundred land provinces incorrectly marked with Ocean terrain
Mobilized troops now properly demobilize when abandoning a side in a Diplomatic Play by setting your stance back to Neutral
A new ruler assigned via Election will now apply their Traits' country modifiers immediately upon taking office
Fixed a crash related to CPdxDynamicTypeArray
Fixed a crash that could happen when establishing a new trade route immediately after game start
Secessionist radical pops will now properly deradicalize once they have seceded
Fixed a bug that caused GUI elements in a certain part of the screen to become unclickable / unresponsive after one party had backed down from a Play
It is no longer possible to sway members of Customs Unions with the promise of "independence" from it
Fixed a crash related to CPdxRobinHoodTable
The East India Company is now annexed upon its formation of India rather than continuing to exist on the map
Fixed an Out-Of-Sync error in multiplayer related to queueing a new building as a client hotjoins
It should now be possible to gain Achievements available only to particular countries even after having won as a revolution in that country
China now causes Diplomatic Incidents in the home regions of all Christian Great Powers as part of the Heavenly Kingdom event chain, rather than the other way around (all Christian Great Powers causing Diplomatic Incidents in China)
Annexing a country through unification (e.g. the Hudson Bay Company or Columbia District) will now inherit their claims
Overlords that form new nations will now always take any Homelands of the new nation from their Subjects in the process
Make Puppet Diplomatic Play can no longer be used on an independent Major Power or higher
Fixed a bug where the Discrimination modifier to Political Strength was not properly applied in some cases
Buildings panel interface should no longer be a source of crashes
It is no longer possible to Humiliate a country twice in the same war
A subject gained through the Transfer Subject war goal should no longer come with some of their land permanently occupied
Fixed rare crash when validating Production Methods (CBuildingManager::ValidateBuildingProductionMethodsIfNeeded)
Fix an issue with land trade routes being invalidated due to shipping lane effectiveness not taking land trade capacity into account
Fixed the confusing tooltip and excessive script error spamming for decisions to purchase the Suez or Panama Canal rights
A country that has been called into a Diplomatic Play by using an Obligation can no longer decide to abandon the country that called in the Obligation
Production Methods validated by Laws will now be set according to the new Laws if the building changes countries
Peace Treaty notification should now always contain information about the peace deal
Fixed a crash related to country information panels
Fixed a crash related to the battle information panel
Players rejoining a multiplayer game should no longer experience an Out-Of-Sync error related to trade routes
Fixed a bug where war reparations could under some circumstances be applied twice to the same country in the same war
Liberating a Subject that is also inside a Customs Union no longer removes them from the Customs Union rather than release them from their overlord
Transfer Subject Diplomatic Play can no longer be used on Personal Unions
Nation Above Self Journal Entry will now complete if the relevant Interest Groups are either Marginalized or Suppressed, instead of (impossibly) requiring both to be true
Tutorial windows triggered from Journal Entries will now close if their associated Journal Entry is invalidated
Generals can no longer be selected as both advancer and defenders in two separate battles at the same time due to them breaking out on the same tick
Invalid war goals no longer cause war support to freeze at 0
Liberating a Subject of a Subject now makes them independent rather than a Subject of their former Overlord's Overlord
Should Turkey puppet Egypt, they will not get the Veiled Protectorate Journal Entry as this would cause them to worsen Relations with themselves
Fixed a bug that caused Interest Group Approval to go sky-high when close to 0% Clout
It is now possible to mobilize a General despite their HQ being partially occupied
Fixed a crash that could happen when opening the building tab while the Expand Building map interaction was open
Grand Principalities are no longer unfairly excluded from German Unification Journal Entries
It is no longer possible to start to incorporate a colonizing state whose colony growth has been temporarily blocked, e.g. due to a Claim
Fixed a crash when changing Production Methods or constructing new Urban buildings (CRightClickMenuManager::HandleInput)
Fixed crash when rendering some text (NPdxStringUtils::CompareSIMD)
Colonize State Journal Entry in Learn the Game objective has been reworked to be less bug-prone
Colonization interface should no longer be a source of crashes on Mac/Linux
Linux clients should now be able to connect successfully to a multiplayer game hosted on Mac
Fixed a bug that prevented completion of the Pops panel tutorial due to layout changes
Fixed a crash related to spline network graphics rendering
Trigger breakdowns that include an any_scope_state list will no longer assume the scope is always a country
Proposals to become a subject will no longer be denied due to the prospective overlord already having subjects
The "No Effect" Production Method choice is no longer visible for Vatican City unless monument effects are disabled by a game rule
Regaining a sufficient amount of Prestige should now halt the devolution into a lower Power Rank
It is no longer possible to change another market's goods' tariff policies through the context menu
Several nations with pre-existing colonies at game start now have Interests declared to support the growth of those colonies, where they previously did not
Expand the East Indies Administration no longer allows for transferring a State to another Customs Union member's Colony
Average annual wage breakdown in building panel now takes impact of discrimination on wages into account
Hooked in orphaned event to shatter the East India Company if it breaks free from Great Britain (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Impassable provinces can now never be captured in battles, and are excluded from occupation percentage calculations
Several Diplomatic Actions now have proper localized strings rather than unlocalized keys
Mass Migration Target tooltips no longer lies about how long they will remain in effect
Crash Reporter tool should now work correctly on Linux
It is no longer possible to use 'Conquer State' or 'Return State' wargoals on decentralized nations
The Confederate States' Interest Groups now correctly lose their "Supporting an Ongoing Revolution" modifiers after the war is over
Fixed a bug that caused one country to have multiple entries for Release Subject war goal
Requests to join a country's Customs Union are now always passed up the chain to the leader of the Customs Union
Fixed a bug where secessions would not increase the Journal Entry counter towards shattering Qing
If something happens that causes the country targeted for the Improve Relations tutorial challenge to no longer exist, the challenge will now invalidate and restart with a new country
Only slave states will join the CSA in the American Civil War and vice versa (note that unincorporated states such as Florida cannot join a revolution)
Interest Group leaders retiring from political life will no longer be accompanied by a notification claiming they've died
Japanese heirs created via event will no longer spawn with negative age
Taiping Rebellion Diplomatic Play no longer generates Infamy for either side
The Goods navigation link in the notification for Significant Trade Route is no longer broken
"Improve Market Access by Decree" tutorial challenge now requires you to issue the decree in the specified state in order to complete
Legitimacy prediction when forming a new government should now be accurate even when the change involves changing to a new Head of State
It is no longer possible to abuse the "Expand the East Indies Administration" Journal Entry to instantly colonize all of Indonesia
Fixed an issue where historical tariff settings were cleared during initialization
You can no longer become a Protectorate of a country you are opposing in a Diplomatic Play or war
The scroll bar no longer overlaps the text in the Diplomatic Play confirmation window
Poppydock achievement is now triggered by having a level 8 port instead of 8 different ports as intended
Production Methods invalidated by Law changes will now reset immediately upon law enactment
Fix an instance of territory remaining painted with occupation flags after the war has ended
Fixed a crash related to using hotkeys to open lenses
The tooltip for expanding Barracks or Naval Bases will no longer display empty troop allocation change sections
Switching government type should no longer cause Market Access to mysteriously drop to zero
Front Health prediction no longer displays nonsense information if no Generals are present on the Front at all
Land Battle markers should no longer get mixed up for Naval Battle markers and vice versa
Metropolitan Police no longer (falsely) claims it needs Turmoil to be exactly 20% to complete
Reading Campaign achievement now requires 95% literacy or higher, rather than exactly 95% literacy
Power of the Purse naval theory Production Method no longer feature doubled Morale Loss modifiers
A garrisoned battalion can no longer be made to defend in two battles on different fronts simultaneously
Fixed crash when starting a new game related to AccessPlayableCountry UI function
Revolutionary country in the American Civil War will no longer get a generic revolt name instead of their historical name
Fixed an instance of endless recursion in the modifier_building_subsistence_output_mult_desc localization key
Characters already leading expeditions are now excluded from being chosen to lead another expedition
"Manifest Mexico" Achievement is now only possible for Mexico
The Treaty Port in Ceylon is no longer scripted to be on impassable terrain
Government Type concept tooltip trigger breakdown no longer spews error strings when explaining why the player's current government type is active
Recruiting a new commander will no longer display a notification about them moving to the NULL_OBJ HQ
Take on Debt Diplomatic Action will no longer erroneously show a country will accept if you offer an Obligation, as this is not a valid option for this action
Fixed an error in text of "Slavery and Colonial Labor" that was causing error log spam
Issue Decree map list now lists the predicted Authority cost rather than the current cost (which is usually 0)
State regions that are homelands for more than one of your country's primary cultures will no longer be listed repeatedly on the Unification panel
Fixed a bug where the 'Revoke All Claims' wargoal would immediately invalidate in secessions
Oscar Wilde no longer vanishes with the dawning of a new day, as he has now been relegated to the Void for sufficient time for his event to conclude
Market map icon and its tooltip no longer flicker when hovering them
Goods price tooltip should now show up correctly even in isolated markets (fixes GOODS_PRICE_DESC_IN_ISOLATED_MARKET)
Typing space in the console will no longer pause or unpause the game
Added missing heir titles for Zaidi Imamate (fixes HEIR_TITLE_DEFAULT)
Command Economy no longer has itself as a disallowing law (cosmetic bug only)
Momentum now has a proper tooltip
Diplomatic Play scope is now passed to on_sway_offer_rejected on-action rather than country scope
Investment Pool tutorial Journal Entry is now disabled while using the Autonomous Investment game rule
Fixed an issue where the number of battalions on a Front may have an outdated cached value
Fixed a UI caching issue where a character's traits may be shown on a different character
add_religion_standard_of_living_modifier effect now has a proper effect description rather than an unlocalized string
Fixed a cosmetic bug that caused Initial War Support to be listed as 0 instead of 100 in tooltips
Expiring Obligations pop-up no longer references yourself instead of the country with the Obligation
Total Amount of Flotillas tooltip will no longer show unlocalized DIPLO_PLAY_COUNTRY_WARSHIPS_BREAKDOWN key
It should no longer be possible to put Fishing Wharves into a state where no Ownership Production Method is valid
Law Enactment checkpoint toasts no longer claims the law has "advanced" if it has made no progress or regressed
Treaty Port in Chiapas moved to a province that's actually inside state borders
Haitian Independent Payments to France now cease if Haiti no longer exists
Total Weekly (Bureaucracy) Cost tooltip will no longer show unlocalized TOTAL_INSTITUTION_INVESTMENT_LEVELS key
Event "Do You Hear That Too" can no longer occur in NULL_STATE
Fixed a script bug that made it impossible to get the Death from Below Battle Condition
Hudson Bay Company no longer loses its Claim on Alberta after a month
The Decision to "Cancel the Suez Canal Survey" now becomes unavailable after the survey concludes
Hawai'is Ali'i Nui and government type no longer generates error text in tooltips
Unlocalized string "ECONOMIC_SYSTEM_LAW_GROUP" across several game concept tooltips has now been corrected
Fixed typo in Change to Our Customs Union tooltip
Unlocalized string "WARSHIPS_TOTAL" in building tooltips has now been corrected
Fixed a few typos in "Expand the Military" tutorial challenge text
Fixed naming for FSA to match naming for CSA in triggers, and ensures it is set immediately instead of only after the player has clicked the event
Phew!
We're very happy with how Update 1.2 turned out and hope you will be too! We have our amazing beta testers and passionate community mod creators to thank for a lot of it, this update wouldn't have been nearly as balanced and stable as it is if it weren't for all of you. As always we'd love to continue to hear your feedback and make sure to let us know if you run into any other bugs so we can continue to bang the pipes and tune the gears of the game!
After the release of Update 1.2 dev diaries are going to go dark for a couple of weeks or so, but we will be back soon enough with more on what is coming up for Victoria 3 in the near future! Until then!
Dev Diary #78 - Update 1.2 changelog Part 1
Hello and welcome! Today I will be going through, or perhaps more accurately infodumping, everything that has happened for Update 1.2. Many of you will have already experienced 1.2 in our Open Beta and will recognize many of these new features, improvements, and bug fixes, but there's a substantial number of things in here that were not in any of the three beta releases (or which were too niche for most to notice), so I expect that even beta players will find a few gems in here!
The planned release date for the update is Monday March 13th, at 10:00 Central European Time. Our testing shows a promising amount of compatibility with savegames created on 1.1.2, but as usual we cannot guarantee flawless compatibility between versions, so for safety we recommend you start a new campaign on the new build. We will of course backup the old 1.1.2 version as a Steam beta branch which you can rollback to if needed (e.g. for mod compatibility).
It is worth noting that this changelog reflects only the changes between 1.1.2 and 1.2.3 (which will be the release version of 1.2), and interim changes between beta releases are omitted to avoid confusion. In practice this means that if you experienced a bug or balance problem in a feature new to the beta build, this document won't explain whether it's been fixed or not.
If you're looking for more detail on the biggest changes coming to 1.2, take a look atourpreviousdevdiaries.
Now, without further ado…
Autonomous Investment: when the game rule is enabled, Pops will automatically start new private construction projects based on available funds in Investment Pool
Buildings can now have Government Shares, which will pay money (or subtract losses) directly into the treasury relative to building profits and government ownership share
The investment pool is now disabled under Command Economy. When Command Economy is enacted, all funds in the investment pool are seized for the treasury and all private construction projects are turned into government construction projects.
Added new economic law Cooperative Ownership, which requires Council Republic and now unlocks Workers' Co-ops production methods instead of Council Republic doing so directly
Strategic Objectives that can be designated by the player, encouraging Generals to capture specific states
Command Economy now makes it so all private sector buildings have only government shares, and only pay out government dividends
In-Game Music Player
Defeating a Native Uprising no longer instantly annexes them, but instead creates a Colonization Rights pact which speeds up colonization of that country for 5 years
New Lens interaction and context menu options to reset the Production Methods of a state, building, or building type to national standards
New Journal Entry, Decisions, and events pertaining to Russo-Chinese Border conflicts, the Beijing Treaty, and the Chuguchak Protocol
Complete overhaul of the Taiping Rebellion / Heavenly Kingdom event chain, including a new Journal Entry and event, a custom government form, historical characters, unique Interest Groups, new law setup, and plenty of fixes and balance changes
Markets now have a Land Trade Capacity, which allows trade routes between adjacent markets to trade a limited number of goods without needing to use convoys
Trade Routes now trade using market price, rather than a computed difference between pre- and post-trade prices. Trade routes now cannot be profitable unless the price is lower in the exporting market than in the importing market.
Secondary war goals added in a Diplomatic Play can now be locked in at the cost of Infamy and Maneuvers, causing them to be yielded if the target backs down
Numerous improvements to battle initiation, including picking which units should be involved and how many units each side can bring
It is no longer possible to colonize a state where another country both has a claim and maintains an interest, unless you also have a claim there
Several claims have been added to colonizable regions where other powers should not be able to start colonies, such as Hokkaido for Japan
Worldwide rebalancing of Arable Land, with land generally reduced in Europe/Asia and generally increased in the Americas
When a Native Uprising starts, they now only get conquer wargoals on states in state regions where the Native country owns land, instead of all adjacent states
We now print a list of any missing DLC or mods when attempting to load a game, but let you try to load the game anyway
Low Legitimacy is now communicated through an Alert (or an Important Action, depending on the severity)
Added a Game Rule for whether Investment Pool is autonomously used by pops or directly controlled by the country
Interest Groups are now much more likely to spread out across multiple available parties, reducing the risk of ideological incoherence within parties
Maintaining additional Convoys in excess of what is needed now provides a bonus to Trade Route Competitiveness
Unrecognized Powers now get a special Journal Entry for becoming Recognized during the Hegemon objective
Colonial Clash event now triggers considerably less aggressively
Notifications can now be dismissed in Observer mode
Naval Invasions are no longer limited to using Admirals and Generals from the same HQ, but can use Generals from any HQ with coastal access
If a front is resolved, any Generals at that front will now only automatically reassign themselves to a nearby front if it will take at most 30 days to reach it. In case of travel durations longer than that, the General will instead Stand By in their current location
Battles currently in progress no longer get manpower reinforcements from newly trained servicemen. Reinforcements will arrive once the battalions leave their current battle.
Battle Conditions now have a chance to update after having been active for several days, ensuring the tides can turn during battles
The Offense/Defense bonus enjoyed by Colonial Uprisings has been halved
You now get to choose to recruit one of 3 (instead of 2) Generals and Admirals
Certain Diplomatic Plays such as Annex Subject are no longer blocked by having too good Relations with the target
Interest Groups will no longer forget all about slavery as soon as it's abolished, but will retain their former ideals for some time
New Alert for when a country does not produce enough construction to fully utilize the money coming into its investment pool
Farmers and Shopkeepers now reinvest a small portion of their earned dividends into the Investment Pool
Only slave states can now revolt with the Confederate States of America, and only free states with the Free States of America
When the American Civil War breaks out, USA now gets claims on all states of the seceding country, and the seceding country gets a Revoke All Claims wargoal
Unincorporated states now cost less Infamy and Maneuvers to claim than incorporated ones
Reduced Fertilizer production from Intensive Grazing Ranches
The most powerful Interest Group in a party is now considered the Party Whip, letting them moderate the impact of ideological incoherence among groups that do not agree with them
GDP is now measured by subtracting the cost of input goods used in manufacturing, which is more true to life and doesn't unfairly rewards manufacturing economies over resource economies
Buildings will now raise wages only if they have considerable profits and they have employees below minimum expected Standard of Living, or if they have reasonable profits, are trying to compete for labor, and have <50% employment
Buildings will now lower wages or lay off employees if they are running a deficit and have <50% cash reserves, or if they have minimal profits and employees have a Standard of Living >33% above the minimum expected standard
Generals will now be more aggressive and consistent about pursuing war goals, even when those war goals are far away
Improved national dissolution events for China and India
Revolutionary or Seceding countries are no longer able to engage in Colonization, as this would cause orphaned colonies upon their destruction
Auto-Expand trigger conditions have been altered to ensure very expensive buildings don't block new buildings from being added
First Aid Production Method now requires Liquor and Fabric rather than Opium, while Opium is only required by Field Hospitals PM
When a country splits due to a revolution, any gold reserves or debt it has will be split between them in accordance with GDP. When one country annexes another in a revolution, gold reserves / debt will be recombined.
It is now possible to use the Take Treaty Port wargoal on a treaty port where you already own part of the state even if the holder is of higher or equal power rank
Earnings prediction when expanding buildings has been made less confusing by only displaying the earnings of the prospective level and ensuring Economy of Scale is factored in
Serfdom now reduces the amount of Infrastructure states get from their population
Junior countries in a Customs Union will now get Trade Centers for their own trade routes
Investment Pool contribution balance revisions to ensure the pool can be relevant for all countries and to not radicalize investors when they increase their investments
Command Economy now requires Autocracy or Oligarchy to enact
Postal Savings technology now increases the efficiency of Shopkeeper and Farmer investment
Council Republic now increases the Clout of the Trade Unions instead of the Political Strength of Farmers and Machinists
If the outcome of a battle would result in a tiny pocket with its own irrelevant front, it will be handed over to the winner instead, reducing the number of fronts created in wars overall
Rebalanced employment numbers, trade volume and economy of scale for Trade Routes to work better with market price trading
Added a warning for negative productivity trade routes
Improved overall profitability of Vineyards
Laissez-Faire now disallows any downsizing of private sector buildings
Unacceptable legitimacy level now slow down the enactment of laws
Righteous legitimacy level now impact enactment speed a bit less
Mass migration targets are now selected in two steps, first country then state, increasing the reliability of migration waves to the new world
Mass migration targets are now established by culture + country rather than culture only
Mass migration should now only occur from states considered homelands for that culture
Mass migration target limits based on cultural turmoil removed, replaced by a cooldown per culture + country pair from a specific country
Limited emigration to a percentage of the state's population + a percentage of unemployed Pops in the state each week
Adjusted some countries' cultural tolerance setup to encourage more new world migration
The Competitiveness of a trade route now increases the longer it's been established, making it harder for new routes to compete on limited supply
Rebalanced pop growth, including secondary factors like dangerous working conditions, to achieve stronger and more historically accurate compound pop growth
War Exhaustion from occupation now scales in a non-linear fashion against the amount of territory occupied, so that occupying just a small portion of a country now does not have much impact but fully occupying them still has a huge impact
Provinces are now selected for new battles according to more relevant parameters (e.g. distance to war goal)
Particularly severe goods shortages are now signaled to the player as Alerts rather than Important Actions
Italian and German flags now look different depending on which country formed them
Slower tech progression but with tech boosts from Journal Entries and events (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
It is now possible to take Treaty Ports from Isolationist countries and trade with their market if you hold such a port
War Exhaustion from casualties is now scaled off military size rather than population size and increases by the relative amount of battles lost by a country's side of the wa
Colonizable Pacific Islands now have the Severe Malaria trait to discourage early colonization
Western Australia, New South Wales and Japan now start with Colonial Resettlement
Anarchism now requires the Cooperative Ownership economic law to be enacted, and disables all other economic laws
Interest Groups with a Slaver leader are now virtually guaranteed to join the Democrat Party while the 'Great Slavery Debate' journal entry is active
Interest Groups with an Abolitionist leader are now virtually guaranteed to join the Republican Party while the 'Great Slavery Debate' journal entry is active
Missouri Compromise now also gives additional voting power to Aristocrats and Farmers
Each level of Trade Route now generates a base number of Trade Center levels, and then one additional Trade Center per level, in order to better balance against sharper decline in per-unit profit from market price trading
"Protect Domestic Industry" tariff focus now gives a greater increase in export tariffs
"Encourage Exports" tariff focus now gives a greater increase in import tariffs
Very unhealthy characters may now die young
Industrial Barriers event has been rewritten to be more balanced and engaging
Music track now resets when exiting the game to the Main Menu
Command Economy no longer enforces mandatory subsidies, since deficits are covered by the treasury due to government shares anyway
Buildings will no longer raise wages to attract new employees if no qualifying employees exist
Increased radicals from being below minimum Standard of Living (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Poor pops are now more politically engaged at high literacy (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
It is now possible to use "Revoke Claim" war goal to revoke claims that are not on your own states, e.g. colonial claims
Workers in unincorporated states are now generally paid lower wages, especially if they are discriminated and/or you have the 'Colonial Exploitation' law
Decentralized Nations no longer have Serfdom law active by default
"Independence" war goal now only requires you to hold your own capital in order to contest the war goal, rather than having to occupy your former overlord's capital
Console command "tweak debugworldpopulation" can now be used to log many interesting annual global statistics as .csv and Elasticsearch data
Agrarianism now allows whaling, fishing, logging and rubber plantations to be funded by the investment pool when using Directly Controlled Investment game rule
All workforce pops in Worker Co-ops now have an equal ownership share
Defeating the Shogunate in a Civil War will now complete the Meiji Restoration
Trade Routes will now always increase their size so long as they can maintain at least £10 productivity, and always decrease their size if they are unable to maintain at least £3 productivity
Markets are now considered adjacent if they have any land adjacency, not just if their capital areas are adjacent
Improved balance for Political Movement start chances
High and Very High taxation levels now slightly reduce the Pop attraction of the Interest Groups in power
Revolutionary uprisings now select their participating states with more precision
Changed completion conditions for the Declare Interest tutorial to lower the barrier for low-Prestige countries
Conscript troops and standing armies now have the same statistics when the same Production Methods are active
Whaling Stations now have a Simple Whaling Production Method that produces mostly Meat
Whaling Stations and Fishing Wharves now have Ownership Production Methods that are better aligned with other Resource industries
Arms Industries and Munition Plants now have Automation Production Methods
Indus Valley and Good Soil state traits now also include bonuses for Plantations
USA gets a claim on Texas from Manifest Destiny (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Construction Industries now have increased Laborer mortality (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Arc Welded Construction is now less efficient (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Rebalanced Radical gain in Subsistence buildings due to Expected Standard of Living
It is now much rarer to get an Obligation from Bankrolling a country
Russia now starts with Propertied Women law instead of Legal Guardianship
Party leader Popularity now has a much lower impact on Election Momentum
Decision to convert Japan to Shintoism now requires a less restrictive Church & State Law, and when taken, will instantly convert 40% of pops in the capital + 20% of all Japanese pops nationwide
Road Maintenance Decree now provides a boost to "Infrastructure from Population" instead of flat Infrastructure
Pops will no longer mass migrate away from a state to such an extent that it completely empties out all non-slave pops
Increased casualties generated by Offense/Defense compared to manpower
Reduced the throughput penalty Decentralized Nations are subjected to from 30% to 10%
If slavery is abolished and a civil war is then launched to restore it, the pro-slavery rebels will now re-enslave discriminated laborers working in agricultural buildings in former slave states instead of just accepting de facto abolition
Rebalanced start conditions to ensure several countries no longer start with negative weekly income
Subsistence buildings can now have the Government Run Production Method
Andrew Jackson now starts the game with Slaver ideology
Britain now starts the game with more agriculture and textile industries
Russia now starts the game with even more agriculture in Ukraine
Calling in a country to a Play by using an Obligation now costs 10 Maneuvers instead of 20
Rebalanced number of provinces conquered in battles
USA event option that annexes the Indian Territory will no longer be selected by the AI if the Indian Territory is controlled by a human player
The Suez and Panama Canal surveys now take less time to complete
All releaseable countries (e.g. Sudan, Inca) are now centralized
Transcaucasia is now a recognized rather than unrecognized nation
Ottomans now start with Line Infantry tech and some barracks with it active (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Ottomans now start with a longer truce with Egypt (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Tanzimat: Army Reform no longer requires expanding the army to 250 units, only 150 (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Germany & Italy now get a bunch of claims on unowned states when formed (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Heavenly Kingdom event will now trigger at Standard of Living <10 instead of <7 (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Bolivian event option that annexes Peru will no longer be selected by the AI if Peru is controlled by a human player
Improve Rank tutorial is now adapted to not auto-complete for Unrecognized countries
Tanzimat: Literacy requirement reduced from 35% to 20%
Very small pops that would otherwise be merged into larger pops will now remain intact if they are likely to have recently arrived to their state via migration
Western Australia now has a Claim on New Zealand instead of on New South Wales
Clicking on either the Unhealthy Economy or Stockpiling Gold Important Actions will now open the Budget panel
FMOD audio middleware updated to 2.02.03
Lower effect of Standard of Living on Qing for opium obsession, and higher for having lost opium wars (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Reformed Mughal is now Muslim (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
India doesn't get any Iranian cultures as primary (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Britain now starts with additional Declared Interests
"Visitors from Colonies" event now has a longer cooldown before it can reoccur
Colonization of a claimed state will not be blocked if the country with the claim can't reach the state
English: fixed a broken reference to concept_subsidizing in Trade Route tooltip
No more Scottish people in India at game start (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
British Gambia now starts with a Port, ensuring it's not isolated from the British market
AI will now never remove the last level of port in a state
AI will now refrain from constructing more ports than it could support financially
AI "Bravery" is now renamed to "Recklessness"
AI will now better balance its forces between defending home HQs and sending troops to overseas fronts
Technologies now have scripted AI weights to fine-tune the AI's decision making when selecting new research
High Recklessness will now cause the AI to overestimate its military strength in Diplomatic Plays, thereby increasing Confidence
AI is better at responding to political movements (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
AI is now less likely to back down in diplomatic plays where there are numerous primary demands arrayed against them, especially if they will be annexed on backing down
Tweaked unification AI strategies to make the AI better at using the journal entry systems to absorb minor countries
AI will no longer downsize government buildings while in a civil war
AI will now hire enough Generals to effectively garrison their HQs (e.g. to repel naval invasions)
Ensured wars between AI countries do not stall due to neither side ordering their generals to advance
AI is more keen to do reforms to avoid civil war, especially if a subject (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
AI now values institution spending higher and in accordance with its Strategies
Improved AI's ability to manage Infrastructure levels across their market
Improved AI's ability to reform its government to maintain reasonable Legitimacy levels
AI will now handle their Generals better, ensuring they are assigned to advance or defend fronts as is appropriate
Adding more primary demands now increases sympathy for opposing side
AI now sets tariff policies on goods according to their interests
AI should no longer offer or accept a white peace when the odds are overwhelmingly in their favor
AI now values the war goal of revoking Treaty Ports more consistently in Diplomatic Plays
AI no longer gets stuck in a spiral of low infrastructure due to underemployed railways
AI is now better at prioritizing construction and usage of Logging Camps
AI will not try to form Germany/Italy until they have nationalism (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
AI, including the Autonomous Investment AI, now correctly assesses the effects of Economy of Scale when determining where to expand a building
Countries will now tend to maintain Generals on stand-by in important coastal HQs to protect from naval invasions
A revolutionary country that has already won the revolution will now be willing to make a white peace with remaining countries in the war
AI is now less likely to take sides in diplomatic plays without a good reason to do so
Fixed a bug that was causing DIPLO_PLAY_BOLDNESS_WEAK_ARMY_FACTOR not to be included in the calculations, AI should now be more likely to back down and less likely to intervene in plays if their own army is very weak
Reduced the overall aggression levels of the AI, as it was overtuned to compensate for (now fixed) bugs listed below
AI is now more aggressive against ideological enemies, and a bit less aggressive against ideological allies
AI is now generally better at constructing peace deals that might end up ceding wargoals to both sides
AI now has an improved understanding of which wargoals are more important than others to press and not have pressed on themselves
AI is now less random about who it has sympathy for in a Diplomatic Play, and more inclined to support allies and subjects
Fixes a bug where AI was miscalculating countries that are likely to declare neutrality as potential enemies, causing it to be far too passive with starting plays in regions with a lot of interests
AI is now less inclined to overbuild railroads in states that have free infrastructure
Fixed a bug where AI Generals were getting stuck on fronts
AI should no longer get into a state where it constantly moves generals back and forth between fronts
AI is now better at understanding how lucrative Gold Mines are
The AI must now wait for a cooldown period before resending an offer the player rejected
Fixed a bug that caused AI peace desire from military strength to be reversed
Fixed reversed check in achievable wargoals that was causing a country that was winning to peace out too early
Fixed a bug where the AI did not understand that potential allies may not be able to join them due to truces and launched potentially suicidal plays as a result
Fixed a bug where allies of the initiator could sometimes ignore truces with the target
AI now looks at the relative power of the two sides' militaries when deciding how much it wants to make peace
AI will now never abandon allies and subjects in diplomatic plays where they're not actually at risk due to very weak enemies, etc
AI should now understand Construction Efficiency maluses better and use this knowledge while queueing new constructions
AI is now much more interested in using Automation methods, particularly when the cost of the needed goods is low
AI should now be unwilling to invest in ports if it already has a lot of free convoys and the port wouldn't connect any new states to its market
Fixed an inconsistency in AI memories where sometimes it was tracking time by days and other times months
Fixed an issue where Generals standing by in non-home HQs were considered to be garrisoning their home HQ
AI now completes expeditions more regularly
AI now places higher importance on conquering land-adjacent states
AI is now more aggressive against Council Republics if they are themselves not a Council Republic
AI is now more aggressive against countries with radical economic laws (Worker’s Co-ops and Command Economy) if they themselves do not have a radical economic law
AI values obligations from irrelevant countries less (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Russia is better at expanding in Central Asia (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
AI should now be better at establishing Electrics Industries in the mid-game
AI may now choose event option with AI weight 0 as a fallback if all other options are disabled due to failed trigger
AI is now less willing to agree to peace if there are wargoals their side is likely to achieve through capitulation that aren't part of the peace
Increase AI's tendency to be neutral in native uprisings
"Powerful Protectors" diplomatic approval malus is no longer applied when the powerful protector is the country making the offer
USA is now much more keen to map the western frontier (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Italian minors are more aggressive about pursuing unification (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
AI will no longer demand Treaty Ports or Open Market war goals from countries in their own market
AI will no longer demand an Open Market if they already have or are demanding a Treaty Port of the country in the same Play
AI now considers plentiful gold reserves to be less important for deciding when to peace out
Fixed a bug that made the AI reluctant to side against secessions due to risk of spreading when they should actually be reluctant to side with them
European Powers will not take full states in China while Fragile Unity is active unless another European Power has already done so (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
British India will not rebel, to avoid being shattered (from "Open Beta Tweaks" mod by One Proud Bavarian and Doodlez)
Increased Britain's recklessness in the Opium Wars a bit
Continued in Part 2!
Dev Diary #76 - Performance
Hello and welcome to this week's Victoria 3 dev diary. This time we will be talking a bit about performance and how the game works under the hood. It will get somewhat detailed along the way and if you are mostly interested in what has improved in 1.2 then you can find that towards the end.
For those of you who don’t know me, my name is Emil and I’ve been at Paradox since 2018. I joined the Victoria 3 team as Tech Lead back in 2020 having previously been working in the same role on other projects.
What is performance
It’s hard to talk about performance without first having some understanding of what we mean by it. For many games it is mostly about how high fps you can get without having to turn the graphics settings down too far. But with simulation heavy games like the ones we make at PDS another aspect comes into play. Namely tick speed. This metric is not as consistently named across the games industry as fps is, but you might be familiar with the names Ticks Per Second or Updates Per Second from some other games. Here I will instead be using the inverse metric, or how long a tick takes on average to complete in either seconds or milliseconds. Some graphs will be from debug builds and some from release builds, so numbers might not always be directly comparable.
What exactly a tick means in terms of in game time varies a bit. In CK3 and EU4 a tick is a single day, while on HOI4 it's just one hour. For Victoria 3 a tick is six hours, or a quarter of a day. Not all ticks are equal though. Some work might not need to happen as often as others, so we divide the ticks into categories. On Victoria 3 we have yearly, monthly, weekly, daily, and (regular) ticks.
If you thought 1.1 was slow you should have seen the game a year before release…
Content of a tick
Victoria 3 is very simulation driven and as such there is a lot of work that needs to happen in the tick. To keep the code organized we have our tick broken down into what we call tick tasks. A tick task is a distinct set of operations to perform on the gamestate along with information on how often it should happen and what other tick tasks it depends on before it is allowed to run.
An overview of some of the tick tasks in the game. Available with the console command TickTask.Graph.
Many of the tick tasks are small things just updating one or a few values. On the other hand some of them are quite massive. Depending on how often they run and what game objects they operate on their impact on the game speed will vary. One of the most expensive things in the game is the employment update, followed by the pop need cache update and the modifier update.
Top ten most expensive tick tasks in our nightly tests as of Feb 15. Numbers in seconds averaged from multiple runs using a debug build.
As you can see from the graph above many of our most expensive tick tasks are run on a weekly basis. This combined with the fact that a weekly tick also includes all daily and tickly tick tasks means it usually ends up taking quite long. So let’s dive a bit deeper into what’s going on during a weekly tick. To do this we can use a profiler. One of the profilers we use here at PDS is Optick which is an open source profiler targeted mainly at game development.
Optick capture of a weekly tick around 1890 in a release build.
There’s a lot going on in the screenshot above so let’s break it down a bit. On the left you see the name of the threads we are looking at. First you have the Network/Session thread which is the main thread for the game logic. It’s responsible for running the simulation and acting on player commands. Then we have the primary task threads. The number will vary from machine to machine as the engine will create a different number of task threads depending on how many cores your cpu has. Here I have artificially limited it to eight to make things more readable. Task threads are responsible for doing work that can be parallelized. Then we have the Main Thread. This is the initial thread created by the operating system when the game starts and it is responsible for handling the interface and graphics updates. Then we have the Render Thread which does the actual rendering, and finally we have the secondary task threads. These are similar to the primary ones, but are generally responsible for non game logic things like helping out with the graphics update or with saving the game.
All the colored boxes with text in them are different parts of the code that we’ve deemed interesting enough to have it show up in the profiler. If we want an even more in depth we could instead use a different profiler like Superluminal or VTune which would allow us to look directly at function level or even assembly.
The pink bars indicate a thread is waiting for something. For the task threads this usually means they are waiting for more work, while for the session thread it usually means it is blocked from modifying the game state because the interface or graphics updates need to read from it.
When looking at tick speed we are mostly interested in the session thread and the primary task threads. I’ve expanded the session thread here so we can see what is going on in the weekly tick. There are some things that stand out here.
First we have the commonly occurring red CScopedGameStateRelease blocks. These are when we need to take a break from updating to let the interface and graphics read the data it needs in order to keep rendering at as close to 60 fps as possible. This can’t happen anywhere though, it’s limited to in between tick tasks or between certain steps inside the tick tasks. This is in order to guarantee data consistency so the interface doesn’t fetch data when say just half the country budget has been updated.
The next thing that stands out is again the UpdateEmployment tick task just as seen in the graph above. Here we get a bit more information though. Just at a glance we can see it’s split into (at least) two parts. One parallel and one serial. Ideally we want all work to be done in parallel because that allows us to better utilize modern cpus. Unfortunately not all of the things going on during employment can be done in parallel because it needs to do global operations like creating and destroying pop objects and executing script. So we’ve broken out as much as possible into a parallel pre-step to reduce the serial part as much as possible. There is actually a third step in between here that can’t be seen because it’s too quick, but in order to avoid issues with parallel execution order causing out of syncs between game clients in multiplayer games we have a sorting step in between.
Closer look at the UpdateEmployment tick task.
Modifiers are slow
One concept that’s common throughout PDS games is modifiers and Victoria 3 is no exception. Quite the opposite. Compared to CK3 our modifier setup is about an order of magnitude more complex. In order to manage this we use a system similar to Stellaris which we call modifier nodes. In essence it’s a dependency management system that allows us to flag modifiers as dirty and only recalculate it and the other modifiers that depend on it. This is quite beneficial as recalculating a modifier is somewhat expensive.
However, this system used to be very single threaded which meant a large part of our tick was still spent updating modifiers. If you look at the graph at the top of this dev diary you can see that performance improved quite rapidly during early 2022. One of the main contributors to this was the parallelization of the modifier node calculations. Since we know which nodes depend on which we can make sure to divide the nodes into batches where each batch only depends on previous batches.
Closer look at the RecalculateModifierNodes tick task.
Countries come in all sizes
A lot of the work going on in a tick needs to be done for every country in the world. But with the massive difference in scale between a small country like Luxembourg and a large one like Russia some operations are going to sometimes take more than a hundred times as long for one country compared to another. When you do things serially this doesn’t really matter because all the work needs to happen and it doesn’t really matter which one you do first. But when we start parallelizing things we can run into an issue where too many of the larger countries end up on the same thread. This means that after all the threads are done with their work we still have to wait for this last thread to finish. In order to get around this we came up with a system where tick tasks can specify a heuristic cost for each part of the update. This then allows us to identify parts that stand out by checking the standard deviation of the expected computation time and schedule them separately.
One place where this makes a large difference is the country budget update. Not having say China, Russia, and Great Britain all update on the same thread significantly reduces the time needed for the budget update.
(And this is also why the game runs slower during your world conquest playthroughs!)
Closer look at the WeeklyCountryBudgetUpdateParallel tick task. Note the Expensive vs Affordable jobs.
Improvements in 1.2
I’m going to guess that this is the part most of you are interested in. There have been many improvements both large and small.
If you’ve paid attention to the open beta so far you might have noticed some interface changes relating to the construction queue. With how many people play the game the queue can end up quite large. Unfortunately the old interface here was using a widget type that needs to compute the size of all its elements to properly layout them. Including the elements not visible on screen.
New construction queue interface.
To compound this issue even further the queued constructions had a lot of dependencies on each other in order to compute things like time until completion and similar. This too has been addressed and should be available in today’s beta build.
Side by side comparison of old vs new construction queue.
One big improvement to tick speed is a consequence of changes we’ve done to our graphics update. Later in the game updating the map could sometimes end up taking a lot of time which then in turn led to the game logic having to wait a lot for the graphics update. There’s been both engine improvements and changes to our game side code here to reduce the time needed for the graphics update. Some things here include improving the threading of the map name update, optimizing the air entity update, and reducing the work needed to find out where buildings should show up in the city graphics.
Graphics update before/after optimization.
As we talked about above, the employment update has a significant impact on performance. This is very strongly correlated with the number of pops in the game. As in the number of objects, not the total population. Especially in late game you could end up with large amounts of tiny pops which would make the employment update extremely slow. To alleviate this design has tweaked how aggressively the game merges small pops which should improve late game performance. For modders this can be changed with the POP_MERGE_MAX_WORKFORCE and POP_MERGE_MIN_NUM_POPS_SAME_PROFESSION defines.
Another improvement we’ve done for 1.2 is replacing how we do memory allocation in Clausewitz. While we’ve always had dedicated allocators for special cases (pool allocators, game object “databases”, etc) there were still a lot of allocations ending up with the default allocator which just deferred to the operating system. And especially on Windows this can be slow. To solve this we now make use of a library called mimalloc. It’s a very performant memory allocator library and basically a drop in replacement for the functionality provided by the operating system. It’s already being used by other large engines such as Unreal Engine. While not as significant as the two things above, it did make the game run around 4% faster when measured over a year about two thirds into the timeline. And since it’s an engine improvement you can likely see it in CK3 as well some time in the future.
In addition to these larger changes there’s also been many small improvements that together add up to a lot. All in all the game should be noticeably faster in 1.2 compared to 1.1 as you can see in the graph below. Unfortunately the 1.1 overnight tests weren’t as stable as 1.2 so for the sake of clarity I cut the graph off at 1871, but in general the performance improvements in 1.2 are even more noticeable in the late game.
Year by year comparison of tick times between 1.1 and 1.2 with 1.2 being much faster. Numbers are yearly averages from multiple nightly tests over several weeks using debug builds.
That’s all from me for this week. Next week Nik will present the various improvements done to warfare mechanics in 1.2, including the new Strategic Objectives feature.
Victoria 3's Update 1.2 "Hot Cinnamon Spice" OPEN BETA is now available!
Hello everyone!
We have opened up an open beta for Victoria 3 Update 1.2, which after careful consideration by the entire team has been named “Hot Cinnamon Spice”! We’ve been working on this update for a while now and we hope that it will provide a significant improvement to your experience with Victoria 3. Before we unleash it fully we’d like for you all to give it a go and provide us with feedback so that it can be the best it can be. The final release date of the full update will be revealed later.
How to opt-in to the Open Beta: First of all we'd like to recommend everyone to start a fresh game and not use existing 1.1 save files. To opt-in you right click Victoria 3 in Steam, go to properties, click on the tab that says BETAS and in the dropdown list there you should be able to select the “1.2-beta”. Let the game update and you should be ready to go. If you wish to opt-out from the beta you repeat the above process but pick “none” in the dropdown list.
Step by Step Guide 1. Right click Victoria 3 in your Steam library 2. Go to Properties 3. Click "BETAS" on the menu to the left 4. Pick 1.2-beta in the dropdown list 5. Allow for your game to update 6. Start Victoria 3 as you normally would
How to report bugs and give feedback: Our primary channel for communications will be the Victoria 3 Discord Server in the OPEN BETA section where you can post feedback and report bugs! You can also file bug reports in the bug report forum(make sure you specify the bug is found in the 1.2 Beta build). PLEASE NOTE THAT WE WILL NOT BE COLLECTING BUG REPORTS ON STEAM - ONLY ON DISCORD AND OUR OFFICIAL FORUM
Updates to the build: We’ll be updating the open beta build on a regular basis and any updates will be communicated on Discord. Please note that updates may render your save file incompatible.
Hello and welcome to another Victoria 3 Dev Diary about Update 1.2! By now the Open Beta is of course in full swing, and everything in this post will either already be available to try out or be part of one of the upcoming updates to the Open Beta in the following weeks. However, we still want to take the time to properly outline the changes we’re making to the game in 1.2 for those who either don’t want to opt into the Open Beta or are just interested in more detail and context. Today’s Dev Diary will be focusing on changes on the Diplomatic side of the game, both in terms of new functionality and AI.
The first improvement we’re going to go over today is Colonial Claims, which is a change to Colonization that is intended to prevent some of the more ahistorical nonsense we have going on in colonization at the moment, such as countries rushing for Hokkaido before Japan can get it or the United States setting up shop in Tierra del Fuego. Quite simply, what it means is that some countries now start with claims on states owned by Decentralized Nations, and any country which *doesn’t* have a claim on that state is blocked from colonizing it so long as the claiming state maintains an Interest there.
As an example, the Hudson Bay Company starts with a claim on Alberta in 1.2, while the United States of America does not, which means that the USA cannot start just colonizing into Canada without first forcing the HBC to revoke their claim through the use of a ‘Revoke Claim’ war goal. Similarly, Chile and Argentina have overlapping claims on some parts of Patagonia and thus are able to race each other for it, but won’t have it sniped away from them by a Belgium with grandiose Latin American ambitions.
While we’re on the topic of colonization, I should also mention that something else we’ve changed to improve how it plays 1.2 is how the Native Uprising diplomatic play works. In 1.1.2, a colonizer that defeats a Native Uprising would annex the entire native Decentralized Nation, which led to some weird pacing and balance issues. This has been changed to instead give the colonizer a special ‘Colonial Rights’ diplomatic pact with the defeated natives, which lasts for the duration of the truce. During this period, colonization speed is doubled and no further uprisings can occur from that particular Decentralized Nation.
It is no longer possible to simply snipe Hokkaido away from the Japanese Shogunate, as they start with a claim on the Ainu-controlled parts of the island
Next up is a change to Diplomatic Plays that allows countries to expand their Primary Demands in a play. An issue that has been repeatedly identified by players since release is that once they grow strong enough, the AI has a tendency to back down against them in plays, ceding one war goal at a time and setting in place a five-year truce before the next demand can be made. While this does fit with the design principle that there should be a reason to want to back down, the end result could end up unduly frustrating and wasn’t just an issue for the player, either, as the AI of the USA struggled to reach the West Coast when it could only take one state off Mexico at a time.
To address this in a way that directly tackles the problem while still ensuring that it still isn’t simply best to always take your chances with a war, we’ve changed the concept of Primary Demand (ie the first war goal added, which gets enforced when backing down) to Primary Demands, which will all be enforced when the enemy backs down, and Secondary Demands, which will only be relevant if the play escalates to war. Just as it works right now, the first war goal added on each side is always a Primary Demand, but there are now ways to add more Primary Demands beyond the first.
Firstly, any war goal targeting the main opponent (or any of their subjects) that is added by Swaying another country to your side will now automatically be a Primary Demand. In other words, if you’re launching a play against France and they’re being supported by Spain, any country you sway to your side with a war goal targeting France will have that war goal added as a Primary Demand, while war goals targeting Spain are Secondary Demands. The AI understands this and will place higher value on Primary Demands, since they are much more likely to actually receive what’s promised by the war goal in the end.
Secondly, any war goals you yourself add can be made into Primary Demands if they target the main opponent (or any of their subjects). However, doing so is considered less ‘justified’ than adding Primary war goals through swaying, and so will cost an amount of maneuvers and generate an amount of infamy proportional to the cost of adding the war goal in the first place. This means that while adding more Primary Demands for yourself ensures that you receive them if you end up making them back down, it isn’t free, and is done at the expense of adding additional war goals or swaying more countries to your side. The AI is also going to receive some tweaks here to make them less likely to back down if you keep piling on Primary Demands, as at a certain point the unreasonableness of the demands just becomes too much to take without making a fight of it.
The cost of expanding your Primary Demands is entirely relative to the cost of the wargoal, so in the case of taking the small and depopulated state of Utah, it’s quite low
On the topic of AI, we move on to the final topic for today’s dev diary: Peace AI and War Exhaustion mechanics. Both of these have received a bunch of improvements in 1.2, though most of these improvements have not yet made it into the Open Beta. War Exhaustion, of course, is the rate at which a country’s War Support drops towards -100, at which point they are forced to capitulate. In the 1.1.2 version of the game, the main driver of War Exhaustion is occupation of territory, particularly wargoals and the capital, leading to the much-maligned ‘just naval invade Berlin’ meta.
In 1.2, you still get War Exhaustion from occupation, but the amount gained from occupied wargoals/capital is less, and War Exhaustion from occupation of other territory now scales non-linearly, with severity increasing rapidly as the country approaches full occupation: a fully enemy-controlled Modena will still capitulate quickly, while a Russia that has lost control of a few states in the Caucasus is barely going to be affected. Instead, the primary driver of War Exhaustion is now casualties and battles lost. War Exhaustion from Casualties now scale against the total available manpower for the country instead of its Population, so a country with an army of 10,000 is going to be much more affected by 5000 casualties than a country with an army of 100,000, even if the two countries have the same overall population. For available manpower, all regular battalions are counted (whether mobilized or not), but conscripts are only counted once they’re actually called in - so calling up more conscripts can be a way to directly affect your War Exhaustion rate.
Furthermore, War Exhaustion from Casualties now scales against the % of battles (proportional to battle size, so a battle of 100 battalions vs 100 battalions counts more than one of 5 vs 1) that your side of the war has lost. What this means is that a country which keeps winning battles can absorb far more losses than one which keeps losing them, and allows for battlefield victory to play much more directly into achieving overall victory in the war.
Even though the amount of casualties relative to army size are fairly similar owing to the massive Qing army, the British are losing war support at a much slower rate due to their string of battlefield victories
The AI for making peace has also received some upgrades. In addition to now just being better at constructing equitable peace deals through a rewrite of the core logic behind AI-made peace deals, the AI has also been made to consider more angles when deciding whether or not a peace deal is acceptable. Firstly, a new factor has been added called ‘achievable wargoal’, where the AI looks at whether a war goal is likely to be gained by the side that holds it through the capitulation of the target if a peace deal is not signed. Such wargoals, if held by the AI, will make them far more reluctant to sign peace unless those wargoals are part of the peace, while they are simultaneously more likely to accept the enemy pressing wargoals against them that they’d just lose anyway if the war continued. Secondly, the AI now looks at more additional factors for peace (such as the relative military strength of the two sides) and other factors have been tweaked, for example the size of AI Gold Reserves now has less importance than it used to.
Even though the Qing are offering considerable concessions, the British AI will refuse this peace deal because they believe they can get everything they want anyway once Qing is forced to capitulate
That’s it for today! This is of course not an exhaustive list of everything that’s been improved diplomacy-wise in 1.2, and there are a number of improvements still planned for future Open Beta updates, particularly on making the diplomatic AI behave in a more plausible way and be better at sticking by important allies, but details on that will have to wait for another day. Next week, we continue talking about the 1.2 Update as our tech lead Emil will tell you all about the improvements we’ve made to Performance. See you then!
Dev Diary #74 - UX Improvements
Hello, my name is Henrik, and I am one of the UX Designers on Victoria 3. For 1.2 I have been fully focused on improving the user experience of the game. Before we go into the details of what has been worked on for this update, I want to give a special thanks to the community, all the modders, and anyone who posted feedback here on the forum, Discord, Reddit, Youtube, or any of our other communication channels. Your feedback, ideas, and discussions have all been instrumental in helping the team prioritize our time and efforts for this update.
Trade Routes
One of the first things we started with immediately after 1.1.2 was improving the usability of the Trade Routes panel. In addition to the current view of grouping Trade Routes by Goods, you can now get a sortable list of all Trade Routes in the Market, or get a view where they are grouped by Country. All of these lists can also be filtered to exclude any Routes not owned by you. The Country grouping is especially useful when setting up Embargos or Trade Agreements.
Message Settings
Our new Message Settings window lets you decide how you want a specific Notification to be displayed, and if you want the game to automatically pause when it gets triggered. In future updates, we are planning on expanding this to cover more functionality, like the Current Situation panel, Alerts etc.
Parallel to adding Message Settings, we also made a pass on making sure that the Notifications we post to the player are informative and have a reasonable default setting for how to present them. Among the tweaks we have done are:
Make the “Interest Activated/Deactivated” Notification into a “You can now conduct Diplomacy with X” Notification that only triggers if the activated/deactivated Interest is the first/last one that overlaps with any of your Interests
Moving the Price Report to the Market Panel (turned off by default, can be turned on in the Message Settings panel)
Splitting up Trade Routes Notifications into significant and less significant versions (Significant is turned on by default, less significant is not)
Only show “Mobilization” and “Declare Neutrality” Notifications if you are committed to the Diplomatic Play in question
Only show resource related Notifications if they happen in your Market (previously Strategic Regions in which you have an Interest in)
All of these changes should, according to our benchmarks, reduce the number of Notifications by roughly 50% for most Countries. In addition to this, we have also tweaked the animations for the Notification feed, so the overall user experience of the entire system should be much improved.
Rebindable Keys
Our shortcut system has been replaced by a new system that can leverage rebindable keys. When adding this new system also made a pass and added a few more shortcuts, as well as hooked in a few existing ones in more places.
Pop Needs
Another fully reworked panel is the Population overview, which now gives you more information about who your Pops are, how many they are, how much money they make, what they spend it on, and how much that goes to increasing/decreasing their Standard of Living (the last one not included in the screenshot, but visible without scrolling when the Taxes and Needs sections are collapsed).
In addition to creating this new panel, we have exposed more information in the Pop Lists used throughout the game, and improved a few of the Pop Need tooltips. They should now surface more of the relevant information higher up in the information hierarchy.
Economy
Martin has already discussed some of the changes regarding Construction in DD #71, and in addition to these changes we have improved the user experience of the gameplay loop by providing better contextual information in several places. For example, we have added Infrastructure, Available Labor, and Qualifications to the Map List that is shown when expanding Buildings. In the screenshot below you can also see that we have restructured the layout of the Map Interaction panel to make it possible to navigate directly to another panel, which in the case of the Construction Interaction is the Building details panel for the specific Building. This layout also allows for more reasonable tooltip positioning, making it easier to navigate into a nested tooltip without accidentally opening another tooltip when moving the cursor towards the tooltip you wanted to dig into the details of.
The most recent improvement that made it into the game is the Reset Production Methods Map Interaction, a PDT project by our Lead Designer Mikael and myself. It should make it much more efficient to streamline the production in your Country, which is especially useful if you have just acquired a few new States. This is currently somewhat of a work in progress, and we are hoping to expand this to work on Buildings and Building Types in the future.
One of the most popular mods for the game is currently Visual Methods by FUN, a mod that we liked so much that we decided to make our own, slightly tweaked, version of.
The Investment Pool is now being more prominently displayed in the Buildings panel.
The tooltips for Market Access have also been improved to give more detail as to why a State is not fully connected to the National Market.
Radicals and Loyalists
We have improved the presentation of why your Pops turn Radical or Loyal, who they are and which Interest Groups they belong to. Information regarding this has been exposed in several tooltips and panels, like the Interest Group panel.
Convoys
Your current Convoy balance has been added to the Top Bar, making it much easier to keep track of and access when needed. This item will be hidden for landlocked Countries and unlocked as soon as you gain access to a coastline.
Map Modes
We have added three new Map Modes (Literacy, Population and Infamy), and given the transition between two Map Modes a configurable fade in/out to make it smoother. One of the first mods I personally subscribed to at release was Practical Heatmaps by Ronin Szaky, and an ever-so-slightly tweaked version made its way into the base game in 1.2.
Diplomacy
For Diplomacy, we have improved how we show AI Acceptance and signal more clearly if offering or using an Obligation would convince them to accept.
We have also exposed all types of Diplomatic Plays on the Country details panel, not only the ones you can currently start, making it easier to figure out what is blocking you from starting a particular Play.
Military
When it comes to the Military system, the focus for the UX improvements in 1.2 has revolved around making it clearer how the Battle systems work. We approached this by exposing more data related to Battles, as well as, improving some of the tooltips presenting breakdowns of the calculations involved. Some effort has also been made to decrease the amount of visual noise from multiple Front Markers.
Work in Progress tooltip for the breakdown of the initial number of troops each General was able to bring to the Battle.
We have also surfaced the information regarding which HQ a Commander considers their Home HQ and made some improvements to the information presented in the Naval Invasion user flow.
Outliner
The Outliner has gotten some polish, with pinnable Goods and non-Military Characters being the biggest additions. Interest Groups are now showing their Approval value, and States show their Available Labor and Qualifications.
Tech Tree improvements
The Tech Tree Improvements discussed in DD #70 also made it for 1.2.
Closing words
In addition to all of these changes listed above, we have also made over 100 smaller UX tweaks and bug fixes, which you will either have to wait for the full patch notes to explore, or experience for yourself during the Open Beta. Once again, thanks for all the feedback, it really helps us make the game as great as it deserves to be!
Next week, Martin will be showing us diplomacy improvements coming in 1.2!
Dev Diary #73 - Open Beta and Update 1.2 overview
Hello and welcome! Today we'll be covering several topics relating to Update 1.2:
Open 1.2 Beta
Feature Overview
Anticipated 1.2 Release Date
As mentioned in our last dev diary, 1.2 is a big update with some far-reaching changes, and we don't want to push it out before we feel it's ready for primetime. We're happy overall with the reception of Update 1.1, but those of you who were with us during its initial release will remember - perhaps fondly, perhaps not - how the Legitimacy mechanics seemed to change from day to day for a while there. While we finally managed to iron out most of the kinks in 1.1.2 (more on that later) this is the kind of scenario we'd like to avoid going forward. With a game as highly interconnected and complex as Victoria 3, the only way to do that is to give the patch enough time in the oven, letting our playtesters really give everything a solid rundown.
At the same time, Update 1.2 brings some substantial improvements in several areas that we know are important to you, and we don't want to keep those away from you longer than we absolutely have to. Disentangling specific improvements and bug fixes from the rest of the changes that have already been done to the branch is itself laborious and error-prone. Our assessment is that releasing those in hotfixes would be risky.
So how do we marry these two things together - giving you access to upcoming content as soon as possible, while ensuring high quality of the upcoming update? By launching our first Open Beta, of course! In this way you will have a chance to experience all the juicy parts of Update 1.2, but also share your feedback with us in advance, allowing us to improve what we are currently working on.
Our planned beta launch date is February 8th at 10:00 CET. At that point a new Steam beta branch 1.2-beta will become available to anyone who owns Victoria 3. A new forum post will be made with step-by-step instructions for how to enable it. Once you've started playing the beta, you can always switch back to the live branch in the same way. As always, your existing save games might not be fully compatible with this new version, and you should definitely not expect saves made in 1.2 to be backwards compatible with 1.1.2.
We will also launch a new beta section on ourVictoria 3 Discord server where you can discuss the update with other players and report any bugs or balance issues you find. Our moderators will be active on this channel, and so will developers and QA team members as time permits. If you prefer not to use Discord you can also file bugs using our forum bug report tool, even for the beta version.
After the initial beta release, we plan on releasing two additional updates on the beta branch on a weekly basis, containing additional bug fixes, performance improvements, etc and also adjustments we've made according to your feedback. The exact release dates and times of these updates are to be confirmed, but we will keep you posted on the Discord channel.
To set expectations at the right level, playing the beta build will not be a buttery-smooth experience! Some aspects of the game will be greatly improved, but other things will be in a rougher state, and there will be bugs (if not, we'd just launch it without a beta phase!)
Also, some features will be in a less mature state at the beginning of beta than they will be at release. For example, Strategic Objectives will be limited to one per country during the beta, but the intent is to expand this to allow for designating multiple Strategic Objectives. This slimmed-down version is included in the beta to allow you to try it out and feedback on how it feels in general while we continue to work on the full implementation.
So do keep in mind that while you'll get a sneak peek at the latest features and will see many improvements, you should expect some speed bumps along the way. And when you do, we want to hear about it!
Below you can find a short list of some of the new features and improvements made in 1.2. As always, just because something is not on this list doesn't mean we're not aware of it, and may even have addressed it already! The full changelog will be published closer to the release date.
More realistic modeling of trade route profits and GDP
Worldwide Arable Land revision and migration balancing
Mega-parties limited by tweaks to party formation logic and ideology
Interface
Trade panel overhaul for easier route management
More clarity on Pop Needs, Convoys, Radicals and Loyalists
Visual upgrades to mapmodes and lenses, such as showing Infrastructure and employable Pops when expanding buildings
Outliner enhanced with pinnable market goods and characters
Reduced notification spam
We are going to cover most of these things in dev diaries leading up to the release of 1.2, so details on what exactly these entail may be sparse until then. However, all of these will be in the beta build when we release it (although to reiterate, perhaps not in their final form) so come February 8th you can explore them for yourself!
After the third and final beta release, but before the live release of Update 1.2, you can expect the beta build and the beta section on Discord to become unavailable, as we will be channeling all our resources into the release. We will keep you updated on the expected beta shutdown date on Discord as well, of course.
Our preliminary release date for Update 1.2, assuming all goes according to plan, is March 13th. For those of you who opt to continue playing 1.1.2 until then you can follow the new features in upcoming dev diaries. For the rest of you, I'll see you on Discord on Feb 8!
Victoria 3 Discord QnA! February 7th!
Ahoy Victorians!
Next week we will be having a Discord QnA with the Developers, February 7th at 14:00 CET!
Make sure to join our Discord and we will see you then!
Hello and welcome to the second Victoria 3 dev diary for 2023! Today we’re going to continue talking about patch 1.2 for Victoria 3 (release date to be announced), on a topic that is closely related to last week’s dev diary, namely Economic Laws and how they have changed in 1.2. As we mentioned in Dev Diary #64, one of our post-release ambitions is to increase the differences in gameplay between different economic systems. What I mean by that is that there should be deeper mechanical differences between for example Laissez-Faire and Command Economy in terms of how they impact your country and the economic decisions you make. All of the existing Economic Laws have received changes in 1.2 and we’ve also added a new one, so I’m simply going to go through them one by one and explain how they work now.
Before I start however, I should mention a change that has happened since last week based on feedback we received on the Autonomous Investment dev diary. Several people pointed out that with a weighting system in place, there wasn’t really a need for hard restrictions on what the Investment Pool could fund under Autonomous Investment, and we agree! Thus, Autonomous Investment no longer has any restrictions on what profit-generating buildings can be built, just weighting based on who is investing and what they would want to invest in (as mentioned last week, if you’re running Agrarianism, expect a lot of farms). The restrictions still apply under Directly Controlled Investment however (and the tooltips will reflect this based on which setting you are using).
Traditionalism: Traditionalism in 1.2 is largely the same as before: A very backwards system that you should generally be trying to get out of. The main difference from 1.1 is that the Investment Pool isn’t disabled for Traditionalism, though you take a hefty penalty to investment efficiency (further reduced if you also have Serfdom) and the building types you can construct with the Investment Pool are highly curtailed if you are playing with Directly Controlled Investment.
Interventionism: The ‘golden middle way’ of economic laws, Interventionism also isn’t extensively changed in 1.2: It provides no particular bonuses or penalties, but gives you the freedom to subsidize any and all building types as well as extensive options for the Investment Pool under Directly Controlled Investment, while providing a balanced allocation between Private and Government Construction Allocation under Autonomous Investment.
Agrarianism: Agrarianism has received a fairly substantial boost in 1.2, with both the addition of Farmers as an investing Pop Type and a hefty bonus to the efficiency of all rural investments. Capitalists are now also not locked out of investing under Agrarianism, though they do so at a penalty and their building selection is quite limited if you’re playing with Directly Controlled Investment.
Laissez-Faire: The invisible hand of the Free Market made manifest, Laissez-Faire in 1.2 is meant to be the go-to law for the player that wants to get the absolute most out of their Investment Pool when it comes to industrializing. It does come with some significant drawbacks though, as it is no longer possible to downsize non-government buildings under Laissez-Faire.
Cooperative Ownership: A new Economic Law introduced in 1.2, Cooperative Ownership is now a fully fledged economic system instead of just being unlocked by becoming a Council Republic. Under Cooperative Ownership, all Pops working in a building receive an equal number of shares and Aristocrat/Capitalist jobs are eliminated. While this should lead to higher Standard of Living among the workforce, it also means far less money in the Investment Pool, as Farmers and Shopkeepers invest far less than their wealthier counterparts under other systems.
Command Economy: Command Economy is the law that has received the largest (and most needed) overhaul under 1.2. Instead of being a frankly weird system where the Bureaucrats own the profits but you are required to subsidize them, Command Economy now makes use of a new system called Government Shares, which is used by the Government Run ownership production method. Just like how Pop Shares entitle Pops to a portion of a building’s dividends, Government Shares ensure that buildings pay some or all of their profits directly into the treasury - though in large economies this is subject to an efficiency modifier, with some of the money being wasted due to the inefficiencies inherent to large, heavily centralized systems. While this is not something we currently have a setup for in the base game, Government Shares can also freely be mixed with Pop Shares, so we’re looking forward to seeing what modders make with this!
Another change you might have noticed when looking at the screenshots in this dev diary is that we have tied some economic laws more closely to a country’s Distribution of Power and Government Principles. For one, seizing the means of production is no longer a one-step reform into Council Republic, but rather a multi-step reform that involves first implementing a Council Republic, then Cooperative Ownership, and finally allows you to branch off into Anarchism if you so desire. Command Economy now also requires Autocracy or Oligarchy, as it’s difficult to pull off a fully centralized economy without the corresponding amount of centralized powers (and with the new Government Shares mechanic should provide more reasons to want to keep a grip on power in the late game).
So the question on everyone's mind is, when will you be able to play with these changes and all the other updates and fixes coming in 1.2? Some of these changes are pretty big and we don't want to rush this patch out too early, but at the same time we know you're anxious to get your hands on it. To find the right balance between these we've decided to launch patch 1.2 in open beta, which we will talk more about in next week's dev diary! In there we will also focus a bit more generally on patch 1.2, giving you more of a birds-eye view of what the patch will look like, along with giving you an expected release date.
Dev Diary #71 - Autonomous Investment in 1.2
Hello and welcome to another Victoria 3 dev diary! Today’s diary marks the start of dev diaries about Patch 1.2, which is the next major upcoming patch for Victoria 3 (release date to be announced). As with 1.1, 1.2 will contain a slate of bug fixes, UX improvements, AI improvements and so on, but also some more significant changes to game mechanics, which we’re going to go over in these dev diaries.
The particular changes we’ll be talking about today, as alluded to by the title, is Autonomous Investment, which is something we said we were going to look into for our post-release plans back in Dev Diary #64. What we said back then is that while we are never going to take construction out of the hands of the player entirely, we were open to the idea of non-government entities constructing buildings in a way not directly controlled by the country, and what we came up with is a system where the Investment Pool will be used by private entities to construct different types of buildings depending on your economic laws.
Before going over how all this works, I first want to mention that we recognize that the community is somewhat split on the issue of autonomous construction, and as such, we’ve opted to create a new Game Rule for Autonomous Investment. By default, Autonomous Investment is enabled, which puts the Investment Pool out of the hands of the player, but you can choose to disable it, which puts the Investment Pool back in the player’s hands and makes it work exactly as it does in the current 1.1.2 version of the game.
The Investment Pool Game Rule allows you to enable or disable autonomous construction with Investment Pool funds, depending on your personal preference
Regardless of whether Autonomous Investment is enabled, the Investment Pool works pretty much the same as it did before: Certain Pop Types with ownership shares in buildings pay part of their dividends into the Investment Pool, the funds in which can then be drawn on for construction. There are, however, a few key differences in 1.2 compared to 1.1.
Firstly, the types of Pops that invest have been expanded from just Aristocrats and Capitalists to also include Farmers and Shopkeepers. Capitalists invest the highest percentage of their dividends (20%), followed by Aristocrats at 10%, with Farmers and Shopkeepers investing only 5% each. The rationale here is that it wasn’t only the wealthiest in society who invested in new businesses, and this also allows a small degree of investment under laws which strip ownership away from the Capitalists and Aristocrats (but more on that next week).
Secondly, the proportion of dividends that are paid into the Investment Pool varies in 1.1 based on your laws, which can have some pretty bizarre effects, such as switching to Laissez-Faire suddenly creating a bunch of Capitalist Radicals because they are now investing more money and thus end with a drop in their Wealth. The proportion of funds that are invested is now a fixed percentage based on pop type, which is then subjected to an efficiency bonus: Capitalists always invest 20% of their dividends, for example, but under Laissez-Faire, this investment is more efficient and ends up contributing more money to the Investment Pool.
There is also a general investment efficiency bonus for payments into the Investment Pool in small and mid-sized economies, and a penalty in very large ones, to ensure the Investment Pool is also relevant for mid-sized countries while not growing to such absurd proportions that it cannot possibly be spent in a 10 billion GDP country. These efficiency bonuses are meant to abstract a system of foreign investment, which is something we’ve also mentioned is on our radar in Dev Diary #64 but is a bigger rework that we are not tackling yet in patch 1.2.
Agrarianism gives a hefty bonus to the investments of your Farmers and Aristocrats, but reduces investments from Capitalists and greatly limits the types of buildings they can put their money into.
So how then, does the Investment Pool funds get turned into buildings when Autonomous Investment is enabled? Well, autonomously, of course! With Autonomous Investment, the Construction Queue is split into Private and Government Constructions, with Government Constructions being anything (regardless of whether it’s a Government building or not) ordered to be built or auto-expanded by the player or country-level AI, while a Private Construction is anything the Pops themselves are building. The Construction capacity of the country will be split between the Private and Government queues in a proportion based on your economic law, though if there isn’t enough constructions queued of one type to use its full allocation, the excess can be used by the other queue instead.
In the construction screen, you’ll be able to see what the next planned Private Construction will be, along with its current funding level. The funding level is a calculated value based on both the total funds available in the Investment Pool as well as the weekly funds coming into it, and can fluctuate based on the Market price of Goods used in construction. Once a project is funded and ready, it’ll be added to the private Construction Queue the next tick. Private Constructions, unlike Government ones, cannot be reprioritized or canceled - they will always be built in the order they are queued up by the Pops.
Though the Government is currently building nothing in France, there are several private constructions in progress, and plans for the expansion of the Alsace-Lorraine iron mines. Note that this UI is highly WIP!
Pop-ordered constructions use a variant of the standard construction AI which doesn’t take into account the country-level AI’s strategic objectives and prioritizes the creation of profitable buildings which will create lucrative jobs for the investing Pop types, but they will also take some more ‘strategic’ factors into account, such as building railroads in low-infrastructure states. Just as with the country-level AI, they also have access to the system of Spending Variables described in Dev Diary #59, which means that they do not operate on a snapshot of the current Market but understand factors such as the impact that already queued buildings (private and government-ordered both) will have on prices once completed and staffed.
Since Autonomous Investment does not only affect player countries, you might be wondering how well this system works together with the AI? The answer is that it actually works quite well! Together with a bunch of AI improvements and fixes in 1.2, this has resulted in more stable economic growth for AI countries and especially seems to have given Great Britain a boost, as the private sector doing its own thing means that the economy is usually growing even if the country’s treasury is having issues, at least as long as the Pops investing into private-sector growth are making healthy profits. There’s still some issues, particularly when AI runs out of available workforce late game, that we are hoping to tackle before 1.2 releases to further improve the AI’s economic growth.
Screenshot from a hands-off game taken in 1908. While there’s certainly still room for improvement and some countries like France and Prussia have underperformed due to wars and turmoil (and Austria continues to overperform compared to history), it’s definitely looking better than in 1.1.2.
That’s it for today! Join us again next week as we go over more changes to the economy in 1.2, with a particular focus on Economic Laws and the introduction of Government Shares in buildings.