"Silk & Silver" Dev Diary #9 - 3D Art, Music, Modding
Greetings! We’re back with yet another chonkey dev diary, this time featuring 3D art, Animation, Music/Audio and Modding. As you might notice, 2D art is missing because, thanks to our talented artist's hard work, we actually had to split this dev diary into two parts (!!). It’s good to note that this diary is written by a wide range of authors and will cover a little bit of history, our thoughts, processes, and intentions while working on Silk & Silver, plus many nice close-ups and more. As always, all screenshots are work-in-progress, and everything is subject to change. Let’s go!Character ArtSilk & Silver is an expansion about people who make their living on the road, in the market, and in the council chamber of a republic. Character art had to follow that: not only more silk on dukes, but also wool on porters, fur on doges, and the hats, hoods, and pack animals that make a merchant look like a merchant.The new clothes, headgear, cloaks, and hair are all available in the barbershop with Silk & Silver.Asset Type: 88 Barbershop items: 28 clothes, 45 headgear, 14 cloaks, and 1 hair. Male clothes (19): Western, early era, Western late era, MENA, Chinese/SogdianFemale clothes (9): Western, early era, Western, late era, Chinese/Sogdian Male headgear: 34 variants (hats, chaperons, bycockets, turbans, corno ducale, chongdai, etc.) Female headgear: 11 unique hats/veils, plus 6 Volto carnival masksMale cloaks: 11 (Doge cloaks, liripipe hoods up/down, merchant cloak, Skjoldehamn hoods)Female cloaks: 3 (merchant cloak + Skjoldehamn hood variants)Hair: 1 female style—Face Framing BraidsWe also added two new animals: a donkey and a dromedary with variants. Both exist as portrait props and as map units.Donkey Variants: bare donkey, saddle, packed for travelDromedary Variants: bare dromedary, saddle, packed for travel\[Late Medieval republic characters.]\[Early Medieval republic characters]\[At the top of that ladder is the Venetian doge: a full ceremonial outfit, a furred variant, matching cloaks, and three versions of the corno ducale.]\[Doge in ceremonial dress and furred variant, both with corno ducale]Republics get their own look. Mayors can wear a formal robe in the early era, then a houppelande with a livery collar later on.\[Early-era mayor’s robe next to late-era mayor’s houppelande and chaperon.]Early-era commoners wear practical tunics (long gowns or shorter coats), including Skjoldehamn-style hoods and a merchant’s cloak that can sit over the shoulders or come up as a hood.\[Early-era male and female commoners, hood down vs hood up. ]For the Late Era, male merchants wear wool and silk cotehardies, ganaches, and houppelandes: buttoned coats, belted gowns, and longer overgowns, usually with a pouch.\[Late-era merchants: woolen ganache/houppelande, silk variants, male and female cotehardies.]Women wear cotehardies, houppelandes, and a sideless surcote: a fitted buttoned gown, a full robe with hanging sleeves, and an ermine-lined overdress. Parti-color and patterned silk belong at court and in the merchant house; the later-era working dress, with coif and apron.\[Female late-era set: working dress, cotehardies, houppelande, surcote.]Hats, Chaperones, and BycocketsBycockets do a lot of the talking for late-era Western heads. Commoners get a plain cut and a flipped variant, while nobles wear feathered versions that climb in showiness until the royal peacock bycocket. Women get their own noble bycocket, so the silhouette stays readable whether you are looking at a merchant, a courtier, or someone who very much wants to be seen.\[[/b]Late-era Western Bycocket Hats][/i][/p]For female characters in the early era we’ve added head scarves and wool hats.\[Early Era Commoners Hats]Early/High medieval male commoners pick up brimmed wool hats, brimmed wool hats with coifs, Italian commoner's hats, Italian commoner's hats with coifs and felt hats.\[Late Era Commoners' and Nobles' Hats and Chaperones]Liripipe hoods that can be worn with the hood pulled up or down, in several color variants.\[Lippipe hood down and up.]For festivals, both men and women can wear Volto carnival masks in several painted variants. Women also get a new face-framing braids hairstyle, which pairs with a veiled braid headpiece.\[Carnival Volto masks ]Along the trade routesThe pack is not only Italian. Middle Eastern nobles get new garments and headgear: northern turbans, an eastern turban, and royal tagelmust turbans, including a version that covers the face.\[MENA nobles: low and high outfits, plus tagelmust with and without face covering.]On the eastern routes, Sogdian merchant clothing appears for men and women, with a richer male variant and a Chinese noble outfit at the top. Headgear here includes the chongdai, a Xinjiang fur cap, and the weimao for women.\[Sogdian man + woman, then Chinese noble. Show chongdai, fur cap, and weimao.]Donkeys & DromedariesSilk & Silver adds two new creatures, built for portraits and for the map: the donkey and the d
Greetings!
We’re back with yet another chonkey dev diary, this time featuring 3D art, Animation, Music/Audio and Modding. As you might notice, 2D art is missing because, thanks to our talented artist's hard work, we actually had to split this dev diary into two parts (!!).
It’s good to note that this diary is written by a wide range of authors and will cover a little bit of history, our thoughts, processes, and intentions while working on Silk & Silver, plus many nice close-ups and more.
As always, all screenshots are work-in-progress, and everything is subject to change.
Let’s go!

Silk & Silver is an expansion about people who make their living on the road, in the market, and in the council chamber of a republic. Character art had to follow that: not only more silk on dukes, but also wool on porters, fur on doges, and the hats, hoods, and pack animals that make a merchant look like a merchant.
The new clothes, headgear, cloaks, and hair are all available in the barbershop with Silk & Silver.
Asset Type:
88 Barbershop items: 28 clothes, 45 headgear, 14 cloaks, and 1 hair.
Male clothes (19): Western, early era, Western late era, MENA, Chinese/Sogdian
Female clothes (9): Western, early era, Western, late era, Chinese/Sogdian
Male headgear: 34 variants (hats, chaperons, bycockets, turbans, corno ducale, chongdai, etc.)
Female headgear: 11 unique hats/veils, plus 6 Volto carnival masks
Male cloaks: 11 (Doge cloaks, liripipe hoods up/down, merchant cloak, Skjoldehamn hoods)
Female cloaks: 3 (merchant cloak + Skjoldehamn hood variants)
Hair: 1 female style—Face Framing Braids
We also added two new animals: a donkey and a dromedary with variants. Both exist as portrait props and as map units.
Donkey Variants: bare donkey, saddle, packed for travel
Dromedary Variants: bare dromedary, saddle, packed for travel
\[Late Medieval republic characters.]
\[Early Medieval republic characters]
\[At the top of that ladder is the Venetian doge: a full ceremonial outfit, a furred variant, matching cloaks, and three versions of the corno ducale.]
\[Doge in ceremonial dress and furred variant, both with corno ducale]
Republics get their own look. Mayors can wear a formal robe in the early era, then a houppelande with a livery collar later on.
\[Early-era mayor’s robe next to late-era mayor’s houppelande and chaperon.]
Early-era commoners wear practical tunics (long gowns or shorter coats), including Skjoldehamn-style hoods and a merchant’s cloak that can sit over the shoulders or come up as a hood.
\[Early-era male and female commoners, hood down vs hood up. ]
For the Late Era, male merchants wear wool and silk cotehardies, ganaches, and houppelandes: buttoned coats, belted gowns, and longer overgowns, usually with a pouch.
\[Late-era merchants: woolen ganache/houppelande, silk variants, male and female cotehardies.]
Women wear cotehardies, houppelandes, and a sideless surcote: a fitted buttoned gown, a full robe with hanging sleeves, and an ermine-lined overdress. Parti-color and patterned silk belong at court and in the merchant house; the later-era working dress, with coif and apron.
\[Female late-era set: working dress, cotehardies, houppelande, surcote.]
Bycockets do a lot of the talking for late-era Western heads. Commoners get a plain cut and a flipped variant, while nobles wear feathered versions that climb in showiness until the royal peacock bycocket. Women get their own noble bycocket, so the silhouette stays readable whether you are looking at a merchant, a courtier, or someone who very much wants to be seen.
\[[/b]Late-era Western Bycocket Hats][/i][/p]
For female characters in the early era we’ve added head scarves and wool hats.
\[Early Era Commoners Hats]
Early/High medieval male commoners pick up brimmed wool hats, brimmed wool hats with coifs, Italian commoner's hats, Italian commoner's hats with coifs and felt hats.
\[Late Era Commoners' and Nobles' Hats and Chaperones]
Liripipe hoods that can be worn with the hood pulled up or down, in several color variants.
\[Lippipe hood down and up.]
For festivals, both men and women can wear Volto carnival masks in several painted variants. Women also get a new face-framing braids hairstyle, which pairs with a veiled braid headpiece.
\[Carnival Volto masks ]
The pack is not only Italian. Middle Eastern nobles get new garments and headgear: northern turbans, an eastern turban, and royal tagelmust turbans, including a version that covers the face.
\[MENA nobles: low and high outfits, plus tagelmust with and without face covering.]
On the eastern routes, Sogdian merchant clothing appears for men and women, with a richer male variant and a Chinese noble outfit at the top. Headgear here includes the chongdai, a Xinjiang fur cap, and the weimao for women.
\[Sogdian man + woman, then Chinese noble. Show chongdai, fur cap, and weimao.]

Silk & Silver adds two new creatures, built for portraits and for the map: the donkey and the dromedary.
Each comes in a few setups. You can see them unsaddled, under a riding saddle, or loaded with baggage.
\[Donkey trio: bare / saddle / baggage.]
\[Dromedary trio: bare / saddle / baggage.]
\[In portraits, a character can ride, lead, stand beside, or pet them. The dromedary also has a tired riding pose and a holding pose.]
We wanted to share some insight into the process behind the character apparel in Silk & Silver. The brief was not “more fancy nobles,” but a wardrobe that can read as trade: wool on the street, silk in the counting house, and ceremonial cloth at the top of a republic.
As always, we first needed a solid understanding of the periods we were dressing. With help from colleagues and beta testers, we started by collecting historical references from:
Italian and wider Western frescoes, panel paintings, and illuminated manuscripts
Surviving garments and museum collections (cotehardies, houppelandes, chaperons, and the corno ducale)
Academic work on medieval European, North African / Middle Eastern, and Silk Road dress
Sogdian and Chinese visual sources for merchant clothing, the chongdai, the weimao, and related headgear
Period reconstructions where the original cut or layering was otherwise hard to read
\[Moodboard/Miro board for Western merchant and republic clothing.]
We then set up reference boards by region and rank: early-era commoners, late-era merchants, mayors and doges, MENA nobility, and Sogdian/Chinese traders. At this point the 2D art team stepped in and painted concepts for many of the hero assets. Those drawings, together with the reference images, are what the 3D artists use as guides when building each item.
\[WIP 3D model of a Houppelande, Liripipe Hooded Cloak Hood, Middle Eastern robe]
For Silk and Silver we have added over 25 new animations for you to behold.
Ever wanted to pet a dromedary? Now your character can! Pet, ride, and lead dromedaries and donkeys across the world to trade.


\[Hungry on the road? Eat chicken legs and sausages to your heart's content!]

\[With the new carnivals, there must be some entertainment! Now people can juggle, sing, throw coins around them, and more!]
With trade routes on the map, caravans were needed. Depending on culture you can now see little guys traveling along the routes, carrying your goods. We have riding and leading donkeys and dromedaries, ox-carts and donkey-carts, and horses pulling wagons.

There’s more to be seen, with people holding yokes and scales, throwing coins into the air, biting said coins to test their validity, holding boxes and gesturing to wares. Discover more in game!
For Silk and Silver, we wanted to continue working on our goal for All under Heaven, which was improving how the map looks and making it come more alive.
This time we wanted to see what goods were being developed, roads being made and merchants traversing them. And most importantly, we wanted to see our cities grow as we progress in-game.
We made different sprawl patterns for the different cultures, with some of these patterns differing between rural villages and big cities on top of that. In some parts of the world the cities grow more organically, but other times they follow grids and special formations.
The randomisation of growth, the different patterns and the environment, like mountains, water, forests, etc., change how the pattern can grow and make truly no two cities look the same.
See below some samples of what you’ll see in-game.

There are many different trade goods in the game, and to help you spot the district's main resource on the map, we added them to the sprawl. Here are a few of them that you’ll spot while playing!

\[Cattle, Fruit and Leather. ]

\[Fish, Timber and Salt.]
Below are our different resource workshops.

The south east asian workshop was heavily influenced by the amazing work of https://www.virtualangkor.com/scenes and their scene depicting Khmer stonemasons.
The tusks were added as a detail to represent ivory production.

\[Middle. For the mena workshop we decided to go for a simple version of an updraft kiln. On the right you see the Chinese workshop that is based on a Dragon/Climbing Kiln.]
The goal here was to create a trade hub, each lined with shop stalls and carts, that stood out from the rest of the sprawl while sharing a similar silhouette across the different cultures, so you could easily spot them without zooming in fully.
Below you see the models we made for the different Entrepôts.
\[Mena ]
\[Western]
\[Eastern]

For Venice, WE wanted to showcase some of the most famous buildings and what they looked like during that period, these are:
The Doge’s Palace
Basilica of San Marco (the old version that is based of the Church of the Holy Apostles)
The Arsenal
The Campanile
And lastly (not a building, of course), the animated gondolas bobbing by the docks and sailing around the island.

Building Venice turned out to be quite the challenge: There aren’t many references to go off of; some of what we know is only in writing, and with the very limited space available, we had to really think about the composition and what elements we wanted to highlight.
But this challenge was very fun and rewarding, and we hope my visualization of these historical landmarks lives up to the expectations.

Paris went through a lot of transformations during our time period. Since we can’t swap out city models during the game, we had to create a single model to represent our whole time period (which proved to be really tricky).
To make it as historically accurate as possible for the most amount of time, we decided to not include later Gothic architecture. As a bit of a compromise, the player can build the Notre Dame on top of, essentially replacing, our interpretation of the earlier Basilica of Saint-Étienne.
We also made changes to the map to fit the iconic Ilé de la cité.

We hope you will enjoy our interpretation of the island!
Here you have close-ups of our different carts that you’ll see traverse the map as you send out your merchants.

For this cart, we referenced the Song Dynasty scroll "Along the River During the Qingming Festival "
Following are a few of the props we’ve made for Silk and Silver, in no real order and with no further explanation. Enjoy!


And last but not least, we have improved the snow visuals yet again!
There is a lot more we could cram into this section, but we’ll leave it to you to explore and find the rest in-game.
Thank you for checking out what we in the environment team have been up to!

As is regular in CK3 updates, we’ve added around 20 new event background ambiences, ranging from Artisan streets (reflective of cultural variants), to Carpentry/Smithing/Workshops, Italian Markets, Merchant Homes, new Carnival ambiences, along with some new full-screen Guelph-Ghibelline events to accompany the happenings and outcomes.
Settlement Size - Though introduced with Silk and Silver, Settlement Size also rolls out to the base game. We’ve added per province behaviour to scale each hub per its size, spanning walla and urban components (e.g., marketplaces, trading, construction, crowds, whatever hub audio elements) across 10 levels of size, while also taking into account regional variants of each.
Trade Caravans now have their specific hoof and vocal sounds added to them.
On the UI front, we’ve covered as much as we could for the new Trade Route planner, the new Republic Assembly actions, Trade League actions and notifications, musical stingers for merchant and republic milestones (e.g., charter actions, Silk Road actions, tiers of republic/company). As an extra, we decided each trade good selection also has their own equivalent pointer to the good(s) being selected.
On the Music side of things we gladly welcomed Magnus Ringblum back for this DLC, with a new main theme, new cues and 8 new mood tracks. While the geography is based largely around Europe, there’s some ambiguity when it comes to “trade”, and we wanted to center the music on Italian flavours, with ties to India/China trade resources. The direction we set was to focus more on potential prosperity, worldly influences (because “trade”), and maintain excitement, while not drifting too far into whimsical or “folksy” timbres too much. Magnus’ guiding concepts were the likes of “diplomacy”, “persuasion”, “trust”, and “influence”, while also encompassing “betrayal”, “manipulation”, “corruption”, and “greed”.
Magnus employed the use of a diverse array of instrumentation from different regions to create a distinct musical character for each area. Consequently, the score features everything from European flutes, the hurdy-gurdy, and various string instruments, to the Indian *bansuri* flute and percussion, as well as the Chinese *pipa*, *guzheng*, and *dizi* flute.

Greetings! I’m NGAndersson, Code Owner on Silk & Silver, and I’m here to talk a bit about modding!
Trade is the largest new system in Silk and Silver, and nearly all of it is data. Goods, categories, toll levels and trade tasks are databases you can add to from your own files.
A trade good is only a few lines. Here is an example:
[c]trade_good_silk = {[/c]
[c] base_price = 0.32[/c]
[c] is_basic = yes[/c]
[c] origin = { 9215 2200 } # eastern map edge[/c]
[c]}[/c]
[c]base_price[/c] feeds the buy and sell prices. [c]is_basic = yes[/c] marks the everyday goods that distribution routes carry automatically. [c]origin[/c] is an optional map position the good conceptually comes from, which prevents entrepot-to-entrepot trading towards that origin point. This is added so that we more reliably can direct goods from the east to move towards more western markets.
Where a good can be produced is set per county in [c]common/trade/county_potential_trade_goods[/c]:
[c]trade_good_silk = { counties = { c_shimosa c_yangju c_jiangning ... } }[/c]
Goods are grouped into categories. A category with [c]need = yes[/c] is something buildings can demand. Give it levels as well and it becomes an expertise track that titles level up by trading in it.
[c]trade_category_luxury_items = {[/c]
[c] need = yes[/c]
[c] color = { 0.60 0.5 0.83 1 }[/c]
[c] trade_goods = {[/c]
[c] trade_good_ceramics[/c]
[c] trade_good_glass[/c]
[c] trade_good_jewelry[/c]
[c] trade_good_lacquerware[/c]
[c] trade_good_silk[/c]
[c] }[/c]
[c] per_level_interval = {[/c]
[c] trade_category_luxury_items_sell_price_mult = 0.0002[/c]
[c] }[/c]
[c] milestone_interval = {[/c]
[c] every_level = 10[/c]
[c] domicile_monthly_prestige_add = 0.06[/c]
[c] }[/c]
[c] levels = { ... }[/c]
[c]}[/c]
There is no separate production system to learn. The game generates a bunch of different modifiers for every good and category, and production and prices come from wherever you put them:
[c]
_production_add, _production_mult and _production_flat[/c] [c]
_buy_price_add, _buy_price_mult, _sell_price_add and _sell_price_mult[/c] the same set for each category, such as [c]trade_category_luxury_items_sell_price_mult[/c]
A silk plantation, for example, is an ordinary building with a production modifier:
[c]minor_silk_plantation_1 = {[/c]
[c] can_construct_potential = {[/c]
[c] county = { has_potential_for_trade_good = trade_good_type:trade_good_silk }[/c]
[c] }[/c]
[c] province_modifier = {[/c]
[c] trade_good_silk_production_add = minor_silk_output_1[/c]
[c] }[/c]
[c]}[/c]
You can put these modifiers in many places, for example terrain can affect prices. E.g. Plains carry [c]trade_good_grain_buy_price_mult[/c], so grain is cheaper to buy where it’s typically grown.
Buildings consume goods through [c]trade_good_need[/c]. A need names a specific good or category and an amount, and grants its modifiers while it is met:
[c]trade_good_need = {[/c]
[c] trade_good_category = trade_category_alcohol[/c]
[c] amount = basic_resource_need[/c]
[c] can_be_filled_multiple_times = 2[/c]
[c] not_rite_parameter = alcohol_forbidden[/c]
[c] modifiers = {[/c]
[c] province_modifier = {[/c]
[c] monthly_commerce_tax = normal_market_building_tax_tier_1[/c]
[c] }[/c]
[c] }[/c]
[c]}[/c]
[c]not_rite_parameter[/c] means faiths that forbid alcohol simply don't have this need. (No, you can't sell wine to them. Not even a little.)
Every de jure duchy has one market, at the barony its [c]market_capital[/c] names. York's, for example, is [c]market_capital = b_pockington[/c].
Toll levels live in [c]common/trade/trade_market_toll_levels[/c]. Each one sets [c]route_owner_toll_rate[/c], [c]market_owner_toll_rate[/c] and an [c]ai_market_owner_desire[/c] script value. A level's position in the database is its tier, so one added in a new file becomes the highest.
There are new scopes for [c]trade_market[/c], [c]trade_route[/c] and [c]trade_monopoly[/c], plus database scopes for [c]trade_good_type[/c] and [c]trade_good_category[/c]. Markets, routes and monopolies can hold variables, and markets and routes take timed modifiers.
[c]barony.trade_market = {[/c]
[c] random_trade_good_with_surplus = { save_scope_as = trade_good }[/c]
[c] add_trade_good_price_modifier = {[/c]
[c] type = buy_add[/c]
[c] trade_good_type = scope:trade_good[/c]
[c] value = 0.01[/c]
[c] years = 5[/c]
[c] }[/c]
[c] every_character_in_market = { ... }[/c]
[c]}[/c]
There’s also plenty of [c]on_actions[/c] related to trade:
On_action
Root
Saved scopes
[c]on_trade_route_created[/c]
route owner
[c]trade_route, trader[/c]
[c]on_trade_route_edited[/c]
route owner
[c]trade_route, trader, primary_good_changed[/c]
[c]on_trade_route_destroyed[/c]
the route
[c]destroyer[/c]
[c]on_trader_assigned[/c]
the trader
[c]on_trade_good_category_level_up / _down[/c]
the title
[c]trade_good_category_type[/c]
[c]on_trade_monopoly_invalidated[/c]
the monopoly
[c]on_market_changed_toll_level[/c]
the market
[c]new_toll_level, old_toll_level[/c]
[c]on_toll_exception_changed / _ended[/c]
the market
[c]new_toll_level, old_toll_level, character[/c]
Define the good in [c]common/trade/trade_good_types[/c].
List the counties that can produce it in [c]common/trade/county_potential_trade_goods[/c].
Add its four price static modifiers: [c]
_buy_price_add_modifier[/c], [c] _buy_price_mult_modifier[/c], [c] _sell_price_add_modifier[/c] and [c] _sell_price_mult_modifier[/c]. Price effects look these up, so every good needs them. Copy silk's fom for simplicity. Put it in a need category.
Give something production, such as a building with [c]has_potential_for_trade_good[/c] and [c]
_production_add[/c]. Make a building that needs your new trade good (or whatever category you put it in).
Spice it up with some art: [c]gfx/interface/icons/trade/trade_goods/
.dds[/c] and [c] _small.dds[/c] Add localization for [c]
[/c], [c] _desc[/c] and its generated modifiers.
Et voilà! You can now trade Fables, Weapons, Toilet Paper, or whatever else you might want to add.
A holding is no longer a flat list of buildings. Holdings are built from districts, and buildings live inside districts. This will most likely break existing building mods (see Updating your mod below), but it gives you a lot more room to work with.
Every district has a primary building chain (which is automatically built along with the district), and a list of buildings that can go in the other slots in the district.
A holding type now names a primary district and the districts that can go in its regular slots:
[c]castle_holding = {[/c]
[c] primary_district = castle_holding_district[/c]
[c] districts = {[/c]
[c] manor_houses_district[/c]
[c] religious_community_district[/c]
[c] market_district[/c]
[c] guild_district[/c]
[c] port_district[/c]
[c] ...[/c]
[c] }[/c]
[c]}[/c]
Districts are a new database in [c]common/districts[/c]. Each one has a primary building and a list of the buildings that can go inside it:
[c]siege_works_district = {[/c]
[c] primary_building = pb_siege_works_01[/c]
[c] background = {[/c]
[c] reference = "gfx/interface/illustrations/decisions/decision_siege_warfare.dds"[/c]
[c] }[/c]
[c] can_be_replaced = yes[/c]
[c] unlocked_by = military_district[/c]
[c] can_construct_showing_failures_only = {[/c]
[c] culture = { has_innovation = innovation_catapult }[/c]
[c] }[/c]
[c] buildings = {[/c]
[c] workers_camps_1[/c]
[c] munitions_depot_1[/c]
[c] repair_yards_1[/c]
[c] war_engine_works_1[/c]
[c] ...[/c]
[c] }[/c]
[c]}[/c]
The new [c]building_slots_for_host_district[/c] modifier adds to how many building slots a district has.
Buildings can also require a district level in order to be built:
[c]guild_butchery_2 = {[/c]
[c] construction_time = standard_construction_time[/c]
[c] district_level_requirement = 2[/c]
[c] ...[/c]
[c]}[/c]
Every district has a type: [c]regular[/c], [c]holding[/c], [c]duchy_capital[/c], [c]special, great_district[/c], [c]resource[/c], [c]trade_post[/c] or [c]entrepot[/c].
Regular slots. Each barony has one by default ([c]BARONY_DISTRICT_SLOTS[/c] and [c]COUNTY_DISTRICT_SLOTS[/c] in the defines), plus whatever the new [c]district_slot_add[/c] modifier gives.
Duchy capital, resource and trade post slots are offered automatically.
Special, great and entrepot slots are set per province, in history or with effects such as [c]add_special_district_slot[/c].
Here is a duchy capital district, gated to Celestial governments:
[c]governance_district = {[/c]
[c] primary_building = governance_district_01[/c]
[c] type = duchy_capital[/c]
[c] can_be_replaced = yes[/c]
[c] is_enabled = {[/c]
[c] scope:holder = { government_has_flag = government_is_celestial }[/c]
[c] can_have_duchy_capital_building_trigger = yes[/c]
[c] }[/c]
[c] buildings = {[/c]
[c] examination_hall_01[/c]
[c] celestial_great_barracks_01[/c]
[c] state_granary_01[/c]
[c] ...[/c]
[c] }[/c]
[c]}[/c]
Province history places districts with a districts block:
[c]867.1.1 = {[/c]
[c] special_district_slot = holy_site_great_mosque_of_cordoba_01_district[/c]
[c] districts = {[/c]
[c] district = {[/c]
[c] type = grain_district[/c]
[c] level = 2[/c]
[c] }[/c]
[c] district = {[/c]
[c] type = walls_district[/c]
[c] level = 1[/c]
[c] buildings = {[/c]
[c] city_watch_1[/c]
[c] }[/c]
[c] }[/c]
[c] }[/c]
[c]}[/c]
Districts and individual buildings are now scopes!
Links from a province: [c]holding_district[/c], [c]special_district[/c], [c]great_district[/c], [c]resource_district[/c], [c]duchy_capital_district[/c], [c]trade_post_district[/c] and [c]entrepot_district[/c].
Links from a district or building: [c]district_type[/c], [c]district_province[/c], [c]district_owning_title[/c], [c]building_type[/c] and [c]building_district[/c].
Lists: [c]built_regular_district[/c], [c]built_buildings[/c] and [c]district_building[/c], each with the usual [c]any_[/c], [c]every_[/c], [c]random_[/c] and [c]ordered_[/c] forms.
Triggers: [c]province_has_district[/c], [c]county_has_district[/c], [c]has_free_district_slot[/c], [c]num_districts[/c], and [c]has_free_building_slot[/c] and [c]free_building_slots[/c] in district scope.
Effects: [c]add_regular_district[/c], [c]remove_district[/c], [c]upgrade_this_building[/c], [c]downgrade_this_building[/c], [c]remove_this_building[/c], [c]build_or_upgrade_random_district_building[/c] and [c]set_as_duchy_capital = yes[/c].
Removing premium slots: [c]remove_special_district_slot[/c], [c]remove_great_district_slot[/c] and [c]remove_entrepot_district_slot[/c], all [c]= yes[/c].
For example, this trigger looks for a villages, market or port district with room for another building:
[c]any_built_regular_district = {[/c]
[c] OR = {[/c]
[c] district_type = district_type:villages_district[/c]
[c] district_type = district_type:market_district[/c]
[c] district_type = district_type:port_district[/c]
[c] }[/c]
[c] free_building_slots > 0[/c]
[c]}[/c]
All roads lead to Rome. Unless you mod them to lead to Stockholm!
Both the flavorful trade caravans and planned Trade Routes travel along them, and roads climb from tier 0 to tier 5 over time as trade passes through.
Roads live in common/roads/road_types. A road has a starting tier and an ordered list of provinces, and both ends must be market capitals:
[c]albi_to_toulouse_road = {[/c]
[c] tier = 1[/c]
[c] provinces = {[/c]
[c] 2015 #MONTPELLIER[/c]
[c] 2218 #CEVENNES[/c]
[c] 2219 #LODEVE[/c]
[c] 2215 #ALBI[/c]
[c] 2214 #TOULOUSE[/c]
[c] }[/c]
[c]}[/c]
Sea roads are the same, with [c]spline_asset_id = 1[/c] and sea zones in between:
[c]bal_solbin_to_myeongju_sea_road = {[/c]
[c] tier = 0[/c]
[c] spline_asset_id = 1[/c]
[c] provinces = {[/c]
[c] 11913 #EMAN_HUAZHOU[/c]
[c] 12583 #SEA_JAPAN_BASIN[/c]
[c] 12584 #SEA_JAPAN_BASIN[/c]
[c] 12585 #SEA_JAPAN_BASIN[/c]
[c] 9858 #GORYEO_DONGGYE_MYEONGJU[/c]
[c] }[/c]
[c]}[/c]
A road gains tiers over time as trade routes use it, and drops a tier after 24 months with no traffic. The time and number of required trade routes per tier are set in NRoad defines.
What each tier gives is set in [c]common/roads/road_modifiers[/c]. Each tier can provide many things. Well, five things, and only to land roads:
modifier for the road itself
province_modifier for the provinces it passes through
[c]trade_route_modifier[/c] for trade routes that follow it
[c]travel_modifier[/c] for characters travelling along it
[c]character_modifier[/c] for armies moving along it (only [c]movement_speed[/c] do anything here)
[c]road_modifiers_default = {[/c]
[c] tier_3 = {[/c]
[c] province_modifier = {[/c]
[c] monthly_commerce_tax = 0.3[/c]
[c] travel_danger = -6[/c]
[c] province_size_baseline_add = 10[/c]
[c] }[/c]
[c] trade_route_modifier = {[/c]
[c] trade_route_length_mult = 0.15[/c]
[c] }[/c]
[c] travel_modifier = { travel_speed_mult = 0.15 }[/c]
[c] character_modifier = { movement_speed = 0.15 }[/c]
[c] }[/c]
[c]}[/c]
[c]road_modifiers_default[/c] covers every road by default, and the game needs it to exist. But if you want, you could also give specific roads their own bonuses, add a new entry with [c]type = { your_road_key ... }[/c] and those road keys will use this set of modifiers instead. A province only gets the modifiers of the highest-tier road through it.
Roads are also scopes, with some neat script additions;
Lists: [c]road_province[/c] (from a road), [c]road_on_route[/c] (from a trade route) and [c]road_in_province[/c] (from a province), with the usual [c]any_[/c], [c]every_[/c], [c]random_[/c] and [c]ordered_[/c] forms
Trigger and effect: [c]road_tier[/c] and [c]set_road_tier[/c]
Timed modifiers: [c]add_road_modifier[/c], [c]remove_road_modifier[/c], [c]has_road_modifier[/c] and friends
Example:
[c]every_road_in_province = {[/c]
[c] limit = { road_tier < 3 }[/c]
[c] set_road_tier = 3[/c]
[c]}[/c]
There are also two new modifiers for [c]armies[/c], [c]province_movement_speed[/c] and [c]county_movement_speed[/c]. They speed up any land army in that province or county, road or no road.
The look of a road comes from [c]gfx/map/spline_network/spline_styles[/c], picked by the terrain it passes through:
[c]dirtroad_sand = {[/c]
[c] id = 2[/c]
[c] terrain_types = { desert desert_mountains oasis }[/c]
[c] spline = { ... }[/c]
[c] effect = {[/c]
[c] shaderfile = "gfx/FX/spline_network_shaders/road_mulpass.shader"[/c]
[c] texture_set = {[/c]
[c] texture = { file = "gfx/map/spline_network/variants/road_sand_diffuse.dds" }[/c]
[c] ...[/c]
[c] }[/c]
[c] }[/c]
[c] connections = none[/c]
[c]}[/c]
A new style file is purely additive. Its textures must use the same format as the default dirt road's, styles listed by terrain need [c]connections = none[/c], and ids should stay compact. Width per tier comes from the [c]ROAD_TIER_WIDTH[/c] graphics define, and tier 0 roads are not drawn at all.
The flavorful caravans and ships that move along roads are defined in [c]gfx/map/spline_network/trade_route_entities[/c]:
[c]trade_caravan_basic = {[/c]
[c] valid_spline_types = { "dirtroad" }[/c]
[c] speed = 0.6[/c]
[c] max_count = 50[/c]
[c] possible = {[/c]
[c] always = yes[/c]
[c] }[/c]
[c] tags = {[/c]
[c] chinese = {[/c]
[c] trigger = {[/c]
[c] culture = { has_clothing_gfx = chinese_clothing_gfx }[/c]
[c] }[/c]
[c] }[/c]
[c] ...[/c]
[c] }[/c]
[c] ...[/c]
[c]}[/c]
possible is checked against the route's owner.
If you make map mods or total conversions, this part is for you.
Road data is never generated automatically. You need to write [c]road_types[/c] yourself, with both ends on your market capitals. Without roads, trade routes can't connect markets.
Generating shapes. Start the game with [c]-debug_mode[/c] and run [c]SplineNetwork.AppendAssets[/c] in the console; editing a [c]road_types[/c] file while the game runs does the same. It generates the missing shapes and saves the whole network to your Documents folder.
Move that file into your mod at the same path (don't leave a copy behind). Because while it's there it will override the game's spline network, even after updates.
For a total conversion, run [c]SplineNetwork.ClearAssets[/c] confirm first, so you don't keep base-game shapes for province IDs your map reuses.
Hand-tuning. To adjust shapes, start the game with [c]-mapeditor[/c], tweak the roads with the spline tools and save. That writes a new [c]spline_network.splnet[/c] you can bundle with your mod.
One file per map. The .splnet is a single binary file, so two map mods can't merge theirs.
Road shapes are generated automatically. The shape of each road segment comes from [c]gfx/map/spline_network/spline_network.splnet[/c]. When you run the map editor, with tweaked roads, it should save you a new [c]spline_network.splnet[/c] file which you can bundle with your mod.
Baking and hand-tuning. Start the game with [c]-debug_mode[/c] and run [c]SplineNetwork.AppendAssets[/c] in the console. It writes a new .splnet to your user directory, which you then move into your mod. For a total conversion, run [c]SplineNetwork.ClearAssets[/c] confirm first so your roads don't start from vanilla's positions.
[c]not_parameter[/c] on culture and rite modifiers. Traits, court positions and lifestyle perks could already give a modifier when a culture or rite has a parameter. Now they can also give one when it doesn't:
[c]culture_modifier = {[/c]
[c] diplomacy = 5[/c]
[c] not_parameter = can_blind_prisoners[/c]
[c]}[/c]
AI frequency per government. Character interactions can now set a different AI frequency for one government type, instead of you duplicating the interaction:
[c]ai_frequency_by_tier_government_override = {[/c]
[c] government = merchant_government[/c]
[c] barony = 0[/c]
[c] county = 36[/c]
[c] duchy = 0[/c]
[c] kingdom = 0[/c]
[c] empire = 0[/c]
[c] hegemony = 0[/c]
[c]}[/c]
Region modifiers. Geographical regions can now carry a [c]province_modifier[/c], applied to every province in the region, and a [c]county_modifier[/c], applied to every county whose capital is in it:
[c]province_modifier = {[/c]
[c] supply_limit = 500[/c]
[c]}[/c]
[c]county_modifier = {[/c]
[c] popular_opinion_add = 50[/c]
[c]}[/c]
Betrothals in character history. No more [c]effect = { }[/c] blocks for this. History now has [c]create_betrothal[/c], create_betrothal_matrilineal and [c]break_betrothal[/c], and they are checked at load:
[c]1178.1.1 = {[/c]
[c] create_betrothal = 212044[/c]
[c]}[/c]
Rival situation groups. A situation participant group can name its opposite and an opinion penalty between them. The new [c]is_in_opposite_participant_group[/c] trigger checks it:
[c]opposite_participant_group = {[/c]
[c] guelph_member guelph_leader[/c]
[c]}[/c]
[c]opposite_participant_group_opinion = -30[/c]
House aspirations that level themselves. With [c]automatic_levels = yes[/c], an aspiration moves up and down on its own as requirements are met or lost, and costs nothing to upgrade.
Title-based confederations. [c]confederation_base[/c] replaces [c]house_based_confederation[/c] and can now be character, house or title. Trade leagues use titles, so their members are titles rather than characters:
[c]trade_league = {[/c]
[c] diplomatic_icon_frame_index = 6[/c]
[c] confederation_base = title[/c]
[c] ...[/c]
[c]}[/c]
Ready-made decision pickers. By God Alone's dynamic decision options now have four more widgets: [c]decision_view_widget_select_building[/c], [c]_trade_market[/c], [c]_trade_route[/c] and [c]_trade_good_category[/c]. A decision can ask the player to pick one of these without any new GUI.
Silk and Silver pretty much entirely reworks the economy your mod is built on, so expect some breakage. Here’s some hopefully helpful information regarding things that were renamed or otherwise changed.
Old
New
[c]development_level[/c], [c]development_rate[/c], [c]development_towards_level_increase[/c]
[c]prosperity_level[/c], [c]prosperity_rate[/c], [c]prosperity_towards_level_increase[/c]
[c]change_development_level[/c], [c]change_development_progress[/c]
[c]change_prosperity_level[/c], [c]change_prosperity_progress[/c]
[c]development_growth[/c], [c]development_decline[/c] modifiers (and [c]_factor[/c])
[c]prosperity_growth[/c], [c]prosperity_decline[/c] (and [c]_factor[/c])
[c]
[c]
[c]Government affected_by_development[/c]
[c]affected_by_prosperity[/c]
[c]Region generate_modifiers[/c]
[c]generate_prosperity_modifiers[/c]
[c]Map mode county_development[/c]
[c]county_prosperity[/c]
Old
New
[c]county_opinion[/c], [c]county_holder_opinion[/c]
[c]popular_opinion[/c], [c]base_popular_opinion[/c]
*[c]county_opinion[/c]* modifiers
*[c]popular_opinion[/c]* modifiers
[c]monthly_county_control_growth[/c] and [c]_decline[/c], as triggers and modifiers
Removed. Control now moves toward a baseline: use [c]county_control_baseline[/c], [c]control_baseline_add[/c] and [c]monthly_control_change[/c]
There are now eleven tax categories: generic, agricultural, mining, religious, urban, artisan, maritime, tribal, civic, woodland and commerce. Each has a province [c]monthly_
Old
New
[c]tax_mult[/c]
[c]all_tax_mult[/c], or [c]generic_tax_mult[/c] for the generic category only
[c]tax_per_piety_level[/c]
[c]generic_tax_per_piety_level[/c]
[c]monthly_income[/c] as a province modifier
[c]monthly_generic_tax[/c], or another category
[c]monthly_income[/c] as a province trigger
[c]total_monthly_tax_income[/c]
If your mod adds or edits buildings, this is the big one.
Holdings. [c]primary_building[/c] and buildings are replaced by [c]primary_district[/c] and districts.
Building type is gone. A building gets its slot from the district that lists it. A special building now needs a small district around it with [c]type = special[/c], and [c]rebuild_cost[/c] and [c]can_rebuild[/c] move from great buildings to great districts.
Localization. A building's name is now [c]
[/c] instead of [c]building_ [/c], and its description is [c] _desc[/c] instead of [c]building_ _desc[/c]. Scope. [c]add_building[/c], [c]remove_building[/c] and the other building effects now run in district scope instead of province scope.
Old
New
[c]add_special_building[/c], [c]add_special_building_slot[/c]
[c]add_special_district[/c], [c]add_special_district_slot[/c]
[c]add_great_building[/c], [c]set_great_building[/c] (and [c]_slot[/c])
[c]add_great_district[/c], [c]set_great_district[/c] (and [c]_slot[/c])
[c]ruin_great_building[/c], [c]rebuild_great_building[/c]
[c]ruin_great_district[/c], [c]rebuild_great_district[/c]
[c]has_special_building[/c], [c]has_great_building[/c] (and _slot)
[c]has_special_district[/c], [c]has_great_district[/c] (and [c]_slot[/c])
[c]has_ruined_great_building[/c]
[c]has_ruined_great_district[/c]
[c]has_ongoing_construction[/c]
[c]has_ongoing_holding_construction[/c] or [c]has_ongoing_trade_post_construction[/c]
[c]has_free_building_slot[/c] in province scope
[c]has_free_district_slot[/c]. [c]has_free_building_slot[/c] now runs in district scope
[c]special_building_province list[/c]
[c]special_district_province[/c]
[c]on_great_building_rebuilt[/c]
[c]on_great_district_rebuilt[/c]
[c]History special_building_slot[/c]
[c]special_district_slot[/c]
History buildings, [c]special_building[/c], [c]duchy_capital_building[/c]
[c]districts = { district = { ... } }[/c]
Old
New
Trigger [c]house_power[/c]
[c]house_power_score[/c]
Confederation house_based_confederation
[c]confederation_base[/c]
Government [c]administrative_title_maa_setup[/c]
[c]title_maa_setup[/c], which no longer has a default
Scripted rule [c]approves_of_succession_law_change[/c]
[c]approves_of_law_change[/c]
Scripted trigger [c]is_governor[/c], script value [c]governor_efficiency[/c]
Now built into the code for performance reasons. Your script can still use them, but mods that redefined them should use the new [c]governor_efficiency_[/c]* modifiers instead
Hello again, I'm the UGC Engineer, CrimsonKepler, with an update on modding improvements unrelated to Silk & Silver's new mechanics. We've continued the work on modding improvements in the UGCx team, working closely with the Creator Program, and in the time between the release of By God Alone and now, we've implemented some long suggested improvements, all of which are coming in the free update accompanying Silk & Silver.
Many triggers and effects that previously only worked with hardcoded values have been updated to be able to also take scopes. The effects for creating a dynamic title with a domicile (the 3 specific ones [c]create_nomad_title[/c], [c]create_adventurer_title[/c], [c]give_noble_family_title[/c] and the general one [c]create_domicile_title[/c]) can now take a government type scope. The aptitude compare trigger on characters now takes a court position type scope, so no more need to loop through all types to find the one that matches a saved scope. [c]start_war[/c], [c]ai_start_best_war[/c] and has_cb_on have been updated to work with scoped CBs. In addition to the listed examples and some other effects and triggers now being able to take scopes, scopes themselves have been expanded to include men at arms type as a new scopable type, to allow effects like [c]spawn_army[/c] and [c]create_maa_regiment[/c] to be used without hardcoding a type.
The new roads mechanic naturally brings with it movement speed modifiers for roads as explained above. But we’ve also added new modifier types, [c]province_movement_speed[/c] and [c]county_movement_speed[/c], to allow mods to make things that aren’t roads, like buildings and timed modifiers, also modify movement speed in a barony or whole county. On the topic of modifiers, we’ve also added the ability to display and compare the summed value for any modifier type on any character, with the [c]modifier_value[/c] compare trigger and [c]GetModiferValue[/c] data function for the GUI. So mods will now be able to mess around with modifiers to a greater extent than vanilla does anywhere.
But the largest improvement is probably the addition of Variable Maps, a feature first made for EU5 and then backported to Victoria 3. We’ve now done the work to make it work on CK3 as well, despite the game’s older engine version. It lets you save and use maps of key-value pairs on scopes (or globally), allowing for data that models more complex relations than simple variables and lists can to be written and read. The Tinto Talks that originally introduced this feature for Europa Universalis V explains it in further detail.
We’ve made more changes in varied areas of the game to improve them for modding, but to not make this dev diary any longer than it already is, I’ll let those remain a mystery until you all get your hands on the changelog.
