N3OW/events/dlc/ep1/ep1_flavor_events.txt
2026-01-06 14:25:21 +01:00

6004 lines
144 KiB
Text

namespace = ep1_flavor
##################################################
# Ewan
##################################################
# 0001 - 0010 Learn of the secret scion of an existing neighbouring court.
# 0011 - 0020 Diplomats from nearby realms have trashed your favourite hall.
# 0021 - 0030 You compete with another realm that shares your court language for grandeur.
# 0031 - 0040 Several fresh young scholars are newly arrived at court & need guidance.
##################################################
##################################################
# The Secret DaughterSon
# by Ewan Cowhig Croft
# 0001 - 0010
##################################################
scripted_trigger ep1_flavour_0001_relative_appropriate_to_marry_trigger = {
can_marry_trigger = yes
is_adult = yes
liege = root
# Make sure we don't accidentally nab a player.
NOT = { is_ai = no }
}
scripted_trigger ep1_flavour_0001_valid_to_have_secret_scion_trigger = {
# Standards checks: make sure the ruler is of the correct age, decently fertile, etc.
is_ai = yes
any_spouse = {
count = all
is_ai = yes
}
can_have_children = yes
fertility >= medium_fertility
## Age needs to be relatively high so that the scion can be created successfully.
age >= ep1_flavour_0001_scion_parent_minimum_age_value
## Having a dynasty makes things more fun
exists = dynasty
## Soulmates are too complex to really handle hidden bastards for.
num_of_relation_soulmate = 0
## And though heterosexual, bisexual, and asexual characters might also conceivably have such a child, homosexual characters generally shouldn't.
NOT = { has_sexuality = homosexual }
# Hostility checks: filter out anyone who's at war with root, a bad relation, or just otherwise wouldn't be a good fit.
NOR = {
is_at_war_with = root
has_any_bad_relationship_with_root_trigger = yes
# Faiths that'd never consider marrying you are bad picks.
faith = {
faith_hostility_level = {
target = root.faith
value >= faith_evil_level
}
}
}
# Make sure we have someone who'd be personally concerned about the existence of bastards.
## I.e, their faith discriminates against bastards. We check this manually both for ease of triggers & to keep things simple.
faith = {
OR = {
has_doctrine_parameter = bastards_legitimize
has_doctrine_parameter = bastards_always
}
}
# And finally someone who might actually actively empathise enough to try and protect their bastard from a harsh existence.
NOR = {
has_trait = lazy
has_trait = honest
has_trait = just
has_trait = trusting
has_trait = callous
has_trait = sadistic
}
}
scripted_effect ep1_flavour_0001_marry_suitor_effect = {
# Diplo duel to try to pressure for the marriage.
duel = {
skill = diplomacy
target = scope:scion_parent
# Root wins, obtaining a forceful marriage alliance.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = ep1_flavor.0001.a.tt.success
send_interface_toast = {
title = ep1_flavor.0001.a.tt.success
left_icon = scope:scion_parent
right_icon = scope:scion_actual
# Calc all the bastard stuff.
ep1_flavour_0001_reveal_secret_child_effect = yes
# Scope:prospective_spouse & scope:scion_actual marry immediately or asap through grand wedding
if = {
limit = {
has_ep2_dlc_trigger = yes
}
create_grand_wedding_betrothal = {
SPOUSE_1 = scope:prospective_spouse
SPOUSE_2 = scope:scion_actual
HOST = root
PROMISEE = scope:scion_parent
}
}
else = { scope:prospective_spouse = { marry = scope:scion_actual } }
# Create an alliance root & scope:scion_parent via the married couple.
create_alliance = {
target = scope:scion_parent
allied_through_owner = scope:prospective_spouse
allied_through_target = scope:scion_actual
}
# Scope:scion_parent steps rivalry with root.
progress_towards_rival_effect = {
REASON = rival_succeeded_force_marriage
CHARACTER = scope:scion_parent
OPINION = -50
}
}
}
# Scope:scion_parent obfuscates till they can whisk away their child.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = ep1_flavor.0001.a.tt.failure
send_interface_toast = {
title = ep1_flavor.0001.a.tt.failure
left_icon = scope:scion_parent
right_icon = scope:scion_actual
# Scope:scion gets away.
custom_tooltip = ep1_flavor.0001.tt.scion_escapes
# Root loses prestige.
add_prestige = major_prestige_loss
# Scope:scion_parent steps rivalry with root, but a bit less because they still won.
progress_towards_rival_effect = {
REASON = rival_attempted_to_force_marriage
CHARACTER = scope:scion_parent
OPINION = -25
}
}
}
}
# Sort stress.
## If scope:scion_actual is at least a royal bastard, then arrogant characters are a little happy.
if = {
limit = { scope:scion_parent.primary_title.tier >= tier_kingdom }
stress_impact = {
arrogant = miniscule_stress_impact_loss
humble = medium_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
}
## Otherwise, they don't have a feeling.
else = {
stress_impact = {
humble = medium_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
}
}
scripted_effect ep1_flavour_0001_reveal_secret_child_effect = {
# First, set up the sex as "recent" so we can pull the reveal.
## The affair partner's gender is picked deterministically so that it could result in pregnancy.
scope:scion_parent = {
if = {
limit = { is_female = yes }
set_variable = {
name = had_recent_sex
value = flag:male
}
}
else = {
set_variable = {
name = had_recent_sex
value = flag:female
}
}
}
# Then, do the actual reveal.
## First the effects of the extra-marital sex.
### We regard this as the same as cheating actively for simplicity and the sake of the scale of the lie.
extramaritial_sex_exposure_consequences_with_had_recent_sex_var_effect = { SPOUSE_EVENT = no }
# Finally, deal with scope:scion_actual's transformation.
scope:scion_actual = {
# Then make scope:scion_actual a bastard.
add_trait = bastard
# Obfuscate a few irrelevant bits.
hidden_effect = {
# Set up their legal parentage.
scope:scion_parent = {
if = {
limit = { is_female = yes }
scope:scion_actual = { set_mother = scope:scion_parent }
}
else = {
scope:scion_actual = { set_father = scope:scion_parent }
}
}
# Plus, dynasty.
set_house = scope:scion_parent.house
}
}
scope:scion_parent = {
if = {
limit = {
OR = {
AND = {
is_male = yes
NOT = {
faith = { has_doctrine = doctrine_adultery_men_accepted }
}
}
AND = {
is_female = yes
NOT = {
faith = { has_doctrine = doctrine_adultery_women_accepted }
}
}
}
}
add_trait = adulterer
}
}
}
# Learn of the secret scion of an existing neighbouring court.
ep1_flavor.0001 = {
type = character_event
title = ep1_flavor.0001.t
desc = ep1_flavor.0001.desc
theme = diplomacy
left_portrait = {
character = scope:scion_parent
animation = disbelief
outfit_tags = { beggar_rags }
}
right_portrait = {
character = scope:scion_actual
animation = worry
outfit_tags = { beggar_rags }
}
lower_center_portrait = scope:prospective_spouse
override_background = { reference = tavern }
cooldown = { years = 100 }
trigger = {
# Standard checks.
has_royal_court = yes
has_dlc_feature = royal_court
is_available_at_peace_adult = yes
# Is suitable/has suitable family for the marriage.
OR = {
can_marry_trigger = yes
any_close_family_member = { ep1_flavour_0001_relative_appropriate_to_marry_trigger = yes }
}
# Has a valid neighbour or vassal.
OR = {
any_neighboring_and_across_water_realm_same_rank_owner = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes }
any_vassal = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes }
}
}
weight_multiplier = {
base = 1
# Court weightings: plug in a court type that should see this event more often.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic }
}
immediate = {
# First up, we decide whether root or a relative of theirs will be the marriable candidate.
## If root can marry, we use root.
if = {
limit = { can_marry_trigger = yes }
save_scope_as = prospective_spouse
}
## Otherwise, pick a family member.
else = {
random_close_family_member = {
limit = { ep1_flavour_0001_relative_appropriate_to_marry_trigger = yes }
save_scope_as = prospective_spouse
}
}
# Now we need to select a suitable dynasty to add the scion to.
## Grab every candidate, chuck 'em in a list.
every_neighboring_and_across_water_realm_same_rank_owner = {
limit = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes }
add_to_list = valid_scion_candidates_list
}
every_vassal = {
limit = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes }
add_to_list = valid_scion_candidates_list
}
## Comb through the list for the most suitable dynasty.
ordered_in_list = {
list = valid_scion_candidates_list
order_by = {
value = 0
# We prefer characters outside your sub-realm.
if = {
limit = {
liege != root
}
add = 100
}
# Ideally ones with at least a bit of the relevant skills.
if = {
limit = { diplomacy >= decent_skill_rating }
add = 15
}
if = {
limit = { intrigue >= decent_skill_rating }
add = 15
}
# Certain traits really weight up the chances of the candidate.
if = {
limit = { has_trait = lustful }
add = 20
}
if = {
limit = { has_trait = diligent }
add = 20
}
if = {
limit = { has_trait = paranoid }
add = 20
}
if = {
limit = { has_trait = seducer }
add = 20
}
if = {
limit = { has_trait = schemer }
add = 20
}
if = {
limit = { has_trait = compassionate }
add = 20
}
}
save_scope_as = scion_parent
}
## Take off scope:scion_parent's headgear for the event.
scope:scion_parent = { add_character_flag = no_headgear }
# Finally, we create the scion themselves.
## Basic setup.
create_character = {
location = scope:scion_parent.capital_county.title_province
template = hidden_scion_template
save_scope_as = scion_actual
}
## Adjust a few details.
hidden_effect = {
scope:scion_actual = {
# Copy over their genetics.
copy_inheritable_appearance_from = scope:scion_parent
# Add the sheltered modifier.
add_character_modifier = raised_in_secrecy_modifier
}
}
}
# Preferred candidate: No doubt scope:scion_parent was simply holding HerHis hand for me?
option = {
name = ep1_flavor.0001.a
trigger = { this = scope:prospective_spouse }
ep1_flavour_0001_marry_suitor_effect = yes
# Stress impact taken care of in the scripted effect.
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_rationality = 0.25
ai_compassion = -0.5
}
}
}
# Backup candidate: No doubt scope:scion_parent was simply holding HerHis hand for my [Relative]?
option = {
name = ep1_flavor.0001.b
trigger = {
this != scope:prospective_spouse
}
ep1_flavour_0001_marry_suitor_effect = yes
# Stress impact taken care of in the scripted effect.
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_rationality = 0.25
ai_compassion = -0.5
}
}
}
# Grab them both, the world must know!
option = {
name = ep1_flavor.0001.c
# You attempt to reveal scope:scion_actual's existence, giving scope:scion_parent fairly little time to completely erase HerHis existence.
duel = {
skill = intrigue
target = scope:scion_parent
# Scope:scion_parent leaves a trace, and you become the QueenKing of gossip for a time.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = ep1_flavor.0001.c.tt.success
send_interface_toast = {
title = ep1_flavor.0001.c.tt.success
left_icon = scope:scion_parent
# Gain some permanent intrigue.
add_intrigue_skill = 2
# Scope:scion_actual is revealed. Consequences ensue.
ep1_flavour_0001_reveal_secret_child_effect = yes
## Remember to mark this as having happened.
save_scope_value_as = {
name = scion_revealed
value = yes
}
# Become rivals with scope:scion_parent immediately (nemeses if they're vengeful).
if = {
limit = {
scope:scion_parent = { has_trait = vengeful }
can_set_relation_nemesis_trigger = { CHARACTER = scope:scion_parent }
}
set_relation_nemesis = {
target = scope:scion_parent
reason = rival_exposed_bastard
}
}
else_if = {
limit = {
can_set_relation_rival_trigger = { CHARACTER = scope:scion_parent }
}
set_relation_rival = {
target = scope:scion_parent
reason = rival_exposed_bastard
}
}
else = {
reverse_add_opinion = {
target = scope:scion_parent
modifier = hate_opinion
opinion = -50
}
}
}
}
# You're flummoxed by scope:scion_parent's trickery, leaving your accusations ridiculously baseless.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = ep1_flavor.0001.c.tt.failure
send_interface_toast = {
title = ep1_flavor.0001.c.tt.failure
left_icon = scope:scion_parent
# Scope:scion gets away.
custom_tooltip = ep1_flavor.0001.tt.scion_escapes
# Lose a load of prestige.
add_prestige = major_prestige_loss
# Stepped rivalry with scope:scion_parent.
progress_towards_rival_effect = {
REASON = rival_attempted_to_reveal_offspring
CHARACTER = scope:scion_parent
OPINION = -25
}
}
}
}
stress_impact = {
honest = miniscule_stress_impact_loss
compassionate = minor_stress_impact_gain
deceitful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.75
ai_compassion = -0.75
}
}
}
# I'll help you, but I expect something in return...
option = {
name = ep1_flavor.0001.d
trigger = {
can_add_hook = {
target = scope:scion_parent
type = manipulation_hook
}
}
# Scope:scion gets away.
custom_tooltip = ep1_flavor.0001.tt.scion_escapes
# Gain a hook on scope:scion_parent, who's also grateful for your assistance in their time of need.
add_hook = {
type = favor_hook
target = scope:scion_parent
}
reverse_add_opinion = {
target = scope:scion_parent
modifier = grateful_opinion
opinion = 50
}
stress_impact = {
deceitful = miniscule_stress_impact_loss
callous = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
honest = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_compassion = 0.25
}
}
}
# What a pedestrian drama.
option = {
# Doesn't believe in bastards.
name = {
trigger = {
faith = { has_doctrine_parameter = bastards_none }
}
text = ep1_flavor.0001.e.no_bastards
}
# Fallback.
name = ep1_flavor.0001.e.fallback
# Scope:scion gets away.
custom_tooltip = ep1_flavor.0001.tt.scion_escapes
# You pay the stranger no mind; scope:scion_parent is relieved.
reverse_add_opinion = {
target = scope:scion_parent
modifier = relieved_opinion
opinion = 25
}
stress_impact = {
base = medium_stress_impact_loss
shy = miniscule_stress_impact_loss
gregarious = minor_stress_impact_gain
paranoid = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = -0.5
ai_energy = -0.75
}
}
}
# Do a little clean-up.
after = {
# Afterwards, if scope:scion_actual isn't married or revealed, quietly disappear them.
hidden_effect = {
scope:scion_actual = {
if = {
limit = {
is_married = no
NOT = { exists = scope:scion_revealed }
}
death = { death_reason = death_vanished }
}
}
}
# Give scope:scion_parent their hat back.
scope:scion_parent = { remove_character_flag = no_headgear }
}
}
##################################################
# An Absolute Shambles
# by Ewan Cowhig Croft
# 0011 - 0020
##################################################
scripted_trigger ep1_flavour_0011_valid_diplomats_trigger = {
# The title must be created first off.
is_title_created = yes
holder = {
# Make sure we're not looking at root.
this != root
# Now discard any that lack royal courts or aren't in diplomatic range.
has_royal_court = yes
has_dlc_feature = royal_court
in_diplomatic_range = root
# Then any that lack a chancellor.
exists = cp:councillor_chancellor
# Finally, their chancellor must be available & at peace.
cp:councillor_chancellor = { is_available_at_peace_ai_adult = yes }
}
}
scripted_effect ep1_flavour_0011_friendly_diplomats_effect = {
reverse_add_opinion = {
target = scope:diplomat_1
modifier = relieved_opinion
opinion = $OPINION$
}
reverse_add_opinion = {
target = scope:diplomat_2
modifier = relieved_opinion
opinion = $OPINION$
}
## Make them potential friends if appropriate.
hidden_effect = {
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:diplomat_1 }
}
set_relation_potential_friend = scope:diplomat_1
}
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:diplomat_2 }
}
set_relation_potential_friend = scope:diplomat_2
}
}
}
# Diplomats from nearby realms have trashed your favourite hall.
ep1_flavor.0011 = {
type = character_event
title = ep1_flavor.0011.t
desc = ep1_flavor.0011.desc
theme = diplomacy
left_portrait = {
character = scope:diplomat_1
animation = shock
}
right_portrait = {
character = scope:diplomat_2
animation = shame
}
override_background = { reference = feast }
cooldown = { years = 10 }
trigger = {
# Standard checks.
has_royal_court = yes
has_dlc_feature = royal_court
is_available_at_peace_adult = yes
# Any two valid foreign chancellors are available.
any_kingdom = {
count >= 2
ep1_flavour_0011_valid_diplomats_trigger = yes
}
}
weight_multiplier = {
base = 1
# Court weightings: plug in a court type that should see this event more often.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic }
}
immediate = {
# Grab all applicable chancellors.
every_kingdom = {
limit = { ep1_flavour_0011_valid_diplomats_trigger = yes }
holder.cp:councillor_chancellor = { add_to_list = valid_chancellors_list }
}
# Now, pick out the two most relevant chancellors.
ordered_in_list = {
list = valid_chancellors_list
order_by = {
value = 0
# Prio up realms you're allied with, since they'd have good cause.
if = {
limit = {
liege = {
any_ally = { this = root }
}
}
add = 100
}
# Plus anyone where there's a degree of mutual religious tolerance.
if = {
limit = {
faith = {
faith_hostility_level = {
target = root.faith
value <= faith_hostile_level
}
}
save_temporary_scope_as = current_char
root.faith = {
faith_hostility_level = {
target = scope:current_char.faith
value <= faith_hostile_level
}
}
}
add = 50
}
# Various traits make it more likely.
## Obviously drunkards.
if = {
limit = { has_trait = drunkard }
add = 10
}
## Revellers of all stripes.
if = {
limit = { has_trait = lifestyle_reveler }
add = 20
}
## Gluttons.
if = {
limit = { has_trait = gluttonous }
add = 10
}
## Arbitrary folks.
if = {
limit = { has_trait = arbitrary }
add = 10
}
## Gregarious party-throwers.
if = {
limit = { has_trait = gregarious }
add = 10
}
# And a few traits make it less likely.
## Recluses.
if = {
limit = { has_trait = reclusive }
add = -10
}
## The temperate.
if = {
limit = { has_trait = temperate }
add = -10
}
## Just folks.
if = {
limit = { has_trait = just }
add = -10
}
## The shy.
if = {
limit = { has_trait = shy }
add = -10
}
# Diplomatic skill decreases it, since better diplomats are less likely to make a scene.
add = {
value = diplomacy
multiply = -1
}
}
max = 2
if = {
limit = {
NOT = { exists = scope:diplomat_1 }
}
save_scope_as = diplomat_1
}
else_if = {
limit = {
NOT = {
this = scope:diplomat_1
exists = scope:diplomat_2
}
}
save_scope_as = diplomat_2
}
}
# Set up a cost based on root's lodgings amenity.
if = {
limit = {
amenity_level = {
target = court_lodging_standards
value <= low_amenity_level
}
}
set_variable = {
name = reimbursement_cost
value = {
value = minor_gold_value
multiply = 0.5
round = yes
}
}
}
if = {
limit = {
amenity_level = {
target = court_lodging_standards
value <= medium_amenity_level
}
}
set_variable = {
name = reimbursement_cost
value = {
value = medium_gold_value
multiply = 0.5
round = yes
}
}
}
if = {
limit = {
amenity_level = {
target = court_lodging_standards
value <= high_amenity_level
}
}
set_variable = {
name = reimbursement_cost
value = {
value = major_gold_value
multiply = 0.5
round = yes
}
}
}
if = {
limit = {
amenity_level = {
target = court_lodging_standards
value >= very_high_amenity_level
}
}
set_variable = {
name = reimbursement_cost
value = {
value = massive_gold_value
multiply = 0.5
round = yes
}
}
}
## No more gold for max, since we've already reached a pretty expensive bill.
# Add a negative modifier for the trashed hall.
add_character_modifier = {
modifier = legendary_party_aftermath_modifier
years = 10
}
scope:diplomat_2 = {
add_character_flag = is_naked
}
}
# You will pay for these damages, you lickspittle curs!
option = {
name = ep1_flavor.0011.a
# Deduct half of the damages from each diplomat, pay it towards root.
## We're not fussed if this cost is unexpected for the diplomats: they shouldn't have messed with the hall.
scope:diplomat_1 = {
pay_short_term_gold = {
target = root
gold = root.var:reimbursement_cost
}
}
scope:diplomat_2 = {
pay_short_term_gold = {
target = root
gold = root.var:reimbursement_cost
}
}
# Remove the negative modifier.
remove_character_modifier = legendary_party_aftermath_modifier
# Gain a replacement modifier.
add_character_modifier = {
modifier = lacking_diplomatic_munity_modifier
years = 10
}
stress_impact = {
greedy = miniscule_stress_impact_loss
wrathful = miniscule_stress_impact_loss
calm = medium_stress_impact_gain
generous = medium_stress_impact_gain
forgiving = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 1
ai_greed = 0.5
}
}
}
# Alright, you trashed it, you can clean it up. SERVANTS! A mop!
option = {
name = ep1_flavor.0011.b
# The diplomats are fairly upset with this humiliation.
reverse_add_opinion = {
target = scope:diplomat_1
modifier = humiliated_opinion
opinion = -30
}
reverse_add_opinion = {
target = scope:diplomat_2
modifier = humiliated_opinion
opinion = -30
}
## Make them potential rivals if appropriate.
hidden_effect = {
if = {
limit = {
can_set_relation_rival_trigger = { CHARACTER = scope:diplomat_1 }
}
set_relation_potential_rival = scope:diplomat_1
}
if = {
limit = {
can_set_relation_rival_trigger = { CHARACTER = scope:diplomat_2 }
}
set_relation_potential_rival = scope:diplomat_2
}
}
# Remove the negative modifier.
remove_character_modifier = legendary_party_aftermath_modifier
# Replace it with a positive one.
add_character_modifier = {
modifier = humbling_hall_modifier
years = 10
}
# Whack a lil CGV in for your swagger.
change_current_court_grandeur = miniscule_court_grandeur_gain
stress_impact = {
just = miniscule_stress_impact_loss
calm = miniscule_stress_impact_loss
wrathful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = -0.5
}
}
}
# Oh no, this party's not over yet: someone fill my goblet!
option = {
name = ep1_flavor.0011.c
trigger = {
NOT = { has_trait = lifestyle_reveler }
}
# The diplomats are immensely happy.
ep1_flavour_0011_friendly_diplomats_effect = { OPINION = 30 }
# The modifier gets worse in some ways, better in others.
remove_character_modifier = legendary_party_aftermath_modifier
add_character_modifier = {
modifier = mythic_party_aftermath_modifier
years = 10
}
stress_impact = {
gregarious = miniscule_stress_impact_loss
shy = medium_stress_impact_gain
temperate = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_energy = 0.25
ai_vengefulness = -0.5
}
}
}
# [Reveller] One night? Pathetic! Make way for the Party [TitleAsName]!
option = {
name = ep1_flavor.0011.d
trigger = { has_trait = lifestyle_reveler }
trait = lifestyle_reveler
# The diplomats are even happier.
ep1_flavour_0011_friendly_diplomats_effect = { OPINION = 50 }
# The modifier gets *much* worse in some ways, *much* better in others.
remove_character_modifier = legendary_party_aftermath_modifier
add_character_modifier = {
modifier = world_shattering_party_aftermath_modifier
years = 10
}
stress_impact = {
base = medium_stress_loss
gregarious = miniscule_stress_impact_loss
shy = medium_stress_impact_gain
temperate = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.75
ai_energy = 0.55
ai_vengefulness = -0.5
}
}
}
# [wordlessly leave the hall]
option = {
name = ep1_flavor.0011.e
flavor = ep1_flavor.0011.e.tt
# The diplomats gain stress & fear reprisal.
scope:diplomat_1 = {
add_opinion = {
target = root
modifier = scared_opinion
opinion = -30
}
add_stress = major_stress_gain
}
scope:diplomat_2 = {
add_opinion = {
target = root
modifier = scared_opinion
opinion = -30
}
add_stress = major_stress_gain
}
# People think you inscrutable.
add_character_modifier = {
modifier = inscrutable_host_modifier
years = 10
}
stress_impact = {
shy = minor_stress_impact_loss
reclusive = minor_stress_impact_loss
wrathful = medium_stress_impact_gain
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.25
ai_energy = -0.5
ai_vengefulness = -0.75
}
}
}
# Do a little clean-up.
after = {
# Get rid of the reimbursement cost.
remove_variable = reimbursement_cost
scope:diplomat_2 = {
remove_character_flag = is_naked
}
}
}
##################################################
# Two Realms Separated by a Courtly Language
# by Ewan Cowhig Croft
# 0021 - 0030
##################################################
scripted_trigger ep1_flavour_0021_valid_nitpicking_courtier_trigger = {
# A simple is available check.
is_available_ai_adult = yes
# Plus they speak the court language.
knows_court_language_of = root
}
scripted_trigger ep1_flavour_0021_valid_wrong_spelling_realm_trigger = {
# The title must be created first off.
is_title_created = yes
holder = {
# Make sure we're not looking at root.
this != root
# For erroring reasons, double check that their court is royal.
has_royal_court = yes
has_dlc_feature = royal_court
# Now ensure they speak the same court language.
has_same_court_language = root
# And that they can speak their *own* court language.
knows_court_language_of = this
# Finally, discard any that aren't in diplomatic range.
in_diplomatic_range = root
# ... or players.
is_ai = yes
}
}
scripted_trigger ep1_flavour_0021_valid_characters_to_fuss_trigger = {
# Must speak the court language.
knows_court_language_of = $OWN_COURT$
# And be an AI who's around and about.
is_available_at_peace_ai_adult = yes
}
scripted_trigger ep1_flavour_0021_different_cultured_realms_trigger = {
$THIS$ = {
any_courtier = {
percent >= 0.5
culture = $THIS$.culture
}
OR = {
any_sub_realm_county = {
count >= 10
culture = $THIS$.culture
}
culture = {
any_culture_county = {
percent >= 0.25
OR = {
holder = $THIS$
holder = {
any_liege_or_above = { this = $THIS$ }
}
}
}
}
any_sub_realm_county = {
percent >= 0.5
culture = $THIS$.culture
}
}
}
}
scripted_effect ep1_flavour_0021_apply_mutual_court_opinions_effect = {
hidden_effect = {
every_in_list = {
list = root_court_list
save_temporary_scope_as = current_char
every_in_list = {
list = scope_rival_monarch_court_list
add_opinion = {
target = scope:current_char
modifier = $OPINION_TYPE$
opinion = $OPINION_VALUE$
}
}
}
every_in_list = {
list = scope_rival_monarch_court_list
save_temporary_scope_as = current_char
every_in_list = {
list = root_court_list
add_opinion = {
target = scope:current_char
modifier = $OPINION_TYPE$
opinion = $OPINION_VALUE$
}
}
}
}
}
scripted_effect ep1_flavour_0021_apply_mutual_cultural_dislike_effect = {
if = {
limit = {
# First, check they're not the same culture.
culture != scope:rival_monarch.culture
# Then make sure both actually have a decent chunk of courtiers of their culture around, and aren't ruling some total adventurer kingdom..
ep1_flavour_0021_different_cultured_realms_trigger = { THIS = root }
ep1_flavour_0021_different_cultured_realms_trigger = { THIS = scope:rival_monarch }
}
culture = {
change_cultural_acceptance = {
target = scope:rival_monarch.culture
value = $ACCEPTANCE_CHANGE$
desc = $ACCEPTANCE_DESC$
}
}
}
}
# You compete with another realm that shares your court language for grandeur.
ep1_flavor.0021 = {
type = character_event
title = ep1_flavor.0021.t
desc = ep1_flavor.0021.desc
theme = diplomacy
left_portrait = {
character = scope:nitpicker
animation = scheme
}
right_portrait = {
character = scope:rival_monarch
animation = personality_vengeful
}
cooldown = { years = 5 }
trigger = {
# Standard checks.
has_royal_court = yes
has_dlc_feature = royal_court
is_available_at_peace_adult = yes
# For flavour reasons, root must be able to speak their own court language.
knows_court_language_of = this
# You'll also need someone in your court who can be the focal point.
## This might occasionally make dumb selections, but honestly, that's sorta in the spirit of the quibbling.
any_courtier = { ep1_flavour_0021_valid_nitpicking_courtier_trigger = yes }
# Make sure we've got a suitable opposing realm.
OR = {
any_kingdom = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
any_empire = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
}
}
weight_multiplier = {
base = 1
# Court weightings: plug in a court type that should see this event more often.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic }
}
immediate = {
# Select an opposing realm.
## Kingdoms look for kingdoms...
if = {
limit = { highest_held_title_tier = tier_kingdom }
random_kingdom = {
limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
save_scope_as = rival_realm
holder = { save_scope_as = rival_monarch }
}
# ... but otherwise will take an empire.
if = {
limit = {
NOT = { exists = scope:rival_realm }
}
random_empire = {
limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
save_scope_as = rival_realm
holder = { save_scope_as = rival_monarch }
}
}
}
## Empires look for empires...
else = {
random_empire = {
limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
save_scope_as = rival_realm
holder = { save_scope_as = rival_monarch }
}
# ... but will otherwise take kingdoms.
if = {
limit = {
NOT = { exists = scope:rival_realm }
}
random_kingdom = {
limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes }
save_scope_as = rival_realm
holder = { save_scope_as = rival_monarch }
}
}
}
# Grab a nitpicking courtier.
## We do this after selecting the realm so that we can weight against poor-choice characters.
random_courtier = {
limit = { ep1_flavour_0021_valid_nitpicking_courtier_trigger = yes }
weight = {
base = 0
# Weight up according to learning.
modifier = { add = learning }
# Plus a few traits make it more likely.
modifier = {
add = 10
has_trait = arrogant
}
modifier = {
add = 10
has_trait = scholar
}
## Y'know, assuming you're just a stickler for the rules of language too.
modifier = {
add = 5
has_trait = just
}
# And a few others less likely.
modifier = {
add = -10
has_trait = humble
}
## And, as with just, assuming that you also don't much care for the rules of language.
modifier = {
add = -5
has_trait = arbitrary
}
# Weight against characters that might identify with the other realm.
modifier = {
add = -20
any_close_or_extended_family_member = { this = scope:rival_monarch }
}
modifier = {
add = -20
culture = scope:rival_monarch.culture
}
}
save_scope_as = nitpicker
}
# Nab both courts for effects.
## First root.
every_courtier = {
limit = {
ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = root }
}
add_to_list = root_court_list
}
every_councillor = {
limit = {
ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = root }
# Ensure that a vassal kingdom isn't added as disapproving of their own spelling.
this != scope:rival_monarch
}
add_to_list = root_court_list
}
## Then scope:rival_monarch.
scope:rival_monarch = {
every_courtier = {
limit = {
ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = scope:rival_monarch }
}
add_to_list = scope_rival_monarch_court_list
}
every_councillor = {
limit = {
ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = scope:rival_monarch }
# Ensure that a vassal kingdom isn't added as disapproving of their own spelling.
this != root
}
add_to_list = scope_rival_monarch_court_list
}
}
}
# This missive is missing half the vowels! Disgusting!
option = {
name = ep1_flavor.0021.a
# Both courts gain dislike of each other.
custom_tooltip = ep1_flavor.0021.a.tt
ep1_flavour_0021_apply_mutual_court_opinions_effect = {
OPINION_TYPE = disgusted_opinion
OPINION_VALUE = ep1_flavour_0021_courts_lose_opinion_actual_value
}
# Diplo challenge to gain CGV at their expense.
duel = {
skill = diplomacy
target = scope:rival_monarch
# PrimaryTitle.GetAdjective spellings are best!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = ep1_flavor.0021.a.tt.success
send_interface_toast = {
title = ep1_flavor.0021.a.tt.success
left_icon = scope:rival_monarch
# Some for you...
change_current_court_grandeur = medium_court_grandeur_gain
# ... some from them.
scope:rival_monarch = { change_current_court_grandeur = medium_court_grandeur_loss }
}
}
# Scope:rival_monarch.PrimaryTitle.GetAdjective spellings are best!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = ep1_flavor.0021.a.tt.failure
send_interface_toast = {
title = ep1_flavor.0021.a.tt.failure
left_icon = scope:rival_monarch
# Some from you...
change_current_court_grandeur = medium_court_grandeur_loss
# ... some for them.
scope:rival_monarch = { change_current_court_grandeur = medium_court_grandeur_gain }
}
}
}
# Look at making things a bit more tense.
ep1_flavour_0021_apply_mutual_cultural_dislike_effect = {
ACCEPTANCE_CHANGE = minor_cultural_acceptance_loss
ACCEPTANCE_DESC = cultural_acceptance_courtly_spelling_differences
}
stress_impact = {
humble = minor_stress_impact_gain
patient = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.75
ai_rationality = -0.25
}
}
}
# Are they not our linguistic cousins?
option = {
name = ep1_flavor.0021.b
# Both courts start to like each other a bit more.
custom_tooltip = ep1_flavor.0021.b.tt
ep1_flavour_0021_apply_mutual_court_opinions_effect = {
OPINION_TYPE = respect_opinion
OPINION_VALUE = ep1_flavour_0021_courts_gain_opinion_value
}
# Stepped friendship with the other ruler.
progress_towards_friend_effect = {
CHARACTER = scope:rival_monarch
OPINION = default_friend_opinion
REASON = friend_common_language
}
# And, if appropriate, a little cultural acceptance.
ep1_flavour_0021_apply_mutual_cultural_dislike_effect = {
ACCEPTANCE_CHANGE = minor_cultural_acceptance_gain
ACCEPTANCE_DESC = cultural_acceptance_courtly_cousins
}
stress_impact = {
arrogant = medium_stress_impact_gain
impatient = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_energy = 0.5
}
}
}
# Two noble courts and not a sodding brain between them...
option = {
name = ep1_flavor.0021.c
# Both courts gain dislike of each other.
custom_tooltip = ep1_flavor.0021.c.tt
ep1_flavour_0021_apply_mutual_court_opinions_effect = {
OPINION_TYPE = disgusted_opinion
OPINION_VALUE = ep1_flavour_0021_courts_lose_opinion_actual_value
}
# Look at making things a bit more tense.
ep1_flavour_0021_apply_mutual_cultural_dislike_effect = {
ACCEPTANCE_CHANGE = minor_cultural_acceptance_loss
ACCEPTANCE_DESC = cultural_acceptance_courtly_spelling_differences
}
# Gain a modifier for your troubles.
add_character_modifier = {
modifier = above_petty_differences_modifier
years = 10
}
stress_impact = {
cynical = miniscule_stress_impact_loss
patient = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_sociability = -0.5
ai_energy = -0.75
}
}
}
}
##################################################
# Fresh at Court
# by Ewan Cowhig Croft
# 0031 - 0040
##################################################
scripted_effect ep1_flavour_0031_give_random_inspiration_effect = {
# Sort out an appropriate tooltip.
## One for scope:scholar_1.
if = {
limit = { $THIS$ = scope:scholar_1 }
custom_tooltip = ep1_flavor.0031.inspire.scholar_1.tt
}
## And one for scope:scholar_2.
if = {
limit = { $THIS$ = scope:scholar_2 }
custom_tooltip = ep1_flavor.0031.inspire.scholar_2.tt
}
# We weight up the more bookish inspirations a bit.
hidden_effect = {
random_list = {
300 = { create_inspiration = book_inspiration }
200 = { create_inspiration = artisan_inspiration }
200 = { create_inspiration = alchemy_inspiration }
100 = { create_inspiration = weapon_inspiration }
100 = { create_inspiration = armor_inspiration }
100 = { create_inspiration = weaver_inspiration }
100 = { create_inspiration = smith_inspiration }
50 = { create_inspiration = adventure_inspiration }
50 = { create_inspiration = bow_inspiration }
}
}
}
scripted_effect ep1_flavour_0031_add_both_scholars_effect = {
# Add both scholars first-up.
add_courtier = scope:scholar_1
add_courtier = scope:scholar_2
# Well, this doesn't exactly paint your court in the best light.
change_current_court_grandeur = miniscule_court_grandeur_loss
# Buuuut it does make pepole think better of ye.
add_prestige = minor_prestige_gain
}
scripted_effect ep1_flavour_031_add_scholars_stress_effect = {
stress_impact = {
drunkard = miniscule_stress_impact_loss
gregarious = miniscule_stress_impact_loss
shy = $STRESS_GAIN$
temperate = $STRESS_GAIN$
}
}
# Several fresh young scholars are newly arrived at court & need guidance.
ep1_flavor.0031 = {
type = character_event
title = ep1_flavor.0031.t
desc = ep1_flavor.0031.desc
theme = learning
left_portrait = {
character = scope:scholar_1
animation = worry
}
right_portrait = {
character = scope:scholar_2
animation = personality_bold
}
override_background = { reference = tavern }
cooldown = { years = 5 }
trigger = {
# Standard checks.
has_royal_court = yes
has_dlc_feature = royal_court
is_available_at_peace_adult = yes
# Since this is a fairly scholar-specific thing, we restrict it to scholarly courts.
has_court_type = court_scholarly
}
weight_multiplier = {
base = 1
# No court weighting, since we hard-restrict this to scholarly courts.
}
immediate = {
# Create the two scholars.
## First a scholar's scholar.
create_character = {
template = capital_scholar_character
location = root.capital_province
save_scope_as = scholar_1
}
## Then a writer.
create_character = {
template = capital_writer_character
location = root.capital_province
save_scope_as = scholar_2
}
}
# Down it, scope:scholar_1!
option = {
name = ep1_flavor.0031.a
# Become friends with scope:scholar_1.
set_relation_friend = { reason = friend_drinking_together target = scope:scholar_1 }
# Give scope:scholar_1 an inspiration.
scope:scholar_1 = {
ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_1 }
}
# Gain both scholars.
ep1_flavour_0031_add_both_scholars_effect = yes
# Stress impact handled in the effect.
ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = medium_stress_impact_gain }
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 1
ai_energy = 0.5
}
}
}
# We like to drink with scope:scholar_2, because scope:scholar_2 is our mate!
option = {
name = ep1_flavor.0031.b
# Become friends with scope:scholar_2.
set_relation_friend = { reason = friend_drinking_together target = scope:scholar_1 }
# Give scope:scholar_2 an inspiration.
scope:scholar_2 = {
ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_2 }
}
# Gain both scholars.
ep1_flavour_0031_add_both_scholars_effect = yes
# Stress impact handled in the effect.
ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = medium_stress_impact_gain }
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 1
ai_energy = 0.5
}
}
}
# There are some techniques that only experience can teach...
option = {
name = ep1_flavor.0031.c
flavor = ep1_flavor.0031.c.tt
trigger = {
OR = {
has_trait = scholar
has_trait = drunkard
}
}
trait = scholar
trait = drunkard
# Become friends with *both* scholars.
set_relation_friend = { reason = friend_impressive_feat_of_alcoholism target = scope:scholar_1 }
set_relation_friend = { reason = friend_impressive_feat_of_alcoholism target = scope:scholar_2 }
# Plus, *both* get inspirations.
scope:scholar_1 = {
ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_1 }
}
scope:scholar_2 = {
ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_2 }
}
# Gain a modifier that loses you a little health for the weird concoction.
add_character_modifier = {
modifier = what_did_i_just_drink_modifier
years = 5
}
# Gain both scholars.
ep1_flavour_0031_add_both_scholars_effect = yes
# Stress impact handled in the effect.
ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = major_stress_impact_gain }
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 1
ai_energy = 1
}
}
}
# These rituals are unbecoming of the scholarly.
option = {
name = ep1_flavor.0031.d
# The scholars are booted.
hidden_effect = {
scope:scholar_1 = { silent_disappearance_effect = yes }
scope:scholar_2 = { silent_disappearance_effect = yes }
}
# Gain a modifier making you out to be a bit of a miser, but a more learned one.
add_character_modifier = {
modifier = known_killjoy_modifier
years = 10
}
# Gain a bunch of learning lifestyle XP.
add_learning_lifestyle_xp = major_lifestyle_xp
stress_impact = {
shy = miniscule_stress_impact_loss
temperate = miniscule_stress_impact_loss
lifestyle_reveler = minor_stress_impact_gain
drunkard = minor_stress_impact_gain
gregarious = minor_stress_impact_gain
gluttonous = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.25
ai_sociability = -0.5
}
}
}
}
##################################################
# Oltner
scripted_trigger appropriate_eunuch_trigger = {
is_available_ai_adult = yes
is_eunuch_trigger = yes
NOT = {
has_relation_rival = root
}
}
scripted_effect appoint_court_eunuch_effect = {
if = {
limit = {
culture = { has_cultural_parameter = can_appoint_chief_eunuch }
}
court_position_grant_effect = {
EMPLOYER = root
CANDIDATE = scope:eunuch_target
POS = chief_eunuch
}
}
}
# A visiting Eunuch offers their services
ep1_flavor.1000 = {
type = character_event
title = ep1_flavor.1000.t
desc = ep1_flavor.1000.desc
theme = learning
override_background = {
reference = sitting_room
}
cooldown = {
years = 10
}
left_portrait = {
character = scope:eunuch_target
animation = flirtation
}
trigger = {
has_ep1_dlc_trigger = yes
is_landed_or_landless_administrative = yes
culture = {
OR = {
has_cultural_parameter = can_castrate_prisoners
has_cultural_parameter = eunuch_trait_bonuses
has_cultural_parameter = court_machinations_eunuch_trait_bonuses
has_cultural_parameter = can_appoint_chief_eunuch
}
}
is_available_at_peace_adult = yes
OR = {
is_ai = no
primary_title.tier > tier_duchy # So that we don't create too many characters for the AI (performance)
}
}
immediate = {
if = {
limit = {
any_pool_character = {
province = root.capital_province
appropriate_eunuch_trigger = yes
}
}
random_pool_character = {
province = root.capital_province
limit = {
appropriate_eunuch_trigger = yes
}
save_scope_as = eunuch_target
}
}
else = {
# Find an appropriate culture for the Eunuch
if = {
limit = {
is_ai = no # This is gonna be expensive, exclude AI's
any_culture_global = {
has_cultural_parameter = can_castrate_prisoners
}
}
random_culture_global = {
limit = {
has_cultural_parameter = can_castrate_prisoners
}
weight = { # Upweight for your own culture if it's valid (more greeks in greece, but the potential for east africans to visit, etc)
base = 1
modifier = {
add = 2
this = root.culture
}
modifier = {
factor = 0
this != root.culture
NOT = {
any_culture_county = { # This is the expensive part
title_province = {
squared_distance = { target = root.capital_province value < squared_distance_massive }
}
}
}
}
}
save_scope_as = eunuch_target_culture
}
}
else = {
root.culture = {
save_scope_as = eunuch_target_culture
}
}
create_character = {
location = root.capital_province
culture = scope:eunuch_target_culture
dynasty = none
template = random_learned_eunuch_character
save_scope_as = eunuch_target
}
}
if = { # Find somewhere else for the eunuch to move if they do not get employment
limit = {
any_neighboring_and_across_water_top_liege_realm = {
always = yes
}
}
random_neighboring_and_across_water_top_liege_realm = {
save_scope_as = new_court
}
}
if = { # Save old court eunuch if relevant
limit = { employs_court_position = chief_eunuch_court_position }
random_court_position_holder = {
type = chief_eunuch_court_position
save_scope_as = old_holder
}
}
}
option = { # Accept the Eunuch's offer
name = ep1_flavor.1000.a
pay_short_term_gold = {
target = scope:eunuch_target
gold = root.tiny_gold_value
}
add_courtier = scope:eunuch_target
appoint_court_eunuch_effect = yes
scope:eunuch_target = {
add_opinion = {
target = root
opinion = 50
modifier = grateful_opinion
}
add_character_flag = {
flag = blocked_from_leaving
years = 25
}
}
stress_impact = {
greedy = massive_stress_impact_gain
paranoid = major_stress_gain
arrogant = major_stress_impact_gain
fickle = medium_stress_impact_gain
cynical = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0.1
ai_greed >= low_positive_ai_value
}
}
}
option = { # Negotiate with the eunuch
name = ep1_flavor.1000.b
duel = {
skill = diplomacy
value = 12
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = ep1_flavor.1000.c.success
send_interface_toast = {
title = ep1_flavor.1000.c.success
left_icon = scope:eunuch_target
add_courtier = scope:eunuch_target
appoint_court_eunuch_effect = yes
add_prestige = minor_prestige_gain
scope:eunuch_target = {
progress_towards_friend_effect = {
CHARACTER = root
OPINION = 0
REASON = friend_court_position_recieved
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = ep1_flavor.1000.c.failure
send_interface_toast = {
title = ep1_flavor.1000.c.failure
left_icon = scope:eunuch_target
add_prestige = minor_prestige_loss
scope:eunuch_target = {
hidden_effect = {
random = {
chance = 50
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = root }
}
set_relation_potential_rival = root
}
}
}
}
custom_tooltip = eunuch_moves_tt
hidden_effect = {
scope:eunuch_target = {
if = {
limit = {
exists = scope:new_court
}
move_to_pool_at = scope:new_court.holder.capital_county.title_province
}
}
}
}
}
}
stress_impact = {
generous = medium_stress_impact_gain
patient = medium_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0.1
ai_sociability >= low_positive_ai_value
}
}
}
option = { # Deny the eunuch
name = ep1_flavor.1000.c
custom_tooltip = eunuch_moves_tt
hidden_effect = {
scope:eunuch_target = {
if = {
limit = {
exists = scope:new_court
}
move_to_pool_at = scope:new_court.holder.capital_county.title_province
}
}
}
stress_impact = {
diligent = massive_stress_impact_gain
gregarious = major_stress_impact_gain
ambitious = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
factor = 0.1
ai_greed <= low_positive_ai_value
}
}
}
}
# A learned eunuch wishes to sell various tips & tricks
ep1_flavor.1200 = {
type = character_event
title = ep1_flavor.1200.t
desc = ep1_flavor.1200.desc
theme = intrigue
cooldown = {
years = 30
}
left_portrait = {
character = scope:eunuch_target
animation = personality_rational
}
trigger = {
has_ep1_dlc_trigger = yes
is_landed_or_landless_administrative = yes
culture = {
OR = {
has_cultural_parameter = can_castrate_prisoners
has_cultural_parameter = eunuch_trait_bonuses
has_cultural_parameter = court_machinations_eunuch_trait_bonuses
has_cultural_parameter = can_appoint_chief_eunuch
}
}
is_available_at_peace_adult = yes
OR = {
is_ai = no
primary_title.tier > tier_duchy # So that we don't create too many characters for the AI (performance)
}
OR = { # Performance
is_ai = no
any_courtier_or_guest = {
appropriate_eunuch_trigger = yes
}
}
}
immediate = {
if = {
limit = {
any_courtier_or_guest = {
appropriate_eunuch_trigger = yes
}
}
random_courtier_or_guest = {
limit = {
appropriate_eunuch_trigger = yes
}
assign_quirk_effect = yes
save_scope_as = eunuch_target
}
}
else_if = {
limit = {
any_pool_character = {
province = root.capital_province
appropriate_eunuch_trigger = yes
}
}
random_pool_character = {
province = root.capital_province
limit = {
appropriate_eunuch_trigger = yes
}
assign_quirk_effect = yes
save_scope_as = eunuch_target
}
}
else = {
# Find an appropriate culture for the Eunuch
if = {
limit = {
is_ai = no # This is gonna be expensive, exclude AI's
any_culture_global = {
has_cultural_parameter = can_castrate_prisoners
}
}
random_culture_global = {
limit = {
has_cultural_parameter = can_castrate_prisoners
}
weight = { # Upweight for your own culture if it's valid (more greeks in greece, but the potential for east africans to visit, etc)
base = 1
modifier = {
add = 2
this = root.culture
}
modifier = {
factor = 0
this != root.culture
NOT = {
any_culture_county = { # This is the expensive part
title_province = {
squared_distance = { target = root.capital_province value < squared_distance_massive }
}
}
}
}
}
save_scope_as = eunuch_target_culture
}
}
else = {
root.culture = {
save_scope_as = eunuch_target_culture
}
}
create_character = {
location = root.capital_province
culture = scope:eunuch_target_culture
dynasty = none
template = random_learned_eunuch_character
save_scope_as = eunuch_target
}
}
}
option = { # Boost to learning languages
name = ep1_flavor.1200.a
pay_short_term_gold = {
target = scope:eunuch_target
gold = root.tiny_gold_value
}
add_character_modifier = {
modifier = secrets_of_language_modifier
years = 15
}
stress_impact = {
greedy = massive_stress_impact_gain
paranoid = major_stress_gain
arrogant = major_stress_impact_gain
fickle = medium_stress_impact_gain
cynical = minor_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
add = ai_sociability
}
}
}
option = { # Hostile Scheme boost
name = ep1_flavor.1200.b
pay_short_term_gold = {
target = scope:eunuch_target
gold = root.tiny_gold_value
}
add_character_modifier = {
modifier = secrets_of_murder_modifier
years = 15
}
stress_impact = {
forgiving = massive_stress_impact_gain
compassionate = major_stress_gain
content = major_stress_impact_gain
humble = medium_stress_impact_gain
calm = medium_stress_impact_gain
temperate = minor_stress_impact_gain
}
ai_chance = {
base = 0
modifier = {
add = ai_vengefulness
}
}
}
option = { # Stewardship tips
name = ep1_flavor.1200.c
pay_short_term_gold = {
target = scope:eunuch_target
gold = root.tiny_gold_value
}
add_character_modifier = {
modifier = secrets_of_the_realm_modifier
years = 15
}
stress_impact = {
lazy = massive_stress_impact_gain
impatient = medium_stress_impact_gain
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
}
}
option = { # No, thank you
name = ep1_flavor.1200.d
scope:eunuch_target = {
add_opinion = {
target = root
opinion = -15
modifier = disappointed_opinion
}
hidden_effect = {
random = {
chance = 50
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = root }
}
set_relation_potential_rival = root
}
}
}
}
stress_impact = {
diligent = massive_stress_impact_gain
gregarious = medium_stress_impact_gain
ambitious = medium_stress_impact_gain
}
ai_chance = {
base = 100
modifier = {
add = ai_energy
ai_energy <= 0
}
}
}
}
##################################################
# Joe
##################################################
# 2000 - 2999
##################################################
#########################
# Martial Exercises #
# by Joe Parkin #
#########################
scripted_trigger ep1_flavor_2000_maa_scope_trigger = {
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:$TYPE$
}
NAND = {
exists = scope:maa_type_2
scope:maa_type_2 = flag:$TYPE$
}
}
scripted_effect ep1_flavor_2000_maa_scope_effect = {
if = {
limit = {
NOT = { exists = scope:maa_type_1 }
}
save_scope_value_as = {
name = maa_type_1
value = flag:$TYPE$
}
}
else_if = {
limit = {
NOT = { exists = scope:maa_type_2 }
}
save_scope_value_as = {
name = maa_type_2
value = flag:$TYPE$
}
}
}
# Positive opinion modifiers for all vassal/courtier characters of root culture (they like you respecting their cultural MAA)
scripted_effect ep1_flavor_2000_culture_opinion_effect = {
every_vassal_or_below = {
custom = ep1_flavor.2000.culture_tt
limit = {
culture = root.culture
NOR = {
AND = {
exists = scope:knight_scope
this = scope:knight_scope
}
AND = {
exists = scope:marshal_scope
this = scope:marshal_scope
}
}
}
add_opinion = {
target = root
modifier = respect_opinion
opinion = 5
}
}
hidden_effect = {
every_courtier = {
limit = {
culture = root.culture
NOR = {
AND = {
exists = scope:knight_scope
this = scope:knight_scope
}
AND = {
exists = scope:marshal_scope
this = scope:marshal_scope
}
}
}
add_opinion = {
target = root
modifier = respect_opinion
opinion = 5
}
}
}
}
# Apply correct modifier and opinion boosts based on selected MAA type
scripted_effect ep1_flavor_2000_type_effect = {
switch = {
trigger = scope:$TYPE$
flag:archers = {
add_character_modifier = {
modifier = ep1_2000_archer_modifier
years = 10
}
if = {
limit = {
culture = { culture_has_archer_maa = yes }
}
ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture
}
}
flag:infantry = {
add_character_modifier = {
modifier = ep1_2000_infantry_modifier
years = 10
}
if = {
limit = {
OR = {
culture = { culture_has_heavy_infantry_maa = yes }
culture = { culture_has_pikemen_maa = yes }
}
}
ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture
}
}
flag:cavalry = {
add_character_modifier = {
modifier = ep1_2000_cavalry_modifier
years = 10
}
if = {
limit = {
OR = {
culture = { culture_has_light_cavalry_maa = yes }
culture = { culture_has_heavy_cavalry_maa = yes }
}
}
ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture
}
}
flag:archer_cavalry = {
add_character_modifier = {
modifier = ep1_2000_acavalry_modifier
years = 10
}
if = {
limit = {
OR = {
culture = { culture_has_archer_cavalry_maa = yes }
mpo_can_recruit_nomad_maa_trigger = yes
}
}
ep1_flavor_2000_culture_opinion_effect = yes
}
}
flag:skirmishers = {
add_character_modifier = {
modifier = ep1_2000_skirmisher_modifier
years = 10
}
if = {
limit = {
culture = { culture_has_skirmisher_maa = yes }
}
ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture
}
}
flag:elephant_cavalry = {
add_character_modifier = {
modifier = ep1_2000_ecavalry_modifier
years = 10
}
}
flag:camel_cavalry = {
add_character_modifier = {
modifier = ep1_2000_ccavalry_modifier
years = 10
}
}
flag:levies = {
add_character_modifier = {
modifier = ep1_2000_levies_modifier
years = 10
}
}
}
}
ep1_flavor.2000 = {
type = character_event
title = ep1_flavor.2000.t
desc = {
desc = ep1_flavor.2000.desc_intro
first_valid = {
triggered_desc = {
trigger = { scope:maa_type_1 = flag:archers }
desc = ep1_flavor.2000.desc_archers
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:infantry }
desc = ep1_flavor.2000.desc_infantry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:cavalry }
desc = ep1_flavor.2000.desc_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:archer_cavalry }
desc = ep1_flavor.2000.desc_archer_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:elephant_cavalry }
desc = ep1_flavor.2000.desc_elephant_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:camel_cavalry }
desc = ep1_flavor.2000.camel_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:levies }
desc = ep1_flavor.2000.desc_levies
}
}
desc = ep1_flavor.2000.desc_bridge
first_valid = {
triggered_desc = {
trigger = { scope:maa_type_2 = flag:archers }
desc = ep1_flavor.2000.desc_archers
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:infantry }
desc = ep1_flavor.2000.desc_infantry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:cavalry }
desc = ep1_flavor.2000.desc_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:archer_cavalry }
desc = ep1_flavor.2000.desc_archer_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:elephant_cavalry }
desc = ep1_flavor.2000.desc_elephant_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:camel_cavalry }
desc = ep1_flavor.2000.camel_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:levies }
desc = ep1_flavor.2000.desc_levies
}
}
desc = ep1_flavor.2000.desc_outro
}
theme = martial
override_background = { reference = army_camp }
cooldown = { years = 10 }
left_portrait = {
character = scope:knight_scope
animation = throne_room_two_handed_passive_1
}
right_portrait = {
character = cp:councillor_marshal
animation = marshal
}
trigger = {
has_ep1_dlc_trigger = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_landed_or_landless_administrative = yes
is_available_adult = yes
exists = cp:councillor_marshal
any_knight = {
count >= 1
is_available_ai_adult = yes
NOT = { this = root.cp:councillor_marshal }
}
OR = {
OR = {
culture = { culture_has_archer_maa = yes }
number_maa_regiments_of_base_type = { type = archers value > 0 }
}
OR = {
culture = { culture_has_light_cavalry_maa = yes }
culture = { culture_has_heavy_cavalry_maa = yes }
number_maa_regiments_of_base_type = { type = light_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 }
}
OR = {
culture = { culture_has_heavy_infantry_maa = yes }
culture = { culture_has_pikemen_maa = yes }
number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 }
number_maa_regiments_of_base_type = { type = pikemen value > 0 }
}
OR = {
OR = {
culture = { culture_has_archer_cavalry_maa = yes }
mpo_can_recruit_nomad_maa_trigger = yes
}
number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 }
}
OR = {
culture = { culture_has_skirmisher_maa = yes }
number_maa_regiments_of_base_type = { type = skirmishers value > 0 }
}
number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 }
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_warlike }
}
immediate = {
cp:councillor_marshal = { save_scope_as = marshal_scope }
ordered_knight = {
limit = {
is_available_ai_adult = yes
this != scope:marshal_scope
}
order_by = prowess
save_scope_as = knight_scope
}
hidden_effect = {
while = {
count = 3
random_list = {
10 = { # archers
trigger = {
OR = {
number_maa_regiments_of_base_type = { type = archers value > 0 }
culture = { culture_has_archer_maa = yes }
}
ep1_flavor_2000_maa_scope_trigger = { TYPE = archers }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = archers value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = archers }
}
10 = { # infantry
trigger = {
OR = {
number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 }
number_maa_regiments_of_base_type = { type = pikemen value > 0 }
culture = { culture_has_heavy_infantry_maa = yes }
culture = { culture_has_pikemen_maa = yes }
}
ep1_flavor_2000_maa_scope_trigger = { TYPE = infantry }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = heavy_infantry value > 4 }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = pikemen value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = infantry }
}
10 = { # cavalry
trigger = {
OR = {
number_maa_regiments_of_base_type = { type = light_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 }
culture = { culture_has_light_cavalry_maa = yes }
culture = { culture_has_heavy_cavalry_maa = yes }
}
ep1_flavor_2000_maa_scope_trigger = { TYPE = cavalry }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = light_cavalry value > 4 }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = heavy_cavalry value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = cavalry }
}
10 = { # archer_cavalry
trigger = {
OR = {
number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 }
OR = {
culture = { culture_has_archer_cavalry_maa = yes }
mpo_can_recruit_nomad_maa_trigger = yes
}
}
ep1_flavor_2000_maa_scope_trigger = { TYPE = archer_cavalry }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = archer_cavalry value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = archer_cavalry }
}
10 = { # skirmishers
trigger = {
OR = {
number_maa_regiments_of_base_type = { type = skirmishers value > 0 }
culture = { culture_has_skirmisher_maa = yes }
}
ep1_flavor_2000_maa_scope_trigger = { TYPE = skirmishers }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = skirmishers value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = skirmishers }
}
10 = { # elephant_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 }
ep1_flavor_2000_maa_scope_trigger = { TYPE = elephant_cavalry }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = elephant_cavalry value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = elephant_cavalry }
}
10 = { # camel_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 }
ep1_flavor_2000_maa_scope_trigger = { TYPE = camel_cavalry }
}
modifier = {
factor = 2
number_maa_regiments_of_base_type = { type = camel_cavalry value > 4 }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = camel_cavalry }
}
1 = { # levies
trigger = {
ep1_flavor_2000_maa_scope_trigger = { TYPE = levies }
}
ep1_flavor_2000_maa_scope_effect = { TYPE = levies }
}
}
}
}
}
option = { # First type
name = {
trigger = { scope:maa_type_1 = flag:archers }
text = ep1_flavor.2000.archers
}
name = {
trigger = {
scope:maa_type_1 = flag:archers
culture = { has_cultural_tradition = tradition_longbow_competitions }
}
text = ep1_flavor.2000.archers_longbow
}
name = {
trigger = { scope:maa_type_1 = flag:infantry }
text = ep1_flavor.2000.infantry
}
name = {
trigger = { scope:maa_type_1 = flag:cavalry }
text = ep1_flavor.2000.cavalry
}
name = {
trigger = {
scope:maa_type_1 = flag:cavalry
OR = {
culture = culture:french
culture = { has_cultural_tradition = tradition_chivalry }
}
}
text = ep1_flavor.2000.cavalry_joust
}
name = {
trigger = {
scope:maa_type_1 = flag:cavalry
OR = {
culture = { has_cultural_pillar = heritage_byzantine }
is_roman_emperor_trigger = yes
}
}
text = ep1_flavor.2000.cavalry_tzykanion
}
name = {
trigger = {
scope:maa_type_1 = flag:cavalry
OR = {
culture = { has_cultural_pillar = heritage_iranian }
has_title = title:e_persia #Must be the current emperor.
}
}
text = ep1_flavor.2000.cavalry_chovgan
}
name = {
trigger = { scope:maa_type_1 = flag:archer_cavalry }
text = ep1_flavor.2000.archer_cavalry
}
name = {
trigger = { scope:maa_type_1 = flag:skirmishers }
text = ep1_flavor.2000.skirmishers
}
name = {
trigger = { scope:maa_type_1 = flag:elephant_cavalry }
text = ep1_flavor.2000.elephant_cavalry
}
name = {
trigger = { scope:maa_type_1 = flag:camel_cavalry }
text = ep1_flavor.2000.camel_cavalry
}
name = {
trigger = { scope:maa_type_1 = flag:levies }
text = ep1_flavor.2000.levies
}
name = {
trigger = {
scope:maa_type_1 = flag:levies
culture = { has_cultural_pillar = heritage_goidelic }
}
text = ep1_flavor.2000.levies_caid
}
# Costs
stress_impact = {
arrogant = medium_stress_impact_gain
greedy = medium_stress_impact_gain
}
remove_treasury_or_gold = medium_treasury_or_gold_value
# Effects
ep1_flavor_2000_type_effect = { TYPE = maa_type_1 } # Add relevant modifier and cultural opinion if relevant
scope:marshal_scope = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
}
scope:knight_scope = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_greed = -1
ai_boldness = 0.5
ai_rationality = 0.5
}
modifier = {
factor = 2
OR = {
has_relation_friend = scope:marshal_scope
has_relation_rival = scope:knight_scope
}
}
}
}
option = { # Second type
name = { # Archers
trigger = { scope:maa_type_2 = flag:archers }
text = ep1_flavor.2000.archers
}
name = { # Longbowmen - welsh
trigger = {
scope:maa_type_2 = flag:archers
culture = { has_cultural_tradition = tradition_longbow_competitions }
}
text = ep1_flavor.2000.archers_longbow
}
name = { # Infantry
trigger = { scope:maa_type_2 = flag:infantry }
text = ep1_flavor.2000.infantry
}
name = { # Cavalry
trigger = { scope:maa_type_2 = flag:cavalry }
text = ep1_flavor.2000.cavalry
}
name = { # Joust - chivalry
trigger = {
scope:maa_type_2 = flag:cavalry
OR = {
culture = culture:french
culture = { has_cultural_tradition = tradition_chivalry }
}
}
text = ep1_flavor.2000.cavalry_joust
}
name = { # Tyzkanion - byzaboo
trigger = {
scope:maa_type_2 = flag:cavalry
OR = {
culture = { has_cultural_pillar = heritage_byzantine }
is_roman_emperor_trigger = yes
}
}
text = ep1_flavor.2000.cavalry_tzykanion
}
name = { # Chovgan - parsi
trigger = {
scope:maa_type_2 = flag:cavalry
OR = {
culture = { has_cultural_pillar = heritage_iranian }
has_title = title:e_persia #Must be the current emperor.
}
}
text = ep1_flavor.2000.cavalry_chovgan
}
name = { # Horse archers
trigger = { scope:maa_type_2 = flag:archer_cavalry }
text = ep1_flavor.2000.archer_cavalry
}
name = { # Skirmishers
trigger = { scope:maa_type_2 = flag:skirmishers }
text = ep1_flavor.2000.skirmishers
}
name = { # Elephantry
trigger = { scope:maa_type_2 = flag:elephant_cavalry }
text = ep1_flavor.2000.elephant_cavalry
}
name = { # Camelry
trigger = { scope:maa_type_2 = flag:camel_cavalry }
text = ep1_flavor.2000.camel_cavalry
}
name = { # Peasants
trigger = { scope:maa_type_2 = flag:levies }
text = ep1_flavor.2000.levies
}
name = { # Caid - gaelic
trigger = {
scope:maa_type_2 = flag:levies
culture = { has_cultural_pillar = heritage_goidelic }
}
text = ep1_flavor.2000.levies_caid
}
# Costs
stress_impact = {
arrogant = medium_stress_impact_gain
greedy = medium_stress_impact_gain
}
remove_treasury_or_gold = medium_treasury_or_gold_value
# Effects
ep1_flavor_2000_type_effect = { TYPE = maa_type_2 } # Add relevant modifier and cultural opinion if relevant
scope:marshal_scope = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
scope:knight_scope = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_greed = -1
ai_boldness = 0.5
ai_rationality = 0.5
}
modifier = {
factor = 2
OR = {
has_relation_friend = scope:knight_scope
has_relation_rival = scope:marshal_scope
}
}
}
}
option = { # Hunting is the best sport
name = ep1_flavor.2000.c
# Costs
remove_treasury_or_gold = medium_treasury_or_gold_value
stress_impact = {
humble = medium_stress_impact_gain
lazy = medium_stress_impact_gain
greedy = major_stress_impact_gain
lifestyle_hunter = medium_stress_impact_loss
athletic = minor_stress_impact_loss
}
# Effects
add_character_modifier = {
modifier = ep1_2000_knights_modifier
years = 5
}
if = {
limit = {
culture = {
OR = {
has_cultural_tradition = tradition_hunters
has_cultural_tradition = tradition_sacred_hunts
}
}
}
custom_tooltip = ep1_flavor.2000.tradition_tt
ep1_flavor_2000_culture_opinion_effect = yes
}
else = {
every_knight = {
custom = ep1_flavor.2000.knight_tt
limit = {
NOR = {
this = scope:knight_scope
this = scope:marshal_scope
}
}
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 5
}
}
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_greed = -2
ai_boldness = 1
ai_energy = 1
}
modifier = {
factor = 2
OR = {
has_trait = lifestyle_hunter
has_trait = athletic
}
}
}
}
option = { # Too expensive
name = ep1_flavor.2000.d
# Costs
change_current_court_grandeur = minor_court_grandeur_loss
scope:marshal_scope = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
scope:knight_scope = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
stress_impact = {
generous = medium_stress_impact_gain
athletic = medium_stress_impact_gain
lifestyle_hunter = medium_stress_impact_gain
improvident = medium_stress_impact_gain
profligate = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_greed = 1
ai_boldness = -1
}
modifier = {
factor = 0.5
OR = {
has_trait = lifestyle_hunter
has_trait = athletic
}
}
modifier = {
factor = 0.5
OR = {
has_trait = improvident
has_trait = profligate
}
}
}
}
}
#########################
# Court of Vipers #
# by Joe Parkin #
#########################
# Councillor exists and is not already saved
scripted_trigger ep1_flavor_councillor_scope_trigger = {
exists = cp:councillor_$ROLE$
NAND = {
exists = scope:councillor_1
scope:councillor_1 = cp:councillor_$ROLE$
}
}
# Scheme is secret and hostile
scripted_trigger ep1_flavor_2010_base_scheme_trigger = {
scheme_owner.liege = root
is_hostile = yes
is_scheme_exposed = no
}
# Scheme is above and contains a single councillor from event
scripted_trigger ep1_flavor_2010_councillor_scheme_trigger = {
ep1_flavor_2010_base_scheme_trigger = yes # Scheme is secret and hostile
OR = { # Only 1 councillor in a plot against you
AND = {
scheme_owner = { is_in_list = ep1_2010_list }
any_scheme_agent_character = {
count = 0
is_in_list = ep1_2010_list
}
}
any_scheme_agent_character = {
count = 1
is_in_list = ep1_2010_list
}
}
}
# Character is not involved in plot already
scripted_trigger ep1_flavor_2010_real_plot_involvement_trigger = {
AND = {
exists = scope:real_plot
OR = {
this = scope:real_plot.scheme_owner
scope:real_plot = { scheme_is_character_agent = prev }
}
}
}
# Character is not involved in event already
scripted_trigger ep1_flavor_2010_scapegoat_trigger = {
is_adult = yes
NOR = {
ep1_flavor_2010_real_plot_involvement_trigger = yes
AND = {
exists = scope:real_plot_revealer
this = scope:real_plot_revealer
}
AND = {
exists = scope:fake_plot_revealer_1
this = scope:fake_plot_revealer_1
}
AND = {
exists = scope:fake_plot_revealer_2
this = scope:fake_plot_revealer_2
}
AND = {
exists = scope:scapegoat_1
this = scope:scapegoat_1
}
}
}
# Save scopes and add to list dynamically
scripted_effect ep1_flavor_2010_councillor_scope_effect = {
if = {
limit = {
NOT = { exists = scope:councillor_1 }
}
save_scope_as = councillor_1
}
else = { save_scope_as = councillor_2 }
add_to_list = ep1_2010_list
}
# Imprison selected character, and notify if it was the right one
scripted_effect ep1_flavor_2010_imprison_effect = {
if = {
limit = { $COUNCILLOR$ = scope:real_plot_revealer }
scope:real_plotter = { save_scope_as = accused }
}
else_if = {
limit = { $COUNCILLOR$ = scope:fake_plot_revealer_1 }
scope:scapegoat_1 = { save_scope_as = accused }
}
else_if = {
limit = { $COUNCILLOR$ = scope:fake_plot_revealer_2 }
scope:scapegoat_2 = { save_scope_as = accused }
}
rightfully_imprison_character_effect = {
TARGET = scope:accused
IMPRISONER = root
}
random_list = {
2 = {
desc = ep1_flavor.2010.guilty
show_chance = no
modifier = {
trigger = {
scope:real_plotter != scope:accused
}
factor = 0
}
send_interface_toast = {
title = ep1_flavor.2010.guilty
left_icon = scope:accused
hidden_effect = {
scope:real_plot = {
expose_scheme = yes
expose_scheme_agent = scope:real_plotter
}
}
add_prestige = minor_prestige_gain
change_current_court_grandeur = miniscule_court_grandeur_gain
}
}
2 = {
desc = ep1_flavor.2010.innocent
show_chance = no
modifier = {
trigger = { scope:real_plotter = scope:accused }
factor = 0
}
send_interface_toast = {
title = ep1_flavor.2010.innocent
left_icon = scope:accused
add_tyranny = minor_tyranny_gain
change_current_court_grandeur = miniscule_court_grandeur_loss
}
}
}
}
ep1_flavor.2010 = {
type = character_event
title = ep1_flavor.2010.t
desc = {
desc = ep1_flavor.2010.desc
# Spymaster
first_valid = {
triggered_desc = { #Real
trigger = { scope:spymaster = scope:real_plot_revealer }
desc = ep1_flavor.2010.desc_spy_real
}
triggered_desc = { #Fake 1
trigger = { scope:spymaster = scope:fake_plot_revealer_1 }
desc = ep1_flavor.2010.desc_spy_1
}
triggered_desc = { #Fake 2
trigger = { scope:spymaster = scope:fake_plot_revealer_2 }
desc = ep1_flavor.2010.desc_spy_2
}
}
# Councillor 1
first_valid = {
triggered_desc = { #Real
trigger = { scope:councillor_1 = scope:real_plot_revealer }
desc = ep1_flavor.2010.desc_1_real
}
triggered_desc = { #Fake 1
trigger = { scope:councillor_1 = scope:fake_plot_revealer_1 }
desc = ep1_flavor.2010.desc_1_1
}
triggered_desc = { #Fake 2
trigger = { scope:councillor_1 = scope:fake_plot_revealer_2 }
desc = ep1_flavor.2010.desc_1_2
}
}
# Councillor 2
first_valid = {
triggered_desc = { #Real
trigger = { scope:councillor_2 = scope:real_plot_revealer }
desc = ep1_flavor.2010.desc_2_real
}
triggered_desc = { #Fake 1
trigger = { scope:councillor_2 = scope:fake_plot_revealer_1 }
desc = ep1_flavor.2010.desc_2_1
}
triggered_desc = { #Fake 2
trigger = { scope:councillor_2 = scope:fake_plot_revealer_2 }
desc = ep1_flavor.2010.desc_2_2
}
}
# Context
first_valid = {
triggered_desc = {
trigger = {
OR = {
scope:real_plotter = { is_close_family_of = root }
scope:scapegoat_1 = { is_close_family_of = root }
scope:scapegoat_2 = { is_close_family_of = root }
}
}
desc = ep1_flavor.2010.desc_family
}
triggered_desc = {
trigger = {
OR = {
scope:real_plotter = { is_consort_of = root }
scope:scapegoat_1 = { is_consort_of = root }
scope:scapegoat_2 = { is_consort_of = root }
}
}
desc = ep1_flavor.2010.desc_consort
}
triggered_desc = {
trigger = {
OR = {
scope:real_plotter = { is_councillor_of = root }
scope:scapegoat_1 = { is_councillor_of = root }
scope:scapegoat_2 = { is_councillor_of = root }
}
}
desc = ep1_flavor.2010.desc_councillor
}
desc = ep1_flavor.2010.desc_fallback
}
desc = ep1_flavor.2010.desc_outro
}
theme = intrigue
cooldown = { years = 10 }
left_portrait = {
character = scope:spymaster
animation = spymaster
}
lower_left_portrait = {
character = scope:councillor_1
}
lower_center_portrait = {
character = scope:councillor_2
}
trigger = {
is_ai = no # Murder schemes are heavy for performance
has_ep1_dlc_trigger = yes
is_landed_or_landless_administrative = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_available_adult = yes
exists = cp:councillor_spymaster
cp:councillor_spymaster = { is_available_ai_adult = yes }
calc_true_if = {
amount >= 2
AND = {
exists = cp:councillor_chancellor
cp:councillor_chancellor = { is_available_ai_adult = yes }
}
AND = {
exists = cp:councillor_marshal
cp:councillor_marshal = { is_available_ai_adult = yes }
}
AND = {
exists = cp:councillor_steward
cp:councillor_steward = { is_available_ai_adult = yes }
}
AND = {
exists = cp:councillor_court_chaplain
cp:councillor_court_chaplain = { is_available_ai_adult = yes }
}
}
any_courtier = {
is_available_ai_adult = yes
can_start_scheme = {
type = murder
target_character = root
}
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_intrigue }
}
immediate = {
# save 3 councillors
cp:councillor_spymaster = {
save_scope_as = spymaster
add_to_list = ep1_2010_list
}
hidden_effect = {
while = {
count = 2
random_list = {
2 = {
trigger = { # Councillor exists and is not already saved
ep1_flavor_councillor_scope_trigger = { ROLE = chancellor }
}
modifier = {
factor = 4
cp:councillor_chancellor = {
is_scheming_against = { target = root }
}
}
cp:councillor_chancellor = { ep1_flavor_2010_councillor_scope_effect = yes }
}
2 = {
trigger = { # Councillor exists and is not already saved
ep1_flavor_councillor_scope_trigger = { ROLE = marshal }
}
modifier = {
factor = 4
cp:councillor_marshal = {
is_scheming_against = { target = root }
}
}
cp:councillor_marshal = { ep1_flavor_2010_councillor_scope_effect = yes }
}
2 = {
trigger = { # Councillor exists and is not already saved
ep1_flavor_councillor_scope_trigger = { ROLE = steward }
}
modifier = {
factor = 4
cp:councillor_steward = {
is_scheming_against = { target = root }
}
}
cp:councillor_steward = { ep1_flavor_2010_councillor_scope_effect = yes }
}
1 = {
trigger = { # Councillor exists and is not already saved
ep1_flavor_councillor_scope_trigger = { ROLE = court_chaplain }
}
modifier = {
factor = 4
cp:councillor_court_chaplain = {
is_scheming_against = { target = root }
}
}
cp:councillor_court_chaplain = { ep1_flavor_2010_councillor_scope_effect = yes }
}
}
}
}
# find hostile scheme that does involve councillor as an agent
if = {
limit = {
any_targeting_scheme = { ep1_flavor_2010_councillor_scheme_trigger = yes }
}
ordered_targeting_scheme = {
limit = { ep1_flavor_2010_councillor_scheme_trigger = yes }
order_by = scheme_phase_duration
save_scope_as = real_plot
}
random_in_list = {
list = ep1_2010_list
limit = { ep1_flavor_2010_real_plot_involvement_trigger = yes }
save_scope_as = real_plotter
}
}
# find hostile scheme that does not involve councillor as an agent
else_if = {
limit = { # Scheme is secret and hostile
any_targeting_scheme = { ep1_flavor_2010_base_scheme_trigger = yes }
}
ordered_targeting_scheme = {
limit = { ep1_flavor_2010_base_scheme_trigger = yes }
order_by = scheme_phase_duration
save_scope_as = real_plot
scheme_owner = { save_scope_as = real_plotter }
}
}
# create hostile scheme via a random courtier
else = {
random_courtier = {
limit = {
is_available_ai_adult = yes
can_start_scheme = {
type = murder
target_character = root
}
}
weight = {
modifier = {
factor = 10
has_relation_rival = root
}
modifier = {
factor = 4
opinion = {
target = root
value < 0
}
}
modifier = {
factor = 2
opinion = {
target = root
value < 50
}
}
}
save_scope_as = plotter
hidden_effect = {
start_scheme = {
target_character = root
type = murder
}
}
random_scheme = {
type = murder
limit = {
scheme_target_character = root
}
save_scope_as = real_plot
scheme_owner = { save_scope_as = real_plotter }
}
}
}
# Save councillor roles in event
random_in_list = {
list = ep1_2010_list
limit = { ep1_flavor_2010_real_plot_involvement_trigger = no }
save_scope_as = real_plot_revealer
}
random_in_list = {
list = ep1_2010_list
limit = {
NOT = { scope:real_plot_revealer ?= this }
}
save_scope_as = fake_plot_revealer_1
}
random_in_list = {
list = ep1_2010_list
limit = {
NOR = {
scope:real_plot_revealer ?= this
scope:fake_plot_revealer_1 ?= this
}
}
save_scope_as = fake_plot_revealer_2
}
random_courtier = {
limit = { ep1_flavor_2010_scapegoat_trigger = yes }
weight = {
modifier = {
factor = 4
trigger = {
any_in_list = {
list = ep1_2010_list
ep1_flavor_2010_real_plot_involvement_trigger = yes
}
}
is_councillor = yes
}
}
save_scope_as = scapegoat_1
}
random_vassal_or_below = {
limit = { ep1_flavor_2010_scapegoat_trigger = yes }
weight = {
modifier = {
factor = 4
trigger = {
any_in_list = {
list = ep1_2010_list
ep1_flavor_2010_real_plot_involvement_trigger = yes
}
}
is_councillor = yes
}
}
save_scope_as = scapegoat_2
}
}
option = { # Spymaster
name = {
trigger = { scope:spymaster = scope:real_plot_revealer }
text = ep1_flavor.2010.a.real
}
name = {
trigger = { scope:spymaster = scope:fake_plot_revealer_1 }
text = ep1_flavor.2010.a.fake_1
}
name = {
trigger = { scope:spymaster = scope:fake_plot_revealer_2 }
text = ep1_flavor.2010.a.fake_2
}
ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:spymaster }
stress_impact = {
just = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_energy = 1
ai_boldness = 1
}
}
}
option = { # Councillor 1
name = {
trigger = { scope:councillor_1 = scope:real_plot_revealer }
text = ep1_flavor.2010.b.real
}
name = {
trigger = { scope:councillor_1 = scope:fake_plot_revealer_1 }
text = ep1_flavor.2010.b.fake_1
}
name = {
trigger = { scope:councillor_1 = scope:fake_plot_revealer_2 }
text = ep1_flavor.2010.b.fake_2
}
ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:councillor_1 }
stress_impact = {
just = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_energy = 1
ai_boldness = 1
}
}
}
option = { # Councillor 2
name = {
trigger = { scope:councillor_2 = scope:real_plot_revealer }
text = ep1_flavor.2010.c.real
}
name = {
trigger = { scope:councillor_2 = scope:fake_plot_revealer_1 }
text = ep1_flavor.2010.c.fake_1
}
name = {
trigger = { scope:councillor_2 = scope:fake_plot_revealer_2 }
text = ep1_flavor.2010.c.fake_2
}
ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:councillor_2 }
stress_impact = {
just = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_energy = 1
ai_boldness = 1
}
}
}
option = { # Untangle the truth
name = ep1_flavor.2010.d
duel = {
skill = intrigue
value = high_skill_rating
60 = {
desc = ep1_flavor.2010.d.success
compare_modifier = {
value = scope:duel_value
multiplier = 5
}
min = 10
custom_tooltip = ep1_flavor.2010.d.success_tt
hidden_effect = {
send_interface_toast = {
title = ep1_flavor.2010.d.success
left_icon = root
scope:real_plot = {
expose_scheme = yes
expose_scheme_agent = scope:real_plotter
}
rightfully_imprison_character_effect = {
TARGET = scope:real_plotter
IMPRISONER = root
}
show_as_tooltip = {
add_prestige = medium_prestige_gain
change_current_court_grandeur = minor_court_grandeur_gain
}
}
}
add_prestige = medium_prestige_gain
change_current_court_grandeur = minor_court_grandeur_gain
}
40 = {
desc = ep1_flavor.2010.d.failure
compare_modifier = {
value = scope:duel_value
multiplier = -5
}
min = 10
send_interface_toast = {
title = ep1_flavor.2010.d.failure
left_icon = root
add_prestige = medium_prestige_loss
change_current_court_grandeur = minor_court_grandeur_loss
add_character_modifier = {
modifier = ep1_2010_failure_modifier
years = 5
}
}
}
}
stress_impact = {
arbitrary = medium_stress_impact_gain
lazy = medium_stress_impact_gain
trusting = medium_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_honor = 1
ai_rationality = 1
ai_compassion = 1
}
}
}
}
#########################
# Interservice Rivalry #
# by Joe Parkin #
#########################
# Save scopes and add to list dynamically
scripted_effect ep1_flavor_2020_maa_type_scope_effect = {
if = {
limit = {
NOT = { exists = scope:maa_type_1 }
}
save_scope_value_as = { name = maa_type_1 value = flag:$TYPE$ }
}
else = {
save_scope_value_as = { name = maa_type_2 value = flag:$TYPE$ }
}
}
# Applies correct modifier based on relevant MAA (saved in event)
scripted_effect ep1_flavor_2020_modifier_effect = {
if = {
limit = { scope:$TYPE$ = flag:archers }
add_character_modifier = {
modifier = ep1_flavor_2020_archers_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:light_cavalry }
add_character_modifier = {
modifier = ep1_flavor_2020_light_cavalry_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:heavy_infantry }
add_character_modifier = {
modifier = ep1_flavor_2020_heavy_infantry_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:pikemen }
add_character_modifier = {
modifier = ep1_flavor_2020_pikemen_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:heavy_cavalry }
add_character_modifier = {
modifier = ep1_flavor_2020_heavy_cavalry_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:archer_cavalry }
add_character_modifier = {
modifier = ep1_flavor_2020_archer_cavalry_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:skirmishers }
add_character_modifier = {
modifier = ep1_flavor_2020_skirmishers_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:elephant_cavalry }
add_character_modifier = {
modifier = ep1_flavor_2020_elephant_cavalry_modifier
years = 5
}
}
else_if = {
limit = { scope:$TYPE$ = flag:camel_cavalry }
add_character_modifier = {
modifier = ep1_flavor_2020_camel_cavalry_modifier
years = 5
}
}
}
ep1_flavor.2020 = {
type = character_event
title = ep1_flavor.2020.t
desc = {
desc = ep1_flavor.2020.desc
first_valid = {
triggered_desc = {
trigger = { scope:maa_type_1 = flag:archers }
desc = ep1_flavor.2020.desc_knight_1_archers
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:light_cavalry }
desc = ep1_flavor.2020.desc_knight_1_light_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:heavy_infantry }
desc = ep1_flavor.2020.desc_knight_1_heavy_infantry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:pikemen }
desc = ep1_flavor.2020.desc_knight_1_pikemen
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:heavy_cavalry }
desc = ep1_flavor.2020.desc_knight_1_heavy_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:archer_cavalry }
desc = ep1_flavor.2020.desc_knight_1_archer_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:skirmishers }
desc = ep1_flavor.2020.desc_knight_1_skirmishers
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:elephant_cavalry }
desc = ep1_flavor.2020.desc_knight_1_elephant_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_1 = flag:camel_cavalry }
desc = ep1_flavor.2020.desc_knight_1_camel_cavalry
}
}
desc = ep1_flavor.2020.desc_bridge
first_valid = {
triggered_desc = {
trigger = { scope:maa_type_2 = flag:archers }
desc = ep1_flavor.2020.desc_knight_2_archers
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:light_cavalry }
desc = ep1_flavor.2020.desc_knight_2_light_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:heavy_infantry }
desc = ep1_flavor.2020.desc_knight_2_heavy_infantry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:pikemen }
desc = ep1_flavor.2020.desc_knight_2_pikemen
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:heavy_cavalry }
desc = ep1_flavor.2020.desc_knight_2_heavy_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:archer_cavalry }
desc = ep1_flavor.2020.desc_knight_2_archer_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:skirmishers }
desc = ep1_flavor.2020.desc_knight_2_skirmishers
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:elephant_cavalry }
desc = ep1_flavor.2020.desc_knight_2_elephant_cavalry
}
triggered_desc = {
trigger = { scope:maa_type_2 = flag:camel_cavalry }
desc = ep1_flavor.2020.desc_knight_2_camel_cavalry
}
}
}
theme = martial
override_background = { reference = army_camp }
cooldown = { years = 10 }
left_portrait = {
character = scope:knight_1
animation = disapproval
}
right_portrait = {
character = scope:knight_2
animation = marshal
}
trigger = {
has_ep1_dlc_trigger = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_landed_or_landless_administrative = yes
is_available_adult = yes
number_of_maa_regiments > 0
calc_true_if = {
amount >= 2
number_maa_regiments_of_base_type = { type = archers value > 0 }
number_maa_regiments_of_base_type = { type = light_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 }
number_maa_regiments_of_base_type = { type = pikemen value > 0 }
number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = skirmishers value > 0 }
number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 }
number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 }
}
any_knight = {
count >= 2
is_available_ai_adult = yes
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_warlike }
}
immediate = {
hidden_effect = {
while = {
count = 2
ordered_knight = {
limit = {
is_available_ai_adult = yes
NAND = {
exists = scope:knight_1
THIS = scope:knight_1
}
}
order_by = prowess
if = {
limit = {
NOT = { exists = scope:knight_1 }
}
save_scope_as = knight_1
}
else = { save_scope_as = knight_2 }
}
}
while = {
count = 2
random_list = {
2 = { # archers
trigger = {
number_maa_regiments_of_base_type = { type = archers value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:archers
}
}
modifier = {
factor = 10
culture = { culture_has_archer_maa = yes }
}
ep1_2020_maa_regiment_modifier = { TYPE = archers }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = archers }
}
2 = { # light_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = light_cavalry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:light_cavalry
}
}
modifier = {
factor = 10
culture = { culture_has_light_cavalry_maa = yes }
}
ep1_2020_maa_regiment_modifier = { TYPE = light_cavalry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = light_cavalry }
}
2 = { # heavy_infantry
trigger = {
number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:heavy_infantry
}
}
modifier = {
factor = 10
culture = { culture_has_heavy_infantry_maa = yes }
}
ep1_2020_maa_regiment_modifier = { TYPE = heavy_infantry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = heavy_infantry }
}
2 = { # pikemen
trigger = {
number_maa_regiments_of_base_type = { type = pikemen value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:pikemen
}
}
ep1_2020_maa_regiment_modifier = { TYPE = pikemen }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = pikemen }
}
2 = { # heavy_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:heavy_cavalry
}
}
modifier = {
factor = 10
culture = { culture_has_heavy_cavalry_maa = yes }
}
ep1_2020_maa_regiment_modifier = { TYPE = heavy_cavalry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = heavy_cavalry }
}
2 = { # archer_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:archer_cavalry
}
}
modifier = {
factor = 10
OR = {
culture = { culture_has_archer_cavalry_maa = yes }
mpo_can_recruit_nomad_maa_trigger = yes
}
}
ep1_2020_maa_regiment_modifier = { TYPE = archer_cavalry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = archer_cavalry }
}
2 = { # skirmishers
trigger = {
number_maa_regiments_of_base_type = { type = skirmishers value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:skirmishers
}
}
modifier = {
factor = 10
culture = { culture_has_skirmisher_maa = yes }
}
ep1_2020_maa_regiment_modifier = { TYPE = skirmishers }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = skirmishers }
}
2 = { # elephant_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:elephant_cavalry
}
}
ep1_2020_maa_regiment_modifier = { TYPE = elephant_cavalry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = elephant_cavalry }
}
2 = { # camel_cavalry
trigger = {
number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 }
NAND = {
exists = scope:maa_type_1
scope:maa_type_1 = flag:camel_cavalry
}
}
ep1_2020_maa_regiment_modifier = { TYPE = camel_cavalry }
ep1_flavor_2020_maa_type_scope_effect = { TYPE = camel_cavalry }
}
}
}
}
}
option = { # Side with 1st
name = ep1_flavor.2020.a
ep1_flavor_2020_modifier_effect = { TYPE = maa_type_1 } # Applies modifier based on relevant MAA type
scope:knight_1 = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
progress_towards_rival_effect = {
REASON = rival_snubbed_maa
CHARACTER = scope:knight_2
OPINION = 0
}
}
scope:knight_2 = {
add_opinion = {
target = root
modifier = insulted_opinion
opinion = -10
}
}
if = {
limit = { has_relation_rival = scope:knight_1 }
stress_impact = {
base = medium_stress_impact_gain
}
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_honor = 1
ai_vengefulness = 0.5
}
modifier = {
factor = 1.5
opinion = { target = scope:knight_1 value > 25 }
}
modifier = {
factor = 0
has_relation_rival = scope:knight_1
}
}
stress_impact = {
just = minor_stress_impact_gain
calm = minor_stress_impact_gain
humble = minor_stress_impact_gain
}
}
option = { # Side with 2nd
name = ep1_flavor.2020.b
ep1_flavor_2020_modifier_effect = { TYPE = maa_type_2 } # Applies modifier based on relevant MAA type
scope:knight_2 = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
progress_towards_rival_effect = {
REASON = rival_snubbed_maa
CHARACTER = scope:knight_1
OPINION = 0
}
}
scope:knight_1 = {
add_opinion = {
target = root
modifier = insulted_opinion
opinion = -10
}
}
if = {
limit = { has_relation_rival = scope:knight_2 }
stress_impact = {
base = medium_stress_impact_gain
}
}
stress_impact = {
just = minor_stress_impact_gain
calm = minor_stress_impact_gain
humble = minor_stress_impact_gain
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_honor = 1
ai_vengefulness = 0.5
}
modifier = {
factor = 1.5
opinion = { target = scope:knight_2 value > 25 }
}
modifier = {
factor = 0
has_relation_rival = scope:knight_2
}
}
}
option = { # Side with neither
name = ep1_flavor.2020.c
duel = {
skill = martial
target = scope:knight_1
2 = {
compare_modifier = {
value = scope:duel_value
multiplier = 0.5
}
desc = ep1_flavor.2020.c.success
send_interface_toast = {
title = ep1_flavor.2020.c.success
left_icon = scope:knight_1
right_icon = scope:knight_2
add_character_modifier = {
modifier = ep1_flavor_2020_both_modifier
years = 5
}
scope:knight_1 = {
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 5
}
}
scope:knight_2 = {
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 5
}
}
}
}
3 = {
compare_modifier = {
value = scope:duel_value
multiplier = -0.5
}
desc = ep1_flavor.2020.c.failure
send_interface_toast = {
title = ep1_flavor.2020.c.failure
left_icon = scope:knight_1
right_icon = scope:knight_2
add_prestige = minor_prestige_loss
scope:knight_1 = {
add_opinion = {
target = root
modifier = annoyed_opinion
opinion = -5
}
}
scope:knight_2 = {
add_opinion = {
target = root
modifier = annoyed_opinion
opinion = -5
}
}
}
}
}
stress_impact = {
arrogant = minor_stress_impact_gain
wrathful = minor_stress_impact_gain
arbitrary = minor_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_honor = 1
ai_vengefulness = -1
}
modifier = {
factor = 0.5
martial < average_skill_rating
}
modifier = {
factor = 2
martial > average_skill_rating
}
}
}
option = { # Chastise
name = ep1_flavor.2020.d
add_prestige = minor_prestige_loss
scope:knight_1 = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
scope:knight_2 = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
stress_impact = {
brave = minor_stress_impact_gain
arbitrary = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_energy = -1
ai_boldness = -1
}
}
}
}
#########################
# Exotic Arms #
# by Joe Parkin #
#########################
scripted_trigger ep1_flavor_2040_foreign_holder_trigger = {
NOR = {
has_variable = exotic_arms_cooldown
this = prev
in_diplomatic_range = prev
}
has_royal_court = yes
has_dlc_feature = royal_court
is_landed_or_landless_administrative = yes
is_available_adult = yes
gold >= major_gold_value
}
scripted_trigger ep1_flavor_2040_artifact_trigger = {
is_equipped = no
artifact_durability >= 25
AND = {
has_variable = quality
var:quality >= 33
}
AND = {
has_variable = wealth
var:wealth >= 33
}
OR = {
artifact_slot_type = primary_armament
artifact_slot_type = armor
}
}
scripted_effect ep1_flavor_2040_artifact_effect = {
dummy_female = { save_scope_as = dummy_gender }
## Chance for artifact to be bad
random = {
chance = 40
save_scope_value_as = {
name = exotic_blade_quality
value = no
}
}
random_list = {
2 = {
create_artifact_weapon_effect = {
OWNER = scope:exotic_blade_holder
CREATOR = scope:dummy_gender
SET_WEAPON_TYPE = flag:no
}
}
2 = {
create_artifact_armor_effect = {
OWNER = scope:exotic_blade_holder
CREATOR = scope:dummy_gender
SET_ARMOR_TYPE = flag:no
}
}
}
## Create Merchant
scope:exotic_arms_target = {
if = {
limit = {
any_character_to_title_neighboring_and_across_water_county = {
NOT = {
culture = { this = scope:exotic_arms_target.culture }
}
}
}
random_character_to_title_neighboring_and_across_water_county = {
limit = {
NOT = {
culture = { this = scope:exotic_arms_target.culture }
}
}
save_scope_as = merchant_county
}
}
else = {
random_independent_ruler = {
limit = {
in_diplomatic_range = root
any_realm_county = {
NOT = {
culture = { this = scope:exotic_arms_target.culture }
}
}
}
random_realm_county = {
limit = {
NOT = {
culture = { this = scope:exotic_arms_target.culture }
}
}
save_scope_as = merchant_county
}
}
}
}
create_character = {
template = foreign_merchant_template
location = scope:exotic_arms_target.capital_province
save_scope_as = foreign_merchant
}
if = {
limit = { exists = scope:newly_created_artifact }
scope:newly_created_artifact = { save_scope_as = exotic_blade }
}
}
scripted_effect ep1_flavor_2040_transfer_effect = {
if = {
limit = { exists = scope:exotic_blade_quality }
send_interface_toast = {
title = ep1_flavor.2040.toast_poor
left_icon = scope:exotic_blade
scope:exotic_blade = {
set_owner = {
target = scope:exotic_arms_target
history = {
location = scope:exotic_arms_target.capital_province
actor = scope:foreign_merchant
recipient = scope:exotic_arms_target
type = given
}
}
}
}
}
else = {
send_interface_toast = {
title = ep1_flavor.2040.toast
left_icon = scope:exotic_blade
scope:exotic_blade = {
set_owner = {
target = scope:exotic_arms_target
history = {
location = scope:exotic_arms_target.capital_province
actor = scope:foreign_merchant
recipient = scope:exotic_arms_target
type = given
}
}
}
}
}
}
ep1_flavor.2040 = {
type = character_event
title = ep1_flavor.2040.t
desc = {
desc = ep1_flavor.2040.desc
first_valid = {
triggered_desc = {
trigger = { exists = scope:my_artifact }
desc = ep1_flavor.2040.desc.artifact
}
desc = ep1_flavor.2040.desc.gold
}
first_valid = {
triggered_desc = {
trigger = { exists = scope:antiquarian }
desc = {
desc = ep1_flavor.2040.desc.outro_antiquarian
first_valid = {
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position >= 4
}
desc = ep1_flavor.2040.desc.outro_good_praise
}
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position = 3
}
desc = ep1_flavor.2040.desc.outro_good_unsure
}
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position <= 2
}
desc = ep1_flavor.2040.desc.outro_good_warning
}
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position >= 4
exists = scope:exotic_blade_quality
}
desc = ep1_flavor.2040.desc.outro_bad_warning
}
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position = 3
exists = scope:exotic_blade_quality
}
desc = ep1_flavor.2040.desc.outro_bad_unsure
}
triggered_desc = {
trigger = {
exists = scope:antiquarian
scope:antiquarian.aptitude:court_tutor_court_position <= 2
exists = scope:exotic_blade_quality
}
desc = ep1_flavor.2040.desc.outro_bad_praise
}
}
}
}
desc = ep1_flavor.2040.desc.outro
}
}
theme = martial
left_portrait = {
character = scope:antiquarian
animation = worry
}
right_portrait = {
character = scope:foreign_merchant
animation = admiration
}
immediate = {
if = {
limit = {
employs_court_position = antiquarian_court_position
any_court_position_holder = {
is_available_ai_adult = yes
type = antiquarian_court_position
}
}
random_court_position_holder = {
type = antiquarian_court_position
limit = { is_available_ai_adult = yes }
save_scope_as = antiquarian
}
}
## Save own artifact if exists
if = {
limit = {
any_character_artifact = { ep1_flavor_2040_artifact_trigger = yes }
}
random_character_artifact = {
limit = { ep1_flavor_2040_artifact_trigger = yes }
save_scope_as = my_artifact
}
}
}
option = {
name = ep1_flavor.2040.a
trigger = { exists = scope:my_artifact }
custom_tooltip = ep1_flavor.2040.tt_my
custom_tooltip = ep1_flavor.2040.tt_exotic
hidden_effect = {
ep1_flavor_2040_transfer_effect = yes
scope:my_artifact = {
set_owner = {
target = scope:foreign_merchant
history = {
location = scope:exotic_arms_target.capital_province
actor = scope:exotic_arms_target
recipient = scope:foreign_merchant
type = purchased
}
}
set_owner = {
target = scope:exotic_blade_holder
history = {
location = scope:exotic_blade_holder.capital_province
actor = scope:foreign_merchant
recipient = scope:exotic_blade_holder
type = purchased
}
}
}
}
stress_impact = {
greedy = major_stress_impact_gain
arrogant = major_stress_impact_gain
paranoid = major_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_greed = 2
}
}
}
option = {
name = ep1_flavor.2040.b
trigger = {
NOT = { exists = scope:my_artifact }
}
remove_short_term_gold = major_gold_value
custom_tooltip = ep1_flavor.2040.tt_exotic
hidden_effect = { ep1_flavor_2040_transfer_effect = yes }
stress_impact = {
greedy = medium_stress_impact_gain
arrogant = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_greed = 2
}
modifier = {
factor = 0
gold <= major_gold_value
}
}
}
option = {
name = ep1_flavor.2040.c
stress_impact = {
profligate = medium_stress_impact_gain
trusting = medium_stress_impact_gain
improvident = medium_stress_impact_gain
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_greed = 4
}
}
}
after = {
scope:foreign_merchant = { silent_disappearance_effect = yes }
}
}
ep1_flavor.2041 = {
type = character_event
hidden = yes
cooldown = { years = 10 }
trigger = {
has_ep1_dlc_trigger = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_ai = yes
is_landed_or_landless_administrative = yes
any_character_with_royal_court = { ep1_flavor_2040_foreign_holder_trigger = yes }
}
weight_multiplier = {
base = 1
modifier = {
factor = 2
primary_title.tier = tier_empire
}
}
immediate = {
save_scope_as = exotic_blade_holder
random_character_with_royal_court = {
limit = { ep1_flavor_2040_foreign_holder_trigger = yes }
weight = {
base = 1
modifier = {
add = 10
is_ai = no
}
modifier = {
add = 1
has_court_type = court_warlike
}
modifier = {
add = 2
any_character_artifact = { ep1_flavor_2040_artifact_trigger = yes }
}
}
save_scope_as = exotic_arms_target
set_variable = {
name = exotic_arms_cooldown
years = 50
}
}
ep1_flavor_2040_artifact_effect = yes
scope:exotic_arms_target = {
trigger_event = {
id = ep1_flavor.2040
days = 1
}
}
}
}
#########################
# Academic Disagreement #
# by Joe Parkin #
#########################
scripted_trigger ep1_flavor_2070_foreign_court_trigger = {
this != root
in_diplomatic_range = root
faith = {
faith_hostility_level = {
target = root.faith
value < faith_hostile_level
}
}
save_temporary_scope_as = symposium_ruler_temp
root = {
faith = {
faith_hostility_level = {
target = scope:symposium_ruler_temp.faith
value < faith_hostile_level
}
}
}
}
ep1_flavor.2070 = {
type = character_event
title = ep1_flavor.2070.t
desc = {
desc = ep1_flavor.2070.desc.intro
first_valid = {
triggered_desc = { # Theological
trigger = {
OR = {
scope:symposium_scholar = { is_theological_character_trigger = yes }
scope:symposium_courtier = { is_theological_character_trigger = yes }
}
}
desc = {
first_valid = {
triggered_desc = { # Same faith same culture
trigger = {
scope:symposium_scholar.faith = scope:symposium_courtier.faith
scope:symposium_scholar.culture = scope:symposium_courtier.culture
}
desc = ep1_flavor.2070.desc.theo_same_faith
}
triggered_desc = { # Same faith diff culture
trigger = { scope:symposium_scholar.faith = scope:symposium_courtier.faith }
desc = ep1_flavor.2070.desc.theo_same_faith_diff_cult
}
triggered_desc = { # Same religion
trigger = {
scope:symposium_scholar.religion = scope:symposium_courtier.religion
scope:symposium_scholar.faith != scope:symposium_courtier.faith
}
desc = ep1_flavor.2070.desc.theo_same_relig
}
triggered_desc = { # Different religion
trigger = {
scope:symposium_scholar.religion != scope:symposium_courtier.religion
}
desc = ep1_flavor.2070.desc.theo_diff_relig
}
}
}
}
triggered_desc = { # Mystic
trigger = {
scope:symposium_scholar = { has_trait = lifestyle_mystic }
NOT = {
scope:symposium_courtier = { has_trait = lifestyle_mystic }
}
}
desc = ep1_flavor.2070.desc.mystic
}
triggered_desc = { # Medicine
trigger = {
OR = {
scope:symposium_scholar = { has_trait = lifestyle_physician }
scope:symposium_courtier = { has_trait = lifestyle_physician }
}
}
desc = ep1_flavor.2070.desc.medicine
}
triggered_desc = { # Culture
trigger = { scope:symposium_scholar.culture = scope:symposium_courtier.culture }
desc = ep1_flavor.2070.desc.ling_same_cult
}
triggered_desc = { # Language
trigger = {
scope:symposium_scholar.culture != scope:symposium_courtier.culture
scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture }
}
desc = ep1_flavor.2070.desc.ling_diff_cult
}
triggered_desc = { # Diff language
trigger = {
NOT = {
scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture }
}
}
desc = ep1_flavor.2070.desc.ling_diff_lang
}
random_valid = { # Fallback
desc = ep1_flavor.2070.desc.fall_alchemy
desc = ep1_flavor.2070.desc.fall_stars
desc = ep1_flavor.2070.desc.fall_books
}
}
}
theme = learning
cooldown = { years = 10 }
left_portrait = {
character = scope:symposium_courtier
animation = personality_rational
}
right_portrait = {
character = scope:symposium_scholar
animation = schadenfreude
}
trigger = {
has_ep1_dlc_trigger = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_landed_or_landless_administrative = yes
is_available_adult = yes
any_character_with_royal_court = { ep1_flavor_2070_foreign_court_trigger = yes }
any_vassal_or_below = { learning >= 6 }
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_scholarly }
}
immediate = {
culture = { save_scope_as = ling_cul_1 }
every_vassal_or_below = {
limit = { learning >= 15 }
alternative_limit = { learning >= 10 }
alternative_limit = { learning >= 6 }
add_to_list = symposium_list
}
random_in_list = {
list = symposium_list
limit = { learning >= 15 }
alternative_limit = { learning >= 10 }
alternative_limit = { learning >= 6 }
weight = {
modifier = {
factor = 2
is_powerful_vassal = yes
}
}
save_scope_as = symposium_courtier
}
random_character_with_royal_court = {
limit = { ep1_flavor_2070_foreign_court_trigger = yes }
weight = {
modifier = {
factor = 2
primary_title.tier = tier_empire
}
}
save_scope_as = symposium_ruler
}
scope:symposium_ruler.culture = { save_scope_as = ling_cul_2 }
linguist_bonus_culture_effect = { CULTURE = ling_cul_1 }
linguist_bonus_culture_effect = { CULTURE = ling_cul_2 }
create_character = {
dynasty = none
location = root.capital_province
template = symposium_template
save_scope_as = symposium_scholar
}
}
option = {
name = ep1_flavor.2070.a
stress_impact = {
greedy = medium_stress_impact_gain
arrogant = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
}
pay_short_term_gold = {
target = scope:symposium_scholar
gold = medium_gold_value
}
add_courtier = scope:symposium_scholar
hidden_effect = {
scope:symposium_scholar = { return_to_court = yes }
}
reverse_add_opinion = {
target = scope:symposium_courtier
modifier = angry_opinion
opinion = -15
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_greed = -0.5
ai_compassion = 0.5
ai_rationality = 1
}
}
}
option = {
name = {
trigger = {
NOT = {
scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture }
}
root = { knows_language_of_culture = scope:symposium_scholar.culture }
}
text = ep1_flavor.2070.c.lang
}
name = {
trigger = { always = yes }
text = ep1_flavor.2070.c
}
stress_impact = {
humble = medium_stress_impact_gain
shy = medium_stress_impact_gain
}
duel = {
skill = learning
target = scope:symposium_scholar
4 = {
desc = ep1_flavor.2070.c.success
compare_modifier = {
value = scope:duel_value
multiplier = 5
}
modifier = {
add = 1
has_trait = scholar
}
modifier = {
add = 4
NOT = {
scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture }
}
root = { knows_language_of_culture = scope:symposium_scholar.culture }
}
min = 5
send_interface_toast = {
title = ep1_flavor.2070.c.success
left_icon = scope:symposium_scholar
right_icon = scope:symposium_courtier
add_learning_lifestyle_xp = medium_lifestyle_xp
add_prestige = medium_prestige_gain
reverse_add_opinion = {
target = scope:symposium_courtier
modifier = impressed_opinion
opinion = 10
}
custom_tooltip = ep1_flavor.2070.c.tt
hidden_effect = {
random_list = {
2 = {
send_interface_toast = {
title = ep1_flavor.2070.c.success
left_icon = scope:symposium_scholar
add_courtier = scope:symposium_scholar
}
}
2 = {
send_interface_toast = {
title = ep1_flavor.2070.c.failure
left_icon = scope:symposium_scholar
show_as_tooltip = {
scope:symposium_ruler = { add_courtier = scope:symposium_scholar }
}
}
}
}
}
}
}
6 = {
desc = ep1_flavor.2070.c.failure
compare_modifier = {
value = scope:duel_value
multiplier = -2
}
min = 10
send_interface_toast = {
title = ep1_flavor.2070.c.failure
left_icon = scope:symposium_scholar
right_icon = scope:symposium_courtier
add_prestige = medium_prestige_loss
reverse_add_opinion = {
target = scope:symposium_courtier
modifier = disappointed_opinion
opinion = -10
}
show_as_tooltip = {
scope:symposium_ruler = { add_courtier = scope:symposium_scholar }
}
}
}
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_boldness = 1
ai_compassion = -0.5
ai_rationality = 1
}
}
}
option = {
name = ep1_flavor.2070.d
stress_impact = {
humble = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
generous = medium_stress_impact_gain
shy = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
}
add_prestige = minor_prestige_loss
reverse_add_opinion = {
target = scope:symposium_courtier
modifier = grateful_opinion
opinion = 5
}
show_as_tooltip = {
scope:symposium_ruler = { add_courtier = scope:symposium_scholar }
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_boldness = 0.5
ai_compassion = -1
ai_rationality = -0.5
}
}
}
option = {
name = ep1_flavor.2070.e
trigger = {
OR = {
OR = {
scope:symposium_scholar = { is_theological_character_trigger = yes }
scope:symposium_courtier = { is_theological_character_trigger = yes }
}
AND = {
scope:symposium_scholar = { has_trait = lifestyle_mystic }
NOT = { has_trait = lifestyle_mystic }
}
}
has_trait = zealous
}
add_learning_skill = -1
add_piety = medium_piety_gain
stress_impact = {
zealous = medium_stress_impact_loss
}
show_as_tooltip = {
scope:symposium_ruler = { add_courtier = scope:symposium_scholar }
}
ai_chance = {
base = 25
ai_value_modifier = {
ai_zeal = 1
ai_compassion = -1
ai_rationality = -1
}
}
}
after = {
hidden_effect = {
scope:symposium_ruler = {
if = {
limit = {
scope:symposium_scholar.employer != root
}
add_courtier = scope:symposium_scholar
}
}
scope:symposium_scholar = { return_to_court = yes }
}
}
}
#########################
# The Greater Good #
# by Joe Parkin #
#########################
ep1_flavor.2060 = {
type = character_event
title = ep1_flavor.2060.t
desc = ep1_flavor.2060.desc
theme = intrigue
cooldown = { years = 10 }
left_portrait = {
character = scope:detective_scope
animation = worry
}
right_portrait = {
character = scope:grocer_scope
animation = scheme
}
lower_right_portrait = {
character = scope:victim_scope
outfit_tags = { beggar_rags }
}
trigger = {
has_ep1_dlc_trigger = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_landed_or_landless_administrative = yes
is_available_adult = yes
# Victim
any_pool_guest = {
is_lowborn = yes
is_married = no
}
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_intrigue }
}
immediate = {
# Detective
create_character = {
age = { 30 35 }
dynasty = none
faith = root.capital_county.faith
culture = root.capital_county.culture
location = root.capital_province
# Education
random_traits_list = {
count = 1
education_martial_2 = {}
education_martial_3 = {}
}
# Personality
trait = brave
trait = diligent
trait = compassionate
trait = intellect_good_1
# Misc
random_traits = no
gender_female_chance = root_faith_dominant_gender_female_chance
# Skills
diplomacy = { min_template_low_skill max_template_decent_skill }
martial = { min_template_low_skill max_template_decent_skill }
stewardship = { min_template_low_skill max_template_decent_skill }
intrigue = { min_template_low_skill max_template_decent_skill }
learning = { min_template_low_skill max_template_decent_skill }
prowess = { min_template_low_skill max_template_decent_skill }
save_scope_as = detective_scope
}
# Grocer
create_character = {
age = { 50 55 }
dynasty = none
faith = root.capital_county.faith
culture = root.capital_county.culture
location = root.capital_province
# Education
random_traits_list = {
count = 1
education_intrigue_2 = {}
education_intrigue_3 = {}
}
# Personality
trait = deceitful
trait = callous
trait = arrogant
# Misc
random_traits = no
gender_female_chance = root_faith_dominant_gender_female_chance
# Skills
diplomacy = { min_template_low_skill max_template_decent_skill }
martial = { min_template_low_skill max_template_decent_skill }
stewardship = { min_template_low_skill max_template_decent_skill }
intrigue = { min_template_low_skill max_template_low_skill }
learning = { min_template_low_skill max_template_decent_skill }
prowess = { min_template_low_skill max_template_decent_skill }
save_scope_as = grocer_scope
}
scope:grocer_scope = {
add_character_flag = {
flag = use_stealth_clothes
days = 1
}
}
# Victim
random_pool_guest = {
limit = {
is_lowborn = yes
is_married = no
}
save_scope_as = victim_scope
}
hidden_effect = {
scope:victim_scope = {
death = {
death_reason = death_disappearance
killer = scope:grocer_scope
}
}
scope:grocer_scope = {
add_secret = {
type = secret_murder
target = scope:victim_scope
}
}
}
custom_tooltip = ep1_flavor.2060.death_tt
random_realm_province = {
limit = {
county != root.capital_county
has_holding_type = city_holding
}
alternative_limit = { has_holding_type = city_holding }
alternative_limit = { always = yes }
save_scope_as = sandford_scope
}
}
option = {
name = ep1_flavor.2060.a
add_prestige = medium_prestige_loss
scope:detective_scope = { silent_disappearance_effect = yes }
custom_tooltip = ep1_flavor.2060.a.tt
change_current_court_grandeur = minor_court_grandeur_loss
every_pool_guest = {
custom = custom.every_guest
move_to_pool = yes
}
stress_impact = {
paranoid = medium_stress_impact_gain
diligent = medium_stress_impact_gain
wrathful = medium_stress_impact_gain
impatient = medium_stress_impact_gain
craven = medium_stress_impact_gain
}
ai_chance = {
ai_value_modifier = {
ai_compassion = 1
ai_boldness = -1
ai_energy = -1
}
}
}
option = {
name = ep1_flavor.2060.b
hidden_effect = {
scope:victim_scope = { set_killer_public = yes }
}
send_interface_toast = {
title = ep1_flavor.2060.b.title
left_icon = scope:detective_scope
right_icon = scope:grocer_scope
show_as_tooltip = {
imprison = {
target = scope:grocer_scope
type = dungeon
}
}
add_courtier = scope:detective_scope
}
hidden_effect = {
scope:grocer_scope = {
random_secret = {
type = secret_murder
limit = {
secret_target = scope:victim_scope
}
expose_secret = scope:detective_scope
}
}
rightfully_imprison_character_effect = {
TARGET = scope:grocer_scope
IMPRISONER = root
}
}
scope:detective_scope = {
hidden_effect = { return_to_court = yes }
add_opinion = {
target = root
modifier = respect_opinion
opinion = 20
}
}
stress_impact = {
callous = medium_stress_impact_gain
arbitrary = medium_stress_impact_gain
deceitful = medium_stress_impact_gain
arrogant = medium_stress_impact_gain
trusting = medium_stress_impact_gain
}
ai_chance = {
ai_value_modifier = {
ai_compassion = 1
ai_honor = 1
ai_boldness = 1
}
}
}
option = {
name = ep1_flavor.2060.c
send_interface_toast = {
title = ep1_flavor.2060.c.title
left_icon = scope:grocer_scope
right_icon = scope:detective_scope
scope:detective_scope = {
death = {
death_reason = death_disappearance
killer = root
}
}
add_courtier = scope:grocer_scope
}
add_secret = {
type = secret_murder
target = scope:detective_scope
}
random_secret = {
type = secret_murder
limit = {
secret_target = scope:detective_scope
}
reveal_to = scope:grocer_scope
}
scope:grocer_scope = {
hidden_effect = { return_to_court = yes }
add_opinion = {
target = root
modifier = respect_opinion
opinion = 20
}
hidden_effect = {
scope:grocer_scope = {
random_secret = {
type = secret_murder
limit = {
secret_target = scope:victim_scope
}
reveal_to = root
}
}
}
}
change_current_court_grandeur = minor_court_grandeur_gain
stress_impact = {
compassionate = medium_stress_impact_gain
just = medium_stress_impact_gain
honest = medium_stress_impact_gain
humble = medium_stress_impact_gain
trusting = medium_stress_impact_gain
}
ai_chance = {
ai_value_modifier = {
ai_compassion = -1
ai_honor = -1
ai_boldness = 1
}
}
}
}
#########################
# Taking Sides #
# by Joe Parkin #
#########################
# Save scopes and add to list dynamically
scripted_effect ep1_flavor_2030_local_dispute_scope_effect = {
if = {
limit = {
NOT = { exists = scope:local_dispute_1 }
}
save_scope_as = local_dispute_1
if = {
limit = { is_landed_or_landless_administrative = yes }
capital_province.county = { save_scope_as = local_county_1 }
}
else = {
root = {
random_sub_realm_county = {
weight = {
modifier = {
factor = 5
culture = scope:local_dispute_1.culture
}
modifier = {
factor = 5
faith = scope:local_dispute_1.faith
}
modifier = {
factor = 0.1
this = root.capital_province.county
}
}
save_scope_as = local_county_1
}
}
}
}
else_if = {
limit = {
exists = scope:local_dispute_1
this != scope:local_dispute_1
}
save_scope_as = local_dispute_2
if = {
limit = { is_landed_or_landless_administrative = yes }
capital_province.county = { save_scope_as = local_county_2 }
}
else = {
root = {
random_sub_realm_county = {
weight = {
modifier = {
factor = 5
culture = scope:local_dispute_2.culture
}
modifier = {
factor = 5
faith = scope:local_dispute_2.faith
}
modifier = {
factor = 0.1
this = root.capital_province.county
}
modifier = {
factor = 0.1
exists = scope:local_county_1
this = scope:local_county_1
}
}
save_scope_as = local_county_2
}
}
}
}
}
scripted_effect ep1_flavor_2030_option_effect = {
scope:local_county_$WIN$ = {
add_county_modifier = {
modifier = ep1_flavor_2030_positive_modifier
years = 5
}
}
scope:local_county_$LOSE$ = {
add_county_modifier = {
modifier = ep1_flavor_2030_negative_modifier
years = 5
}
}
scope:local_dispute_$WIN$ = {
if = {
limit = {
NOT = { is_in_list = generated_dispute_characters }
}
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 10
}
}
}
scope:local_dispute_$LOSE$ = {
if = {
limit = {
NOT = { is_in_list = generated_dispute_characters }
}
add_opinion = {
target = root
modifier = annoyed_opinion
opinion = -10
}
}
}
}
scripted_effect ep1_flavor_2030_boon_effect = {
switch = {
trigger = scope:taking_sides_boon_$NUM$
0 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_1_modifier
years = 5
}
}
1 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_2_modifier
years = 5
}
}
2 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_3_modifier
years = 5
}
}
3 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_4_modifier
years = 5
}
}
4 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_5_modifier
years = 5
}
}
5 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_6_modifier
years = 5
}
}
6 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_7_modifier
years = 5
}
}
7 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_8_modifier
years = 5
}
}
8 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_9_modifier
years = 5
}
}
9 = {
add_character_modifier = {
modifier = ep1_flavor_2030_boon_10_modifier
years = 5
}
}
}
}
ep1_flavor.2030 = {
type = character_event
title = ep1_flavor.2030.t
desc = {
desc = ep1_flavor.2030.desc_intro
first_valid = {
triggered_desc = { # Monk
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { has_trait = devoted }
}
desc = ep1_flavor.2030.desc_1_monk
}
triggered_desc = { # Bishop
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = {
is_landed_or_landless_administrative = yes
government_has_flag = government_is_theocracy
}
}
desc = ep1_flavor.2030.desc_1_bishop
}
triggered_desc = { # Baron
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { is_landed_or_landless_administrative = yes }
}
desc = ep1_flavor.2030.desc_1_baron
}
triggered_desc = { # Scholar
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { has_trait = scholar }
}
desc = ep1_flavor.2030.desc_1_scholar
}
triggered_desc = { # Cultural minority
trigger = {
exists = scope:local_dispute_1
culture != root.culture
}
desc = ep1_flavor.2030.desc_1_culture
}
triggered_desc = { # Religious minority
trigger = {
exists = scope:local_dispute_1
faith != root.faith
}
desc = ep1_flavor.2030.desc_1_faith
}
triggered_desc = { # Judge
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { has_trait = education_learning }
}
desc = ep1_flavor.2030.desc_1_judge
}
triggered_desc = { # Captain
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { has_trait = education_martial }
}
desc = ep1_flavor.2030.desc_1_captain
}
triggered_desc = { # Merchant
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { always = yes }
}
desc = ep1_flavor.2030.desc_1_merchant
}
}
desc = ep1_flavor.2030.desc_bridge
first_valid = {
triggered_desc = { # Monk
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { has_trait = devoted }
}
desc = ep1_flavor.2030.desc_2_monk
}
triggered_desc = { # Bishop
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = {
is_landed_or_landless_administrative = yes
government_has_flag = government_is_theocracy
}
}
desc = ep1_flavor.2030.desc_2_bishop
}
triggered_desc = { # Baron
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { is_landed_or_landless_administrative = yes }
}
desc = ep1_flavor.2030.desc_2_baron
}
triggered_desc = { # Scholar
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { has_trait = scholar }
}
desc = ep1_flavor.2030.desc_2_scholar
}
triggered_desc = { # Cultural minority
trigger = {
exists = scope:local_dispute_2
culture != root.culture
}
desc = ep1_flavor.2030.desc_2_culture
}
triggered_desc = { # Religious minority
trigger = {
exists = scope:local_dispute_2
faith != root.faith
}
desc = ep1_flavor.2030.desc_2_faith
}
triggered_desc = { # Judge
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { has_trait = education_learning }
}
desc = ep1_flavor.2030.desc_2_judge
}
triggered_desc = { # Captain
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { has_trait = education_martial }
}
desc = ep1_flavor.2030.desc_2_captain
}
triggered_desc = { # Merchant
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { always = yes }
}
desc = ep1_flavor.2030.desc_2_merchant
}
}
desc = ep1_flavor.2030.desc_outro
}
theme = stewardship
override_background = { reference = market }
cooldown = { years = 100 }
left_portrait = {
character = scope:local_dispute_1
animation = dismissal
}
right_portrait = {
character = scope:local_dispute_2
animation = disapproval
}
trigger = {
has_ep1_dlc_trigger = yes
is_landed_or_landless_administrative = yes
has_royal_court = yes
has_dlc_feature = royal_court
is_available_adult = yes
any_sub_realm_county = { count >= 3 }
}
weight_multiplier = {
base = 1
# Court weightings.
ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_administrative }
}
immediate = {
save_scope_value_as = {
name = taking_sides_boon_1
value = {
integer_range = {
min = 0
max = 9
}
}
}
save_scope_value_as = {
name = taking_sides_boon_2
value = {
integer_range = {
min = 0
max = 9
}
}
}
if = {
limit = { scope:taking_sides_boon_2 = scope:taking_sides_boon_1 }
while = {
limit = { scope:taking_sides_boon_2 = scope:taking_sides_boon_1 }
clear_saved_scope = taking_sides_boon_2
save_scope_value_as = {
name = taking_sides_boon_2
value = {
integer_range = {
min = 0
max = 9
}
}
}
}
}
hidden_effect = {
while = {
count = 2
random_list = {
10 = {
trigger = {
any_vassal_or_below = {
primary_title.tier = tier_barony
primary_title.county = { save_temporary_scope_as = local_dispute_temp_county }
NOR = {
is_in_list = dispute_characters
any_in_list = {
list = dispute_characters
AND = {
exists = scope:local_dispute_temp_county
is_landed_or_landless_administrative = yes
primary_title.county = scope:local_dispute_temp_county
}
}
}
}
}
modifier = {
add = -5
any_in_list = {
list = dispute_characters
is_landed_or_landless_administrative = yes
has_same_government = prev
}
}
modifier = {
add = -4
any_in_list = {
list = dispute_characters
count = all
faith = prev.faith
}
}
random_vassal_or_below = {
limit = {
primary_title.tier = tier_barony
NOT = { is_in_list = dispute_characters }
}
add_to_list = dispute_characters
}
}
10 = {
modifier = {
add = -9
any_in_list = {
list = dispute_characters
is_landed_or_landless_administrative = no
}
}
every_sub_realm_county = { add_to_list = local_dispute_county_list }
every_in_list = {
list = local_dispute_county_list
culture = { add_to_temporary_list = local_dispute_culture_list }
faith = { add_to_temporary_list = local_dispute_faith_list }
}
random_in_list = {
list = local_dispute_culture_list
weight = {
modifier = {
add = 10
this = root.culture
}
modifier = {
add = -10
any_in_list = {
list = dispute_characters
culture = prev
}
}
}
save_temporary_scope_as = local_dispute_culture
}
random_in_list = {
list = local_dispute_faith_list
weight = {
modifier = {
add = 10
this = root.faith
}
modifier = {
add = -10
any_in_list = {
list = dispute_characters
faith = prev
}
}
modifier = {
factor = 50
any_in_list = {
list = local_dispute_county_list
faith = prev
culture = scope:local_dispute_culture
}
}
}
save_temporary_scope_as = local_dispute_faith
}
create_character = {
dynasty = none
culture = scope:local_dispute_culture
faith = scope:local_dispute_faith
location = root.capital_province
template = local_dispute_template
}
}
}
}
every_in_list = {
list = dispute_characters
ep1_flavor_2030_local_dispute_scope_effect = yes
}
}
}
option = { # Side with 1st
name = ep1_flavor.2030.a
ep1_flavor_2030_option_effect = { WIN = 1 LOSE = 2 }
ep1_flavor_2030_boon_effect = { NUM = 1 }
ai_chance = {
base = 50
ai_value_modifier = {
ai_compassion = 1
ai_honor = 1
}
modifier = {
add = -50
has_relation_rival = scope:local_dispute_1
}
modifier = {
add = 25
has_relation_friend = scope:local_dispute_1
}
}
}
option = { # Side with 2nd
name = ep1_flavor.2030.b
ep1_flavor_2030_option_effect = { WIN = 2 LOSE = 1 }
ep1_flavor_2030_boon_effect = { NUM = 2 }
ai_chance = {
base = 50
ai_value_modifier = {
ai_compassion = 1
ai_honor = 1
}
modifier = {
add = -50
has_relation_rival = scope:local_dispute_2
}
modifier = {
add = 25
has_relation_friend = scope:local_dispute_2
}
}
}
option = { # Recruit 1st
name = ep1_flavor.2030.c
trigger = {
exists = scope:local_dispute_1
scope:local_dispute_1 = { is_in_list = generated_dispute_characters }
}
add_prestige = medium_prestige_loss
send_interface_toast = {
title = ep1_flavor.2030.c.tt
left_icon = scope:local_dispute_1
add_courtier = scope:local_dispute_1
}
scope:local_dispute_1 = {
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 15
}
hidden_effect = { return_to_court = yes }
}
scope:local_county_2 = {
add_county_modifier = {
modifier = ep1_flavor_2030_negative_modifier
years = 5
}
}
stress_impact = {
arrogant = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_compassion = -1
}
}
}
option = { # Recruit 2nd
name = ep1_flavor.2030.d
trigger = {
exists = scope:local_dispute_2
scope:local_dispute_2 = { is_in_list = generated_dispute_characters }
}
add_prestige = medium_prestige_loss
send_interface_toast = {
title = ep1_flavor.2030.d.tt
left_icon = scope:local_dispute_2
add_courtier = scope:local_dispute_2
}
scope:local_dispute_2 = {
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 15
}
hidden_effect = { return_to_court = yes }
}
scope:local_county_1 = {
add_county_modifier = {
modifier = ep1_flavor_2030_negative_modifier
years = 5
}
}
stress_impact = {
arrogant = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_compassion = -1
}
}
}
after = {
stress_impact = {
just = minor_stress_impact_gain
}
if = {
limit = {
any_in_list = {
list = generated_dispute_characters
employer != root
}
}
every_in_list = {
list = generated_dispute_characters
limit = {
employer != root
}
silent_disappearance_effect = yes
}
}
}
}