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

16884 lines
392 KiB
Text

namespace = fp1_yearly
##################################################
# #Standard Yearlies
# 0001 - 0010 An Escaping Thrall Robs You
# 0011 - 0020 Locals Call for Courtier to be Declared Nithing
# 0021 - 0030 Two of your Knights wish to Holmgang over a Dispute
# 0031 - 0040 A Mighty Warrior with a Big Personality Arrives
# 0041 - 0050 [Russia/Steppe] Islamic Explorer Visits Court
# 0051 - 0070 [Rural] A Dead Character is Rumoured to have become a Draugr
# 0071 - 0090 [Rural] A Troll has been sighted & is attacking villages/peasants
# 0091 - 0100 Commissioning a Longship for Yourself
# 0101 - 0110 A Guest/Courtier Challenges you to Riddles
# 0111 - 0120 Nithing Pole Raised Against Courtier
#
# #Flavour Yearlies
# 0501 - 0510 Out for a Sail - you spot a ship in distress.
# 0511 - 0520 The Stench of Success - a courtier won't let an old trophy go.
# 0521 - 0530 Blood on the Snow - your child wishes to snowball fight.
# 0531 - 0540 [Dynasty] on Ice - your child wants to learn how to ice skate.
# 0541 - 0550 The Beast of [Capital] - your child is playing pranks on courtiers.
# 0551 - 0560 Fishy Business - a courtier won't stop eating rotten fish.
# 0561 - 0570 My Arm Against Yours - a knight challenges you to arm-wrestling.
# 0571 - 0580 Petty Vandalism - your child has vandalised a runestone.
# 0581 - 0590 When I Grow Up - your child wishes to be a shieldperson.
# 0591 - 0600 Raised Voices at the Thing - two of your counties are fighting at a regional thing.
# 0601 - 0610 The Hardest Part of Ruling - you're incredibly bored in a protracted thing session.
# 0611 - 0620 Leading by Example - one of your children hurts another whilst imitating you.
# 0621 - 0630 A Shiny New Toy - your child wants a specific piece of loot from a raid.
# 0631 - 0640 A Cynical Bent - you notice a knight not sacrificing after a raid.
# 0641 - 0650 Worthy of the Ocean - your longships are in disrepair.
# 0651 - 0660 Leviathan - you spot a whale whilst sailing.
# 0661 - 0670 A Novel Challenge - a knight challenges you to skiing.
# 0671 - 0680 A Slippery Slope - your child wants to go sledding.
# 0681 - 0690 Why Can't I Come? - your child wants to come raiding.
# 0691 - 0700 Attempted Atonement - a knight has converted after raiding a reformed faith.
#
# #Special Yearlies
# 1001 - 1030 A Mysterious Stranger Stays at Court
# 1031 - 1060 RIP
# 1061 - 1071 Commissioning a Longship for a Funeral
# 1071 - 1080 Sparklingly Clean
# 1081 - 1090 Explorer from Phantom Islands
##################################################
##################################################
# STANDARD YEARLIES
##################################################
# An Escaping Thrall Robs You
# by Ewan Cowhig Croft
# 0001 - 0010
##################################################
scripted_trigger suitably_terrible_knight_trigger = {
is_available_ai = yes
is_ruler = no
# Just make sure they have at least one knight with believably-bad prowess. Deliberately "<", rather than "<=".
prowess < high_skill_rating
# And uhh, for obvious reasons...
NOT = { has_trait = blind }
}
# A thrall leaves your court in the night.
fp1_yearly.0001 = {
type = character_event
title = fp1_yearly.0001.t
desc = fp1_yearly.0001.desc
theme = stewardship
left_portrait = {
character = scope:scapegoat
animation = shame
}
override_background = { reference = throne_room }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0001 }
is_landed = yes
#Must be able to raid, or else your thrall economy is being phased out.
can_raid_trigger = yes
#Should be North Germanic, or the flavour won't make sense.
culture = { has_cultural_pillar = heritage_north_germanic }
#Needs a knight for scapegoating.
any_knight = {
count >= 1
suitably_terrible_knight_trigger = yes
}
}
weight_multiplier = {
base = 1
#Weight up a little for rulers that thralls are desperate to escape from.
modifier = {
add = 0.5
has_trait = sadistic
}
modifier = {
add = 0.25
has_trait = callous
}
#And weight down for anyone who's a bit nicer. Not to suggest that the thralls are treated particularly well, but they're not being casually murdered for fun like a sadist might.
modifier = {
add = -0.5
has_trait = compassionate
}
modifier = {
add = -0.25
has_trait = forgiving
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0001
days = 1825
}
# Pick a fall guy.
random_knight = {
limit = { suitably_terrible_knight_trigger = yes }
weight = {
# Every point of prowess a knight has lowers the chance for it to be them by 2%.
base = 0
modifier = {
add = {
value = 50
subtract = prowess
}
}
# And every point of compassion another 1%.
modifier = { add = ai_compassion }
}
save_scope_as = scapegoat
}
# Give the escaped thrall a gender for loc.
random_dummy_gender_effect = yes
# Remove the stolen jewels.
remove_short_term_gold = medium_gold_value
}
# Send out descriptions of the thrall and the stolen goods.
option = {
name = fp1_yearly.0001.a
duel = {
skill = stewardship
value = decent_skill_rating
# The thrall is spotted and captured several villages away.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0001.a.tt_success
send_interface_toast = {
title = fp1_yearly.0001.a.tt_success
left_icon = root
add_prestige = medium_prestige_gain
add_gold = medium_gold_value
}
}
# The thrall slips the net, with your stolen goods.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0001.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0001.a.tt_failure
left_icon = root
custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt
}
}
}
stress_impact = {
diligent = medium_stress_impact_loss
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_rationality = 0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
#Start a manhunt.
option = {
name = fp1_yearly.0001.b
duel = {
skill = martial
value = decent_skill_rating
#The thrall is caught before they can get far.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0001.b.tt_success
send_interface_toast = {
title = fp1_yearly.0001.b.tt_success
left_icon = root
add_prestige = medium_prestige_gain
add_gold = medium_gold_value
}
}
#The thrall slips the net, with your stolen goods.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0001.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0001.b.tt_failure
left_icon = root
custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt
}
}
}
stress_impact = {
diligent = medium_stress_impact_loss
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_rationality = 0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { #Weight down for stress.
add = -20
has_trait = lazy
}
}
}
#Fine scope:scapegoat.
option = {
name = fp1_yearly.0001.c
#And no money was lost after all.
add_prestige = medium_prestige_gain
#Unless you're scope:scapegoat.
scope:scapegoat = {
pay_short_term_gold = {
target = root
gold = root.medium_gold_value
}
#Who is, understandably, a bit miffed.
progress_towards_rival_effect = {
REASON = rival_thrall_scapegoat
CHARACTER = root
OPINION = 0
}
add_opinion = {
target = root
modifier = angry_opinion
opinion = -20
}
}
stress_impact = {
wrathful = minor_stress_impact_loss
greedy = medium_stress_impact_loss
vengeful = major_stress_impact_loss
calm = minor_stress_impact_gain
generous = medium_stress_impact_gain
forgiving = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.25
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = wrathful
}
modifier = { #Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { #Weight up for stress.
add = 30
has_trait = vengeful
}
modifier = { #Weight down for stress.
add = -10
has_trait = calm
}
modifier = { #Weight down for stress.
add = -20
has_trait = generous
}
modifier = { #Weight down for stress.
add = -30
has_trait = forgiving
}
}
}
#Not your fault, scope:scapegoat. These things happen.
option = {
name = fp1_yearly.0001.d
#Some assets are gone for good.
custom_tooltip = fp1_yearly.0001.gold_stays_lost.tt
#Welp, you _did_ show clemency.
if = {
limit = {
can_add_hook = {
type = favor_hook
target = scope:scapegoat
}
}
add_hook = {
type = favor_hook
target = scope:scapegoat
}
}
scope:scapegoat = {
add_opinion = {
target = root
modifier = relieved_opinion
opinion = 20
}
}
stress_impact = {
calm = minor_stress_impact_loss
generous = medium_stress_impact_loss
forgiving = major_stress_impact_loss
wrathful = minor_stress_impact_gain
greedy = medium_stress_impact_gain
vengeful = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_vengefulness = -0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = calm
}
modifier = { #Weight up for stress.
add = 20
has_trait = generous
}
modifier = { #Weight up for stress.
add = 30
has_trait = forgiving
}
modifier = { #Weight down for stress.
add = -10
has_trait = wrathful
}
modifier = { #Weight down for stress.
add = -20
has_trait = greedy
}
modifier = { #Weight down for stress.
add = -30
has_trait = vengeful
}
}
}
}
##################################################
# Locals Call for Courtier to be Declared Nithing
# by Ewan Cowhig Croft
# 0011 - 0020
##################################################
scripted_trigger offensive_courtier_candidate_trigger = {
#Filter out the basic miscs.
is_available_ai_adult = yes
#Have some commited some genuine malfeasance, or just be irritating to at least some people.
OR = {
#Having committed murder by poison is a solid way to become a nithing; this might be a secret, but we assume local rumours about a shady buyer of poisons abound...
has_character_flag = murdered_by_poison
#Legitimately being a witch, and a Germanic Pagan one at that, is a good reason, though all parties have to agree on that being a bad thing first.
AND = {
faith = { has_doctrine_parameter = witchcraft_illegal }
root.faith = { has_doctrine_parameter = witchcraft_illegal }
root.capital_county.faith = { has_doctrine_parameter = witchcraft_illegal }
OR = {
has_trait = witch
any_secret = { type = secret_witch }
}
}
#Irritating personality traits can be cause for suspicion.
has_trait = wrathful
has_trait = deceitful
has_trait = craven
has_trait = ambitious
has_trait = arbitrary
has_trait = paranoid
has_trait = sadistic
has_trait = stubborn
has_trait = vengeful
#And really anyone dealing with herbs, potions, poisons, or alchemy.
has_trait = lifestyle_mystic
has_trait = lifestyle_physician
has_trait = lifestyle_herbalist
}
#If they're heir to a player, then they should only be the heir of the player making the decision.
OR = {
#Plus we need to filter out anyone who isn't an heir at all.
any_heir_title = { count = 0 }
any_heir_title = {
is_title_created = yes
holder = {
is_ai = no
this != root
}
}
}
}
scripted_effect agree_to_courtier_becoming_nithing_effect = {
# First, we remove any legal relations.
## Specifically marriage.
if = {
limit = {
any_spouse = { this = root }
root.faith = {
# _Technically_ they're 'dead' and this isn't a divorce, but if divorce was as easy as declaring your spouse legally dead, Henry VIII would've remained a good Catholic boi till the end of his days.
NOT = { has_doctrine = doctrine_divorce_disallowed }
}
}
divorce_effect = {
DIVORCER = root
DIVORCEE = scope:offensive_courtier
}
}
## And concubinage.
if = {
limit = {
scope:offensive_courtier = { is_concubine_of = root }
}
root = { remove_concubine = scope:offensive_courtier }
}
# Then we evict them.
banish = yes # banish_effect not used for unlanded
# Which naturally causes some friction.
add_opinion = {
target = root
modifier = hate_opinion
opinion = -75
}
## Including some ramifications later, potentially.
hidden_effect = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:offensive_courtier }
}
set_relation_potential_rival = scope:offensive_courtier
}
}
# And, finally, let the whole world know.
add_character_modifier = {
modifier = nithing_fp1_modifier
years = 20
}
}
# Locals call for one of your courtiers to be exiled as a nithing.
fp1_yearly.0011 = {
type = character_event
title = fp1_yearly.0011.t
desc = {
desc = fp1_yearly.0011.desc
# And if they have a hard-to-live with virtue...
triggered_desc = {
trigger = { exists = scope:priest }
desc = fp1_yearly.0011.desc.priest
}
}
theme = realm
left_portrait = {
character = scope:offensive_courtier
animation = shock
}
right_portrait = {
character = scope:priest
animation = dismissal
}
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0011 }
is_landed = yes
#Must have at least one suitable courtier.
any_courtier = { offensive_courtier_candidate_trigger = yes }
#Both yourself and your capital must be Germanic Pagans.
religion = religion:germanic_religion
capital_county.religion = religion:germanic_religion
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0011
days = 3650
}
# Save the capital for loc.
capital_barony = { save_scope_as = capital_barony }
# Pick a suitable courtier to be the nithing.
random_courtier = {
limit = { offensive_courtier_candidate_trigger = yes }
# Make sure we grab someone interesting.
weight = {
base = 1
# Claimants are good picks.
modifier = {
add = 10
is_claimant = yes
}
# Highly-skilled characters are good picks.
modifier = {
add = 5
diplomacy >= decent_skill_rating
}
modifier = {
add = 5
martial >= decent_skill_rating
}
modifier = {
add = 5
stewardship >= decent_skill_rating
}
modifier = {
add = 5
intrigue >= decent_skill_rating
}
modifier = {
add = 5
learning >= decent_skill_rating
}
modifier = {
add = 5
prowess >= decent_skill_rating
}
# Characters with some relation to root are adequate picks.
modifier = {
add = 10
has_important_relationship_trigger = { CHARACTER = root }
}
}
# Nab them for use elsewhere.
save_scope_as = offensive_courtier
}
# Does scope:offensive_courtier have any virtuous traits that are offensive to the commonfolk? If so, designate a priest to defend them.
if = {
limit = {
scope:offensive_courtier = {
OR = {
# wrathful
AND = {
has_trait = wrathful
faith = { trait_is_virtue = wrathful }
}
# deceitful
AND = {
has_trait = deceitful
faith = { trait_is_virtue = deceitful }
}
# craven
AND = {
has_trait = craven
faith = { trait_is_virtue = craven }
}
# ambitious
AND = {
has_trait = ambitious
faith = { trait_is_virtue = ambitious }
}
# arbitrary
AND = {
has_trait = arbitrary
faith = { trait_is_virtue = arbitrary }
}
# paranoid
AND = {
has_trait = paranoid
faith = { trait_is_virtue = paranoid }
}
# sadistic
AND = {
has_trait = sadistic
faith = { trait_is_virtue = sadistic }
}
# stubborn
AND = {
has_trait = stubborn
faith = { trait_is_virtue = stubborn }
}
# vengeful
AND = {
has_trait = vengeful
faith = { trait_is_virtue = vengeful }
}
}
}
any_learning_councillor = { exists = this }
}
random_learning_councillor = { save_scope_as = priest }
}
}
# Family: disinherit & banish.
option = {
name = fp1_yearly.0011.a
trigger = { house = scope:offensive_courtier.house }
# The nithing is exiled utterly.
scope:offensive_courtier = {
disinherit_effect = { DISINHERITOR = root }
agree_to_courtier_becoming_nithing_effect = yes
}
# Your capital is pretty happy about the nithing being given the boot.
capital_county = {
add_county_modifier = {
modifier = nithing_exiled_fp1_modifier
years = 10
}
}
stress_impact = {
vengeful = major_stress_impact_loss
forgiving = massive_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_boldness = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -40
has_trait = forgiving
}
}
}
# Non-family: banish them.
option = {
name = fp1_yearly.0011.b
trigger = {
house != scope:offensive_courtier.house
}
# The nithing is exiled utterly.
scope:offensive_courtier = { agree_to_courtier_becoming_nithing_effect = yes }
# Your capital is pretty happy about the nithing being given the boot.
capital_county = {
add_county_modifier = {
modifier = nithing_exiled_fp1_modifier
years = 10
}
}
stress_impact = {
vengeful = major_stress_impact_loss
forgiving = massive_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_boldness = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -40
has_trait = forgiving
}
}
}
# Harbour them against the angry mob.
option = {
name = fp1_yearly.0011.c
# Get a favour, or at least some opinion.
if = {
limit = {
can_add_hook = {
type = favor_hook
target = scope:offensive_courtier
}
}
add_hook = {
type = favor_hook
target = scope:offensive_courtier
}
}
else = {
reverse_add_opinion = {
modifier = fp1_saved_me_from_the_mob_opinion
target = scope:offensive_courtier
}
}
# Your capital county isn't super happy about this, though.
capital_county = {
add_county_modifier = {
modifier = nithing_harboured_fp1_modifier
years = 10
}
}
stress_impact = {
forgiving = major_stress_impact_loss
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_vengefulness = -0.5
}
modifier = { # Weight down for stress.
add = 30
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = vengeful
}
}
}
# Refuse to rule.
option = {
name = fp1_yearly.0011.d
# Not your circus, not your trained dancing bears.
add_stress = massive_stress_loss
# Both capital_county & scope:offensive_courtier are unhappy with your inaction.
reverse_add_opinion = {
modifier = fp1_abandoned_me_to_the_mob_opinion
target = scope:offensive_courtier
}
capital_county = {
add_county_modifier = {
modifier = nithing_in_limbo_fp1_modifier
years = 10
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_energy = -0.5
}
}
}
}
##################################################
# Two of your Knights wish to Holmgang over a Dispute
# by Ewan Cowhig Croft
# 0021 - 0030
##################################################
scripted_trigger suitable_knight_for_dispute_trigger = {
is_available_ai_adult = yes
#Nab them for checking various things later in the event.
save_temporary_scope_as = current_knight
#Filter out rulers, as the loc mismatches such tonally.
is_ruler = no
#They have to be at least not non-argumentative.
NOR = {
has_trait = forgiving
has_trait = craven
}
#For the sake of ease, they shouldn't have a positive special relationship with any other knight.
NOT = {
root = {
any_knight = {
has_friendly_relationship_trigger = { CHARACTER = scope:current_knight }
}
}
}
#Is the character hookable for the event results?
root = {
can_add_hook = {
type = favor_hook
target = scope:current_knight
}
}
}
scripted_trigger deviant_knight_trigger = {
OR = {
has_trait = deviant
any_secret = { type = secret_deviant }
}
}
scripted_effect holmgang_results_effect = {
if = {
limit = { government_has_flag = government_is_tribal }
$LOSER$ = {
death = {
killer = $WINNER$
death_reason = death_duel
}
}
}
else = {
$LOSER$ = {
increase_wounds_effect = { REASON = duel }
}
}
}
# Two knights fight to the death over nothing.
fp1_yearly.0021 = {
type = character_event
title = fp1_yearly.0021.t
desc = {
desc = fp1_yearly.0021.desc.intro
first_valid = {
triggered_desc = {
trigger = { scope:dispute_nature = flag:doggo }
desc = fp1_yearly.0021.desc.doggo
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:spit_of_land }
desc = fp1_yearly.0021.desc.spit_of_land
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:unrepeatable_insult }
desc = fp1_yearly.0021.desc.unrepeatable_insult
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:escalating_prank_war }
desc = fp1_yearly.0021.desc.escalating_prank_war
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:religious_differences }
desc = fp1_yearly.0021.desc.religious_differences
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:stolen_pig }
desc = fp1_yearly.0021.desc.stolen_pig
}
# Female Variant.
triggered_desc = {
trigger = {
scope:dispute_nature = flag:defiled_longboat
scope:defiling_knight = { is_female = yes }
}
desc = fp1_yearly.0021.desc.defiled_longboat.woman
}
# Male Variant.
triggered_desc = {
trigger = {
scope:dispute_nature = flag:defiled_longboat
scope:defiling_knight = { is_male = yes }
}
desc = fp1_yearly.0021.desc.defiled_longboat
}
triggered_desc = {
trigger = { scope:dispute_nature = flag:board_game }
desc = fp1_yearly.0021.desc.board_game
}
}
desc = fp1_yearly.0021.desc.outro
}
theme = unfriendly
left_portrait = {
character = scope:first_knight
animation = anger
}
right_portrait = {
character = scope:second_knight
animation = disgust
}
override_background = { reference = wilderness }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_at_peace_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0021 }
is_landed = yes
#Must be North Germanic.
culture = { has_cultural_pillar = heritage_north_germanic }
#Holmgangs must still be in fashion.
NOT = {
culture = { has_cultural_era_or_later = culture_era_high_medieval }
}
#Must have at least two knights available who can get into a dispute.
any_knight = {
count >= 2
suitable_knight_for_dispute_trigger = yes
}
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0021
days = 1825
}
#Sort Actors.
##Grab capital barony for loc.
capital_barony = { save_scope_as = capital_barony }
##Grab the first knight.
random_knight = {
limit = { suitable_knight_for_dispute_trigger = yes }
save_scope_as = first_knight
}
##Grab the second knight.
random_knight = {
limit = {
suitable_knight_for_dispute_trigger = yes
this != scope:first_knight
}
save_scope_as = second_knight
}
##Just make them hate each other a little.
scope:first_knight = {
add_opinion = {
target = scope:second_knight
modifier = respect_opinion
opinion = -40
}
reverse_add_opinion = {
target = scope:second_knight
modifier = respect_opinion
opinion = -40
}
progress_towards_rival_effect = {
REASON = rival_knights_slapfight
CHARACTER = scope:second_knight
OPINION = 0
}
}
#Pick which dispute type they'll have.
##Eight options of 12.5% chance each.
random_list = {
#Dispute over a pet killed in an accident.
125 = {
#No trigger, fallback.
save_scope_value_as = {
name = dispute_nature
value = flag:doggo
}
select_local_animal_effect = { TYPE = any } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling
# And, if scope:second_knight actually has a doggo, kill it.
scope:second_knight = {
if = {
limit = {
any_owned_story = {
type = story_cycle_pet_dog
exists = story_owner.var:story_cycle_dog_name
}
}
random_owned_story = {
type = story_cycle_pet_dog
limit = {
exists = story_owner.var:story_cycle_dog_name
}
story_owner = {
add_character_flag = {
flag = dog_is_dying
}
trigger_event = pet_animal.1199
}
}
}
}
}
#Dispute over a spit of land that grows the best cabbages.
125 = {
#Both knights must care at least a little about money, and at least one a little too much.
trigger = {
NOR = {
scope:first_knight = {
OR = {
has_trait = generous
has_trait = profligate
has_trait = improvident
}
}
scope:second_knight = {
OR = {
has_trait = generous
has_trait = profligate
has_trait = improvident
}
}
}
OR = {
scope:first_knight = { has_trait = greedy }
scope:second_knight = { has_trait = greedy }
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:spit_of_land
}
}
#Dispute over an unrepeatable insult involving a goat & a good drinking horn.
125 = {
#Both knights must be the type to let the insult escalate, and at least one to take it too far.
trigger = {
NOR = {
scope:first_knight = { has_trait = calm }
scope:second_knight = { has_trait = calm }
}
OR = {
scope:first_knight = { has_trait = wrathful }
scope:first_knight = { has_trait = wrathful}
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:unrepeatable_insult
}
}
#Dispute resulting from an escalating prank war.
125 = {
#Both knights must be people who might get involved in such a thing, and one should be the type to take it too far.
trigger = {
NOR = {
scope:first_knight = {
OR = {
has_trait = shy
has_trait = reclusive
}
}
scope:second_knight = {
OR = {
has_trait = shy
has_trait = reclusive
}
}
}
OR = {
scope:first_knight = { has_trait = vengeful }
scope:second_knight = { has_trait = vengeful }
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:escalating_prank_war
}
}
#Dispute over religious differences.
125 = {
#Both knights must find each other's faiths disagreeable.
trigger = {
scope:first_knight.faith = {
faith_hostility_level = {
target = scope:second_knight.faith
value >= faith_hostile_level
}
}
scope:second_knight.faith = {
faith_hostility_level = {
target = scope:first_knight.faith
value >= faith_hostile_level
}
}
#Quietly exclude sceptics also.
NOR = {
scope:first_knight = { has_trait = cynical }
scope:second_knight = { has_trait = cynical }
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:religious_differences
}
}
#Dispute over a stolen pig.
125 = {
trigger = {
#Exempt faiths that don't eat pork: technically the pig could be as a pet or for non-edible purposes, but it scans best if we just don't bring this up.
NOR = {
scope:first_knight = {
OR = {
religion = religion:judaism_religion
religion = religion:islam_religion
}
}
scope:second_knight = {
OR = {
religion = religion:judaism_religion
religion = religion:islam_religion
}
}
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:stolen_pig
}
}
#Dispute resulting from someone making a sea-going vessel a bit saltier.
125 = {
#Requires at least one knight to be a deviant.
trigger = {
OR = {
scope:first_knight = { deviant_knight_trigger = yes }
scope:second_knight = { deviant_knight_trigger = yes }
}
}
save_scope_value_as = {
name = dispute_nature
value = flag:defiled_longboat
}
#Specify who defiled who's longboat.
if = {
limit = {
scope:first_knight = { deviant_knight_trigger = yes }
}
scope:first_knight = { save_scope_as = defiling_knight }
scope:second_knight = { save_scope_as = unfortunate_knight }
}
else = {
scope:second_knight = { save_scope_as = defiling_knight }
scope:first_knight = { save_scope_as = unfortunate_knight }
}
}
#Dispute resulting from the mysterious Viking board game.
125 = {
#No trigger, fallback.
save_scope_value_as = {
name = dispute_nature
value = flag:board_game
}
}
}
}
#Strictly forbid them.
option = {
name = fp1_yearly.0021.b
#Then, we see if your rule is feared or jeered.
duel = {
skill = intrigue
value = 12
#You successfully terrify them into not fighting.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0021.b.tt_success
send_interface_toast = {
title = fp1_yearly.0021.b.tt_success
left_icon = scope:first_knight
add_dread = medium_dread_gain
add_prestige = minor_prestige_gain
}
}
#They begrudgingly agree not to fight, but shit-talk you for it.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0021.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0021.b.tt_failure
left_icon = scope:first_knight
add_dread = medium_dread_loss
add_prestige = minor_prestige_loss
}
}
}
#Regardless of outcome, they dislike you for this.
reverse_add_opinion = {
target = scope:first_knight
modifier = respect_opinion
opinion = -30
}
reverse_add_opinion = {
target = scope:second_knight
modifier = respect_opinion
opinion = -30
}
stress_impact = {
arbitrary = minor_stress_impact_loss
just = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_vengefulness = -0.25
ai_rationality = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { #Weight down for stress.
add = -10
has_trait = just
}
}
}
#Bet on scope:first_knight.
option = {
name = fp1_yearly.0021.c
#Sort the duel.
scope:first_knight = {
duel = {
skill = prowess
target = scope:second_knight
#scope:first_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0021.c.tt_success
root = {
send_interface_toast = {
title = fp1_yearly.0021.c.tt_success
left_icon = scope:first_knight
add_gold = minor_gold_value
holmgang_results_effect = {
WINNER = scope:first_knight
LOSER = scope:second_knight
}
}
}
}
#scope:second_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0021.c.tt_failure
root = {
send_interface_toast = {
title = fp1_yearly.0021.c.tt_failure
left_icon = scope:second_knight
remove_short_term_gold = minor_gold_value
holmgang_results_effect = {
WINNER = scope:second_knight
LOSER = scope:first_knight
}
}
}
}
}
}
stress_impact = {
greedy = minor_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = greedy
}
}
}
#Bet on scope:second_knight.
option = {
name = fp1_yearly.0021.d
#Sort the duel.
scope:first_knight = {
duel = {
skill = prowess
target = scope:second_knight
#scope:first_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0021.d.tt_failure
root = {
send_interface_toast = {
title = fp1_yearly.0021.d.tt_failure
left_icon = scope:first_knight
remove_short_term_gold = minor_gold_value
holmgang_results_effect = {
WINNER = scope:first_knight
LOSER = scope:second_knight
}
}
}
}
#scope:second_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0021.d.tt_success
root = {
send_interface_toast = {
title = fp1_yearly.0021.d.tt_success
left_icon = scope:second_knight
add_gold = minor_gold_value
holmgang_results_effect = {
WINNER = scope:second_knight
LOSER = scope:first_knight
}
}
}
}
}
}
stress_impact = {
greedy = minor_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = greedy
}
}
}
#Grant them permission.
option = {
name = fp1_yearly.0021.a
#Sort the duel.
scope:first_knight = {
duel = {
skill = prowess
target = scope:second_knight
#scope:first_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0021.a.tt_success
root = {
send_interface_toast = {
title = fp1_yearly.0021.a.tt_success
left_icon = scope:first_knight
add_hook = {
type = favor_hook
target = scope:first_knight
}
holmgang_results_effect = {
WINNER = scope:first_knight
LOSER = scope:second_knight
}
}
}
}
#scope:second_knight wins!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0021.a.tt_failure
root = {
send_interface_toast = {
title = fp1_yearly.0021.a.tt_failure
left_icon = scope:second_knight
add_hook = {
type = favor_hook
target = scope:second_knight
}
holmgang_results_effect = {
WINNER = scope:second_knight
LOSER = scope:first_knight
}
}
}
}
}
}
stress_impact = {
just = minor_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = just
}
}
}
}
##################################################
# A Mighty Warrior with a Big Personality Arrives
# by Ewan Cowhig Croft
# 0031 - 0040
##################################################
scripted_trigger fp1_0031_any_valid_king_trigger = {
#Make sure it's a kingdom that's known about.
in_diplomatic_range = root
#And that the warrior isn't lying about someone the friend cares for.
NOR = {
any_close_or_extended_family_member = { this = root }
any_spouse = { this = root }
}
#We're quite happy to suggest that the warrior is lying, but make sure that it's not an excessively dodgy lie.
OR = {
any_child = { count = 0 }
any_child = {
count = all
is_physically_able_adult = yes
}
}
}
# A deceitful warrior is telling tall-tales at court.
fp1_yearly.0031 = {
type = character_event
title = fp1_yearly.0031.t
desc = {
desc = fp1_yearly.0031.desc.intro
first_valid = {
triggered_desc = {
trigger = { scope:lie_nature = flag:sunk_longboat }
desc = fp1_yearly.0031.desc.sunk_longboat
}
triggered_desc = {
trigger = { scope:lie_nature = flag:wrestled_whale }
desc = fp1_yearly.0031.desc.wrestled_whale
}
triggered_desc = {
trigger = {
scope:lie_nature = flag:charged_city
exists = scope:fruit_knife
}
desc = fp1_yearly.0031.desc.charged_city_fruit_knife
}
triggered_desc = {
trigger = {
scope:lie_nature = flag:charged_city
NOT = { exists = scope:fruit_knife }
}
desc = fp1_yearly.0031.desc.charged_city
}
triggered_desc = {
trigger = { scope:lie_nature = flag:kept_iceland_afloat }
desc = fp1_yearly.0031.desc.kept_iceland_afloat
}
triggered_desc = {
trigger = { scope:lie_nature = flag:wooed_heir }
desc = fp1_yearly.0031.desc.wooed_heir
}
triggered_desc = {
trigger = { scope:lie_nature = flag:hunted_troll }
desc = fp1_yearly.0031.desc.hunted_troll
}
}
desc = fp1_yearly.0031.desc.outro
}
theme = intrigue
left_portrait = {
character = root
animation = toast
triggered_animation = {
trigger = {
has_trait = impatient
}
animation = boredom
}
}
right_portrait = {
character = scope:lying_warrior
animation = storyteller
}
override_background = { reference = feast }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0031 }
is_landed = yes
#Must be some form of North Germanic culture.
culture = { has_cultural_pillar = heritage_north_germanic }
#And that culture must not be too advanced.
culture = {
NOT = { has_cultural_era_or_later = culture_era_high_medieval }
}
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0031
days = 1825
}
#Save the capital for loc.
capital_barony = { save_scope_as = capital_barony }
#Create our lying warrior.
create_character = {
location = root.capital_province
template = fp1_deceitful_warrior_character
save_scope_as = lying_warrior
}
#Create our actual lie.
##Six options for roughly 16.6% chance apiece.
random_list = {
#Swam home after their longboat sank from too much plunder.
166 = {
#Fallback: always available.
save_scope_value_as = {
name = lie_nature
value = flag:sunk_longboat
}
}
#Wrestled a wounded whale ashore single-handed.
166 = {
#Fallback: always available.
save_scope_value_as = {
name = lie_nature
value = flag:wrestled_whale
}
}
#Lead the charge on the walls of a great city.
166 = {
#Fallback: always available.
save_scope_value_as = {
name = lie_nature
value = flag:charged_city
}
#And an Easter egg for Nick.
random = {
chance = 1
save_scope_value_as = {
name = fruit_knife
value = yes
}
scope:lying_warrior = { give_nickname = nick_the_blessed }
}
}
#Averted giant holmgang that would have sunk Iceland.
166 = {
trigger = {
#Must not have any counties in Iceland, as the news'd travel otherwise.
NOT = {
any_realm_de_jure_duchy = { this = title:d_iceland }
}
}
save_scope_value_as = {
name = lie_nature
value = flag:kept_iceland_afloat
}
}
#Wooed the child of a foreign king.
166 = {
trigger = {
any_kingdom = {
is_title_created = yes
holder = { fp1_0031_any_valid_king_trigger = yes }
}
}
save_scope_value_as = {
name = lie_nature
value = flag:wooed_heir
}
#Designate a suitable kingdom.
random_kingdom = {
limit = {
is_title_created = yes
holder = { fp1_0031_any_valid_king_trigger = yes }
}
holder = { save_scope_as = disparaged_king }
}
#Set dummy appropriate gender.
## If the faith is generally intolerant, then we invent a heterosexual target.
if = {
limit = {
faith = {
OR = {
has_doctrine_parameter = homosexuality_illegal
has_doctrine_parameter = homosexuality_shunned
}
}
}
# Then females get a male invention.
if = {
limit = {
scope:lying_warrior = { is_female = yes }
}
dummy_male = { save_scope_as = invented_heir }
}
# And males get a female invention.
if = {
limit = {
scope:lying_warrior = { is_male = yes }
}
dummy_female = { save_scope_as = invented_heir }
}
}
## Otherwise, we randomise.
else = {
random_list = {
100 = {
dummy_female = { save_scope_as = invented_heir }
}
100 = {
dummy_male = { save_scope_as = invented_heir }
}
}
}
## Ensure that scope:lying_warrior's preferences line up with their invented target.
### Note: asexuals not specifically accounted for, since we can't reliably say which way(s) their preferences go, as we don't store that information.
scope:lying_warrior = {
if = {
limit = {
# Orthodox couplings.
OR = {
AND = {
is_female = yes
scope:invented_heir = { is_female = yes }
}
AND = {
is_male = yes
scope:invented_heir = { is_male = yes }
}
}
# But a heterodox preference.
has_sexuality = heterosexual
}
# Randomise scope:lying_warrior's sexuality to match their stories.
random_list = {
100 = { set_sexuality = bisexual }
100 = { set_sexuality = homosexual }
}
}
}
}
#Hunted troll.
166 = {
#Fallback: always available.
save_scope_value_as = {
name = lie_nature
value = flag:hunted_troll
}
#Gotta make it believable.
scope:lying_warrior = {
hidden_effect = {
increase_wounds_effect = { REASON = fight }
}
}
}
}
}
#Invite them to stay permanently.
option = {
name = fp1_yearly.0031.a
add_courtier = scope:lying_warrior
stress_impact = {
trusting = minor_stress_impact_loss
paranoid = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_sociability = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = trusting
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
}
}
#Question their veracity.
option = {
name = fp1_yearly.0031.b
#Standard intrigue duel; we make it a little easier, since you do have the choice of just gaining a courtier.
duel = {
skill = intrigue
target = scope:lying_warrior
#You expose their lies.
60 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0031.b.tt_success
send_interface_toast = {
title = fp1_yearly.0031.b.tt_success
left_icon = scope:lying_warrior
add_prestige = minor_prestige_gain
scope:lying_warrior = {
#Dispose of scope:lying_warrior.
hidden_effect = {
death = { death_reason = death_vanished }
}
}
}
}
#They run circles around your questions.
40 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0031.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0031.b.tt_failure
left_icon = scope:lying_warrior
add_prestige = minor_prestige_loss
scope:lying_warrior = {
#Dispose of scope:lying_warrior.
hidden_effect = {
death = { death_reason = death_vanished }
}
}
}
}
}
stress_impact = {
paranoid = medium_stress_impact_loss
trusting = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_sociability = -0.5
}
modifier = { #Weight up for stress.
add = 20
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -20
has_trait = trusting
}
}
}
#Tell them to tell people of your generous halls.
option = {
name = fp1_yearly.0031.c
#Get a nice little bonus/negate a negative for being talked up.
if = {
limit = { has_character_modifier = stingy_host_fp1_modifier }
remove_character_modifier = stingy_host_fp1_modifier
}
else = {
add_character_modifier = {
modifier = generous_host_fp1_modifier
years = 10
}
}
#Dispose of scope:lying_warrior.
hidden_effect = {
scope:lying_warrior = {
death = { death_reason = death_vanished }
}
}
stress_impact = {
gregarious = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
shy = minor_stress_impact_gain
humble = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_sociability = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { #Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { #Weight down for stress.
add = -10
has_trait = shy
}
modifier = { #Weight down for stress.
add = -10
has_trait = humble
}
}
}
}
##################################################
# [Russia/Steppe] Islamic Explorer Visits Court
# by Ewan Cowhig Croft
# 0041 - 0050
##################################################
scripted_trigger suitable_islamic_realm_trigger = {
#First off, we need people who will consider root a savage.
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
#Next, filter down to the correct religion.
religion = religion:islam_religion
#Making sure to only grab rulers from the Middle East.
capital_province = {
OR = {
geographical_region = world_asia_minor
geographical_region = world_middle_east_jerusalem
geographical_region = world_middle_east_arabia
geographical_region = world_middle_east_persia
geographical_region = world_india_rajastan
}
}
#And then misc checks to make sure that the tone is correct.
top_liege = {
NOR = {
#Such as the liege not having much contact with Germanic Paganism.
religion = religion:germanic_religion
any_vassal_or_below = { religion = religion:germanic_religion }
#The realm not being positioned next door to root.
character_is_realm_neighbor = root.top_liege
#And the realm generally not being inside the same (admittedly large) area.
any_realm_county = {
title_province = { geographical_region = dlc_fp1_region_russian_steppe }
}
}
}
}
# An Islamic explorer stops by for a visit.
fp1_yearly.0041 = {
type = character_event
title = fp1_yearly.0041.t
desc = fp1_yearly.0041.desc
theme = stewardship
left_portrait = {
character = scope:explorer
animation = disapproval
}
right_portrait = {
character = scope:sponsoring_liege
animation = personality_rational
}
override_background = { reference = throne_room }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0041 }
is_landed = yes
#Must be a Norse pagan tribal.
government_has_flag = government_is_tribal
religion = religion:germanic_religion
#With a capital in the steppe/Russia.
capital_province = { geographical_region = dlc_fp1_region_russian_steppe }
#Just for good measure, you should probably be a small-ish realm.
realm_size <= medium_realm_size
#No same-realm Muslims.
top_liege = {
NOR = {
religion = religion:islam_religion
any_vassal_or_below = { religion = religion:islam_religion }
}
}
#A suitable Islamic realm for the explorer to have come from must exists.
any_kingdom = {
holder ?= { suitable_islamic_realm_trigger = yes }
}
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0041
days = 3650
}
#Grab home barony for loc.
capital_barony = { save_scope_as = capital_barony }
#Assign a home realm for the explorer.
random_kingdom = {
limit = {
holder ?= { suitable_islamic_realm_trigger = yes}
}
holder = { save_scope_as = sponsoring_liege }
}
#Create the Islamic explorer.
create_character = {
location = root.capital_province
template = fp1_islamic_explorer_character
save_scope_as = explorer
}
hidden_effect = {
scope:explorer = {
add_random_tiered_trait_xp_effect = {
TRAIT = lifestyle_mystic
LEVEL_1 = yes
LEVEL_3 = yes
}
add_random_tiered_trait_xp_effect = {
TRAIT = lifestyle_physician
LEVEL_1 = yes
LEVEL_3 = yes
}
}
}
}
#Host a small blot.
option = {
name = fp1_yearly.0041.a
#Diplomacy duel to see how well you present yourself.
duel = {
skill = diplomacy
value = decent_skill_rating
#Your blot impresses the explorer.
40 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0041.a.tt_success
send_interface_toast = {
title = fp1_yearly.0041.a.tt_success
left_icon = scope:explorer
add_prestige = medium_prestige_gain
add_character_modifier = {
modifier = exotic_foreign_lord_fp1_modifier
years = 10
}
}
}
#Your pagan ways disgust the explorer.
60 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0041.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0041.a.tt_failure
left_icon = scope:explorer
add_prestige = minor_prestige_loss
add_character_modifier = {
modifier = horrifying_foreign_lord_fp1_modifier
years = 5
}
}
}
}
stress_impact = {
zealous = medium_stress_impact_loss
cynical = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_sociability = 0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = zealous
}
modifier = { #Weight down for stress.
add = -20
has_trait = cynical
}
}
}
#Invite them to stay and convert you.
option = {
name = fp1_yearly.0041.b
#Prohibit the AI from converting to far-away religions unless they're genuinely very interested in scope:explorer's faith.
trigger = {
OR = {
is_ai = no
AND = {
NOR = {
has_trait = zealous #Zealous characters never convert on a whim.
has_trait = cynical #Cynical characters aren't really interested in what anyone is selling.
has_trait = arrogant #Arrogant characters believe their faith is already the best, even if they don't care much about it.
has_trait = paranoid #Paranoid characters don't trust scope:explorer's tales.
}
OR = {
has_trait = humble #Humble characters like to give everyone a fair chance to explain their POV.
has_trait = trusting #Trusting characters can be talked into many things, given time & charisma.
}
}
}
}
#Get scope:explorer as a courtier.
add_courtier = scope:explorer
#Sort conversion.
set_character_faith_with_conversion = scope:explorer.faith
#Get scope:sponsoring_liege as a friend, if possible.
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:sponsoring_liege }
}
set_relation_friend = { reason = friend_converted_explorer target = scope:sponsoring_liege }
reverse_add_opinion = {
target = scope:sponsoring_liege
modifier = pious_opinion
opinion = 50
}
}
stress_impact = {
humble = medium_stress_impact_loss
trusting = major_stress_impact_loss
paranoid = minor_stress_impact_gain
arrogant = medium_stress_impact_gain
zealous = massive_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_zeal = -0.75
}
modifier = { #Weight up for stress.
add = 20
has_trait = humble
}
modifier = { #Weight up for stress.
add = 30
has_trait = trusting
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -20
has_trait = arrogant
}
modifier = { #Weight down for stress.
add = -50
has_trait = zealous
}
}
}
#Give them the boot.
option = {
name = fp1_yearly.0041.c
#Consolation prize for giving them the boot.
## Stress loss handled in stress_impact.
stress_impact = {
base = minor_stress_loss
zealous = minor_stress_impact_loss
shy = major_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = -0.25
ai_sociability = -0.5
}
modifier = { #Weight down for stress.
add = -10
has_trait = zealous
}
modifier = { #Weight down for stress.
add = -30
has_trait = shy
}
}
}
#Clean-up characters, if appropriate.
after = {
# We use a separate event delayed by a day so that scope:explorer isn't dead in the toasts.
trigger_event = {
id = fp1_yearly.0042
days = 1
}
}
}
# Clean up unused explorer.
fp1_yearly.0042 = {
hidden = yes
immediate = {
#Get rid of scope:explorer, unless they've decided to stay.
scope:explorer = {
if = {
limit = {
NOT = { is_courtier_of = root }
}
hidden_effect = {
death = { death_reason = death_vanished }
}
}
}
}
}
##################################################
# [Rural] A Dead Character is Rumoured to have become a Draugr
# by Ewan Cowhig Croft
# 0051 - 0070
##################################################
# You are informed of the reputed-draugr.
fp1_yearly.0051 = {
type = character_event
title = fp1_yearly.0051.t
desc = fp1_yearly.0051.desc
theme = unfriendly
left_portrait = {
character = scope:draugr
animation = personality_vengeful
}
override_background = { reference = throne_room }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0051 }
is_landed = yes
#Must have a draugr candidate ready; this is set on the on_death on_action.
has_variable = potential_draugr
#Must be a tribal...
government_has_flag = government_is_tribal
#With a rural, North Germanic capital.
capital_county = {
#Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0051
days = 7300
}
#Grab our capital for loc.
capital_county = { save_scope_as = capital_county }
#Then grab our draugr.
var:potential_draugr = { save_scope_as = draugr }
}
#Investigate in person.
option = {
name = fp1_yearly.0051.a
#You go off to investigate in person.
custom_tooltip = fp1_yearly.0051.a.tt
##5 possible outcomes, weighing down the chance of nothing happening slightly due to low value, gives us x4 options of 22.5% & one of 10%.
hidden_effect = {
random_list = {
#A pack of wolves!
225 = {
trigger_event = {
id = fp1_yearly.0061
months = 1
}
}
#A fearsome bear!
225 = {
trigger_event = {
id = fp1_yearly.0062
months = 1
}
}
#A nithing living in the mound!
225 = {
trigger_event = {
id = fp1_yearly.0063
months = 1
}
}
#An orphan living in the mound!
225 = {
trigger_event = {
id = fp1_yearly.0064
months = 1
}
}
#Absolutely bugger-all!
100 = {
trigger_event = {
id = fp1_yearly.0065
months = 1
}
}
}
}
stress_impact = {
diligent = medium_stress_impact_loss
brave = medium_stress_impact_loss
lazy = medium_stress_impact_gain
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { #Weight down for stress.
add = 20
has_trait = brave
}
modifier = { #Weight down for stress.
add = -20
has_trait = lazy
}
modifier = { #Weight down for stress.
add = -20
has_trait = craven
}
}
}
#Try various folk solutions.
option = {
name = fp1_yearly.0051.c
#Let's see how your hearth wisdom is, chummer.
duel = {
skill = learning
value = decent_skill_rating
#Your potions and spells reassure the locals.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0051.c.tt_success
send_interface_toast = {
title = fp1_yearly.0051.c.tt_success
left_icon = scope:draugr
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
add_stress = medium_stress_loss
}
}
#Your rituals are insufficient.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0051.c.tt_failure
send_interface_toast = {
title = fp1_yearly.0051.c.tt_failure
left_icon = scope:draugr
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_failed_fp1_modifier
years = 10
}
}
add_stress = medium_stress_gain
}
}
}
stress_impact = {
lazy = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_energy = 0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { #Weight down for stress.
add = -10
has_trait = diligent
}
}
}
#Have them exhumed and the corpse destroyed.
option = {
name = fp1_yearly.0051.b
#Peasants are happy.
send_interface_toast = {
title = fp1_yearly.0051.b.body_destroyed
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
}
#But either the family of the deceased are not...
if = {
limit = {
scope:draugr = {
OR = {
#Nab their entire house.
AND = {
house ?= {
any_house_member = {
count >= 1
is_alive = yes
}
}
}
#Any close family outside of that house (bastards, house-founder siblings, etc).
any_close_or_extended_family_member = {
count >= 1
is_alive = yes
}
#And any spouses still kicking around.
any_former_spouse = {
count >= 1
is_alive = yes
}
}
}
}
#Nab scope:draugr's nearest'n'dearest.
scope:draugr = {
if = {
limit = { exists = house }
house = {
every_house_member = {
limit = { is_alive = yes }
add_to_list = close_to_draugr_list
}
}
}
every_close_or_extended_family_member = {
limit = { is_alive = yes }
add_to_list = close_to_draugr_list
}
every_former_spouse = {
limit = { is_alive = yes }
add_to_list = close_to_draugr_list
}
}
#And make them unhappy at the thing wot u dun.
every_in_list = {
list = close_to_draugr_list
custom = fp1_yearly.0051.b.list
add_opinion = {
target = root
modifier = fp1_desecrated_corpse_of_loved_one
}
}
}
#... Or you have to spend a little prestige for defiling the dead.
else = { add_prestige = medium_prestige_loss }
stress_impact = {
vengeful = minor_stress_impact_loss
callous = medium_stress_impact_loss
arbitrary = medium_stress_impact_loss
forgiving = minor_stress_impact_gain
compassionate = medium_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.25
ai_compassion = -0.25
ai_honor = -0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { #Weight up for stress.
add = 20
has_trait = callous
}
modifier = { #Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { #Weight down for stress.
add = -10
has_trait = forgiving
}
modifier = { #Weight down for stress.
add = -20
has_trait = compassionate
}
modifier = { #Weight down for stress.
add = -20
has_trait = just
}
}
}
}
# The draugr is earmarked.
fp1_yearly.0052 = {
hidden = yes
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Must be within the player's court.
is_knight = yes
court_owner = { is_ai = no }
#Must be an intimidating fighter.
prowess >= extremely_high_skill_rating
#Aaaaand must have a personality that makes people think they'd come back to harass the living.
calc_true_if = {
amount >= 2
has_trait = wrathful
has_trait = arrogant
has_trait = deceitful
has_trait = craven
has_trait = ambitious
has_trait = arbitrary
has_trait = cynical
has_trait = vengeful
has_trait = sadistic
}
}
immediate = {
save_scope_as = potential_draugr
court_owner = {
set_variable = {
name = potential_draugr
value = scope:potential_draugr
years = 5
}
}
}
}
# The draugr was a pack of wolves!
fp1_yearly.0061 = {
type = character_event
title = fp1_yearly.0061.t
desc = fp1_yearly.0061.desc
theme = martial
left_portrait = {
character = root
animation = shock
}
override_background = { reference = wilderness }
trigger = {
is_available_even_at_war_adult = yes
}
#Fight the wolves.
option = {
name = fp1_yearly.0061.a
#You rally your soldiers to fight off the pack!
duel = {
skill = martial
value = high_skill_rating
#You slaughter the pack!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0061.a.tt_success
send_interface_toast = {
title = fp1_yearly.0061.a.tt_success
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
add_prestige = medium_prestige_gain
}
}
#You barely escape with your life!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0061.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0061.a.tt_failure
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_monstrous_wolfpack_fp1_modifier
years = 10
}
}
increase_wounds_effect = { REASON = wolves }
}
}
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_honor = 0.25
}
modifier = { #Weight up for stress.
add = 30
has_trait = brave
}
modifier = { #Weight down for stress.
add = -30
has_trait = craven
}
}
}
#Retreat!
option = {
name = fp1_yearly.0061.b
#The wolves will be eating people for some time to come.
capital_county = {
add_county_modifier = {
modifier = draugr_monstrous_wolfpack_fp1_modifier
years = 10
}
}
#And e'eryone knows why.
add_prestige = medium_prestige_loss
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_boldness = -0.5
}
modifier = { #Weight up for stress.
add = 30
has_trait = craven
}
modifier = { #Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# The draugr was a bear!
fp1_yearly.0062 = {
type = character_event
title = fp1_yearly.0062.t
desc = fp1_yearly.0062.desc
theme = martial
left_portrait = {
character = root
animation = shock
}
override_background = { reference = wilderness }
trigger = {
is_available_even_at_war_adult = yes
}
#Fight the bear.
option = {
name = fp1_yearly.0062.a
#You meet the bear's challenge!
duel = {
skill = prowess
value = high_skill_rating
#You kill the bear!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0062.a.tt_success
send_interface_toast = {
title = fp1_yearly.0062.a.tt_success
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
add_prestige = medium_prestige_gain
}
}
#You only just escape with your life!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0062.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0062.a.tt_failure
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_monstrous_bear_fp1_modifier
years = 10
}
}
increase_wounds_effect = { REASON = bear }
}
}
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_honor = 0.25
}
modifier = { #Weight up for stress.
add = 30
has_trait = brave
}
modifier = { #Weight down for stress.
add = -30
has_trait = craven
}
}
}
#Retreat!
option = {
name = fp1_yearly.0062.b
#The bear will be eating people for some time to come.
capital_county = {
add_county_modifier = {
modifier = draugr_monstrous_bear_fp1_modifier
years = 10
}
}
#And e'eryone knows why.
add_prestige = medium_prestige_loss
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_boldness = -0.5
}
modifier = { #Weight up for stress.
add = 30
has_trait = craven
}
modifier = { #Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# The draugr was a nithing!
fp1_yearly.0063 = {
type = character_event
title = fp1_yearly.0063.t
desc = fp1_yearly.0063.desc
theme = intrigue
left_portrait = {
character = root
animation = disgust
}
right_portrait = {
character = scope:draugr_nithing
animation = shock
}
override_background = { reference = wilderness }
trigger = {
is_available_even_at_war_adult = yes
}
immediate = {
#Create us a nithing!
create_character = {
location = root.capital_province
template = fp1_capital_county_nithing_character
save_scope_as = draugr_nithing
}
hidden_effect = {
scope:draugr_nithing = { nithing_character_creation_scripted_effect = yes }
}
}
#Try to catch the nithing before they slip away.
option = {
name = fp1_yearly.0063.a
#You attempt to catch the criminal.
duel = {
skill = intrigue
value = high_skill_rating
#Your trap works!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0063.a.tt_success
send_interface_toast = {
title = fp1_yearly.0063.a.tt_success
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
add_prestige = medium_prestige_gain
#To the dungeon with you, m'nithing.
imprison = {
target = scope:draugr_nithing
type = dungeon
}
}
}
#The nithing slips the net!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0063.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0063.a.tt_failure
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_nithing_fp1_modifier
years = 10
}
}
custom_tooltip = fp1_yearly.0063.a.tt_failure.draugr_nithing_escapes
hidden_effect = {
scope:draugr_nithing = {
death = { death_reason = death_vanished }
}
}
}
}
}
stress_impact = {
paranoid = minor_stress_impact_loss
vengeful = medium_stress_impact_loss
just = medium_stress_impact_loss
forgiving = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_honor = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = paranoid
}
modifier = { #Weight up for stress.
add = 20
has_trait = vengeful
}
modifier = { #Weight up for stress.
add = 20
has_trait = just
}
modifier = { #Weight down for stress.
add = -20
has_trait = forgiving
}
}
}
#Leave them to it.
option = {
name = fp1_yearly.0063.b
#The nithing will continue to do your capital a mischief for quite a while.
capital_county = {
add_county_modifier = {
modifier = draugr_nithing_fp1_modifier
years = 10
}
}
#But at least it's less ignoble than running from wild animals.
add_prestige = minor_prestige_loss
stress_impact = {
just = medium_stress_impact_loss
vengeful = medium_stress_impact_loss
arbitrary = minor_stress_impact_gain
forgiving = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_honor = -0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = just
}
modifier = { #Weight up for stress.
add = 20
has_trait = vengeful
}
modifier = { #Weight down for stress.
add = -10
has_trait = arbitrary
}
modifier = { #Weight down for stress.
add = -20
has_trait = forgiving
}
}
}
}
# The draugr was an orphan!
fp1_yearly.0064 = {
type = character_event
title = fp1_yearly.0064.t
desc = fp1_yearly.0064.desc
theme = friendly
left_portrait = {
character = root
animation = shock
}
right_portrait = {
character = scope:draugr_orphan
animation = fear
}
override_background = { reference = wilderness }
trigger = {
is_available_even_at_war_adult = yes
}
immediate = {
#Create us an orphan!
create_character = {
location = root.capital_province
template = fp1_capital_county_orphan_character
save_scope_as = draugr_orphan
}
#And every possible result sorts the issue for you.
capital_county = {
add_county_modifier = {
modifier = draugr_remedies_succeeded_fp1_modifier
years = 10
}
}
}
#Move them on.
option = {
name = fp1_yearly.0064.a
#The orphan disappears.
custom_tooltip = fp1_yearly.0064.a.tt
hidden_effect = {
scope:draugr_orphan = {
death = { death_reason = death_vanished }
}
}
stress_impact = {
sadistic = minor_stress_impact_loss
callous = major_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.25
ai_compassion = -0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { #Weight up for stress.
add = 30
has_trait = callous
}
modifier = { #Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
#Fling them into prison.
option = {
name = fp1_yearly.0064.b
#You uhh, you get a prisoner.
imprison = {
target = scope:draugr_orphan
type = dungeon
}
reverse_add_opinion = {
target = scope:draugr_orphan
modifier = imprisoned_me
}
#... Just for good measure, let's make sure they won't forget this.
hidden_effect = { set_relation_potential_rival = scope:draugr_orphan }
stress_impact = {
callous = minor_stress_impact_loss
sadistic = major_stress_impact_loss
compassionate = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.25
ai_compassion = -0.75
}
modifier = { #Weight up for stress.
add = 10
has_trait = callous
}
modifier = { #Weight up for stress.
add = 30
has_trait = sadistic
}
modifier = { #Weight down for stress.
add = -30
has_trait = compassionate
}
}
}
#Take them to court.
option = {
name = fp1_yearly.0064.c
#One shiny new child for you.
add_courtier = scope:draugr_orphan
#And they're pretty happy about being whisked out of the grave they were living in.
reverse_add_opinion = {
target = scope:draugr_orphan
modifier = loyal_servant
}
add_hook = {
target = scope:draugr_orphan
type = loyalty_hook
}
stress_impact = {
trusting = minor_stress_impact_loss
compassionate = major_stress_impact_loss
paranoid = minor_stress_impact_gain
callous = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.25
ai_compassion = -0.75
}
modifier = { #Weight up for stress.
add = 10
has_trait = trusting
}
modifier = { #Weight up for stress.
add = 30
has_trait = compassionate
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -20
has_trait = callous
}
modifier = { #Weight down for stress.
add = -20
has_trait = sadistic
}
}
}
#Adopt them.
option = {
name = fp1_yearly.0064.d
#And, if you've no kids of your own right now...
trigger = {
any_child = {
count = 0
is_alive = yes
}
}
#One shiny new child for you.
if = {
limit = { is_female = yes }
scope:draugr_orphan = { set_mother = root }
}
else = {
scope:draugr_orphan = { set_father = root }
}
hidden_effect = {
#We take care of the sundries in a hidden effect so as not to put too much into the tooltip.
scope:draugr_orphan = { set_house = root.house }
add_courtier = scope:draugr_orphan
}
#And they're pretty happy about being the child of a lord all of a sudden.
reverse_add_opinion = {
target = scope:draugr_orphan
modifier = love_opinion
opinion = 100
}
add_hook = {
target = scope:draugr_orphan
type = loyalty_hook
}
stress_impact = {
trusting = medium_stress_impact_loss
compassionate = massive_stress_impact_loss
paranoid = medium_stress_impact_gain
callous = major_stress_impact_gain
sadistic = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.25
ai_compassion = -0.75
}
modifier = { #Weight up for stress.
add = 20
has_trait = trusting
}
modifier = { #Weight up for stress.
add = 50
has_trait = compassionate
}
modifier = { #Weight down for stress.
add = 20
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -30
has_trait = callous
}
modifier = { #Weight down for stress.
add = -30
has_trait = sadistic
}
}
}
}
# The draugr was... didn't exist!
fp1_yearly.0065 = {
type = character_event
title = fp1_yearly.0065.t
desc = fp1_yearly.0065.desc
theme = physical_health
left_portrait = {
character = root
animation = boredom
}
override_background = { reference = wilderness }
trigger = {
is_available_even_at_war_adult = yes
}
#Must have been the wind?
option = {
name = fp1_yearly.0065.a
#Welp, at least the fresh air does you good!
add_character_modifier = {
modifier = draugr_healthy_hiking_fp1_modifier
years = 10
}
#The locals grumble a little regardless.
send_interface_toast = {
title = fp1_yearly.0065.a.locals_grumble
left_icon = root
capital_county = {
add_county_modifier = {
modifier = draugr_nothing_found_fp1_modifier
years = 10
}
}
}
stress_impact = {
#Usually bad form to give stress in one-event options, but it's a little funny to see your character's reaction to there being literally nothing to see.
trusting = miniscule_stress_impact_loss
paranoid = miniscule_stress_impact_gain
}
ai_chance = {
#Only option.
base = 100
}
}
}
##################################################
# The Deep Places of the World
# by Ewan Cowhig Croft
# 0071 - 0090
##################################################
scripted_trigger fp1_0071_loveli_lakes_trigger = {
has_trait = shieldmaiden
is_courtier_of = root
is_available_ai_adult = yes
is_healthy = yes
}
scripted_trigger fp1_0071_valid_marshal_for_delegation_trigger = {
exists = this
is_available_ai_adult = yes
}
scripted_effect fp1_0071_apply_hungry_troll_modifier_effect = {
capital_county = {
add_county_modifier = {
modifier = fp1_yearly_0071_troll_attacks_modifier
years = 30
}
}
}
# [Rural] A Troll has been sighted & is attacking villages/peasants
fp1_yearly.0071 = {
type = character_event
title = fp1_yearly.0071.t
desc = {
desc = fp1_yearly.0071.desc.intro
# Troll type.
first_valid = {
# A towering bear.
triggered_desc = {
trigger = { scope:troll_type = flag:bear }
desc = fp1_yearly.0071.desc.troll_type.bear
}
# An ancient wolf.
triggered_desc = {
trigger = { scope:troll_type = flag:wolf }
desc = fp1_yearly.0071.desc.troll_type.wolf
}
# A colossal wolverine.
triggered_desc = {
trigger = { scope:troll_type = flag:wolverine }
desc = fp1_yearly.0071.desc.troll_type.wolverine
}
# A stealthy lynx.
triggered_desc = {
trigger = { scope:troll_type = flag:lynx }
desc = fp1_yearly.0071.desc.troll_type.lynx
}
# An enraged moose.
triggered_desc = {
trigger = { scope:troll_type = flag:moose }
desc = fp1_yearly.0071.desc.troll_type.moose
}
}
# Outro type.
first_valid = {
triggered_desc = {
trigger = { exists = scope:loveli_lakes }
desc = fp1_yearly.0071.desc.outro.loveli_lakes
}
desc = fp1_yearly.0071.desc.outro.fallback
}
}
theme = hunting
left_portrait = {
character = root
animation = disbelief
}
right_portrait = {
character = scope:marshal
animation = dismissal
}
lower_left_portrait = scope:loveli_lakes
override_background = { reference = throne_room }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0071 }
is_landed = yes
# Must be a tribal in Scandinavia.
government_has_flag = government_is_tribal
fp1_is_in_scandinavia = yes
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
# And ensure it doesn't already have a troll problem.
NOT = { has_county_modifier = fp1_yearly_0071_troll_attacks_modifier }
}
}
weight_multiplier = {
base = 1
# Weight down a little if you're a hunter, since it means you're probably trimming the local wildlife down quite dramatically.
modifier = {
add = -0.5
has_trait = lifestyle_hunter
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0071
days = 1825
}
# Roll to determine what type of beast we get.
## Five options of 20% each.
random_list = {
# A towering bear.
200 = {
save_scope_value_as = {
name = troll_type
value = flag:bear
}
}
# An ancient wolf.
200 = {
save_scope_value_as = {
name = troll_type
value = flag:wolf
}
}
# A colossal wolverine.
200 = {
save_scope_value_as = {
name = troll_type
value = flag:wolverine
}
}
# A stealthy lynx.
200 = {
save_scope_value_as = {
name = troll_type
value = flag:lynx
}
}
# An enraged moose.
200 = {
save_scope_value_as = {
name = troll_type
value = flag:moose
}
}
}
## Did a møøse bite root's sister?
if = {
limit = {
scope:troll_type = flag:moose
# We could go for a more complex implementation, but as we want to keep the meme rare (and therefore less stale), we hard-lock it down to just shieldmaidens.
any_sibling = { fp1_0071_loveli_lakes_trigger = yes }
}
random_sibling = {
limit = { fp1_0071_loveli_lakes_trigger = yes }
save_scope_as = loveli_lakes
}
}
# Grab the martial, if possible, for delegation.
if = {
limit = {
any_martial_councillor = { fp1_0071_valid_marshal_for_delegation_trigger = yes }
}
random_martial_councillor = {
limit = { fp1_0071_valid_marshal_for_delegation_trigger = yes }
save_scope_as = marshal
}
}
}
# I'll kill the beast myself!
option = {
name = fp1_yearly.0071.a
# Inform root that they'll get a follow-up event.
custom_tooltip = fp1_yearly.0071.a.tt
# Calc which event to send out.
## A towering bear.
if = {
limit = { scope:troll_type = flag:bear }
trigger_event = {
id = fp1_yearly.0081
days = 14
}
}
## An ancient wolf.
else_if = {
limit = { scope:troll_type = flag:wolf }
trigger_event = {
id = fp1_yearly.0082
days = 14
}
}
## A colossal wolverine.
else_if = {
limit = { scope:troll_type = flag:wolverine }
trigger_event = {
id = fp1_yearly.0083
days = 14
}
}
## A stealthy lynx.
else_if = {
limit = { scope:troll_type = flag:lynx }
trigger_event = {
id = fp1_yearly.0084
days = 14
}
}
## An enraged moose.
else = {
trigger_event = {
id = fp1_yearly.0085
days = 14
}
}
stress_impact = {
brave = minor_stress_impact_loss
craven = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = brave
}
modifier = { # Weight down for stress.
add = -10
has_trait = craven
}
}
}
# Scope:marshal, take care of this.
option = {
name = fp1_yearly.0071.b
trigger = { exists = scope:marshal }
# Martial duel for the marshal.
scope:marshal = {
duel = {
skill = martial
value = very_high_skill_rating
# Your marshal and their troops hunt down the beast.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0071.b.tt_success
root = {
send_interface_toast = {
title = fp1_yearly.0071.b.tt_success
left_icon = scope:marshal
# Huzzah! Everyone's a hero!
scope:marshal = { add_prestige = major_prestige_gain }
add_prestige = medium_prestige_gain
}
}
}
# The beast eludes scope:marshal and continues to stalk the province.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0071.b.tt_failure
root = {
send_interface_toast = {
title = fp1_yearly.0071.b.tt_failure
left_icon = scope:marshal
# Welp, that's a lot of failure involved for everyone.
scope:marshal = { add_prestige = major_prestige_loss }
add_prestige = medium_prestige_loss
# Capital_county isn't happy.
fp1_0071_apply_hungry_troll_modifier_effect = yes
}
}
}
}
}
stress_impact = {
craven = minor_stress_impact_loss
lazy = medium_stress_impact_loss
brave = minor_stress_impact_gain
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = craven
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -10
has_trait = brave
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
}
}
# It's probably just a bear. Deal with it yourselves, cravens.
option = {
name = fp1_yearly.0071.c
# Gain some prestige for your toughness.
add_prestige = minor_prestige_gain
# But your capital county is upset.
fp1_0071_apply_hungry_troll_modifier_effect = yes
stress_impact = {
cynical = minor_stress_impact_loss
craven = medium_stress_impact_loss
brave = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.25
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = cynical
}
modifier = { # Weight up for stress.
add = 20
has_trait = craven
}
modifier = { # Weight down for stress.
add = -20
has_trait = brave
}
}
}
}
scripted_effect fp1_0081_invalidation_toast_effect = {
send_interface_toast = {
title = fp1_yearly.0081.hunt_invalidated
left_icon = root
custom_tooltip = fp1_yearly.0081.hunt_invalidated.tt
}
}
scripted_effect fp1_0081_troll_duel_victory_effect = {
# Add unique character modifier.
add_character_modifier = {
modifier = $MODIFIER$
years = 20
}
# And prestige.
add_prestige = major_prestige_gain
# Low chance for characters to become styled "Troll-Slayer".
if = {
limit = {
has_any_nickname = no
AND = {
has_bad_nickname = yes
is_ai = yes
}
}
random = {
chance = 25
give_nickname = nick_troll_slayer
}
}
# Or automatically if they're players with bad nicknames.
else_if = {
limit = {
has_bad_nickname = yes
is_ai = no
}
give_nickname = nick_troll_slayer
}
}
scripted_effect fp1_0081_troll_duel_effect = {
duel = {
skill = prowess
value = high_skill_rating
# You murderise the animal.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = $SUCCESS_TITLE$
send_interface_toast = {
title = $SUCCESS_TITLE$
left_icon = root
# Apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = $MODIFIER$ }
}
}
# The animal wounds you and your retinue carries you off.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = $FAILURE_TITLE$
send_interface_toast = {
title = $FAILURE_TITLE$
left_icon = root
# Capital_county is unhappy.
fp1_0071_apply_hungry_troll_modifier_effect = yes
# The beast kills you.
death = { death_reason = $REASON$ }
}
}
}
}
scripted_effect fp1_0081_troll_duel_alternate_effect = {
duel = {
skill = $SKILL$
value = high_skill_rating
# You murderise the animal.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = $SUCCESS_TITLE$
send_interface_toast = {
title = $SUCCESS_TITLE$
left_icon = root
# Apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = $MODIFIER$ }
}
}
# The animal wounds you and your retinue carries you off.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = $FAILURE_TITLE$
send_interface_toast = {
title = $FAILURE_TITLE$
left_icon = root
# The beast merely maims you.
custom_tooltip = $FAILURE_TITLE$.tt
hidden_effect = { maimed_in_battle_effect = yes }
# Capital_county is unhappy.
fp1_0071_apply_hungry_troll_modifier_effect = yes
}
}
}
}
scripted_effect fp1_0081_flee_option_effect = {
# Lose prestige.
add_prestige = medium_prestige_loss
# Your capital county doesn't do too well, either.
fp1_0071_apply_hungry_troll_modifier_effect = yes
}
# Troll: towering bear.
fp1_yearly.0081 = {
type = character_event
title = fp1_yearly.0081.t
desc = fp1_yearly.0081.desc
theme = hunting
left_portrait = {
character = root
animation = shock
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
# Must be a tribal...
government_has_flag = government_is_tribal
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes }
immediate = { play_music_cue = "mx_cue_combat_stinger" }
# Charge in, blade swinging.
option = {
name = fp1_yearly.0081.a
trigger = {
NOT = { has_trait = berserker }
}
# Risky prowess duel.
fp1_0081_troll_duel_effect = {
SUCCESS_TITLE = fp1_yearly.0081.a.tt_success
FAILURE_TITLE = fp1_yearly.0081.a.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier
REASON = death_bear
}
#We need to check that they didn't die - if we apply stress to a dead character the error-log complains
if = {
limit = {
is_alive = yes
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# (Berserker) Auto-win due to Hulkery.
option = {
name = fp1_yearly.0081.b
trigger = { has_trait = berserker }
trait = berserker
# Explain what's happening.
custom_tooltip = fp1_yearly.0081.b.tt
# And apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier }
stress_impact = {
berserker = massive_stress_impact_loss
wrathful = major_stress_impact_loss
calm = major_stress_impact_gain
}
ai_chance = {
# The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control.
base = 10000
}
}
# Diplomacy: at it, Wolves of [Capital]!
option = {
name = fp1_yearly.0081.c
# Risky diplomacy duel.
fp1_0081_troll_duel_alternate_effect = {
SKILL = diplomacy
SUCCESS_TITLE = fp1_yearly.0081.c.tt_success
FAILURE_TITLE = fp1_yearly.0081.c.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_bear_modifier
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_vengefulness = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# FLEE!
option = {
name = fp1_yearly.0081.d
# Apply flee effects.
fp1_0081_flee_option_effect = yes
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die.
add = 1000
has_trait = craven
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# Troll: ancient wolf.
fp1_yearly.0082 = {
type = character_event
title = fp1_yearly.0082.t
desc = fp1_yearly.0082.desc
theme = hunting
left_portrait = {
character = root
animation = shock
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
# Must be a tribal...
government_has_flag = government_is_tribal
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes }
immediate = { play_music_cue = "mx_cue_combat_stinger" }
# Charge in, blade swinging.
option = {
name = fp1_yearly.0082.a
trigger = {
NOT = { has_trait = berserker }
}
# Risky prowess duel.
fp1_0081_troll_duel_effect = {
SUCCESS_TITLE = fp1_yearly.0082.a.tt_success
FAILURE_TITLE = fp1_yearly.0082.a.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier
REASON = death_wolf
}
#We need to check that they didn't die - if we apply stress to a dead character the error-log complains
if = {
limit = {
is_alive = yes
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# (Berserker) Auto-win due to Hulkery.
option = {
name = fp1_yearly.0082.b
trigger = { has_trait = berserker }
trait = berserker
# Explain what's happening.
custom_tooltip = fp1_yearly.0082.b.tt
# And apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier }
stress_impact = {
berserker = massive_stress_impact_loss
wrathful = major_stress_impact_loss
calm = major_stress_impact_gain
}
ai_chance = {
# The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control.
base = 10000
}
}
# Martial: rally! Form a circle!
option = {
name = fp1_yearly.0082.c
# Risky martial duel.
fp1_0081_troll_duel_alternate_effect = {
SKILL = martial
SUCCESS_TITLE = fp1_yearly.0082.c.tt_success
FAILURE_TITLE = fp1_yearly.0082.c.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_wolf_modifier
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_vengefulness = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# FLEE!
option = {
name = fp1_yearly.0082.d
# Apply flee effects.
fp1_0081_flee_option_effect = yes
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die.
add = 1000
has_trait = craven
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# Troll: colossal wolverine.
fp1_yearly.0083 = {
type = character_event
title = fp1_yearly.0083.t
desc = fp1_yearly.0083.desc
theme = hunting
left_portrait = {
character = root
animation = shock
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
# Must be a tribal...
government_has_flag = government_is_tribal
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes }
immediate = { play_music_cue = "mx_cue_combat_stinger" }
# Charge in, blade swinging.
option = {
name = fp1_yearly.0083.a
trigger = {
NOT = { has_trait = berserker }
}
# Risky prowess duel.
fp1_0081_troll_duel_effect = {
SUCCESS_TITLE = fp1_yearly.0083.a.tt_success
FAILURE_TITLE = fp1_yearly.0083.a.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier
REASON = death_wolverine
}
#We need to check that they didn't die - if we apply stress to a dead character the error-log complains
if = {
limit = {
is_alive = yes
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# (Berserker) Auto-win due to Hulkery.
option = {
name = fp1_yearly.0083.b
trigger = { has_trait = berserker }
trait = berserker
# Explain what's happening.
custom_tooltip = fp1_yearly.0083.b.tt
# And apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier }
stress_impact = {
berserker = massive_stress_impact_loss
wrathful = major_stress_impact_loss
calm = major_stress_impact_gain
}
ai_chance = {
# The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control.
base = 10000
}
}
# Stewardship: there's a lodge near here, fall back for reinforcements!
option = {
name = fp1_yearly.0083.c
# Risky stewardship duel.
fp1_0081_troll_duel_alternate_effect = {
SKILL = stewardship
SUCCESS_TITLE = fp1_yearly.0083.c.tt_success
FAILURE_TITLE = fp1_yearly.0083.c.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_wolverine_modifier
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_vengefulness = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# FLEE!
option = {
name = fp1_yearly.0083.d
# Apply flee effects.
fp1_0081_flee_option_effect = yes
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die.
add = 1000
has_trait = craven
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# Troll: stealthy lynx.
fp1_yearly.0084 = {
type = character_event
title = fp1_yearly.0084.t
desc = fp1_yearly.0084.desc
theme = hunting
left_portrait = {
character = root
animation = shock
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
# Must be a tribal...
government_has_flag = government_is_tribal
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes }
immediate = { play_music_cue = "mx_cue_combat_stinger" }
# Charge in, blade swinging.
option = {
name = fp1_yearly.0084.a
trigger = {
NOT = { has_trait = berserker }
}
# Risky prowess duel.
fp1_0081_troll_duel_effect = {
SUCCESS_TITLE = fp1_yearly.0084.a.tt_success
FAILURE_TITLE = fp1_yearly.0084.a.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier
REASON = death_lynx
}
#We need to check that they didn't die - if we apply stress to a dead character the error-log complains
if = {
limit = {
is_alive = yes
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# (Berserker) Auto-win due to Hulkery.
option = {
name = fp1_yearly.0084.b
trigger = { has_trait = berserker }
trait = berserker
# Explain what's happening.
custom_tooltip = fp1_yearly.0084.b.tt
# And apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier }
stress_impact = {
berserker = massive_stress_impact_loss
wrathful = major_stress_impact_loss
calm = major_stress_impact_gain
}
ai_chance = {
# The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control.
base = 10000
}
}
# Intrigue: quiet; you two flank it, we'll flush it towards you...
option = {
name = fp1_yearly.0084.c
# Risky diplomacy duel.
fp1_0081_troll_duel_alternate_effect = {
SKILL = intrigue
SUCCESS_TITLE = fp1_yearly.0084.c.tt_success
FAILURE_TITLE = fp1_yearly.0084.c.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_lynx_modifier
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_vengefulness = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# FLEE!
option = {
name = fp1_yearly.0084.d
# Apply flee effects.
fp1_0081_flee_option_effect = yes
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die.
add = 1000
has_trait = craven
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
# Troll: enraged moose.
fp1_yearly.0085 = {
type = character_event
title = fp1_yearly.0085.t
desc = {
# Account for sibling violence.
first_valid = {
triggered_desc = {
trigger = { exists = scope:loveli_lakes }
desc = fp1_yearly.0085.desc.loveli_lakes
}
desc = fp1_yearly.0085.desc.fallback
}
}
theme = hunting
left_portrait = {
character = root
animation = shock
}
right_portrait = {
character = scope:loveli_lakes
animation = anger
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
# Must be a tribal...
government_has_flag = government_is_tribal
# With a rural, North Germanic capital.
capital_county = {
# Checking the capital, not the character, since it's a local superstition rather than something ye're insisiting on.
culture = { has_cultural_pillar = heritage_north_germanic }
development_level <= terrible_development_level
}
}
on_trigger_fail = { fp1_0081_invalidation_toast_effect = yes }
immediate = { play_music_cue = "mx_cue_combat_stinger" }
# Charge in, blade swinging.
option = {
name = fp1_yearly.0085.a
trigger = {
NOT = { has_trait = berserker }
}
# Risky prowess duel.
fp1_0081_troll_duel_effect = {
SUCCESS_TITLE = fp1_yearly.0085.a.tt_success
FAILURE_TITLE = fp1_yearly.0085.a.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier
REASON = death_moose
}
#We need to check that they didn't die - if we apply stress to a dead character the error-log complains
if = {
limit = {
is_alive = yes
}
stress_impact = {
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_vengefulness = 0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# (Berserker) Auto-win due to Hulkery.
option = {
name = fp1_yearly.0085.b
trigger = { has_trait = berserker }
trait = berserker
# Explain what's happening.
custom_tooltip = fp1_yearly.0085.b.tt
# And apply victory effects.
fp1_0081_troll_duel_victory_effect = { MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier }
stress_impact = {
berserker = massive_stress_impact_loss
wrathful = major_stress_impact_loss
calm = major_stress_impact_gain
}
ai_chance = {
# The AI should basically always take this option, since it's both an automatic win and something representing a sudden & total loss of control.
base = 10000
}
}
# Learning: remember its weak spot, spears and bows only!
option = {
name = fp1_yearly.0085.c
# Risky learning duel.
fp1_0081_troll_duel_alternate_effect = {
SKILL = learning
SUCCESS_TITLE = fp1_yearly.0085.c.tt_success
FAILURE_TITLE = fp1_yearly.0085.c.tt_failure
MODIFIER = fp1_yearly_0071_troll_victory_moose_modifier
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_vengefulness = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# FLEE!
option = {
name = fp1_yearly.0085.d
# Apply flee effects.
fp1_0081_flee_option_effect = yes
stress_impact = {
craven = major_stress_impact_loss
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress; weight up even further for cravens not wanting to immediately die.
add = 1000
has_trait = craven
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
##################################################
# A Ship fit for a [ROOT.Char.GetTitleAsName]
# by Ewan Cowhig Croft
# 0090 - 0100
##################################################
# Commissioning a Longship for Yourself
fp1_yearly.0091 = {
type = character_event
title = fp1_yearly.0091.t
desc = fp1_yearly.0091.desc
theme = martial
left_portrait = {
character = root
animation = personality_rational
}
override_background = { reference = fp1_beached_longships }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0091 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_coastal_norse_tribal = yes
}
weight_multiplier = {
base = 1
# Weight up for having sea-faring traits.
modifier = {
add = 0.5
has_trait = viking
}
modifier = {
add = 0.5
has_trait = adventurer
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0091
days = 10950
}
}
# A leviathan, to carry my spoils!
option = {
name = fp1_yearly.0091.a
trigger = {
can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost }
}
# Get a modifier enhancing loot capacity.
add_character_modifier = {
modifier = fp1_flagship_leviathan_modifier
years = 10
}
# And charge the gold cost.
remove_short_term_gold = major_gold_value
stress_impact = {
profligate = massive_stress_impact_loss
ambitious = major_stress_impact_loss
content = major_stress_impact_gain
greedy = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.5
ai_greed = -0.5
}
modifier = { # Weight up for stress.
add = 50
has_trait = profligate
}
modifier = { # Weight up for stress.
add = 30
has_trait = ambitious
}
modifier = { # Weight down for stress.
add = -30
has_trait = content
}
modifier = { # Weight down for stress.
add = -30
has_trait = greedy
}
}
}
# A monster, to intimidate my vassals!
option = {
name = fp1_yearly.0091.b
trigger = {
can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost }
}
# Get a modifier giving more tax from cowed vassals.
add_character_modifier = {
modifier = fp1_flagship_monster_modifier
years = 10
}
# And charge the gold cost.
remove_short_term_gold = major_gold_value
stress_impact = {
profligate = massive_stress_impact_loss
callous = major_stress_impact_loss
sadistic = major_stress_impact_loss
compassionate = major_stress_impact_gain
greedy = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_vengefulness = 0.5
ai_greed = -0.5
}
modifier = { # Weight up for stress.
add = 50
has_trait = profligate
}
modifier = { # Weight up for stress.
add = 30
has_trait = callous
}
modifier = { # Weight up for stress.
add = 30
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -30
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -30
has_trait = greedy
}
}
}
# A dragon, to roar my name!
option = {
name = fp1_yearly.0091.c
trigger = {
can_make_expensive_purchase_trigger = { PRICE = fp1_0091_standard_ship_gold_cost }
}
# Get a modifier granting diplomacy per prestige level
add_character_modifier = {
modifier = fp1_flagship_dragon_modifier
years = 10
}
# And charge the gold cost.
remove_short_term_gold = major_gold_value
stress_impact = {
profligate = massive_stress_impact_loss
arrogant = major_stress_impact_loss
humble = major_stress_impact_gain
greedy = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = 0.5
ai_greed = -0.5
}
modifier = { # Weight up for stress.
add = 50
has_trait = profligate
}
modifier = { # Weight up for stress.
add = 30
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -30
has_trait = humble
}
modifier = { # Weight down for stress.
add = -30
has_trait = greedy
}
}
}
# These are all ludicrously costly...
option = {
name = fp1_yearly.0091.d
# Consiliatory stress loss for hanging on to your cash.
## Stress loss handled in stress impact.
stress_impact = {
base = minor_stress_loss
greedy = medium_stress_impact_loss
arrogant = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_boldness = -0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -10
has_trait = arrogant
}
}
}
}
##################################################
# A Guest/Courtier Challenges you to Riddles
# by Ewan Cowhig Croft
# 0101 - 0110
##################################################
scripted_trigger fp1_valid_riddler_at_court_trigger = {
# We want characters of minor or major interest, ideally.
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
# And we want to make sure they're available and can speak.
is_available_ai_adult = yes
}
# Someone in your court challenges you to an idle game of riddles.
fp1_yearly.0101 = {
type = character_event
title = fp1_yearly.0101.t
desc = fp1_yearly.0101.desc
theme = diplomacy
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:riddler
animation = schadenfreude
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0101 }
is_landed = yes
# Valid for North Germanics only.
culture = { has_cultural_pillar = heritage_north_germanic }
# Has a valid courtier/guest who can quiz you.
any_courtier_or_guest = { fp1_valid_riddler_at_court_trigger = yes }
# Doesn't have an established extreme hatred of riddles.
NOT = { has_character_flag = fp1_yearly_0101_really_hates_riddles }
}
weight_multiplier = {
base = 1
# Weight up for traits that make you a known woman/man of letters.
modifier = {
add = 0.5
has_trait = journaller
}
modifier = {
add = 0.5
has_trait = scholar
}
modifier = {
add = 0.5
has_trait = theologian
}
modifier = {
add = 0.5
has_trait = administrator
}
modifier = {
add = 0.5
has_trait = architect
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0101
days = 1825
}
# Designate a suitable riddler.
## First, we grab all possibles & sort them into a list.
every_courtier_or_guest = {
limit = { fp1_valid_riddler_at_court_trigger = yes }
add_to_list = potential_valid_riddlers_list
}
## Then, we order that list appropriately.
ordered_in_list = {
list = potential_valid_riddlers_list
order_by = { value = fp1_best_available_riddler_value }
save_scope_as = riddler
}
}
# Entertaining, I'll play! [diplo]
option = {
name = fp1_yearly.0101.a
# Duel the courtier for it.
duel = {
skill = diplomacy
target = scope:riddler
# You win the game!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0101.a.tt_success
send_interface_toast = {
title = fp1_yearly.0101.a.tt_success
left_icon = scope:riddler
# Gain opinion with your court for participating.
every_courtier_or_guest = {
limit = { is_available_adult = yes }
custom = fp1_yearly.0101.a.every_courtier_and_guest
add_opinion = {
target = root
modifier = amused_opinion
opinion = 20
}
}
# And a little prestige as a side-prize.
add_prestige = miniscule_prestige_gain
}
}
# You lose the game!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0101.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0101.a.tt_failure
left_icon = scope:riddler
# Gain opinion with your court for participating.
every_courtier_or_guest = {
limit = { is_available_adult = yes }
custom = fp1_yearly.0101.a.every_courtier_and_guest
add_opinion = {
target = root
modifier = amused_opinion
opinion = 20
}
}
# And lose a little prestige.
add_prestige = minor_prestige_loss
}
}
}
stress_impact = {
arrogant = minor_stress_impact_loss
gregarious = medium_stress_impact_loss
shy = minor_stress_impact_gain
impatient = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.75
ai_boldness = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight up for stress.
add = 20
has_trait = gregarious
}
modifier = { # Weight down for stress.
add = -10
has_trait = shy
}
modifier = { # Weight down for stress.
add = -20
has_trait = impatient
}
}
}
# Entertaining, I'll play! [learning]
option = {
name = fp1_yearly.0101.b
duel = {
skill = learning
target = scope:riddler
# You win the game!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0101.a.tt_success
send_interface_toast = {
title = fp1_yearly.0101.a.tt_success
left_icon = scope:riddler
# Gain opinion with your court for participating.
every_courtier_or_guest = {
limit = { is_available_adult = yes }
custom = fp1_yearly.0101.a.every_courtier_and_guest
add_opinion = {
target = root
modifier = amused_opinion
opinion = 20
}
}
# And a little prestige as a side-prize.
add_prestige = miniscule_prestige_gain
}
}
# You lose the game!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0101.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0101.a.tt_failure
left_icon = scope:riddler
# Gain opinion with your court for participating.
every_courtier_or_guest = {
limit = { is_available_adult = yes }
custom = fp1_yearly.0101.a.every_courtier_and_guest
add_opinion = {
target = root
modifier = amused_opinion
opinion = 20
}
}
# And lose a little prestige.
add_prestige = minor_prestige_loss
}
}
}
stress_impact = {
arrogant = minor_stress_impact_loss
gregarious = medium_stress_impact_loss
shy = minor_stress_impact_gain
impatient = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.75
ai_boldness = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight up for stress.
add = 20
has_trait = gregarious
}
modifier = { # Weight down for stress.
add = -10
has_trait = shy
}
modifier = { # Weight down for stress.
add = -20
has_trait = impatient
}
}
}
# Here's one: who has no brain and belongs in the dungeon?
option = {
name = fp1_yearly.0101.c
# Toss them in the dungeon.
imprison_character_effect = {
IMPRISONER = root
TARGET = scope:riddler
}
hidden_effect = {
# Make sure that it's _definitely_ the dungeon.
scope:riddler = { change_prison_type = dungeon }
# And that no one will ever try to get you involved in a game ever again.
add_character_flag = fp1_yearly_0101_really_hates_riddles
}
# Gain some dread to balance out that tyranny.
add_dread = medium_dread_gain
# People may remember your over-reaction...
if = {
limit = { has_any_nickname = no }
custom_tooltip = fp1_yearly.0101.c.tt
hidden_effect = {
random_list = {
60 = {
# The court dares not mock you.
}
40 = {
# You hear a whispered nickname behind your back...
random_list = {
20 = {
send_interface_toast = {
title = fp1_yearly.0101.c.tt_nickname
left_icon = root
give_nickname = nick_the_stonefaced
}
}
20 = {
send_interface_toast = {
title = fp1_yearly.0101.c.tt_nickname
left_icon = root
give_nickname = nick_the_dry
}
}
20 = {
send_interface_toast = {
title = fp1_yearly.0101.c.tt_nickname
left_icon = root
give_nickname = nick_the_joyless
}
}
20 = {
send_interface_toast = {
title = fp1_yearly.0101.c.tt_nickname
left_icon = root
give_nickname = nick_lacks_laughs
}
}
20 = {
send_interface_toast = {
title = fp1_yearly.0101.c.tt_nickname
left_icon = root
give_nickname = nick_the_dull
}
}
}
}
}
}
}
stress_impact = {
sadistic = minor_stress_impact_loss
impatient = medium_stress_impact_loss
vengeful = medium_stress_impact_loss
gregarious = minor_stress_impact_gain
compassionate = medium_stress_impact_gain
patient = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_compassion = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight up for stress.
add = 20
has_trait = impatient
}
modifier = { # Weight up for stress.
add = 20
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -10
has_trait = gregarious
}
modifier = { # Weight down for stress.
add = -20
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -20
has_trait = patient
}
}
}
# Thanks, but I'm a [title], and have things to do.
option = {
name = fp1_yearly.0101.d
# Lose a little prestige, but less than if you were beaten.
add_prestige = miniscule_prestige_loss
# Scope:riddler is disappointed in you.
scope:riddler = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -20
}
}
stress_impact = {
shy = minor_stress_impact_loss
impatient = medium_stress_impact_loss
arrogant = minor_stress_impact_gain
gregarious = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = -0.5
ai_sociability = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = shy
}
modifier = { # Weight up for stress.
add = 20
has_trait = impatient
}
modifier = { # Weight down for stress.
add = -10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -20
has_trait = gregarious
}
}
}
}
##################################################
# Accursed
# by Ewan Cowhig Croft
# 0111 - 0120
##################################################
scripted_trigger fp1_0111_superstitious_courtier_trigger = {
# Basic checks.
is_available_ai_adult = yes
OR = {
fp1_is_norse = yes
religion = religion:germanic_religion
}
# Rule out a few key traits.
NOR = {
# Cynical characters don't believe.
has_trait = cynical
# Brave characters don't succumb to threats.
has_trait = brave
# Trusting characters believe the gods or their friends will help them.
has_trait = trusting
}
# Witches aren't fussed: they're confident in their counterspells.
NOR = {
has_trait = witch
any_secret = { type = secret_witch }
}
# Anyone who's already been cursed is about as screwed as they can be.
NOT = { has_character_modifier = fp1_cursed_by_nithing_pole_modifier }
# And we ideally want to be able to add a strong hook, at least.
save_temporary_scope_as = current_courtier
root = {
can_add_hook = {
target = scope:current_courtier
type = loyalty_hook
}
}
}
scripted_trigger fp1_0111_suspicious_courtier_trigger = {
# Basic checks.
is_available_ai_adult = yes
this != scope:accursed
OR = {
fp1_is_norse = yes
religion = religion:germanic_religion
}
# Would-be sorcerers need to either know what they're doing, or else have absolutely no clue.
OR = {
intrigue >= fp1_0111_sorcerer_intrigue_high
learning >= fp1_0111_sorcerer_learning_high
intrigue <= fp1_0111_sorcerer_intrigue_low
learning <= fp1_0111_sorcerer_learning_low
}
# ... and to have at least two of various pairs of matched traits.
calc_true_if = {
amount >= 2
OR = {
has_trait = lazy
has_trait = arbitrary
}
OR = {
has_trait = wrathful
has_trait = impatient
}
OR = {
has_trait = calm
has_trait = patient
}
OR = {
has_trait = sadistic
has_trait = arrogant
}
OR = {
has_trait = callous
has_trait = ambitious
}
OR = {
has_trait = deceitful
has_trait = craven
}
OR = {
has_trait = brave
has_trait = trusting
}
OR = {
has_trait = paranoid
has_trait = vengeful
}
}
# Filter out known witches: *way* too obvious.
NOT = { has_trait = witch }
}
scripted_trigger fp1_0111_discountable_courtier_trigger = {
# Basic checks.
is_available_ai_adult = yes
this != scope:accursed
OR = {
fp1_is_norse = yes
religion = religion:germanic_religion
}
# Discountables must not meet minimum requirements to be suspicious.
fp1_0111_suspicious_courtier_trigger = no
# On top of that, as long as they have at least one disqualifying statistic, they're gucci.
OR = {
has_trait = gallant
has_trait = honest
has_trait = just
has_trait = compassionate
has_trait = forgiving
# Zealous characters require witchcraft to be at least somewhat shameful.
AND = {
has_trait = zealous
faith = {
NOT = { has_doctrine_parameter = witchcraft_accepted }
}
}
}
# Ensure that no witches are thrown into the discountables pile, as that's just cruel.
NOR = {
has_trait = witch
any_secret = { type = secret_witch }
}
}
scripted_effect fp1_0111_randomise_sorcerer_identity_effect = {
random_list = {
100 = {
trigger = {
NOT = { exists = scope:suspect_a }
}
save_scope_as = suspect_a
}
100 = {
trigger = {
NOT = { exists = scope:suspect_b }
}
save_scope_as = suspect_b
}
100 = {
trigger = {
NOT = { exists = scope:suspect_c }
}
save_scope_as = suspect_c
}
}
}
scripted_effect fp1_0111_accursed_receives_curse_effect = {
# Firstly, they gain a *colossal* amount of stress.
add_stress = monumental_stress_gain
# Then they take a negative modifier.
add_character_modifier = {
modifier = fp1_cursed_by_nithing_pole_modifier
years = 20
}
# And become paranoid if possible.
if = {
limit = {
number_of_personality_traits < personality_trait_limit
NOR = {
has_trait = trusting
has_trait = paranoid
}
}
add_trait = paranoid
}
}
scripted_effect fp1_0111_correct_accusation_effect = {
# Give $CHARACTER$ a witch secret & expose it.
$CHARACTER$ = {
# Hide the witch effect, so that you can't just *see* who the witch is by who'll be exposed.
hidden_effect = {
random_secret = {
type = secret_witch
expose_secret = root
}
}
# Simply show a nice, easy tooltip.
show_as_tooltip = { add_trait = witch }
}
# Rightfully imprison them.
rightfully_imprison_character_effect = {
TARGET = $CHARACTER$
IMPRISONER = root
}
# Gain a nicely chonky chunk of prestige.
add_prestige = medium_prestige_gain
# Receive a strong hook on, and oodles of opinion with, scope:accursed.
add_hook = {
type = loyalty_hook
target = scope:accursed
}
reverse_add_opinion = {
target = scope:accursed
modifier = relieved_opinion
opinion = 75
}
}
scripted_effect fp1_0111_false_accusation_effect = {
# $CHARACTER$ is, understandably, upset.
reverse_add_opinion = {
target = $CHARACTER$
modifier = falsely_accused
}
# And you lose some prestige for your failure.
add_prestige = medium_prestige_loss
# Scope:accursed has a melt-down.
scope:accursed = { fp1_0111_accursed_receives_curse_effect = yes }
}
scripted_effect fp1_0111_select_accusation_effect = {
# Inform root about the potential consequences of their guess.
show_as_tooltip = {
random_list = {
# Guessed correctly.
100 = {
show_chance = no
desc = fp1_yearly.0111.tt.correct_guess
fp1_0111_correct_accusation_effect = { CHARACTER = $CHARACTER$ }
}
# Guessed incorrectly.
100 = {
show_chance = no
desc = fp1_yearly.0111.tt.wrong_guess
fp1_0111_false_accusation_effect = { CHARACTER = $CHARACTER$ }
}
}
}
# And handle the actual results.
## Guessed correctly!
if = {
limit = { $CHARACTER$ = scope:culprit }
send_interface_toast = {
title = fp1_yearly.0111.tt.correct_accusation
left_icon = $CHARACTER$
right_icon = scope:accursed
# Calculate actual effects: we have to keep these hidden so as not to spoil the mystery.
hidden_effect = {
fp1_0111_correct_accusation_effect = { CHARACTER = $CHARACTER$ }
}
# And throw in a tooltip to make the toast seem less empty.
custom_tooltip = fp1_yearly.0111.tt.correct_accusation.tt
}
}
## Otherwise, you dun goofed.
else = {
send_interface_toast = {
title = fp1_yearly.0111.tt.false_accusation
left_icon = $CHARACTER$
right_icon = scope:accursed
# Calculate actual effects: we have to keep these hidden so as not to spoil the mystery.
hidden_effect = {
fp1_0111_false_accusation_effect = { CHARACTER = $CHARACTER$ }
}
# And throw in a tooltip to make the toast seem less empty.
custom_tooltip = fp1_yearly.0111.tt.false_accusation.tt
}
}
}
# Nithing Pole Raised Against Courtier
fp1_yearly.0111 = {
type = character_event
title = fp1_yearly.0111.t
desc = {
desc = fp1_yearly.0111.desc.intro
# Skill clue.
first_valid = {
triggered_desc = {
trigger = {
scope:clue_skill = flag:intrigue
intrigue >= fp1_0111_sorcerer_intrigue_high
}
desc = fp1_yearly.0111.desc.skill.intrigue_high
}
triggered_desc = {
trigger = {
scope:clue_skill = flag:learning
learning >= fp1_0111_sorcerer_learning_high
}
desc = fp1_yearly.0111.desc.skill.learning_high
}
triggered_desc = {
trigger = {
scope:clue_skill = flag:intrigue
intrigue <= fp1_0111_sorcerer_intrigue_low
}
desc = fp1_yearly.0111.desc.skill.intrigue_low
}
triggered_desc = {
trigger = {
scope:clue_skill = flag:learning
learning <= fp1_0111_sorcerer_learning_low
}
desc = fp1_yearly.0111.desc.skill.learning_low
}
desc = fp1_yearly.0111.desc.skill.fallback
}
# Grammatical stop.
desc = fp1_yearly.0111.desc.first_connector
# Trait clue #1.
first_valid = {
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:lazy_or_arbitrary }
desc = fp1_yearly.0111.desc.trait_1.lazy_or_arbitrary
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:wrathful_or_impatient }
desc = fp1_yearly.0111.desc.trait_1.wrathful_or_impatient
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:calm_or_patient }
desc = fp1_yearly.0111.desc.trait_1.calm_or_patient
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:sadistic_or_arrogant }
desc = fp1_yearly.0111.desc.trait_1.sadistic_or_arrogant
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:callous_or_ambitious }
desc = fp1_yearly.0111.desc.trait_1.callous_or_ambitious
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:deceitful_or_craven }
desc = fp1_yearly.0111.desc.trait_1.deceitful_or_craven
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:brave_or_trusting }
desc = fp1_yearly.0111.desc.trait_1.brave_or_trusting
}
triggered_desc = {
trigger = { scope:clue_trait_1 = flag:paranoid_or_vengeful }
desc = fp1_yearly.0111.desc.trait_1.paranoid_or_vengeful
}
desc = fp1_yearly.0111.desc.trait_1.fallback
}
# Grammatical stop.
desc = fp1_yearly.0111.desc.second_connector
# Trait clue #2.
first_valid = {
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:lazy_or_arbitrary }
desc = fp1_yearly.0111.desc.trait_2.lazy_or_arbitrary
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:wrathful_or_impatient }
desc = fp1_yearly.0111.desc.trait_2.wrathful_or_impatient
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:calm_or_patient }
desc = fp1_yearly.0111.desc.trait_2.calm_or_patient
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:sadistic_or_arrogant }
desc = fp1_yearly.0111.desc.trait_2.sadistic_or_arrogant
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:callous_or_ambitious }
desc = fp1_yearly.0111.desc.trait_2.callous_or_ambitious
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:deceitful_or_craven }
desc = fp1_yearly.0111.desc.trait_2.deceitful_or_craven
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:brave_or_trusting }
desc = fp1_yearly.0111.desc.trait_2.brave_or_trusting
}
triggered_desc = {
trigger = { scope:clue_trait_2 = flag:paranoid_or_vengeful }
desc = fp1_yearly.0111.desc.trait_2.paranoid_or_vengeful
}
desc = fp1_yearly.0111.desc.trait_2.fallback
}
desc = fp1_yearly.0111.desc.outro
}
theme = intrigue
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:accursed
animation = fear
}
lower_left_portrait = scope:suspect_a
lower_center_portrait = scope:suspect_b
lower_right_portrait = scope:suspect_c
override_background = { reference = corridor_night }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0111 }
is_landed = yes
# Filter to flavour-appropriate characters.
faith = {
NOT = { has_doctrine_parameter = witchcraft_accepted }
}
OR = {
fp1_is_norse_tribal = yes
# Allow this after feudalisation, but not for kings and emperors with more important things going on.
AND = {
fp1_is_norse = yes
highest_held_title_tier <= tier_duchy
}
}
# Make sure we have a suitably superstitious character for scope:courtier.
any_courtier = {
fp1_0111_superstitious_courtier_trigger = yes
save_temporary_scope_as = accursed
}
# And that they've got enemies available.
any_courtier_or_guest = {
# Count one more than we need so that we've still got a valid scope:accursed even if they accidentally take up a suspect slot.
count >= 4
fp1_0111_suspicious_courtier_trigger = yes
}
}
weight_multiplier = {
base = 1
# Witches see more of this type of thing in their court.
modifier = {
add = 1
has_trait = witch
}
# And zealots are more likely to be appealed to by terrified courtiers.
modifier = {
add = 0.5
has_trait = zealous
}
}
immediate = {
play_music_cue = "mx_cue_murder"
add_character_flag = {
flag = had_event_fp1_yearly_0111
days = 7300
}
# Designate a suitable superstitious courtier.
random_courtier = {
limit = { fp1_0111_superstitious_courtier_trigger = yes }
weight = {
base = 0
# Weigh up the paranoid.
modifier = {
add = 100
has_trait = paranoid
}
# Weigh up zealots.
modifier = {
add = 50
has_trait = zealous
}
# And the vengeful, just a little, for assuming everyone thinks like them.
modifier = {
add = 25
has_trait = vengeful
}
}
save_scope_as = accursed
}
# Next, grab all valid suspicious courtiers
every_courtier_or_guest = {
limit = {
fp1_0111_suspicious_courtier_trigger = yes
}
add_to_list = suspicious_courtiers_list
}
# And all valid discountables.
every_courtier_or_guest = {
limit = { fp1_0111_discountable_courtier_trigger = yes }
add_to_list = discountable_courtiers_list
}
# Process candidates.
## First, scope:culprit.
random_in_list = {
list = suspicious_courtiers_list
weight = {
base = 1
# Weight up anyone with the witch secret for the main suspect.
modifier = {
add = 1000
any_secret = { type = secret_witch }
}
}
save_scope_as = culprit
}
## Then, scope:red_herring.
random_in_list = {
list = suspicious_courtiers_list
limit = {
NOR = {
this = scope:culprit
# Forbid secret witches: that's *too* much of a red herring.
any_secret = { type = secret_witch }
}
}
save_scope_as = red_herring
}
## Try for a scope:discountable.
if = {
limit = {
any_in_list = {
list = discountable_courtiers_list
count >= 1
}
}
random_in_list = {
list = discountable_courtiers_list
save_scope_as = discountable
}
}
## If no scope:discountable is available, pick a scope:scarlet_herring.
else = {
random_in_list = {
list = suspicious_courtiers_list
limit = {
NOR = {
this = scope:culprit
this = scope:red_herring
# Forbid secret witches: that's *too* much of a red herring.
any_secret = { type = secret_witch }
}
}
save_scope_as = scarlet_herring
}
}
# Then hand out suspect tags at random, so that it's not just always scope:suspect_a.
## First, sort scope:culprit.
scope:culprit = { fp1_0111_randomise_sorcerer_identity_effect = yes }
## Next, scope:red_herring.
scope:red_herring = { fp1_0111_randomise_sorcerer_identity_effect = yes }
## If we have a scope:discountable, finish with them.
if = {
limit = { exists = scope:discountable }
scope:discountable = { fp1_0111_randomise_sorcerer_identity_effect = yes }
}
## Otherwise, it's scope:scarlet_herring's turn.
else = {
scope:scarlet_herring = { fp1_0111_randomise_sorcerer_identity_effect = yes }
}
# Process clues.
scope:culprit = {
# First, we pick one of scope:culprit's skills to examine.
## The base is just a straight 50:50 shot between intrigue & learning, but we weight it a list by education.
random_list = {
# Intrigue.
1000 = {
save_scope_value_as = {
name = clue_skill
value = flag:intrigue
}
# Weight up for education.
modifier = {
add = 250
has_trait_rank = {
trait = education_intrigue
rank = 1
}
}
modifier = {
add = 500
has_trait_rank = {
trait = education_intrigue
rank = 2
}
}
modifier = {
add = 750
has_trait_rank = {
trait = education_intrigue
rank = 3
}
}
modifier = {
add = 1000
has_trait_rank = {
trait = education_intrigue
rank >= 4
}
}
}
# Learning.
1000 = {
save_scope_value_as = {
name = clue_skill
value = flag:learning
}
# Weight up for education.
modifier = {
add = 250
has_trait_rank = {
trait = education_learning
rank = 1
}
}
modifier = {
add = 500
has_trait_rank = {
trait = education_learning
rank = 2
}
}
modifier = {
add = 750
has_trait_rank = {
trait = education_learning
rank = 3
}
}
modifier = {
add = 1000
has_trait_rank = {
trait = education_learning
rank >= 4
}
}
}
}
# Then, we want to look through their traits and pick a first pair to comment on.
## Eight options of 12.5% each.
random_list = {
# Lazy or arbitrary
125 = {
trigger = {
OR = {
has_trait = lazy
has_trait = arbitrary
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:lazy_or_arbitrary
}
}
# Wrathful or impatient.
125 = {
trigger = {
OR = {
has_trait = wrathful
has_trait = impatient
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:wrathful_or_impatient
}
}
# Calm or patient.
125 = {
trigger = {
OR = {
has_trait = calm
has_trait = patient
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:calm_or_patient
}
}
# Sadistic or arrogant.
125 = {
trigger = {
OR = {
has_trait = sadistic
has_trait = arrogant
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:sadistic_or_arrogant
}
}
# Callous or ambitious.
125 = {
trigger = {
OR = {
has_trait = callous
has_trait = ambitious
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:callous_or_ambitious
}
}
# Deceitful or craven.
125 = {
trigger = {
OR = {
has_trait = deceitful
has_trait = craven
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:deceitful_or_craven
}
}
# Brave or trusting.
125 = {
trigger = {
OR = {
has_trait = brave
has_trait = trusting
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:brave_or_trusting
}
}
# Paranoid or vengeful.
125 = {
trigger = {
OR = {
has_trait = paranoid
has_trait = vengeful
}
}
save_scope_value_as = {
name = clue_trait_1
value = flag:paranoid_or_vengeful
}
}
}
# Finally, pick a secondary trait pairing.
## Technically eight options of 12.5% each, but one of these is discounted for the first pairing, so it's actually seven pairings of 14.3% each.
random_list = {
# Lazy or arbitrary
125 = {
trigger = {
OR = {
has_trait = lazy
has_trait = arbitrary
}
NOT = { scope:clue_trait_1 = flag:lazy_or_arbitrary }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:lazy_or_arbitrary
}
}
# Wrathful or impatient.
125 = {
trigger = {
OR = {
has_trait = wrathful
has_trait = impatient
}
NOT = { scope:clue_trait_1 = flag:wrathful_or_impatient }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:wrathful_or_impatient
}
}
# Calm or patient.
125 = {
trigger = {
OR = {
has_trait = calm
has_trait = patient
}
NOT = { scope:clue_trait_1 = flag:calm_or_patient }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:calm_or_patient
}
}
# Sadistic or arrogant.
125 = {
trigger = {
OR = {
has_trait = sadistic
has_trait = arrogant
}
NOT = { scope:clue_trait_1 = flag:sadistic_or_arrogant }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:sadistic_or_arrogant
}
}
# Callous or ambitious.
125 = {
trigger = {
OR = {
has_trait = callous
has_trait = ambitious
}
NOT = { scope:clue_trait_1 = flag:callous_or_ambitious }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:callous_or_ambitious
}
}
# Deceitful or craven.
125 = {
trigger = {
OR = {
has_trait = deceitful
has_trait = craven
}
NOT = { scope:clue_trait_1 = flag:deceitful_or_craven }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:deceitful_or_craven
}
}
# Brave or trusting.
125 = {
trigger = {
OR = {
has_trait = brave
has_trait = trusting
}
NOT = { scope:clue_trait_1 = flag:brave_or_trusting }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:brave_or_trusting
}
}
# Paranoid or vengeful.
125 = {
trigger = {
OR = {
has_trait = paranoid
has_trait = vengeful
}
NOT = { scope:clue_trait_1 = flag:paranoid_or_vengeful }
}
save_scope_value_as = {
name = clue_trait_2
value = flag:paranoid_or_vengeful
}
}
}
}
# Aaaaaaand make scope:culprit an actual witch.
hidden_effect = {
scope:culprit = { give_witch_secret_or_trait_effect = yes }
}
}
# Scope:suspect_a, clearly.
option = {
name = fp1_yearly.0111.a
# Display tooltip & apply effects.
fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_a }
stress_impact = {
paranoid = major_stress_impact_loss
zealous = major_stress_impact_loss
trusting = major_stress_impact_gain
cynical = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_vengefulness = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = paranoid
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight down for stress.
add = -30
has_trait = trusting
}
modifier = { # Weight down for stress.
add = -30
has_trait = cynical
}
}
}
# Scope:suspect_b, I think...
option = {
name = fp1_yearly.0111.b
# Display tooltip & apply effects.
fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_b }
stress_impact = {
paranoid = major_stress_impact_loss
zealous = major_stress_impact_loss
trusting = major_stress_impact_gain
cynical = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_vengefulness = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = paranoid
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight down for stress.
add = -30
has_trait = trusting
}
modifier = { # Weight down for stress.
add = -30
has_trait = cynical
}
}
}
# Sounds like scope:suspect_c!
option = {
name = fp1_yearly.0111.c
# Display tooltip & apply effects.
fp1_0111_select_accusation_effect = { CHARACTER = scope:suspect_c }
stress_impact = {
paranoid = major_stress_impact_loss
zealous = major_stress_impact_loss
trusting = major_stress_impact_gain
cynical = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_vengefulness = 0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = paranoid
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight down for stress.
add = -30
has_trait = trusting
}
modifier = { # Weight down for stress.
add = -30
has_trait = cynical
}
}
}
# Scope:accursed, it's all in your mind, alright?
option = {
name = fp1_yearly.0111.d
trigger = {
NOT = { has_trait = witch }
}
# Diplomacy challenge to convince scope:accursed that the nithing pole means nothing.
duel = {
skill = diplomacy
target = scope:accursed
# You talk them down.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0111.d.tt_success
send_interface_toast = {
title = fp1_yearly.0111.d.tt_success
left_icon = scope:accursed
# Gain a favour if possible.
if = {
limit = {
can_add_hook = {
type = favor_hook
target = scope:accursed
}
}
add_hook = {
type = favor_hook
target = scope:accursed
years = 20
}
}
# And always a lot of opinion.
reverse_add_opinion = {
target = scope:accursed
modifier = trust_opinion
opinion = 50
}
# Plus a decent chunk of prestige.
add_prestige = medium_prestige_gain
}
}
# They freak the hell out.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0111.d.tt_failure
send_interface_toast = {
title = fp1_yearly.0111.d.tt_failure
left_icon = scope:accursed
# Scope:accursed has a melt-down.
scope:accursed = { fp1_0111_accursed_receives_curse_effect = yes }
}
}
}
stress_impact = {
trusting = major_stress_impact_loss
cynical = major_stress_impact_loss
paranoid = major_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.25
ai_zeal = -0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = trusting
}
modifier = { # Weight up for stress.
add = 30
has_trait = cynical
}
modifier = { # Weight down for stress.
add = -30
has_trait = paranoid
}
modifier = { # Weight down for stress.
add = -30
has_trait = zealous
}
}
}
# (Witch) Worry not, I have a counter-spell.
option = {
name = fp1_yearly.0111.e
trigger = { has_trait = witch }
trait = witch
# Gain a favour if possible.
if = {
limit = {
can_add_hook = {
type = favor_hook
target = scope:accursed
}
}
add_hook = {
type = favor_hook
target = scope:accursed
years = 20
}
}
# And always a lot of opinion.
reverse_add_opinion = {
target = scope:accursed
modifier = trust_opinion
opinion = 50
}
# Plus a decent chunk of prestige.
add_prestige = medium_prestige_gain
stress_impact = {
trusting = major_stress_impact_loss
cynical = major_stress_impact_loss
paranoid = major_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.25
ai_zeal = -0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = trusting
}
modifier = { # Weight up for stress.
add = 30
has_trait = cynical
}
modifier = { # Weight down for stress.
add = -30
has_trait = paranoid
}
modifier = { # Weight down for stress.
add = -30
has_trait = zealous
}
}
}
}
##################################################
# FLAVOUR YEARLIES
##################################################
# FLAVOUR YEARLIES EFFECTS
scripted_effect fp1_pick_outdoorsy_child_for_winter_effect = {
random_child = {
# Try to pick an outdoorsy child first.
limit = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
OR = {
childhood_loud_child_trigger = yes
childhood_nice_child_trigger = yes
}
}
# Otherwise, any is good.
alternative_limit = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
}
save_scope_as = child
}
}
##################################################
# Out for a Sail
# by Ewan Cowhig Croft
# 0501 - 0510
##################################################
# You encounter a distressed raiding vessel whilst out sailing.
fp1_yearly.0501 = {
type = character_event
title = fp1_yearly.0501.t
desc = fp1_yearly.0501.desc
theme = realm
left_portrait = {
character = root
animation = shock
}
override_background = { reference = fp1_ocean_norse }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0501 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_coastal_norse_tribal = yes
}
weight_multiplier = {
base = 1
# Weight up for having sea-faring traits.
modifier = {
add = 0.5
has_trait = viking
}
modifier = {
add = 0.5
has_trait = adventurer
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0501
days = 1825
}
# Generate a gender for the fisher people.
random_dummy_gender_soldier_effect = { SCOPE_NAME = fisherpeople }
}
# Stop and try to help them!
option = {
name = fp1_yearly.0501.a
# Martial duel to organise your sailors.
duel = {
skill = martial
value = 10
# You succeed in saving the crew and some of their haul!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0501.a.tt_success
send_interface_toast = {
title = fp1_yearly.0501.a.tt_success
left_icon = root
add_prestige = medium_prestige_gain
}
}
# You fail, and many are lost to the storm.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0501.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0501.a.tt_failure
left_icon = root
add_prestige = miniscule_prestige_loss
}
}
}
stress_impact = {
diligent = minor_stress_impact_loss
compassionate = medium_stress_impact_loss
lazy = minor_stress_impact_gain
callous = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.75
ai_energy = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight up for stress.
add = 20
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = callous
}
modifier = { # Weight down for stress.
add = -20
has_trait = sadistic
}
}
}
# Salvage the cargo, kill the survivors.
option = {
name = fp1_yearly.0501.b
# Prowess duel to storm the boat.
duel = {
skill = prowess
value = 10
# You storm the boat easily.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0501.b.tt_success
send_interface_toast = {
title = fp1_yearly.0501.b.tt_success
left_icon = root
add_gold = minor_gold_value
}
}
# Survivors slip to shore.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0501.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0501.b.tt_failure
left_icon = root
add_gold = minor_gold_value
add_tyranny = minor_tyranny_gain
}
}
}
stress_impact = {
greedy = minor_stress_impact_loss
callous = minor_stress_impact_loss
sadistic = medium_stress_impact_loss
compassionate = medium_stress_impact_gain
generous = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_greed = 0.25
ai_compassion = -0.5
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = greedy
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 20
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -20
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
}
}
# Sail on by.
option = {
name = fp1_yearly.0501.c
# Minor dread gain from your crew.
add_dread = miniscule_dread_gain
stress_impact = {
lazy = minor_stress_impact_loss
callous = minor_stress_impact_loss
arbitrary = minor_stress_impact_loss
diligent = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
just = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -10
has_trait = just
}
}
}
}
##################################################
# The Stench of Success
# by Ewan Cowhig Croft
# 0511 - 0520
##################################################
scripted_trigger fp1_keeps_stinking_hunting_trophy = {
# Standard checks.
is_available_ai_adult = yes
# Do they have the right personality?
calc_true_if = {
amount >= 2
has_trait = greedy
has_trait = lazy
has_trait = wrathful
has_trait = arrogant
has_trait = brave
has_trait = gregarious
has_trait = ambitious
has_trait = callous
has_trait = sadistic
has_trait = stubborn
has_trait = vengeful
}
NOR = {
has_trait = diligent
has_trait = humble
has_trait = shy
has_trait = fickle
}
# Filter out anyone who'd be a better hunter than this.
NOR = {
has_trait = lifestyle_hunter
has_court_position = master_of_hunt_court_position
}
# Finally, remove people who are currently hurt, so that berserkers can smash 'em up.
NOT = { has_trait = wounded }
}
# One of your courtiers is extremely proud of a hunting trophy and won't let it go.
fp1_yearly.0511 = {
type = character_event
title = fp1_yearly.0511.t
desc = fp1_yearly.0511.desc
theme = hunting
left_portrait = {
character = root
animation = disgust
}
right_portrait = {
character = scope:stinker
animation = personality_honorable
}
override_background = { reference = study }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0511 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse_tribal = yes
fp1_is_in_scandinavia_or_colonies = yes
# Must have a suitable random courtier.
any_courtier = { fp1_keeps_stinking_hunting_trophy = yes }
}
weight_multiplier = {
base = 1
# Weight up a little for special traits.
modifier = {
add = 0.5
has_trait = lifestyle_hunter
}
modifier = {
add = 0.5
has_trait = berserker
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0511
days = 1825
}
# Designate a suitable courtier.
random_courtier = {
# Try to grab someone relevant.
limit = {
fp1_keeps_stinking_hunting_trophy = yes
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
}
# Otherwise, any valid character will do.
alternative_limit = { fp1_keeps_stinking_hunting_trophy = yes }
save_scope_as = stinker
}
# Pick a local animal for the head to be from.
select_local_animal_effect = { TYPE = any } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling
# Give them the trophy.
scope:stinker = {
add_character_modifier = {
modifier = fp1_0511_carries_stinking_trophy_modifier
years = 5
}
}
}
# It's very nice, scope:stinker. So very, very nice.
option = {
name = fp1_yearly.0511.a
# Scope:stinker is very happy with you.
reverse_add_opinion = {
target = scope:stinker
modifier = pleased_opinion
opinion = 75
}
# Everyone else is not.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
limit = {
this != scope:stinker
}
add_opinion = {
target = root
modifier = angry_opinion
opinion = -20
}
}
stress_impact = {
deceitful = minor_stress_impact_loss
patient = minor_stress_impact_loss
shy = medium_stress_impact_loss
impatient = minor_stress_impact_gain
honest = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_sociability = -0.25
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = deceitful
}
modifier = { # Weight up for stress.
add = 10
has_trait = patient
}
modifier = { # Weight up for stress.
add = 20
has_trait = shy
}
modifier = { # Weight down for stress.
add = -10
has_trait = impatient
}
modifier = { # Weight down for stress.
add = -20
has_trait = honest
}
}
}
# [HighGod], [HealthGod], and [FortuneGod] too, get *rid* of it!
option = {
name = fp1_yearly.0511.b
# Scope:stinker is incredibly upset.
reverse_add_opinion = {
target = scope:stinker
modifier = cruelty_opinion
opinion = -50
}
scope:stinker = { remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier }
# Everyone else is not.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
limit = {
this != scope:stinker
}
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 20
}
}
stress_impact = {
wrathful = minor_stress_impact_loss
impatient = medium_stress_impact_loss
compassionate = minor_stress_impact_gain
patient = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_sociability = 0.25
ai_compassion = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = wrathful
}
modifier = { # Weight up for stress.
add = 20
has_trait = impatient
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -20
has_trait = patient
}
}
}
# (Berserker) root SMASH!
option = {
name = fp1_yearly.0511.c
trigger = { has_trait = berserker }
trait = berserker
# Scope:stinker is incredibly upset.
reverse_add_opinion = {
target = scope:stinker
modifier = cruelty_opinion
opinion = -75
}
scope:stinker = { remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier }
# Scope:stinker will remember this.
progress_towards_rival_effect = {
REASON = rival_berserker_smash
CHARACTER = scope:stinker
OPINION = 0
}
# But man, wasn't that *therapeutic*?
## Stress loss handled in stress_impact.
stress_impact = {
berserker = massive_stress_loss
impatient = minor_stress_impact_loss
wrathful = minor_stress_impact_loss
patient = medium_stress_impact_gain
calm = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_boldness = 0.5
ai_compassion = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = impatient
}
modifier = { # Weight up for stress.
add = 10
has_trait = wrathful
}
modifier = { # Weight down for stress.
add = -20
has_trait = patient
}
modifier = { # Weight down for stress.
add = -20
has_trait = calm
}
}
}
# (Hunter) How about we get you a *new* trophy this eve?
option = {
name = fp1_yearly.0511.d
# Elite hunters who don't fly off the handle.
trigger = {
has_trait = lifestyle_hunter
NOT = { has_trait = berserker }
}
trait = lifestyle_hunter
# Scope:stinker benefits.
scope:stinker = {
# They're happy with you.
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 50
}
# And won't make the same mistake.
add_trait = lifestyle_hunter
# Plus they ditch the old trophy.
remove_character_modifier = fp1_0511_carries_stinking_trophy_modifier
}
# Best friends?
progress_towards_friend_effect = {
CHARACTER = scope:stinker
OPINION = 0
REASON = friend_fp1_stink_new_trophy
}
# Everyone else is just glad the stink is gone.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
limit = {
this != scope:stinker
}
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 10
}
}
stress_impact = {
compassionate = minor_stress_impact_loss
gregarious = minor_stress_impact_loss
patient = medium_stress_impact_loss
impatient = medium_stress_impact_gain
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_energy = 0.5
ai_honor = 0.25
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = compassionate
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 20
has_trait = patient
}
modifier = { # Weight down for stress.
add = -20
has_trait = impatient
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
# Yes, scope:stinker, it's rank, now please leave.
option = {
name = fp1_yearly.0511.e
# Scope:stinker is quite upset.
reverse_add_opinion = {
target = scope:stinker
modifier = cruelty_opinion
opinion = -25
}
# But people respect you telling it like it is.
add_prestige = minor_prestige_gain
stress_impact = {
honest = medium_stress_impact_loss
deceitful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = honest
}
modifier = { # Weight down for stress.
add = -20
has_trait = deceitful
}
}
}
after = {
remove_variable = animal_type
}
}
##################################################
# Blood on the Snow
# by Ewan Cowhig Croft
# 0521 - 0530
##################################################
# Your child challenges your mastery of snowball warfare.
fp1_yearly.0521 = {
type = character_event
title = fp1_yearly.0521.t
desc = fp1_yearly.0521.desc
theme = war
left_portrait = {
character = root
animation = fear
}
right_portrait = {
character = scope:child
animation = personality_bold
}
override_background = { reference = market }
widget = {
gui = "event_window_widget_vfx_snow"
container = "foreground_shader_vfx_container"
}
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0521 }
is_playable_character = yes
# Must have at least one suitable child.
any_child = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
}
# Gotta have snow in the capital.
character_capital_has_winter_trigger = yes
}
weight_multiplier = {
base = 1
# Weight up for outdoorsy kids.
modifier = {
add = 1
any_child = { childhood_loud_child_trigger = yes }
}
modifier = {
add = 1
any_child = { childhood_nice_child_trigger = yes }
}
# Weight according to winter scale.
character_capital_has_snow_suitable_for_activities = { CHARACTER = root }
}
immediate = {
play_music_cue = "mx_cue_war_declared"
add_character_flag = {
flag = had_event_fp1_yearly_0521
days = 1825
}
# Designate a suitable child.
fp1_pick_outdoorsy_child_for_winter_effect = yes
}
# Good shot! Come here y'little rascal!
option = {
name = fp1_yearly.0521.a
# You get into a friendly snowball fight.
custom_tooltip = fp1_yearly.0521.a.tt
# Gain some opinion with them.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 20
}
stress_impact = {
gregarious = minor_stress_impact_loss
forgiving = minor_stress_impact_loss
vengeful = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_energy = 0.25
ai_vengefulness = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -10
has_trait = vengeful
}
}
}
# Throw a match against them.
option = {
name = fp1_yearly.0521.b
# You take a dive.
custom_tooltip = fp1_yearly.0521.b.tt
# Gain more opinion.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 40
}
# But lose a little prestige.
add_prestige = minor_prestige_loss
stress_impact = {
forgiving = minor_stress_impact_loss
humble = minor_stress_impact_loss
vengeful = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_sociability = 0.25
ai_honor = -0.1
ai_vengefulness = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { # Weight up for stress.
add = 10
has_trait = humble
}
modifier = { # Weight down for stress.
add = -10
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -10
has_trait = arrogant
}
}
}
# Beat them into the ground with superior martial know-how.
option = {
name = fp1_yearly.0521.c
# If you've got berserker, you flip out when taking things too seriously instead.
trigger = {
NOR = {
has_trait = berserker
has_trait = strategist
}
}
# Confirm to the player.
custom_tooltip = fp1_yearly.0521.c.tt
# Sure would be embarrassing if you lost this snowball fight your voluntarily taking too seriously, amirite?
duel = {
skill = martial
target = scope:child
# You successfully beat the child.
40 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0521.c.tt_success
send_interface_toast = {
title = fp1_yearly.0521.c.tt_success
left_icon = scope:child
# Minor prestige for uhh... your ruthlessness?
add_prestige = minor_prestige_gain
# Scope:child is a bit upset.
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -30
}
}
}
# Scope:child trounces you.
60 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0521.c.tt_failure
send_interface_toast = {
title = fp1_yearly.0521.c.tt_failure
left_icon = scope:child
# Clearly you're taking this *way* too seriously.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = -40
}
}
}
}
stress_impact = {
vengeful = medium_stress_impact_loss
arrogant = medium_stress_impact_loss
forgiving = medium_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_sociability = 0.25
ai_honor = 0.1
ai_compassion = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 20
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -20
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = humble
}
}
}
# (Strategist) Insta-beat 'em.
option = {
name = fp1_yearly.0521.d
trigger = {
has_trait = strategist
NOT = { has_trait = berserker }
}
trait = strategist
# Confirm to the player.
custom_tooltip = fp1_yearly.0521.d.tt
# Minor prestige for uhh... your ruthlessness?
add_prestige = minor_prestige_gain
# Scope:child is a bit awed.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = 20
}
stress_impact = {
vengeful = medium_stress_impact_loss
arrogant = medium_stress_impact_loss
forgiving = medium_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_sociability = 0.25
ai_honor = 0.1
ai_compassion = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 20
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -20
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = humble
}
}
}
# (Berserker) RRRAAAAARRRGGGHHH!
option = {
name = fp1_yearly.0521.e
trigger = { has_trait = berserker }
trait = berserker
# The snowball triggers your berserk rage.
custom_tooltip = fp1_yearly.0521.e.tt
# Berserkergang relieves stress.
## Stress loss handled in stress impact.
# Scope:child is *terrified*.
reverse_add_opinion = {
target = scope:child
modifier = scared_opinion
opinion = -100
}
stress_impact = {
berserker = massive_stress_loss
impatient = minor_stress_impact_loss
wrathful = minor_stress_impact_loss
patient = medium_stress_impact_gain
calm = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.75
ai_compassion = -1
}
modifier = { # Weight up for stress.
add = 10
has_trait = impatient
}
modifier = { # Weight up for stress.
add = 10
has_trait = wrathful
}
modifier = { # Weight down for stress.
add = -20
has_trait = patient
}
modifier = { # Weight down for stress.
add = -20
has_trait = calm
}
}
}
# Don't bother parent whilst they're working. Run along.
option = {
name = fp1_yearly.0521.f
# Welp, that's that dealt with.
add_stress = minor_stress_loss
# Scope:child is mildly hurt.
reverse_add_opinion = {
target = scope:child
modifier = hurt_opinion
opinion = -10
}
# Too gentle a response to give stress, to be honest.
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.25
ai_energy = -0.5
ai_sociability = -0.75
}
}
}
}
##################################################
# [Dynasty] on Ice
# by Ewan Cowhig Croft
# 0531 - 0540
##################################################
scripted_trigger fp1_child_not_had_decisive_skating_lessons_trigger = {
NOR = {
has_character_flag = child_had_event_fp1_yearly_0531
has_character_modifier = fp1_avoiding_the_snow_modifier
}
}
# Teaching your Child to Ice Skate
fp1_yearly.0531 = {
type = character_event
title = fp1_yearly.0531.t
desc = fp1_yearly.0531.desc
theme = education
left_portrait = {
character = root
animation = admiration
}
right_portrait = {
character = scope:child
animation = shame
}
override_background = { reference = courtyard }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0531 }
is_playable_character = yes
# Must be a suitable culture.
culture_uses_frequent_winter_transportation_trigger = yes
# Must have at least one suitable child.
any_child = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# Can't have successfully learnt/been encouraged away from already.
fp1_child_not_had_decisive_skating_lessons_trigger = yes
}
# Gotta have snow in the capital.
character_capital_has_winter_trigger = yes
}
weight_multiplier = {
base = 1
# Weight up for outdoorsy kids.
modifier = {
add = 1
any_child = { childhood_loud_child_trigger = yes }
}
modifier = {
add = 1
any_child = { childhood_nice_child_trigger = yes }
}
# Weight according to winter scale.
character_capital_has_snow_suitable_for_activities = { CHARACTER = root }
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0531
days = 1825
}
# Pick a suitable child; this is a slightly modified fp1_pick_outdoorsy_child_for_winter, as we need to filter out a few things.
random_child = {
# Try to pick an outdoorsy child first.
limit = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
OR = {
has_trait = rowdy
childhood_loud_child_trigger = yes
childhood_nice_child_trigger = yes
}
# Can't have successfully learnt/been encouraged away from already.
fp1_child_not_had_decisive_skating_lessons_trigger = yes
}
# Otherwise, any is good.
alternative_limit = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# Can't have successfully learnt/been encouraged away from already.
fp1_child_not_had_decisive_skating_lessons_trigger = yes
}
save_scope_as = child
}
}
# It's easy! Alright, you can watch me...
option = {
name = fp1_yearly.0531.a
duel = {
skill = diplomacy
value = 10
# You successfully explain what's up to scope:child.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0531.a.tt_success
send_interface_toast = {
title = fp1_yearly.0531.a.tt_success
left_icon = scope:child
scope:child = {
# Gain some opinion with them.
add_opinion = {
target = root
modifier = love_opinion
opinion = 20
}
# And this boosts their confidence & balance.
add_prowess_skill = medium_skill_bonus
add_diplomacy_skill = medium_skill_bonus
# Flag them as having learnt and not needing to learn again.
add_character_flag = {
flag = child_had_event_fp1_yearly_0531
years = 20
}
}
}
}
# You just frustrate them further.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0531.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0531.a.tt_failure
left_icon = scope:child
# They grow frustrated.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = -20
}
scope:child = { add_stress = major_stress_gain }
}
}
}
stress_impact = {
diligent = minor_stress_impact_loss
lazy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_energy = 0.5
ai_compassion = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
}
}
# Don't we have maids for you to pester?
option = {
name = fp1_yearly.0531.b
# You focus on your work.
add_character_modifier = {
modifier = fp1_focusing_on_rule_modifier
years = 10
}
# They grow frustrated.
reverse_add_opinion = {
target = scope:child
modifier = hurt_opinion
opinion = -40
}
# And will remember this in later life.
hidden_effect = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:child }
}
set_relation_potential_rival = scope:child
}
}
stress_impact = {
callous = minor_stress_impact_loss
lazy = major_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -0.25
ai_energy = -0.5
ai_sociability = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 30
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# Play indoors, you'll catch the cold.
option = {
name = fp1_yearly.0531.c
# Your advice is taken.
scope:child = {
add_character_modifier = {
modifier = fp1_avoiding_the_snow_modifier
years = 10
}
}
# They're a tad bummed though.
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -20
}
stress_impact = {
cynical = minor_stress_impact_loss
paranoid = minor_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = cynical
}
modifier = { # Weight down for stress.
add = -10
has_trait = paranoid
}
}
}
}
##################################################
# The Beast of [Capital]
# by Ewan Cowhig Croft
# 0541 - 0550
##################################################
scripted_trigger fp1_0541_valid_child_prankster_trigger = {
# Is available for events.
is_available_ai_child = yes
# Child is in the correct age bracket.
child_not_infant_trigger = yes
child_not_teen_trigger = yes
# Must not be a quiet child.
childhood_quiet_child_trigger = no
}
scripted_trigger fp1_0541_valid_courtier_victim_trigger = {
# Is available for events.
is_available_ai_adult = yes
# Isn't especially brave or good at dealing with kids.
NOR = {
has_trait = calm
has_trait = patient
has_trait = humble
has_trait = brave
has_trait = shy
has_trait = gregarious
has_trait = trusting
has_trait = compassionate
has_trait = forgiving
}
# And, in case you act disproportionately, they aren't a good relationship.
has_friendly_relationship_with_root_trigger = no
}
# Young child with animal furs is pretending to be a large animal.
fp1_yearly.0541 = {
type = character_event
title = fp1_yearly.0541.t
desc = fp1_yearly.0541.desc
theme = family
left_portrait = {
character = scope:courtier
animation = rage
}
right_portrait = {
character = scope:child
animation = schadenfreude
}
override_background = { reference = corridor_day }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0541 }
is_landed = yes
# Intended for Norse-ish tribals.
fp1_is_norse_tribal = yes
fp1_is_in_scandinavia_or_colonies = yes
# Has a valid child.
any_child = { fp1_0541_valid_child_prankster_trigger = yes }
# Has a valid courtier.
any_courtier = { fp1_0541_valid_courtier_victim_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight up for active/mean kids.
modifier = {
add = 1
any_child = { childhood_loud_child_trigger = yes }
}
modifier = {
add = 1
any_child = { childhood_mean_child_trigger = yes }
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0541
days = 1825
}
# Pick an appropriate child.
random_child = {
# Prefer rowdy or mean-spirited children.
limit = {
fp1_0541_valid_child_prankster_trigger = yes
OR = {
childhood_loud_child_trigger = yes
childhood_mean_child_trigger = yes
}
}
# Though otherwise any valid child is acceptable.
alternative_limit = { fp1_0541_valid_child_prankster_trigger = yes }
save_scope_as = child
}
# And an appropriate courtier.
random_courtier = {
limit = {
fp1_0541_valid_courtier_victim_trigger = yes
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
}
alternative_limit = { fp1_0541_valid_courtier_victim_trigger = yes }
save_scope_as = courtier
}
select_local_animal_effect = { TYPE = dangerous } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling
}
# This is honestly just bloody hilarious.
option = {
name = fp1_yearly.0541.a
# Scope:child is pretty damned happy.
reverse_add_opinion = {
target = scope:child
modifier = amused_opinion
opinion = 40
}
# Scope:courtier loses opinion, though.
reverse_add_opinion = {
target = scope:courtier
modifier = respect_opinion
opinion = -50
}
# Other courtiers are sceptical.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
limit = {
NOR = {
this = scope:child
this = scope:courtier
}
}
add_opinion = {
target = root
modifier = amused_opinion
opinion = -10
}
}
stress_impact = {
gregarious = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
arbitrary = minor_stress_impact_loss
just = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_vengefulness = 0.25
ai_sociability = 0.25
ai_compassion = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = just
}
}
}
# Punish scope:child.
option = {
name = fp1_yearly.0541.b
# Scope:courtier is happy, and you gain a favour hook if possible.
if = {
limit = {
can_add_hook = {
type = favor_hook
target = scope:courtier
}
}
add_hook = {
type = favor_hook
target = scope:courtier
years = 5
}
}
reverse_add_opinion = {
target = scope:courtier
modifier = pleased_opinion
opinion = 20
}
# Scope:child is upset.
reverse_add_opinion = {
target = scope:child
modifier = hurt_opinion
opinion = -30
}
stress_impact = {
just = minor_stress_impact_loss
forgiving = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_honor = 0.25
ai_vengefulness = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = just
}
modifier = { # Weight down for stress.
add = -10
has_trait = forgiving
}
}
}
# Evict scope:courtier.
option = {
name = fp1_yearly.0541.c
# Scope:child is very happy.
reverse_add_opinion = {
target = scope:child
modifier = amused_opinion
opinion = 30
}
# Scope:courtier is gobsmacked, might become a rival, and leaves.
reverse_add_opinion = {
target = scope:courtier
modifier = respect_opinion
opinion = -30
}
scope:child = { save_scope_as = relationship_reason_involved_character }
progress_towards_rival_effect = {
REASON = rival_harassed_exiled
CHARACTER = scope:courtier
OPINION = 0
}
clear_saved_scope = relationship_reason_involved_character
scope:courtier = { select_and_move_to_pool_effect = yes }
stress_impact = {
arbitrary = major_stress_impact_loss
just = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_compassion = -0.5
ai_rationality = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = just
}
}
}
# I really, profoundly do not care.
option = {
name = fp1_yearly.0541.d
# Gain a little prestige for telling them to sod off.
add_prestige = minor_prestige_gain
# Both scope:child & scope:courtier are a tad upset.
reverse_add_opinion = {
target = scope:courtier
modifier = disappointed_opinion
opinion = -10
}
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -10
}
stress_impact = {
arbitrary = minor_stress_impact_loss
lazy = medium_stress_impact_loss
just = medium_stress_impact_gain
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = -0.5
ai_sociability = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = just
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
}
}
}
##################################################
# Fishy Business
# by Ewan Cowhig Croft
# 0551 - 0560
##################################################
scripted_trigger fp1_0551_appropriately_smelly_courtier_trigger = {
# Standard checks.
is_available_ai_adult = yes
# Must have some quality that's inspired this odd attitude.
OR = {
# Enjoys eating oddities.
has_trait = lifestyle_hunter
has_trait = gluttonous
has_trait = vengeful
# Weird health foods.
has_trait = whole_of_body
has_trait = lifestyle_mystic
has_trait = lifestyle_physician
# Refuses to admit wrong-doing.
has_trait = arrogant
has_trait = stubborn
has_trait = sadistic
}
# And nothing that would rule it out.
NOR = {
has_trait = temperate
has_trait = fickle
has_trait = compassionate
}
}
# One of your courtiers has taken a liking to foul food stuffs.
fp1_yearly.0551 = {
type = character_event
title = fp1_yearly.0551.t
desc = fp1_yearly.0551.desc
theme = unfriendly
left_portrait = {
character = root
animation = disapproval
}
right_portrait = {
character = scope:antisocialite
animation = personality_greedy
}
override_background = { reference = feast }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0551 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse_tribal = yes
fp1_is_in_scandinavia = yes
# Has a suitable courtier.
any_courtier = { fp1_0551_appropriately_smelly_courtier_trigger = yes }
}
weight_multiplier = { base = 1 }
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0551
days = 1825
}
# Grab an appropriate courtier.
random_courtier = {
limit = {
fp1_0551_appropriately_smelly_courtier_trigger = yes
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
}
alternative_limit = { fp1_0551_appropriately_smelly_courtier_trigger = yes }
save_scope_as = antisocialite
}
}
# Let's have a chat.
option = {
name = fp1_yearly.0551.a
# See if you can politely convince scope:antisocialite to be a bit more respectful.
duel = {
skill = diplomacy
target = scope:antisocialite
# You put your point across eloquently.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -45
}
desc = fp1_yearly.0551.a.tt_success
send_interface_toast = {
title = fp1_yearly.0551.a.tt_success
left_icon = scope:antisocialite
reverse_add_opinion = {
target = scope:antisocialite
modifier = respect_opinion
opinion = 20
}
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
limit = {
this != scope:antisocialite
}
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 20
}
}
# And a bit of prestige to sweeten the pot.
add_prestige = minor_prestige_gain
}
}
# Scope:socialite is incredibly insulted.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -45
}
desc = fp1_yearly.0551.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0551.a.tt_failure
left_icon = scope:antisocialite
reverse_add_opinion = {
target = scope:antisocialite
modifier = insult_opinion
opinion = -40
}
progress_towards_rival_effect = {
REASON = rival_smells_of_fish
CHARACTER = scope:antisocialite
OPINION = 0
}
}
}
}
stress_impact = {
gregarious = minor_stress_impact_loss
honest = minor_stress_impact_loss
shy = minor_stress_impact_gain
lazy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_compassion = 0.25
ai_rationality = 0.25
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = honest
}
modifier = { # Weight down for stress.
add = -10
has_trait = shy
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
}
}
# Perhaps I could simply move my quarters further away?
option = {
name = fp1_yearly.0551.b
trigger = {
NOT = { has_trait = gluttonous }
}
# Make it clear that scope:antisocialite will continue their smelly rampage.
custom_tooltip = fp1_yearly.0551.b.tt
# Gain a weak hook on the courtier.
if = {
limit = {
can_add_hook = {
target = scope:antisocialite
type = favor_hook
years = 5
}
}
add_hook = {
target = scope:antisocialite
type = favor_hook
years = 5
}
}
# And some opinion.
reverse_add_opinion = {
target = scope:antisocialite
modifier = grateful_opinion
opinion = 30
}
# Lose a bit of respect with everyone else.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
# Speedily filter out the root cause.
limit = {
this != scope:antisocialite
}
add_opinion = {
target = root
modifier = respect_opinion
opinion = -20
}
}
stress_impact = {
arbitrary = medium_stress_impact_loss
shy = major_stress_impact_loss
honest = minor_stress_impact_gain
gregarious = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.5
ai_rationality = -0.5
ai_sociability = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 30
has_trait = shy
}
modifier = { # Weight down for stress.
add = -10
has_trait = honest
}
modifier = { # Weight down for stress.
add = -30
has_trait = gregarious
}
}
}
# (Gluttonous) Do... do you have any more of that?
option = {
name = fp1_yearly.0551.b_alt
trigger = { has_trait = gluttonous }
trait = gluttonous
# Make it clear that scope:antisocialite will continue their smelly rampage.
custom_tooltip = fp1_yearly.0551.b_alt.tt
# Gain a strong hook on the courtier.
if = {
limit = {
can_add_hook = {
target = scope:antisocialite
type = loyalty_hook
}
}
add_hook = {
target = scope:antisocialite
type = loyalty_hook
}
}
# Become friends, if possible.
if = {
limit = {
can_set_relation_friend_trigger = { CHARACTER = scope:antisocialite }
}
set_relation_friend = { reason = friend_delectable_herring target = scope:antisocialite }
}
# And some opinion.
reverse_add_opinion = {
target = scope:antisocialite
modifier = respect_opinion
opinion = 50
}
# Lose a *fair* of respect with everyone else.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
# Speedily filter out the root cause.
limit = {
this != scope:antisocialite
}
add_opinion = {
target = root
modifier = respect_opinion
opinion = -40
}
}
stress_impact = {
arbitrary = medium_stress_impact_loss
shy = major_stress_impact_loss
honest = minor_stress_impact_gain
gregarious = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = -0.5
ai_rationality = -0.5
ai_sociability = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 30
has_trait = shy
}
modifier = { # Weight down for stress.
add = -10
has_trait = honest
}
modifier = { # Weight down for stress.
add = -30
has_trait = gregarious
}
}
}
# You know what? Dungeon. *Now*.
option = {
name = fp1_yearly.0551.c
# No one objects to the imprisonment.
rightfully_imprison_character_effect = {
TARGET = scope:antisocialite
IMPRISONER = root
}
hidden_effect = {
scope:antisocialite = { change_prison_type = dungeon }
}
# Immediate gratitude from your courtiers et al.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
# Speedily filter out the root cause.
limit = {
this != scope:antisocialite
}
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 20
}
}
stress_impact = {
arbitrary = minor_stress_impact_loss
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
just = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_honor = -0.5
ai_compassion = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -20
has_trait = just
}
modifier = { # Weight down for stress.
add = -20
has_trait = compassionate
}
}
}
# What a shame, it seems my attention is required *far* away.
option = {
name = fp1_yearly.0551.d
# What a relief.
## Stress loss handled in stress_impact.
# Lose a bit of respect with everyone else.
every_courtier_or_guest = {
custom = custom.every_courtier_and_guest
# Speedily filter out the root cause.
limit = {
this != scope:antisocialite
}
add_opinion = {
target = root
modifier = respect_opinion
opinion = -10
}
}
# Gain a mild modifier.
add_character_modifier = {
modifier = fp1_yearly_0551_absent_lord_modifier
years = 5
}
stress_impact = {
base = major_stress_loss
shy = minor_stress_impact_loss
gregarious = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_sociability = -0.25
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = shy
}
modifier = { # Weight down for stress.
add = -10
has_trait = gregarious
}
}
}
}
##################################################
# My Arm Against Yours
# by Ewan Cowhig Croft
# 0561 - 0570
##################################################
scripted_trigger fp1_0561_is_friendly_knight_trigger = {
# Standard checks.
is_available_ai_adult = yes
is_landed = no
# Has some sociable qualities.
OR = {
ai_sociability >= low_positive_ai_value
ai_boldness >= low_positive_ai_value
ai_energy >= low_positive_ai_value
ai_honor >= low_positive_ai_value
has_trait = wrathful
has_trait = arrogant
has_trait = brave
has_trait = gregarious
has_trait = ambitious
has_trait = lifestyle_reveler
}
# No special relationship with root.
has_any_good_relationship_with_root_trigger = no
has_any_bad_relationship_with_root_trigger = no
# Doesn't absolutely hate root.
opinion = {
target = root
value >= low_negative_opinion
}
}
# One of your knights challenges you to a friendly arm wrestle.
fp1_yearly.0561 = {
type = character_event
title = fp1_yearly.0561.t
desc = fp1_yearly.0561.desc
theme = friendly
left_portrait = {
character = root
animation = personality_bold
}
right_portrait = {
character = scope:knight
animation = admiration
}
override_background = { reference = tavern }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_at_peace_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0561 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse_tribal = yes
# Has an appropriate available knight.
any_knight = { fp1_0561_is_friendly_knight_trigger = yes }
# Must be a suitable challengee.
prowess >= mediocre_skill_rating
is_healthy = yes
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root }
}
weight_multiplier = {
base = 1
# Weight down/up a little according to prowess.
modifier = {
add = -0.25
prowess <= low_skill_rating
}
modifier = {
add = -0.25
prowess <= mediocre_skill_rating
}
modifier = {
add = 0.25
prowess >= high_skill_rating
}
modifier = {
add = 0.25
prowess >= very_high_skill_rating
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0561
days = 1825
}
# Grab an appropriate knight to wrassle.
random_knight = {
limit = {
fp1_0561_is_friendly_knight_trigger = yes
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
}
alternative_limit = { fp1_0561_is_friendly_knight_trigger = yes }
# We want to weight up higher prowess knights, but not that dramatically.
weight = {
base = 0
modifier = {
add = {
value = prowess
multiply = 0.5
}
}
}
save_scope_as = knight
}
}
# Accept the challenge.
option = {
name = fp1_yearly.0561.a
trigger = {
NOR = {
has_trait = strong
has_trait = physique_good
}
}
# Basic prowess challenge.
duel = {
skill = prowess
target = scope:knight
# You win: some minor prestige, more opinion.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0561.a.tt_success
send_interface_toast = {
title = fp1_yearly.0561.a.tt_success
left_icon = scope:knight
add_prestige = minor_prestige_gain
reverse_add_opinion = {
target = scope:knight
modifier = impressed_opinion
opinion = 30
}
}
}
# You lose: well, not a huge deal, and still good fun.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0561.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0561.a.tt_failure
left_icon = scope:knight
add_prestige = miniscule_prestige_loss
reverse_add_opinion = {
target = scope:knight
modifier = amused_opinion
opinion = 10
}
}
}
}
# Either way you step friendship.
progress_towards_friend_effect = {
CHARACTER = scope:knight
OPINION = 0
REASON = friend_arm_wrestled
}
stress_impact = {
gregarious = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
shy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.5
ai_honor = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = shy
}
}
}
# (Strong/Physique_Good) *cracks knuckles*
option = {
name = fp1_yearly.0561.b
trigger = {
OR = {
has_trait = strong
has_trait = physique_good
}
}
trait = strong
trait = physique_good_1
trait = physique_good_2
trait = physique_good_3
# Effortless victory grants prestige & opinion.
custom_tooltip = fp1_yearly.0561.b.tt
add_prestige = medium_prestige_gain
reverse_add_opinion = {
target = scope:knight
modifier = impressed_opinion
opinion = 30
}
stress_impact = {
gregarious = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
shy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.5
ai_honor = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = shy
}
}
}
# Attempt to cheat.
option = {
name = fp1_yearly.0561.c
# Modest intrigue challenge.
duel = {
skill = intrigue
target = scope:knight
# You win, making it look *dramatic*!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0561.c.tt_success
send_interface_toast = {
title = fp1_yearly.0561.c.tt_success
left_icon = scope:knight
# Gain prestige for your win!
add_prestige = medium_prestige_gain
# But your foe might know something...
reverse_add_opinion = {
target = scope:knight
modifier = suspicion_opinion
opinion = -5
}
}
}
# Your cheating is discovered...
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0561.c.tt_failure
send_interface_toast = {
title = fp1_yearly.0561.c.tt_failure
left_icon = scope:knight
# This is embarrassing.
add_prestige = minor_prestige_loss
# Welp, scope:knight is pissed.
reverse_add_opinion = {
target = scope:knight
modifier = weak_opinion
opinion = -40
}
progress_towards_rival_effect = {
REASON = rival_cheated_at_armwrestle
CHARACTER = scope:knight
OPINION = 0
}
}
}
}
stress_impact = {
deceitful = medium_stress_impact_loss
honest = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.5
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = deceitful
}
modifier = { # Weight down for stress.
add = -20
has_trait = honest
}
}
}
# Ignore scope:knight and continue eating.
option = {
name = fp1_yearly.0561.d
# Gain minor prestige for just not bothering.
add_prestige = miniscule_prestige_gain
# Hurt the knight's feelings a little.
reverse_add_opinion = {
target = scope:knight
modifier = hurt_opinion
opinion = -10
}
stress_impact = {
arrogant = minor_stress_impact_loss
gluttonous = minor_stress_impact_loss
shy = medium_stress_impact_loss
lazy = medium_stress_impact_loss
humble = minor_stress_impact_gain
gregarious = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = -0.5
ai_sociability = -0.75
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight up for stress.
add = 10
has_trait = gluttonous
}
modifier = { # Weight up for stress.
add = 20
has_trait = shy
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -10
has_trait = humble
}
modifier = { # Weight down for stress.
add = -20
has_trait = gregarious
}
}
}
}
##################################################
# Petty Vandalism
# by Ewan Cowhig Croft
# 0571 - 0580
##################################################
scripted_trigger fp1_0571_suitable_vandal_child_available_trigger = {
# Is available for events.
is_available_ai_child = yes
# Child is old enough to have travelled that far.
age >= 10
# Must not be a quiet child.
childhood_quiet_child_trigger = no
}
scripted_trigger fp1_0571_suitable_annoyed_courtier_trigger = {
# Is available for events.
is_available_ai_adult = yes
# Likely to be annoyed at the vandalism.
NOR = {
has_trait = calm
has_trait = patient
has_trait = shy
has_trait = craven
has_trait = arbitrary
has_trait = fickle
has_trait = lazy
has_trait = trusting
}
}
scripted_trigger fp1_0571_suitable_vandal_site_trigger = {
tier = tier_county
fp1_county_has_stele_trigger = yes
squared_distance = {
target = root.capital_county
value <= squared_distance_small
}
}
# A runestone in your lands has been damaged by one of your children.
fp1_yearly.0571 = {
type = character_event
title = fp1_yearly.0571.t
desc = fp1_yearly.0571.desc
theme = family
left_portrait = {
character = scope:courtier
animation = disapproval
}
right_portrait = {
character = scope:child
animation = shame
}
override_background = { reference = fp1_runestone }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0571 }
is_landed_or_landless_administrative = yes
# Filter to flavour-appropriate characters.
fp1_is_norse = yes
# Must have an appropriate runestone in your territory.
any_held_title = { fp1_0571_suitable_vandal_site_trigger = yes }
# A valid child.
any_child = { fp1_0571_suitable_vandal_child_available_trigger = yes }
# And a courtier who might not appreciate things.
any_courtier = { fp1_0571_suitable_annoyed_courtier_trigger = yes }
}
weight_multiplier = {
base = 1
# If you're setting a good example, kids are less likely to imitate.
modifier = {
add = 0.5
has_trait = just
}
# And the reverse.
modifier = {
add = -0.5
has_trait = arbitrary
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0571
days = 1825
}
# Select a runestone location.
random_held_title = {
limit = { fp1_0571_suitable_vandal_site_trigger = yes }
save_scope_as = vandal_site
}
# Grab a suitable child.
random_child = {
# Prefer rowdy or mean-spirited children.
limit = {
fp1_0541_valid_child_prankster_trigger = yes
OR = {
childhood_loud_child_trigger = yes
childhood_mean_child_trigger = yes
}
}
# Though otherwise any valid child is acceptable.
alternative_limit = { fp1_0571_suitable_vandal_child_available_trigger = yes }
save_scope_as = child
}
# And the courtier.
random_courtier = {
# Try to get someone who dislikes the child first.
limit = {
fp1_0571_suitable_annoyed_courtier_trigger = yes
opinion = {
target = scope:child
value <= neutral_opinion
}
}
# Otherwise, whoever is fine.
alternative_limit = { fp1_0571_suitable_annoyed_courtier_trigger = yes }
save_scope_as = courtier
}
# Quietly make the two potential rivals for later.
hidden_effect = {
if = {
limit = {
scope:child = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:courtier }
}
}
scope:child = { set_relation_potential_rival = scope:courtier }
}
}
}
# Look, you can't be defacing expensive monuments, 'kay?
option = {
name = fp1_yearly.0571.a
# Diplomacy challenge to persuade the child.
duel = {
skill = diplomacy
target = scope:child
# Child sees how they've gone wrong.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0571.tt_success
send_interface_toast = {
title = fp1_yearly.0571.tt_success
left_icon = scope:child
# If the child's personality can accept it, make them honourable.
scope:child = {
if = {
limit = {
number_of_personality_traits < personality_trait_standard
NOR = {
has_trait = arbitrary
has_trait = just
}
}
add_trait = just
}
}
# Otherwise, just give opinion.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = 30
}
}
}
# Child doesn't understand what the issue even is.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0571.tt_failure
send_interface_toast = {
title = fp1_yearly.0571.tt_failure
left_icon = scope:child
# If the child's personality can accept it, make them arbitrary.
scope:child = {
if = {
limit = {
number_of_personality_traits < personality_trait_standard
NOT = { has_trait = just }
}
add_trait = arbitrary
}
}
# Otherwise, just give opinion.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = -20
}
}
}
}
# Courtier is satisfied that something has been done.
reverse_add_opinion = {
target = scope:courtier
modifier = impressed_opinion
opinion = 30
}
# The runestone is destroyed.
scope:vandal_site = { fp1_remove_stele_effect = yes }
stress_impact = {
trusting = medium_stress_impact_loss
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_greed = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = trusting
}
modifier = { # Weight down for stress.
add = -20
has_trait = vengeful
}
}
}
# I'll be fining the cost of the runestone from your things.
option = {
name = fp1_yearly.0571.b
# Gain opinion with the courtier.
reverse_add_opinion = {
target = scope:courtier
modifier = pleased_opinion
opinion = 30
}
# The runestone is repaired.
custom_tooltip = fp1_yearly.0571.b.tt
# Lose opinion with the child, and fine them gold.
scope:child = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = -40
}
remove_short_term_gold = root.raise_stele_gold_cost
}
stress_impact = {
vengeful = minor_stress_impact_loss
greedy = medium_stress_impact_loss
forgiving = minor_stress_impact_gain
generous = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_vengefulness = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -10
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
}
}
# Look, you can't be defacing expensive monuments, 'kay?
option = {
name = fp1_yearly.0571.b.2
# Gain lots of opinion with your child.
reverse_add_opinion = {
target = scope:child
modifier = pleased_opinion
opinion = 70
}
# Lose some with your courtier.
reverse_add_opinion = {
target = scope:courtier
modifier = respect_opinion
opinion = -40
}
# The runestone is repaired.
custom_tooltip = fp1_yearly.0571.b.tt
remove_short_term_gold = root.raise_stele_gold_cost
# If your child is still growing, this may leave a mark.
scope:child = {
## Making them more arbitrary.
if = {
limit = {
# If they have room.
number_of_personality_traits < personality_trait_standard
# And don't already feel strongly either way.
NOR = {
has_trait = just
has_trait = arbitrary
}
}
add_trait = arbitrary
}
## And less attached to money.
if = {
limit = {
NOR = {
has_trait = profligate
has_trait = greedy
}
}
add_trait = profligate
}
}
stress_impact = {
forgiving = minor_stress_impact_loss
generous = minor_stress_impact_loss
lazy = medium_stress_impact_loss
arbitrary = medium_stress_impact_loss
vengeful = minor_stress_impact_gain
greedy = medium_stress_impact_gain
diligent = medium_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = -0.5
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { # Weight up for stress.
add = 10
has_trait = generous
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = just
}
}
}
# *Sigh* This isn't worth the bother.
option = {
name = fp1_yearly.0571.c
# Gain lots of opinion with your child.
reverse_add_opinion = {
target = scope:child
modifier = pleased_opinion
opinion = 50
}
# Lose some with your courtier.
reverse_add_opinion = {
target = scope:courtier
modifier = respect_opinion
opinion = -30
}
# Lose the runestone.
scope:vandal_site = { fp1_remove_stele_effect = yes }
stress_impact = {
forgiving = minor_stress_impact_loss
lazy = medium_stress_impact_loss
arbitrary = medium_stress_impact_loss
vengeful = minor_stress_impact_gain
diligent = medium_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = -0.5
ai_honor = -0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = just
}
}
}
}
##################################################
# When I Grow Up
# by Ewan Cowhig Croft
# 0581 - 0590
##################################################
scripted_trigger fp1_0581_wrong_gender_child_wishes_to_fight_trigger = {
NOT = { has_character_flag = fp1_dreams_of_shieldpersondom }
trigger_if = { # Has the Royal Court and thus can modify pillars
limit = { has_dlc_feature = diverge_culture }
# For ease, they must share your faith or your culture.
OR = {
culture = root.culture
faith = root.faith
}
}
trigger_else = {
# For ease, they must share your faith.
faith = root.faith
}
# Have an appropriate matching personality.
OR = {
childhood_loud_child_trigger = yes
childhood_mean_child_trigger = yes
}
# Be the wrong gender to fight.
NOT = { can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } }
# Aaaand be available to play.
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
}
scripted_trigger fp1_0581_valid_courtier_to_bully_trigger = {
# No positive relationship with root.
has_any_good_relationship_with_root_trigger = no
# And they have a negative opinion of you; player only action, so we only care about making sure the player might dislike this character.
opinion = {
target = root
value <= medium_negative_opinion
}
}
# Your wrong-gender child wants to fight and raid in a few years.
fp1_yearly.0581 = {
type = character_event
title = fp1_yearly.0581.t
desc = {
desc = fp1_yearly.0581.desc.intro
# Currently causes too much risk of scrolling copy.
triggered_desc = {
trigger = { always = no }
desc = fp1_yearly.0581.desc.victim
}
desc = fp1_yearly.0581.desc.outro
}
theme = martial
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:child
animation = admiration
}
lower_right_portrait = scope:victim
override_background = { reference = corridor_day }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0581 }
# Filter to shieldmaiden-having culture.
culture = { has_cultural_parameter = has_access_to_shieldmaidens }
trigger_if = { # Has the Royal Court and thus can modify pillars
limit = { has_dlc_feature = diverge_culture }
culture = { NOT = { has_cultural_parameter = martial_custom_equal_combatant } }
}
trigger_else = {
# Can't be following an equal faith.
faith = { NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } }
}
# Any child of yours might want to be a shieldperson when they grow up.
any_child = { fp1_0581_wrong_gender_child_wishes_to_fight_trigger = yes }
}
weight_multiplier = {
base = 1
# Shieldmaidens are something of an inspiration, and thus
modifier = {
add = 1
has_trait = shieldmaiden
}
# If you're of low prowess, then there's less to aspire to.
modifier = {
add = -0.5
prowess <= medium_skill_rating
}
# But if you're of high prowess, then there's plenty.
modifier = {
add = 0.5
prowess >= very_high_skill_rating
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0581
days = 1825
}
# Nab an appropriate child.
random_child = {
limit = { fp1_0581_wrong_gender_child_wishes_to_fight_trigger = yes }
# Weight up the most promising fighter amongst your valid children.
weight = {
base = 0
modifier = {
add = {
value = prowess
multiply = 100
}
}
}
save_scope_as = child
}
# See if there's someone at court you can set the child to bully.
if = {
limit = {
# Keep this player-specific for ease of presentation.
is_ai = no
any_courtier_or_guest = { fp1_0581_valid_courtier_to_bully_trigger = yes }
}
random_courtier_or_guest = {
# Try to pick rivals et al first.
limit = {
has_any_bad_relationship_with_root_trigger = yes
fp1_0581_valid_courtier_to_bully_trigger = yes
}
# Otherwise just any random dick will do.
alternative_limit = { fp1_0581_valid_courtier_to_bully_trigger = yes }
save_scope_as = victim
}
}
}
# My child, you shall make the world itself *tremble*.
option = {
name = fp1_yearly.0581.a
trigger = { has_trait = shieldmaiden }
trait = shieldmaiden
# Scope:child is significantly more likely to try to become a shieldmaiden.
custom_tooltip = fp1_yearly.0581.a.tt
scope:child = { add_character_flag = fp1_dreams_of_shieldpersondom }
# Scope:child gains prowess.
scope:child = { add_prowess_skill = massive_skill_bonus }
# Scope:child gains opinion.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 60
}
stress_impact = {
shieldmaiden = major_stress_impact_loss
brave = major_stress_impact_loss
ambitious = major_stress_impact_loss
compassionate = major_stress_impact_gain
humble = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.75
ai_zeal = 0.5
ai_energy = 0.25
}
modifier = { # Weight down for stress.
add = -30
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -30
has_trait = humble
}
# Raiders & adventurers want their prodigy to follow in their footsteps.
modifier = {
add = 20
has_trait = viking
}
modifier = {
add = 20
has_trait = adventurer
}
modifier = {
add = 20
has_trait = brave
}
modifier = {
add = 20
has_trait = shieldmaiden
}
modifier = {
add = 20
has_trait = ambitious
}
}
}
# A noble goal! Have at thee, rogue!
option = {
name = fp1_yearly.0581.b
trigger = {
NOT = { has_trait = shieldmaiden }
}
# Scope:child is significantly more likely to try to become a shieldmaiden.
custom_tooltip = fp1_yearly.0581.b.tt
scope:child = { add_character_flag = fp1_dreams_of_shieldpersondom }
# Scope:child gains prowess.
scope:child = { add_prowess_skill = medium_skill_bonus }
# Scope:child gains opinion.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 30
}
stress_impact = {
compassionate = minor_stress_impact_loss
gregarious = minor_stress_impact_loss
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_honor = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = compassionate
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
# Raiders & adventurers want their prodigy to follow in their footsteps.
modifier = {
add = 20
has_trait = viking
}
modifier = {
add = 20
has_trait = adventurer
}
modifier = {
add = 20
has_trait = brave
}
modifier = {
add = 20
has_trait = shieldmaiden
}
modifier = {
add = 20
has_trait = ambitious
}
}
}
# Perhaps. You should practice by ambushing scope:victim.
option = {
name = fp1_yearly.0581.c
trigger = { exists = scope:victim }
# Scope:child gains prowess.
scope:child = { add_prowess_skill = medium_skill_bonus }
# Scope:victim gains wounded.
scope:victim = {
increase_wounds_no_death_effect = { REASON = duel }
}
# Scope:victim loses opinion of you.
reverse_add_opinion = {
target = scope:victim
modifier = angry_opinion
opinion = -20
}
# Scope:child adds scope:victim as a potential rival.
hidden_effect = {
scope:child = {
progress_towards_rival_effect = {
REASON = rival_hit_with_stick
CHARACTER = scope:victim
OPINION = -30
}
}
}
stress_impact = {
vengeful = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
forgiving = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_vengefulness = 0.5
ai_boldness = 0.25
ai_compassion = -0.25
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -10
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# Stop troubling me with foolish dreams.
option = {
name = fp1_yearly.0581.d
# Gain a minor beneficial modifier for having your child avoid you.
add_character_modifier = {
modifier = fp1_ignoring_annoyances_modifier
years = 10
}
# Scope:child loses opinion of you.
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -30
}
stress_impact = {
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
impatient = minor_stress_impact_loss
compassionate = minor_stress_impact_gain
patient = minor_stress_impact_gain
shieldmaiden = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.25
ai_compassion = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight up for stress.
add = 10
has_trait = impatient
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -10
has_trait = patient
}
modifier = { # Weight down for stress.
add = -50
has_trait = shieldmaiden
}
}
}
# Hah! We shall see, little one.
option = {
name = fp1_yearly.0581.e
reverse_add_opinion = {
target = scope:child
modifier = pleased_opinion
opinion = 15
}
# Fairly mild option, so doesn't incur stress.
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = -0.25
ai_boldness = -0.5
}
}
}
}
##################################################
# Raised Voices at the Thing
# by Ewan Cowhig Croft
# 0591 - 0600
##################################################
scripted_trigger fp1_0591_secondary_county_trigger = {
holder = root
culture = { has_innovation = innovation_all_things }
}
scripted_trigger fp1_0591_fighting_counties_at_thing_trigger = {
tier = tier_county
culture = { has_innovation = innovation_all_things }
any_neighboring_county = { fp1_0591_secondary_county_trigger = yes }
}
# One of your counties is engaged in an argument with another.
fp1_yearly.0591 = {
type = character_event
title = fp1_yearly.0591.t
desc = {
desc = fp1_yearly.0591.desc
random_valid = {
desc = fp1_yearly.0591.desc.border_dispute #
desc = fp1_yearly.0591.desc.stolen_flocks #
desc = fp1_yearly.0591.desc.kidnapped_child #
desc = fp1_yearly.0591.desc.drunken_arson #
desc = fp1_yearly.0591.desc.lost_dog #
desc = fp1_yearly.0591.desc.disrupted_wedding
desc = fp1_yearly.0591.desc.suspicious_will #
desc = fp1_yearly.0591.desc.sheltered_criminal #
desc = fp1_yearly.0591.desc.bad_luck #
desc = fp1_yearly.0591.desc.fly_tipping #
}
}
theme = realm
left_portrait = {
character = root
animation = disgust
}
override_background = { reference = fp1_runestone_circle }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0591 }
is_landed_or_landless_administrative = yes
# Filter to flavour-appropriate characters.
culture = { has_innovation = innovation_all_things }
# Ensure you have at least two counties that can fight with each other.
any_held_title = { fp1_0591_fighting_counties_at_thing_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight up a little for mainland Scandinavia.
modifier = {
add = 0.5
fp1_is_in_scandinavia = yes
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0591
days = 1825
}
# Grab the counties.
random_held_title = {
limit = { fp1_0591_fighting_counties_at_thing_trigger = yes }
save_scope_as = county_a
random_neighboring_county = {
limit = { fp1_0591_secondary_county_trigger = yes }
save_scope_as = county_b
}
}
# Set a dummy gender for loc.
random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender }
}
# Side with scope:county_a.
option = {
name = fp1_yearly.0591.a
# Levy bonus county modifier.
scope:county_a = {
add_county_modifier = {
modifier = fp1_yearly_0591_levy_modifier
years = 10
}
}
# And spurn the other county.
scope:county_b = {
add_county_modifier = {
modifier = fp1_yearly_0591_spurned_modifier
years = 10
}
}
stress_impact = {
lazy = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# Side with scope:county_b.
option = {
name = fp1_yearly.0591.b
# Building cost county modifier.
scope:county_b = {
add_county_modifier = {
modifier = fp1_yearly_0591_building_modifier
years = 10
}
}
# And spurn the other county.
scope:county_a = {
add_county_modifier = {
modifier = fp1_yearly_0591_spurned_modifier
years = 10
}
}
stress_impact = {
lazy = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_honor = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# Deliberately wind them both up.
option = {
name = fp1_yearly.0591.c
# Popular opinion bonus modifiers in both (as they're too busy fighting each other).
scope:county_a = {
add_county_modifier = {
modifier = fp1_yearly_0591_otherwise_occupied_modifier
years = 10
}
}
scope:county_b = {
add_county_modifier = {
modifier = fp1_yearly_0591_otherwise_occupied_modifier
years = 10
}
}
stress_impact = {
deceitful = minor_stress_impact_loss
arbitrary = medium_stress_impact_loss
honest = minor_stress_impact_gain
just = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_vengefulness = 0.25
ai_honor = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = deceitful
}
modifier = { # Weight up for stress.
add = 20
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -10
has_trait = honest
}
modifier = { # Weight down for stress.
add = -20
has_trait = just
}
}
}
# Let them fight it out.
option = {
name = fp1_yearly.0591.d
# Stress loss: not your problem, honestly.
## Covered in stress impact.
stress_impact = {
base = major_stress_loss
lazy = medium_stress_impact_loss
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = -0.25
ai_energy = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
}
}
}
##################################################
# The Hardest Part of Ruling
# by Ewan Cowhig Croft
# 0601 - 0610
##################################################
scripted_trigger fp1_0601_valid_county_for_things_trigger = {
tier = tier_county
culture = { has_innovation = innovation_all_things }
}
# An incredibly boring local assembly tries your patience.
fp1_yearly.0601 = {
type = character_event
title = fp1_yearly.0601.t
desc = fp1_yearly.0601.desc
theme = realm
left_portrait = {
character = root
animation = boredom
}
override_background = { reference = fp1_runestone_circle }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0601 }
is_landed = yes
# Filter to flavour-appropriate characters.
culture = { has_innovation = innovation_all_things }
any_held_title = { fp1_0601_valid_county_for_things_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight up a little for mainland Scandinavia.
modifier = {
add = 0.5
fp1_is_in_scandinavia = yes
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0601
days = 1825
}
# Designate a suitable random county.
random_held_title = {
limit = { fp1_0601_valid_county_for_things_trigger = yes }
save_scope_as = county
}
# Set a dummy gender for loc.
random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender }
}
# Fight to stay awake.
option = {
name = fp1_yearly.0601.a
# Diplomacy duel to see how well you disguise it.
duel = {
skill = diplomacy
value = decent_skill_rating
# You power through and remain composed.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0601.a.tt_success
send_interface_toast = {
title = fp1_yearly.0601.a.tt_success
left_icon = root
add_prestige = medium_prestige_gain
}
}
# You slump right out of your seat.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0601.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0601.a.tt_failure
left_icon = root
add_prestige = medium_prestige_loss
}
}
}
stress_impact = {
just = minor_stress_impact_loss
diligent = medium_stress_impact_loss
arbitrary = minor_stress_impact_gain
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 1
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = just
}
modifier = { # Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = arbitrary
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
# (Diplomacy) Daydream of more interesting diplomatic problems.
option = {
name = fp1_yearly.0601.b
trigger = { has_trait = education_diplomacy }
trait = education_diplomacy_1
trait = education_diplomacy_2
trait = education_diplomacy_3
trait = education_diplomacy_4
trait = education_diplomacy_5
# Gain a minor modifier boosting diplomacy.
add_character_modifier = {
modifier = fp1_daydreaming_about_diplomacy_modifier
years = 5
}
stress_impact = {
lazy = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# (Martial) Daydream up new strategies.
option = {
name = fp1_yearly.0601.c
trigger = { has_trait = education_martial }
trait = education_martial_1
trait = education_martial_2
trait = education_martial_3
trait = education_martial_4
trait = education_martial_5
# Gain a minor modifier boosting martial.
add_character_modifier = {
modifier = fp1_daydreaming_about_martial_modifier
years = 5
}
stress_impact = {
lazy = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# (Stewardship) Daydream up new taxes to charge them.
option = {
name = fp1_yearly.0601.d
trigger = { has_trait = education_stewardship }
trait = education_stewardship_1
trait = education_stewardship_2
trait = education_stewardship_3
trait = education_stewardship_4
trait = education_stewardship_5
# Gain a minor modifier boosting stewardship.
add_character_modifier = {
modifier = fp1_daydreaming_about_stewardship_modifier
years = 5
}
stress_impact = {
lazy = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# (Intrigue) Daydream up new ways to keep them under control.
option = {
name = fp1_yearly.0601.e
trigger = { has_trait = education_intrigue }
trait = education_intrigue_1
trait = education_intrigue_2
trait = education_intrigue_3
trait = education_intrigue_4
trait = education_intrigue_5
# Gain a minor modifier boosting intrigue.
add_character_modifier = {
modifier = fp1_daydreaming_about_intrigue_modifier
years = 5
}
stress_impact = {
lazy = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# (Learning) Daydream of your favourite book.
option = {
name = fp1_yearly.0601.f
trigger = { has_trait = education_learning }
trait = education_learning_1
trait = education_learning_2
trait = education_learning_3
trait = education_learning_4
trait = education_learning_5
# Gain a minor modifier boosting learning.
add_character_modifier = {
modifier = fp1_daydreaming_about_learning_modifier
years = 5
}
stress_impact = {
lazy = minor_stress_impact_loss
arrogant = minor_stress_impact_loss
diligent = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
}
}
# Give in and doze off.
option = {
name = fp1_yearly.0601.g
# Lose stress since... I mean, who cares?
## Stress loss handled in stress_impact.
# Buuuuut also lose prestige.
add_prestige = minor_prestige_loss
# Low-random chance for players to occasionally become known as "the Snorer" here.
hidden_effect = {
if = {
limit = {
is_ai = no
has_any_nickname = no
}
random = {
chance = 1
send_interface_toast = {
title = fp1_yearly.0601.g.nickname
left_icon = root
give_nickname = nick_the_snorer
}
}
}
}
stress_impact = {
base = major_stress_loss
lazy = medium_stress_impact_loss
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = -0.25
ai_sociability = -0.5
ai_energy = -1
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
}
}
}
##################################################
# Leading by Example
# by Ewan Cowhig Croft
# 0611 - 0620
##################################################
scripted_trigger fp1_0611_aggressive_child_candidate_trigger = {
# Age gate so that they're never the same as scope:child_b.
age >= 10
# Must be around.
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# And have the right personality for this.
OR = {
childhood_mean_child_trigger = yes
childhood_loud_child_trigger = yes
}
}
scripted_trigger fp1_0611_victim_child_candidate_trigger = {
# Age gate so that they're never the same as scope:child_a.
age < 10
# Must be around.
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# We're not fussed about personality here, anything is good.
}
# One of your children wounds another whilst imitating you.
fp1_yearly.0611 = {
type = character_event
title = fp1_yearly.0611.t
desc = fp1_yearly.0611.desc
theme = education
left_portrait = {
character = scope:child_a
animation = shame
}
right_portrait = {
character = scope:child_b
animation = anger
}
override_background = { reference = bedchamber }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0611 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse_tribal = yes
# You must qualify for imitation in some way.
OR = {
has_trait = viking
has_trait = berserker
has_trait = adventurer
has_character_flag = has_recently_performed_raid
}
# Gotta have one child who qualifies as the aggressor.
any_child = { fp1_0611_aggressive_child_candidate_trigger = yes }
# And one child who qualifies as the bully.
any_child = { fp1_0611_victim_child_candidate_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight up a little for each qualifying trait.
modifier = {
add = 0.25
has_trait = viking
}
modifier = {
add = 0.25
has_trait = berserker
}
modifier = {
add = 0.25
has_trait = adventurer
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0611
days = 1825
}
# Grab the first child.
random_child = {
limit = { fp1_0611_aggressive_child_candidate_trigger = yes }
save_scope_as = child_a
}
# And the second.
random_child = {
limit = { fp1_0611_victim_child_candidate_trigger = yes }
save_scope_as = child_b
}
# Wound scope:child_b.
scope:child_b = {
increase_wounds_no_death_effect = { REASON = duel }
}
}
# Explain to scope:child_a that they need to wait till they're older.
option = {
name = fp1_yearly.0611.a
# Diplomacy duel to see if you manage the feelings involved.
duel = {
skill = diplomacy
value = high_skill_rating
# You successfully explain that fighting is not playing.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0611.a.tt_success
send_interface_toast = {
title = fp1_yearly.0611.a.tt_success
left_icon = scope:child_a
right_icon = scope:child_b
scope:child_b = {
progress_towards_friend_effect = {
CHARACTER = scope:child_a
OPINION = 50
REASON = friend_child_apologize
}
}
}
}
# You only engender feelings of bitterness between the two.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0611.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0611.a.tt_failure
left_icon = scope:child_a
right_icon = scope:child_b
scope:child_b = {
progress_towards_rival_effect = {
REASON = rival_hit_with_sharp_stick
CHARACTER = scope:child_a
OPINION = -50
}
}
}
}
}
stress_impact = {
honest = minor_stress_impact_loss
forgiving = minor_stress_impact_loss
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_honor = 0.25
ai_vengefulness = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = honest
}
modifier = { # Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = vengeful
}
}
}
# Laud scope:child_a for their goals.
option = {
name = fp1_yearly.0611.b
# Scope:child_a is very happy & gains some prowess.
scope:child_a = { add_prowess_skill = medium_skill_bonus }
reverse_add_opinion = {
target = scope:child_a
modifier = love_opinion
opinion = 40
}
# Scope:child_b is very unhappy and grows close to a rivalry with scope:child_a.
scope:child_b = {
progress_towards_rival_effect = {
REASON = rival_hit_with_sharp_stick
CHARACTER = scope:child_a
OPINION = -20
}
}
reverse_add_opinion = {
target = scope:child_b
modifier = trust_opinion
opinion = -20
}
stress_impact = {
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -0.5
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# Teach scope:child_b how to deal with bullies.
option = {
name = fp1_yearly.0611.c
# Scope:child_b is very happy & gains some prowess.
scope:child_b = { add_prowess_skill = medium_skill_bonus }
reverse_add_opinion = {
target = scope:child_b
modifier = love_opinion
opinion = 40
}
# Scope:child_a is unhappy.
reverse_add_opinion = {
target = scope:child_a
modifier = trust_opinion
opinion = -20
}
stress_impact = {
fickle = minor_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_honor = 0.5
ai_vengefulness = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = fickle
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# Tell them to take it to their nurse.
option = {
name = fp1_yearly.0611.d
# Lose stress.
## Stress loss handled in stress_impact.
# But also opinion with both children.
reverse_add_opinion = {
target = scope:child_a
modifier = trust_opinion
opinion = -20
}
reverse_add_opinion = {
target = scope:child_b
modifier = hurt_opinion
opinion = -20
}
# And we set up a hidden rivalry anyway.
hidden_effect = {
scope:child_b = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:child_a }
}
set_relation_potential_rival = scope:child_a
}
}
}
stress_impact = {
base = medium_stress_loss
lazy = minor_stress_impact_loss
callous = minor_stress_impact_loss
diligent = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -0.5
ai_energy = -0.5
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight down for stress.
add = -10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
}
##################################################
# A Shiny New Toy
# by Ewan Cowhig Croft
# 0621 - 0630
##################################################
scripted_trigger fp1_0621_valid_child_wants_loot_trigger = {
# Must be around.
child_suitable_to_play_with_character_one_sided = { CHARACTER = scope:raider }
# Quiet children aren't going to come down to the beach.
childhood_quiet_child_trigger = no
}
# Your child asks you which piece of raid loot is theirs.
fp1_yearly.0621 = {
type = character_event
title = fp1_yearly.0621.t
desc = fp1_yearly.0621.desc
theme = war
left_portrait = {
character = scope:raider
animation = personality_rational
}
right_portrait = {
character = scope:child
animation = admiration
}
override_background = { reference = fp1_beached_longships }
# Triggers handled in the setup event.
# Weight multipliers handled in the setup event.
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0621
days = 1825
}
# Grab a suitable child.
random_child = {
limit = { fp1_0621_valid_child_wants_loot_trigger = yes }
# Weight up greedier children.
weight = {
base = 0
modifier = { add = ai_greed }
}
save_scope_as = child
}
# Save a dummy gender for raid victims; reflects your child's biases rather than your actual experiences.
random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender }
}
# Of course you can take the big trophy.
option = {
name = fp1_yearly.0621.a
# Scope:child gains lots of opinion of you.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 50
}
# But you lose some gold.
remove_short_term_gold = minor_gold_value
stress_impact = {
generous = medium_stress_impact_loss
greedy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_greed = -0.5
}
modifier = { # Weight down for stress.
add = -20
has_trait = greedy
}
modifier = { # Weight up for stress.
add = 20
has_trait = generous
}
}
}
# Nothing now: maybe when you're older, you can earn your own.
option = {
name = fp1_yearly.0621.b
# Scope:child gains some opinion of you.
reverse_add_opinion = {
target = scope:child
modifier = respect_opinion
opinion = 10
}
# A fairly mild response, so no stress to be garnered.
ai_chance = {
base = 100
ai_value_modifier = {
ai_honor = 0.5
ai_boldness = 0.5
}
}
}
# Away with you! This is for the adults.
option = {
name = fp1_yearly.0621.c
# Gain some prestige.
add_prestige = minor_prestige_gain
# Scope:child is upset.
reverse_add_opinion = {
target = scope:child
modifier = hurt_opinion
opinion = -20
}
stress_impact = {
impatient = minor_stress_impact_loss
greedy = medium_stress_impact_loss
patient = minor_stress_impact_gain
generous = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_compassion = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = impatient
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -10
has_trait = patient
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
}
}
}
# Setup event to sort triggers, scopes, etc.
fp1_yearly.0622 = {
hidden = yes
scope = army
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Root must have been leading the army personally.
army_commander = scope:raider
# And some actual loot must have been recovered.
raid_loot >= 10
# In which case we take a look at scope:raider & see how they stack up.
scope:raider = {
# Standard checks.
is_available_adult_or_is_commanding = yes
NOT = { has_character_flag = had_event_fp1_yearly_0621 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_coastal_norse_tribal = yes
# And must have a valid child laying about.
any_child = { fp1_0621_valid_child_wants_loot_trigger = yes}
}
}
weight_multiplier = {
base = 1
# Weight up a little for dedicated raiders.
modifier = {
add = 1
scope:raider = { has_trait = viking }
}
# Or if you've brought home a truly excessive amount of loot.
modifier = {
add = 1
raid_loot >= 200
}
}
immediate = {
save_scope_as = raiding_army
scope:raider = { trigger_event = fp1_yearly.0621 }
}
}
##################################################
# A Cynical Bent
# by Ewan Cowhig Croft
# 0631 - 0640
##################################################
scripted_trigger fp1_0631_suitable_cynical_knight_trigger = {
# Must be in the correct army.
knight_army ?= $ARMY$
# Has to share scope:raider's faith.
faith = scope:raider.faith
# Can't be zealous.
NOT = { has_trait = zealous }
# And must have at least decent learning.
learning >= decent_skill_rating
}
# You notice a courtier refuses to sacrifice after a raid.
fp1_yearly.0631 = {
type = character_event
title = fp1_yearly.0631.t
desc = fp1_yearly.0631.desc
theme = faith
left_portrait = {
character = scope:cynic
animation = personality_cynical
}
override_background = { reference = fp1_beached_longships }
# Triggers handled in the setup event.
# Weight multipliers handled in the setup event.
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0631
days = 1825
}
# Grab an appropriate knight.
random_knight = {
limit = {
fp1_0631_suitable_cynical_knight_trigger = { ARMY = scope:raiding_army }
}
# Weight up cynical knights.
weight = {
base = 0
modifier = {
add = {
value = ai_zeal
multiply = -1
}
}
}
save_scope_as = cynic
}
}
# Lecture them for their impiety.
option = {
name = fp1_yearly.0631.a
# Learning duel over piety.
duel = {
skill = learning
target = scope:cynic
# You succeed in shaming scope:knight.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0631.a.tt_success
send_interface_toast = {
title = fp1_yearly.0631.a.tt_success
left_icon = scope:cynic
add_piety = medium_piety_gain
reverse_add_opinion = {
target = scope:cynic
modifier = annoyed_opinion
opinion = -20
}
}
}
# Scope:knight makes you look like a fool.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0631.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0631.a.tt_failure
left_icon = scope:cynic
add_piety = minor_piety_loss
reverse_add_opinion = {
target = scope:cynic
modifier = respect_opinion
opinion = -30
}
}
}
}
stress_impact = {
gregarious = minor_stress_impact_loss
generous = minor_stress_impact_loss
vengeful = minor_stress_impact_loss
zealous = major_stress_impact_loss
greedy = major_stress_impact_loss
shy = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
# Event cannot be triggered if you have cynical.
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_greed = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = generous
}
modifier = { # Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight up for stress.
add = 30
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = shy
}
modifier = { # Weight down for stress.
add = -20
has_trait = forgiving
}
}
}
# Quietly keep your own tribute too.
option = {
name = fp1_yearly.0631.b
# Gain a little gold.
add_gold = tiny_gold_value
# Lose a little piety.
add_piety = miniscule_piety_loss
stress_impact = {
greedy = medium_stress_impact_loss
generous = medium_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_zeal = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
modifier = { # Weight down for stress.
add = -30
has_trait = zealous
}
}
}
# Shrug and move on.
option = {
name = fp1_yearly.0631.c
# Gain opinion with scope:knight.
reverse_add_opinion = {
target = scope:cynic
modifier = grateful_opinion
opinion = 20
}
stress_impact = {
forgiving = medium_stress_impact_loss
vengeful = medium_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = -0.25
ai_greed = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -20
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -30
has_trait = zealous
}
}
}
}
# Setup event to sort triggers, scopes, etc.
fp1_yearly.0632 = {
hidden = yes
scope = army
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Root must have been leading the army personally.
army_commander = scope:raider
# And some actual loot must have been recovered.
raid_loot >= 10
# In which case we take a look at scope:raider & see how they stack up.
scope:raider = {
# Standard checks.
is_available_adult_or_is_commanding = yes
NOT = { has_character_flag = had_event_fp1_yearly_0631 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_coastal_norse_tribal = yes
# And there's an appropriate knightly target.
any_knight = {
fp1_0631_suitable_cynical_knight_trigger = { ARMY = root }
}
# And remove any dedicated cynics.
NOT = { has_trait = cynical }
}
}
weight_multiplier = {
base = 1
# Weight up a little for the zealous, who are more likely to notice.
modifier = {
add = 1
scope:raider = { has_trait = zealous }
}
}
immediate = {
save_scope_as = raiding_army
scope:raider = { trigger_event = fp1_yearly.0631 }
}
}
##################################################
# Worthy of the Ocean
# by Ewan Cowhig Croft
# 0641 - 0650
##################################################
scripted_trigger fp1_0641_raider_with_longships_trigger = {
can_raid_trigger = yes
culture = { has_innovation = innovation_longboats }
any_sub_realm_county = { is_coastal_county = yes }
}
scripted_trigger fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = {
# Doesn't have a friendly relationship with root.
has_friendly_relationship_with_root_trigger = no
# Has stealable longboats.
fp1_0641_raider_with_longships_trigger = yes
}
# Your longships seem to be in poor nick.
fp1_yearly.0641 = {
type = character_event
title = fp1_yearly.0641.t
desc = fp1_yearly.0641.desc
theme = intrigue
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:neighbour
animation = dismissal
}
override_background = { reference = fp1_beached_longships }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0641 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_0641_raider_with_longships_trigger = yes
}
weight_multiplier = {
base = 1
# Weight down a little if you're a raider or diligent, used to keeping your longships in tip-top condition.
modifier = {
add = -0.5
has_trait = viking
}
modifier = {
add = -0.5
has_trait = diligent
}
# And up a little for adventurers and the lazy, who wear their ships hard & can't be arsed respectively.
modifier = {
add = 0.5
has_trait = adventurer
}
modifier = {
add = 0.5
has_trait = lazy
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0641
days = 1825
}
# Try to grab a suitable neighbour.
if = {
limit = {
any_neighboring_and_across_water_realm_same_rank_owner = { fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes }
}
random_neighboring_and_across_water_realm_same_rank_owner = {
# Prefer rivals first.
limit = {
any_neighboring_and_across_water_realm_same_rank_owner = {
any_relation = {
type = rival
this = root
}
fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes
}
}
# Otherwise, just whoever.
alternative_limit = {
any_neighboring_and_across_water_realm_same_rank_owner = { fp1_0641_neighbouring_ruler_with_stealable_ships_trigger = yes }
}
save_scope_as = neighbour
}
}
}
# Pay to fix them.
option = {
name = fp1_yearly.0641.a
trigger = {
can_make_expensive_purchase_trigger = { PRICE = minor_gold_value }
}
# The boat are repaired without issue.
custom_tooltip = fp1_yearly.0641.a.tt
# Lose a little gold.
remove_treasury_or_gold = minor_treasury_or_gold_value
stress_impact = {
generous = minor_stress_impact_loss
honest = minor_stress_impact_loss
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_greed = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = generous
}
modifier = { # Weight up for stress.
add = 10
has_trait = honest
}
modifier = { # Weight down for stress.
add = -10
has_trait = greedy
}
}
}
# Steal some from a neighbouring ruler.
option = {
name = fp1_yearly.0641.b
trigger = { exists = scope:neighbour }
# Intrigue duel to nab the boats in the night.
duel = {
skill = intrigue
target = scope:neighbour
# You heist the longships gleefully.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0641.b.tt_success
send_interface_toast = {
title = fp1_yearly.0641.b.tt_success
left_icon = scope:neighbour
add_character_modifier = {
modifier = fp1_excellent_longships_modifier
years = 10
}
reverse_add_opinion = {
target = scope:neighbour
modifier = angry_opinion
opinion = -50
}
}
}
# You're caught and have to leg it.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0641.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0641.b.tt_failure
left_icon = scope:neighbour
add_character_modifier = {
modifier = fp1_rotting_longships_modifier
years = 10
}
reverse_add_opinion = {
target = scope:neighbour
modifier = annoyed_opinion
opinion = -20
}
}
}
}
# Try to earmark scope:neighbour as a potential rival.
hidden_effect = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:neighbour }
}
set_relation_potential_rival = scope:neighbour
}
}
stress_impact = {
arbitrary = minor_stress_impact_loss
greedy = medium_stress_impact_loss
deceitful = medium_stress_impact_loss
just = minor_stress_impact_gain
generous = medium_stress_impact_gain
honest = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_rationality = 0.25
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight up for stress.
add = 20
has_trait = deceitful
}
modifier = { # Weight down for stress.
add = -10
has_trait = just
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
modifier = { # Weight down for stress.
add = -20
has_trait = honest
}
}
}
# Commission new vessels from a fancy shipwright.
option = {
name = fp1_yearly.0641.c
trigger = {
can_make_expensive_purchase_trigger = { PRICE = medium_gold_value }
}
# Gain a modifier boosting naval speed & reducing embark cost.
add_character_modifier = {
modifier = fp1_excellent_longships_modifier
years = 10
}
# Lose a bit more gold.
remove_treasury_or_gold = medium_treasury_or_gold_value
stress_impact = {
diligent = minor_stress_impact_loss
generous = medium_stress_impact_loss
lazy = minor_stress_impact_gain
greedy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.5
ai_greed = -1
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight up for stress.
add = 20
has_trait = generous
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = greedy
}
}
}
# Bah, let them rot. What's the harm?
option = {
name = fp1_yearly.0641.d
# Gain a modifier reducing naval speed & increasing embark cost.
add_character_modifier = {
modifier = fp1_rotting_longships_modifier
years = 10
}
# Someone else's problem, right?
## Stress loss handled in stress impact.
stress_impact = {
base = major_stress_loss
lazy = medium_stress_impact_loss
greedy = medium_stress_impact_loss
diligent = medium_stress_impact_gain
generous = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_greed = -0.5
ai_energy = -0.75
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
}
}
}
##################################################
# Leviathan
# by Ewan Cowhig Croft
# 0651 - 0660
##################################################
# You're out sailing when you spot a whale.
fp1_yearly.0651 = {
type = character_event
title = fp1_yearly.0651.t
desc = fp1_yearly.0651.desc
theme = hunt_activity
left_portrait = {
character = root
animation = shock
}
override_background = { reference = fp1_ocean_norse }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0651 }
is_playable_character = yes
is_landed = yes
# Must have a coastal capital.
capital_county = { is_coastal_county = yes }
}
weight_multiplier = {
base = 1
# Weight up for the Norse a bit.
modifier = {
add = 1
fp1_is_norse = yes
}
# Raiders spend more time at sea. Probably. Vikings do at least.
modifier = {
add = 1
has_trait = viking
}
# Adventurers spend more time at sea. Also probably.
modifier = {
add = 1
has_trait = adventurer
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0651
years = 50
}
}
# Static gold is used rather than dynamic throughout this event. This is to account for whale value not adjusting with your scale (even if it probably should with region): a gold mine for a poor tribal is a month's tax for a highly developed king.
# Get the harpoons!
option = {
name = fp1_yearly.0651.a
# Prowess challenge to slaughter the whale.
duel = {
skill = prowess
value = decent_skill_rating
# You haul the whale to shore and butcher it.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0651.a.tt_success
send_interface_toast = {
title = fp1_yearly.0651.a.tt_success
left_icon = root
# Per the comment below the immediate block, the static gold is deliberate.
add_gold = 100
}
}
# The beast escapes you.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0651.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0651.a.tt_failure
left_icon = root
add_prestige = minor_prestige_loss
}
}
}
stress_impact = {
vengeful = miniscule_stress_impact_loss # From Hell's Heart I stab at thee, etc.
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.5
ai_compassion = -0.25
}
modifier = { # Weight up for stress.
add = 5
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# Just bring me the carcass.
option = {
name = fp1_yearly.0651.b
# Gain some minor gold.
## Per the comment below the immediate block, the static gold is deliberate.
add_gold = 50
stress_impact = {
greedy = minor_stress_impact_loss
generous = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = -0.25
ai_energy = -0.25
ai_compassion = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -10
has_trait = generous
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# (Hunter) A *grand* quarry!
option = {
name = fp1_yearly.0651.c
trigger = { has_trait = lifestyle_hunter }
trait = lifestyle_hunter
# You face a *true* leviathan.
custom_tooltip = fp1_yearly.0651.c.tt
# More difficult prowess challenge for greater rewards.
duel = {
skill = prowess
value = very_high_skill_rating
# You haul the whale to shore and butcher it.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0651.c.tt_success
send_interface_toast = {
title = fp1_yearly.0651.c.tt_success
left_icon = root
# Per the comment below the immediate block, the static gold is deliberate.
add_gold = 300
}
}
# The beast escapes you.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0651.c.tt_failure
send_interface_toast = {
title = fp1_yearly.0651.c.tt_failure
left_icon = root
increase_wounds_effect = { REASON = hunting_accident }
add_prestige = minor_prestige_loss
}
}
}
stress_impact = {
vengeful = miniscule_stress_impact_loss # From Hell's Heart I stab at thee, etc.
brave = major_stress_impact_loss
craven = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.75
ai_energy = 0.75
ai_compassion = -0.25
}
modifier = { # Weight up for stress.
add = 5
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 30
has_trait = brave
}
modifier = { # Weight down for stress.
add = -30
has_trait = craven
}
}
}
# A creature of fearsome majesty, leave it.
option = {
name = fp1_yearly.0651.d
# The whale goes free.
custom_tooltip = fp1_yearly.0651.d.tt
# You gain a little prestige for your kindness.
add_prestige = minor_prestige_gain
stress_impact = {
generous = minor_stress_impact_loss
compassionate = medium_stress_impact_loss
craven = major_stress_impact_loss
greedy = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
brave = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = generous
}
modifier = { # Weight up for stress.
add = 20
has_trait = compassionate
}
modifier = { # Weight up for stress.
add = 30
has_trait = craven
}
modifier = { # Weight down for stress.
add = -20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -30
has_trait = brave
}
}
}
}
##################################################
# A Novel Challenge
# by Ewan Cowhig Croft
# 0661 - 0670
##################################################
scripted_trigger fp1_0661_knight_appropriate_for_skiing_trigger = {
# Has to be around.
is_available_ai_adult = yes
# And in the capital.
location = root.location
# And have no disqualifying traits.
NOR = {
# Personality blockers.
has_trait = shy
has_trait = lazy
has_trait = humble
has_trait = craven
# Not that it's impossible, just unlikely for the period & tech level.
has_trait = one_legged
}
# Finally, no negative relationship with root.
has_any_bad_relationship_with_root_trigger = no
}
# One of your knights challenges you to skiing.
fp1_yearly.0661 = {
type = character_event
title = fp1_yearly.0661.t
desc = fp1_yearly.0661.desc
theme = friendly
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:knight
animation = personality_bold
}
override_background = { reference = feast }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_at_peace_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0661 }
is_playable_character = yes
# Must be a suitable culture.
culture_uses_frequent_winter_transportation_trigger = yes
# Gotta have snow in the capital.
character_capital_has_winter_trigger = yes
# And have an available knight.
any_knight = { fp1_0661_knight_appropriate_for_skiing_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight according to winter scale.
character_capital_has_snow_suitable_for_activities = { CHARACTER = root }
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0661
days = 1825
}
# Grab an appropriate knight.
random_knight = {
limit = { fp1_0661_knight_appropriate_for_skiing_trigger = yes }
save_scope_as = knight
}
}
# How unusual! I accept!
option = {
name = fp1_yearly.0661.a
trigger = {
NOT = { has_trait = winter_soldier }
}
# Prowess duel vs. scope:knight.
duel = {
skill = prowess
target = scope:knight
# It's close, but you win!
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0661.a.tt_success
send_interface_toast = {
title = fp1_yearly.0661.a.tt_success
left_icon = scope:knight
add_prestige = minor_prestige_gain
progress_towards_friend_effect = {
CHARACTER = scope:knight
OPINION = 30
REASON = friend_ski_race
}
}
}
# Scope:knight skids to victory.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0661.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0661.a.tt_failure
left_icon = scope:knight
add_prestige = minor_prestige_loss
progress_towards_friend_effect = {
CHARACTER = scope:knight
OPINION = 10
REASON = friend_ski_race
}
}
}
}
stress_impact = {
brave = medium_stress_impact_loss
craven = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_boldness = 0.5
ai_honor = 0.5
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = brave
}
modifier = { # Weight down for stress.
add = -20
has_trait = craven
}
}
}
# Winter Soldier: Out in the snow? I accept.
option = {
name = fp1_yearly.0661.a.2
trigger = { has_trait = winter_soldier }
trait = winter_soldier
custom_tooltip = fp1_yearly.0661.a.2.tt
add_prestige = minor_prestige_gain
progress_towards_friend_effect = {
CHARACTER = scope:knight
OPINION = 50
REASON = friend_ski_race
}
stress_impact = {
diligent = minor_stress_impact_loss
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_boldness = 0.5
ai_honor = 0.5
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
# Hobble the competition, then race.
option = {
name = fp1_yearly.0661.b
# Intrigue duel vs. scope:knight.
duel = {
skill = intrigue
target = scope:knight
# My, what an *effortless* win you have there.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0661.b.tt_success
send_interface_toast = {
title = fp1_yearly.0661.b.tt_success
left_icon = scope:knight
add_prestige = medium_prestige_gain
reverse_add_opinion = {
target = scope:knight
modifier = suspicion_opinion
opinion = -5
}
}
}
# Scope:knight discovers you in the act.
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0661.b.tt_failure
send_interface_toast = {
title = fp1_yearly.0661.b.tt_failure
left_icon = scope:knight
add_prestige = medium_prestige_loss
progress_towards_rival_effect = {
REASON = rival_attempted_to_cheat_race
CHARACTER = scope:knight
OPINION = -40
}
}
}
}
stress_impact = {
arbitrary = minor_stress_impact_loss
deceitful = medium_stress_impact_loss
just = minor_stress_impact_gain
honest = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.5
ai_boldness = 0.5
ai_sociability = 0.25
ai_honor = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = arbitrary
}
modifier = { # Weight up for stress.
add = 20
has_trait = deceitful
}
modifier = { # Weight down for stress.
add = -10
has_trait = just
}
modifier = { # Weight down for stress.
add = -20
has_trait = honest
}
}
}
# *Competitive* skiing? With no hunting? Get lost.
option = {
name = fp1_yearly.0661.c
# Some minor opt-out prestige.
add_prestige = miniscule_prestige_gain
# You upset scope:knight a bit, though.
reverse_add_opinion = {
target = scope:knight
modifier = disappointed_opinion
opinion = -10
}
stress_impact = {
lazy = minor_stress_impact_loss
craven = minor_stress_impact_loss
lifestyle_hunter = medium_stress_impact_loss
brave = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.25
ai_boldness = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = craven
}
modifier = { # Weight up for stress.
add = 20
has_trait = lifestyle_hunter
}
modifier = { # Weight down for stress.
add = -10
has_trait = brave
}
}
}
}
##################################################
# A Slippery Slope
# by Ewan Cowhig Croft
# 0671 - 0680
##################################################
scripted_trigger fp1_0671_available_older_sibling_trigger = {
this != scope:child
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# Should be older than scope:child.
age > scope:child.age
# Mustn't have a terribly negative relationship with scope:child.
NOT = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:child }
}
opinion = {
target = scope:child
value >= medium_negative_opinion
}
}
# Your child wants you to go sledding with them.
fp1_yearly.0671 = {
type = character_event
title = fp1_yearly.0671.t
desc = fp1_yearly.0671.desc
theme = family
left_portrait = {
character = root
animation = happiness
}
right_portrait = {
character = scope:child
animation = admiration
}
lower_right_portrait = scope:sibling
override_background = { reference = bedchamber }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0671 }
is_landed = yes
# Gotta have snow in the capital.
character_capital_has_winter_trigger = yes
# And an available child.
any_child = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
}
}
weight_multiplier = {
base = 1
# Weight according to winter scale.
character_capital_has_snow_suitable_for_activities = { CHARACTER = root }
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0671
days = 1825
}
# Grab a suitable child.
random_child = {
limit = {
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
}
save_scope_as = child
}
# If there's a suitable sibling, nab them for later.
if = {
limit = {
any_child = { fp1_0671_available_older_sibling_trigger = yes }
}
random_child = {
limit = { fp1_0671_available_older_sibling_trigger = yes }
save_scope_as = sibling
}
}
add_character_flag = {
flag = use_sickness_clothes
days = 1
}
}
# (Strong/Physique_Good) Hah, let me just haul this table out for us!
option = {
name = fp1_yearly.0671.a
trigger = {
OR = {
has_trait = strong
has_trait = physique_good
}
}
trait = strong
trait = physique_good_1
trait = physique_good_2
trait = physique_good_3
# Gain huge opinion boost with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 50
}
# Grow closer to becoming friends with scope:child, if possible.
progress_towards_friend_effect = {
CHARACTER = scope:child
OPINION = 0
REASON = friend_sledding
}
stress_impact = {
gregarious = minor_stress_impact_loss
diligent = minor_stress_impact_loss
lazy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_energy = 0.5
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
}
}
# Come on, let's get a tray from the kitchen.
option = {
name = fp1_yearly.0671.b
trigger = {
NOR = {
has_trait = strong
has_trait = physique_good
}
}
# Gain large opinion boost with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = love_opinion
opinion = 25
}
stress_impact = {
gregarious = minor_stress_impact_loss
diligent = minor_stress_impact_loss
lazy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_energy = 0.5
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { # Weight up for stress.
add = 10
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -10
has_trait = lazy
}
}
}
# Go ask your [sibling].
option = {
name = fp1_yearly.0671.c
trigger = { exists = scope:sibling }
# Scope:child & scope:sibling both gain opinion of each other.
scope:child = {
progress_towards_friend_effect = {
CHARACTER = scope:sibling
OPINION = 30
REASON = friend_sledding
}
}
# Quite a mild response, so no stress involved.
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_energy = -0.25
ai_sociability = -0.25
}
}
}
# Away with you, I'm busy.
option = {
name = fp1_yearly.0671.d
# Lose stress.
## Stress loss handled in stress_impact.
# But also opinion with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -20
}
stress_impact = {
base = major_stress_loss
lazy = minor_stress_impact_loss
callous = minor_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = -0.25
ai_sociability = -0.25
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = lazy
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# Get out of your pajamas.
after = { remove_character_flag = use_sickness_clothes }
}
##################################################
# Why Can't I Come?
# by Ewan Cowhig Croft
# 0681 - 0690
##################################################
scripted_trigger fp1_0681_haughty_knights_trigger = {
# Has enough prowess that they're proud of it.
prowess >= medium_skill_rating
# And lacks any humbling traits.
NOR = {
has_trait = humble
has_trait = compassionate
has_trait = forgiving
}
}
scripted_trigger fp1_0681_child_that_might_like_raiding_trigger = {
# Must be around.
child_suitable_to_play_with_character_one_sided = { CHARACTER = root }
# We want basically anyone who might think it's exciting.
NOT = { has_trait = pensive }
}
# One of your children wants to know why they can't come raiding.
fp1_yearly.0681 = {
type = character_event
title = fp1_yearly.0681.t
desc = fp1_yearly.0681.desc
theme = war
left_portrait = {
character = root
animation = personality_content
}
right_portrait = {
character = scope:child
animation = admiration
}
override_background = { reference = study }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_at_peace_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0681 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_coastal_norse_tribal = yes
# Raiding must be recent or ever-present.
OR = {
has_trait = viking
has_character_flag = has_recently_performed_raid
}
# At least some of your knights should be snobbish.
any_knight = { fp1_0681_haughty_knights_trigger = yes }
# And you must have a suitable child.
any_child = { fp1_0681_child_that_might_like_raiding_trigger = yes }
}
weight_multiplier = {
base = 1
# Weight up a bit for adventurers & vikings.
modifier = {
add = 0.5
has_trait = adventurer
}
modifier = {
add = 0.5
has_trait = viking
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0681
days = 1825
}
# Grab a suitable child.
random_child = {
limit = { fp1_0681_child_that_might_like_raiding_trigger = yes }
save_scope_as = child
}
}
# I'm leaving you to guard [capital], ok?
option = {
name = fp1_yearly.0681.a
# Gain opinion with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = trust_opinion
opinion = 20
}
stress_impact = {
compassionate = minor_stress_impact_loss
callous = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.75
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = compassionate
}
modifier = { # Weight down for stress.
add = -10
has_trait = callous
}
modifier = { # Weight down for stress.
add = -10
has_trait = sadistic
}
}
}
# _Hah_! You'll never be a true warrior, child.
option = {
name = fp1_yearly.0681.b
# Gain opinion with all of your haughty knights.
every_knight = {
limit = { fp1_0681_haughty_knights_trigger = yes }
custom = fp1_yearly.0681.b.haughty_knights
add_opinion = {
target = root
modifier = respect_opinion
opinion = 15
}
}
# Lose opinion with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = hurt_opinion
opinion = -30
}
# Add hidden potential rivalry if possible.
hidden_effect = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:child }
}
set_relation_potential_rival = scope:child
}
}
stress_impact = {
callous = minor_stress_impact_loss
sadistic = minor_stress_impact_loss
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.25
ai_compassion = -0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = callous
}
modifier = { # Weight up for stress.
add = 10
has_trait = sadistic
}
modifier = { # Weight down for stress.
add = -10
has_trait = compassionate
}
}
}
# We'll talk about it when you're older.
option = {
name = fp1_yearly.0681.c
# Gain some minor opinion with your knights.
every_knight = {
custom = custom.every_knight
add_opinion = {
target = root
modifier = respect_opinion
opinion = 5
}
}
# But lose opinion with scope:child.
reverse_add_opinion = {
target = scope:child
modifier = disappointed_opinion
opinion = -10
}
# Mild response, incurs no stress.
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = -0.25
ai_boldness = -0.25
ai_sociability = -0.25
}
}
}
}
##################################################
# Attempted Atonement
# by Ewan Cowhig Croft
# 0691 - 0700
##################################################
scripted_trigger fp1_0692_valid_convertable_knight_trigger = {
# Must be in the army's location.
location = root.location
# & share scope:raider's faith, which isn't reformed.
faith = {
this = scope:raider.faith
has_doctrine_parameter = unreformed
}
# Shouldn't have anything that might block them from converting.
NOR = {
has_trait = arrogant
has_trait = content
has_trait = cynical
has_trait = zealous
has_trait = paranoid
# Sadists are too busy for introspection.
has_trait = sadistic
}
# And should be landless.
is_courtier_of = scope:raider
# Children can be rebellious, but we should probably filter them out too.
NOT = {
any_parent = { this = scope:raider }
}
}
scripted_trigger fp1_0691_knight_still_valid_convertable_trigger = {
# Has all the appropriate variables; they come as a matched pair, but just in case.
has_variable = raid_convert_county
has_variable = raid_convert_faith
# Standard checks.
is_available_ai_adult = yes
is_courtier_of = root
# Make sure that they're still of root's faith, and that root hasn't converted to their new faith.
faith = root.faith
NOT = { this.var:raid_convert_faith = root.faith }
# Shouldn't have become committed to a religious stance, but just check they've not managed to sneak-acquire traits in the meanwhilst.
NOR = {
has_trait = zealous
has_trait = cynical
}
}
# One of your knights finds new faith after a raid.
fp1_yearly.0691 = {
type = character_event
title = fp1_yearly.0691.t
desc = fp1_yearly.0691.desc
theme = war
left_portrait = {
character = root
animation = shock
}
right_portrait = {
character = scope:knight
animation = personality_zealous
}
override_background = { reference = throne_room }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_at_peace_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_0691 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse_tribal = yes
# There must be at least one knight who's had a crisis of conscience.
any_knight = { fp1_0691_knight_still_valid_convertable_trigger = yes }
}
weight_multiplier = {
base = 1
# Knights feel more comfortable converting away if you're not particularly religious.
modifier = {
add = 0.5
has_trait = cynical
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_0691
days = 3650
}
# Grab a suitable knight.
random_knight = {
limit = { fp1_0691_knight_still_valid_convertable_trigger = yes }
weight = {
base = 0
# Weight up fickle & trusting characters.
## Fickle characters are more likely to heel-face-turn on their pillaging faith.
modifier = {
add = 100
has_trait = fickle
}
## Trusting characters are more gullible, and they *did* take thralls.
modifier = {
add = 100
has_trait = trusting
}
}
save_scope_as = knight
}
# Convert them & boost their zeal.
scope:knight = {
set_character_faith = this.var:raid_convert_faith
add_trait = zealous
}
# Grab the source county for loc.
scope:knight.var:raid_convert_county = { save_scope_as = county }
}
# Surely I can talk you out of this foreign faith?
option = {
name = fp1_yearly.0691.a
# Learning duel to get them to recant & stay.
duel = {
skill = learning
target = scope:knight
# You bring them back to the light.
40 = {
compare_modifier = {
value = scope:duel_value
multiplier = 3.5
min = -49
}
desc = fp1_yearly.0691.a.tt_success
send_interface_toast = {
title = fp1_yearly.0691.a.tt_success
left_icon = scope:knight
# They reconvert.
scope:knight = { set_character_faith = root.faith }
# And you either get a hook on them...
if = {
limit = {
can_add_hook = {
target = scope:knight
type = favor_hook
}
}
add_hook = {
target = scope:knight
type = favor_hook
}
}
# Or a goodly chunk of opinion.
else = {
reverse_add_opinion = {
target = scope:knight
modifier = grateful_opinion
opinion = 30
}
}
}
}
# They refuse and leave.
60 = {
compare_modifier = {
value = scope:duel_value
multiplier = -3.5
min = -49
}
desc = fp1_yearly.0691.a.tt_failure
send_interface_toast = {
title = fp1_yearly.0691.a.tt_failure
left_icon = scope:knight
# They leave.
scope:knight = { select_and_move_to_pool_effect = yes }
# And they're none too happy with you.
reverse_add_opinion = {
target = scope:knight
modifier = insult_opinion
opinion = -25
}
}
}
}
stress_impact = {
humble = minor_stress_impact_loss
zealous = major_stress_impact_loss
arrogant = minor_stress_impact_gain
cynical = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.75
ai_boldness = 0.5
}
modifier = { # Weight up for stress.
add = 10
has_trait = humble
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight down for stress.
add = -10
has_trait = arrogant
}
modifier = { # Weight down for stress.
add = -30
has_trait = cynical
}
}
}
# GetFaith.GetReligion.GetName? You've gone mad. Guards!
option = {
name = fp1_yearly.0691.b
# Quietly move scope:knight to the pool so you're no longer their liege.
hidden_effect = {
scope:knight = { move_to_pool = yes }
}
# Throw scope:knight in the dungeon immediately.
rightfully_imprison_character_effect = {
TARGET = scope:knight
IMPRISONER = root
}
hidden_effect = {
scope:knight = { change_prison_type = dungeon }
}
# Scope:knight is understandably angry.
reverse_add_opinion = {
target = scope:knight
modifier = hate_opinion
opinion = -50
}
# Quietly mark them for future rivalry.
hidden_effect = {
if = {
limit = {
can_set_relation_potential_rival_trigger = { CHARACTER = scope:knight }
}
set_relation_potential_rival = scope:knight
}
}
# But, hey, piety & same-faith courtier & guest opinion.
every_courtier_or_guest = {
limit = {
faith = root.faith
NOT = { has_trait = cynical }
}
custom = fp1_yearly.0691.b.same_faith_courtiers_and_guests
add_opinion = {
target = root
modifier = pious_opinion
opinion = 10
}
}
stress_impact = {
vengeful = major_stress_impact_loss
zealous = major_stress_impact_loss
forgiving = major_stress_impact_gain
cynical = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.5
ai_vengefulness = 0.5
ai_energy = -0.25
}
modifier = { # Weight up for stress.
add = 30
has_trait = vengeful
}
modifier = { # Weight up for stress.
add = 30
has_trait = zealous
}
modifier = { # Weight down for stress.
add = -30
has_trait = forgiving
}
modifier = { # Weight down for stress.
add = -30
has_trait = cynical
}
}
}
# You may go if you wish.
option = {
name = fp1_yearly.0691.c
# Gain a little prestige.
add_prestige = minor_prestige_gain
# And the knight's gratitude.
reverse_add_opinion = {
target = scope:knight
modifier = grateful_opinion
opinion = 35
}
# But lose the knight.
scope:knight = { select_and_move_to_pool_effect = yes }
stress_impact = {
forgiving = major_stress_impact_loss
cynical = major_stress_impact_loss
vengeful = major_stress_impact_gain
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.5
ai_vengefulness = -0.5
}
modifier = { # Weight up for stress.
add = 30
has_trait = forgiving
}
modifier = { # Weight up for stress.
add = 30
has_trait = cynical
}
modifier = { # Weight down for stress.
add = -30
has_trait = vengeful
}
modifier = { # Weight down for stress.
add = -30
has_trait = zealous
}
}
}
}
# Set-up event for raiding.
fp1_yearly.0692 = {
hidden = yes
scope = army
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# We only want to convert to reformed faiths.
scope:county.faith = {
NOT = { has_doctrine_parameter = unreformed }
}
# Check various prerequisites with scope:raider.
scope:raider = {
# Scope:raider shouldn't have had this event recently either.
#NOT = { has_character_flag = had_event_fp1_yearly_0691 }
# We don't want all raiding to result in tons of variables floating about.
fp1_is_norse_tribal = yes
# There must be at least one eligible knight in the raid army.
any_knight = { fp1_0692_valid_convertable_knight_trigger = yes }
}
}
immediate = {
# Designate a suitable knight.
scope:raider = {
random_knight = {
# Preferring those who might be more open to new ideas.
limit = {
fp1_0692_valid_convertable_knight_trigger = yes
OR = {
has_trait = humble
has_trait = honest
has_trait = ambitious
has_trait = gregarious
has_trait = arbitrary
has_trait = trusting
has_trait = fickle
}
}
# But otherwise just anyone valid.
alternative_limit = { fp1_0692_valid_convertable_knight_trigger = yes }
# Remember the county it happened in.
set_variable = {
name = raid_convert_county
value = scope:county
years = 5
}
# And the faith they'd like to convert to.
set_variable = {
name = raid_convert_faith
value = scope:county.faith
years = 5
}
}
}
}
}
##################################################
# SPECIAL YEARLIES
##################################################
# A Mysterious Stranger Stays at Court
# by Ewan Cowhig Croft
# 1001 - 1030
##################################################
scripted_trigger valid_germanic_faith_trigger = {
#Small enough that it probably doesn't need a trigger, but might need to be more complex in future.
religion = religion:germanic_religion
}
scripted_trigger valid_non_germanic_reformed_faith_trigger = {
NOR = {
faith = { has_doctrine_parameter = unreformed }
religion = religion:germanic_religion
}
}
scripted_effect fp1_mysterious_stranger_follow_up_event_picker_effect = {
if = {
limit = { scope:ms_type = flag:godi }
trigger_event = fp1_yearly.1011
}
else_if = {
limit = { scope:ms_type = flag:missionary }
trigger_event = fp1_yearly.1012
}
else_if = {
limit = { scope:ms_type = flag:nithing }
trigger_event = fp1_yearly.1013
}
else_if = {
limit = { scope:ms_type = flag:warrior }
trigger_event = fp1_yearly.1014
}
#Trigger vagrant as the last possible thing.
else = { trigger_event = fp1_yearly.1015 }
}
scripted_effect mysterious_stranger_disappears_effect = {
custom_tooltip = fp1_yearly.1001.mysterious_stranger_disappears.tt
hidden_effect = {
scope:stranger = {
death = { death_reason = death_vanished }
}
}
}
# You notice a stranger has been hanging around the court.
fp1_yearly.1001 = {
type = character_event
title = fp1_yearly.1001.t
desc = {
desc = fp1_yearly.1001.desc.intro
first_valid = {
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:sneaks }
desc = fp1_yearly.1001.desc.behaviour_1.sneaks
}
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:leaves_early }
desc = fp1_yearly.1001.desc.behaviour_1.leaves_early
}
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:earnest }
desc = fp1_yearly.1001.desc.behaviour_1.earnest
}
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:confident }
desc = fp1_yearly.1001.desc.behaviour_1.confident
}
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:talkative }
desc = fp1_yearly.1001.desc.behaviour_1.talkative
}
triggered_desc = {
trigger = { scope:ms_behaviour_1 = flag:eats_their_fill }
desc = fp1_yearly.1001.desc.behaviour_1.eats_their_fill
}
}
first_valid = {
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:sneaks }
desc = fp1_yearly.1001.desc.behaviour_2.sneaks
}
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:leaves_early }
desc = fp1_yearly.1001.desc.behaviour_2.leaves_early
}
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:earnest }
desc = fp1_yearly.1001.desc.behaviour_2.earnest
}
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:confident }
desc = fp1_yearly.1001.desc.behaviour_2.confident
}
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:talkative }
desc = fp1_yearly.1001.desc.behaviour_2.talkative
}
triggered_desc = {
trigger = { scope:ms_behaviour_2 = flag:eats_their_fill }
desc = fp1_yearly.1001.desc.behaviour_2.eats_their_fill
}
}
desc = fp1_yearly.1001.desc.outro
}
theme = intrigue
left_portrait = {
character = scope:stranger
animation = personality_honorable
}
override_background = { reference = feast }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#Standard checks.
is_available_even_at_war_adult = yes
is_landed = yes
NOT = { has_character_flag = had_event_fp1_yearly_1001 }
#Scandinavian culture group, and within Scandinavia (plus a few other places).
culture = { has_cultural_pillar = heritage_north_germanic }
capital_province ?= { geographical_region = dlc_fp1_region_mysterious_stranger_locations }
}
weight_multiplier = {
base = 1
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_1001
days = 7300
}
#Spawn a suitable mysterious stranger.
##Each of these has a list of traits that overlap with 1-2 other spawnable categories, as well as some unique tells.
##The idea is that they're structured enough to be able to guess (sorta) first time, but random enough that you won't always guess correctly. At the same time, learning the tells over time, and what makes a character definitely/definitely not a specific type of stranger, rewards repeated play.
random_list = {
#Spawn a godi.
100 = {
#Requires some contact with Germanic Paganism.
trigger = {
OR = {
valid_germanic_faith_trigger = yes
any_sub_realm_county = { valid_germanic_faith_trigger = yes }
any_neighboring_top_liege_realm_owner = { valid_germanic_faith_trigger = yes }
}
}
#Create the character & set up details for later.
create_character = {
location = root.capital_province
template = fp1_ms_godi_character
save_scope_as = stranger
}
save_scope_value_as = {
name = ms_type
value = flag:godi
}
#Figure out what faith the godi would actually have.
##Only a random chance for now: this is to give same-religion separate-faith godis a chance to spawn if you're Germanic Pagan yourself.
random = {
chance = 50
if = {
limit = { valid_germanic_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
}
if = {
limit = {
NOT = { exists = scope:ms_faith }
any_sub_realm_county = { valid_germanic_faith_trigger = yes }
}
random_sub_realm_county = {
limit = { valid_germanic_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
}
else_if = {
limit = {
any_neighboring_top_liege_realm_owner = { valid_germanic_faith_trigger = yes }
}
random_neighboring_top_liege_realm_owner = {
limit = { valid_germanic_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
}
else = {
#If you hit this stage, go back to your own Germanic Pagan faith.
faith = { save_scope_as = ms_faith }
}
}
#Spawn a missionary from a reformed faith.
100 = {
#Requires some contact with a reformed faith that isn't Germanic Pagan.
trigger = {
OR = {
valid_non_germanic_reformed_faith_trigger = yes
any_sub_realm_county = { valid_non_germanic_reformed_faith_trigger = yes }
any_neighboring_top_liege_realm_owner = { valid_non_germanic_reformed_faith_trigger = yes }
}
}
#Create the character & set up details for later.
create_character = {
location = root.capital_province
template = fp1_ms_reformed_missionary_character
save_scope_as = stranger
}
save_scope_value_as = {
name = ms_type
value = flag:missionary
}
#Figure out what faith the missionary would actually have.
if = {
limit = { valid_non_germanic_reformed_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
else_if = {
limit = {
any_sub_realm_county = { valid_non_germanic_reformed_faith_trigger = yes }
}
random_sub_realm_county = {
limit = { valid_non_germanic_reformed_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
}
else = {
random_neighboring_top_liege_realm_owner = {
limit = { valid_non_germanic_reformed_faith_trigger = yes }
faith = { save_scope_as = ms_faith }
}
}
}
#Spawn a nithing.
100 = {
#No requirements.
#Create the character & set up details for later.
create_character = {
location = root.capital_province
template = fp1_ms_nithing_character
save_scope_as = stranger
}
save_scope_value_as = {
name = ms_type
value = flag:nithing
}
}
#Spawn a warrior.
100 = {
#No requirements.
#Create the character & set up details for later.
create_character = {
location = root.capital_province
template = fp1_ms_warrior_character
save_scope_as = stranger
}
save_scope_value_as = {
name = ms_type
value = flag:warrior
}
}
#Spawn an ordinary vagrant.
##These guys are the wild cards: they have no restrictions on anything, save that they suck at everything. Their job is to be confusing and make you uncertain.
100 = {
#No requirements.
#Create the character & set up details for later.
create_character = {
location = root.capital_province
template = fp1_ms_vagrant_character
save_scope_as = stranger
}
save_scope_value_as = {
name = ms_type
value = flag:vagrant
}
}
}
#Set behaviours.
##Each stranger type exhibits two of three possible behaviour patterns in the event description. All behaviour patterns overlap with at least one other stranger type, with the vagrant having access to all of them.
random_list = {
#Godi
100 = {
trigger = { scope:ms_type = flag:godi }
random_list = {
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:sneaks
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:leaves_early
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:earnest
}
}
}
random_list = {
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:sneaks }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:sneaks
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:leaves_early }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:leaves_early
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:earnest }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:earnest
}
}
}
}
#Missionary
100 = {
trigger = { scope:ms_type = flag:missionary }
random_list = {
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:confident
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:leaves_early
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:talkative
}
}
}
random_list = {
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:confident }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:confident
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:leaves_early }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:leaves_early
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:talkative }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:talkative
}
}
}
}
#Nithing
100 = {
trigger = { scope:ms_type = flag:nithing }
random_list = {
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:sneaks
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:eats_their_fill
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:earnest
}
}
}
random_list = {
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:sneaks }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:sneaks
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:eats_their_fill }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:eats_their_fill
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:earnest }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:earnest
}
}
}
}
#Warrior
100 = {
trigger = { scope:ms_type = flag:warrior }
random_list = {
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:confident
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:eats_their_fill
}
}
33 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:talkative
}
}
}
random_list = {
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:confident }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:confident
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:eats_their_fill }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:eats_their_fill
}
}
33 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:talkative }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:talkative
}
}
}
}
#Vagrant
100 = {
trigger = { scope:ms_type = flag:vagrant }
random_list = {
20 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:sneaks
}
}
20 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:leaves_early
}
}
20 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:earnest
}
}
20 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:confident
}
}
20 = {
save_scope_value_as = {
name = ms_behaviour_1
value = flag:talkative
}
}
}
random_list = {
20 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:sneaks }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:sneaks
}
}
20 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:leaves_early }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:leaves_early
}
}
20 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:earnest }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:earnest
}
}
20 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:confident }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:confident
}
}
20 = {
trigger = {
NOT = { scope:ms_behaviour_1 = flag:talkative }
}
save_scope_value_as = {
name = ms_behaviour_2
value = flag:talkative
}
}
}
}
}
#And sometimes just remove an eye for funsies.
random = {
chance = 5
scope:stranger = { add_trait = one_eyed }
}
}
#Ignore them: they're probably harmless.
##This leads to a standardised effect: something mildly beneficial/annoying, if the player is unsure or doesn't want to gamble much.
option = {
name = fp1_yearly.1001.a
#Let the player know that something will happen.
custom_tooltip = fp1_yearly.1001.probably_harmless.tt
#Configure for standard effects.
save_scope_value_as = {
name = ms_effect
value = flag:standard
}
#Figure out which follow-up event to send.
fp1_mysterious_stranger_follow_up_event_picker_effect = yes
stress_impact = {
trusting = minor_stress_impact_loss
gregarious = minor_stress_impact_loss
paranoid = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.5
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = trusting
}
modifier = { #Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
}
}
#Make them a guest of honour!
##This leads to a critical effect: we dial up the consequences, in case the player is certain they know who the stranger is/wants to risk it for a biscuit.
option = {
name = fp1_yearly.1001.b
#Warn the player that they're signing up for a dramatic event.
custom_tooltip = fp1_yearly.1001.guest_of_honour.tt
#Configure for critical effects.
save_scope_value_as = {
name = ms_effect
value = flag:critical
}
#Figure out which follow-up event to send.
fp1_mysterious_stranger_follow_up_event_picker_effect = yes
stress_impact = {
trusting = medium_stress_impact_loss
gregarious = medium_stress_impact_loss
paranoid = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.5
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = trusting
}
modifier = { #Weight up for stress.
add = 20
has_trait = gregarious
}
modifier = { #Weight down for stress.
add = -20
has_trait = paranoid
}
}
}
#Give 'em the boot.
##Opt-out with mild consequence.
option = {
name = fp1_yearly.1001.c
#The mysterious stranger vanishes.
mysterious_stranger_disappears_effect = yes
#Everyone thinks you're a bit mean-spirited, but that's it.
if = {
limit = { has_character_modifier = generous_host_fp1_modifier }
remove_character_modifier = generous_host_fp1_modifier
}
else = {
add_character_modifier = {
modifier = stingy_host_fp1_modifier
years = 5
}
}
stress_impact = {
paranoid = minor_stress_impact_loss
shy = medium_stress_impact_loss
trusting = minor_stress_impact_gain
gregarious = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_compassion = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = paranoid
}
modifier = { #Weight up for stress.
add = 20
has_trait = shy
}
modifier = { #Weight down for stress.
add = -10
has_trait = trusting
}
modifier = { #Weight down for stress.
add = -10
has_trait = gregarious
}
}
}
}
scripted_trigger mysterious_stranger_godi_same_faith_trigger = {
#Small enough that it probably doesn't need a trigger, but might need to be more complex in future.
faith = scope:ms_faith
}
scripted_trigger mysterious_stranger_godi_same_religion_trigger = {
NOT = { mysterious_stranger_godi_same_faith_trigger = yes }
religion = scope:ms_faith.religion
}
scripted_effect mysterious_stranger_add_possible_converts_to_specific_list_effect = {
random_in_list = {
list = possible_converts_pool_list
limit = {
NOT = { is_in_list = possible_converts_specific_list }
}
weight = {
base = 0
#Give a base percentage chance, scale down 2% per point of learning.
modifier = {
add = {
value = 50
subtract = learning
}
}
#Weight up assorted traits that make you more likely to believe the godi.
modifier = {
add = 5
has_trait = arbitrary
}
modifier = {
add = 5
has_trait = fickle
}
modifier = {
add = 10
has_trait = trusting
}
}
add_to_list = possible_converts_specific_list
}
}
scripted_effect mysterious_stranger_different_religion_convert_courtiers_effect = {
#Firstly, nab all the courtiers who might be susceptible to conversion, excepting any who'd mess you up too much.
every_courtier = {
limit = {
is_available_ai_adult = yes
#We only want to look at people of root's faith.
faith = root.faith
NOR = {
#Exclude the self-righteous.
has_trait = zealous
has_trait = faith_warrior
has_trait = heresiarch
has_trait = crusader_king
#Aaaand exclude the actually-righteous.
piety_level >= medium_piety_level
#We also don't want council conversions, since that could make for some awkward chaplains.
is_councillor_of = root
#Filter out likely heirs, so that we don't mess up succession too much.
is_primary_heir_of = root
is_player_heir_of = root
}
}
add_to_list = possible_converts_pool_list
}
#Nab specific courtiers for conversion.
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
#Nab even more if it's a a critical effect.
if = {
limit = { scope:ms_effect = flag:critical }
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
mysterious_stranger_add_possible_converts_to_specific_list_effect = yes
}
}
# Results: Godi.
fp1_yearly.1011 = {
type = character_event
title = fp1_yearly.1011.t
desc = {
first_valid = {
#Critical - separate religion.
triggered_desc = {
trigger = {
scope:ms_effect = flag:critical
NOR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
desc = fp1_yearly.1011.desc.separate_religion.critical
}
#Standard - separate religion.
triggered_desc = {
trigger = {
scope:ms_effect = flag:standard
NOR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
desc = fp1_yearly.1011.desc.separate_religion.standard
}
#Critical - same religion, separate faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:critical
mysterious_stranger_godi_same_religion_trigger = yes
}
desc = fp1_yearly.1011.desc.same_religion.critical
}
#Standard - same religion, separate faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:standard
mysterious_stranger_godi_same_religion_trigger = yes
}
desc = fp1_yearly.1011.desc.same_religion.standard
}
#Critical - same faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:critical
mysterious_stranger_godi_same_faith_trigger = yes
}
desc = fp1_yearly.1011.desc.same_faith.critical
}
#Standard - same faith (fallback).
desc = fp1_yearly.1011.desc.same_faith.standard
}
}
theme = intrigue
left_portrait = {
character = scope:stranger
#The Godi respects fellow Germanic Pagans.
triggered_animation = {
trigger = {
root = {
OR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
}
animation = personality_zealous
}
#Less so those outside their religion.
triggered_animation = {
trigger = {
root = {
NAND = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
}
animation = anger
}
}
override_background = { reference = bedchamber }
immediate = {
scope:stranger = {
#Boost education by a step.
##Ordered backwards so that they don't sequentially overwrite each other.
if = {
limit = { has_trait = education_learning_3 }
hidden_effect = { remove_trait = education_learning_3 }
add_trait = education_learning_4
}
if = {
limit = { has_trait = education_learning_2 }
hidden_effect = { remove_trait = education_learning_2 }
add_trait = education_learning_3
}
if = {
limit = { has_trait = education_learning_1 }
hidden_effect = { remove_trait = education_learning_1 }
add_trait = education_learning_2
}
if = {
limit = { has_trait = education_intrigue_3 }
hidden_effect = { remove_trait = education_intrigue_3 }
add_trait = education_intrigue_4
}
if = {
limit = { has_trait = education_intrigue_2 }
hidden_effect = { remove_trait = education_intrigue_2 }
add_trait = education_intrigue_3
}
if = {
limit = { has_trait = education_intrigue_1 }
hidden_effect = { remove_trait = education_intrigue_1 }
add_trait = education_intrigue_2
}
#Boost stats.
add_diplomacy_skill = { 5 10 }
add_martial_skill = { 5 10 }
add_stewardship_skill = { 3 8 }
add_intrigue_skill = { 10 15 }
add_learning_skill = { 10 15 }
add_prowess_skill = { 5 10 }
#Change faith.
hidden_effect = { set_character_faith = scope:ms_faith }
#Finally: give them an eye-patch, assuming they're going to impersonate Odin. And aren't already missing an eye.
if = {
limit = {
religion = root.religion
NOT = { has_trait = one_eyed }
}
add_character_flag = wears_fake_eye_patch
}
#Reveal the godi's true stats.
hidden_effect = { force_character_skill_recalculation = yes }
}
#Organise a list of courtiers who might be affected for conversion.
mysterious_stranger_different_religion_convert_courtiers_effect = yes
#Godi is not even of your religion, giving negative effects.
if = {
limit = {
NOR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
#If the godi is not of your religion, they convert a bunch of your courtiers.
every_in_list = {
list = possible_converts_specific_list
custom = fp1_yearly.1011.possible_converts_specific_list
set_character_faith = scope:ms_faith
}
#You also lose some piety, or realm priest opinion if appropriate. Amount depends on whether you endorsed the godi or not.
if = {
limit = { scope:ms_effect = flag:critical }
if = {
limit = {
faith = { has_doctrine = doctrine_theocracy_lay_clergy }
#Double-check that they actually have a realm priest at the moment.
any_learning_councillor = { exists = this }
}
add_piety = medium_piety_loss
every_learning_councillor = {
add_opinion = {
target = root
modifier = fp1_honoured_heathen_opinion
}
}
}
else = { add_piety = major_piety_loss }
}
else = { add_piety = medium_piety_loss }
}
#Godi is of your religion, but not of your faith.
else_if = {
limit = { mysterious_stranger_godi_same_religion_trigger = yes }
#Better piety gain if you endorsed them.
if = {
limit = { scope:ms_effect = flag:critical }
add_piety = medium_piety_gain
}
else = { add_piety = minor_piety_gain }
}
#Otherwise, the godi is of your faith.
else = {
#As elsewhere, better piety gain if you endorsed them.
if = {
limit = { scope:ms_effect = flag:critical }
add_piety = major_piety_gain
}
else = { add_piety = medium_piety_gain }
}
}
#Surely that cannot *truly* have been the Allfather? [spoilers: it wasn't]
option = {
name = fp1_yearly.1011.a
trigger = {
OR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
#The godi vanishes.
mysterious_stranger_disappears_effect = yes
ai_chance = {
#Only option.
base = 100
}
}
#Bastard!
option = {
name = fp1_yearly.1011.b
trigger = {
NOR = {
mysterious_stranger_godi_same_faith_trigger = yes
mysterious_stranger_godi_same_religion_trigger = yes
}
}
#The godi vanishes.
mysterious_stranger_disappears_effect = yes
ai_chance = {
#Only option.
base = 100
}
}
}
# Results: Reformed Missionary.
fp1_yearly.1012 = {
type = character_event
title = fp1_yearly.1012.t
desc = {
first_valid = {
#Critical - different faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:critical
faith != scope:ms_faith
}
desc = fp1_yearly.1012.desc.different_faith.critical
}
#Standard - different faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:standard
faith != scope:ms_faith
}
desc = fp1_yearly.1012.desc.different_faith.standard
}
#Critical - same faith.
triggered_desc = {
trigger = {
scope:ms_effect = flag:critical
faith = scope:ms_faith
}
desc = fp1_yearly.1012.desc.same_faith.critical
}
#Standard - same faith (fallback).
desc = fp1_yearly.1012.desc.same_faith.standard
}
}
theme = intrigue
left_portrait = {
character = scope:stranger
#The missionary is pleased if they share your faith.
triggered_animation = {
trigger = {
root = { faith = scope:ms_faith }
}
animation = happiness
}
#Otherwise, they'll pray for you.
triggered_animation = {
trigger = {
NOT = {
root = { faith = scope:ms_faith }
}
}
animation = personality_zealous
}
}
override_background = { reference = bedchamber }
immediate = {
scope:stranger = {
#Boost education by a step.
##Ordered backwards so that they don't sequentially overwrite each other.
if = {
limit = { has_trait = education_learning_3 }
hidden_effect = { remove_trait = education_learning_3 }
add_trait = education_learning_4
}
if = {
limit = { has_trait = education_learning_2 }
hidden_effect = { remove_trait = education_learning_2 }
add_trait = education_learning_3
}
if = {
limit = { has_trait = education_learning_1 }
hidden_effect = { remove_trait = education_learning_1 }
add_trait = education_learning_2
}
#Boost stats.
add_diplomacy_skill = { 5 10 }
add_martial_skill = { 5 10 }
add_stewardship_skill = { 3 8 }
add_intrigue_skill = { 5 10 }
add_learning_skill = { 10 15 }
add_prowess_skill = { 5 10 }
add_trait = theologian
#Change faith.
hidden_effect = { set_character_faith = scope:ms_faith }
#If scope:stranger's faith allows monks, make them a monk.
if = {
limit = {
faith = { has_doctrine_parameter = take_vows_active }
}
add_trait = devoted
#Huahua! Don't you see, they were wearing a toupee the whole time!
}
#Reveal the missionary's true stats.
hidden_effect = { force_character_skill_recalculation = yes }
}
#Organise a list of courtiers who might be affected for conversion.
mysterious_stranger_different_religion_convert_courtiers_effect = yes
#The missionary does not share your faith.
if = {
limit = {
faith != scope:ms_faith
}
#They convert a bunch of your courtiers.
every_in_list = {
list = possible_converts_specific_list
custom = fp1_yearly.1012.possible_converts_specific_list
set_character_faith = scope:ms_faith
}
#You also lose some piety, or realm priest opinion if appropriate. Amount depends on whether you endorsed the missionary or not.
if = {
limit = { scope:ms_effect = flag:critical }
if = {
limit = {
faith = { has_doctrine = doctrine_theocracy_lay_clergy }
#Double-check that they actually have a realm priest at the moment.
any_learning_councillor = { exists = this }
}
add_piety = medium_piety_loss
every_learning_councillor = {
add_opinion = {
target = root
modifier = fp1_honoured_heathen_opinion
}
}
}
else = { add_piety = major_piety_loss }
}
else = { add_piety = medium_piety_loss }
}
#Otherwise, the missionary has the same faith as you.
else = {
#If endorsed, they offers you a hook on & opinion with your realm priest (assuming such is valid).
if = {
limit = {
scope:ms_effect = flag:critical
faith = { has_doctrine = doctrine_theocracy_lay_clergy }
#Double-check that you actually have a realm priest, and that a weak hook can be added.
any_learning_councillor = {
exists = this
save_temporary_scope_as = learning_councillor
root = {
can_add_hook = {
type = favor_hook
target = scope:learning_councillor
}
}
}
}
random_learning_councillor = {
limit = {
can_add_hook = {
type = favor_hook
target = root
}
}
save_temporary_scope_as = learning_councillor
root = {
add_hook = {
type = favor_hook
target = scope:learning_councillor
}
}
add_opinion = {
target = root
modifier = impressed_opinion
opinion = 30
}
}
add_piety = medium_piety_gain
}
#Otherwise, they just offers you more piety when endorsed.
else_if = {
limit = { scope:ms_effect = flag:critical }
add_piety = major_piety_gain
}
#Otherwise, you just get a bit of piety.
else = { add_piety = medium_piety_gain }
}
}
#Different faith: they offer to convert you, you accept.
option = {
name = fp1_yearly.1012.a
trigger = {
faith != scope:ms_faith
#Block the AI from making stupid conversions.
OR = {
is_ai = no
AND = {
scope:ms_faith.fervor >= 30
OR = {
AND = {
faith.fervor <= 25
has_trait = cynical
}
AND = {
faith.fervor <= 15
NOT = { has_trait = zealous }
}
faith.fervor <= 5
}
}
}
}
#Perform the conversion.
set_character_faith_with_conversion = scope:ms_faith
#Recoup lost piety, and get paid a little extra.
custom_tooltip = fp1_yearly.1012.a.recoup_lost_piety.tt
hidden_effect = {
if = {
limit = { scope:ms_effect = flag:critical }
add_piety_no_experience = major_piety_gain
#^Technically, you gain a little extra here if you have a theocratic faith, but adding another scripted trigger in just these two spots would make the event very hard to read.
}
else = { add_piety_no_experience = medium_piety_gain }
}
if = {
limit = { scope:ms_effect = flag:critical }
add_piety = medium_piety_gain
}
else = { add_piety = minor_piety_gain }
stress_impact = {
cynical = minor_stress_impact_loss
zealous = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = -0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = cynical
}
modifier = { #Weight down for stress.
add = -30
has_trait = zealous
}
}
}
#Different faith: they offer to convert you, you turn them down, they leave.
option = {
name = fp1_yearly.1012.b
trigger = {
faith != scope:ms_faith
}
#The missionary vanishes.
mysterious_stranger_disappears_effect = yes
stress_impact = {
forgiving = minor_stress_impact_loss
cynical = minor_stress_impact_loss
vengeful = minor_stress_impact_gain
zealous = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = -0.5
ai_vengefulness = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = forgiving
}
modifier = { #Weight up for stress.
add = 10
has_trait = cynical
}
modifier = { #Weight down for stress.
add = -10
has_trait = vengeful
}
modifier = { #Weight down for stress.
add = -10
has_trait = zealous
}
}
}
#Different faith: they offer to convert you, you have them tossed in the dungeon.
option = {
name = fp1_yearly.1012.c
trigger = {
faith != scope:ms_faith
}
imprison = {
target = scope:stranger
type = dungeon
}
stress_impact = {
vengeful = minor_stress_impact_loss
zealous = medium_stress_impact_loss
forgiving = minor_stress_impact_gain
cynical = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.25
ai_vengefulness = 0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = vengeful
}
modifier = { #Weight up for stress.
add = 20
has_trait = zealous
}
modifier = { #Weight down for stress.
add = -10
has_trait = forgiving
}
modifier = { #Weight down for stress.
add = -20
has_trait = cynical
}
}
}
#Same faith: offers to stay, you accept.
option = {
name = fp1_yearly.1012.d
trigger = { faith = scope:ms_faith }
#Add the (rather chuffed) courtier to your court.
add_courtier = scope:stranger
reverse_add_opinion = {
target = scope:stranger
modifier = pleased_opinion
opinion = 30
}
stress_impact = {
trusting = minor_stress_impact_loss
gregarious = minor_stress_impact_loss
paranoid = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_zeal = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = trusting
}
modifier = { #Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
}
}
#Same faith: offers to stay, you decline.
option = {
name = fp1_yearly.1012.e
trigger = { faith = scope:ms_faith}
#The missionary vanishes.
mysterious_stranger_disappears_effect = yes
stress_impact = {
paranoid = medium_stress_impact_loss
gregarious = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.25
ai_rationality = -0.25
}
modifier = { #Weight up for stress.
add = 20
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -10
has_trait = gregarious
}
}
}
}
# Results: Nithing.
fp1_yearly.1013 = {
type = character_event
title = fp1_yearly.1013.t
desc = {
first_valid = {
triggered_desc = {
trigger = { scope:ms_effect = flag:critical }
desc = fp1_yearly.1013.desc.critical
}
desc = fp1_yearly.1013.desc.standard
}
first_valid = {
triggered_desc = {
trigger = {
scope:stranger = { has_trait = sodomite }
}
desc = fp1_yearly.1013.desc.outro.sodomite
}
desc = fp1_yearly.1013.desc.outro
}
}
theme = intrigue
left_portrait = {
character = scope:stranger
triggered_animation = {
trigger = {
scope:stranger = { has_trait = sodomite }
}
animation = stress
}
triggered_animation = {
trigger = {
NOT = {
scope:stranger = { has_trait = sodomite }
}
}
animation = schadenfreude
}
}
override_background = { reference = study }
immediate = {
scope:stranger = {
#Boost education by two steps.
if = {
limit = { has_trait = education_martial_1 }
hidden_effect = { remove_trait = education_martial_1 }
add_trait = education_martial_3
}
if = {
limit = { has_trait = education_intrigue_1 }
hidden_effect = { remove_trait = education_intrigue_1 }
add_trait = education_intrigue_3
}
#Boost stats.
add_diplomacy_skill = { 3 5 }
add_martial_skill = { 8 12 }
add_stewardship_skill = { 3 5 }
add_intrigue_skill = { 8 12 }
add_learning_skill = { 3 5 }
add_prowess_skill = { 5 10 }
#Add nithing things.
nithing_character_creation_scripted_effect = yes
#Give them a suitable crime.
random_list = {
65 = { add_trait = murderer }
25 = {
trigger = {
faith = { has_doctrine_parameter = witchcraft_illegal }
}
add_trait = witch
}
10 = {
trigger = {
is_male = yes
faith = { has_doctrine = doctrine_homosexuality_crime }
}
add_trait = sodomite
}
}
#Reveal the nithing's true stats.
hidden_effect = { force_character_skill_recalculation = yes }
}
#The nithing robs you, with a harsher effect if you endorsed them!
if = {
limit = { scope:ms_effect = flag:critical }
save_scope_value_as = {
name = nithing_stolen_loot
value = massive_gold_value
}
}
else = {
save_scope_value_as = {
name = nithing_stolen_loot
value = major_gold_value
}
}
remove_short_term_gold = scope:nithing_stolen_loot
}
#Curses!
option = {
name = {
trigger = {
NOT = {
scope:stranger = { has_trait = sodomite }
}
}
text = fp1_yearly.1013.a
}
name = {
trigger = {
scope:stranger = { has_trait = sodomite }
}
text = fp1_yearly.1013.a.sodomite
}
#The nithing vanishes.
mysterious_stranger_disappears_effect = yes
#No stress: the player has just eaten a nasty result.
ai_chance = {
#Only option.
base = 100
}
}
#I will not rest till that nithing is found! (rage outlet for angry players)
option = {
name = fp1_yearly.1013.b
trigger = { is_ai = no }
#Make the nithing a wanted individual.
scope:stranger = {
#The nithing runs for it.
hidden_effect = {
move_to_pool = yes
# And give them their ill-gotten earnings.
## We do this here so that their dying doesn't just give you or anyone else the cash back otherwise.
add_gold = scope:nithing_stolen_loot
}
#But they've made a powerful enemy!
set_relation_rival = {
target = root
reason = rival_nithing
}
}
stress_impact = {
#Minor penalty for RP reasons: we've already given the player a hefty negative, no need to pile on.
forgiving = minor_stress_impact_loss
vengeful = major_stress_impact_loss
}
ai_chance = {
#Irrelevant option.
base = 100
}
}
}
# Results: Warrior.
fp1_yearly.1014 = {
type = character_event
title = fp1_yearly.1014.t
desc = {
first_valid = {
triggered_desc = {
trigger = { scope:ms_effect = flag:critical }
desc = fp1_yearly.1014.desc.critical
}
desc = fp1_yearly.1014.desc.standard
}
desc = fp1_yearly.1014.desc.outro
}
theme = intrigue
left_portrait = {
character = scope:stranger
animation = personality_bold
}
override_background = { reference = corridor_night }
immediate = {
#If they were endorsed, the warrior gets better stats than they would otherwise.
if = {
limit = { scope:ms_effect = flag:critical }
scope:stranger = {
#Boost education by two steps.
if = {
limit = { has_trait = education_martial_1 }
hidden_effect = { remove_trait = education_martial_1 }
add_trait = education_martial_3
}
if = {
limit = { has_trait = education_intrigue_1 }
hidden_effect = { remove_trait = education_intrigue_1 }
add_trait = education_intrigue_3
}
#Boost stats.
add_diplomacy_skill = { 3 5 }
add_martial_skill = { 10 12 }
add_stewardship_skill = { 3 5 }
add_intrigue_skill = { 3 5 }
add_learning_skill = { 3 5 }
add_prowess_skill = { 14 18 }
#Give him a reputation.
add_prestige_level = 2
#Slight chance to add an additional trait or two.
random_list = {
25 = {
trigger = { exists = title:e_byzantium.holder }
add_trait = varangian
}
25 = { add_trait = berserker }
25 = { add_trait = physique_good_2 }
25 = {
add_trait = lifestyle_blademaster
add_trait_xp = {
trait = lifestyle_blademaster
value = {
integer_range = {
min = medium_lifestyle_random_xp_low
max = medium_lifestyle_random_xp_high
}
}
}
}
}
#Reveal the warrior's true stats.
hidden_effect = { force_character_skill_recalculation = yes }
}
}
else = {
scope:stranger = {
#Boost education by one step.
if = {
limit = { has_trait = education_martial_1 }
hidden_effect = { remove_trait = education_martial_1 }
add_trait = education_martial_2
}
if = {
limit = { has_trait = education_intrigue_1 }
hidden_effect = { remove_trait = education_intrigue_1 }
add_trait = education_intrigue_2
}
#Boost stats.
add_diplomacy_skill = { 3 5 }
add_martial_skill = { 5 10 }
add_stewardship_skill = { 3 5 }
add_intrigue_skill = { 3 5 }
add_learning_skill = { 3 5 }
add_prowess_skill = { 8 12 }
#Slight chance to add an additional trait or two.
random_list = {
50 = {}
12 = {
trigger = { exists = title:e_byzantium.holder }
add_trait = varangian
}
12 = { add_trait = berserker }
12 = { add_trait = physique_good_1 }
14 = {
add_trait = lifestyle_blademaster
add_trait_xp = {
trait = lifestyle_blademaster
value = {
integer_range = {
min = small_lifestyle_random_xp_low
max = small_lifestyle_random_xp_high
}
}
}
}
}
#Reveal the warrior's true stats.
hidden_effect = { force_character_skill_recalculation = yes }
}
}
}
#I'll certainly hire you!
option = {
name = fp1_yearly.1014.a
#Gain the warrior, who is also pretty happy to be here.
add_courtier = scope:stranger
reverse_add_opinion = {
target = scope:stranger
modifier = loyal_servant
}
#And pay the price.
if = {
limit = { scope:ms_effect = flag:critical }
remove_short_term_gold = medium_gold_value
}
else = { remove_short_term_gold = minor_gold_value }
stress_impact = {
gregarious = minor_stress_impact_loss
greedy = medium_stress_impact_gain
}
ai_chance = {
#Always a no if the AI can't afford the warrior.
base = -1000
ai_value_modifier = {
ai_sociability = 0.5
ai_greed = -0.5
}
#Enable option for the AI if they've the gold to spare.
modifier = {
add = 1000
scope:ms_effect = flag:critical
short_term_gold >= medium_gold_value
}
modifier = {
add = 1000
scope:ms_effect = flag:standard
short_term_gold >= minor_gold_value
}
modifier = { #Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { #Weight down for stress.
add = -20
has_trait = greedy
}
}
}
#Pass. Move along, Conan.
option = {
name = fp1_yearly.1014.b
#The warrior vanishes.
mysterious_stranger_disappears_effect = yes
#Have some mild consolation prestige
add_prestige = minor_prestige_gain
stress_impact = {
greedy = minor_stress_impact_loss
gregarious = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_sociability = -0.5
}
modifier = { #Weight up for stress.
add = 10
has_trait = greedy
}
modifier = { #Weight down for stress.
add = -10
has_trait = gregarious
}
}
}
}
# Results: Vagrant.
fp1_yearly.1015 = {
type = character_event
title = fp1_yearly.1015.t
desc = {
first_valid = {
triggered_desc = {
trigger = { scope:ms_effect = flag:critical }
desc = fp1_yearly.1015.desc.critical
}
desc = fp1_yearly.1015.desc.standard
}
desc = fp1_yearly.1015.desc.outro
}
theme = intrigue
#The vagrant's reaction varies a bit depending on your treatment of them.
left_portrait = {
character = scope:stranger
triggered_animation = {
trigger = { scope:ms_effect = flag:critical }
animation = ecstasy
}
triggered_animation = {
trigger = { scope:ms_effect = flag:standard }
animation = happiness
}
}
override_background = { reference = corridor_night }
immediate = {
#Vagrants get no stat reveal, as they genuinely suck.
#Lose a bit of prestige for letting them hang around so long, losing more if you endorsed them.
if = {
limit = { scope:ms_effect = flag:critical }
add_prestige = medium_prestige_loss
}
else = { add_prestige = minor_prestige_loss }
}
#Eh, I guess you can stay here.
option = {
name = fp1_yearly.1015.a
#You gain the vagrant as a courtier
add_courtier = scope:stranger
#And a hook on them: weak if you didn't endorse them, strong if you did.
if = {
limit = { scope:ms_effect = flag:critical }
add_hook = {
type = loyalty_hook
target = scope:stranger
}
}
else = {
add_hook = {
type = favor_hook
target = scope:stranger
years = 50 #You did literally scoop them up off the streets. They won't soon forget that.
}
}
#Either way, they think more of you for it.
reverse_add_opinion = {
target = scope:stranger
modifier = loyal_servant
}
stress_impact = {
gregarious = minor_stress_impact_loss
humble = medium_stress_impact_loss
shy = minor_stress_impact_gain
arrogant = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.5
ai_compassion = 0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = gregarious
}
modifier = { #Weight up for stress.
add = 20
has_trait = humble
}
modifier = { #Weight down for stress.
add = -10
has_trait = shy
}
modifier = { #Weight down for stress.
add = -20
has_trait = arrogant
}
}
}
#What?! Get out!
option = {
name = fp1_yearly.1015.b
#The vagrant vanishes.
mysterious_stranger_disappears_effect = yes
stress_impact = {
shy = minor_stress_impact_loss
arrogant = medium_stress_impact_loss
gregarious = minor_stress_impact_gain
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.5
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = shy
}
modifier = { #Weight up for stress.
add = 20
has_trait = arrogant
}
modifier = { #Weight down for stress.
add = -10
has_trait = gregarious
}
modifier = { #Weight down for stress.
add = -20
has_trait = humble
}
}
}
}
# Big RIP to fp1_yearly.1031 through fp1_yearly.1061: it would have been the greatest and bestest event chain ever, but alas, it has been cut, and now no one shall know of its grandeur. It was too beautiful for this world.
##################################################
# Commissioning a Longship for a Funeral
# by Ewan Cowhig Croft
# 1061 - 1070
##################################################
scripted_trigger fp1_funeral_longship_generic_mourner_trigger = {
is_landed = yes
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_1062 }
faith = root.faith
NOR = {
any_relation = {
type = rival
this = root
}
AND = {
is_ai = yes
opinion = {
target = root
value >= low_negative_opinion
}
}
}
}
scripted_trigger fp1_funeral_longship_likes_parties = {
has_trait = lifestyle_reveler
has_trait_xp = {
trait = lifestyle_reveler
value >= 100
}
# Faith must not consider this a bad thing.
faith = {
NOT = { trait_is_virtue = shy }
}
}
scripted_trigger fp1_funeral_longship_likes_duels = {
has_trait = lifestyle_blademaster
has_trait_xp = {
trait = lifestyle_blademaster
value >= 100
}
# Faith must not consider this a bad thing.
faith = {
NOT = { has_doctrine_parameter = holy_wars_forbidden }
}
}
scripted_trigger fp1_funeral_longship_likes_hunting = {
hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 }
# Faith must not consider this a bad thing.
faith = {
NOT = { has_doctrine_parameter = holy_wars_forbidden }
}
}
scripted_trigger fp1_funeral_longship_likes_magic = {
has_trait = lifestyle_mystic
has_trait_xp = {
trait = lifestyle_mystic
value >= 100
}
# Faith must consider this an actively good thing (since Norse paganism's complicated relationship with witchcraft _tended_ towards the negative).
faith = { has_doctrine_parameter = witchcraft_accepted }
}
# The family member is earmarked.
fp1_yearly.1061 = {
hidden = yes
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Germanic faith.
religion = religion:germanic_religion
# Shouldn't ever happen, but just in case, exempt sky burials so that the character is never buried twice.
NOT = {
faith = { has_doctrine_parameter = sky_burials_active }
}
# And we shouldn't really be erecting glorious mounds to long lives that were actually cut short too early.
age >= 30
# Must be significant in some way.
OR = {
highest_held_title_tier >= tier_duchy
piety_level >= high_prestige_level
prestige_level >= high_piety_level
# Monarch of Parties.
fp1_funeral_longship_likes_parties = yes
# Monarch of Duels.
fp1_funeral_longship_likes_duels = yes
# Monarch of Hunting.
fp1_funeral_longship_likes_hunting = yes
# Monarch of Magic.
fp1_funeral_longship_likes_magic = yes
}
# With a landed player heir of at least duchy tier, or close family, a soulmate, or best friend who's the same.
OR = {
player_heir ?= { fp1_funeral_longship_generic_mourner_trigger = yes }
any_close_family_member = { fp1_funeral_longship_generic_mourner_trigger = yes }
any_relation = {
type = soulmate
fp1_funeral_longship_generic_mourner_trigger = yes
}
any_relation = {
type = best_friend
fp1_funeral_longship_generic_mourner_trigger = yes
}
}
}
immediate = {
save_scope_as = ship_funeral_candidate
# Determine why they were a big deal.
## First check their title tier.
if = {
limit = { highest_held_title_tier = tier_duchy }
save_scope_value_as = {
name = reason_title
value = flag:duchy
}
}
else_if = {
limit = { highest_held_title_tier = tier_kingdom }
save_scope_value_as = {
name = reason_title
value = flag:kingdom
}
}
else_if = {
limit = { highest_held_title_tier = tier_empire }
save_scope_value_as = {
name = reason_title
value = flag:empire
}
}
## Then look at their prestige/piety levels.
if = {
limit = { prestige_level = high_prestige_level }
save_scope_value_as = {
name = reason_prestige
value = flag:high
}
}
else_if = {
limit = { prestige_level = very_high_prestige_level }
save_scope_value_as = {
name = reason_prestige
value = flag:very_high
}
}
else_if = {
limit = { prestige_level >= max_prestige_level }
save_scope_value_as = {
name = reason_prestige
value = flag:max
}
}
if = {
limit = { prestige_level = high_prestige_level }
save_scope_value_as = {
name = reason_piety
value = flag:high
}
}
else_if = {
limit = { prestige_level = very_high_prestige_level }
save_scope_value_as = {
name = reason_piety
value = flag:very_high
}
}
else_if = {
limit = { prestige_level >= max_prestige_level }
save_scope_value_as = {
name = reason_piety
value = flag:max
}
}
## And finally their aptness at certain lifestyles.
### Partying.
if = {
limit = { fp1_funeral_longship_likes_parties = yes }
save_scope_value_as = {
name = reason_lifestyle_partying
value = yes
}
}
### Hunting.
if = {
limit = { fp1_funeral_longship_likes_duels = yes }
save_scope_value_as = {
name = reason_lifestyle_duelling
value = yes
}
}
### Duels.
if = {
limit = { fp1_funeral_longship_likes_hunting = yes }
save_scope_value_as = {
name = reason_lifestyle_hunting
value = yes
}
}
### Magic.
if = {
limit = { fp1_funeral_longship_likes_magic = yes }
save_scope_value_as = {
name = reason_lifestyle_magickerationing
value = yes
}
}
# Next, determine who gets to hold the funeral.
## First, we compile a list.
if = {
limit = {
player_heir ?= { fp1_funeral_longship_generic_mourner_trigger = yes }
}
player_heir = { add_to_list = potential_mourners_list }
}
every_close_family_member = {
limit = { fp1_funeral_longship_generic_mourner_trigger = yes }
add_to_list = potential_mourners_list
}
every_relation = {
type = soulmate
limit = { fp1_funeral_longship_generic_mourner_trigger = yes }
add_to_list = potential_mourners_list
}
every_relation = {
type = best_friend
limit = { fp1_funeral_longship_generic_mourner_trigger = yes }
add_to_list = potential_mourners_list
}
## Then, we grab the person in the list with the most direct connection, preferring player heirs, levelled relationships, then close family, in that order. Players get a generic boost up this list.
ordered_in_list = {
list = potential_mourners_list
order_by = { value = fp1_funeral_longship_preferred_mourner_value }
save_scope_as = mourner
}
# Finally, fire an event for scope:mourner to inform them that a ship burial is available.
if = {
limit = { exists = scope:mourner }
scope:mourner = {
# Set the used character flag here rather than later, so that scope:mourner doesn't queue up multiple ship funerals due to a wave of sudden bereavements.
add_character_flag = {
flag = had_event_fp1_yearly_1062
days = 7300
}
trigger_event = {
id = fp1_yearly.1062
months = 2
}
}
}
}
}
# Inform scope:mourner of a valid ship burial.
fp1_yearly.1062 = {
type = character_event
title = fp1_yearly.1062.t
desc = fp1_yearly.1062.desc
theme = death
left_portrait = {
character = scope:mourner
animation = sadness
}
right_portrait = {
character = scope:ship_funeral_candidate
animation = personality_zealous
}
override_background = { reference = temple }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
# Must still be the same faith as scope:ship_funeral_candidate, for ease of loc and such.
faith = scope:ship_funeral_candidate.faith
}
# A small stone ship.
option = {
name = fp1_yearly.1062.a
trigger = {
can_make_expensive_purchase_trigger = { PRICE = medium_gold_value }
}
# Remove the appropriate amount of coin.
set_variable = {
name = ship_burial_reimbursement
value = medium_gold_value
}
remove_short_term_gold = medium_gold_value
# Set up the ship burial type scope.
save_scope_value_as = {
name = burial_type
value = flag:stone_small
}
# Inform & trigger next event.
custom_tooltip = fp1_yearly.1062.a.tt
trigger_event = {
id = fp1_yearly.1063
months = 2
}
stress_impact = {
generous = minor_stress_impact_loss
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 0.25
ai_greed = -0.25
ai_boldness = -0.25
}
modifier = { # Weight up for stress.
add = 10
has_trait = generous
}
modifier = { # Weight down for stress.
add = -10
has_trait = greedy
}
}
}
# A grand stone ship.
option = {
name = fp1_yearly.1062.b
trigger = {
can_make_expensive_purchase_trigger = { PRICE = major_gold_value }
}
# Remove the appropriate amount of coin.
set_variable = {
name = ship_burial_reimbursement
value = major_gold_value
}
remove_short_term_gold = major_gold_value
# Set up the ship burial type scope.
save_scope_value_as = {
name = burial_type
value = flag:stone_grand
}
# Inform & trigger next event.
custom_tooltip = fp1_yearly.1062.a.tt
trigger_event = {
id = fp1_yearly.1063
months = 2
}
stress_impact = {
generous = medium_stress_impact_loss
greedy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_boldness = 0.25
ai_zeal = 0.25
ai_greed = -0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = generous
}
modifier = { # Weight down for stress.
add = -20
has_trait = greedy
}
}
}
# An purpose-built ornate grave ship.
option = {
name = fp1_yearly.1062.c
trigger = {
can_make_expensive_purchase_trigger = { PRICE = massive_gold_value }
}
# Remove the appropriate amount of coin.
set_variable = {
name = ship_burial_reimbursement
value = massive_gold_value
}
remove_treasury_or_gold = massive_treasury_or_gold_value
# Set up the ship burial type scope.
save_scope_value_as = {
name = burial_type
value = flag:wooden_ornate
}
# Inform & trigger next event.
custom_tooltip = fp1_yearly.1062.a.tt
trigger_event = {
id = fp1_yearly.1063
months = 2
}
stress_impact = {
generous = major_stress_impact_loss
greedy = major_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_boldness = 0.5
ai_zeal = 0.5
ai_greed = -0.75
}
modifier = { # Weight up for stress.
add = 30
has_trait = generous
}
modifier = { # Weight down for stress.
add = -30
has_trait = greedy
}
}
}
# This is all *outrageously* expensive.
option = {
name = fp1_yearly.1062.d
# Lose prestige if you're related to scope:ship_funeral_candidate.
if = {
limit = {
OR = {
scope:ship_funeral_candidate.dynasty = scope:mourner.dynasty
scope:ship_funeral_candidate = { is_close_family_of = scope:mourner }
}
}
add_prestige = medium_prestige_loss
stress_impact = {
greedy = medium_stress_impact_loss
generous = medium_stress_impact_gain
}
}
# Else, take a stress hit.
else = {
stress_impact = {
base = medium_stress_gain
greedy = medium_stress_impact_loss
generous = medium_stress_impact_gain
}
}
# Stress_impact handled in above if statements.
ai_chance = {
base = 100
ai_value_modifier = {
ai_greed = 0.5
ai_boldness = -0.25
ai_zeal = -0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = greedy
}
modifier = { # Weight down for stress.
add = -20
has_trait = generous
}
}
}
}
scripted_effect fp1_funeral_longship_clear_variables_effect = {
remove_variable = candidate_achievement_count
remove_variable = ship_burial_reimbursement
}
fp1_yearly.1063 = {
type = character_event
title = fp1_yearly.1063.t
desc = {
desc = fp1_yearly.1063.desc.intro
# Notable features of scop:ship_burial_candidate block.
## Single achievement.
triggered_desc = {
trigger = { var:candidate_achievement_count = 1 }
desc = {
desc = fp1_yearly.1063.desc.achievements.single.intro
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_partying }
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_duelling }
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_hunting }
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_magickerationing }
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.single.outro
}
}
## Two achievements.
triggered_desc = {
trigger = { var:candidate_achievement_count = 2 }
desc = {
desc = fp1_yearly.1063.desc.achievements.double.intro
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_partying }
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_duelling }
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_hunting }
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_magickerationing }
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.double.connector
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_partying
NOT = { scope:primary_reason = flag:reason_partying }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_duelling
NOT = { scope:primary_reason = flag:reason_duelling }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_hunting
NOT = { scope:primary_reason = flag:reason_hunting }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_magickerationing
NOT = { scope:primary_reason = flag:reason_magickerationing }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.double.outro
}
}
## Three or more achievements.
triggered_desc = {
trigger = { var:candidate_achievement_count >= 3 }
desc = {
desc = fp1_yearly.1063.desc.achievements.triple.intro
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_partying }
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_duelling }
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_hunting }
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = { exists = scope:reason_lifestyle_magickerationing }
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
NOT = { scope:primary_reason = flag:reason_title }
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
NOT = { scope:primary_reason = flag:reason_prestige }
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
NOT = { scope:primary_reason = flag:reason_piety }
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_partying
NOT = { scope:primary_reason = flag:reason_partying }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_duelling
NOT = { scope:primary_reason = flag:reason_duelling }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_hunting
NOT = { scope:primary_reason = flag:reason_hunting }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_magickerationing
NOT = { scope:primary_reason = flag:reason_magickerationing }
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.triple.connector
first_valid = {
# Title tier.
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:duchy
NOR = {
scope:primary_reason = flag:reason_title
scope:secondary_reason = flag:reason_title
}
}
desc = fp1_yearly.1063.desc.achievements.title.duchy
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:kingdom
NOR = {
scope:primary_reason = flag:reason_title
scope:secondary_reason = flag:reason_title
}
}
desc = fp1_yearly.1063.desc.achievements.title.kingdom
}
triggered_desc = {
trigger = {
exists = scope:reason_title
scope:reason_title = flag:empire
NOR = {
scope:primary_reason = flag:reason_title
scope:secondary_reason = flag:reason_title
}
}
desc = fp1_yearly.1063.desc.achievements.title.empire
}
# Prestige level.
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:high
NOR = {
scope:primary_reason = flag:reason_prestige
scope:secondary_reason = flag:reason_prestige
}
}
desc = fp1_yearly.1063.desc.achievements.prestige.high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:very_high
NOR = {
scope:primary_reason = flag:reason_prestige
scope:secondary_reason = flag:reason_prestige
}
}
desc = fp1_yearly.1063.desc.achievements.prestige.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_prestige
scope:reason_prestige = flag:max
NOR = {
scope:primary_reason = flag:reason_prestige
scope:secondary_reason = flag:reason_prestige
}
}
desc = fp1_yearly.1063.desc.achievements.prestige.max
}
# Piety level.
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:high
NOR = {
scope:primary_reason = flag:reason_piety
scope:secondary_reason = flag:reason_piety
}
}
desc = fp1_yearly.1063.desc.achievements.piety.high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:very_high
NOR = {
scope:primary_reason = flag:reason_piety
scope:secondary_reason = flag:reason_piety
}
}
desc = fp1_yearly.1063.desc.achievements.piety.very_high
}
triggered_desc = {
trigger = {
exists = scope:reason_piety
scope:reason_piety = flag:max
NOR = {
scope:primary_reason = flag:reason_piety
scope:secondary_reason = flag:reason_piety
}
}
desc = fp1_yearly.1063.desc.achievements.piety.max
}
# Lifestyles.
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_partying
NOR = {
scope:primary_reason = flag:reason_partying
scope:secondary_reason = flag:reason_partying
}
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.partying
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_duelling
NOR = {
scope:primary_reason = flag:reason_duelling
scope:secondary_reason = flag:reason_duelling
}
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.duelling
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_hunting
NOR = {
scope:primary_reason = flag:reason_hunting
scope:secondary_reason = flag:reason_hunting
}
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.hunting
}
triggered_desc = {
trigger = {
exists = scope:reason_lifestyle_magickerationing
NOR = {
scope:primary_reason = flag:reason_magickerationing
scope:secondary_reason = flag:reason_magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.lifestyles.magickerationing
}
}
desc = fp1_yearly.1063.desc.achievements.triple.outro
}
}
# Burial type block.
## Small stone ship.
triggered_desc = {
trigger = { scope:burial_type = flag:stone_small }
desc = fp1_yearly.1063.desc.ship_stone_small
}
## Grand stone ship.
triggered_desc = {
trigger = { scope:burial_type = flag:stone_grand }
desc = fp1_yearly.1063.desc.ship_stone_grand
}
## Ornate wooden ship.
triggered_desc = {
trigger = { scope:burial_type = flag:wooden_ornate }
desc = fp1_yearly.1063.desc.ship_wood_ornate
}
desc = fp1_yearly.1063.desc.outro
}
theme = death
left_portrait = {
character = scope:mourner
animation = grief
}
right_portrait = {
character = scope:ship_funeral_candidate
animation = sadness
}
override_background = { reference = temple }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_even_at_war_adult = yes
# Must still be the same faith as scope:ship_funeral_candidate, for ease of loc and such.
faith = scope:ship_funeral_candidate.faith
}
on_trigger_fail = {
# Return invested monies.
send_interface_toast = {
title = fp1_yearly.1063.trigger_failure.tt
left_icon = scope:ship_funeral_candidate
add_gold = var:ship_burial_reimbursement
}
# Clear up variables.
fp1_funeral_longship_clear_variables_effect = yes
}
immediate = {
# Work out how many achievements scope:ship_funeral_candidate actually had.
set_variable = {
name = candidate_achievement_count
value = 0
}
## First, tier.
if = {
limit = { exists = scope:reason_title }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
## Then, prestige.
if = {
limit = { exists = scope:reason_prestige }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
## Next, piety.
if = {
limit = { exists = scope:reason_piety }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
## Finally, lifestyles.
if = {
limit = { exists = scope:reason_lifestyle_partying }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
if = {
limit = { exists = scope:reason_lifestyle_duelling }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
if = {
limit = { exists = scope:reason_lifestyle_hunting }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
if = {
limit = { exists = scope:reason_lifestyle_magickerationing }
change_variable = {
name = candidate_achievement_count
add = 1
}
}
# Flag reasons so that they don't repeat; due to variable issues, we just calc this every time.
# Primary reason.
## comment_folder = {
# Cycle through tier.
if = {
limit = { exists = scope:reason_title }
save_scope_value_as = {
name = primary_reason
value = flag:reason_title
}
}
# Then prestige.
else_if = {
limit = { exists = scope:reason_prestige }
save_scope_value_as = {
name = primary_reason
value = flag:reason_prestige
}
}
# Piety.
else_if = {
limit = { exists = scope:reason_piety }
save_scope_value_as = {
name = primary_reason
value = flag:reason_piety
}
}
# And lifestyles.
else_if = {
limit = { exists = scope:reason_lifestyle_partying }
save_scope_value_as = {
name = primary_reason
value = flag:reason_partying
}
}
else_if = {
limit = { exists = scope:reason_lifestyle_duelling }
save_scope_value_as = {
name = primary_reason
value = flag:reason_duelling
}
}
else_if = {
limit = { exists = scope:reason_lifestyle_hunting }
save_scope_value_as = {
name = primary_reason
value = flag:reason_hunting
}
}
else_if = {
limit = { exists = scope:reason_lifestyle_magickerationing }
save_scope_value_as = {
name = primary_reason
value = flag:reason_magickerationing
}
}
##}
# Secondary reason.
## Comment folder for easy organisation = {
# Cycle through tier.
if = {
limit = {
exists = scope:reason_title
NOT = { scope:primary_reason = flag:reason_title }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_title
}
}
# Then prestige.
else_if = {
limit = {
exists = scope:reason_prestige
NOT = { scope:primary_reason = flag:reason_prestige }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_prestige
}
}
# Piety.
else_if = {
limit = {
exists = scope:reason_piety
NOT = { scope:primary_reason = flag:reason_piety }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_piety
}
}
# And lifestyles.
else_if = {
limit = {
exists = scope:reason_lifestyle_partying
NOT = { scope:primary_reason = flag:reason_partying }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_partying
}
}
else_if = {
limit = {
exists = scope:reason_lifestyle_duelling
NOT = { scope:primary_reason = flag:reason_duelling }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_duelling
}
}
else_if = {
limit = {
exists = scope:reason_lifestyle_hunting
NOT = { scope:primary_reason = flag:reason_hunting }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_hunting
}
}
else_if = {
limit = {
exists = scope:reason_lifestyle_magickerationing
NOT = { scope:primary_reason = flag:reason_magickerationing }
}
save_scope_value_as = {
name = secondary_reason
value = flag:reason_magickerationing
}
}
##}
# If scope:ship_funeral_candidate is a hunter, set up a suitable place for them to have been hunting (for loc).
scope:ship_funeral_candidate = {
if = {
limit = {
hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 }
}
if = {
limit = { highest_held_title_tier >= tier_county }
primary_title = { save_scope_as = hunting_lands }
}
else = {
scope:mourner.primary_title = { save_scope_as = hunting_lands }
}
}
}
}
# Boats to boats, tumuli to tumuli.
option = {
name = fp1_yearly.1063.a
# Small stone ships give a modest chunk.
if = {
limit = { scope:burial_type = flag:stone_small }
add_prestige = minor_prestige_gain
}
# Grand stone ships give a decent chunk.
if = {
limit = { scope:burial_type = flag:stone_grand }
add_prestige = medium_prestige_gain
}
# Ornate wooden ships give a large chunk.
if = {
limit = { scope:burial_type = flag:wooden_ornate }
add_prestige = major_prestige_gain
}
# Stress relief is the same regardless of what level you opted for.
add_stress = major_stress_loss
# No extra stress impact for single-option events, usually.
ai_chance = {
# Only option.
base = 100
}
}
after = {
# Clear up remaining values on the character.
fp1_funeral_longship_clear_variables_effect = yes
}
}
##################################################
# Sparklingly Clean
# by Ewan Cowhig Croft
# 1071 - 1080
##################################################
# You decide to put a little extra effort into your appearance.
fp1_yearly.1071 = {
type = character_event
title = fp1_yearly.1071.t
desc = fp1_yearly.1071.desc
theme = physical_health
left_portrait = {
character = root
animation = happiness
}
override_background = { reference = bedchamber }
trigger = {
# DLC check.
has_fp1_dlc_trigger = yes
# Standard checks.
is_available_at_peace_adult = yes
is_healthy = yes
NOT = { has_character_flag = had_event_fp1_yearly_1071 }
is_landed = yes
# Filter to flavour-appropriate characters.
fp1_is_norse = yes
}
weight_multiplier = {
base = 1
# Weight up a bit for the healthy types.
modifier = {
add = 0.5
has_trait = diligent
}
modifier = {
add = 0.5
has_trait = whole_of_body
}
}
immediate = {
add_character_flag = {
flag = had_event_fp1_yearly_1071
days = 3650
}
}
# Hygiene is the key to a long life!
option = {
name = fp1_yearly.1071.a
# Add a modifier boosting health.
add_character_modifier = {
modifier = fp1_bathing_health_modifier
years = 10
}
stress_impact = {
diligent = medium_stress_impact_loss
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_energy = 0.75
ai_sociability = 0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
# I suppose I could take a little extra care...
option = {
name = fp1_yearly.1071.b
# Add a modifier boosting attraction.
add_character_modifier = {
modifier = fp1_bathing_attraction_modifier
years = 10
}
stress_impact = {
diligent = medium_stress_impact_loss
lazy = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = 0.75
ai_energy = 0.25
}
modifier = { # Weight up for stress.
add = 20
has_trait = diligent
}
modifier = { # Weight down for stress.
add = -20
has_trait = lazy
}
}
}
# Just the usual is fine.
option = {
name = fp1_yearly.1071.c
# Lose a bit of stress for taking it easy.
## Stress loss handled in stress_impact.
stress_impact = {
base = medium_stress_loss
lazy = medium_stress_impact_loss
diligent = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_sociability = -0.1
ai_energy = -0.5
}
modifier = { # Weight up for stress.
add = 20
has_trait = lazy
}
modifier = { # Weight down for stress.
add = -20
has_trait = diligent
}
}
}
}
##################################################
# Explorer from Phantom Islands
# by Ewan Cowhig Croft
# 1081 - 1090
##################################################
# An explorer of the Atlantic wishes to share their tales with you.
fp1_yearly.1081 = {
type = character_event
title = fp1_yearly.1081.t
desc = {
desc = fp1_yearly.1081.desc.intro
first_valid = {
triggered_desc = {
trigger = { scope:phantom_island = flag:greenland }
desc = fp1_yearly.1081.desc.greenland
}
triggered_desc = {
trigger = { scope:phantom_island = flag:vinland }
desc = fp1_yearly.1081.desc.vinland
}
triggered_desc = {
trigger = { scope:phantom_island = flag:antilia }
desc = fp1_yearly.1081.desc.antilia
}
triggered_desc = {
trigger = {
scope:phantom_island = flag:fortunate_isles
religion = religion:hellenism_religion
}
desc = fp1_yearly.1081.desc.fortunate_isles.hellenist
}
triggered_desc = {
trigger = { scope:phantom_island = flag:fortunate_isles }
desc = fp1_yearly.1081.desc.fortunate_isles.other
}
triggered_desc = {
trigger = { scope:phantom_island = flag:st_brendans_island }
desc = fp1_yearly.1081.desc.st_brendans_island
}
triggered_desc = {
trigger = {
scope:phantom_island = flag:isle_of_the_blessed
OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion }
}
desc = fp1_yearly.1081.desc.isle_of_the_blessed.christian
}
triggered_desc = {
trigger = { scope:phantom_island = flag:isle_of_the_blessed }
desc = fp1_yearly.1081.desc.isle_of_the_blessed.other
}
triggered_desc = {
trigger = { scope:phantom_island = flag:ard_majhulah }
desc = fp1_yearly.1081.desc.ard_majhulah
}
triggered_desc = {
trigger = { scope:phantom_island = flag:the_sticky_sea }
desc = fp1_yearly.1081.desc.the_sticky_sea
}
triggered_desc = {
trigger = { scope:phantom_island = flag:purple_islands }
desc = fp1_yearly.1081.desc.purple_islands
}
triggered_desc = {
trigger = { scope:phantom_island = flag:hy_brasil }
desc = fp1_yearly.1081.desc.hy_brasil
}
triggered_desc = {
trigger = { scope:phantom_island = flag:thule }
desc = fp1_yearly.1081.desc.thule
}
triggered_desc = {
trigger = {
scope:phantom_island = flag:great_ireland
religion = { is_in_family = rf_abrahamic }
}
desc = fp1_yearly.1081.desc.great_ireland.abrahamic
}
triggered_desc = {
trigger = { scope:phantom_island = flag:great_ireland }
desc = fp1_yearly.1081.desc.great_ireland.other
}
triggered_desc = {
trigger = { scope:phantom_island = flag:sunset_empire }
desc = fp1_yearly.1081.desc.sunset_empire
}
}
desc = fp1_yearly.1081.desc.outro
}
theme = friendly
left_portrait = {
character = root
animation = toast
triggered_animation = {
trigger = {
scope:phantom_island = flag:sunset_empire
has_trait = craven
}
animation = fear
}
}
right_portrait = {
character = scope:norse_explorer
animation = storyteller
}
override_background = { reference = study }
trigger = {
#DLC check.
has_fp1_dlc_trigger = yes
#No need for these character modifiers to appear in the wild and feel less unique.
is_ai = no
#Standard checks.
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_fp1_yearly_1081 }
#Must be North Germanic.
culture = { has_cultural_pillar = heritage_north_germanic }
#Has to keep their capital in general Scandinavian core sphere of influence.
capital_province = {
OR = {
geographical_region = world_europe_west
geographical_region = world_europe_north
geographical_region = world_europe_east
}
}
#The Norse must still be in their hyper-exploratory phase.
NOT = {
culture = { has_cultural_era_or_later = culture_era_high_medieval }
}
}
weight_multiplier = {
base = 1
#Learned characters attract people with curious stories.
modifier = {
add = 1
has_trait = scholar
}
modifier = {
add = 1
learning >= very_high_skill_rating
}
}
immediate = {
#Once per lifetime.
add_character_flag = { flag = had_event_fp1_yearly_1081 }
#Select which phantom island we're looking at!
##12 items with an 8.3% chance each to be selected, with the remaining 0.4% going to the thirteenth item: Sunset Invasion.
random_list = {
#Greenland
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:greenland
}
}
#Vinland
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:vinland
}
}
#Antilia
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:antilia
}
#If Portugal exists, then obviously they were time-travelling Portuguese.
if = {
limit = {
is_target_in_global_variable_list = {
name = unavailable_unique_decisions
target = flag:form_portugal_decision
}
}
culture:portuguese = { save_scope_as = antilia_culture }
}
#If Galician exists, they must have been from Galicia!
else_if = {
limit = { has_global_variable = visigothic_culture_split }
culture:galician = { save_scope_as = antilia_culture }
}
#Otherwise, bog-standard Visigoths.
else = {
culture:visigothic = { save_scope_as = antilia_culture }
}
}
#Fortunate Isles
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:fortunate_isles
}
}
#St. Brendan's Island
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:st_brendans_island
}
}
#Isle of the Blessed
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:isle_of_the_blessed
}
}
#Ard Majhūlah
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:ard_majhulah
}
}
#The Sticky Sea
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:the_sticky_sea
}
}
#Purple Islands
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:purple_islands
}
}
#Hy Brasil
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:hy_brasil
}
}
#Thule
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:thule
}
}
#Great Ireland
83 = {
save_scope_value_as = {
name = phantom_island
value = flag:great_ireland
}
}
#Sunset Empire
4 = {
save_scope_value_as = {
name = phantom_island
value = flag:sunset_empire
}
}
}
#Create an explorer, selecting an appropriate template according to whether or not their story is truthful.
if = {
limit = {
OR = {
scope:phantom_island = flag:greenland
scope:phantom_island = flag:purple_islands
scope:phantom_island = flag:sunset_empire #Mostly here just to freak people out for funsies.
}
#Technically, Vinland & the Sargasso Sea are real locations as well, but our loc clearly indicates that the explorer has never been there, and is repeating second-hand tales at best.
}
create_character = {
location = root.capital_province
template = fp1_truthful_explorer_character
save_scope_as = norse_explorer
}
}
else = {
create_character = {
location = root.capital_province
template = fp1_deceitful_explorer_character
save_scope_as = norse_explorer
}
}
}
#Memorise the interesting trivia.
option = {
name = fp1_yearly.1081.a
#Nice little diplo modifier.
add_character_modifier = {
modifier = phantom_island_trivia_fp1_modifier
years = 20
}
stress_impact = {
humble = minor_stress_impact_loss
arrogant = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_boldness = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = humble
}
modifier = { #Weight down for stress.
add = -10
has_trait = arrogant
}
}
}
#Poke holes in the story.
option = {
name = fp1_yearly.1081.b
#Nice little intrigue modifier.
add_character_modifier = {
modifier = phantom_island_critique_fp1_modifier
years = 20
}
stress_impact = {
paranoid = minor_stress_impact_loss
trusting = minor_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_rationality = 0.25
ai_compassion = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = paranoid
}
modifier = { #Weight down for stress.
add = -10
has_trait = trusting
}
}
}
#Wish them well and on their way.
option = {
name = {
trigger = {
NOT = { scope:phantom_island = flag:sunset_empire }
}
text = fp1_yearly.1081.c
}
name = {
trigger = { scope:phantom_island = flag:sunset_empire }
text = fp1_yearly.1081.c.sunset_empire
}
# Assuming you don't have Aztecs, then get a solid bit of stress relief.
if = {
limit = {
NOT = { scope:phantom_island = flag:sunset_empire }
}
stress_impact = {
base = major_stress_loss
trusting = minor_stress_impact_loss
paranoid = minor_stress_impact_gain
}
}
# Otherwise...
else = {
stress_impact = {
base = major_stress_gain
trusting = minor_stress_impact_loss
paranoid = minor_stress_impact_gain
}
}
# Stress impact handled in above if blocks.
ai_chance = {
base = 100
ai_value_modifier = {
ai_compassion = 0.25
ai_energy = -0.25
}
modifier = { #Weight up for stress.
add = 10
has_trait = trusting
}
modifier = { #Weight down for stress.
add = -10
has_trait = paranoid
}
}
}
after = {
#Dispose of our explorer.
scope:norse_explorer = {
hidden_effect = {
death = { death_reason = death_vanished }
}
}
}
}