• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.

TheGib770

Localization Specialist
88 Badges
Jan 12, 2015
268
488
discord.gg
  • Crusader Kings III
  • Victoria 3 Sign Up
  • Hearts of Iron IV: By Blood Alone
  • Hearts of Iron IV: No Step Back
  • Hearts of Iron 4: Arms Against Tyranny
  • Europa Universalis IV
  • Crusader Kings II
  • Victoria 2
  • Imperator: Rome Deluxe Edition
  • Cities: Skylines Deluxe Edition
  • Sengoku
  • Hearts of Iron III Collection
  • Stellaris
Hello, I am TheGib770 of the Community Title Project. Due to the holidays slowing our mod completion, I wanted to write a guide for other modders on how to get the most out of the falvorization system. We will also list a priority guide for other mods to be more compatible with each other. While we may not be the largest mod, I feel as though knowing a standard system will be helpful for the years to come.

Thanks to fellow CTP member Necro and the CK3 Modding Co-op discord for helping us find out how some things work. Also thanks to Azarias59 as I’ve been helping out with porting his ck2 mod Rank and File over to Ck3. Anything we find out will be in later GUI lessons.


ROYAL COURT CHANGED CULTURES TO NAME LISTS AND GROUPS TO HERITAGE
PICTURES WILL NOT BE UPDATED TO REFLECT THIS!



The first lesson will go over the falvorization files themselves.

The files are located in Crusader Kings III\game\common\flavorization and you will be placing your new mod files in MOD\common\flavorization. The best thing is that you do NOT need to use the base game files or over write them, using the priority command in your new mod file (ex 00_MOD_flavor.txt) you can easily ignore base game files.

In the base game file 00_flavorization.txt there are some rules listed at the top of the file. Here is a rule that isn’t listed. Unlanded characters can not benefit from the system unless they fit conditions linked to the command special =. Therefore flavor is always linked to a holder. Queen mother is only Queen mother if their son/daughter is a holder. Prince and Princesses however, keep their title if their family is deposed as long as their dead parent died holding a relevant landed title.


Usable functions:

Code:
type =
Can use character or title which would apply the flavor to a character or title, pretty self explanatory. Title types can’t use gender = or special = functions. NEEDS to be defined
Code:
gender =
male or female, spouse will use the other gender is so defined.
Code:
special =
ruler_child (prince or princesses), queen_mother, councilor, head_of_faith, and holder. This has to be defined for character types, holder is the most prevalent.
Code:
tier =
barony, county, duchy, kingdom, or empire. Not needed, but will apply to every tier listed if not defined.
Code:
priority =
Any number, allows characters to keep certain special titles like prince if holding a lower priority title. Guide below.
Code:
name_lists = { }
Use any defined name_list keys in your mod. ex name_list_anglo_saxon
Code:
heritages = { }
Use any defined heritages keys in your mod. ex heritage_north_germanic
Code:
religions = { }
Use any defined religion group keys in your mod. ex christianity_religion
Code:
faiths = { }
Use any defined faith keys in your mod. ex coptic
Code:
governments = { }
Use any government keys in your mod ex feudal_government
Code:
titles = { }
Use any landed title key. ex e_byzantium
Code:
council_position =
Use any defined council position. Requires special = councilor. ex councillor_court_chaplain
Code:
only_independent =
yes or no Will make title apply to only independent rulers like ‘Petty King.’ Defaults to no when not defined.
Code:
only_holder =
yes or no Spouse will no longer receive the opposite gender title. Good for mayors or female rulers, they will not receive the female spouse title. Defaults to no when not defined.
Code:
top_liege =
yes or no By default, the system will check the top liege to check for culture, religion, etc. By using top_liege = no, you can allow vassals with different religions/cultures to use their own title. Does NOT apply to spouse, they always get the opposite gender of the same conditions as the holder. Defaults to yes when not defined.


Example
1608750237300.png


After defining some flavor keys, you’ll need to localize them. Create a file MOD_flavor_l_LANGUAGE.yml in MOD/localization/LANGUAGE/culture. After added the obligatory UTF-8-BOM and l_LANGUAGE: at the top, just write out the localization similar to below.

1608750291196.png


Check your Results!
1608750337396.png


Remember you can use ruler_child and queen_mother for any tier, allowing you to create a quasi ‘Lord’ title for noble members.



Future lessons will be going over custom localization for special conditions not in base flavorization and GUI modding to change name formatting and create flavor for unlanded characters.




CTP's PRIORITY GUIDE:

Tiers:
Code:
Barony = 100
County = 110
Duchy = 120
Kingdom = 140
Empire = 150

Special for queen mother and ruler children:
Code:
If holder is…
A Emperor = 150
A King = 130
A Duke = 120
A Count = 110

Conditions:
Code:
[government]    : priority + 1
[heritages] : priority + 1
[name_lists]       : priority + 2
                     (or)
                  priority + 1 if [culture_group] is already specified
[religion]      : priority + 1
[faith]         : priority + 2
                     (or)
                  priority + 1 if [religion] is already specified
[independent]   : priority + 1
[only_holder]   : priority + 1 if there is a non-holder type defined, otherwise no changes

Examples:
Code:
baron_[government_type] : 101
baron_[government_type]_[heritage] : 102
baron_[government_type]_[heritage]_[name_list] : 103
baron_[government_type]_[name_list] : 103
baron_[government_type]_[religions] : 102 
baron_[government_type]_[religions]_[faith] : 103
baron_[government_type]_[faith] : 103
baron_[government_type]_[independent] : 102
baron_[government_type]_[name_list]_[faith]_[independent] : 106

Feel free to set high priority for head of faith titles or wiggle around in space in-between tiers. If priority is the same, last defined goes up. You can also overwrite same priority by placing your mod below in the load order.
 

Attachments

  • 1608750248793.png
    1608750248793.png
    84,5 KB · Views: 0
Last edited:
  • 13Like
  • 4
  • 1Love
Reactions:
Using Custom Localization
Hello again. While flavorization has expanded what you can localize for many characters, the use is still somewhat limited. Sometimes you’ll want to use other triggers that aren’t available through basic flavorization or you’ll want to use more priority space. Fear not, you can use custom localization to extended localization!

I’ll be using CTP’s Irish Kings and Kingdoms localization as the example today, I will also be showing our mod’s most complex custom loc at the end so you can see what you can do with it.


Here is the started flavorization:
Code:
king_male_goidelic_group = {
    type = character
    gender = male
    special = holder
    priority = 142
    tier = kingdom
    heritages = { heritage_goidelic }
    governments = { feudal_government clan_government tribal_government }
    top_liege = no
}
king_female_goidelic_group = {
    type = character
    gender = female
    special = holder
    priority = 142
    tier = kingdom
    heritages = { heritage_goidelic }
    governments = { feudal_government clan_government tribal_government }
    top_liege = no
}
kingdom_goidelic_group = {
    type = title
    tier = kingdom
    priority = 142
    heritages = { heritage_goidelic }
    governments = { feudal_government clan_government tribal_government }
    top_liege = no
}

First we are going to set up a custom loc file under MOD\common\customizable_localization. Ours is 00_ctp_kingdom.txt. Make sure it’s UTF-8 BOM!

Now we start each custom loc we want to call with a namespace. Let’s keep it simple shall we.


Code:
KingMaleGoidelic = {
KingFemaleGoidelic = {
KingdomGoidelic = {

For the type, every custom loc used in flavorization is character type. In the last lesson I mentioned that all flavor titles are linked to the holder, including the landed title.


Code:
KingdomGoidelic = {
    type = character

Now we want to set up the conditions for Sultans and Sultanates. With CTP, we decided the tenet ‘Struggle and Submission’ is the best fit for it.

Important requirements are text = { for each new localization, trigger = { for the set of conditions and localization_key = { which will be your… new localization key.


Code:
KingdomGoidelic = {
    type = character
    text = {
        trigger = {
            is_independent_ruler = yes
            root.faith = {
                has_doctrine = tenet_struggle_submission
            }
        }
        localization_key = sultanate_goidelic
    }
}

Now this is fine for landed titles, but remember to include a spousal condition for your actual characters. exist = { is not needed for spouses, but you'll create errors in the log.

Code:
KingMaleGoidelic = {
    type = character
    text = {
        trigger = {
            OR = {
                AND = {
                    is_independent_ruler = yes
                    root.faith = {
                        has_doctrine = tenet_struggle_submission
                    }
                }
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        is_independent_ruler = yes
                        faith = {
                            has_doctrine = tenet_struggle_submission
                        }
                    }
                }
            }
        }
        localization_key = sultan_male_goidelic
    }
}

After setting up your conditional localization, I will recommend you set a fallback adding as the last text.

Code:
text = {
    fallback = yes
    localization_key = king_default_male_goidelic
}

1609004527727.png


Now that we have conditions set, we will what to set all our flavor keys to call the custom loc. I will going over why we use this function in a later lesson, but for now most people can just remember this:
YAML:
flavor_key:0 "[CHARACTER.Custom(‘CustomLocKey’)]"
Under this you can set the actual localization for your new keys.
YAML:
king_male_goidelic_group:0 "[CHARACTER.Custom('KingMaleGoidelic')]"
king_female_goidelic_group:0 "[CHARACTER.Custom('KingFemaleGoidelic')]"
kingdom_goidelic_group:0 "[CHARACTER.Custom('KingdomGoidelic')]"
sultan_male_goidelic:0 "Sabdán"
sultan_female_goidelic:0 "Bansabdán"
sultanate_goidelic:0 "Sabdánacht"
king_default_male_goidelic:0 "Ardrí"
king_default_female_goidelic:0 "Ardrígan"
kingdom_default_goidelic:0 "Ardrígdacht"

Perfecto!

With custom loc you can not only use other triggers, the order of conditions sets a new priority top to bottom as well. Let’s say you want another title that effects both Christians and Muslims, you can set it above the sultan text = { to make it come first.

You can also use it to over ride independent duchy names when the holder is a king or above like so:

Code:
GaelicIndepDuchy = {
    type = character
    text = {
        trigger = {
            highest_held_title_tier >= tier_kingdom
        }
        localization_key = duchy_default_gaelic # flavor title for duchies
    }
    text = {
        fallback = yes
        localization_key = independent_duchy_gaelic
    }
}
YAML:
duchy_feudalclan_gaelic_independent:0 "[CHARACTER.Custom('GaelicIndepDuchy')]"
independent_duchy_gaelic:0 "Rígdacht"
duchy_default_gaelic:0 "Ardtiarnas"

Now for the complex example. I won’t be going over it but you’ll get to see what you can do. All of this is to allow dukes to have contract based titles, the ability to acquire the prince title in the HRE, HRE electorship titles, and titles for the Byzantine Theme system.
Code:
DukeMaleSicilian = {
    type = character
    text = {
        trigger = {
            exists = liege
            liege.primary_title = {
                has_title_law = princely_elective_succession_law
                any_elector = {
                    this = root
                }
            }
        }
        localization_key = kurfurst_male_sicilian
    }
    text = {
        trigger = {
            exists = primary_spouse
            root.primary_spouse = {
                exists = liege
                liege.primary_title = {
                    has_title_law = princely_elective_succession_law
                    any_elector = {
                        this = root.primary_spouse
                    }
                }
            }
        }
        localization_key = duke_male_sicilian_independent
    }
    text = {
        trigger = {
            OR = {
                vassal_contract_has_flag = has_march_contract
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        vassal_contract_has_flag = has_march_contract
                    }
                }
            }
        }
        localization_key = marquess_male_sardinian
    }
    text = {
        trigger = {
            OR = {
                vassal_contract_has_flag = has_palatinate_contract
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        vassal_contract_has_flag = has_palatinate_contract
                    }
                }
            }
        }
        localization_key = palatine_male_sardinian
    }
    text = {
        trigger = {
            root.top_liege = {
                has_primary_title = title:e_byzantium
            }
        }
        localization_key = byzantine_duke_male_sardinian
    }
    text = {
        trigger = {
            OR = {
                AND = {
                    exists = liege
                    liege.primary_title = {
                        has_title_law = princely_elective_succession_law
                    }
                    OR = {
                        AND = {
                            has_realm_law = crown_authority_1
                            liege = {
                                NOR = {
                                    has_realm_law = crown_authority_1
                                    has_realm_law = crown_authority_2
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                        AND = {
                            has_realm_law = crown_authority_2
                            liege = {
                                NOR = {
                                    has_realm_law = crown_authority_2
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                        AND = {
                            has_realm_law = crown_authority_3
                            liege = {
                                NOT = {
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                    }
                }
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        exists = liege
                        liege.primary_title = {
                            has_title_law = princely_elective_succession_law
                        }
                        OR = {
                            AND = {
                                has_realm_law = crown_authority_1
                                liege = {
                                    NOR = {
                                        has_realm_law = crown_authority_1
                                        has_realm_law = crown_authority_2
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                            AND = {
                                has_realm_law = crown_authority_2
                                liege = {
                                    NOR = {
                                        has_realm_law = crown_authority_2
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                            AND = {
                                has_realm_law = crown_authority_3
                                liege = {
                                    NOT = {
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        localization_key = duke_male_sicilian_independent
    }
    text = {
        localization_key = duke_default_male_sardinian
        fallback = yes
    }
}
DukeFemaleSicilian = {
    type = character
    text = {
        trigger = {
            exists = liege
            liege.primary_title = {
                has_title_law = princely_elective_succession_law
                any_elector = {
                    this = root
                }
            }
        }
        localization_key = kurfurst_female_sicilian
    }
    text = {
        trigger = {
            exists = primary_spouse
            root.primary_spouse = {
                exists = liege
                liege.primary_title = {
                    has_title_law = princely_elective_succession_law
                    any_elector = {
                        this = root.primary_spouse
                    }
                }
            }
        }
        localization_key = duke_female_sicilian_independent
    }
    text = {
        trigger = {
            OR = {
                vassal_contract_has_flag = has_march_contract
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        vassal_contract_has_flag = has_march_contract
                    }
                }
            }
        }
        localization_key = marquess_female_sardinian
    }
    text = {
        trigger = {
            OR = {
                vassal_contract_has_flag = has_palatinate_contract
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        vassal_contract_has_flag = has_palatinate_contract
                    }
                }
            }
        }
        localization_key = palatine_female_sardinian
    }
    text = {
        trigger = {
            root.top_liege = {
                has_primary_title = title:e_byzantium
            }
        }
        localization_key = byzantine_duke_female_sardinian
    }
    text = {
        trigger = {
            OR = {
                AND = {
                    exists = liege
                    liege.primary_title = {
                        has_title_law = princely_elective_succession_law
                    }
                    OR = {
                        AND = {
                            has_realm_law = crown_authority_1
                            liege = {
                                NOR = {
                                    has_realm_law = crown_authority_1
                                    has_realm_law = crown_authority_2
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                        AND = {
                            has_realm_law = crown_authority_2
                            liege = {
                                NOR = {
                                    has_realm_law = crown_authority_2
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                        AND = {
                            has_realm_law = crown_authority_3
                            liege = {
                                NOT = {
                                    has_realm_law = crown_authority_3
                                }
                            }
                        }
                    }
                }
                AND = {
                    exists = primary_spouse
                    root.primary_spouse = {
                        exists = liege
                        liege.primary_title = {
                            has_title_law = princely_elective_succession_law
                        }
                        OR = {
                            AND = {
                                has_realm_law = crown_authority_1
                                liege = {
                                    NOR = {
                                        has_realm_law = crown_authority_1
                                        has_realm_law = crown_authority_2
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                            AND = {
                                has_realm_law = crown_authority_2
                                liege = {
                                    NOR = {
                                        has_realm_law = crown_authority_2
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                            AND = {
                                has_realm_law = crown_authority_3
                                liege = {
                                    NOT = {
                                        has_realm_law = crown_authority_3
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        localization_key = duke_female_sicilian_independent
    }
    text = {
        localization_key = duke_default_female_sardinian
        fallback = yes
    }
}
DuchySicilian = {
    type = character
    text = {
        trigger = {
            highest_held_title_tier = tier_duchy
            is_male = yes
            exists = liege
            liege.primary_title = {
                has_title_law = princely_elective_succession_law
                any_elector = {
                    this = root
                }
            }
        }
        localization_key = kurfurstdom_male_sicilian
    }
    text = {
        trigger = {
            highest_held_title_tier = tier_duchy
            is_male = no
            exists = liege
            liege.primary_title = {
                has_title_law = princely_elective_succession_law
                any_elector = {
                    this = root
                }
            }
        }
        localization_key = kurfurstdom_female_sicilian
    }
    text = {
        trigger = {
            vassal_contract_has_flag = has_march_contract
        }
        localization_key = march_sardinian
    }
    text = {
        trigger = {
            vassal_contract_has_flag = has_palatinate_contract
        }
        localization_key = palatinate_sardinian
    }
    text = {
        trigger = {
            root.top_liege = {
                has_primary_title = title:e_byzantium
            }
        }
        localization_key = byzantine_duchy_sardinian
    }
    text = {
        trigger = {
            highest_held_title_tier = tier_duchy
            exists = liege
            liege.primary_title = {
                has_title_law = princely_elective_succession_law
            }
            OR = {
                AND = {
                    has_realm_law = crown_authority_1
                    liege = {
                        NOR = {
                            has_realm_law = crown_authority_1
                            has_realm_law = crown_authority_2
                            has_realm_law = crown_authority_3
                        }
                    }
                }
                AND = {
                    has_realm_law = crown_authority_2
                    liege = {
                        NOR = {
                            has_realm_law = crown_authority_2
                            has_realm_law = crown_authority_3
                        }
                    }
                }
                AND = {
                    has_realm_law = crown_authority_3
                    liege = {
                        NOT = {
                            has_realm_law = crown_authority_3
                        }
                    }
                }
            }
        }
        localization_key = independent_duchy_sicilian
    }
    text = {
        localization_key = duchy_default_sardinian
        fallback = yes
    }
}
YAML:
duke_male_sicilian:0 "[CHARACTER.Custom('DukeMaleSicilian')]"
duke_female_sicilian:0 "[CHARACTER.Custom('DukeFemaleSicilian')]"
duchy_sicilian:0 "[CHARACTER.Custom('DuchySicilian')]"
kurfurst_male_sicilian:0 "Principi Eletturi"
kurfurst_female_sicilian:0 "Principissa Elettrici"
kurfurstdom_male_sicilian:0 "Principi Elettoratu"
kurfurstdom_female_sicilian:0 "Principissa Elettoratu”
duke_male_sicilian_independent:0 "Principi"
duke_female_sicilian_independent:0 "Principissa"
independent_duchy_sicilian:0 "Principatu"
#Same as Sardinian
marquess_male_sardinian:0 "Marchesi"
marquess_female_sardinian:0 "Marchesa"
march_sardinian:0 "Marca"
palatine_male_sardinian:0 "Palatinu"
palatine_female_sardinian:0 "Palatina"
palatinate_sardinian:0 "Palatinatu"
byzantine_duke_male_sardinian:0 "Strategi"
byzantine_duke_female_sardinian:0 "Strategissa"
byzantine_duchy_sardinian:0 "Thema"
duke_default_male_sardinian:0 "Duca"
duke_default_female_sardinian:0 "Duchissa"
duchy_default_sardinian:0 "Ducatu"
 
Last edited:
  • 6Like
  • 1
Reactions:
A councillor guide would be great, i can't get court chaplain flavour to work even though it should be the easiest, and my council flavour works for the most part but for a couple of positions the title displays as blank
 
A councillor guide would be great, i can't get court chaplain flavour to work even though it should be the easiest, and my council flavour works for the most part but for a couple of positions the title displays as blank
That's because Pdx made a stupid decision to refer to localizations of court chaplain and spouse directly in 00_council_positions.txt, so you'll have to override it.
 
Hi, thank you for your heartful lesson. Are there codes for Court Positions? I wish to give them some cool names. Also, how to override the chaplain's name? It seems to be bound with religions and my codes don't work. All other councillors' names are changed. Thank you!