CoA stuff and files

This commit is contained in:
edwardtheelbowhigh 2025-02-22 18:15:21 +00:00
parent 5668ff281e
commit bceefb1d50
17 changed files with 30982 additions and 0 deletions

View file

@ -447,6 +447,260 @@ d_lincoln={
}
d_leicester={
pattern="pattern_horizontal_split_01.dds"
color1=red
color2=red
color3=blue
colored_emblem={
color1=red
color2=red
color3=white
texture="ce_wolf_passant.dds"
instance={
position={ 0.500000 0.820000 }
scale={ 0.370000 0.280000 }
depth=2.010000
}
}
colored_emblem={
color1=red
color2=green_light
color3=red
texture="ce_flower.dds"
instance={
position={ 0.500000 0.320000 }
scale={ 0.160000 -0.160000 }
depth=1.010000
}
}
colored_emblem={
color1=white
texture="ce_cinquefoil.dds"
instance={
position={ 0.500000 0.320000 }
scale={ 0.090000 0.090000 }
}
}
colored_emblem={
color1=black
texture="ce_block_03.dds"
instance={
position={ 0.500000 0.320000 }
depth=7.010000
}
}
colored_emblem={
color1=yellow
texture="ce_block_04.dds"
instance={
position={ 0.500000 0.510000 }
depth=5.010000
rotation=90
}
instance={
position={ 0.500000 0.320000 }
depth=6.010000
}
}
colored_emblem={
color1=red
texture="ce_block_02.dds"
instance={
position={ 0.500000 0.910000 }
depth=9.010000
}
}
colored_emblem={
color1=white
texture="ce_fess_dancetty.dds"
instance={
position={ 0.500000 0.760000 }
depth=3.010000
}
instance={
position={ 0.500000 0.950000 }
depth=4.010000
}
}
colored_emblem={
color1=black
texture="ce_mena_fess.dds"
instance={
depth=8.010000
rotation=90
}
}
}
d_nottingham={
pattern="pattern_cross_02.dds"
color1=red
color2=blue_light
color3=red
colored_emblem={
color1=green
texture="ce_ordinary_cross_5.dds"
instance={
depth=5.010000
}
}
colored_emblem={
color1=blue_light
texture="ce_block_02.dds"
instance={
depth=7.010000
}
}
colored_emblem={
color1=white
texture="ce_ordinary_cross_4.dds"
instance={
depth=6.010000
}
}
colored_emblem={
color1=red
texture="ce_ordinary_cross_thinnest.dds"
instance={
depth=4.010000
}
}
colored_emblem={
color1=yellow
color2=green
color3=green
texture="ce_flower.dds"
instance={
scale={ 0.200000 0.200000 }
}
instance={
scale={ 0.360000 0.360000 }
depth=2.010000
}
}
colored_emblem={
color1=white
color2=white
texture="ce_shield_02.dds"
instance={
scale={ 0.430000 0.430000 }
depth=3.010000
}
}
colored_emblem={
color1=green
texture="ce_cinquefoil_02.dds"
instance={
scale={ 0.310000 0.310000 }
depth=1.010000
}
}
}
d_black_country={
pattern="pattern_vertical_split_01.dds"
color1=red
color2=yellow
color3=blue
colored_emblem={
color1=blue
texture="ce_block_02.dds"
instance={
position={ 1.000000 0.000000 }
scale={ 1.000000 0.370000 }
depth=1.010000
}
}
colored_emblem={
color1=white
texture="ce_ragged_staff.dds"
instance={
position={ 0.180000 0.460000 }
scale={ 0.560000 0.530000 }
depth=3.010000
rotation=89
}
}
colored_emblem={
color1=red
texture="ce_ordinary_chevron_5.dds"
instance={
position={ 0.720000 0.400000 }
scale={ 0.460000 0.460000 }
depth=2.010000
}
}
colored_emblem={
color1=white
color2=grey
color3=red
texture="ce_bear_rampant.dds"
instance={
position={ 0.360000 0.500000 }
scale={ 0.490000 0.490000 }
depth=4.010000
}
}
colored_emblem={
color1=yellow
color2=yellow
color3=yellow
texture="ce_leopard_passant_guardant.dds"
instance={
position={ 0.720000 0.100000 }
scale={ 0.470000 0.470000 }
}
}
}
d_buckingham={
pattern="pattern_tricolor_horizontal_01.dds"
color1=red

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,28 @@
################################
# DEBUG CULTURAL TRADITIONS #
################################
# Here as a container for parameters useful for modders.
tradition_debug = {
category = regional
layers = {
0 = intrigue
1 = mediterranean
4 = crown.dds
}
is_shown = { always = no }
can_pick = { always = no }
can_pick_for_hybridization = { always = no }
parameters = {
culture_can_raid_over_land_even_if_feudal = yes
culture_can_raid_at_sea_even_if_feudal_no_restrictions = yes
culture_can_raid_over_land_even_if_feudal_no_restrictions = yes
}
cost = { prestige = 300000 }
ai_will_do = { value = 0 }
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,545 @@
###########################
# FP1 CULTURAL TRADITIONS
###########################
#######################
# Norse Specific
#######################
tradition_fp1_coastal_warriors = {
category = combat
layers = {
0 = martial
1 = western
4 = viking.dds
}
is_shown = {
# DLC check.
has_fp1_dlc_trigger = yes
NOT = { has_cultural_tradition = tradition_hird }
has_cultural_pillar = heritage_north_germanic
}
can_pick = {
# Must be of a suitable heritage.
custom_tooltip = {
text = northern_germanic_heritage_trigger
has_cultural_pillar = heritage_north_germanic
}
# And have a coastal presence.
custom_description = {
text = culture_on_coast_desc
any_culture_county = {
any_county_province = {
is_coastal = yes
}
}
}
# Shouldn't be combined with the following traditions:
custom_tooltip = {
text = cannot_have_tradition_warrior_culture
NOT = { culture_tradition:tradition_warrior_culture = { is_in_list = traits } }
}
custom_tooltip = {
text = cannot_have_tradition_seafaring
NOT = { culture_tradition:tradition_seafaring = { is_in_list = traits } }
}
}
parameters = {
unlock_maa_bondi = yes
unlock_maa_vigmen = yes
unlock_maa_varangian_veterans = yes
unlock_maa_huscarls = yes
strong_traits_more_valued = yes
strong_traits_more_common = yes
trade_ports_stationed_maa_bonus = yes
trade_ports_enabled_for_tribals = yes
unlock_voluntary_laampdom = yes
more_likely_to_be_laamps = yes
}
character_modifier = {
sea_travel_danger = medium_sea_danger_reduction
coastal_sea_travel_danger = medium_sea_danger_reduction
taiga_provisions_use_mult = -0.1
forest_provisions_use_mult = -0.1
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
}
add = {
value = tradition_incompatible_ethos_penalty
desc = culture_not_bellicose
}
}
# Gotta be a heavily coastal culture not to get a surcharge.
if = {
limit = {
NOT = {
any_culture_county = {
percent >= 0.3
any_county_province = {
is_coastal = yes
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = coastal_percentage_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
NOT = {
scope:character = {
any_sub_realm_county = {
percent >= 0.3
any_county_province = {
is_coastal = yes
}
}
}
}
}
multiply = 0
}
}
}
tradition_fp1_performative_honour = {
category = societal
layers = {
0 = diplo
1 = western
4 = shieldmaiden.dds
}
is_shown = {
# DLC check.
has_fp1_dlc_trigger = yes
has_cultural_pillar = heritage_north_germanic
}
can_pick = {
# Must be of a suitable heritage.
custom_tooltip = {
text = northern_germanic_heritage_trigger
has_cultural_pillar = heritage_north_germanic
}
# Shouldn't be combined with the following traditions:
custom_tooltip = {
text = cannot_have_tradition_fp1_trials_by_combat
NOT = { culture_tradition:tradition_fp1_trials_by_combat = { is_in_list = traits } }
}
custom_tooltip = {
text = cannot_have_tradition_fp1_the_right_to_prove
NOT = { culture_tradition:tradition_fp1_the_right_to_prove = { is_in_list = traits } }
}
}
parameters = {
has_access_to_shieldmaidens = yes
has_access_to_trials_by_combat = yes
craven_trait_costs_prestige = yes
weak_traits_looked_down_upon = yes
}
character_modifier = {
knight_limit = 1
accolade_glory_gain_mult = 0.1
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOT = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_desc
}
}
if = {
limit = {
NOT = {
scope:character = {
any_courtier = {
count >= 5
prowess >= 10
is_adult = yes
NOT = { can_be_knight_trigger = { ARMY_OWNER = prev } }
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = courtiers_with_prowess_who_cant_be_knight_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = { value = 100 }
}
tradition_fp1_northern_stories = {
category = societal
layers = {
0 = diplo
1 = western
4 = runestone.dds
}
is_shown = {
# DLC check.
has_fp1_dlc_trigger = yes
has_cultural_pillar = heritage_north_germanic
}
can_pick = {
# Must be of a suitable heritage.
custom_tooltip = {
text = northern_germanic_heritage_trigger
has_cultural_pillar = heritage_north_germanic
}
# Shouldn't be combined with the following traditions:
custom_tooltip = {
text = cannot_have_tradition_runestones
NOT = { culture_tradition:tradition_runestones = { is_in_list = traits } }
}
custom_tooltip = {
text = cannot_have_tradition_poetry
NOT = { culture_tradition:tradition_poetry = { is_in_list = traits } }
}
custom_tooltip = {
text = cannot_have_tradition_storytellers
NOT = { culture_tradition:tradition_storytellers = { is_in_list = traits } }
}
}
parameters = {
has_access_to_runestones = yes
poet_trait_gives_bonuses = yes
poet_trait_more_common = yes
better_ward_education = yes
tells_stories = yes
}
character_modifier = {
owned_scheme_secrecy_add = -15
owned_legend_spread_mult = 0.1
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_or_bureaucratic_desc
}
}
if = {
limit = {
trigger_if = {
limit = {
scope:character = {
is_ai = no
}
}
NOT = {
any_ruler = {
count >= 3
culture = prev
primary_title.tier >= tier_county
has_trait = poet
}
}
}
trigger_else = {
always = no
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = rulers_with_poet_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = { value = 100 }
}
#######################
# Generic
#######################
tradition_fp1_trials_by_combat = {
category = societal
layers = {
0 = intrigue
1 = western
4 = fight.dds
}
is_shown = {
# DLC check.
has_fp1_dlc_trigger = yes
has_cultural_pillar = heritage_north_germanic
}
can_pick = {
custom_tooltip = {
text = cannot_have_tradition_fp1_performative_honour
NOT = { culture_tradition:tradition_fp1_performative_honour = { is_in_list = traits } }
}
}
parameters = {
has_access_to_trials_by_combat = yes
blademaster_traits_give_learning = yes
craven_trait_costs_prestige = yes
}
character_modifier = {
knight_limit = 1
accolade_glory_gain_mult = 0.1
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_stoic_or_courtly_desc
}
}
if = {
limit = {
trigger_if = {
limit = {
scope:character = {
is_ai = no
}
}
NOT = {
any_ruler = {
count >= 3
culture = prev
primary_title.tier >= tier_county
OR = {
has_trait = education_martial_4
has_trait = education_martial_5
}
learning >= 10
}
}
}
trigger_else_if = {
limit = {
scope:character = {
OR = {
has_trait = education_martial_4
has_trait = education_martial_5
}
learning >= 10
}
}
always = no
}
trigger_else_if = {
limit = {
scope:character.culture = {
OR = {
has_cultural_pillar = heritage_brythonic
has_cultural_pillar = heritage_central_germanic
has_cultural_pillar = heritage_frankish
has_cultural_pillar = heritage_goidelic
has_cultural_pillar = heritage_iberian
has_cultural_pillar = heritage_latin
has_cultural_pillar = heritage_west_germanic
}
}
}
always = no
}
trigger_else = {
always = no
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = rulers_with_martial_edu_and_learning_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = { value = 100 }
}
tradition_fp1_the_right_to_prove = {
category = societal
layers = {
0 = intrigue
1 = western
4 = shieldmaiden.dds
}
is_shown = {
# DLC check.
has_fp1_dlc_trigger = yes
}
can_pick = {
custom_tooltip = {
text = cannot_have_tradition_fp1_performative_honour
NOT = { culture_tradition:tradition_fp1_performative_honour = { is_in_list = traits } }
}
}
parameters = {
has_access_to_shieldmaidens = yes
}
character_modifier = {
knight_limit = -2
knight_effectiveness_mult = 0.25
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
# Egalitarian, provided you're moving *up* the scale. Somewhat less so when moving down.
culture_pillar:ethos_egalitarian = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_egalitarian_or_communal_desc
}
}
if = {
limit = {
NOT = {
scope:character = {
any_courtier = {
count >= 5
prowess >= 10
is_adult = yes
NOT = { can_be_knight_trigger = { ARMY_OWNER = prev } }
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = courtiers_with_prowess_who_cant_be_knight_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
NOT = {
scope:character = {
any_courtier = {
count >= 5
prowess >= 10
is_adult = yes
NOT = { can_be_knight_trigger = { ARMY_OWNER = prev } }
}
}
}
}
multiply = 0
}
}
}

View file

@ -0,0 +1,400 @@
###########################
# FP2 CULTURAL TRADITIONS
###########################
#######################
# Aragonese Specific
#######################
tradition_fp2_state_ransoming = {
category = realm
layers = {
0 = steward
1 = western
4 = state_ransoming.dds
}
is_shown = {
# DLC check.
has_fp2_dlc_trigger = yes
}
# Anyone can take this.
parameters = {
knights_die_less_but_are_captured_more = yes
characters_more_likely_to_be_captured_in_sieges = yes
can_demand_higher_ransoms_from_lower_tiers = yes
}
character_modifier = {
hard_casualty_modifier = -0.5
monthly_war_income_mult = -0.25
}
county_modifier = {
# Naturally, people are more keen to turn up to serve.
levy_size = 0.1
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_or_communal_desc
}
}
# Heritage or language
if = {
limit = {
NOR = {
has_cultural_pillar = heritage_iberian
AND = {
exists = culture_head
culture_head = { knows_language = language_iberian }
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = lack_iberian_heritage_or_language_penalty_desc
}
}
# General replacement stuff.
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
}
}
#######################
# Castilian Specific
#######################
tradition_fp2_strategy_gamers = {
category = ritual
layers = {
0 = diplo
1 = western
4 = board_gamers.dds
}
is_shown = {
# DLC check.
has_fp2_dlc_trigger = yes
}
# Anyone can take this.
parameters = {
commanders_likelier_to_gain_commander_traits = yes
may_challenge_to_board_games = yes
may_wager_land_on_board_games = yes
}
character_modifier = {
movement_speed = 0.1
prowess = medium_skill_penalty
martial = medium_skill_bonus
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_or_courtly_desc
}
}
# Either high martial, high learning, or a chess board required.
if = {
limit = { exists = culture_head }
if = {
limit = {
culture_head = {
NOR = {
martial >= very_high_skill_rating
learning >= very_high_skill_rating
any_character_artifact = { has_variable = can_be_used_for_board_games }
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = lack_martial_learning_or_chess_board_penalty_desc
}
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 0
if = {
limit = { exists = culture_head }
culture_head = {
# Absolute nerds.
if = {
limit = {
martial >= extremely_high_skill_rating
learning >= extremely_high_skill_rating
has_trait = scholar
}
add = 100
}
# People who got suckered in & accidentally started a trend.
if = {
limit = {
any_character_artifact = { has_variable = can_be_used_for_board_games }
}
add = 100
}
}
}
}
}
#######################
# Andalusian Specific
#######################
tradition_fp2_malleable_subjects = {
category = realm
layers = {
0 = intrigue
1 = mena
4 = malleable_subjects.dds
}
is_shown = {
# DLC check.
has_fp2_dlc_trigger = yes
has_cultural_pillar = heritage_iberian
}
can_pick = {
# Must be of a suitable heritage.
custom_tooltip = {
text = iberian_heritage_trigger
has_cultural_pillar = heritage_iberian
}
}
parameters = {
doesnt_care_about_culture_faith_in_factions = yes
wants_to_learn_liege_language = yes
harder_to_convert_county_culture_without_heritage = yes
easier_to_convert_county_culture_with_heritage = yes
powerful_foreign_knights_find_you_attractive = yes
# ^[blushes]
}
character_modifier = {
mercenary_hire_cost_mult = -0.5
vassal_levy_contribution_mult = 0.25
different_culture_opinion = 10
ignore_negative_opinion_of_culture = yes
}
culture_modifier = {
mercenary_count_mult = 2
cultural_acceptance_gain_mult = 0.25
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_egalitarian = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_egalitarian_or_courtly_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 0
# Players might want this, but the AI never does.
}
}
#######################
# Generic
#######################
tradition_fp2_ritualised_friendship = {
category = societal
layers = {
0 = diplo
1 = western
4 = ritualised_friendship.dds
}
is_shown = {
# DLC check.
#has_fp2_dlc_trigger = yes
}
can_pick = {
# Must have at least one friend. No friendless losers. Especially you, Nick.
custom_tooltip = {
text = need_at_least_one_friend
culture_head ?= {
any_relation = {
type = friend
count >= 1
}
}
}
}
parameters = {
automatic_befriend_access = yes
may_propose_best_friendship = yes
strong_hooks_and_stress_effects_best_friends = yes
may_select_friendship_synergy_bonus = yes
}
character_modifier = {
scheme_phase_duration_against_friend_add = 20
scheme_phase_duration_against_best_friend_add = 40
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# No ethos requirement: everyone likes friends.
# Need at least three friends.
if = {
limit = { exists = culture_head }
if = {
limit = {
culture_head = {
any_relation = {
type = friend
count < 3
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = guess_you_need_more_friends_desc
}
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 0
if = {
limit = { exists = culture_head }
culture_head = {
# Some traits make you want to codify this more...
if = {
limit = { has_trait = gregarious }
add = 50
}
if = {
limit = { has_trait = just }
add = 25
}
if = {
limit = { has_trait = compassionate }
add = 25
}
# ... but arbitrary characters have zero interest in anything nearly so formal
if = {
limit = { has_trait = arbitrary }
add = -200
}
# We don't modify down for shy because, if anything, you'd expect a shy person to be more serious about the few friends they *do* have.
# Having lots of friends makes you more likely to want this.
if = {
limit = {
any_relation = {
type = friend
count >= 4
}
}
add = 50
}
# As does having a best friend already.
if = {
limit = {
any_relation = {
type = best_friend
count >= 1
}
}
add = 25
}
# And certain lifestyles also make you want to focus on this.
if = {
limit = { has_focus = martial_chivalry_focus }
add = 10
}
}
}
}
}

View file

@ -0,0 +1,801 @@
###########################
# FP3 CULTURAL TRADITIONS
###########################
#######################
# Central Asian Specific
#######################
tradition_fp3_frontier_warriors = {
category = regional
layers = {
0 = martial
1 = mena
4 = dismounted_warrior.dds
}
is_shown = {
# DLC check.
has_fp3_dlc_trigger = yes
# Any culture present in the given area can pick this
any_culture_county = {
any_county_province = {
OR = {
geographical_region = world_transoxiana
geographical_region = world_khorasan
geographical_region = world_steppe_tarim
}
}
}
}
can_pick = {
culture_not_pacifistic_trigger = yes
# Must have a significant cultural presence in the general Turanian area, i.e. the "frontier"
custom_tooltip = {
text = culture_on_eastern_frontier_desc
any_culture_county = {
percent >= 0.2
any_county_province = {
OR = {
geographical_region = world_transoxiana
geographical_region = world_khorasan
geographical_region = world_steppe_tarim
}
}
}
}
}
parameters = {
unlock_maa_tarkhan = yes
faith_warrior_traits_more_valued = yes
}
province_modifier = {
hostile_raid_time = 0.5
}
character_modifier = {
mercenary_hire_cost_mult = -0.10
movement_speed = 0.05
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_or_stoic_desc
}
}
# Gotta be a steppe-heavy culture not to get a surcharge.
if = {
limit = {
NOT = {
any_culture_county = {
percent >= 0.3
any_county_province = {
OR = {
terrain = steppe
terrain = desert
}
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = steppe_or_desert_percentage_desc
}
}
#Turko-Mongol-Iranians get it cheaper!
if = {
limit = {
NOR = {
has_cultural_pillar = heritage_iranian
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_mongolic
has_cultural_pillar = heritage_tocharian
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = not_of_central_asian_heritage_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
NOT = {
scope:character = {
any_sub_realm_county = {
percent >= 0.3
any_county_province = {
terrain = steppe
}
}
}
}
}
multiply = 0
}
}
}
#######################
# Persian Specific
#######################
tradition_fp3_irrigation_experts = {
category = realm
layers = {
0 = steward
1 = mena
4 = water_technology.dds
}
is_shown = {
# DLC check.
has_fp3_dlc_trigger = yes
has_cultural_pillar = heritage_iranian
NOT = { has_cultural_tradition = tradition_dryland_dwellers }
}
can_pick = {
custom_description = {
text = culture_in_dryland_desc
any_culture_county = {
any_county_province = {
OR = {
terrain = drylands
terrain = desert
terrain = desert_mountains
}
}
}
}
# Shouldn't be combined with the following traditions:
custom_tooltip = {
text = cannot_have_tradition_dryland_dwellers
NOT = { culture_tradition:tradition_dryland_dwellers = { is_in_list = traits } } #this is another approach to drylands dwelling
}
}
parameters = {
innovative_traits_more_valued = yes
unlocks_qanat_building = yes
plantations_building_bonuses = yes
drylands_hunt_success_chance = yes
}
character_modifier = {
negate_health_penalty_add = 0.1
desert_travel_danger = desert_medium_danger_reduction
drylands_travel_danger = drylands_medium_danger_reduction
desert_mountains_travel_danger = desert_mountains_medium_danger_reduction
}
county_modifier = {
desert_development_growth_factor = 0.35
drylands_development_growth_factor = 0.15
}
province_modifier = {
desert_construction_gold_cost = -0.1
drylands_construction_gold_cost = -0.1
desert_holding_construction_gold_cost = -0.1
drylands_holding_construction_gold_cost = -0.1
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_egalitarian = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_communal_egalitarian_or_courtly_desc
}
}
if = {
limit = {
NOT = {
any_culture_county = {
percent >= 0.3
any_county_province = {
OR = {
terrain = drylands
terrain = desert
}
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = dry_percentage_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 400
if = {
limit = {
NOT = { #if the realm isn't very dry, the AI won't pick this
scope:character = {
any_sub_realm_county = {
percent >= 0.4
culture = scope:character.culture
any_county_province = {
OR = {
terrain = drylands
terrain = desert
}
}
}
}
}
}
multiply = 0
}
else_if = {
limit = {
any_culture_county = {
percent >= 0.6
any_county_province = {
OR = {
terrain = drylands
terrain = desert
}
}
}
}
multiply = 4
}
}
}
tradition_fp3_beacon_of_learning = { # Offshoot of tradition_philosopher_culture
category = societal
layers = {
0 = learning
1 = mena
4 = beacon_of_learning.dds
}
is_shown = {
has_fp3_dlc_trigger = yes
has_cultural_pillar = heritage_iranian
NOT = { has_cultural_tradition = tradition_philosopher_culture } # Replaces Philosopher Culture
}
can_pick = {
custom_description = {
text = culture_not_bellicose
NOT = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
}
}
NOT = { has_cultural_tradition = tradition_warrior_culture }
NOT = { has_cultural_tradition = tradition_philosopher_culture }
}
can_pick_for_hybridization = {
custom_tooltip = {
text = no_warrior_culture
NOT = { # Only blocks polygamous to avoid duplicate warnings, but is blocked by concubines
culture_tradition:tradition_warrior_culture = { is_in_list = traits }
}
}
custom_tooltip = {
text = no_philosopher_culture
NOT = { # Only blocks polygamous to avoid duplicate warnings, but is blocked by concubines
culture_tradition:tradition_philosopher_culture = { is_in_list = traits }
}
}
}
parameters = {
pensive_trait_more_common = yes
rowdy_trait_less_common = yes
innovation_from_learning_traits = yes
can_appoint_court_scholar = yes
guardian_education_better_outcomes = yes
}
character_modifier = {
monthly_learning_lifestyle_xp_gain_mult = 0.2
learning_per_piety_level = 1
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_courtly_communal_or_spiritual_desc
}
}
if = {
limit = {
trigger_if = {
limit = {
scope:character = {
is_ai = no
}
}
NOT = {
any_ruler = {
count >= 5
culture = prev
primary_title.tier >= tier_county
has_trait = scholar
}
}
}
trigger_else = {
always = no
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = rulers_with_scholar_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
multiply = 0
}
}
}
# Replaces Refined Poetry
tradition_fp3_enlightened_magnates = {
category = societal
layers = {
0 = diplo
1 = mena
4 = jirga.dds
}
is_shown = {
has_fp3_dlc_trigger = yes
has_cultural_pillar = heritage_iranian
NOT = { has_cultural_tradition = tradition_poetry }
}
parameters = {
poet_trait_gives_bonuses = yes
poet_trait_more_common = yes
characters_are_better_court_poets = yes
characters_are_better_tax_collector = yes
unlock_tax_obligation_deqhan = yes
}
character_modifier = {
clan_tax_slot_add = 1
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_courtly_communal_or_spiritual_desc
}
}
if = {
limit = {
trigger_if = {
limit = {
scope:character = {
is_ai = no
}
}
NOT = {
any_ruler = {
count >= 3
culture = prev
primary_title.tier >= tier_county
has_trait = poet
}
}
}
trigger_else = {
always = no
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = rulers_with_poet_desc
}
}
if = {
limit = {
scope:character = {
has_variable = tradition_poetry_travel_discount
}
}
add = {
value = tradition_travel_discount
desc = tradition_travel_discount_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 125
if = {
limit = { # AI should avoid stacking traditions for courtly court positions
culture_tradition:tradition_music_theory = { is_in_list = traits }
}
multiply = 0.25
}
}
}
#######################
# Afghanistan/Baluchistan Specific
#######################
tradition_fp3_jirga = {
category = regional
layers = {
0 = learning
1 = indian
4 = jirga.dds
}
is_shown = {
# DLC check.
has_fp3_dlc_trigger = yes
OR = {
has_cultural_pillar = heritage_iranian
has_cultural_pillar = heritage_indo_aryan
}
}
can_pick = {
scope:character = {
government_has_flag = government_is_tribal #This tradition is really a holdover from tribal culture, and though the Afghanis might have it despite having changed government forms, others cannot pick it now.
}
}
parameters = {
tribal_elective_enabled = yes
just_trait_gives_bonuses = yes
pardoning_gives_prestige = yes
}
character_modifier = {
owned_personal_scheme_success_chance_add = 10
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_stoic_or_communal_desc
}
}
if = {
limit = {
NOT = {
scope:character = {
any_sub_realm_county = {
county_opinion < 0
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = counties_with_low_county_opinion_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
OR = {
culture_tradition:tradition_things = { is_in_list = traits }
culture_tradition:tradition_the_witenagemot = { is_in_list = traits }
}
}
multiply = 0
}
}
}
tradition_fp3_pragmatic_creed = {
category = regional
layers = {
0 = diplo
1 = mena
4 = pragmatic_creed.dds
}
is_shown = {
# DLC check.
has_fp3_dlc_trigger = yes
has_cultural_pillar = heritage_iranian
}
can_pick = {
culture_not_pacifistic_trigger = yes
custom_description = {
text = culture_in_mountains_desc
any_culture_county = {
any_county_province = {
OR = {
terrain = mountains
terrain = desert_mountains
}
}
}
}
}
parameters = {
unlock_maa_zupin_warrior = yes
diligent_trait_more_common = yes
pragmatic_traits_county_opinion_modifiers = yes
commanders_likelier_to_gain_commander_traits = yes
}
character_modifier = {
skirmishers_toughness_mult = 0.10
skirmishers_maintenance_mult = -0.15
heavy_cavalry_maintenance_mult = 0.15
light_cavalry_maintenance_mult = 0.15
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bureaucratic_courtly_or_spiritual_desc
}
}
# Gotta be a mountain-heavy culture not to get a surcharge.
if = {
limit = {
NOT = {
any_culture_county = {
percent >= 0.3
any_county_province = {
OR = {
terrain = mountains
terrain = desert_mountains
}
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = mountain_percentage_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
OR = { # Don't pick this if the culture have Light Cavalry or Heavy Cavalry MaAs
culture_has_heavy_cavalry_maa = yes
culture_has_light_cavalry_maa = yes
}
}
multiply = 0
}
if = {
limit = {
NOT = { # Less likely for cultures who doesn't descend from Daylamite
any_parent_culture_or_above = {
this = culture:daylamite
}
}
}
multiply = 0.75
}
}
}
#######################
# Kurdish Specific
#######################
tradition_fp3_fierce_independence = {
category = regional
layers = {
0 = martial
1 = mena
4 = fierce_independence.dds
}
is_shown = {
has_fp3_dlc_trigger = yes
has_cultural_pillar = heritage_iranian
}
can_pick = {
NOT = {
has_cultural_tradition = tradition_staunch_traditionalists
}
}
parameters = {
unlock_maa_tawashi = yes
harder_to_hybridize = yes
harder_to_convert_county_culture = yes
}
character_modifier = {
controlled_province_advantage = 5
same_culture_opinion = 5
opinion_of_liege = -10
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_stoic_or_communal_desc
}
}
if = {
limit = {
scope:character = {
any_sub_realm_county = {
NOT = {
culture = scope:character.culture
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = has_other_cultures_in_realm_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 400
if = {
limit = {
NOR = {
culture_pillar:ethos_stoic = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
}
}
multiply = 0.5
}
}
}

View file

@ -0,0 +1,95 @@
###########################
# EP2 CULTURAL TRADITIONS
###########################
#######################
# Generic
#######################
tradition_ep2_avid_falconers = {
category = societal
layers = {
0 = diplo
1 = mena
4 = hunter.dds
}
is_shown = {
# DLC check.
has_dlc_feature = tours_and_tournaments
}
can_pick = {
culture_not_pacifistic_trigger = yes
custom_tooltip = {
text = cannot_have_tradition_vegetarianism
NOT = { culture_tradition:tradition_vegetarianism = { is_in_list = traits } }
}
}
parameters = {
more_frequent_hunts = yes
hunting_traits_more_valued = yes
falconer_traits_more_common = yes
always_unlock_legendary_hunting_lodge = yes
}
province_modifier = {
stationed_maa_pursuit_mult = 0.15
}
cost = {
prestige = {
# Base cost.
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
# Ethos requirement.
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_stoic_or_courtly_desc
}
}
# General replacement stuff.
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = { exists = culture_head }
culture_head = {
# Some traits make you want to codify this more...
if = {
limit = { has_trait = arrogant }
add = 25
}
if = {
limit = { has_trait = diligent }
add = 25
}
# ... and others less.
if = {
limit = { has_trait = lazy }
add = -50
}
if = {
limit = { has_trait = humble }
add = -25
}
}
}
}
}

View file

@ -0,0 +1,112 @@
###########################
# EP2 CULTURAL TRADITIONS
###########################
#######################
# Generic
#######################
tradition_ce1_ritual_washing = {
category = ritual
layers = {
0 = diplo
1 = mena
4 = ritual_washing.dds
}
character_modifier = {
monthly_learning_lifestyle_xp_gain_mult = 0.1
}
parameters = {
better_disease_resistance = yes
diligent_trait_more_common = yes
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_courtly_communal_or_spiritual_desc
}
}
if = {
limit = {
trigger_if = {
limit = {
scope:character = {
is_ai = no
}
}
NOT = {
any_ruler = {
count >= 5
culture = prev
employs_court_position = court_physician_court_position
}
}
}
trigger_else = {
always = no
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = doesnt_employ_court_physician_desc
}
}
#Discounts
if = {
limit = {
scope:character = {
OR = {
has_trait = lifestyle_physician
has_trait = whole_of_body
}
}
}
add = {
value = tradition_trait_discount
desc = cheaper_tradition_physician_or_whole_of_body
}
}
if = {
limit = {
has_cultural_pillar = heritage_north_germanic
}
add = {
value = tradition_heritage_discount
desc = cheaper_tradition_norse_washing
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 100
if = {
limit = {
scope:character = {
has_perk = wash_your_hands_perk
}
}
add = 100
}
}
}

View file

@ -0,0 +1,654 @@
#######################
# CULTURAL TRADITIONS #
#######################
######################
# EP3 Traditions #
######################
tradition_ep3_indomitable_azatani = {
category = regional
layers = {
0 = martial
1 = mena
4 = indomitable_azatani.dds
}
is_shown = {
OR = {
this = culture:armenian
any_parent_culture_or_above = {
this = culture:armenian
}
}
# DLC check.
has_ep3_dlc_trigger = yes
NOT = {
has_cultural_tradition = tradition_horse_breeder
}
}
can_pick = {
culture_not_pacifistic_trigger = yes
trigger_if = {
limit = {
OR = {
NOT = { exists = scope:replacing }
NOT = { scope:replacing = culture_tradition:tradition_horse_breeder }
}
}
NOT = { has_cultural_tradition = tradition_horse_breeder } #To prevent stacking after hybridization
}
}
parameters = {
unlock_maa_ayrudzi = yes
house_hostility_more_common = yes
vassals_more_likely_to_refuse_demands = yes
}
character_modifier = {
light_cavalry_maintenance_mult = -0.15
heavy_cavalry_maintenance_mult = -0.15
archer_cavalry_maintenance_mult = -0.15
light_cavalry_damage_add = 4
heavy_cavalry_damage_add = 20
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
culture_pillar:ethos_stoic = { is_in_list = traits }
culture_pillar:ethos_communal = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_stoic_or_communal_desc
}
}
if = {
limit = {
scope:character = {
NOR = { # Culture Head need to have a 8 sized regiment of either Light/Heavy/Archer Cavalry
number_maa_soldiers_of_base_type = {
type = light_cavalry
value >= 800
}
number_maa_soldiers_of_base_type = {
type = heavy_cavalry
value >= 400
}
number_maa_soldiers_of_base_type = {
type = archer_cavalry
value >= 800
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = culture_head_cavalry_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = { # Reduce chance slightly if the culture has access to other "cavalry" types
OR = {
has_innovation = innovation_war_camels
has_innovation = innovation_elephantry
}
}
multiply = 0.4
}
else_if = {
limit = {
scope:character ?= {
ai_has_warlike_personality = yes
}
}
multiply = 4
}
}
}
tradition_ep3_audacious_cadets = {
category = regional
layers = {
0 = martial
1 = western
4 = audacious_cadets.dds
}
is_shown = {
OR = {
this = culture:norman
any_parent_culture_or_above = {
this = culture:norman
}
}
# DLC check.
has_ep3_dlc_trigger = yes
NOT = {
has_cultural_tradition = tradition_swords_for_hire
}
}
can_pick = {
culture_not_pacifistic_trigger = yes
trigger_if = {
limit = {
OR = {
NOT = { exists = scope:replacing }
NOT = { scope:replacing = culture_tradition:tradition_swords_for_hire }
}
}
NOT = { has_cultural_tradition = tradition_swords_for_hire } #To prevent stacking after hybridization
}
}
parameters = {
unlock_maa_conrois = yes
unlock_voluntary_laampdom = yes
much_more_likely_to_be_laamps = yes
ambitious_trait_more_common = yes
wanderers_gain_extra_combat_skills = yes
mercenary_courtiers_gain_extra_skills = yes
more_likely_to_leave_court = yes
}
character_modifier = {
heavy_cavalry_damage_add = 20
heavy_cavalry_pursuit_add = 20
heavy_cavalry_max_size_add = 2
siege_phase_time = -0.1
ai_honor = -20
ai_war_chance = 0.5
ai_war_cooldown = -0.25
same_culture_mercenary_hire_cost_mult = -0.15
character_travel_speed_mult = 0.1
character_travel_safety_mult = 0.1
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOT = {
culture_pillar:ethos_bellicose = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_desc
}
}
if = {
limit = {
scope:character = {
NOR = { # Culture Head need to have a 8 sized regiment of either Light/Heavy/Archer Cavalry
number_maa_soldiers_of_base_type = {
type = heavy_cavalry
value >= 400
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = culture_head_heavy_cavalry_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = {
NOT = {
culture_has_heavy_cavalry_maa = yes
}
}
multiply = 0.25
}
else_if = {
limit = {
scope:character ?= {
ai_has_warlike_personality = yes
}
}
multiply = 4
}
}
}
tradition_ep3_imperial_tagmata = {
category = regional
layers = {
0 = martial
1 = mediterranean
4 = imperial_tagmata.dds
}
is_shown = {
OR = {
this = culture:greek
any_parent_culture_or_above = {
this = culture:greek
}
has_cultural_pillar = heritage_byzantine
}
# DLC check.
has_ep3_dlc_trigger = yes
NOT = {
has_cultural_tradition = tradition_roman_legacy
}
}
can_pick = {
}
parameters = {
unlock_maa_cataphract = yes
unlock_maa_akritai = yes
unlock_maa_ballistrai = yes
unlock_maa_skoutatoi = yes
frontier_themes_borrow_neighbor_troops = yes
}
character_modifier = {
heavy_cavalry_max_size_add = 2
counter_efficiency = 0.1
knight_effectiveness_mult = -0.25
men_at_arms_title_limit = 1
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_bellicose = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bellicose_or_bureaucratic_desc
}
}
if = {
limit = {
NOT = {
scope:character = {
any_held_title = {
tier = tier_county
count >= 8
any_county_province = {
has_building_or_higher = stables_01
}
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = domain_counties_with_stables_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 400
if = {
limit = { # Admin should be more into this
scope:character = {
government_allows = administrative
}
}
multiply = 2
}
else_if = {
limit = {
scope:character ?= {
ai_has_warlike_personality = yes
}
}
multiply = 4
}
}
}
tradition_ep3_roman_ceremonies = {
category = regional
layers = {
0 = diplo
1 = mediterranean
4 = roman_ceremonies.dds
}
is_shown = {
OR = {
this = culture:greek
any_parent_culture_or_above = {
this = culture:greek
}
has_cultural_pillar = heritage_byzantine
scope:character = {
OR = {
has_title = title:e_byzantium
has_title = title:e_roman_empire
}
}
}
# DLC check.
has_ep3_dlc_trigger = yes
NOT = {
has_cultural_tradition = tradition_byzantine_succession
}
}
can_pick = {
}
parameters = {
holds_triumphs = yes
hosts_chariot_races = yes
children_can_be_born_in_the_purple = yes
# We use the co-emperors parameter for most things...
unlock_co_emperors = yes
# ... which means the junior emperor parameter is _mostly_ just here for the loc.
unlock_junior_emperors = yes
#byzantine_faction_preffered_claimants = yes
}
county_modifier = {
county_opinion_add = -10
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_egalitarian = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bureaucratic_courtly_or_egalitarian_desc
}
}
if = {
limit = {
NOT = {
any_culture_county = {
count >= 50
any_county_province = {
geographical_region = custom_eastern_roman_empire
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = culture_in_roman_empire_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = { # Admin should be more into this
scope:character = {
government_allows = administrative
}
}
multiply = 2
}
}
}
tradition_ep3_palace_politics = {
category = regional
layers = {
0 = intrigue
1 = mediterranean
4 = palace_politics.dds
}
is_shown = {
OR = {
this = culture:greek
any_parent_culture_or_above = {
this = culture:greek
}
has_cultural_pillar = heritage_byzantine
scope:character = {
OR = {
has_title = title:e_byzantium
has_title = title:e_roman_empire
}
}
}
# DLC check.
has_ep3_dlc_trigger = yes
NOT = {
has_cultural_tradition = tradition_byzantine_succession
}
}
can_pick = {
custom_tooltip = {
text = cannot_have_tradition_court_eunuchs
NOT = { culture_tradition:tradition_court_eunuchs = { is_in_list = traits } }
}
custom_tooltip = {
text = cannot_have_tradition_merciful_blindings
NOT = { culture_tradition:tradition_merciful_blindings = { is_in_list = traits } }
}
}
parameters = {
unlock_maa_varangian_guards = yes
unlock_akolouthos = yes
reduced_bodyguard_aptitude = yes
can_blind_prisoners = yes
can_castrate_prisoners = yes
eunuch_trait_bonuses = yes
can_appoint_chief_eunuch = yes
family_castration = yes
ambitious_trait_more_common = yes
physical_disfigurement_blocks_inheritance = yes #Actually only blocks claimants and reduce score in elective. Also includes infertility for tooltip reasons.
cultrad_unlocks_t2_countermeasures = yes
palace_politics_trait_bonuses = yes
palace_politics_trait_maluses = yes
}
character_modifier = {
monthly_court_grandeur_change_mult = 0.2
political_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value
personal_scheme_phase_duration_add = minor_scheme_phase_duration_bonus_value
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bureaucratic_courtly_or_spiritual_desc
}
}
if = {
limit = {
has_dlc_feature = royal_court
OR = {
scope:character = { has_royal_court = no }
NOT = {
scope:character = {
court_grandeur_current_level >= very_high_court_grandeur_level
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = culture_head_court_grandeur_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = { # Admin should be more into this
scope:character = {
government_allows = administrative
}
}
multiply = 2
}
}
}
tradition_ep3_cultivated_sophistication = {
category = societal
layers = {
0 = learning
1 = mediterranean
4 = cultivated_sophistication.dds
}
is_shown = {
# DLC check.
has_ep3_dlc_trigger = yes
}
can_pick = {
custom_tooltip = {
text = must_have_administrative_government_tt
scope:character = { government_allows = administrative }
}
}
parameters = {
less_likely_to_culture_convert = yes
other_cultures_more_likely_to_hybridize = yes
estate_building_upgrade_development_gain = yes
allows_noble_family_adoption = yes
}
character_modifier = {
monthly_influence_mult = 0.1
diplomatic_range_mult = 0.2
#cultural_head_fascination_mult = -0.10
}
cost = {
prestige = {
add = {
value = tradition_base_cost
desc = BASE
format = "BASE_VALUE_FORMAT"
}
if = {
limit = {
NOR = {
culture_pillar:ethos_bureaucratic = { is_in_list = traits }
culture_pillar:ethos_courtly = { is_in_list = traits }
culture_pillar:ethos_spiritual = { is_in_list = traits }
}
}
add = {
value = tradition_incompatible_ethos_penalty
desc = not_bureaucratic_courtly_or_spiritual_desc
}
}
if = {
limit = {
NOT = {
scope:character = {
exists = capital_county
capital_county = {
tier = tier_county
development_level >= 30
}
}
}
}
add = {
value = tradition_unfulfilled_criteria_penalty
desc = capital_province_development_level_desc
}
}
multiply = tradition_replacement_cost_if_relevant
}
}
ai_will_do = {
value = 200
if = {
limit = { # Admin should be more into this
OR = {
this = culture:greek
any_parent_culture_or_above = {
this = culture:greek
}
has_cultural_pillar = heritage_byzantine
}
}
multiply = 2
}
}
}

View file

@ -0,0 +1,37 @@
The structure is identical to cultural traits in general, except for a few added fields:
category = string
This is used for grouping in the Add Tradition view, and in the Divergence view.
Layers match the CULTURE_TRADITION_LAYER_PATHS define. Index starts from 0
layers = {
0 = martial # Use a random icon from the specific subfolder
# 1 = blah # By leaving out the index, it'll use a random icon from the folder
3 = letter1.dds # By specifying a file name, that specific file will get used
}
Example:
#dummy_tradition = {
# parameters = {
# can_raid = yes
# }
#
# character_modifier = {
# diplomacy = 1
# }
#
# county_modifier = {
# development_growth_factor = 0.05
# }
#
# province_modifier = {
# monthly_income = poor_building_tax_tier_4
# }
#
# doctrine_character_modifier = {
# doctrine = doctrine_pluralism_righteous
# same_faith_opinion = 5
# tyranny_gain_mult = -0.25
# }
#}

13776
common/traits/00_traits.txt Normal file

File diff suppressed because it is too large Load diff

257
common/traits/_traits.info Normal file
View file

@ -0,0 +1,257 @@

== Loc/icon ==
By default, the name key is trait_<key>, and the desc key is trait_<key>_desc.
The default icon path is gfx/interface/icons/traits/<trait>.dds.
These can be overridden with dynamic descriptions.
E.G.,
name = some_loc_key
Or
name = {
first_valid = { ... }
}
The parameters are:
name
desc
icon
The root scope is the character.
Note that in some cases there may be no root, so make sure your first check is a fallback for "NOT = { exists = this }" if you add dynamic names, descs, or icons.
An example:
icon = {
first_valid = {
triggered_desc = {
trigger = { NOT = { exists = this } }
desc = "gfx/interface/icons/traits/diligent.dds"
}
triggered_desc = {
trigger = { gold > 1000 }
desc = "gfx/interface/icons/traits/diligent.dds"
}
desc = "gfx/interface/icons/traits/deceitful.dds"
}
}
=== Trait Properties ===
category = X # What unique category this trait is in, categories have gameplay implications as well as sorting
Valid categories:
- personality: The core personality of a character, character's auto generate with some
- education: A character's education, they can only have one at a time and are auto generated with
- childhood: The core personality of a child, it will grow into an adult personality trait, auto generated on children
- commander: A combat trait for how a character fights, auto added to characters if required
- winter_commander: A commander trait but will only be added for character's in an area with winter
- lifestyle: A lifestyle progress trait
- court_type: A trait from a court type
- fame: A fame (or infamy) trait
- health: A trait representing a health condition
### Trait validation
valid_sex = all/male/female # Defaults to all, trait can only be had by characters of this sex
minimum_age = int # Min age required to have this trait
maximum_age = int # Max age allowed to have this trait
potential = { # Triggers that must be met for this trait to be givento a character. This is not checked during runtime.
<triggers>
}
### Special flags
inheritance_blocker = none/dynasty/all # Does this trait block inheritance, defaults to none, dynasty only blocks inheritance within the same dynasty
claim_inheritance_blocker = none/dynasty/all # Does this trait block claim inheritance, defaults to none, dynasty only blocks claim inheritance within the same dynasty
add_commander_trait = yes/no # This trait should make auto-generated characters add commander traits
incapacitating = yes/no # This character is unable to rule directly and requires a regent
physical = yes/no # A physical aspect of the character's body
disables_combat_leadership = yes/no # This character is blocked from being a commander
can_have_children = yes/no # Can this character have any children at all, defaults to yes
genetic = yes/no # A genetic trait, mutually exclusive with having a manual inheritance chance.
# The inheritance will follow the following rules:
# The trait can be inactive. Children can inherit the trait from both active and inactive parent traits.
# An active trait is inherited with 100% chance, an inactive trait with a 50% chance. If the trait is successfully inherited from both parents, it becomes active.
# If it's inherited only from one parent, it's inactive.
good = yes/no # This trait is a "good" to have genetic trait
inherit_from_real_father = yes/no # This trait should be inherited from the character's real father. Only impacts if the trait is genetic or has a manual inheritance chance. Defaults to yes.
inherit_from_real_mother = yes/no # This trait should be inherited from the character's real mother. Only impacts if the trait is genetic or has a manual inheritance chance. Defaults to yes.
enables_inbred = yes/no # This trait enables the children of the character to be considered for the inbred trait
# It only enables the inbred chance if there are common ancestors of the parents, so there is no risk of 'inbred' if the parents are not related.
# If inbred is not enabled by parents' traits, but there are common ancestors, there's a chance (same as for inbred trait when it's enabled) the child will get a random trait with enables_inbred = yes.
shown_in_encyclopedia = yes/no # This trait should be shown in the encyclopedia. Defaults to yes.
shown_in_ruler_designer = yes/no # This trait should be shown in the ruler designer. Defaults to yes.
immortal = yes/no # Will stop visual aging, and make the character immune to natural death. Can still be killed by script. Fertility will match visual age. You can use set_immortal_age to change the visual age
bastard = none/illegitimate/legitimate # This character is a bastard of said type
### Commander terrain
trait_exclusive_if_realm_contains = {} # A list of terrain types that are taken into consideration when commander traits are randomly assigned to commanders. These traits are only assigned/considered if the commander's culture contains a province that has one of the terrain types specified in the list
### Trait generation
birth = X # 0-1 What % of characters out of 100 are born with this trait if not inherited
random_creation = X # 0-1 - % chance of character to get this trait on creation. Only applicable to inheritable or genetic traits. Evaluate all traits independently for
# for chance to appear. If more than one such trait procs, select single resulting trait uniformily.
# As opposed to actually being born; this is for things like generated characters, script characters, etc.
random_creation_weight = X # Positive value. Defaults to 1. If negative will be set to 0. Value 0 means no weight and will never be picked randomly.
# Unlike % chance out of 100, randomizing by weight sums up all available weights and then picks a random among them, meaning it is fully dependent
# on the value difference between the weights. If all traits have the same weight it means they all have the same chance of being picked.
# Provide lower number for more rare or higher for more common (in comparison to the other weights within the same category). This is used
# when selecting traits for generated characters of the categories: personality, education and childhood. Is ignored for genetic and inheritable traits
inherit_chance = 50 # 0-100 what % of characters out of 100 inherit this trait, can not be set if a genetic trait
both_parent_has_trait_inherit_chance = 25 # 0-100 what % of characters out of 100 inherit this trait, can not be set if a genetic trait
parent_inheritance_sex = male/female/all # Specifies whether the trait can be inherited from male/female/all parents (all by default)
child_inheritance_sex = male/female/all # Specifies whether the trait can be inherited by male/female/all children (all by default)
### Portrait impacts
genetic_constraint_all = beauty # This genetic constraint will be applied when gaining the trait
genetic_constraint_men = beauty # This genetic constraint will be applied when gaining the trait for men
genetic_constraint_women = beauty # This genetic constraint will be applied when gaining the trait for women
portrait_extremity_shift = 0.25 # When gaining this trait, every single morph gene will be shifted by this percentage towards 0 or 1; whichever it is closest to. E.G., 0.4 will shift 25% towards 0, resulting in 0.3
ugliness_portrait_extremity_shift = 0.75 # When gaining this trait, every single morph gene associated with the character's most extreme single trait (as defined in common/genes) shifted by this percentage towards 0 or 1; whichever it is closest to. E.G., 0.4 will shift 25% towards 0, resulting in 0.3. "Most extreme" is decided simply by taking the feature whose genes have the highest average deviation from 50% strength
### Special opinion impacts
same_opinion = 10 # Opinion impact if two characters share the trait
same_opinion_if_same_faith = 10 # Opinion impact if two characters share the trait and are of the same faith
opposite_opinion = 10 # Opinion impact if two characters have opposite traits
# Applied if the associated conditions are fulfilled
triggered_opinion = {
opinion_modifier = opinion_modifier_key # What opinion modifier to apply if the conditions are fulfilled
# Everything below is optional
parameter = doctrine_parameter_key # What boolean doctrine parameter to check for
check_missing = yes # Check that the parameter is *not* set (or set to false), rather than set to true
same_faith = yes # Only apply to characters of the same faith
same_dynasty = yes # Only apply to characters of the same dynasty
ignore_opinion_value_if_same_trait = yes # If both characters have this trait, ignore the opinion effect. Punishment reasons still apply
male_only = yes # Only applied if the trait holder is male
female_only = yes # Only applied if the trait holder is female. Mutually exclusive with male_only
}
### Trait relations
# This is not a Opinion modifier, but can be used by 'compatibility_modifier' and 'trait_compatibility' trigger. Compatibility is checked for the Trait holder vs the listed Traits (of another character.)
compatibility = {
gluttonous = 20
drunkard = @pos_compat_low
}
# What traits this trait is the opposite of
opposites = {
<trait list>
}
### Groups
level = integer # What level in the group this trait is
group = name # What trait group this trait is in, grouping is used for both inheritance and equivalence
group_equivelence = name # What trait group this trait is in, its grouping is only used for equivalence
group_inheritance = name # What trait group this trait is in, its grouping is only used for inheritance
### Misc properties
ruler_designer_cost = int # Cost to take in ruler designer, defaults to zero
flag = <name> # Flag this trait is marked with, can add multiple, localized as TRAIT_FLAG_DESC_name
# If the culture of the person passing on their titles has this flag, then children with this trait are considered to be oldest (or youngest, in ultimogeniture)
# Does not affect gender preference and the like at all, just the age-based ordering of children
culture_succession_prio = children_can_be_born_in_the_purple
### Level tracks
Traits can be marked as levelling and gain different bonuses based on how much XP a character has within that track. A trait can have one or multiple tracks, each will store XP per character so you can have one trait levelling multiple things. Each track must have a unique name within this trait.
Each track can contain entries with a required XP score from 0-100 inclusive and then any modifiers. Modifiers will be read according to the modifier section below. XP thresholds must be in ascending order.
tracks = {
<track_name> = {
20 = {
<modifiers>
}
50 = {
<modifiers>
}
90 = {
<modifiers>
}
}
<track_name_2> = {
30 = {
<modifiers>
}
55 = {
<modifiers>
}
}
}
If only one track is needed then a short hand is provided which creates one track named after the trait itself.
track = {
20 = {
<modifiers>
}
40 = {
<modifiers>
}
}
Trait tracks should be localized with trait_track_<key> and trait_track_<key>_desc.
They can be used with the add_trait_xp effect and has_trait_xp trigger.
Track XP can degrade over time in a trait by doing monthly_track_xp_degradation = { min = 20 change = 5 } which will degrade it by 5 every month but never below 20.
### Modifiers
# Modifier that will be applied for characters with a culture with the specified parameter
culture_modifier = {
parameter = can_blind_prisoners
diplomacy = 5
}
# Modifier that will be applied for characters if their faith has some doctrine with the specified parameter
faith_modifier = {
parameter = great_holy_wars_active
stewardship = 1
}
Any other unknown property is read in as a modifier applied to anyone who holds the trait
### Lookup conversion
# trait_conversion.lookup contains a mapping between an old trait name key to its new trait name key
# This lets you remove a trait and have it map to some other new valid trait
# Use this to help with converting save game versions such as with the pre 1.9 tiered lifestlye traits to the new level track trait
# old_trait_indexes.lookup contains the ordered list of named traits to match up with the pre 1.4 manual indexes traits had to assign.
# Nulls fill the gaps between the valid entries.
# Make sure to adjust this for your mods traits when relasing for 1.4 if you want your saves from 1.3 to be compatible. If you did not edit the traits or are going to break compatibility then leave it as is.