N3OW_Western_eastern_europe/events/dlc/fp2/fp2_struggle_events.txt
2026-03-03 23:27:11 +00:00

11748 lines
280 KiB
Text

namespace = fp2_struggle
### SYSTEM EVENTS #################################################################
## # Parameter Events
## 0001 - 0010 VIP spontaneous relationship management.
## 0011 - 0040 Struggle VIPs spontaneously develop negative relationships with each other.
## 0041 - 0070 Struggle VIPs spontaneously develop postive relationships with each other.
## # Other Events
## 0501 - 0510 Struggle Intro Events
## 0900 - 0999 Struggle ending decision events
### EVENT LIST ####################################################################
## XXXX - XXXX YYY by ZZZ
## 1000 - 1000 Stoking the Fire by Ola Jentzsch
## 1001 - 1001 War Widows by Ola Jentzsch
## 1002 - 1002 Andalusian Advancements by Ola Jentzsch
## 1010 - 1012 Soul of Iron by Ola Jentzsch
## 1020 - 1020 Death of a Councilman by Ola Jentzsch
## 1050 - 1050 The Vision by Ola Jentzsch
## 2000 - 2000 Disorderly Market by Hugo Cortell
## 2001 - 2002 Desperate Villagers Seek New Lord by Hugo Cortell
## 2003 - 2003 Lost Migratory Birds by Hugo Cortell
## 2004 - 2005 Ship building event by Hugo Cortell
## 2006 - 2006 The Borders of Faith by Hugo Cortell
## 2007 - 2007 Castle Worthy of Iberia by Hugo Cortell
## 2008 - 2008 Misdeeds of The Chaplain by Hugo Cortell
## 2009 - 2012 Catching Thieves of Myth by Hugo Cortell
## 2013 - 2014 The Secret to Freedom by Hugo Cortell
## 2015 - 2016 Letter on The Back by Hugo Cortell
## 2021 - 2022 RETURN OF THE THIEF KING by Hugo Cortell
## 3001 - 3010 The Price of War by Veronica Pazos
## 3011 - 3020 Order of the Hatchet by Veronica Pazos
## 3021 - 3030 The Wrath of Heaven by Veronica Pazos
###################################################################################
# Setting AI Intent
fp2_struggle.0003 = {
hidden = yes
scope = none
scope = struggle
trigger = { # Should not need this, but, redundancy check!
exists = struggle:iberian_struggle
struggle:iberian_struggle = { any_involved_ruler = { } } # For when the conflict is ongoing but nobody is left to fight it
}
immediate = {
# prepare needed variables; they will be destroyed at the end of the immediate
set_variable = {
name = agents_for_escalation
value = 0
}
set_variable = {
name = agents_for_deescalation
value = 0
}
# Go through the characters to distribute them between the potential transitions
struggle:iberian_struggle = {
every_involved_ruler = {
limit = { is_alive = yes }
#######################
# Play cue track
######################
if = {
limit = { is_ai = no }
play_music_cue = "mx_Struggle_Opening"
}
#######################
# Check existing flags
######################
if = {
limit = { has_character_flag = agenda_towards_escalation }
root = {
change_variable = {
name = agents_for_escalation
add = 1
}
}
}
else_if = {
limit = { has_character_flag = agenda_towards_deescalation }
root = {
change_variable = {
name = agents_for_deescalation
add = 1
}
}
}
else = { # Set a flag
#############################
# Current Phase: Opportunity
#############################
if = {
limit = { root = { is_struggle_phase = struggle_iberia_phase_opportunity } }
random_list = {
# Working towards Hostility
# It should be for characters looking for direct conflicts and domination, with the will and ability to expand their realms
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = hostility
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Conciliation
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = conciliation
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Hostility
#############################
if = {
limit = { root = { is_struggle_phase = struggle_iberia_phase_hostility } }
random_list = {
# Working towards Hostility: it means that the character wants to stay in
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = hostility
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Compromise
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Compromise
#############################
if = {
limit = { root = { is_struggle_phase = struggle_iberia_phase_compromise } }
random_list = {
# Working towards Opportunity
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = opportunity
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Compromise: they want to stay in the same phase
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Conciliation
#############################
if = {
limit = { root = { is_struggle_phase = struggle_iberia_phase_conciliation } }
random_list = {
# Working towards Compromise
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Conciliation: they want to stay in the same phase
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = conciliation
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
}
}
}
# Clean variables
remove_variable = agents_for_escalation
remove_variable = agents_for_deescalation
}
}
# Set AI Intent on join
fp2_struggle.004 = {
hidden = yes
scope = none
immediate = {
set_variable = {
name = agents_for_escalation
value = 0
}
set_variable = {
name = agents_for_deescalation
value = 0
}
############################
# Update the variables
############################
every_character_struggle = {
every_involved_ruler = {
limit = { is_alive = yes }
if = {
limit = { has_character_flag = agenda_towards_escalation }
root = {
change_variable = {
name = agents_for_escalation
add = 1
}
}
}
else_if = {
limit = { has_character_flag = agenda_towards_deescalation }
root = {
change_variable = {
name = agents_for_deescalation
add = 1
}
}
}
}
}
if = {
limit = {
NOR = {
has_character_flag = agenda_towards_escalation
has_character_flag = agenda_towards_deescalation
}
}
#############################
# Current Phase: Opportunity
#############################
if = {
limit = { any_character_struggle = { is_struggle_phase = struggle_iberia_phase_opportunity } }
random_list = {
# Working towards Hostility
# It should be for characters looking for direct conflicts and domination, with the will and ability to expand their realms
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = hostility
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Conciliation
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = conciliation
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Hostility
#############################
if = {
limit = { any_character_struggle = { is_struggle_phase = struggle_iberia_phase_hostility } }
random_list = {
# Working towards Hostility: it means that the character wants to stay in
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = hostility
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Compromise
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Compromise
#############################
if = {
limit = { any_character_struggle = { is_struggle_phase = struggle_iberia_phase_compromise } }
random_list = {
# Working towards Opportunity
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = opportunity
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Compromise: they want to stay in the same phase
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
#############################
# Current Phase: Conciliation
#############################
if = {
limit = { any_character_struggle = { is_struggle_phase = struggle_iberia_phase_conciliation } }
random_list = {
# Working towards Compromise
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = compromise
INTENT = escalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = escalation
}
}
# Working towards Conciliation: they want to stay in the same phase
100 = {
# Odds modifiers
fp2_struggle_set_ai_agenda_common_modifiers = {
PHASE = conciliation
INTENT = deescalation
}
# Apply effects
fp2_struggle_apply_ai_agenda_effect = {
INTENT = deescalation
}
}
}
}
}
# Clean variables
remove_variable = agents_for_escalation
remove_variable = agents_for_deescalation
}
}
###################################
# Iberian Struggle Intro Events
# 0501 - 599
###################################
fp2_struggle.0501 = { # Fullscreen Intro Event
type = character_event
window = fullscreen_event
title = fp2_struggle.0501.t
desc = {
desc = fp2_struggle.0501.desc
first_valid = {
triggered_desc = {
trigger = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
}
}
desc = fp2_struggle.0501.desc.involved
}
triggered_desc = {
trigger = {
any_character_struggle = {
involvement = interloper
is_struggle_type = iberian_struggle
}
}
desc = fp2_struggle.0501.desc.interloper
}
}
}
theme = realm
trigger = { # we need to prevent this from firing for all players when a new player joins in MP
is_ai = no
NOT = { has_character_flag = fp2_struggle_intro_event_flag }
fp2_character_any_involvement_iberian_struggle_trigger = yes
}
override_background = { reference = fp2_fullscreen_intro }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" }
cooldown = { years = 100 }
widgets = {
widget = {
gui = "event_window_widget_struggle_info"
container = "dynamic_content_widget"
controller = struggle_info
setup_scope = { struggle:iberian_struggle = { save_scope_as = struggle } }
}
}
immediate = {
play_music_cue = "mx_Struggle_Opening"
add_character_flag = fp2_struggle_intro_event_flag
save_scope_value_as = {
name = start
value = yes
}
}
option = {
name = fp2_struggle.0501.a
clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select"
}
}
###################################
# Struggle Endings
# by Joe Parkin
# 0900-0912
###################################
fp2_struggle.0900 = { # Hostility
type = character_event
window = fullscreen_event
title = fp2_struggle.0900.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:basque
any_parent_culture = { this = culture:basque }
has_cultural_pillar = language_basque
}
}
}
desc = fp2_struggle.0900.opening.basque
}
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:andalusian
any_parent_culture = { this = culture:andalusian }
has_cultural_pillar = language_arabic
}
}
}
desc = fp2_struggle.0900.opening.andalusian
}
triggered_desc = {
trigger = {
culture = { has_cultural_pillar = heritage_iberian }
}
desc = fp2_struggle.0900.opening.iberian
}
desc = fp2_struggle.0900.opening
}
desc = fp2_struggle.0900.desc
}
theme = court
override_background = { reference = fp2_fullscreen_hostility }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
# Add all involved rulers to a list, for ping event
play_music_cue = "mx_Struggle_ending_hostility"
fp2_stuggle_ending_involved_list_effect = yes
give_nickname = nick_the_conquistador
dynasty = { add_dynasty_prestige = 10000 }
}
# Faith victory
option = {
name = fp2_struggle.0900.a
if = {
limit = { exists = house }
house = {
add_house_modifier = {
modifier = fp2_struggle_hostility_house_faith_modifier
}
}
}
# Piety reward for faith victory
add_piety = 1000
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_holy_cb_tt
custom_tooltip = fp2_struggle_hostility_conversion_holy_tt
stress_impact = {
cynical = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 1
}
}
}
# Culture victory
option = {
name = fp2_struggle.0900.b
# Renown reward for culture victory
if = {
limit = { exists = house }
dynasty = { add_dynasty_prestige = 1000 }
house = {
add_house_modifier = {
modifier = fp2_struggle_hostility_house_culture_modifier
}
}
}
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_culture_cb_tt
custom_tooltip = fp2_struggle_hostility_conversion_culture_tt
# All Involved cultures lose acceptance of each other
custom_tooltip = {
text = fp2_struggle_hostility_culture_tt
fp2_struggle_hostility_cultural_acceptance_effect = yes
}
stress_impact = {
humble = medium_stress_impact_gain
}
ai_chance = {
base = 100
}
}
# Combined victory
option = {
name = fp2_struggle.0900.c
# Reduced renown and piety rewards for combined
if = {
limit = { exists = house }
house = {
add_house_modifier = {
modifier = fp2_struggle_hostility_house_combined_modifier
years = 200
}
}
}
add_prestige = 3000
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_holy_cb_tt
custom_tooltip = culture_parameter_cb_lower_piety_level_requirement
custom_tooltip = fp2_struggle_hostility_culture_cb_tt
custom_tooltip = fp2_struggle_hostility_conversion_holy_tt
custom_tooltip = fp2_struggle_hostility_conversion_culture_tt
# All Involved cultures lose acceptance of each other
custom_tooltip = {
text = fp2_struggle_hostility_culture_large_tt
fp2_struggle_hostility_cultural_acceptance_large_effect = yes
}
stress_impact = {
humble = medium_stress_impact_gain
cynical = medium_stress_impact_gain
}
ai_chance = {
base = 100
ai_value_modifier = {
ai_zeal = 2
ai_boldness = 1
}
}
}
after = {
# Notify & End Struggle
save_scope_as = fp2_loc_struggle_ender # Loc used to use root, this fixes it
every_player = {
limit = { fp2_does_this_player_care_about_the_fate_of_iberia = yes } # Needs to be checked before the struggle ends due to race condition issues
add_to_list = player_to_notify # Making a list so stuff is tiggered after the struggle ends, to make extra sure I don't break anything.
}
struggle:iberian_struggle = { end_struggle = struggle_iberia_ending_hostility_decision }
every_in_list = { # Then we *actually* notify palyers, making sure the struggle has already ended
list = player_to_notify
trigger_event = fp2_struggle.0910
}
}
}
fp2_struggle.0910 = {
type = character_event
window = fullscreen_event
title = fp2_struggle.0900.t
desc = {
first_valid = {
triggered_desc = {
trigger = { is_in_list = struggle_involvees }
desc = fp2_struggle.0910.opening.involved
}
desc = fp2_struggle.0910.opening
}
desc = fp2_struggle.0910.desc
first_valid = {
triggered_desc = {
trigger = {
scope:struggle_ender.house = { has_house_modifier = fp2_struggle_hostility_house_faith_modifier }
}
desc = fp2_struggle.0910.closing.faith
}
triggered_desc = {
trigger = {
scope:struggle_ender.house = { has_house_modifier = fp2_struggle_hostility_house_culture_modifier }
}
desc = fp2_struggle.0910.closing.culture
}
desc = fp2_struggle.0910.closing.combined
}
}
theme = court
override_background = { reference = fp2_fullscreen_hostility }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
play_music_cue = "mx_Struggle_ending_hostility"
##### Major Effects #####
show_as_tooltip = {
scope:struggle_ender = {
#dynasty = { add_dynasty_prestige = 10000 }
fp2_struggle_hostility_ender_effect = yes
}
}
# Hispania is available!
custom_tooltip = fp2_struggle_can_create_empire_of_hispania_tt
# Choose Holy War boost, Culture War boost, or both
scope:struggle_ender.house = {
switch = {
trigger = has_house_modifier
fp2_struggle_hostility_house_faith_modifier = {
show_as_tooltip = { add_house_modifier = fp2_struggle_hostility_house_faith_modifier }
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_holy_cb_tt
}
fp2_struggle_hostility_house_culture_modifier = {
show_as_tooltip = { add_house_modifier = fp2_struggle_hostility_house_culture_modifier }
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_culture_cb_tt
custom_tooltip = fp2_struggle_hostility_culture_tt
}
fp2_struggle_hostility_house_combined_modifier = {
show_as_tooltip = { add_house_modifier = fp2_struggle_hostility_house_combined_modifier }
custom_description_no_bullet = { text = fp2_struggle_house_tt }
custom_tooltip = fp2_struggle_hostility_holy_cb_tt
custom_tooltip = fp2_struggle_hostility_culture_cb_tt
custom_tooltip = fp2_struggle_hostility_culture_large_tt
}
}
}
}
# Ok
option = {
name = {
text = fp2_struggle.0910.a
trigger = { is_in_list = struggle_involvees }
}
name = {
text = fp2_struggle.0910.b
trigger = {
NOT = { is_in_list = struggle_involvees }
}
}
}
}
fp2_struggle.0901 = { # Compromise
type = character_event
window = fullscreen_event
title = fp2_struggle.0901.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:basque
any_parent_culture = { this = culture:basque }
has_cultural_pillar = language_basque
}
}
}
desc = fp2_struggle.0900.opening.basque
}
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:andalusian
any_parent_culture = { this = culture:andalusian }
has_cultural_pillar = language_arabic
}
}
}
desc = fp2_struggle.0900.opening.andalusian
}
triggered_desc = {
trigger = {
culture = { has_cultural_pillar = heritage_iberian }
}
desc = fp2_struggle.0900.opening.iberian
}
desc = fp2_struggle.0900.opening
}
desc = fp2_struggle.0901.desc
}
theme = court
override_background = { reference = fp2_fullscreen_compromise }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
play_music_cue = "mx_Struggle_ending_compromise"
# Independent/Split De Jure Duchies will become De Jure Kingdoms
if = {
limit = {
title:e_spain = {
any_in_de_jure_hierarchy = { fp2_struggle_ending_compromise_independent_duchy_trigger = yes }
}
}
custom_tooltip = {
text = fp2_struggle_compromise_create_new_kingdoms_tt
fp2_struggle_compromise_duchies_to_kingdoms_effect = yes
}
}
# Move duchies to right kingdoms
fp2_struggle_compromise_transfer_duchies_effect = yes
# Turn kingdoms to empires
fp2_struggle_compromise_kingdoms_to_empires_effect = yes
# distribute small kingdoms
fp2_struggle_compromise_distribute_kingdoms_to_neighbouring_empires_effect = yes
# assign the new title to existing characters
fp2_struggle_compromise_distribute_the_actual_titles = yes
# Set up truces
fp2_struggle_compromise_truce_effect = yes
##### Major Effects #####
fp2_struggle_compromise_ender_effect = yes
# Tooltips!
fp2_struggle_compromise_tooltip_effect = yes
##### Minor Effects #####
# Self-sufficiency modifiers for each independent realm
fp2_struggle_compromise_modifier_rewards_effect = yes
set_global_variable = {
name = fp2_struggle_compromise_ending
value = yes
}
# Add all involved rulers to a list, for ping event
fp2_stuggle_ending_involved_list_effect = yes
}
# Ok
option = {
name = fp2_struggle.0901.a
if = {
limit = {
any_in_list = {
list = kingdom_empire
this = root.primary_title
}
}
custom_tooltip = fp2_struggle.0901.tt
}
}
after = {
stress_impact = {
arrogant = medium_stress_impact_gain
}
# Notify & End Struggle
save_scope_as = fp2_loc_struggle_ender # Loc used to use root, this fixes it
every_player = {
limit = { fp2_does_this_player_care_about_the_fate_of_iberia = yes } # Needs to be checked before the struggle ends due to race condition issues
add_to_list = player_to_notify # Making a list so stuff is tiggered after the struggle ends, to make extra sure I don't break anything.
}
struggle:iberian_struggle = { end_struggle = struggle_iberia_ending_compromise_decision }
every_in_list = { # Then we *actually* notify palyers, making sure the struggle has already ended
list = player_to_notify
trigger_event = fp2_struggle.0911
}
}
}
fp2_struggle.0911 = {
type = character_event
window = fullscreen_event
title = fp2_struggle.0901.t
desc = {
first_valid = {
triggered_desc = {
trigger = { is_in_list = struggle_involvees }
desc = fp2_struggle.0910.opening.involved
}
desc = fp2_struggle.0910.opening
}
desc = fp2_struggle.0911.desc
}
theme = court
override_background = { reference = fp2_fullscreen_compromise }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
play_music_cue = "mx_Struggle_ending_compromise"
##### Major Effects #####
show_as_tooltip = {
scope:struggle_ender = { fp2_struggle_compromise_ender_effect = yes }
}
# Independent/Split De Jure Duchies will become De Jure Kingdoms
custom_tooltip = fp2_struggle_compromise_create_new_kingdoms_tt
# RIP Hispania
fp2_struggle_compromise_tooltip_effect = yes
##### Minor Effects #####
if = {
limit = {
any_in_list = {
list = kingdom_empire
OR = {
this = root.primary_title
this = root.primary_title.de_jure_liege
this = root.primary_title.de_jure_liege.de_jure_liege
}
}
}
custom_tooltip = fp2_struggle.0901.tt
}
if = {
limit = { is_in_list = struggle_involvees }
show_as_tooltip = {
fp2_struggle_compromise_modifier_rewards_personal_house_effect = yes
fp2_struggle_compromise_modifier_rewards_personal_county_effect = yes
}
}
}
# Ok
option = {
name = {
text = fp2_struggle.0911.a
trigger = { is_in_list = struggle_involvees }
}
name = {
text = fp2_struggle.0910.b
trigger = {
NOT = { is_in_list = struggle_involvees }
}
}
}
}
fp2_struggle.0902 = { # Conciliation
type = character_event
window = fullscreen_event
title = fp2_struggle.0902.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:basque
any_parent_culture = { this = culture:basque }
has_cultural_pillar = language_basque
}
}
}
desc = fp2_struggle.0900.opening.basque
}
triggered_desc = {
trigger = {
culture = {
OR = {
this = culture:andalusian
any_parent_culture = { this = culture:andalusian }
has_cultural_pillar = language_arabic
}
}
}
desc = fp2_struggle.0900.opening.andalusian
}
triggered_desc = {
trigger = {
culture = { has_cultural_pillar = heritage_iberian }
}
desc = fp2_struggle.0900.opening.iberian
}
desc = fp2_struggle.0900.opening
}
desc = fp2_struggle.0902.desc
}
theme = court
override_background = { reference = fp2_fullscreen_conciliation }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
play_music_cue = "mx_Struggle_ending_conciliation"
set_global_variable = {
name = fp2_struggle_conciliation_ending
value = yes
}
# Add all involved rulers to a list, for ping event
fp2_stuggle_ending_involved_list_effect = yes
# Add all involved cultures with counties to a list, for marriage and holy war checks
fp2_struggle_ending_culture_list_effect = yes
# Change cultural acceptance
fp2_struggle_conciliation_cultural_acceptance_effect = yes
##### Major Effects #####
fp2_struggle_conciliation_ender_effect = yes
fp2_struggle_conciliation_tooltip_effect = yes
fp2_struggle_conciliation_modifier_rewards_effect = yes
}
#
option = {
name = fp2_struggle.0902.a
}
after = {
stress_impact = {
arrogant = medium_stress_impact_gain
zealous = medium_stress_impact_gain
}
# Notify & End Struggle
save_scope_as = fp2_loc_struggle_ender # Loc used to use root, this fixes it
every_player = {
limit = { fp2_does_this_player_care_about_the_fate_of_iberia = yes } # Needs to be checked before the struggle ends due to race condition issues
add_to_list = player_to_notify # Making a list so stuff is tiggered after the struggle ends, to make extra sure I don't break anything.
}
struggle:iberian_struggle = { end_struggle = struggle_iberia_ending_conciliation_decision }
every_in_list = { # Then we *actually* notify palyers, making sure the struggle has already ended
list = player_to_notify
trigger_event = fp2_struggle.0912
}
}
}
fp2_struggle.0912 = {
type = character_event
window = fullscreen_event
title = fp2_struggle.0902.t
desc = {
first_valid = {
triggered_desc = {
trigger = { is_in_list = struggle_involvees }
desc = fp2_struggle.0910.opening.involved
}
desc = fp2_struggle.0910.opening
}
desc = fp2_struggle.0912.desc
}
theme = court
override_background = { reference = fp2_fullscreen_conciliation }
override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_end_animate" }
immediate = {
play_music_cue = "mx_Struggle_ending_conciliation"
##### Major Effects #####
show_as_tooltip = {
scope:struggle_ender = { fp2_struggle_conciliation_ender_effect = yes }
}
fp2_struggle_conciliation_tooltip_effect = yes
##### Minor Effects #####
# All involved rulers gain diff culture opinion and learn language scheme power
if = {
limit = { is_in_list = struggle_involvees }
show_as_tooltip = { fp2_struggle_conciliation_modifier_rewards_personal_effect = yes }
}
}
# Ok
option = {
name = {
text = fp2_struggle.0912.a
trigger = { is_in_list = struggle_involvees }
}
name = {
text = fp2_struggle.0910.b
trigger = {
NOT = { is_in_list = struggle_involvees }
}
}
}
}
###################################
# Stoking the Fire
# By Ola Jentzsch
###################################
scripted_trigger fp2_struggle_1000_tension_county_trigger = {
is_landless_type_title = no
any_county_province = { geographical_region = world_europe_west_iberia }
faith = { save_temporary_scope_as = compare_faith }
root = {
faith = {
faith_hostility_level = { target = scope:compare_faith value > faith_astray_level }
}
}
}
scripted_trigger fp2_struggle_1000_tension_councillor_trigger = {
faith = { this = root.faith }
is_available_healthy_ai_adult = yes
OR = {
has_trait = zealous
has_trait = wrathful
has_trait = deceitful
has_trait = sadistic
has_trait = holy_warrior
has_trait = callous
}
NOR = {
has_trait = compassionate
has_trait = just
}
}
fp2_struggle.1000 = {
type = character_event
title = fp2_struggle.1000.t
desc = fp2_struggle.1000.desc
theme = dread
left_portrait = {
character = root
animation = stress
}
right_portrait = {
character = scope:tension_councillor
animation = scheme
}
trigger = {
has_fp2_dlc_trigger = yes
fp2_character_involved_in_struggle_trigger = yes
custom_description = {
text = empty_spooky_trigger #This is entirely pointless, but code likes it, so ghost away!
any_held_county = { fp2_struggle_1000_tension_county_trigger = yes }
OR = {
any_councillor = { fp2_struggle_1000_tension_councillor_trigger = yes }
any_vassal = { fp2_struggle_1000_tension_councillor_trigger = yes }
exists = cp:councillor_marshal
}
}
OR = {
capital_province = { geographical_region = world_europe_west_iberia }
culture = { has_cultural_pillar = heritage_iberian }
}
}
cooldown = { #this shouldn't fire too often
years = 50
}
immediate = { #We need a province and a suitable councillor; this fixes that.
random_held_county = {
limit = { fp2_struggle_1000_tension_county_trigger = yes }
save_scope_as = tension_county
}
if = {
limit = {
any_councillor = {
fp2_struggle_1000_tension_councillor_trigger = yes
}
}
random_councillor = {
limit = {
fp2_struggle_1000_tension_councillor_trigger = yes
}
save_scope_as = tension_councillor
}
}
else_if = {
limit = {
any_vassal = {
fp2_struggle_1000_tension_councillor_trigger = yes
}
}
random_vassal = {
limit = {
fp2_struggle_1000_tension_councillor_trigger = yes
}
save_scope_as = tension_councillor
}
}
else = {
random_councillor = {
limit = {
has_council_position = councillor_marshal
}
save_scope_as = tension_councillor
}
}
if = { #this code checks if there is an eligible person for the 4th option
limit = {
any_vassal = {
is_available_healthy_ai_adult = yes
faith = scope:tension_county.faith
}
}
random_vassal = {
limit = {
is_available_healthy_ai_adult = yes
faith = scope:tension_county.faith
}
save_scope_as = minority_courtier
}
}
else_if = {
limit = {
any_courtier = {
is_available_healthy_ai_adult = yes
faith = scope:tension_county.faith
}
}
random_courtier = {
limit = {
is_available_healthy_ai_adult = yes
faith = scope:tension_county.faith
}
save_scope_as = minority_courtier
}
}
}
option = { #Let us spread some hatred...discreetly.
name = fp2_struggle.1000.a
ai_chance = { #Cruel and fanatical characters pick this option
base = 10
ai_value_modifier = {
ai_zeal = 1
ai_vengefulness = 0.5
ai_compassion = -1
ai_honor = -1
}
}
stress_impact = {
# Righteous characters find this a very unappealing option.
compassionate = medium_stress_impact_gain
gallant = medium_stress_impact_gain
honest = medium_stress_impact_gain
just = medium_stress_impact_gain
paragon = medium_stress_impact_gain
# As do lazy ones.
lazy = minor_stress_impact_gain
}
scope:tension_councillor = {
add_opinion = {
target = root
opinion = 10
modifier = took_my_advice_opinion
}
}
add_character_modifier = {
modifier = fanatical_recruits_modifier
years = 10
}
duel = { #You try to create a hate campaign - and get away with it.
skill = intrigue
value = average_skill_rating
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
send_interface_toast = {
title = stoke_tension_toast.success
left_icon = root
add_dread = minor_dread_gain
scope:tension_county = {
add_county_modifier = {
modifier = riots_and_murders_province_modifier
years = 5
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
send_interface_toast = {
title = stoke_tension_toast.failure
left_icon = root
add_character_modifier = {
modifier = hate_monger_modifier
years = 10
}
scope:tension_county = {
add_county_modifier = {
modifier = riots_and_murders_province_modifier
years = 5
}
}
}
}
}
}
option = { #I trust you to handle it
name = fp2_struggle.1000.b
trigger = {
intrigue <= medium_skill_rating
}
show_unlock_reason = no
ai_chance = { #Cruel and fanatical characters pick this option
base = 10
ai_value_modifier = {
ai_zeal = 0.5
ai_rationality = 0.2
ai_compassion = -0.5
ai_honor = -1
}
}
stress_impact = {
# Righteous characters find this a very unappealing option.
compassionate = medium_stress_impact_gain
gallant = medium_stress_impact_gain
honest = medium_stress_impact_gain
just = medium_stress_impact_gain
paragon = medium_stress_impact_gain
# As do lazy ones.
lazy = miniscule_stress_impact_gain
}
if = {
limit = {
intrigue <= medium_skill_rating
}
custom_tooltip = bad_intrigue.tt
}
scope:tension_councillor = {
if = {
limit = {
intrigue >= average_skill_level
}
add_opinion = {
target = root
opinion = 10
modifier = trusted_me_opinion
}
}
else = {
add_opinion = {
target = root
opinion = -10
modifier = unfair_expectations_opinion
}
}
}
add_character_modifier = {
modifier = fanatical_recruits_modifier
years = 10
}
scope:tension_councillor = {
duel = {
skill = intrigue
value = average_skill_rating
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
root = {
send_interface_toast = {
title = delegated_stoke_tension_toast.success
left_icon = scope:tension_councillor
scope:tension_county = {
add_county_modifier = {
modifier = riots_and_murders_province_modifier
years = 5
}
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
root = {
send_interface_toast = {
title = stoke_tension_toast.failure
left_icon = scope:tension_councillor
root = {
add_character_modifier = {
modifier = hate_monger_modifier
years = 10
}
}
scope:tension_councillor = {
add_character_modifier = {
modifier = hate_monger_modifier
years = 10
}
}
scope:tension_county = {
add_county_modifier = {
modifier = riots_and_murders_province_modifier
years = 5
}
}
}
}
}
}
}
}
option = { #"No, I shall try to ease the tensions."
name = fp2_struggle.1000.c
ai_chance = { #just and compassionate characters pick this option
base = 10
ai_value_modifier = {
ai_honor = 0.8
ai_compassion = 0.7
ai_rationality = 0.2
ai_zeal = -0.8
ai_vengefulness = -0.7
}
}
stress_impact = {
# Aggressive characters find this an unappealing option.
wrathful = minor_stress_impact_gain
zealous = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
vengeful = minor_stress_impact_gain
}
scope:tension_councillor = {
add_opinion = {
target = root
opinion = -10
modifier = disappointed_opinion
}
}
duel = {
skill = diplomacy
value = high_skill_rating
30 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
send_interface_toast = {
title = ease_tension_toast.success
left_icon = root
add_character_modifier = {
modifier = tolerance_gospel_modifier
years = 10
}
scope:tension_county = {
add_county_modifier = {
modifier = tensions_eased_province_modifier
years = 5
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
send_interface_toast = {
title = ease_tension_toast.failure
left_icon = root
scope:tension_county = {
add_county_modifier = {
modifier = riots_and_murders_province_modifier
years = 5
}
}
}
}
}
}
option = { #"If I cannot stop this madness...
name = fp2_struggle.1000.d
trigger = {
exists = scope:minority_courtier
scope:tension_county = {
this != root.capital_county
}
}
ai_chance = { #just and compassionate characters pick this option
base = 10
ai_value_modifier = {
ai_honor = 0.3
ai_compassion = 0.3
ai_rationality = 0.8
ai_zeal = -0.8
ai_vengefulness = -0.7
ai_greed = -1
}
}
stress_impact = {
# Aggressive characters find this unappealing
wrathful = minor_stress_impact_gain
zealous = major_stress_impact_gain
sadistic = minor_stress_impact_gain
vengeful = minor_stress_impact_gain
#As do power-mongers, you're giving away a whole province!
ambitious = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
greedy = minor_stress_impact_gain
arrogant = minor_stress_impact_gain
paranoid = minor_stress_impact_gain
}
scope:minority_courtier = {
add_opinion = {
target = root
opinion = 20
modifier = received_title_county
}
}
create_title_and_vassal_change = {
type = granted
save_scope_as = change
add_claim_on_loss = yes
}
scope:tension_county = {
change_title_holder = {
holder = scope:minority_courtier
change = scope:change
}
}
resolve_title_and_vassal_change = scope:change
add_stress = medium_stress_loss
scope:tension_councillor = {
add_opinion = {
target = root
opinion = -10
modifier = disappointed_opinion
}
}
scope:tension_county = {
add_county_modifier = {
modifier = tensions_eased_province_modifier
years = 10
}
}
}
}
###################################
# War Widows
# By Ola Jentzsch
###################################
# Idea by Isabella welch
###################################
scripted_trigger fp2_struggle.1001_weird_option_traits = { # These, presumably, makes you even more sympathethic to widows and orphans, or likely to take an ill-thought out decision.
OR = {
has_character_modifier = associates_with_strange_peasants_modifier
has_trait = bastard
has_trait = legitimized_bastard
has_trait = intellect_bad_3
has_trait = intellect_bad_2
has_trait = improvident
has_trait = lifestyle_reveler
has_trait = pregnant
has_trait = lunatic
has_trait = eccentric
}
}
scripted_trigger fp2_struggle.1001_expectant_vassal_or_courtier_traits = { # This is about the personality the pregnant courtier should have to get this idea to begin with
has_trait = pregnant
is_available_ai = yes
NOR = {
has_trait = callous
has_trait = content
has_trait = arrogant
has_trait = dull
}
}
fp2_struggle.1001 = {
type = character_event
title = fp2_struggle.1001.t
desc = fp2_struggle.1001.desc
theme = faith
cooldown = { years = 50 }
left_portrait = {
character = root
animation = personality_cynical
}
right_portrait = {
character = scope:expectant_courtier
animation = happiness
}
trigger = {
has_fp2_dlc_trigger = yes
OR = {
any_vassal = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
}
any_courtier = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
}
}
gold >= medium_gold_value_check
any_truce_target = { }
}
immediate = {
random_vassal = {
limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
is_spouse_of = root
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
any_player_heir = { is_spouse_of = prev }
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
is_councillor = yes
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
is_powerful_vassal = yes
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
}
save_scope_as = expectant_courtier
}
if = {
limit = {
NOT = {
exists = scope:expectant_courtier
}
}
random_courtier = {
limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
is_spouse_of = root
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
any_player_heir = { is_spouse_of = prev }
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
is_councillor = yes
}
alternative_limit = {
fp2_struggle.1001_expectant_vassal_or_courtier_traits = yes
}
save_scope_as = expectant_courtier
}
}
}
option = { #A good idea! I shall create such a fund.
name = fp2_struggle.1001.a
stress_impact = {
# Arrogant or cruel characters find this an unappealing option.
arbitrary = medium_stress_impact_gain
arrogant = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
# As do, of course, greedy ones.
greedy = medium_stress_impact_gain
# As do callous and content ones, to an extent.
callous = minor_stress_impact_gain
content = minor_stress_impact_gain
# But generous and compassionate characters like it.
compassionate = minor_stress_impact_loss
generous = medium_stress_impact_loss
}
ai_chance = { #Just and compassionate characters pick this option
base = 10
ai_value_modifier = {
ai_honor = 0.5
ai_compassion = 1
ai_vengefulness = -0.2
ai_greed = -0.5
}
}
remove_treasury_or_gold = major_treasury_or_gold_value
scope:expectant_courtier = {
add_opinion = {
target = root
opinion = 20
modifier = pleased_opinion
}
}
add_character_modifier = {
modifier = nursing_salaries_for_single_mothers_modifier
years = 20
}
}
option = { #Widows I will support, but not whores!
name = fp2_struggle.1001.b
flavor = fp2_struggle.1001.b.tt
trigger = {
fp2_struggle.1001_weird_option_traits = no
trait_is_shunned_or_criminal_in_faith_trigger = {
FAITH = faith
TRAIT = adulterer
GENDER_CHARACTER = dummy_female
}
}
stress_impact = {
# Truly righteous characters wouldn't say this.
compassionate = minor_stress_impact_gain
gallant = minor_stress_impact_gain
generous = minor_stress_impact_gain
humble = minor_stress_impact_gain
just = minor_stress_impact_gain
# And greedy ones still don't wanna pay up
greedy = minor_stress_impact_gain
}
ai_chance = { #Zealous AI characters pick this option
base = 10
ai_value_modifier = {
ai_zeal = 1
ai_compassion = -0.8
}
}
remove_treasury_or_gold = medium_treasury_or_gold_value
add_piety = minor_piety_gain
add_character_modifier = {
modifier = widows_and_widowers_amazing_funds_modifier
years = 20
}
scope:expectant_courtier = {
if = {
limit = {
has_trait = zealous
}
add_opinion = {
target = root
opinion = 10
modifier = pleased_opinion
}
}
else = {
add_opinion = {
target = root
opinion = -10
modifier = slightly_disappointed_opinion
}
}
}
}
option = { #But they can come stay at my court! We have food in abundance!
name = fp2_struggle.1001.c
flavor = fp2_struggle.1001.c.tt
trigger = {
fp2_struggle.1001_weird_option_traits = yes
}
stress_impact = {
# Cheap or shy character's don't like this
greedy = medium_stress_impact_gain
shy = medium_stress_impact_gain
#Nor do those wo really care about the appearance and glory of their courts
ambitious = minor_stress_impact_gain
arrogant = medium_stress_impact_gain
temperate = medium_stress_impact_gain
august = medium_stress_impact_gain
born_in_the_purple = minor_stress_impact_gain
# But hypersocial hippies love it
humble = minor_stress_impact_loss
gregarious = minor_stress_impact_loss
eccentric = minor_stress_impact_loss
}
ai_chance = { #Deranged or hypersocial but irrational AI characters pick this option
base = 10
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.8
ai_rationality = -0.8
}
}
scope:expectant_courtier = {
if = {
limit = {
OR = {
has_character_modifier = associates_with_strange_peasants_modifier
has_trait = bastard
has_trait = legitimized_bastard
has_trait = intellect_bad_3
has_trait = intellect_bad_2
has_trait = improvident
has_trait = gregarious
} has_trait = lunatic
}
add_opinion = {
target = root
opinion = 10
modifier = pleased_opinion
}
}
else = {
add_opinion = {
target = root
opinion = -10
modifier = perplexed_opinion
}
}
}
if = {
limit = {
root = {
faith = {
OR = {
trait_is_virtue = gregarious
trait_is_virtue = humble
trait_is_virtue = generous
}
}
}
}
add_piety = medium_piety_gain
}
else = {
add_piety = minor_piety_gain
}
add_character_modifier = {
modifier = destitute_single_mothers_modifier
years = 15
}
}
option = { #Surely, my benevolent vassals can help funding this.
name = fp2_struggle.1001.d
trigger = {
any_vassal = {
count = all
is_ai = yes
}
}
stress_impact = {
# Careful or dilpomatically minded characters won't do this.
content = medium_stress_impact_gain
diplomat = medium_stress_impact_gain
paranoid = medium_stress_impact_gain
}
ai_chance = { #Economic AI characters pick this option, while the careful don't.
base = 10
ai_value_modifier = {
ai_compassion = 0.5
ai_greed = 0.5
ai_rationality = -0.5
}
}
remove_treasury_or_gold = minor_treasury_or_gold_value
custom_tooltip = fp2_struggle.1001.specialdescpositive
custom_tooltip = fp2_struggle.1001.specialdescnegative
hidden_effect = {
every_vassal = {
IF = {
limit = {
NOT = {
has_trait = pregnant
}
}
IF = {
limit = {
OR = {
has_trait = compassionate
has_trait = generous
has_trait = just
}
}
add_opinion = {
target = root
opinion = 10
modifier = funded_righteous_cause_opinion
}
}
ELSE = {
add_opinion = {
target = root
opinion = -10
modifier = extorted_me_opinion
}
}
}
}
}
scope:expectant_courtier = {
IF = {
limit = {
is_vassal_of = root #if she is, she gets angry because now SHE is expected to pay for this...
}
add_opinion = {
target = root
opinion = -20
modifier = extorted_me_opinion
}
}
ELSE = {
add_opinion = {
target = root
opinion = 10
modifier = pleased_opinion
}
}
}
add_character_modifier = {
modifier = nursing_salaries_for_single_mothers_modifier
years = 20
}
}
option = { #I am your king, not a wet nurse!
name = fp2_struggle.1001.e
stress_impact = {
# Benevolent characters wouldn't ignore this.
compassionate = medium_stress_impact_gain
gallant = medium_stress_impact_gain
generous = medium_stress_impact_gain
# nor would those who are truly competent or just.
administrator = minor_stress_impact_gain
ambitious = minor_stress_impact_gain
diligent = minor_stress_impact_gain
just = minor_stress_impact_gain
eccentric = minor_stress_impact_gain
}
ai_chance = { #Callous or cheap AI characters pick this option
base = 10
ai_value_modifier = {
ai_rationality = 0.5
ai_greed = 0.5
ai_honor = -0.7
ai_compassion = -0.7
}
}
scope:expectant_courtier = {
add_opinion = {
target = root
opinion = -20
modifier = hurt_opinion
}
}
random = {
chance = 50
send_interface_toast = {
left_icon = root
title = not_my_problem_toast
add_character_modifier = {
modifier = starving_single_mothers_and_children_modifier
years = 15
}
}
}
}
}
###################################
# Andalusian Advancements
# By Ola Jentzsch
###################################
# Inspired by an idea by Isabella welch
#########################################
scripted_trigger neighboring_ruler_proper_culture_trigger = {
OR = {
culture = culture:andalusian
culture = culture:bedouin
culture = culture:baranis
culture = culture:butr
culture = culture:levantine
}
}
fp2_struggle.1002 = {
type = character_event
title = fp2_struggle.1002.t
desc = { #Different flavor depending on time period
first_valid = {
triggered_desc = {
trigger = { current_date <= 1030.1.1 }
desc = fp2_struggle.1002.desc_early_golden_age
}
triggered_desc = {
trigger = {
current_year >= 1250
OR = { has_religion = religion:eastern_orthodox_religion has_religion = religion:catholic_religion has_religion = religion:protestant_religion }
}
desc = fp2_struggle.1002.desc_post_golden_age_christian #this triggers the latinized names of the polymaths
}
triggered_desc = {
trigger = { current_year >= 1250 }
desc = fp2_struggle.1002.desc_post_golden_age_unchristian #or their arabic ones
}
triggered_desc = {
trigger = { current_year >= 1030 }
desc = fp2_struggle.1002.desc_late_golden_age
}
}
first_valid = {
triggered_desc = { #tests if the event would fire one of the historical physicians
trigger = {
AND = {
current_year > 976
current_year < 1010
}
exists = global_var:albucasis_created
exists = scope:albucasis_physician
scope:great_physician = scope:albucasis_physician #this is a measure taken so that the loc gets tied to the appropriate character
}
desc = fp2_struggle.1002.desc_albucasis #this is the dialogue text if Albucasis spawns
}
triggered_desc = { #tests if the event would fire one of the historical physicians
trigger = {
AND = {
current_year > 1125
current_year < 1165
}
exists = global_var:avenzoar_created
exists = scope:avenzoar_physician
scope:great_physician = scope:avenzoar_physician
}
desc = fp2_struggle.1002.desc_avenzoar #this is the dialogue if Avenzoar spawns
}
triggered_desc = { #tests if the event would fire one of the historical physicians
trigger = {
AND = {
current_year > 1140
current_year < 1180
}
exists = global_var:tufail_created
exists = scope:tufail_physician
scope:great_physician = scope:tufail_physician
}
desc = fp2_struggle.1002.desc_tufail #this is the dialogue if Ibn Tufail spawns
}
triggered_desc = { #this defaults to a random Andalusian physician
trigger = { current_year >= 1050 } ##
desc = fp2_struggle.1002.desc_no_historical_physician_late
}
desc = fp2_struggle.1002.desc_no_historical_physician_early
}
first_valid = { #if root has a court physician, it changes the narrative a bit.
triggered_desc = {
trigger = {
court_physician_available_trigger = yes
OR = { has_religion = religion:eastern_orthodox_religion has_religion = religion:catholic_religion has_religion = religion:protestant_religion }
}
desc = fp2_struggle.1002.desc_has_physician_and_is_christian #in this case, the slur "heathen" is used
}
triggered_desc = {
trigger = { court_physician_available_trigger = yes }
desc = fp2_struggle.1002.desc_has_physician_but_not_christian #in this case, the slur "eccentric" is used
}
triggered_desc = {
trigger = { OR = { has_religion = religion:eastern_orthodox_religion has_religion = religion:catholic_religion has_religion = religion:protestant_religion } }
desc = fp2_struggle.1002.desc_has_no_physician_but_is_christian #in this case, the slur "heathen" is used
}
desc = fp2_struggle.1002.desc_has_no_physician #default option should all else fail
}
}
theme = medicine
override_background = { reference = throne_room }
left_portrait = {
character = root
animation = personality_content
}
right_portrait = {
character = scope:great_physician
animation = personality_rational #polymaths should always have this pose :D
}
lower_left_portrait = scope:neighboring_ruler #this is the ruler that's angry with the polymath
lower_right_portrait = scope:scoped_physician #this is your court physician if you have one
cooldown = { years = 100 }
trigger = {
has_fp2_dlc_trigger = yes
#any_character_to_title_neighboring_county = { #this searches for a neighboring province that has the xenophilic tradition, which is this event's dynamic way of checking for Andalusian culture or cultures derived from it.
any_neighboring_and_across_water_top_liege_realm_owner = {
culture = {
OR = {
has_cultural_tradition = tradition_xenophilic
has_cultural_tradition = tradition_medicinal_plants
has_cultural_tradition = tradition_fp2_malleable_subjects
}
}
}
root.capital_province = { #so that it only triggers for people close to Andalusia
OR = {
geographical_region = world_europe_west_iberia
geographical_region = world_europe_west_francia
geographical_region = world_europe_south_italy
}
}
NOT = { #So that it doesn't fire for the Andalusians themselves, because that'd make the narrative weird
culture = culture:andalusian
}
NOT = { #So that it doesn't fire for the Umayyads when they control Iberia
AND = {
culture = culture:levantine
root.capital_province = { geographical_region = world_europe_west_iberia }
}
}
any_neighboring_and_across_water_top_liege_realm_owner = {
is_ai = yes
}
}
weight_multiplier = {
base = 0.4
modifier = {
OR = {
AND = {
current_year > 976
current_year < 1010
}
AND = {
current_year > 1125
current_year < 1180
}
}
add = 1.6
}
modifier = {
neighboring_ruler_proper_culture_trigger = yes
add = 0.5
}
}
immediate = {
random_neighboring_and_across_water_top_liege_realm_owner = { #this searches for a neighboring ruler with the proper cultural tradition, which is this event's dynamic way of checking for Andalusian culture or cultures derived from it.
limit = {
culture = {
OR = {
has_cultural_tradition = tradition_xenophilic
has_cultural_tradition = tradition_medicinal_plants
has_cultural_tradition = tradition_fp2_malleable_subjects
}
}
}
culture = { save_scope_as = xenophilic_culture } #this is mostly used for error-checking because the debug log is unclear.
}
if = { #This looks to see if one of three historical physicians will be used in the event
limit = { #their rough period of activity
AND = {
current_year > 976
current_year < 1010
}
NOT = { exists = global_var:albucasis_created } #makes sure that he wasn't already spawned by the event elsewhere
is_ai = no
scope:xenophilic_culture = culture:andalusian
}
create_character = {
age = { 40 70 } #their rough age during the period of their flourishing
location = root.capital_province
name = "Abu al-Qasim Al-Zahrawi" #Albucasis
gender = male
template = scholar_character
trait = intellect_good_3 #He was one of the Middle Ages' greatest geniuses
trait = lifestyle_herbalist
trait = lifestyle_physician
trait = education_learning_4
random_traits_list = { #his personality, extrapolated from my research
count = 3
ambitious = {}
compassionate = {}
calm = {}
diligent = {}
humble = {}
patient = {}
}
random_traits_list = { #this is to hint to the player why he was exiled from the previous court
count = 1
fornicator = {}
deviant = {}
sodomite = {}
}
culture = culture:andalusian
dynasty = none
faith = faith:muwalladi
save_scope_as = albucasis_physician #this is needed to get the loc right
}
set_global_variable = albucasis_created
scope:albucasis_physician = {
save_scope_as = great_physician #this is to create one easy, generic scope for use in the rest of the event
}
}
else_if = {
limit = { #their rough period of activity
AND = {
current_year > 1125
current_year < 1165
}
NOT = { exists = global_var:avenzoar_created } #makes sure that he wasn't already spawned by the event elsewhere
is_ai = no
scope:xenophilic_culture = culture:andalusian
}
create_character = {
age = { 31 71 } #their rough age during the period of their flourishing
location = root.capital_province
name = "Abū Marwān ibn Zuhr" #Avenzoar
gender = male
template = scholar_character
trait = intellect_good_2
trait = scholar
trait = lifestyle_physician
trait = education_learning_4
random_traits_list = { #his personality, extrapolated from my research
count = 3
diligent = {}
cynical = {}
humble = {}
vengeful = {} #He was bitter over having been exiled from Morocco
}
random_traits_list = { #this is to hint to the player why he was exiled from the previous court
count = 1
fornicator = {}
deviant = {}
sodomite = {}
murderer = {}
}
culture = culture:andalusian
dynasty = none
faith = faith:muwalladi
save_scope_as = avenzoar_physician
}
set_global_variable = avenzoar_created
scope:avenzoar_physician = {
save_scope_as = great_physician
}
}
else_if = {
limit = { #their rough period of activity
AND = {
current_year > 1140
current_year < 1180
}
NOT = { exists = global_var:tufail_created } #makes sure that he wasn't already spawned by the event elsewhere
is_ai = no
scope:xenophilic_culture = culture:andalusian
}
create_character = {
age = { 35 75 } #their rough age during the period of their flourishing
location = root.capital_province
name = "Abū Bakr ibn Tufail" #Ibn Tufail
gender = male
template = scholar_character
trait = intellect_good_2
trait = theologian
trait = lifestyle_physician
trait = education_learning_3
trait = journaller #He was an avid writer
random_traits_list = { #his personality, extrapolated from my research
count = 3
diligent = {}
calm = {}
humble = {}
trusting = {}
}
random_traits_list = { #this is to hint to the player why he was exiled from the previous court
count = 1
fornicator = {}
deviant = {}
sodomite = {}
witch = {}
}
culture = culture:andalusian
dynasty = none
faith = faith:muwalladi
save_scope_as = tufail_physician
}
set_global_variable = tufail_created
scope:tufail_physician = {
save_scope_as = great_physician
}
}
else = { #or it defaults to a random one
create_character = {
age = { 32 50 }
location = root.capital_province
template = scholar_character
trait = intellect_good_1
trait = education_learning_3
trait = lifestyle_physician
random_traits_list = {
count = 3
ambitious = {}
calm = {}
diligent = {}
cynical = {}
humble = {}
patient = {}
}
random_traits_list = { ##his is to hint to the player why he was exiled from the previous court
count = 1
fornicator = {}
deviant = {}
sodomite = {}
incestuous = {}
witch = {}
}
culture = scope:xenophilic_culture
faith = faith:muwalladi
save_scope_as = great_physician
}
}
hidden_effect = {
scope:great_physician = {
add_trait_xp = {
trait = lifestyle_physician
value = 100
}
}
}
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = {
AND = {
neighboring_ruler_proper_culture_trigger = yes #the event prefers the neighboring ruler to be of these cultures, since it makes the most sense histrically for the scholar to have been at that court.
is_ai = yes
}
}
alternative_limit = { is_ai = yes}
save_scope_as = neighboring_ruler
}
if = { #if you have a court physician already, he has a stake in this!
limit = {
court_physician_available_trigger = yes
}
save_court_physician_as_effect = { SCOPE_NAME = scoped_physician }
}
}
option = { #I could use a new physician...
name = fp2_struggle.1002.a
ai_chance = { #rational AIs pick this option
base = 10
ai_value_modifier = {
ai_rationality = 0.7
ai_zeal = -0.7
}
}
stress_impact = {
# Conservative characters don't want to do this.
content = minor_stress_impact_gain
# Nor do self-absorbed ones
arrogant = minor_stress_impact_gain
callous = minor_stress_impact_gain
greedy = minor_stress_impact_gain
}
remove_treasury_or_gold = major_treasury_or_gold_value #this guy is expensive!
add_courtier = scope:great_physician #he's added to root's court
court_position_grant_effect = {
EMPLOYER = root
CANDIDATE = scope:great_physician
POS = court_physician
}
scope:great_physician = { #naturally, the polymath likes to get a new job
add_opinion = {
target = root
opinion = 10
modifier = hired_me_opinion
}
}
scope:neighboring_ruler = { #but the neighboring ruler gets angry that you harbor him
progress_towards_rival_effect = {
REASON = rival_harbored_polymath
CHARACTER = root
OPINION = 0
}
}
add_character_modifier = { #while you get inspired!
modifier = inspired_medicine_modifier
years = 20
}
}
option = { #I do not need you, I can read myself.
name = fp2_struggle.1002.b
flavor = fp2_struggle.1002.b.tt
trigger = { #This only fires after Avicenna's life, as his books are referenced.
current_year >= 1030
learning >= medium_skill_rating #and you have to be at least somewhat learned to have this option appear, otherwise it'd be superflous
NOT = {
exists = scope:scoped_physician
}
}
ai_chance = { #energetic, overconfident AI chooses this
base = 10
ai_value_modifier = {
ai_energy = 0.7
ai_boldness = 0.6
ai_rationality = 0.4
ai_zeal = -0.6
ai_greed = -0.6
}
}
stress_impact = {
# Conservative, dull or cheap characters won't do this
content = minor_stress_impact_gain
greedy = minor_stress_impact_gain
lazy = minor_stress_impact_gain
zealous = minor_stress_impact_gain
dull = medium_stress_impact_gain
}
custom_tooltip = fp2_struggle.1002.physicianleaves
remove_short_term_gold = minor_gold_value #books are expensive!
if = {
limit = { has_lifestyle = learning_lifestyle }
add_learning_lifestyle_xp = medium_lifestyle_experience
}
if = { #your physician gets disappointed for your lack of trust in them
limit = { exists = scope:scoped_physician }
scope:scoped_physician = {
add_opinion = {
target = root
opinion = -10
modifier = disappointed_opinion
}
}
}
duel = { #you try to read Arabic books
skill = learning
value = medium_skill_rating
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
send_interface_toast = { #you succeed!
title = reading_avicenna_toast.success
left_icon = root
root = {
add_character_modifier = {
modifier = inspired_medicine_modifier
years = 20
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
send_interface_toast = { #you misunderstod something!
title = reading_avicenna_toast.failure
left_icon = root
root = {
add_character_modifier = {
modifier = misread_medicine_incompetence_modifier
years = 20
}
}
}
}
}
}
option = { #What do I need you for? I can read Greek myself
name = fp2_struggle.1002.c
flavor = fp2_struggle.1002.c.tt
trigger = { #This triggers for the early period, before the Canon of Medicine was published.
current_date <= 1030.1.1
learning >= medium_skill_rating
NOT = {
exists = scope:scoped_physician
}
}
ai_chance = { #energetic AI are the most likely to attempt this in this early time period
base = 10
ai_value_modifier = {
ai_energy = 0.8
ai_rationality = 0.2
ai_zeal = -0.2
}
}
stress_impact = {
# Conservative, dull or cheap characters won't do this
content = minor_stress_impact_gain
greedy = minor_stress_impact_gain
lazy = minor_stress_impact_gain
zealous = minor_stress_impact_gain
dull = medium_stress_impact_gain
}
custom_tooltip = fp2_struggle.1002.physicianleaves
remove_short_term_gold = minor_gold_value #books are really expensive in this early period
if = {
limit = { has_lifestyle = learning_lifestyle }
add_learning_lifestyle_xp = medium_lifestyle_experience
}
if = {
limit = { exists = scope:scoped_physician } #your physician still gets disappointed in you
scope:scoped_physician = {
add_opinion = {
target = root
opinion = -10
modifier = disappointed_opinion
}
}
}
duel = { #this duel is difficult - it's mostly an option for extremely learned or overconfident rulers.
skill = learning
value = high_skill_rating
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
send_interface_toast = {
title = reading_hippocrates_toast.success #You can read greek!
left_icon = root
root = {
add_character_modifier = {
modifier = medical_insights_modifier
years = 20
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
send_interface_toast = {
title = reading_hippocrates_toast.failure #apparently, your Greek skills aren't all you cranked them up to be.
left_icon = root
root = {
add_character_modifier = {
modifier = cannot_read_greek_modifier
years = 20
}
}
}
}
}
}
option = { #I will send you back from whence you came...in chains.
name = fp2_struggle.1002.d
ai_chance = { #but vengeful ones sure love it!
base = 10
ai_value_modifier = {
ai_vengefulness = 0.8
ai_honor = -0.2
}
}
stress_impact = {
#Caring, carefree or just characters won't do this
generous = minor_stress_impact_gain
gregarious = minor_stress_impact_gain
just = minor_stress_impact_gain
trusting = minor_stress_impact_gain
compassionate = major_stress_impact_gain
forgiving = major_stress_impact_gain
#But arbitrary bastards love it
arbitrary = minor_stress_impact_loss
}
scope:great_physician = { #the polymath, naturally, gets sad that you send him back to his disgruntled former employer.
add_opinion = {
target = root
opinion = -40
modifier = left_me_to_wolves_opinion
}
}
if = { #but your current physician is very happy!
limit = { exists = scope:scoped_physician }
scope:scoped_physician = {
add_opinion = {
target = root
opinion = 20
modifier = let_me_keep_my_job_opinion
}
}
}
scope:neighboring_ruler = { #as is the neighboring ruler, especially if he is your friend
if = {
limit = {
has_relation_friend = root
}
add_opinion = {
target = root
modifier = strengthened_friendship_opinion
}
}
else = {
progress_towards_friend_effect = {
REASON = friend_returned_refugee
CHARACTER = root
OPINION = 0
}
}
}
add_dread = minor_dread_gain #you gain some dread for doing this, naturally
custom_tooltip = fp2_struggle.1001.physician_imprisoned
hidden_effect = {
if = {
limit = {
scope:neighboring_ruler = {
is_ruler = yes
}
}
scope:great_physician = { #while the polymath gets to languish in a dungeon
hard_imprison_character_effect = {
TARGET = this
IMPRISONER = scope:neighboring_ruler
}
}
}
else = {
scope:great_physician = {
silent_disappearance_effect = yes
}
}
}
}
option = { #Wash my hands? Are you insane?"
name = fp2_struggle.1002.e
trigger = { #This only triggers for Christianity and similar faiths
faith = {
has_doctrine_parameter = theocracy_temple_lease
NOR = {
has_doctrine_parameter = legalism_modified_law_costs
has_doctrine_parameter = literalist_debate_enabled
}
}
NOT = { has_lifestyle = learning_lifestyle } #So that this doesn't fire if you have the "Wash your hands" perk
}
ai_chance = { #and fanatics don't care about hygiene...apparently
base = 10
ai_value_modifier = {
ai_zeal = 0.8
ai_rationality = -0.8
}
}
stress_impact = {
# Innovative or nervous chracters wouldn't pick this option.
ambitious = minor_stress_impact_gain
craven = minor_stress_impact_gain
#But stubborn or content ones would
content = minor_stress_impact_loss
lazy = minor_stress_impact_loss
stubborn = minor_stress_impact_loss
eccentric = minor_stress_impact_loss
}
custom_tooltip = fp2_struggle.1002.physicianleaves
if = { #your physician, again, loves that they get to keep their job
limit = { exists = scope:scoped_physician }
scope:scoped_physician = {
add_opinion = {
target = root
opinion = 20
modifier = let_me_keep_my_job_opinion
}
}
}
add_piety = medium_piety_gain #and your faith rewards you for turning away the heathen
add_character_modifier = { #but you're rolling in filth
modifier = rolling_in_filth_modifier
years = 5
}
}
option = { #Begone, innovation should only come from God.
name = fp2_struggle.1002.f
trigger = {
current_year >= 1065 #because this option refers to developments in islam that happened within the Seljuk empire
faith = { #it checks for doctrines, rather than islam itself, to make the event more dynamic
OR = {
has_doctrine_parameter = legalism_modified_law_costs
has_doctrine_parameter = literalist_debate_enabled
has_doctrine_parameter = religious_legal_pronouncements_law_cost_reduction
}
}
}
ai_chance = { #zealous AIs pick this, but it's not entirely unrational - just hostile to new ideas.
base = 10
ai_value_modifier = {
ai_zeal = 0.8
ai_rationality = -0.2
}
}
stress_impact = {
#True rationalists abhor this option
ambitious = medium_stress_impact_gain
diligent = medium_stress_impact_gain
#But stubborn and fanatical ones like it
content = minor_stress_impact_loss
stubborn = minor_stress_impact_loss
zealous = minor_stress_impact_loss
eccentric = minor_stress_impact_loss
}
custom_tooltip = fp2_struggle.1002.physicianleaves
if = { #your physician, again, loves that they get to keep their job
limit = { exists = scope:scoped_physician }
scope:scoped_physician = {
add_opinion = {
target = root
opinion = 20
modifier = let_me_keep_my_job_opinion
}
}
}
scope:neighboring_ruler = { #the neighboring ruler likes that you rebuked the polymath, at least
add_opinion = {
target = root
opinion = 10
modifier = rejected_my_enemy_opinion
}
}
add_character_modifier = { #but you draw closer to the Nizamiyah movement, rejecting innovation.
modifier = anti_innovation_muslim_modifier
years = 15
}
}
}
###################################
# Soul of Iron
# By Ola Jentzsch
###################################
fp2_struggle.1010 = { # Soul of Iron, by Ola Jentzsch
type = character_event
title = fp2_struggle.1010.t
desc = fp2_struggle.1010.desc
theme = realm
left_portrait = {
character = root
animation = happiness #root smells an opportunity!
}
right_portrait = {
character = scope:great_swordsmith
animation = scheme #he's a scheming bastard, kinda
}
trigger = { #The province must also be involved in the Iberian struggle
is_ai = no
has_fp2_dlc_trigger = yes
any_held_county = {
any_county_province = {
has_building_or_higher = blacksmiths_01 #This event needs ROOT to have a blacksmith building
}
}
fp2_character_involved_in_struggle_trigger = yes
}
cooldown = { years = 100 }
immediate = {
random_held_county = { #this is to find the county that has the blacksmith
limit = {
any_county_province = {
has_building_or_higher = blacksmiths_01
}
}
save_scope_as = blacksmith_county #this scopes it - note that it might be the same county as toledo_county; that is intentional.
}
title:b_toledo = { save_scope_as = toledo_holding } #this is used in the localization
title:c_toledo = { save_scope_as = toledo_county } #this is used in option c, as well as the localization
create_character = { #this is the mighty blacksmith that the event needs
age = { 45 55 } #he's experienced and aging, but not old
location = root.capital_province
gender_female_chance = root_faith_dominant_gender_female_chance #could be female, if given the right context.
trait = intellect_good_3 #he's a genius craftsman
trait = strong #and a blacksmith...
trait = arrogant #he's supremely gifted, but also extremely arrogant, Fëanor basically
random_traits_list = { #the rest of his questionable personality
count = 2
ambitious = {}
diligent = {}
callous = {}
greedy = {}
patient = {}
stubborn = {}
vengeful = {}
}
random_traits_list = { #something fun to give him character!
count = 1
one_eyed = {}
scarred = {}
}
culture = scope:toledo_county.culture
faith = faith:catholic
dynasty = none
save_scope_as = great_swordsmith #this saves him as a scope so we can get nice effects to bounce off him!
}
hidden_effect = {
scope:great_swordsmith = {
add_character_modifier = {
modifier = master_smith_npc_modifier #this is a neat modifier he gets as a master smith. it's pretty powerful, giving a boost to Stewardship and gold income, but since he's an NPC, it doesn't matter much. It's mostly to create flavor if the player actually examines his stats.
}
}
}
}
option = { #Let us make a compromise
name = fp2_struggle.1010.a
flavor = toledo_compromise_flavor
trigger = { #root needs to control Toledo, and it needs to have a blacksmith building.
any_held_county = {
any_county_province = {
barony = title:b_toledo
has_building_or_higher = blacksmiths_01
}
}
scope:toledo_county = { #so that this option doesn't fire twice
NOT = { has_county_modifier = toledo_steel_county_modifier }
}
}
ai_chance = { #Smart, patient AIs pick this option, others are more likely to go for a bolder approach.
base = 10
ai_value_modifier = {
ai_rationality = 1
ai_honor = 0.5
ai_boldness = -0.5
ai_zeal = -0.5
}
}
stress_impact = { #arrogant or visionless rulers dislike this option
arrogant = minor_stress_impact_gain
callous = minor_stress_impact_gain
content = minor_stress_impact_gain
wrathful = minor_stress_impact_gain
}
remove_short_term_gold = major_gold_value #someone still has to be bribed here
scope:toledo_county = {
add_county_modifier = {
modifier = toledo_steel_county_modifier
}
}
scope:toledo_county = {
add_county_modifier = {
modifier = governance_1041_quarreling_guilds_modifier
years = 20
}
}
}
option = { #Whatever knowledge you possess, I shall draw it out.
name = fp2_struggle.1010.b
flavor = fp2_struggle.1010.swordsmith_imprisoned
trigger = {
OR = {
has_trait = schemer
has_trait = torturer
has_trait = paranoid
dread >= high_dread
}
NAND = {
any_held_county = {
any_county_province = {
barony = title:b_toledo
has_building_or_higher = blacksmiths_01
}
}
scope:toledo_county = { #so that this option doesn't fire twice
NOT = { has_county_modifier = toledo_steel_county_modifier }
}
}
}
scope:great_swordsmith = { #while the great swordsmiths gets to languish in a dungeon
hard_imprison_character_effect = {
TARGET = this
IMPRISONER = root
}
}
ai_chance = { #Compassionate or just AI wouldn't do this, but hateful paranoid psychopats, sure! Perhaps the smith even deserved it...
base = 10
ai_value_modifier = {
ai_vengefulness = 1
ai_honor = -1
}
}
stress_impact = { #this is not what a Buddha would do
compassionate = major_stress_impact_gain
generous = medium_stress_impact_gain
gregarious = medium_stress_impact_gain
just = medium_stress_impact_gain
}
add_dread = minor_dread_gain #you gain some dread for doing this, naturally
scope:great_swordsmith = {
add_character_modifier = {
modifier = recently_tortured
years = 5
}
}
add_character_modifier = {
modifier = tortured_smith_spilling_secrets_modifier
years = 25
}
custom_tooltip = fp2_struggle.1010.compassionate_courtiers
hidden_effect = { #Compassionate or righteous courtiers will secretly dislike this
every_courtier = {
IF = {
limit = {
OR = {
has_trait = compassionate
has_trait = just
}
}
add_opinion = {
target = root
opinion = -10
modifier = cruelty_opinion
}
}
}
}
}
option = { #You shall have it, if you make swords for my armies
name = fp2_struggle.1010.c
flavor = fp2_struggle.1010.smithgoesaway
ai_chance = { #ambitious AIs pick this option
base = 10
ai_value_modifier = {
ai_energy = 0.7
ai_vengefulness = 0.7
}
}
stress_impact = {
content = minor_stress_impact_gain
craven = minor_stress_impact_gain
greedy = minor_stress_impact_gain
just = minor_stress_impact_gain
}
remove_treasury_or_gold = major_treasury_or_gold_value #this guy is expensive!
add_character_modifier = { #as promised, your armies gets equipped with Toledo steel!
modifier = toledo_steel_armaments_modifier
years = 50
}
scope:blacksmith_county = { #the great smith usurps the blacksmiths' guild, with your blessing
add_county_modifier = {
modifier = county_corruption_uncooperative_guilds_modifier
years = 10
}
}
custom_tooltip = fp2_struggle.1010.paranoid_rivals #your neighbors gets really paranoid when they learn about this
hidden_effect = {
struggle:iberian_struggle = {
every_involved_ruler = {
limit = {
NOT = { is_allied_to = root }
character_is_realm_neighbor = root
}
add_opinion = {
target = root
opinion = -20
modifier = threatened_by_buildup_opinion
}
}
}
}
}
option = { #Make me Iberia's finest blade, and all the smithies shall be yours
name = fp2_struggle.1010.d
flavor = fp2_struggle.1010.smithmakesweapon #the master swordsmiths stays in your court for the time being, to make the great sword he promised you.
add_courtier = scope:great_swordsmith
hidden_effect = {
scope:great_swordsmith = {
set_knight_status = forbid #this is to prevent him being auto-turned into a knight during his stay, as he tends to get quite high prowess. The player can still make him a knight manually if they insist on it.
}
}
ai_chance = { #Self-absorbed AIs pick this option
base = 10
ai_value_modifier = {
ai_greed = 0.7
ai_boldness = 0.7
}
}
stress_impact = { #this is an extravagant option, not for the humble or temperate - but just people don't like it either, since it still lets the blacksmith usurp the guilds.
humble = minor_stress_impact_gain
just = minor_stress_impact_gain
temperate = minor_stress_impact_gain
}
remove_short_term_gold = major_gold_value #this guy knows what he's worth!
scope:blacksmith_county = { #the guild gets usurped by the arrogant master smith!
add_county_modifier = {
modifier = county_corruption_uncooperative_guilds_modifier
years = 10
}
}
hidden_effect = { #this looks weird in the tooltip otherwise!
random_list = { #I recommend increasing the odds for the special cool sword when testing this event!
25 = { #You have a 25% chance of getting a really cool sword here!
trigger = { is_ai = no } #this option is just for players, to create less inflation on awesume swords.
trigger_event = {
id = fp2_struggle.1011
days = { 30 60 }
}
}
75 = { #but you can still get a nice toledo blade!
trigger_event = {
id = fp2_struggle.1012
days = { 30 60 }
}
}
}
}
}
option = { #I will not anger the guilds for your vanity.
name = fp2_struggle.1010.e
flavor = fp2_struggle.1010.swordsmith_leaves
ai_chance = { #Lazy or worried AI pick this option
base = 10
ai_value_modifier = {
ai_energy = -0.7
ai_greed = 0.3
ai_boldness = -0.5
}
}
stress_impact = { #this is not the option for opportunists, but a good option for some humble stress loss
ambitious = major_stress_impact_gain
diligent = medium_stress_impact_gain
content = minor_stress_impact_loss
humble = minor_stress_impact_loss
temperate = minor_stress_impact_loss
paranoid = minor_stress_impact_loss
}
scope:blacksmith_county = { #You curry favor with the blacksmith's guild
add_county_modifier = {
modifier = guild_rights_protected_modifier
years = 20
}
}
scope:great_swordsmith = {
add_opinion = {
target = root
modifier = insulted_opinion
}
}
}
}
fp2_struggle.1011 = { # The Masterwork, by Ola Jentzsch
type = character_event
title = fp2_struggle.1011.t
desc = fp2_struggle.1011.desc
theme = realm
left_portrait = {
character = root
animation = admiration
}
right_portrait = {
character = scope:great_swordsmith
animation = marshal
}
artifact = { # To display the artifact in the event-window
target = scope:amazing_toledo_sword
position = lower_right_portrait
}
trigger = {
has_fp2_dlc_trigger = yes
scope:great_swordsmith = {
is_available_healthy_ai_adult = yes
}
}
immediate = {
save_scope_as = owner
set_artifact_rarity_illustrious = yes
create_artifact = {
name = awesome_toledo_sword_name
creator = scope:great_swordsmith
description = awesome_toledo_sword_desc
visuals = sword
type = sword
modifier = artifact_amazing_toledo_sword_modifier
wealth = scope:wealth # This comes from the scripted effect above
quality = scope:quality # This comes from the scripted effect above
save_scope_as = amazing_toledo_sword # Allows the sword to be accessed via scope after its creation
}
}
option = { #Martiello, the hammer
name = fp2_struggle.1011.a
trigger = {
root = {
culture = { has_cultural_pillar = language_iberian }
}
}
scope:amazing_toledo_sword = { set_artifact_name = martiello_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Tiniebra, the darkness
name = fp2_struggle.1011.b
trigger = {
root = {
culture = { has_cultural_pillar = language_iberian }
}
}
scope:amazing_toledo_sword = { set_artifact_name = tiniebra_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Vermejo, the red
name = fp2_struggle.1011.c
trigger = {
root = {
culture = { has_cultural_pillar = language_iberian }
}
}
scope:amazing_toledo_sword = { set_artifact_name = vermejo_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Jargonça, like the blue gemstone.
name = fp2_struggle.1011.d
trigger = {
root = {
culture = { has_cultural_pillar = language_iberian }
}
}
scope:amazing_toledo_sword = { set_artifact_name = jargonca_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Suhayl, the glorious.
name = fp2_struggle.1011.e
trigger = {
root = {
culture = { has_cultural_pillar = language_arabic }
}
}
scope:amazing_toledo_sword = { set_artifact_name = suhayl_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #al-Battar, the cutter
name = fp2_struggle.1011.f
trigger = {
root = {
culture = { has_cultural_pillar = language_arabic }
}
}
scope:amazing_toledo_sword = { set_artifact_name = albattar_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Qazeeb, of the strong handle
name = fp2_struggle.1011.g
trigger = {
root = {
culture = { has_cultural_pillar = language_arabic }
}
}
scope:amazing_toledo_sword = { set_artifact_name = qazeeb_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Zumurrud, like the blinding emerald
name = fp2_struggle.1011.h
trigger = {
root = {
culture = { has_cultural_pillar = language_arabic }
}
}
scope:amazing_toledo_sword = { set_artifact_name = zumurrud_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Ortzi, like the thunder
name = fp2_struggle.1011.i
trigger = {
root = {
culture = { has_cultural_pillar = language_basque }
}
}
scope:amazing_toledo_sword = { set_artifact_name = ortzi_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Gaueko, the night spirit
name = fp2_struggle.1011.j
trigger = {
root = {
culture = { has_cultural_pillar = language_basque }
}
}
scope:amazing_toledo_sword = { set_artifact_name = gaueko_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Gorri, the red one
name = fp2_struggle.1011.k
trigger = {
root = {
culture = { has_cultural_pillar = language_basque }
}
}
scope:amazing_toledo_sword = { set_artifact_name = gorri_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Aiztoto, the little knife
name = fp2_struggle.1011.l
trigger = {
root = {
culture = { has_cultural_pillar = language_basque }
}
}
scope:amazing_toledo_sword = { set_artifact_name = aiztoto_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Escremire, the fencer
name = fp2_struggle.1011.m
trigger = {
root = {
culture = { has_cultural_pillar = language_occitano_romance }
}
}
scope:amazing_toledo_sword = { set_artifact_name = escremire_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Folha, the leaf
name = fp2_struggle.1011.n
trigger = {
root = {
culture = { has_cultural_pillar = language_occitano_romance }
}
}
scope:amazing_toledo_sword = { set_artifact_name = folha_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Proeza, valour
name = fp2_struggle.1011.o
trigger = {
root = {
culture = { has_cultural_pillar = language_occitano_romance }
}
}
scope:amazing_toledo_sword = { set_artifact_name = proeza_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Trebalhar, the tormenter
name = fp2_struggle.1011.p
trigger = {
root = {
culture = { has_cultural_pillar = language_occitano_romance }
}
}
scope:amazing_toledo_sword = { set_artifact_name = trebalhar_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Sufax, like the great hero in days of old
name = fp2_struggle.1011.q
trigger = {
root = {
culture = { has_cultural_pillar = language_berber }
}
}
scope:amazing_toledo_sword = { set_artifact_name = sufax_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Toumellalt, the white one.
name = fp2_struggle.1011.r
trigger = {
root = {
culture = { has_cultural_pillar = language_berber }
}
}
scope:amazing_toledo_sword = { set_artifact_name = toumellalt_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Ayugu, the yoke.
name = fp2_struggle.1011.s
trigger = {
root = {
culture = { has_cultural_pillar = language_berber }
}
}
scope:amazing_toledo_sword = { set_artifact_name = ayugu_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Well, "Ironsoul" of course
name = fp2_struggle.1011.u
trigger = {
root = {
culture = {
NOT = {
has_cultural_pillar = language_iberian
has_cultural_pillar = language_arabic
has_cultural_pillar = language_basque
has_cultural_pillar = language_occitano_romance
has_cultural_pillar = language_berber
}
}
}
}
scope:amazing_toledo_sword = { set_artifact_name = ironsoul_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #I quite like "Mistletoe"...
name = fp2_struggle.1011.v
trigger = {
root = {
culture = {
NOT = {
has_cultural_pillar = language_iberian
has_cultural_pillar = language_arabic
has_cultural_pillar = language_basque
has_cultural_pillar = language_occitano_romance
has_cultural_pillar = language_berber
}
}
}
}
scope:amazing_toledo_sword = { set_artifact_name = mistletoe_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Moor-cleaver, what else?
name = fp2_struggle.1011.w
trigger = {
OR = { has_religion = religion:eastern_orthodox_religion has_religion = religion:catholic_religion has_religion = religion:protestant_religion }
root = {
culture = {
NOT = {
has_cultural_pillar = language_iberian
has_cultural_pillar = language_arabic
has_cultural_pillar = language_basque
has_cultural_pillar = language_occitano_romance
has_cultural_pillar = language_berber
}
}
}
}
stress_impact = {
compassionate = minor_stress_impact_gain
}
scope:amazing_toledo_sword = { set_artifact_name = moormurder_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
option = { #Usurper's blade seem fitting, giving what we did to the guilds...
name = fp2_struggle.1011.x
trigger = {
root = {
culture = {
NOT = {
has_cultural_pillar = language_iberian
has_cultural_pillar = language_arabic
has_cultural_pillar = language_basque
has_cultural_pillar = language_occitano_romance
has_cultural_pillar = language_berber
}
}
}
}
scope:amazing_toledo_sword = { set_artifact_name = usurperblade_name }
custom_tooltip = fp2_struggle.1011.swordsmith_leaves
hidden_effect = {
remove_courtier_or_guest = scope:great_swordsmith
}
}
}
fp2_struggle.1012 = { # Soul of Iron (3), by Ola Jentzsch
type = character_event
title = fp2_struggle.1012.t
desc = fp2_struggle.1012.desc
theme = realm
left_portrait = {
character = root
animation = admiration
}
right_portrait = {
character = scope:great_swordsmith
animation = marshal
}
artifact = { # To display the artifact in the event-window
target = scope:toledo_sword
position = lower_right_portrait
}
trigger = {
has_fp2_dlc_trigger = yes
scope:great_swordsmith = {
is_available_healthy_ai_adult = yes
}
}
immediate = {
save_scope_as = owner
set_artifact_rarity_masterwork = yes
create_artifact = {
name = toledo_sword_name
creator = scope:great_swordsmith
description = toledo_sword_desc
visuals = sword
type = sword
modifier = artifact_masterwork_toledo_sword_modifier
wealth = scope:wealth # This comes from the scripted effect above
quality = scope:quality # This comes from the scripted effect above
save_scope_as = toledo_sword # Allows the sword to be accessed via scope after its creation
}
}
option = { #It is...exquisite. You may go in peace.
name = fp2_struggle.1012.a
flavor = fp2_struggle.1012.swordsmith_leaves
ai_chance = { #Only greedy AI wouldn't pick this option.
base = 10
ai_value_modifier = {
ai_greed = -1
}
}
remove_courtier_or_guest = scope:great_swordsmith
}
option = { #It is as promised. May I not convince you to stay and serve me?
name = fp2_struggle.1012.b
ai_chance = { #Only greedy would pick this option.
base = 10
ai_value_modifier = {
ai_greed = 1
}
}
custom_tooltip = fp2_struggle.1012_swordsmith_stays
remove_treasury_or_gold = major_treasury_or_gold_value #this guy is expensive!
}
}
###################################
# Death of a Councilman
# By Ola Jentzsch
###################################
scripted_trigger fp2_struggle.1020_minority_councillor_faith_trigger = {
save_temporary_scope_as = fp2_struggle_1020_temp_councillor
is_ai = yes
NOT = { is_spouse_of = root }
root.capital_county.faith = {
faith_hostility_level = {
target = scope:fp2_struggle_1020_temp_councillor.faith
value >= faith_hostile_level
}
}
}
fp2_struggle.1020 = {
type = character_event
title = fp2_struggle.1020.t
desc = {
desc = fp2_struggle.1020_desc_opening
first_valid = {
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_beaten_by_mob
}
}
desc = fp2_struggle.1020_desc_beaten_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_burned_by_mob
}
}
desc = fp2_struggle.1020_desc_burned_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_hanged_and_disemboweled_by_mob
}
}
desc = fp2_struggle.1020_desc_hanged_and_disemboweled_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_crucified_by_mob
}
}
desc = fp2_struggle.1020_desc_crucified_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_defenestrated_by_mob
}
}
desc = fp2_struggle.1020_desc_defenestrated_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_molten_silver_by_mob
}
}
desc = fp2_struggle.1020_desc_molten_silver_by_mob
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
death_reason = death_torn_to_pieces_by_mob
}
}
desc = fp2_struggle.1020_desc_torn_to_pieces_by_mob
}
}
first_valid = {
triggered_desc = {
trigger = {
scope:councillor_executor = {
exists = var:relative_created
}
}
desc = fp2_struggle.1020_desc_councillor_had_family
}
triggered_desc = {
trigger = {
scope:minority_councillor = {
fp2_struggle.1020_minority_councillor_faith_trigger = yes
}
}
desc = fp2_struggle.1020_desc_councillor_had_no_family_faith
}
}
}
theme = dread
cooldown = { years = 15 }
override_background = { reference = council_chamber }
left_portrait = {
character = root
animation = disbelief
}
right_portrait = {
character = scope:councillor_executor
animation = anger
}
lower_left_portrait = scope:minority_councillor
trigger = {
has_fp2_dlc_trigger = yes
any_councillor = { fp2_struggle.1020_minority_councillor_faith_trigger = yes }
capital_county = { county_control < low_county_control_limit } #root's capital having low control isn't strictly necessary, but adds to the emergent feeling here
}
immediate = {
random_councillor = { #this is the dead councillor
limit = { fp2_struggle.1020_minority_councillor_faith_trigger = yes }
save_scope_as = minority_councillor
}
capital_county = { save_scope_as = unrest_capital } #so we can use the capital for loc
scope:minority_councillor = { #and this is how they met their untimely end
random_list = {
10 = {
death = {
death_reason = death_beaten_by_mob
}
}
10 = {
death = {
death_reason = death_burned_by_mob
}
}
20 = {
death = {
death_reason = death_hanged_and_disemboweled_by_mob
}
}
20 = {
death = {
death_reason = death_crucified_by_mob
}
}
10 = {
death = {
death_reason = death_defenestrated_by_mob
}
}
20 = {
death = {
death_reason = death_molten_silver_by_mob
}
}
10 = {
death = {
death_reason = death_torn_to_pieces_by_mob
}
}
}
}
if = { #now let's see if there's any relative of the late councillor that could be considered relevant!
limit = {
any_powerful_vassal = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
is_powerful_vassal = yes
}
}
random_powerful_vassal = {
limit = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
is_powerful_vassal = yes
}
save_scope_as = councillor_executor
set_variable = relative_created #this variable is for use in triggers later
}
}
else_if = {
limit = {
any_powerful_vassal = {
is_ai = yes
is_close_family_of = scope:minority_councillor
}
}
random_powerful_vassal = {
limit = {
is_ai = yes
is_close_family_of = scope:minority_councillor
}
save_scope_as = councillor_executor
set_variable = relative_created
}
}
else_if = {
limit = {
any_powerful_vassal = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
}
random_powerful_vassal = {
limit = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
save_scope_as = councillor_executor
set_variable = relative_created
}
}
else_if = {
limit = {
any_neighboring_and_across_water_top_liege_realm_owner = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
OR = {
fp2_character_involved_in_struggle_trigger = yes
fp2_character_interloper_in_struggle_trigger = yes
}
}
}
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
OR = {
fp2_character_involved_in_struggle_trigger = yes
fp2_character_interloper_in_struggle_trigger = yes
}
}
save_scope_as = councillor_executor
set_variable = relative_created
}
}
else_if = {
limit = {
any_ruler = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
}
random_ruler = {
limit = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
save_scope_as = councillor_executor
set_variable = relative_created
}
}
else_if = {
limit = {
any_courtier = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
}
random_courtier = {
limit = {
is_ai = yes
is_close_or_extended_family_of = scope:minority_councillor
}
save_scope_as = councillor_executor
set_variable = relative_created
}
}
else = { #if no relevant relative was found, we instead create a community leader to fire option b with!
create_character = {
age = { 20 80 }
location = root.capital_province
template = merchant_template
culture = scope:minority_councillor.culture
faith = scope:minority_councillor.faith
save_scope_as = councillor_executor
}
hidden_effect = {
scope:councillor_executor = { #just because, I want more rotund people
add_character_modifier = {
modifier = obese_modifier
}
}
}
}
scope:minority_councillor = {
every_close_or_extended_family_member = {
custom = all_family_members
if = {
limit = { is_ai = yes }
add_opinion = {
target = root
opinion = -20
modifier = blames_for_death_of_relative_opinion
}
}
}
}
}
option = { #Make amends to councillor's dynasty
name = fp2_struggle.1020.a
trigger = {
scope:councillor_executor = {
exists = var:relative_created
}
}
ai_chance = { #rational and somewhat honorable AIs pick this option
base = 10
ai_value_modifier = {
ai_rationality = 0.5
ai_honor = 0.3
#but bold and vengeful ones do not
ai_boldness = -0.5
ai_vengefulness = -0.5
}
}
stress_impact = {
#arrogant characters don't care for this
arrogant = minor_stress_impact_gain
callous = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
#socially awkward ones aren't fond of it either
paranoid = minor_stress_impact_gain
shy = minor_stress_impact_gain
}
add_character_modifier = {
modifier = compelling_apology_modifier
years = 10
}
scope:minority_councillor = {
every_close_or_extended_family_member = {
custom = all_family_members
if = {
limit = { is_ai = yes }
add_opinion = {
target = root
opinion = 10
modifier = made_amends_opinion
}
}
}
}
}
option = { #Pay restitution to councillor's people
name = fp2_struggle.1020.b
trigger = {
scope:councillor_executor = {
NOT = { exists = var:relative_created }
}
}
ai_chance = { #compassionate AIs takes this option
base = 10
ai_value_modifier = {
ai_compassion = 0.7
ai_honor = 0.3
#but zealous and vengeful ones do not
ai_zeal = -0.5
ai_vengefulness = -0.5
}
}
stress_impact = {
#arrogant characters don't wanna do this
arrogant = minor_stress_impact_gain
callous = minor_stress_impact_gain
stubborn = minor_stress_impact_gain
#nor those who hate the people
paranoid = minor_stress_impact_gain
vengeful = minor_stress_impact_gain
}
remove_treasury_or_gold = medium_treasury_or_gold_value #restitution isn't free!
add_character_modifier = {
modifier = restitution_to_minorities_modifier
years = 15
}
}
option = { #Hunt down the perpetrators
name = fp2_struggle.1020.c
ai_chance = { #energetic and vengeful AI picks this option.
base = 10
ai_value_modifier = {
ai_energy = 0.5
ai_vengefulness = 0.7
#but compassionate ones might not
ai_compassion = -0.7
}
}
stress_impact = { #this is cruel and a lot of effort...
compassionate = minor_stress_impact_gain
forgiving = minor_stress_impact_gain
lazy = minor_stress_impact_gain
}
add_character_modifier = {
modifier = memorable_public_execution_modifier
years = 10
}
add_prestige = minor_prestige_gain
if = {
limit = { exists = var:relative_created }
scope:councillor_executor = {
add_opinion = {
target = root
opinion = 20
modifier = avenged_relative_opinion
}
}
}
}
option = { #Restore order in the capital
name = fp2_struggle.1020.d
ai_chance = { #rational and compassionate AIs pick this option
base = 10
ai_value_modifier = {
ai_rationality = 0.9
ai_compassion = 0.3
#but bold and zealous ones do not
ai_boldness = -0.5
ai_zeal = -0.5
}
}
stress_impact = {
#cruel or lazy characters don't bother with this
callous = minor_stress_impact_gain
lazy = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
#and vengeful ones would rather pursue revenge.
vengeful = minor_stress_impact_gain
}
if = {
limit = { exists = var:relative_created }
scope:councillor_executor = {
add_opinion = {
target = root
opinion = -10
modifier = ignored_demands_opinion
}
}
}
add_prestige = minor_prestige_gain
root.capital_county = { change_county_control = medium_county_control_gain }
}
}
###################################
# The Vision
# By Ola Jentzsch
###################################
fp2_struggle.1050 = {
type = character_event
title = fp2_struggle.1050.t
desc = {
first_valid = {
desc = fp2_struggle.1050.desc_opening
}
first_valid = {
triggered_desc = {
trigger = {
OR = { has_religion = religion:eastern_orthodox_religion has_religion = religion:catholic_religion has_religion = religion:protestant_religion }
scope:visionary_spouse= {
has_OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion }
}
}
desc = fp2_struggle.1050.desc_christian
}
triggered_desc = {
trigger = {
has_religion = religion:islam_religion
scope:visionary_spouse= {
has_religion = religion:islam_religion
}
}
desc = fp2_struggle.1050.desc_islamic
}
triggered_desc = {
trigger = {
has_religion = religion:germanic_religion
scope:visionary_spouse= {
has_religion = religion:germanic_religion
}
}
desc = fp2_struggle.1050.desc_rampaging_barbarian_heathen
}
desc = fp2_struggle.1050.desc_non_barbarian_heathen
}
first_valid = {
triggered_desc = {
trigger = {
root = {
OR = {
culture = culture:andalusian
culture = culture:bedouin
}
}
scope:visionary_spouse = {
OR = {
culture = culture:andalusian
culture = culture:bedouin
}
}
}
desc = fp2_struggle.1050.desc_islamic_heritage
}
triggered_desc = {
trigger = {
has_faith = faith:catholic
scope:visionary_spouse= {
has_faith = faith:catholic
}
}
desc = fp2_struggle.1050.desc_christian_bling_reference_drop
}
desc = fp2_struggle.1050.desc_middle_neutral_version
}
first_valid = {
triggered_desc = {
trigger = {
scope:visionary_spouse = {
OR = {
has_relation_lover = root
has_relation_soulmate = root
}
}
}
desc = fp2_struggle.1050.desc_love_and_warmth_ending
}
desc = fp2_struggle.1050.desc_no_love_and_warmth_ending
}
}
theme = death
override_background = { reference = battlefield } ##
left_portrait = {
character = root
animation = disapproval
}
right_portrait = {
character = scope:visionary_spouse
animation = paranoia
}
trigger = {
has_fp2_dlc_trigger = yes
is_landed_or_landless_administrative = yes
any_spouse = { is_courtier = yes }
fp2_character_involved_in_struggle_trigger = yes
struggle:iberian_struggle = { is_struggle_phase = struggle_iberia_phase_hostility }
}
cooldown = { #this event shouldn't fire too often, since the context with the spouse's dream is pretty specific.
years = 100
}
immediate = {
random_spouse = {
weight = {
base = 1
modifier = {
factor = 5
this = primary_spouse
}
}
save_scope_as = visionary_spouse
}
scope:visionary_spouse = {
add_character_modifier = {
modifier = foreboding_visions_modifier
years = 10
}
}
hidden_effect = {
scope:visionary_spouse = {
contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = no }
}
}
}
option = {
name = fp2_struggle.1050.a
trigger = {
faith = {
OR = {
has_doctrine_parameter = witchcraft_illegal
has_doctrine_parameter = witchcraft_shunned
}
}
}
ai_chance = { #bold, vengeful and zealous AI goes for this option
base = 10
ai_value_modifier = {
ai_boldness = 0.5
ai_vengefulness = 0.7
ai_zeal = 0.7
ai_compassion = -1 #whereas compassionate, rational and honorable ones really, really doesn't
ai_rationality = -1
ai_honor = -0.5
}
}
stress_impact = {
compassionate = major_stress_impact_gain #compassionate people don't accuse their spouse of being a witch
craven = minor_stress_impact_gain #cravens don't dare throw her in jail
trusting = medium_stress_impact_gain #and trusting people don't accuse her either
eccentric = minor_stress_impact_loss
}
custom_tooltip = fp2_struggle.1050.spouse_imprisoned #you throw your spouse into the dungeon for being a suspected witch
hidden_effect = {
scope:visionary_spouse = {
hard_imprison_character_effect = {
TARGET = this
IMPRISONER = root
}
}
}
}
option = {
name = fp2_struggle.1050.b
ai_chance = { #lazy zealous AI pick this option
base = 10
ai_value_modifier = {
ai_zeal = 0.8
ai_energy = -0.7
ai_vengefulness = -0.7
}
}
stress_impact = {
cynical = minor_stress_impact_gain #cynics don't really put their faith in God
}
duel = { #this duel is root trying to make their spouse feel better.
skill = diplomacy
value = medium_skill_rating
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2
}
modifier = {
add = 15
has_trait = compassionate
}
modifier = {
add = 20
has_trait = zealous
}
send_interface_toast = {
title = comforting_spouse_visionary_toast.success
left_icon = root
right_icon = scope:visionary_spouse
scope:visionary_spouse = {
add_opinion = {
target = root
modifier = comforted_opinion
}
}
custom_tooltip = fp2_struggle.1050.condition_might_improve
hidden_effect = {
scope:visionary_spouse = {
recover_from_disease_effect = { DISEASE = ill }
}
}
}
}
20 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1
}
modifier = {
add = 20
has_trait = callous
}
modifier = {
add = 10
has_trait = sadistic
}
send_interface_toast = {
title = comforting_spouse_visionary.failure
left_icon = root
right_icon = scope:visionary_spouse
scope:visionary_spouse = {
add_opinion = {
target = root
modifier = failed_comfort_opinion
}
}
custom_tooltip = fp2_struggle.1050.condition_might_get_worse
hidden_effect = {
scope:visionary_spouse = {
add_character_modifier = {
modifier = mysterious_prophetess_illness_modifier
years = 5
}
}
}
}
}
}
}
option = { #Come, tell me more of your visions
name = fp2_struggle.1050.c
ai_chance = { #compassionate AIs pick this option
base = 10
ai_value_modifier = {
ai_compassion = 1
ai_energy = 0.5
ai_vengefulness = -0.5
}
}
stress_impact = { #unpleasant types don't pick this option...
arrogant = minor_stress_impact_gain
callous = medium_stress_impact_gain
sadistic = medium_stress_impact_gain
eccentric = minor_stress_impact_loss
}
scope:visionary_spouse = {
if = {
limit = {
OR = {
has_relation_lover = root
has_relation_soulmate = root
}
}
add_opinion = {
target = root
modifier = listened_opinion
}
}
else = {
progress_towards_lover_effect = {
CHARACTER = root
REASON = lover_comforted_nightmare
OPINION = 0
}
}
}
custom_tooltip = fp2_struggle.1050.condition_might_improve
hidden_effect = {
scope:visionary_spouse = {
recover_from_disease_effect = { DISEASE = ill }
}
}
add_character_modifier = {
modifier = frightened_by_portent_modifier
years = 10
}
}
option = { #Leave me be, I am planning my next conquest
name = fp2_struggle.1050.d
ai_chance = { #Ambitious AIs pick this option
base = 10
ai_value_modifier = {
ai_boldness = 0.5
ai_energy = 0.7
ai_greed = 0.5
ai_compassion = -0.7
}
}
stress_impact = {
compassionate = minor_stress_impact_gain
eccentric = minor_stress_impact_gain
}
scope:visionary_spouse = {
add_opinion = {
target = root
modifier = failed_comfort_opinion
}
}
custom_tooltip = fp2_struggle.1050.condition_might_get_very_worse
hidden_effect = {
random = {
chance = 90
scope:visionary_spouse = {
add_character_modifier = {
modifier = mysterious_prophetess_illness_modifier
years = 5
}
add_trait = depressed_1
}
}
}
}
}
###################################
# Disorderly Market
# By Hugo Cortell
################################### VSCODE: Use control + / to comment/uncomment entire blocks of code. And control + shift + [ (or ]) to fold/unfold a block!
scripted_trigger fp2_struggle_2000_check_holds_city_scripted_trigger = {
title_province = { has_holding_type = city_holding }
exists = holder
holder != root
}
fp2_struggle.2000 = {
type = character_event
title = fp2_struggle.2000.t
desc = fp2_struggle.2000.desc
theme = stewardship
cooldown = { years = 5 }
override_background = { reference = market }
left_portrait = root
right_portrait = {
character = scope:fp2_2000_market_inspector
animation = anger
}
trigger = {
has_fp2_dlc_trigger = yes
has_religion = religion:islam_religion
faith = {
OR = {
has_doctrine = tenet_tax_nonbelievers
has_doctrine = special_doctrine_jizya
has_doctrine = tenet_religious_legal_pronouncements
has_doctrine = tenet_legalism
}
}
exists = cp:councillor_steward
cp:councillor_steward = { is_available_ai_adult = yes }
exists = cp:councillor_court_chaplain
cp:councillor_court_chaplain = { is_available_ai_adult = yes }
any_sub_realm_barony = {
fp2_struggle_2000_check_holds_city_scripted_trigger = yes
}
any_pool_character = {
province = root.capital_province
has_no_particular_noble_roots_trigger = yes
is_available_healthy_ai_adult = yes
}
}
immediate = {
random_sub_realm_barony = {
limit = { fp2_struggle_2000_check_holds_city_scripted_trigger = yes }
county = { save_scope_as = se_2000_county }
}
cp:councillor_steward = { save_scope_as = 2000_scoped_steward }
cp:councillor_court_chaplain = { save_scope_as = 2000_scoped_chaplain }
create_character = {
age = { 20 50 }
location = root.capital_province
gender_female_chance = root_faith_dominant_gender_female_chance
trait = just
trait = craven
trait = patient
trait = temperate
culture = root.culture
faith = root.faith
dynasty = none
after_creation = {
add_gold = { minor_gold_value medium_gold_value }
add_prestige = { minor_prestige_gain medium_prestige_gain }
add_piety = { medium_piety_gain major_piety_gain }
}
save_scope_as = fp2_2000_market_inspector
}
if = { # RoCo
limit = {
has_dlc_feature = royal_court
employs_court_position = chief_qadi_court_position
any_court_position_holder = {
type = chief_qadi_court_position
is_available_ai_adult = yes
}
}
random_court_position_holder = {
type = chief_qadi_court_position
limit = {
is_available_ai_adult = yes
}
save_scope_as = fp2_2000_chief_qadi
}
}
}
option = { # Mandatory lunatic option (now rakish)
name = fp2_struggle.2000.f
trigger = { has_trait = rakish }
stress_impact = {
chaste = major_stress_impact_gain
zealous = major_stress_impact_gain
}
flavor = fp2_struggle.2000.f.desc
send_interface_toast = {
type = event_stewardship_good_with_text
title = fp2_struggle.2000.f.notif
desc = fp2_struggle.2000.f.notif.desc
stress_impact = { chaste = medium_stress_impact_gain }
scope:2000_scoped_chaplain = {
add_opinion = {
target = root
modifier = impious_opinion
opinion = -25
}
}
add_piety = major_piety_loss
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_free_market_boom_modifier
years = 5
}
}
add_character_modifier = {
modifier = fp2_lenient_towards_foreign_merchants_modifier
years = 5
}
}
ai_chance = {
base = 15
}
}
option = { # Guards! Purge!
name = fp2_struggle.2000.e
trigger = {
OR = {
has_trait = reaver
has_trait = order_member
has_trait = aggressive_attacker
}
}
stress_impact = {
just = major_stress_impact_gain
forgiving = major_stress_impact_gain
calm = minor_stress_impact_gain
trusting = medium_stress_impact_gain
}
if = {
limit = { has_trait = sadistic } # Small detail
send_interface_toast = {
type = event_toast_effect_good
title = fp2_ruthless_market_oversight_modifier
left_icon = root
add_dread = medium_dread_gain
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_ruthless_market_oversight_modifier
years = 5
}
}
}
}
else = {
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_ruthless_market_oversight_modifier
left_icon = root
add_dread = medium_dread_gain
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_ruthless_market_oversight_modifier
years = 5
}
}
}
}
ai_chance = {
base = 5
modifier = {
add = 15
OR = {
has_trait = sadistic
has_trait = zealous
has_trait = wrathful
}
}
modifier = {
add = -40
has_trait = compassionate
}
}
}
option = { # Intervene with threat of calling judge
name = fp2_struggle.2000.a
flavor = fp2_struggle.2000.a.desc
duel = {
skill = diplomacy
value = medium_skill_rating
30 = {
desc = fp2_struggle.2000.a.a
compare_modifier = {
value = scope:duel_value
multiplier = 2.5
}
modifier = {
add = 5
has_trait = fickle
}
modifier = {
add = 20
has_trait = craven
}
modifier = {
add = 3
has_trait = lazy
}
modifier = {
add = 3
has_trait = arbitrary
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2000.a.a.notif
if = { # RoCo
limit = {
exists = scope:fp2_2000_chief_qadi
}
reverse_add_opinion = {
target = scope:fp2_2000_chief_qadi
modifier = respect_opinion
opinion = 15
}
}
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_inefficient_market_oversight_modifier
years = 5
}
}
}
}
70 = {
desc = fp2_struggle.2000.a.b
compare_modifier = {
value = scope:duel_value
multiplier = 2.5
}
modifier = {
add = 5
has_trait = humble
}
modifier = {
add = 5
has_trait = ambitious
}
modifier = {
add = 10
has_trait = gregarious
}
modifier = {
add = 15
has_trait = just
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2000.a.b.notif
left_icon = scope:2000_scoped_steward
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_smooth_market_oversight_modifier
years = 5
}
}
}
}
}
ai_chance = {
base = 60
modifier = {
add = 25
has_trait = just
}
modifier = {
add = -25
has_trait = arbitrary
}
modifier = {
add = -15
has_trait = lazy
}
modifier = {
add = -5
has_trait = arrogant
}
}
}
option = { # Let the free market decide, free from tradition
name = fp2_struggle.2000.d
flavor = fp2_struggle.2000.d.desc
stress_impact = {
zealous = major_stress_impact_gain
humble = medium_stress_impact_gain
content = medium_stress_impact_gain
just = minor_stress_impact_gain
temperate = medium_stress_impact_gain
}
reverse_add_opinion = {
target = scope:2000_scoped_chaplain
modifier = impious_opinion
opinion = -30
}
reverse_add_opinion = {
target = scope:2000_scoped_steward
modifier = respect_opinion
opinion = 15
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_free_market_boom_modifier
left_icon = scope:2000_scoped_steward
add_piety = medium_piety_loss
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_free_market_boom_modifier
years = 6
}
}
}
ai_chance = {
base = 0
modifier = {
add = 15
has_trait = greedy
}
modifier = {
add = -40
has_trait = zealous
}
}
}
option = { # Reprimand the inspector
name = fp2_struggle.2000.b
flavor = fp2_struggle.2000.b.desc
stress_impact = { compassionate = medium_stress_impact_gain }
add_dread = miniscule_dread_gain
send_interface_toast = {
type = event_stewardship_good_with_text
title = fp2_struggle.2000.b.notif
desc = fp2_struggle.2000.b.notif.desc
scope:se_2000_county = {
add_county_modifier = {
modifier = fp2_smooth_market_oversight_modifier
years = 5
}
}
scope:2000_scoped_chaplain = {
add_opinion = {
target = root
modifier = cruelty_opinion
opinion = -15
}
}
}
ai_chance = {
base = 34
modifier = {
add = 15
OR = {
has_trait = sadistic
has_trait = callous
}
}
modifier = {
add = 5
has_trait = impatient
}
modifier = {
add = 3
has_trait = diligent
}
modifier = {
add = -25
has_trait = compassionate
}
modifier = {
add = -15
OR = {
has_trait = trusting
has_trait = calm
has_trait = forgiving
}
}
modifier = {
add = -5
has_trait = humble
}
}
}
after = { scope:fp2_2000_market_inspector = { silent_disappearance_effect = yes } }
}
###################################
# Desperate Villagers Seek New Lord
# By Hugo Cortell
###################################
scripted_trigger fp2_struggle_2001_desperate_county_scripted_trigger = {
NOT = { root = { has_claim_on = prev } }
trigger_if = { # Checking that we are not offering up the capital of a duke or higher
limit = {
holder = {
highest_held_title_tier >= tier_duchy
}
}
this != holder.capital_county
}
holder = { # Balance, malus must not affect players
is_ai = yes
top_liege = { is_ai = yes }
}
OR = {
county_opinion < 0
county_control < 81 # Note: if considered too restrictive for normal play, update to != 100
}
squared_distance = {
target = root.capital_province
value < squared_distance_medium
}
}
fp2_struggle.2001 = {
type = character_event
title = fp2_struggle.2001.t
desc = {
desc = fp2_struggle.2001.desc
triggered_desc = {
trigger = {
is_allied_to = scope:fp2_2001_desperate_county.holder
}
desc = fp2_struggle.2001.desc.extra.a
}
triggered_desc = {
trigger = {
has_truce = scope:fp2_2001_desperate_county.holder
}
desc = fp2_struggle.2001.desc.extra.b
}
}
theme = vassal
cooldown = { years = 20 }
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:fp2_2001_desperate_elder
animation = beg
}
lower_right_portrait = scope:fp2_2001_desperate_county.holder.top_liege
trigger = {
has_fp2_dlc_trigger = yes
struggle:iberian_struggle = {
is_struggle_phase = struggle_iberia_phase_hostility
}
any_neighboring_and_across_water_top_liege_realm_owner = {
fp2_character_involved_in_struggle_trigger = yes
any_sub_realm_county = {
fp2_struggle_2001_desperate_county_scripted_trigger = yes
}
}
}
immediate = {
if = {
limit = { exists = cp:councillor_court_chaplain }
cp:councillor_court_chaplain = { save_scope_as = 2001_scoped_chaplain }
}
random_neighboring_and_across_water_top_liege_realm_owner = {
limit = {
fp2_character_involved_in_struggle_trigger = yes
any_sub_realm_county = { fp2_struggle_2001_desperate_county_scripted_trigger = yes }
}
random_sub_realm_county = {
limit = { fp2_struggle_2001_desperate_county_scripted_trigger = yes }
save_scope_as = fp2_2001_desperate_county
}
}
create_character = {
age = { 38 71 }
location = scope:fp2_2001_desperate_county.title_province
gender_female_chance = root_faith_dominant_gender_female_chance
trait = peasant_leader
random_traits = yes
culture = scope:fp2_2001_desperate_county.culture
random_faith = {
root.faith = { trigger = { always = yes } }
scope:fp2_2001_desperate_county.faith = { trigger = { always = yes } }
}
dynasty = none
after_creation = { add_gold = medium_gold_value }
save_scope_as = fp2_2001_desperate_elder
}
# AI war-savviness calc variables
scope:fp2_2001_desperate_county.holder.top_liege = { save_temporary_scope_as = target_military }
set_variable = {
name = ai_strength_multiplier # This is how much stronger root has to be (could even be used for custom loc! but the script is complex enough as it is)
value = 1.25
}
if = { # Calculate if AI can win war, decision of war requires traits AND for it to be favourable. This calcs if it is favourable
limit = {
is_ai = yes # Are you AI?
scope:fp2_2001_desperate_county.holder.top_liege = {
NOT = {
is_at_war_with = root
is_ai = no # Enemy must be AI (prevents AI from attacking player characters, otherwise it would feel as if the attack was random)
}
}
# Actual strength is calc below, thanks to joe
root_military_strength_higher_than_military_target_value > target_military_strength_root_value
}
save_scope_as = fp2_se_2001_ai_war_winnable # Acts as boolean for wether or not the AI has a chance at winning
}
remove_variable = ai_strength_multiplier
# Option exclusivity stuffs, easier to keep track of logic
if = { # Faith
limit = {
OR = {
has_trait = holy_warrior
has_trait = devoted
has_trait = heresiarch
has_trait = order_member
has_trait = crusader_king
has_trait = faith_warrior
}
NOT = {
faith = scope:fp2_2001_desperate_elder.faith
has_trait = excommunicated
}
}
save_scope_as = fp2_2001_exclusive_option_faith
}
else_if = { # Greedy
limit = {
OR = {
has_trait = greedy
has_trait = avaricious
has_trait = logistician
}
}
save_scope_as = fp2_2001_exclusive_option_greed
}
}
option = { # Pay tribute to me
name = fp2_struggle.2001.d
custom_tooltip = fp2_struggle.2001.a.desc
trigger = {
exists = scope:fp2_2001_exclusive_option_greed
NOT = { exists = scope:fp2_2001_exclusive_option_faith }
OR = { # Tricks autoformatter into showing trait icons (wasteful)
has_trait = greedy
has_trait = avaricious
has_trait = logistician
}
}
stress_impact = {
compassionate = minor_stress_impact_gain
humble = minor_stress_impact_gain
content = minor_stress_impact_gain
}
save_scope_value_as = {
name = fp2_se_2001_eventchoiceramifications
value = flag:demand_tribute
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2001.a.notif
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
add_unpressed_claim = scope:fp2_2001_desperate_county
}
send_interface_toast = {
type = event_stewardship_good_with_text
title = fp2_struggle.2001.d.notif
desc = fp2_struggle.2001.d.notif.desc
left_icon = scope:fp2_2001_desperate_elder
scope:fp2_2001_desperate_elder = {
pay_treasury_or_gold = {
target = root
value = medium_treasury_or_gold_value
}
}
}
if = {
limit = { exists = cp:councillor_steward }
cp:councillor_steward = {
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 15
}
}
}
hidden_effect = {
trigger_event = {
id = fp2_struggle.2002
years = 5
}
}
add_character_modifier = {
modifier = fp2_2001_promise_reminder
years = 5
}
ai_chance = {
base = 0
modifier = {
add = 10
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = brave
}
modifier = {
add = 5
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = compassionate
}
modifier = {
add = 40
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = greedy
}
}
}
option = { # Are you willing to give up your god for it?
trigger = {
exists = scope:fp2_2001_exclusive_option_faith
OR = {
has_trait = holy_warrior # Tricking the autoformatter into showing relevant trait
has_trait = devoted
has_trait = heresiarch
has_trait = order_member
has_trait = crusader_king
has_trait = faith_warrior
}
}
name = fp2_struggle.2001.b
custom_tooltip = fp2_struggle.2001.a.desc
if = {
limit = { exists = scope:2001_scoped_chaplain }
custom_tooltip = fp2_struggle.2001.a.a.desc
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2001.a.notif
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
add_unpressed_claim = scope:fp2_2001_desperate_county
}
send_interface_toast = {
type = event_stewardship_good_with_text
title = fp2_struggle.2001.b.notif
desc = fp2_struggle.2001.b.notif.desc
left_icon = scope:fp2_2001_desperate_elder
if = {
limit = { exists = scope:2001_scoped_chaplain }
scope:2001_scoped_chaplain = {
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 40
}
}
save_scope_value_as = {
name = fp2_se_2001_eventchoiceramifications
value = flag:demand_conversion_chap # yes
}
}
else = {
save_scope_value_as = {
name = fp2_se_2001_eventchoiceramifications
value = flag:demand_conversion_no_chap # no
}
}
}
every_powerful_vassal = {
limit = { faith = root.faith }
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = respect_opinion
opinion = 15
}
}
scope:fp2_2001_desperate_county = { set_county_faith = root.faith }
hidden_effect = {
scope:fp2_2001_desperate_elder = { set_character_faith_with_conversion = root.faith }
trigger_event = {
id = fp2_struggle.2002
years = 5
}
}
add_character_modifier = {
modifier = fp2_2001_promise_reminder
years = 5
}
ai_chance = {
base = 0
modifier = {
add = 15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = brave
}
modifier = {
add = 5
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = just
}
modifier = {
add = 50
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = zealous
}
modifier = {
add = -5
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = lazy
}
}
}
option = { # You have my word
name = fp2_struggle.2001.a
custom_tooltip = fp2_struggle.2001.b.desc # Three extra years for not attaching any strings
stress_impact = {
craven = minor_stress_impact_gain
shy = minor_stress_impact_gain
lazy = minor_stress_impact_gain
arrogant = major_stress_impact_gain
}
if = {
limit = {
exists = scope:fp2_2001_exclusive_option_greed
NOT = { exists = scope:fp2_2001_exclusive_option_faith }
}
stress_impact = {
greedy = medium_stress_impact_gain
avaricious = minor_stress_impact_gain
}
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2001.a.notif
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
add_unpressed_claim = scope:fp2_2001_desperate_county
}
every_powerful_vassal = {
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = respect_opinion
opinion = 15
}
}
hidden_effect = {
trigger_event = {
id = fp2_struggle.2002
years = 10
}
}
add_character_modifier = {
modifier = fp2_2001_promise_reminder
years = 10
}
ai_chance = {
base = 0
modifier = {
add = 25
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = brave
}
modifier = {
add = 15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = just
}
modifier = {
add = 15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = compassionate
}
modifier = {
add = -35
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = arrogant
}
modifier = {
add = -15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = lazy
}
}
}
option = { # Prove it to me, point your spears at your liege (rise up)
name = fp2_struggle.2001.c
custom_tooltip = fp2_struggle.2001.a.desc
trigger = {
scope:fp2_2001_desperate_county = {
can_title_create_faction = {
type = peasant_faction
target = scope:fp2_2001_desperate_county.holder
}
}
NOT = {
exists = scope:fp2_2001_exclusive_option_greed
exists = scope:fp2_2001_exclusive_option_faith
}
}
stress_impact = {
craven = medium_stress_impact_gain
content = minor_stress_impact_gain
}
save_scope_value_as = {
name = fp2_se_2001_eventchoiceramifications
value = flag:peasant_revolt
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2001.a.notif
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
add_unpressed_claim = scope:fp2_2001_desperate_county
}
every_powerful_vassal = {
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
}
scope:fp2_2001_desperate_county = { # Create faction
title_create_faction = {
type = peasant_faction
target = scope:fp2_2001_desperate_county.holder
}
holder = {
every_targeting_faction = { # go through all existing factions
if = {
limit = {
any_faction_county_member = { this = scope:fp2_2001_desperate_county } # check if least one member belongs to the county
}
save_scope_as = fp2_se_2001_peasant_faction
}
}
}
}
hidden_effect = {
trigger_event = {
id = fp2_struggle.2002
years = 5
}
}
add_character_modifier = {
modifier = fp2_2001_promise_reminder
years = 5
}
ai_chance = {
base = 0
modifier = {
add = 15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = brave
}
modifier = {
add = 25
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = ambitious
}
modifier = {
add = 10
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = just
}
modifier = {
add = -15
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = arrogant
}
modifier = {
add = -5
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = lazy
}
}
}
option = { # Betray and inform ruler of treachery
name = fp2_struggle.2001.f
stress_impact = {
compassionate = major_stress_impact_gain
forgiving = major_stress_impact_gain
}
scope:fp2_2001_desperate_elder = {
death = {
death_reason = death_execution
killer = root
}
}
if = {
limit = { is_allied_to = scope:fp2_2001_desperate_county.holder } # You stood by your allies
every_powerful_vassal = {
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = respect_opinion
opinion = 10
}
}
if = {
limit = { NOT = { has_trait = arrogant } }
scope:fp2_2001_desperate_county.holder = {
progress_towards_friend_effect = {
REASON = friend_informed_ally_of_betrayal
CHARACTER = root
OPINION = 0
}
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 25
}
}
}
}
else = {
every_powerful_vassal = { # Your vassals question your integrity
custom = fp2_every_major_vassal_notifier
limit = {
NOR = {
has_trait = arbitrary
has_trait = sadistic
has_trait = arrogant
}
}
add_opinion = {
target = root
modifier = disgusted_opinion
opinion = -10
}
}
scope:fp2_2001_desperate_county.holder = {
add_opinion = {
target = root
modifier = respect_opinion
opinion = 40
}
progress_towards_friend_effect = {
REASON = friend_informed_ally_of_betrayal
CHARACTER = root
OPINION = 0
}
}
}
ai_chance = {
base = 0
modifier = {
add = 5
has_trait = deceitful
is_allied_to = scope:fp2_2001_desperate_county.holder
}
modifier = {
add = -25
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = brave
}
modifier = {
add = -15
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = just
}
modifier = {
add = -25
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = compassionate
}
modifier = {
add = 35
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = arrogant
}
modifier = {
add = 10
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = sadistic
}
modifier = {
add = 15
NOT = { is_allied_to = scope:fp2_2001_desperate_county.holder }
has_trait = deceitful
}
}
}
option = { # Dismiss
name = fp2_struggle.2001.e
custom_tooltip = fp2_struggle.2001.e.desc
stress_impact = { compassionate = minor_stress_impact_gain }
scope:fp2_2001_desperate_county.holder.top_liege.capital_province.county = {
if = {
limit = { root = { is_allied_to = scope:fp2_2001_desperate_county.holder } }
hidden_effect = { # Hides effect if allied
add_county_modifier = {
modifier = fp2_forsaken_turned_levies_modifier
years = 6
}
}
}
else = {
add_county_modifier = {
modifier = fp2_forsaken_turned_levies_modifier
years = 5
}
}
}
save_scope_as = did_not_call_next_event
ai_chance = {
base = 100
modifier = {
add = 25
exists = scope:fp2_se_2001_ai_war_winnable
has_trait = craven
}
modifier = {
add = -45
exists = scope:fp2_se_2001_ai_war_winnable
}
}
}
after = {
if = {
limit = { exists = scope:fp2_se_2001_peasant_faction }
scope:fp2_2001_desperate_elder = { save_scope_as = peasant_leader }
scope:fp2_2001_desperate_county = { save_scope_as = peasant_county }
scope:fp2_se_2001_peasant_faction = {
setup_peasant_leader_effect = yes
faction_start_war = {}
faction_spawn_member_county_armies_effect = {
FACTION = scope:fp2_se_2001_peasant_faction
ARMY_OWNER = scope:fp2_2001_desperate_elder
PEASANT_ARMY_NAME = peasant_faction_event_troops
}
}
}
if = {
limit = {
exists = scope:did_not_call_next_event
scope:fp2_2001_desperate_elder = { is_alive = yes }
}
scope:fp2_2001_desperate_elder = {
silent_disappearance_effect = yes
}
}
}
}
# QUEST FUNCTION, check if player managed to complete objective
fp2_struggle.2002 = {
hidden = yes
immediate = { # VICTORY STATE BELOW
if = {
limit = { scope:fp2_2001_desperate_county.holder.top_liege = root.top_liege } # check if lands belong to your state/kingdom/side
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2002.t.a
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
if = {
limit = { exists = scope:fp2_se_2001_eventchoiceramifications }
if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:demand_conversion_chap } # You keet your promise to god
add_piety = major_piety_gain
}
else_if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:demand_conversion_no_chap } # Without a chap, this is more impressive but less pious
add_piety = medium_piety_gain
add_prestige = medium_prestige_gain
}
else_if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:peasant_revolt } # You lead peasants into battle and won
add_prestige = minor_prestige_gain
}
else = {
debug_log = "Scope fp2_se_2001_eventchoiceramifications exists but has not been assigned a valid value!"
debug_log_scopes = yes
}
}
scope:fp2_2001_desperate_county = {
add_county_modifier = {
modifier = county_listened_to_locals_modifier
years = 12
}
change_county_control = major_county_control_gain
}
}
}
else = { # FAILURE STATE BELOW
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2002.t.b
left_icon = root
right_icon = scope:fp2_2001_desperate_elder
add_prestige = minor_prestige_loss
if = {
limit = { exists = scope:fp2_se_2001_eventchoiceramifications }
if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:demand_conversion_chap } # You failed to keep your promise to god
add_piety = medium_piety_loss
scope:2001_scoped_chaplain = {
add_opinion = {
target = root
modifier = impious_opinion
opinion = -40
}
}
}
else_if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:demand_conversion_no_chap } # Without a chap, this is more impressive but less pious
add_piety = minor_piety_loss
add_prestige = minor_prestige_loss
}
else_if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:demand_tribute } # Being a weasel makes you look petty
add_prestige = medium_prestige_loss
}
else_if = {
limit = { scope:fp2_se_2001_eventchoiceramifications = flag:peasant_revolt } # You took their lives in exchange for freedom, yet returned nothing
add_piety = minor_piety_loss
add_prestige = major_prestige_loss
show_as_tooltip = {
scope:fp2_2001_desperate_county = { # This will happen anyways, but showing it creates more impact
holder = {
top_liege.capital_province.county = {
add_county_modifier = {
modifier = fp2_forsaken_turned_levies_modifier
years = 8
}
}
}
}
}
}
else = {
debug_log = "Scope fp2_se_2001_eventchoiceramifications exists but has not been assigned a valid value!"
debug_log_scopes = yes
}
}
every_powerful_vassal = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -10
}
}
hidden_effect = {
scope:fp2_2001_desperate_county = {
change_county_control = medium_county_control_gain
holder = {
top_liege.capital_province.county = {
add_county_modifier = {
modifier = fp2_forsaken_turned_levies_modifier
years = 8
}
}
}
}
}
}
}
scope:fp2_2001_desperate_elder = {
silent_disappearance_effect = yes
}
}
}
###################################
# Lost Migratory Birds
# By Hugo Cortell
###################################
scripted_trigger fp2_struggle_2003_check_has_city_scripted_trigger = {
title_province = { has_holding_type = city_holding }
exists = holder
}
fp2_struggle.2003 = {
type = character_event
title = fp2_struggle.2003.t
desc = fp2_struggle.2003.desc
theme = stewardship
override_background = { reference = army_camp }
cooldown = { years = 50 }
left_portrait = root
right_portrait = {
character = scope:fp2_2003_merc_actor
animation = loss_1 # Note: two_handed_1_aggressive could also be used
}
trigger = {
has_fp2_dlc_trigger = yes
struggle:iberian_struggle ?= {
OR = {
is_struggle_phase = struggle_iberia_phase_opportunity
is_struggle_phase = struggle_iberia_phase_hostility
}
}
any_sub_realm_barony = { fp2_struggle_2003_check_has_city_scripted_trigger = yes }
}
immediate = {
random_sub_realm_barony = {
limit = { fp2_struggle_2003_check_has_city_scripted_trigger = yes }
county = { save_scope_as = fp2_2003_county_town }
}
create_character = {
age = { 20 50 }
location = root.capital_province
gender_female_chance = root_faith_dominant_gender_female_chance
trait = wrathful
trait = greedy
trait = impatient
trait = callous
trait = wounded_2
culture = root.culture
faith = root.faith
dynasty = none
after_creation = {
add_gold = { 0 minor_gold_value }
add_prestige = { minor_prestige_loss minor_prestige_gain }
add_piety = { medium_piety_loss minor_piety_gain }
add_character_flag = single_combat_duel_armor
}
save_scope_as = fp2_2003_merc_actor
}
}
option = { # Give them farming work
name = fp2_struggle.2003.d
flavor = fp2_struggle.2003.d.desc
trigger = {
OR= {
has_trait = lunatic_genetic
has_trait = logistician
has_trait = comfort_eater
has_trait = improvident
stewardship > extremely_high_skill_rating
}
gold > medium_gold_value # Locals need to be paid in advance
}
stress_impact = { greedy = major_stress_impact_gain }
send_interface_toast = {
title = fp2_struggle.2003.e.notif.c
desc = fp2_struggle.2003.e.notif.c.desc
remove_treasury_or_gold = medium_treasury_or_gold_value
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = fp2_mercs_turned_farmers_modifier
years = 20
}
holder = {
add_character_modifier = {
modifier = fp2_mercenary_acquaintances_modifier
years = 8 # Bonus effect
}
}
}
}
ai_chance = {
base = 30
modifier = {
add = 1000
has_trait = possessed_genetic
}
}
}
option = { # Offer them a stable job
name = fp2_struggle.2003.b
flavor = fp2_struggle.2003.b.desc
trigger = { # Locks the lunatic option (remove this trigger if you want more than 4 options)
OR = {
NOR= {
has_trait = lunatic_genetic
has_trait = logistician
has_trait = comfort_eater
has_trait = improvident
stewardship > extremely_high_skill_rating
}
gold < medium_gold_value # Peasants might need to be paid real gold, but mercs do not mind working on debt money
}
}
stress_impact = { greedy = minor_stress_impact_gain }
remove_treasury_or_gold = medium_treasury_or_gold_value
send_interface_toast = {
type = event_toast_effect_good
title = fp2_veteran_mercenaries_as_instructors_modifier
left_icon = root
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = fp2_veteran_mercenaries_as_instructors_modifier
years = 12
}
hidden_effect = {
holder = {
add_character_modifier = {
modifier = fp2_mercenary_acquaintances_modifier
years = 12
}
}
}
}
}
show_as_tooltip = {
scope:fp2_2003_county_town = {
holder = {
add_character_modifier = {
modifier = fp2_mercenary_acquaintances_modifier
years = 12
}
}
}
}
ai_chance = {
base = 25
modifier = {
add = 5
has_trait = ambitious
}
modifier = {
add = 5
has_trait = generous
}
modifier = {
add = -50
has_trait = greedy
}
}
}
option = { # Implore them to leave
name = fp2_struggle.2003.a
stress_impact = { shy = minor_stress_impact_gain }
trigger = {
NOT = { has_trait = lunatic_genetic } # Cuts down the options to four in case of lunacy event, lunatics do not negotiate.
}
duel = {
skill = diplomacy
value = high_skill_rating
10 = {
compare_modifier = {
value = scope:duel_value
multiplier = -1.5
}
modifier = {
add = 5
has_trait = fickle
}
modifier = {
add = 20
has_trait = craven
}
modifier = {
add = 15
has_trait = lazy
}
modifier = {
add = 10
has_trait = wrathful
}
modifier = {
add = 10
has_trait = shy
}
modifier = {
add = 2
has_trait = trusting
}
modifier = {
add = 3
has_trait = stubborn
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2003.a.a.notif
left_icon = root
add_prestige = medium_prestige_loss
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = recently_looted_modifier
years = 5
}
}
}
}
12 = {
compare_modifier = {
value = scope:duel_value
multiplier = 1.5
}
modifier = {
add = 5
has_trait = calm
}
modifier = {
add = 5
has_trait = vengeful
}
modifier = {
add = 5
has_trait = honest
}
modifier = {
add = 10
has_trait = gregarious
}
modifier = {
add = 15
has_trait = just
}
modifier = {
add = 15
has_trait = brave
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2003.a.b.notif
left_icon = root
add_prestige = medium_prestige_gain
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = county_listened_to_locals_modifier
years = 5
}
}
}
}
}
ai_chance = {
base = 60
modifier = {
add = 5
has_trait = just
}
modifier = {
add = 25
has_trait = gregarious
}
modifier = {
add = -5
has_trait = arrogant
}
}
}
option = { # Preemptive strike
name = fp2_struggle.2003.c
flavor = fp2_struggle.2003.c.desc
stress_impact = { trusting = minor_stress_impact_gain } # Craven do not suffer a penalty, because they only plan the fight, not partake in it
duel = {
skill = martial
value = high_skill_rating
10 = {
desc = fp2_struggle.2003.c.a
compare_modifier = {
value = scope:duel_value
multiplier = -2.5
}
modifier = { # Relevant skills are those that could be used in urban warfare
add = 5
has_trait = fickle
}
modifier = {
add = 1
has_trait = just
}
modifier = {
add = 1
has_trait = arrogant
}
modifier = {
add = 3
has_trait = wrathful
}
modifier = {
add = 5
has_trait = arbitrary
}
modifier = {
add = 3
has_trait = lazy
}
modifier = {
add = 5
has_trait = open_terrain_expert
}
modifier = {
add = 2
has_trait = reckless
}
modifier = { # "what does an INN even look like anyway?"
add = 3
has_trait = reclusive
}
show_as_tooltip = {
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = fp2_local_garrison_slaughtered_modifier
years = 5
}
add_county_modifier = {
modifier = recently_looted_modifier
years = 5
}
}
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_local_garrison_slaughtered_modifier
left_icon = root
scope:fp2_2003_county_town = { # Failure outcome
add_county_modifier = {
modifier = fp2_local_garrison_slaughtered_modifier
years = 5
}
hidden_effect = {
add_county_modifier = {
modifier = recently_looted_modifier
years = 5
}
}
}
}
}
}
10 = {
desc = fp2_struggle.2003.c.b
compare_modifier = {
value = scope:duel_value
multiplier = 2.5
}
modifier = {
add = 5
has_trait = calm
}
modifier = {
add = 5
has_trait = diligent
}
modifier = {
add = 3
has_trait = callous
}
modifier = {
add = 7
OR = {
has_trait = intellect_good_2
has_trait = intellect_good_3
}
}
modifier = {
add = -15
OR = {
has_trait = intellect_bad_1
has_trait = intellect_bad_2
}
}
modifier = {
add = -25
OR = {
has_trait = intellect_bad_3
has_trait = dull
}
}
modifier = {
add = 10
has_trait = shrewd
}
modifier = {
add = 20
has_trait = strategist
}
modifier = { # If you know how buildings are structured, you can raid them better
add = 5
has_trait = architect
}
modifier = {
add = 5
has_trait = flexible_leader
}
modifier = {
add = 15
has_trait = organizer
}
modifier = {
add = 3
has_trait = cautious_leader
}
add_gold = minor_gold_value
add_prestige = medium_prestige_gain
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2003.c.b.notif
left_icon = root
scope:fp2_2003_county_town = { # Success
add_county_modifier = {
modifier = fp2_elite_tactics_for_civil_guards_modifier
years = 5
}
}
}
}
}
ai_chance = {
base = 15
modifier = {
add = 5
has_trait = brave
}
modifier = {
add = 15
has_trait = wrathful
}
modifier = {
add = 5
has_trait = deceitful
}
modifier = {
add = -25
has_trait = trusting
}
modifier = {
add = -10
has_trait = craven
}
}
}
option = { # Let the local handle it
name = fp2_struggle.2003.e
flavor = fp2_struggle.2003.e.desc
stress_impact = {
compassionate = major_stress_impact_gain
just = medium_stress_impact_gain
paranoid = minor_stress_impact_gain
}
random_list = {
50 = { # Looted
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2003.e.notif.a
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = recently_looted_modifier
years = 5
}
}
}
}
25 = { # Massacre
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2003.e.notif.b
desc = fp2_struggle.2003.e.notif.b.desc
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = fp2_mercs_slaughtered_populance_modifier
years = 5
}
}
}
}
25 = { # Farming outcome
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2003.e.notif.c
desc = fp2_struggle.2003.e.notif.c.desc
scope:fp2_2003_county_town = {
add_county_modifier = {
modifier = fp2_mercs_turned_farmers_modifier
years = 15
}
}
}
}
}
}
after = {
scope:fp2_2003_merc_actor = { silent_disappearance_effect = yes }
}
}
###################################
# Ship building event
# By Hugo Cortell
###################################
fp2_struggle.2004 = {
type = character_event
title = fp2_struggle.2004.t
desc = fp2_struggle.2004.desc
theme = crown
override_background = { reference = council_chamber }
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = cp:councillor_steward
animation = personality_content
}
lower_right_portrait = { character = cp:councillor_marshal }
cooldown = { years = 150 }
trigger = {
has_fp2_dlc_trigger = yes
current_year > 1025
top_liege = root
realm_size >= minor_realm_size
exists = cp:councillor_marshal
cp:councillor_marshal = { is_available_ai_adult = yes }
exists = cp:councillor_steward
cp:councillor_steward = {
is_available_ai_adult = yes
NOT = { has_character_flag = fp2_2004_critical_success_achieved }
}
any_sub_realm_county = {
is_coastal_county = yes
NOT = { has_county_modifier = fp2_successful_shipyards_modifier }
}
}
weight_multiplier = {
modifier = {
add = 5
current_year > 1066
}
modifier = {
add = 25
current_year > 1450 # Caravel time
}
modifier = {
add = 25
current_year > 1550
}
}
immediate = {
cp:councillor_marshal = { save_scope_as = 2004_scoped_marshal }
cp:councillor_steward = {
save_scope_as = 2004_scoped_steward
if = {
limit = { has_character_flag = fp2_2004_critical_success_achieved }
remove_character_flag = fp2_2004_critical_success_achieved # For debug
}
}
random_sub_realm_county = {
limit = { is_coastal_county = yes }
save_scope_as = fp2_2004_dockyards
}
}
option = { # WE WILL BUILD BOATS OF PURE SILVER (MR addition)
name = fp2_struggle.2004.c
flavor = fp2_struggle.2004.c.desc
remove_treasury_or_gold = major_treasury_or_gold_value
scope:2004_scoped_steward = {
add_opinion = {
target = root
modifier = dismissive_opinion
opinion = -15
}
}
scope:2004_scoped_marshal = {
add_opinion = {
target = root
modifier = dismissive_opinion
opinion = -20
}
}
scope:2004_scoped_steward = {
duel = {
skill = learning
value = high_skill_rating
25 = { # Failure Outcome
compare_modifier = {
value = scope:duel_value
multiplier = -1.5
min = -24
}
modifier = { # Someone is sneaking in iron powder to cheap out!
add = 5
has_trait = avaricious
}
custom_tooltip = fp2_struggle.2005.desc.alt.a
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 20
}
}
}
5 = { # Success Outcome
compare_modifier = {
value = scope:duel_value
multiplier = 1.5
min = -4
}
modifier = {
add = 5
has_trait = calm
}
modifier = {
add = 15
has_trait = diligent
}
modifier = {
add = 2
has_trait = ambitious
}
modifier = {
add = 3
has_trait = patient
}
modifier = {
add = 25
has_trait = shrewd
}
modifier = {
add = 10
has_trait = overseer
}
modifier = {
add = 8
has_trait = strategist
}
modifier = {
add = 15
has_trait = architect
}
modifier = {
add = 10
has_trait = scholar
}
modifier = {
add = 15
has_trait = military_engineer
}
modifier = {
add = 3
has_trait = logistician
}
modifier = {
add = 6
has_trait = journaller
}
modifier = { # Building a ship of silver means you must know your construction material
add = 5
has_trait = education_stewardship_1 # You sorta know how silver operates
}
modifier = {
add = 8
has_trait = education_stewardship_2 # You understand the properties of silver
}
modifier = {
add = 10
has_trait = education_stewardship_3 # You can bite silver and tell if it is real or not (others can only do it with gold)
}
modifier = {
add = 15
has_trait = education_stewardship_4 # Your tounge is capable of taking appart the anatomical structure of the silver thanks to your PhD in home economics
}
modifier = {
add = 20
has_trait = education_stewardship_5 # Like the above, except cooler, and my script comment has better spelling
}
root = { save_scope_as = fp2_2004_silver_boat_floats }
show_as_tooltip = {
root = { add_prestige = major_prestige_gain }
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 45
}
}
}
}
}
}
save_scope_as = fp2_2004_alt_option
if = {
limit = { is_developer_testing_trigger = yes }
custom_tooltip = debug_generic_option_shortened_trigger_can_disable
trigger_event = {
id = fp2_struggle.2005
days = 2
}
}
else = {
trigger_event = {
id = fp2_struggle.2005
years = { 4 10 }
}
}
}
option = { # I will sponsor your endeavour - Side with Steward
name = fp2_struggle.2004.a
remove_treasury_or_gold = major_treasury_or_gold_value
scope:2004_scoped_steward = {
add_opinion = {
target = root
modifier = grateful_opinion
opinion = 35
}
}
scope:2004_scoped_marshal = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -15
}
}
scope:2004_scoped_steward = {
duel = {
desc = outcome_in_a_few_years
skill = learning
value = high_skill_rating
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = -2.5
}
desc = fp2_struggle.2004.a.a.desc
modifier = {
add = 10
has_trait = lazy
}
modifier = {
add = 10
has_trait = fickle
}
modifier = {
add = 5
has_trait = stubborn
}
modifier = {
add = 2
has_trait = gregarious
}
modifier = {
add = 30
has_trait = dull
}
modifier = {
add = 5
has_trait = drunkard
}
modifier = {
add = 7
has_trait = irritable
}
modifier = {
add = 3
has_trait = rakish
}
modifier = {
add = 10
has_trait = profligate
}
show_as_tooltip = {
root = {
add_character_modifier = {
modifier = fp2_advanced_maritime_technology_modifier
years = 50
}
}
}
}
50 = {
compare_modifier = {
value = scope:duel_value
multiplier = 2.5
}
desc = fp2_struggle.2004.a.b.desc
modifier = {
add = 5
has_trait = calm
}
modifier = {
add = 15
has_trait = diligent
}
modifier = {
add = 2
has_trait = ambitious
}
modifier = {
add = 3
has_trait = patient
}
modifier = {
add = 25
has_trait = shrewd
}
modifier = {
add = 10
has_trait = overseer
}
modifier = {
add = 8
has_trait = strategist
}
modifier = {
add = 15
has_trait = architect
}
modifier = {
add = 10
has_trait = scholar
}
modifier = {
add = 15
has_trait = military_engineer
}
modifier = {
add = 3
has_trait = logistician
}
modifier = {
add = 6
has_trait = journaller
}
add_character_flag = fp2_2004_critical_success_achieved
show_as_tooltip = {
root = {
add_character_modifier = {
modifier = fp2_advanced_maritime_technology_modifier
years = 60
}
}
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 60
}
}
}
}
}
}
hidden_effect = {
if = {
limit = { is_developer_testing_trigger = yes }
custom_tooltip = debug_generic_option_shortened_trigger_can_disable
trigger_event = {
id = fp2_struggle.2005
days = 2
}
}
else = {
trigger_event = {
id = fp2_struggle.2005
years = { 5 9 }
}
}
}
ai_chance = {
base = 0
modifier = {
add = 50
treasury_or_gold > medium_treasury_or_gold_value
}
ai_value_modifier = {
ai_boldness = 0.2
ai_greed = -0.3
ai_rationality = 0.2
}
}
}
option = { # No, it is a waste of money - Side with marshal
name = fp2_struggle.2004.b
flavor = fp2_struggle.2004.b.desc
scope:2004_scoped_marshal = {
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 15
}
}
scope:2004_scoped_steward = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -15
}
add_opinion = {
target = scope:2004_scoped_marshal
modifier = angry_opinion
opinion = -25
}
}
ai_chance = { base = 50 }
}
}
fp2_struggle.2005 = {
type = character_event
title = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fp2_2004_alt_option
}
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fp2_2004_silver_boat_floats
}
desc = fp2_struggle.2005.desc.alt.b
}
desc = fp2_struggle.2005.desc.alt.a
}
}
}
triggered_desc = {
trigger = {
scope:2004_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
}
desc = fp2_struggle.2005.t.alt
}
desc = fp2_struggle.2005.t
}
}
immediate = {
if = {
limit = { root = root } # Check if scoped port town is still under your control
save_scope_as = port_under_control
}
# MIA checks
if = { # Assign current steward
limit = { exists = cp:councillor_steward }
cp:councillor_steward = { save_scope_as = 2005_scoped_steward }
}
else_if = { # Otherwise assign chaplain
limit = { exists = cp:councillor_court_chaplain }
cp:councillor_court_chaplain = { save_scope_as = 2005_scoped_steward }
}
else = { # Fallback, get whoever is most qualified in court
random_courtier_or_guest = {
limit = { learning > high_skill_rating }
random = {
chance = 15
add_character_flag = fp2_2004_critical_success_achieved
}
save_scope_as = 2005_scoped_steward
}
if = {
limit = {
NOT = { exists = scope:2005_scoped_steward }
}
random_courtier_or_guest = { save_scope_as = 2005_scoped_steward }
}
}
if = {
limit = {
scope:2004_scoped_steward != scope:2005_scoped_steward
OR = {
scope:2005_scoped_steward = cp:councillor_steward
scope:2005_scoped_steward = cp:councillor_court_chaplain
}
}
if = {
limit = { learning > high_skill_rating }
random = {
chance = 25
add_character_flag = fp2_2004_critical_success_achieved
}
save_scope_as = 2005_scoped_steward
}
}
}
desc = {
triggered_desc = { # Alt option
trigger = { exists = scope:fp2_2004_alt_option }
desc = {
first_valid = {
triggered_desc = {
trigger = {
exists = scope:fp2_2004_silver_boat_floats
}
desc = fp2_struggle.2005.desc.alt.b.desc
}
desc = fp2_struggle.2005.desc.alt.a.desc
}
triggered_desc = { # Lost dockyards
trigger = { scope:fp2_2004_dockyards.holder.top_liege != root.top_liege }
desc = fp2_struggle.2005.desc.cirt.a.notif
}
}
}
triggered_desc = {
trigger = { NOT = { exists = scope:fp2_2004_alt_option } }
desc = {
triggered_desc = { # Crtitical success explanation
trigger = {
scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
}
desc = fp2_struggle.2005.desc.cirt.notif
}
triggered_desc = { # Lost dockyards
trigger = {
scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
scope:fp2_2004_dockyards.holder.top_liege != root.top_liege
}
desc = fp2_struggle.2005.desc.cirt.a.notif
}
# Original (Steward) designer is MIA
triggered_desc = {
trigger = {
scope:2004_scoped_steward != scope:2005_scoped_steward
}
desc = fp2_struggle.2005.desc.newdesigner.notif
}
triggered_desc = { # Intro (non-crit)
trigger = {
NOT = { scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved } }
}
desc = fp2_struggle.2005.desc.intro
}
# Describe bottom of the ship
random_valid = {
desc = fp2_struggle.2005.desc.bottom.a
desc = fp2_struggle.2005.desc.bottom.b
desc = fp2_struggle.2005.desc.bottom.c
desc = fp2_struggle.2005.desc.bottom.d
}
# Describe main feature(s)
random_valid = {
desc = fp2_struggle.2005.desc.unique.a
desc = fp2_struggle.2005.desc.unique.b
desc = fp2_struggle.2005.desc.unique.c
desc = fp2_struggle.2005.desc.unique.d
desc = fp2_struggle.2005.desc.unique.e
}
# Describe sails (updated to propulsion)
random_valid = {
desc = fp2_struggle.2005.desc.sails.a
desc = fp2_struggle.2005.desc.sails.b
desc = fp2_struggle.2005.desc.sails.c
desc = fp2_struggle.2005.desc.sails.d
}
first_valid = {
triggered_desc = {
trigger = { scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved } }
desc = fp2_struggle.2005.desc.outro.crit
}
desc = fp2_struggle.2005.desc.outro
}
}
}
}
theme = martial
override_background = { reference = docks }
left_portrait = {
character = root
triggered_animation = {
trigger = {
exists = scope:fp2_2004_alt_option
NOT = { exists = scope:fp2_2004_silver_boat_floats }
}
animation = anger
}
triggered_animation = {
trigger = { exists = scope:fp2_2004_alt_option }
animation = ecstasy
}
animation = war_over_win
}
right_portrait = {
character = scope:2005_scoped_steward
animation = throne_room_writer
}
option = { # ALT Accept
trigger = {
exists = scope:fp2_2004_alt_option
exists = scope:fp2_2004_silver_boat_floats
}
name = fp2_struggle.2005.a
add_prestige = major_prestige_gain
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 45
}
}
}
option = { # ALT Accept (Failure Version)
trigger = {
exists = scope:fp2_2004_alt_option
NOT = { exists = scope:fp2_2004_silver_boat_floats }
}
name = artifact.4050.a # Reusage of loc key
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 20
}
}
}
option = { # Accept
trigger = {
NOT = {
exists = scope:fp2_2004_alt_option
scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
}
}
name = fp2_struggle.2005.a
add_character_modifier = {
modifier = fp2_advanced_maritime_technology_modifier
years = 50
}
}
option = { # Crit Accept
trigger = {
NOT = { exists = scope:fp2_2004_alt_option }
scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
}
name = {
text = {
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2004_dockyards.holder.top_liege = top_liege }
desc = fp2_struggle.2005.a
}
desc = fp2_struggle.2005.a.a
}
}
}
add_character_modifier = {
modifier = fp2_advanced_maritime_technology_modifier
years = 60
}
scope:fp2_2004_dockyards = {
add_county_modifier = {
modifier = fp2_successful_shipyards_modifier
years = 60
}
}
}
after = {
if = {
limit = {
OR = {
scope:2004_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
scope:2005_scoped_steward = { has_character_flag = fp2_2004_critical_success_achieved }
}
}
scope:2004_scoped_steward = { remove_character_flag = fp2_2004_critical_success_achieved }
scope:2005_scoped_steward = { remove_character_flag = fp2_2004_critical_success_achieved }
}
}
}
###################################
# The Borders of Faith
# By Hugo Cortell
###################################
scripted_trigger fp2_event2006_check_if_right_vassal_target = {
holder != root
holder = {
is_available_ai_adult = yes
faith = root.faith
NOT = { has_trait = cynical }
OR = {
any_secret = { type = secret_non_believer }
AND = { # Fallback, get non-devout follower
piety < 51
NOT = { has_trait = zealous }
}
}
}
}
fp2_struggle.2006 = {
type = character_event
title = fp2_struggle.2006.t
desc = fp2_struggle.2006.desc
cooldown = { years = 20 }
theme = faith
override_background = { reference = council_chamber }
left_portrait = {
character = root
animation = shock
}
right_portrait = {
character = scope:fp2_2006_vassal_in_crisis
animation = stress
}
lower_left_portrait = {
trigger = { exists = scope:2006_scoped_chaplain }
character = scope:2006_scoped_chaplain
}
trigger = {
has_fp2_dlc_trigger = yes
root.top_liege = root
any_sub_realm_county = {
fp2_event2006_check_if_right_vassal_target = yes
holder = {
any_neighboring_top_liege_realm_owner = {
faith != root.faith
}
}
}
}
immediate = {
if = {
limit = { exists = cp:councillor_court_chaplain }
cp:councillor_court_chaplain = { save_scope_as = 2006_scoped_chaplain }
}
random_sub_realm_county = {
limit = { fp2_event2006_check_if_right_vassal_target = yes }
holder = {
save_scope_as = fp2_2006_vassal_in_crisis
random_neighboring_top_liege_realm_owner = {
limit = { faith != root.faith }
faith = { save_scope_as = fp2_2006_foreign_faith }
}
}
}
}
option = { # Im a witch! And you can be one too!
trigger = {
has_trait = witch
OR = {
NOT = { # Not witch
scope:fp2_2006_vassal_in_crisis = {
any_secret = { type = secret_witch }
}
}
scope:fp2_2006_vassal_in_crisis = { # Witch but does not walk the path of witchery with you
any_secret = {
type = secret_witch
NOT = { is_known_by = root }
}
}
}
}
name = fp2_struggle.2006.e
if = {
limit = {
any_secret = {
type = secret_witch
}
}
random_secret = {
type = secret_witch
reveal_to = scope:fp2_2006_vassal_in_crisis
}
}
send_interface_toast = {
type = event_witchcraft_good
title = fp2_struggle.2006.e.notif.t
left_icon = scope:fp2_2006_vassal_in_crisis
scope:fp2_2006_vassal_in_crisis = {
if = {
limit = {
any_secret = { type = secret_witch }
has_trait = witch
}
custom_tooltip = fp2_struggle.2006.e.alreadywitch
}
else = {
hidden_effect = { give_witch_secret_or_trait_effect = yes }
show_as_tooltip = { add_trait = witch }
}
show_as_tooltip = {
random_secret = {
type = secret_witch
reveal_to = root
}
}
if = {
limit = { can_set_relation_friend_trigger = { CHARACTER = root } }
set_relation_friend = { reason = friend_guided_right_path target = root }
}
add_opinion = {
target = root
modifier = fp2_tolerated_me_opinion
}
if = {
limit = {
trait_is_criminal_in_faith_trigger = {
TRAIT = witch
GENDER_CHARACTER = scope:fp2_2006_vassal_in_crisis
FAITH = scope:fp2_2006_vassal_in_crisis.faith
}
NOT = {
trait_is_criminal_in_faith_trigger = {
TRAIT = witch
GENDER_CHARACTER = scope:fp2_2006_vassal_in_crisis
FAITH = scope:fp2_2006_foreign_faith
}
}
}
hidden_effect = { set_character_faith_with_conversion = scope:fp2_2006_foreign_faith }
custom_tooltip = fp2_struggle.2006.e.tacticalwitchfaithchange
}
hidden_effect = {
if = {
limit = {
any_secret = {
type = secret_witch
}
}
random_secret = {
type = secret_witch
reveal_to = root
}
}
root = {
random_secret = {
type = secret_witch
reveal_to = scope:fp2_2006_vassal_in_crisis
}
}
}
}
}
ai_chance = {
base = 80
ai_value_modifier = {
ai_honor = -0.3
ai_rationality = 0.5
ai_zeal = -0.9
}
}
}
option = { # (Threaten to) Denounce heretic
trigger = {
OR = {
has_trait = schemer
has_trait = devoted
intrigue > medium_skill_rating
}
}
name = fp2_struggle.2006.d
stress_impact = {
compassionate = medium_stress_impact_gain
gallant = medium_stress_impact_gain
}
add_dread = miniscule_dread_gain
hidden_effect = {
scope:fp2_2006_vassal_in_crisis = {
if = {
limit = { any_secret = { NOT = { secret_type = secret_non_believer } } }
add_secret = { type = secret_non_believer }
}
}
}
add_hook = {
target = scope:fp2_2006_vassal_in_crisis
type = threat_hook
}
random_secret = {
type = secret_non_believer
reveal_to = root
}
scope:fp2_2006_vassal_in_crisis = {
add_opinion = {
target = root
modifier = betrayed_me_opinion
opinion = -40
}
}
ai_chance = {
base = 30
ai_value_modifier = {
ai_compassion = -0.5
ai_honor = -0.8
ai_rationality = 0.1
ai_zeal = 0.3
ai_vengefulness = 0.3
ai_greed = 0.2
}
}
}
option = { # I will fix him myself
name = fp2_struggle.2006.b
stress_impact = {
cynical = minor_stress_impact_gain
}
duel = {
skill = learning
value = medium_skill_rating
15 = {
desc = fp2_struggle.2006.b.a.desc
compare_modifier = {
value = scope:duel_value
multiplier = -1.5
}
modifier = {
add = 10
has_trait = fickle
}
modifier = {
add = 10
has_trait = heresiarch
}
modifier = {
add = 2
has_trait = impotent
}
modifier = {
add = 5
has_trait = irritable
}
modifier = {
add = 5
has_trait = dull
}
modifier = {
add = 10
has_trait = depressed_genetic
}
modifier = {
add = 10
has_trait = arrogant
}
modifier = {
add = 5
has_trait = arbitrary
}
modifier = {
add = 10
has_trait = lazy
}
modifier = {
add = 2
has_trait = stubborn
}
modifier = {
add = 5
has_trait = craven
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2006.generic.notif.a.t
left_icon = scope:fp2_2006_vassal_in_crisis
scope:fp2_2006_vassal_in_crisis = {
hidden_effect = { set_character_faith_with_conversion = scope:fp2_2006_foreign_faith }
show_as_tooltip = { set_character_faith = scope:fp2_2006_foreign_faith }
progress_towards_rival_effect = {
REASON = rival_fraternising_enemy
CHARACTER = root
OPINION = 0
}
add_opinion = {
target = root
modifier = fp2_questioned_my_faith_opinion
}
}
}
}
15 = {
desc = fp2_struggle.2006.b.b.desc
compare_modifier = {
value = scope:duel_value
multiplier = 1.5
}
modifier = {
add = 10
has_trait = calm
}
modifier = {
add = 10
has_trait = humble
}
modifier = {
add = 3
has_trait = forgiving
}
modifier = {
add = 5
has_trait = honest
}
modifier = {
add = 10
has_trait = humble
}
modifier = {
add = 3
has_trait = patient
}
modifier = {
add = 20
has_trait = zealous
}
modifier = {
add = 4
has_trait = compassionate
}
modifier = {
add = 20
has_trait = theologian # Could be it's own option, but I can't think of what argument could be used...
}
modifier = {
add = 10
has_trait = devoted
}
modifier = {
add = 2
has_trait = lifestyle_poet
}
modifier = {
add = 10
has_trait = saint
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2006.generic.notif.b.t
left_icon = scope:fp2_2006_vassal_in_crisis
add_piety = medium_piety_gain
progress_towards_friend_effect = {
REASON = friend_guided_right_path
CHARACTER = scope:fp2_2006_vassal_in_crisis
OPINION = 0
}
if = {
limit = {
this != root
}
add_opinion = {
target = root
modifier = fp2_reassured_faith_opinion
}
}
}
}
}
ai_chance = {
base = 45
ai_value_modifier = {
ai_compassion = 0.2
ai_sociability = 0.3
ai_zeal = 0.2
}
}
}
option = { # One-on-One time
name = fp2_struggle.2006.c
flavor = fp2_struggle.2006.c.desc
trigger = {
NAND = {
has_trait = witch
OR = {
has_trait = schemer
has_trait = devoted
intrigue > medium_skill_rating
}
}
}
stress_impact = { zealous = minor_stress_impact_gain }
scope:fp2_2006_vassal_in_crisis = {
progress_towards_friend_effect = {
REASON = friend_religious_tolerance
CHARACTER = root
OPINION = 0
}
add_opinion = {
target = root
modifier = fp2_tolerated_me_opinion
}
random = {
chance = 50
hidden_effect = { set_character_faith_with_conversion = scope:fp2_2006_foreign_faith }
show_as_tooltip = { set_character_faith = scope:fp2_2006_foreign_faith }
}
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_compassion = 0.1
ai_rationality = 0.6
ai_zeal = -0.7
}
}
}
option = { # Someone call a priest!
name = fp2_struggle.2006.a
flavor = fp2_struggle.2006.a.desc
show_as_unavailable = { NOT = { exists = scope:2006_scoped_chaplain } } # Replaces trigger, teases player to possibility.
stress_impact = {
honest = medium_stress_impact_gain
humble = minor_stress_impact_gain
trusting = medium_stress_impact_gain
}
scope:fp2_2006_vassal_in_crisis = {
add_opinion = {
target = root
modifier = betrayed_me_opinion
opinion = -20
}
}
scope:2006_scoped_chaplain = {
duel = {
skill = learning
value = medium_skill_rating
10 = {
desc = fp2_struggle.2006.a.a
compare_modifier = {
value = scope:duel_value
multiplier = -1.25
}
modifier = {
add = 15
scope:fp2_2006_vassal_in_crisis = { has_trait = paranoid }
}
modifier = {
add = 10
has_trait = fickle
}
modifier = {
add = 10
has_trait = heresiarch
}
modifier = {
add = 2
has_trait = impotent
}
modifier = {
add = 5
has_trait = irritable
}
modifier = {
add = 5
has_trait = dull
}
modifier = {
add = 10
has_trait = depressed_genetic
}
modifier = {
add = 10
has_trait = arrogant
}
modifier = {
add = 5
has_trait = arbitrary
}
modifier = {
add = 10
has_trait = lazy
}
modifier = {
add = 2
has_trait = stubborn
}
modifier = {
add = 5
has_trait = craven
}
modifier = {
factor = 2
scope:fp2_2006_vassal_in_crisis = { has_trait = paranoid }
}
root = {
hidden_effect = {
scope:fp2_2006_vassal_in_crisis = {
if = {
limit = { any_secret = { type = secret_non_believer } }
progress_towards_rival_effect = { # "HE MUST BE ON TO ME!"
REASON = rival_faith_tested
CHARACTER = scope:2006_scoped_chaplain
OPINION = 0
}
add_opinion = {
target = scope:2006_scoped_chaplain
modifier = fp2_questioned_my_faith_opinion
}
}
}
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2006.generic.notif.a.t
left_icon = scope:fp2_2006_vassal_in_crisis
scope:fp2_2006_vassal_in_crisis = {
show_as_tooltip = { set_character_faith = scope:fp2_2006_foreign_faith }
hidden_effect = { set_character_faith_with_conversion = scope:fp2_2006_foreign_faith }
add_opinion = {
target = scope:2006_scoped_chaplain
modifier = fp2_questioned_my_faith_opinion
opinion = -35
}
}
}
}
}
5 = {
trigger = {
scope:fp2_2006_vassal_in_crisis = {
NOT = { has_trait = paranoid }
}
}
desc = fp2_struggle.2006.a.b
compare_modifier = {
value = scope:duel_value
multiplier = -1.25
}
modifier = {
add = 10
has_trait = fickle
}
modifier = {
add = 10
has_trait = heresiarch
}
modifier = {
add = 2
has_trait = impotent
}
modifier = {
add = 5
has_trait = irritable
}
modifier = {
add = 5
has_trait = dull
}
modifier = {
add = 10
has_trait = depressed_genetic
}
modifier = {
add = 10
has_trait = arrogant
}
modifier = {
add = 5
has_trait = arbitrary
}
modifier = {
add = 10
has_trait = lazy
}
modifier = {
add = 2
has_trait = stubborn
}
modifier = {
add = 5
has_trait = craven
}
root = {
hidden_effect = {
scope:fp2_2006_vassal_in_crisis = {
if = {
limit = { any_secret = { type = secret_non_believer } }
progress_towards_rival_effect = { # "HE MUST BE ON TO ME!"
REASON = rival_faith_tested
CHARACTER = scope:2006_scoped_chaplain
OPINION = 0
}
add_opinion = {
target = scope:2006_scoped_chaplain
modifier = fp2_questioned_my_faith_opinion
}
}
}
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2006.generic.notif.a.t
left_icon = scope:fp2_2006_vassal_in_crisis
scope:fp2_2006_vassal_in_crisis = {
remove_trait = trusting
if = {
limit = { is_ai = yes }
add_stress = monumental_stress_gain # Unbalanced for players, fun when seeing it happen to unrelated AI
}
else = { add_stress = medium_stress_gain } # (there is no notification)
add_opinion = {
target = scope:2006_scoped_chaplain
modifier = fp2_questioned_my_faith_opinion
opinion = -25
}
}
}
}
}
20 = {
desc = fp2_struggle.2006.a.c
compare_modifier = {
value = scope:duel_value
multiplier = 1.5
}
modifier = {
add = 10
has_trait = calm
}
modifier = {
add = 10
has_trait = humble
}
modifier = {
add = 3
has_trait = forgiving
}
modifier = {
add = 5
has_trait = honest
}
modifier = {
add = 10
has_trait = humble
}
modifier = {
add = 3
has_trait = patient
}
modifier = {
add = 20
has_trait = zealous
}
modifier = {
add = 4
has_trait = compassionate
}
modifier = {
add = 15
has_trait = theologian
}
modifier = {
add = 10
has_trait = devoted
}
modifier = {
add = 2
has_trait = lifestyle_poet
}
modifier = {
add = 10
has_trait = saint
}
hidden_effect = {
scope:fp2_2006_vassal_in_crisis = { add_piety = minor_piety_gain }
scope:2006_scoped_chaplain = { add_piety = medium_piety_gain }
}
root = {
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2006.generic.notif.b.t
left_icon = scope:fp2_2006_vassal_in_crisis
scope:fp2_2006_vassal_in_crisis = {
progress_towards_friend_effect = {
REASON = friend_guided_right_path
CHARACTER = scope:2006_scoped_chaplain
OPINION = 0
}
add_opinion = {
target = scope:2006_scoped_chaplain
modifier = fp2_reassured_faith_opinion
}
}
}
}
}
}
}
ai_chance = {
base = 45
ai_value_modifier = {
ai_compassion = -0.1
ai_energy = -0.1
ai_honor = -0.1
ai_rationality = 0.2
ai_sociability = -0.2
ai_zeal = 0.3
}
}
}
}
###################################
# A Castle Worthy of Iberia
# By Hugo Cortell
###################################
scripted_trigger fp2_struggle_2007_can_build_castle_trigger = { # Ensures that the selected building spot adheres to the game's rules on holding placement.
any_county_province = { has_holding = no }
trigger_if = {
limit = { any_county_province = { has_holding_type = castle_holding } }
any_county_province = { has_holding_type = church_holding }
any_county_province = { has_holding_type = city_holding }
}
exists = holder
holder != scope:fp2_2007_scoped_steward
}
fp2_struggle.2007 = {
type = character_event
title = fp2_struggle.2007.t
desc = {
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2007_castle_holder = ROOT }
desc = fp2_struggle.2007.desc.a
}
desc = fp2_struggle.2007.desc.b
}
}
theme = realm
cooldown = { years = 20 }
override_background = { reference = garden }
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:fp2_2007_scoped_steward
animation = chancellor
}
lower_left_portrait = scope:2007_vassal_sponsor
lower_right_portrait = scope:fp2_2007_castle_holder
trigger = {
has_fp2_dlc_trigger = yes
is_ai = no # Overpowered for AI, player only.
struggle:iberian_struggle = {
is_struggle_phase = struggle_iberia_phase_hostility
}
root.top_liege = root
exists = cp:councillor_steward
cp:councillor_steward = { is_available_ai_adult = yes }
any_vassal = { # Last minute pre RC fixes
NOT = {
religion = root.religion
this = cp:councillor_steward
}
}
any_realm_county = { fp2_struggle_2007_can_build_castle_trigger = yes }
save_temporary_scope_value_as = {
name = fp2_2007_wealth_barrier
value = {
value = main_building_tier_1_cost
multiply = 0.8
round = yes
}
}
OR = {
gold > scope:fp2_2007_wealth_barrier
OR = {
has_trait = architect
AND = {
has_royal_court = yes
employs_court_position = royal_architect_court_position
any_court_position_holder = {
type = royal_architect_court_position
is_available_ai_adult = yes
}
}
}
}
}
immediate = {
cp:councillor_steward = { save_scope_as = fp2_2007_scoped_steward }
if = {
limit = {
any_court_position_holder = {
type = royal_architect_court_position
is_available_ai_adult = yes
}
}
random_court_position_holder = {
type = royal_architect_court_position
save_scope_as = fp2_2007_roco_architect
}
}
random_vassal = {
limit = {
NOT = {
religion = root.religion
this = scope:fp2_2007_scoped_steward
}
}
save_scope_as = 2007_vassal_sponsor
}
random_realm_county = {
limit = { fp2_struggle_2007_can_build_castle_trigger = yes }
random_county_province = {
limit = { has_holding = no }
save_scope_as = fp2_2007_free_real_estate
}
holder = { save_scope_as = fp2_2007_castle_holder }
}
# Get Different Faith (updated to whole religion)
struggle:iberian_struggle = {
random_involved_ruler = {
limit = {
religion != root.religion
faith = { save_temporary_scope_as = temp_involved_faith }
struggle:iberian_struggle = { is_faith_involved_in_struggle = scope:temp_involved_faith }
}
religion = { save_scope_as = fp2_2007_foreign_faith }
}
if = { # Fallback
limit = { NOT = { exists = scope:fp2_2007_foreign_faith } }
get_random_faith_effect = { FORBIDROOTFAITH = yes }
scope:random_faith.religion = { save_scope_as = fp2_2007_foreign_faith }
}
}
# Get castileans or proto-castileans
if = {
limit = { culture = { has_cultural_parameter = architect_trait_prestige } }
culture = { save_scope_as = fp2_2007_allegedprotocastilean }
}
save_scope_value_as = {
name = fp2_2007_same_faith_construction_cost
value = {
value = main_building_tier_1_cost
multiply = 0.75
round = yes
}
}
save_scope_value_as = {
name = fp2_2007_different_faith_construction_cost
value = {
value = main_building_tier_1_cost
multiply = 0.65
round = yes
}
}
save_scope_value_as = {
name = fp2_2007_diy_construction_cost
value = {
value = main_building_tier_1_cost
multiply = 0.6
round = yes
}
}
# Set dynamic loc keys for powerful vassals
religion = { save_scope_as = dyloc_powerful_vassal_faith }
culture = { save_scope_as = dyloc_powerful_vassal_culture }
}
option = { # Same Faith (or) Castilean architect
name = {
text = {
first_valid = {
triggered_desc = {
trigger = { exists = scope:fp2_2007_allegedprotocastilean }
desc = fp2_struggle.2007.a.castile
}
desc = fp2_struggle.2007.a
}
}
}
flavor = {
first_valid = {
triggered_desc = {
trigger = { exists = scope:fp2_2007_allegedprotocastilean }
desc = fp2_struggle.2007.a.castile.favor
}
desc = fp2_struggle.2007.a.major_vassal_flavor
}
}
show_as_unavailable = { gold < scope:fp2_2007_same_faith_construction_cost }
if = { # Proto-Castilean
limit = { exists = scope:fp2_2007_allegedprotocastilean }
every_powerful_vassal = {
limit = { culture = root.culture }
custom = fp2_every_major_same_culture_vassal_notifier
add_opinion = {
target = root
modifier = pleased_opinion
opinion = 10
}
}
}
show_as_tooltip = {
remove_treasury_or_gold = scope:fp2_2007_same_faith_construction_cost
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = 95
}
}
}
add_hook_if_possible_effect = { # General effect
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
} # Hooks get their own notifications, therefore I will not show them on the main effect
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2007.t
left_icon = root
right_icon = scope:fp2_2007_castle_holder
remove_treasury_or_gold = scope:fp2_2007_same_faith_construction_cost
custom_tooltip = fp2_struggle.2007.a.notif
hidden_effect = {
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = 95
}
}
}
add_hook_if_possible_effect = { # General effect
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
}
}
}
option = { # Foreign (different faith) architect
name = fp2_struggle.2007.b
flavor = fp2_struggle.2007.b.flavor
show_as_unavailable = { gold < scope:fp2_2007_different_faith_construction_cost }
hidden_effect = { scope:2007_vassal_sponsor = { remove_treasury_or_gold = medium_treasury_or_gold_value } }
every_powerful_vassal = {
custom = fp2_every_major_same_faith_vassal_notifier
limit = { religion = root.religion }
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -15
}
}
every_powerful_vassal = {
custom = fp2_every_major_different_faith_vassal_notifier
limit = { religion != root.religion }
add_opinion = {
target = root
modifier = respect_opinion
opinion = 15
}
}
scope:fp2_2007_free_real_estate.county = {
if = {
limit = { religion = scope:fp2_2007_foreign_faith }
add_county_modifier = {
modifier = modifier_religious_understanding_modifier
years = 12
}
}
else_if = {
limit = { religion != root.religion }
add_county_modifier = {
modifier = invested_in_province_modifier
years = 5
}
}
}
show_as_tooltip = {
remove_treasury_or_gold = scope:fp2_2007_different_faith_construction_cost
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = 95
}
}
}
add_hook_if_possible_effect = {
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2007.t
left_icon = scope:2007_vassal_sponsor
right_icon = scope:fp2_2007_castle_holder
remove_treasury_or_gold = scope:fp2_2007_different_faith_construction_cost
custom_tooltip = fp2_struggle.2007.a.notif
hidden_effect = {
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = 95
}
}
}
add_hook_if_possible_effect = { # General effect
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
}
}
}
option = { # I will build it myself
name = fp2_struggle.2007.c
flavor = fp2_struggle.2007.c.flavor
trigger = { has_trait = architect }
duel = {
skill = learning
value = very_high_skill_rating
60 = {
desc = fp2_struggle.2007.c.notif.a.desc
compare_modifier = {
value = scope:duel_value
multiplier = 1 # Should be -1 but it has already been balanced
}
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2007.c.notif.a.t
left_icon = root
right_icon = scope:fp2_2007_castle_holder
add_prestige = major_prestige_loss
reverse_add_opinion = {
target = scope:fp2_2007_scoped_steward
modifier = disappointed_opinion
opinion = -10
}
}
}
40 = {
desc = fp2_struggle.2007.c.notif.b.desc
compare_modifier = {
value = scope:duel_value
multiplier = 1
}
modifier = {
add = fp2_2007_calculate_architect_competence
always = yes
}
show_as_tooltip = {
remove_treasury_or_gold = scope:fp2_2007_diy_construction_cost
if = {
limit = { exists = scope:fp2_2007_allegedprotocastilean }
add_prestige = minor_prestige_gain
}
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = medium_gold_value
}
}
}
add_hook_if_possible_effect = { # General effect
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2007.t
left_icon = root
right_icon = scope:fp2_2007_castle_holder
remove_treasury_or_gold = scope:fp2_2007_diy_construction_cost
if = {
limit = { exists = scope:fp2_2007_allegedprotocastilean }
add_prestige = minor_prestige_gain
}
custom_tooltip = fp2_struggle.2007.a.notif
}
hidden_effect = {
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = medium_gold_value
}
}
}
add_hook_if_possible_effect = {
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
}
}
}
}
option = { # RoCo
name = fp2_struggle.2007.c.roco
trigger = {
NOT = { has_trait = architect }
exists = scope:fp2_2007_roco_architect
}
scope:fp2_2007_roco_architect = {
duel = {
skill = learning
value = very_high_skill_rating
55 = {
desc = fp2_struggle.2007.c.notif.a.desc
compare_modifier = {
value = scope:duel_value
multiplier = 1
}
root = {
send_interface_toast = {
type = event_toast_effect_bad
title = fp2_struggle.2007.c.notif.a.t
left_icon = scope:fp2_2007_roco_architect
right_icon = scope:fp2_2007_castle_holder
add_prestige = medium_prestige_loss
}
}
hidden_effect = { add_prestige = medium_prestige_loss }
}
45 = {
compare_modifier = {
value = scope:duel_value
multiplier = 1
}
modifier = {
add = fp2_2007_calculate_architect_competence
always = yes
}
root = {
show_as_tooltip = {
remove_treasury_or_gold = scope:fp2_2007_diy_construction_cost
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = minor_gold_value
}
}
}
add_hook_if_possible_effect = {
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2007.t
left_icon = scope:fp2_2007_roco_architect
right_icon = scope:fp2_2007_castle_holder
remove_treasury_or_gold = scope:fp2_2007_diy_construction_cost
custom_tooltip = fp2_struggle.2007.a.notif
}
hidden_effect = {
scope:fp2_2007_free_real_estate = {
begin_create_holding = {
type = castle_holding
refund_cost = {
gold = minor_gold_value
}
}
}
add_hook_if_possible_effect = {
TARGET = scope:fp2_2007_castle_holder
TYPE = indebted_hook
YEARS = 8
}
}
}
}
}
}
}
}
option = { # Leave it be
name = {
text = {
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2007_castle_holder = root }
desc = fp2_struggle.2007.d.alt
}
desc = fp2_struggle.2007.d
}
}
}
if = {
limit = { scope:fp2_2007_castle_holder != root }
reverse_add_opinion = {
target = scope:fp2_2007_scoped_steward
modifier = disappointed_opinion
opinion = -15
}
reverse_add_opinion = {
target = scope:fp2_2007_castle_holder
modifier = disappointed_opinion
opinion = -20
}
}
if = {
limit = { exists = cp:councillor_marshal }
reverse_add_opinion = {
target = cp:councillor_marshal
modifier = disappointed_opinion
opinion = -10
}
}
}
}
###################################
# Misdeeds of The Chaplain
# By Hugo Cortell
###################################
scripted_trigger fp2_struggle_2008_check_actor_eligibility_scripted_trigger = {
is_available_ai_adult = yes
intrigue > low_skill_rating
NOT = {
has_trait = just
has_trait = compassionate
has_trait = generous
has_trait = content
has_trait = honest
has_relation_soulmate = root
}
trigger_if = { # Instead of an event weight, we just increase the reqs for friends to dicrease overhead
limit = {
has_relation_friend = root
has_relation_lover = root
}
OR = {
has_trait = greedy
has_trait = deceitful
has_trait = callous
}
}
}
fp2_struggle.2008 = {
type = character_event
title = fp2_struggle.2008.t
desc = fp2_struggle.2008.desc
theme = secret
cooldown = { years = 30 }
override_background = { reference = study }
left_portrait = {
character = scope:fps_2008_misdeed_actor
animation = fear
}
right_portrait = {
character = root
animation = disapproval
}
trigger = {
has_fp2_dlc_trigger = yes
root.top_liege = root
trigger_if = {
limit = { exists = struggle:iberian_struggle }
struggle:iberian_struggle = {
is_struggle_phase = struggle_iberia_phase_hostility
}
}
OR = { # This play changes depending on the actor
AND = { # Chaplain
exists = cp:councillor_court_chaplain
cp:councillor_court_chaplain = { fp2_struggle_2008_check_actor_eligibility_scripted_trigger = yes }
}
AND = { # Steward
exists = cp:councillor_steward
cp:councillor_steward = { fp2_struggle_2008_check_actor_eligibility_scripted_trigger = yes }
}
AND = { # Spymaster
exists = cp:councillor_spymaster
cp:councillor_spymaster = { fp2_struggle_2008_check_actor_eligibility_scripted_trigger = yes }
}
}
}
immediate = {
random_councillor = {
limit = {
OR = {
this = root.cp:councillor_court_chaplain
this = root.cp:councillor_steward
this = root.cp:councillor_spymaster
}
fp2_struggle_2008_check_actor_eligibility_scripted_trigger = yes
}
weight = { # Weight based on personality. In combination with the scripted trigger this means: Must be greedy, dishonourable, not incompetent.
base = 1
modifier = {
ai_greed > 0
factor = 1
}
modifier = {
ai_honor < 0
factor = 1
}
}
save_scope_as = fps_2008_misdeed_actor
}
scope:fps_2008_misdeed_actor = {
if = {
limit = { has_council_position = councillor_steward }
add_gold = medium_gold_value # Small detail
}
else = { add_gold = minor_gold_value }
if = {
limit = {
faith = {
exists = religious_head
NOT = {
religious_head = root
religious_head = scope:fps_2008_misdeed_actor
}
}
}
faith.religious_head = {
save_scope_as = fp2_2008_relevant_head_of_faith
}
}
}
root.capital_county = { save_scope_as = fp2_2008_capital }
}
option = { # Special (thanks QA!) option, denounce publicly (might get killed by mob)
name = fp2_struggle.2008.d
flavor = fp2_struggle.2008.d.flavor
trigger = {
OR = {
has_trait = sadistic
has_trait = schemer
has_trait = peasant_leader
has_trait = augustus
has_trait = contrite
has_trait = august
has_trait = diplomat
}
}
stress_impact = {
just = medium_stress_impact_gain
trusting = minor_stress_impact_gain
temperate = minor_stress_impact_gain
patient = minor_stress_impact_gain
shy = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
}
every_powerful_vassal = {
limit = { faith = root.faith }
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = cruelty_opinion
opinion = -20
}
}
random_list = {
85 = {
hidden_effect = {
scope:fps_2008_misdeed_actor = { save_temporary_scope_as = assassin } # Used for loc
send_interface_toast = {
type = event_toast_effect_good
title = char_interaction.0050.a
left_icon = scope:fps_2008_misdeed_actor
capital_county = {
add_county_modifier = {
modifier = governance_1054_satisfied_peasants_modifier
years = 15
}
}
scope:assassin = { custom_tooltip = hold_court.8221.imprison_alone } # This uses that loc
hidden_effect = {
rightfully_imprison_character_effect = { # The autoformatter was a bit (very, very) fiddly with this
TARGET = scope:fps_2008_misdeed_actor
IMPRISONER = root
}
}
}
}
scope:fps_2008_misdeed_actor = {
add_opinion = {
target = root
modifier = publicly_ridiculed
opinion = -30
}
}
show_as_tooltip = {
rightfully_imprison_character_effect = {
TARGET = scope:fps_2008_misdeed_actor
IMPRISONER = root
}
capital_county = {
add_county_modifier = {
modifier = governance_1054_satisfied_peasants_modifier
years = 15
}
}
}
}
15 = {
scope:fps_2008_misdeed_actor = {
add_opinion = {
target = root
modifier = publicly_ridiculed
opinion = -80
}
}
if = {
limit = { has_trait = sadistic } # Once again, rewarding physcos with little details
send_interface_toast = {
type = event_toast_effect_good
title = char_interaction.0050.a
left_icon = scope:fps_2008_misdeed_actor
scope:fps_2008_misdeed_actor = { death = { death_reason = death_beaten_by_mob } }
capital_county = {
add_county_modifier = {
modifier = governance_1054_satisfied_peasants_modifier
years = 30
}
}
}
}
else = {
send_interface_toast = {
type = event_toast_effect_bad
title = char_interaction.0050.a
left_icon = scope:fps_2008_misdeed_actor
scope:fps_2008_misdeed_actor = { death = { death_reason = death_beaten_by_mob } }
capital_county = {
add_county_modifier = {
modifier = governance_1054_satisfied_peasants_modifier
years = 30
}
}
}
}
}
}
}
option = { # Imprison chaplain outright
name = fp2_struggle.2008.a
stress_impact = { trusting = minor_stress_impact_gain }
rightfully_imprison_character_effect = {
TARGET = scope:fps_2008_misdeed_actor
IMPRISONER = root
}
if = {
limit = {
scope:fps_2008_misdeed_actor = cp:councillor_court_chaplain
exists = scope:fp2_2008_relevant_head_of_faith
}
scope:fps_2008_misdeed_actor.faith = {
religious_head = {
add_opinion = {
target = root
modifier = rude_opinion
opinion = -10
}
}
}
}
scope:fp2_2008_capital = {
add_county_modifier = {
modifier = fp2_improved_administrative_checks_modifier
years = 15
}
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_honor = 0.85
ai_zeal = 0.3
}
}
}
# Threaten, gain hook and modifier for work harder
option = { # Combined general output (threaten into teaching you how to forge like they do)
name = fp2_struggle.2008.b.a
flavor = fp2_struggle.2008.b.flavor
stress_impact = {
just = minor_stress_impact_gain
honest = medium_stress_impact_gain
}
send_interface_toast = {
type = event_toast_effect_good
title = yearly_0001_improved_intrigue
left_icon = ROOT
right_icon = scope:fps_2008_misdeed_actor
add_intrigue_lifestyle_xp = major_lifestyle_experience # Originally it gave you the accomplished forger perk. Was removed because it let you bypass the learning tree.
}
reverse_add_opinion = {
target = scope:fps_2008_misdeed_actor
modifier = extorted_me_opinion
opinion = -25
years = 10
}
scope:fps_2008_misdeed_actor = {
progress_towards_rival_effect = {
REASON = rival_defrauded_realm
CHARACTER = root
OPINION = 0
}
}
if = { # Has its own notification
limit = {
can_add_hook = {
target = scope:fps_2008_misdeed_actor
type = threat_hook
}
}
add_hook = {
target = scope:fps_2008_misdeed_actor
type = threat_hook
years = 7
}
}
ai_chance = { base = 0 } # AI should never use these OP options
}
option = { # Go hand in hand stealing state money
name = fp2_struggle.2008.c
flavor = fp2_struggle.2008.c.flavor
stress_impact = {
just = medium_stress_impact_gain
zealous = minor_stress_impact_gain
}
scope:fp2_2008_capital = {
add_county_modifier = {
modifier = county_corruption_inefficient_tax_collection_modifier
years = 15
}
}
scope:fps_2008_misdeed_actor = {
if = {
limit = {
can_add_hook = {
target = root
type = minor_crime_accomplice_hook
}
}
if = {
limit = { root = { scope:fps_2008_misdeed_actor = cp:councillor_steward } } # CPs cannot have CPs, therefore must be rescoped into root to access
pay_short_term_gold = {
target = root
gold = minor_gold_value
}
}
add_hook = {
target = root
type = minor_crime_accomplice_hook
years = 15
}
}
}
if = {
limit = {
can_add_hook = {
target = scope:fps_2008_misdeed_actor
type = minor_crime_accomplice_hook
}
}
add_hook = {
target = scope:fps_2008_misdeed_actor
type = minor_crime_accomplice_hook
years = 15
}
}
add_gold = medium_gold_value
ai_chance = {
base = 50
ai_value_modifier = {
ai_greed = 0.95
ai_energy = 0.25
}
}
}
}
###################################
# Thiefs of Garduna / Catching Thieves of Myth
# By Hugo Cortell
###################################
fp2_struggle.2009 = {
type = character_event
title = fp2_struggle.2009.t
desc = fp2_struggle.2009.desc
theme = intrigue_skulduggery_focus
cooldown = { years = 150 } # Not actually necessary but adding anyway
override_background = { reference = corridor_night }
left_portrait = {
character = scope:fp2_2009_marshal
animation = marshal
outfit_tags = { emotion_angry_decal } # WAD, the decal does render and functions as intended
}
lower_left_portrait = {
character = root
}
right_portrait = {
character = scope:fp2_2009_garduna_young_thief
animation = fear
hide_info = yes
outfit_tags = {
mena_stealth_hood
religious_zoroastrian_high_clothes
}
}
trigger = {
is_ai = no
has_fp2_dlc_trigger = yes
top_liege = this
exists = cp:councillor_marshal
fp2_character_any_involvement_iberian_struggle_trigger = yes
exists = struggle:iberian_struggle
exists = primary_title
struggle:iberian_struggle = {
any_involved_ruler = { # Redundancy check in response to errors on automated tests, should (theoretically) not be necessary
this != root # Alternative point of failure could be "this" being null, but that would cause errors outside my event.
exists = primary_title
top_liege = this
primary_title = { is_mercenary_company = no }
is_landed = yes
count > 1 # Redundancy check in response to more errors on nigtly. Now on the bottom of the block. Reduced by one to total 3.
}
OR = {
is_struggle_phase = struggle_iberia_phase_opportunity
is_struggle_phase = struggle_iberia_phase_conciliation
}
}
realm_size > 3 # Needed to get all the realms where corruption can happen
}
weight_multiplier = {
base = 0.5
modifier = {
add = 0.5
is_ai = no
}
}
immediate = {
struggle:iberian_struggle = { # Struggle existance is already verified by event trigger
random_involved_ruler = {
limit = {
this != root # Otherwise you might be the other involved ruler
exists = primary_title
top_liege = this
primary_title = { is_mercenary_company = no }
is_landed = yes
}
save_scope_as = fp2_2009_involved_ruler
}
}
cp:councillor_marshal = { save_scope_as = fp2_2009_marshal }
create_character = {
age = { 16 27 }
location = root.location
gender_female_chance = 30
trait = education_intrigue_2
trait = shy
trait = honest
trait = paranoid
random_traits = yes
diplomacy = { 2 7 }
martial = { 3 6 }
stewardship = { 4 7 }
intrigue = { 8 22 }
culture = culture:basque
faith = faith:catholic
dynasty = none
after_creation = { add_gold = minor_gold_value }
save_scope_as = fp2_2009_garduna_young_thief
}
if = {
limit = {
exists = global_var:fp2_struggle_2009_thief_king_char
global_var:fp2_struggle_2009_thief_king_char = { is_available_ai_adult = yes }
}
global_var:fp2_struggle_2009_thief_king_char = { save_scope_as = fp2_2009_garduna_guild_master }
}
else = {
create_character = { # Guild Master
age = { 24 52 }
location = scope:fp2_2009_involved_ruler.location
gender_female_chance = {
if = {
limit = { scope:fp2_2009_involved_ruler.location.county.faith = { has_doctrine = doctrine_gender_male_dominated } }
add = 0
}
else_if = {
limit = { scope:fp2_2009_involved_ruler.location.county.faith = { has_doctrine = doctrine_gender_female_dominated } }
add = 100
}
else = {
add = 50
}
}
trait = education_intrigue_4
trait = deceitful
trait = shrewd
random_traits = yes
diplomacy = { 6 16 }
martial = { 8 15 }
stewardship = { 10 17 }
intrigue = { 8 16 }
culture = culture:basque
faith = faith:catholic
dynasty = none
after_creation = {
add_gold = major_gold_value
add_prestige = major_prestige_gain
add_piety = minor_piety_gain
random = {
chance = 10
add_trait = one_eyed
}
random = {
chance = 10
add_trait = one_legged
}
random = {
chance = 5
add_trait = schemer
}
random = {
chance = 33
add_trait = wild_oat
}
if = {
limit = { is_female = yes }
give_nickname = nick_the_Queen_of_Thieves
}
else = { give_nickname = nick_the_King_of_Thieves }
}
save_scope_as = fp2_2009_garduna_guild_master
}
}
set_global_variable = {
name = fp2_struggle_2009_thief_king_char
value = scope:fp2_2009_garduna_guild_master
}
if = {
limit = {
any_court_position_holder = {
type = executioner_court_position
is_available_ai_adult = yes
}
}
random_court_position_holder = {
type = executioner_court_position
save_scope_as = fp2_2009_roco_executioner
}
}
# Get locations
root.capital_county = { save_scope_as = fp2_2009_capital_county }
scope:fp2_2009_involved_ruler.capital_county = { save_scope_as = fp2_2009_involved_capital_county }
random_sub_realm_county = {
limit = { this != scope:fp2_2009_capital_county }
save_scope_as = fp2_2009_random_flavor_county_ichi
}
random_sub_realm_county = {
limit = {
NOT = {
this = scope:fp2_2009_capital_county
this = scope:fp2_2009_random_flavor_county_ichi
}
}
save_scope_as = fp2_2009_random_flavor_county_ni
}
# Logic for "Hire the guild" option, prevents the AI from acting un-wise
if = { # Player has access by default
limit = { is_ai = no }
save_scope_as = fp2_2009_hire_guild_unlocked
}
else_if = { # Forbid AI on AI agression
limit = {
NOT = {
is_ai = yes
scope:fp2_2009_involved_ruler = { is_ai = yes }
}
}
save_scope_as = fp2_2009_hire_guild_unlocked
}
else_if = { # Ensure AI on Player agression is justified
limit = {
is_ai = yes
scope:fp2_2009_involved_ruler = {
is_ai = no
save_temporary_opinion_value_as = {
name = opinion_of_root_temp_value
target = root
}
}
# AI behaviour must be on brand with personality and/or circumstance to ensure narrative cohesion
scope:opinion_of_root_temp_value < -10
OR = {
has_trait = deceitful
has_trait = wrathful
has_trait = ambitious
has_trait = vengeful
has_trait = arrogant
has_trait = callous
is_at_war_with = scope:fp2_2009_involved_ruler
has_relation_nemesis = scope:fp2_2009_involved_ruler
}
}
save_scope_as = fp2_2009_hire_guild_unlocked
}
}
option = { # BECOME THE KING OF PIRA- err THIEVES!!1!
name = fp2_struggle.2009.a
flavor = fp2_struggle.2009.a.flavor
trigger = {
NOT = { age < 14 }
OR = {
has_trait = gallant
has_trait = adventurer
has_trait = berserker
has_trait = peasant_leader
has_trait = viking
has_trait = reaver
prowess > very_high_skill_rating
has_trait = lunatic_genetic
}
}
scope:fp2_2009_marshal = {
add_opinion = {
target = root
modifier = impressed_opinion
opinion = 20
}
}
trigger_event = {
id = fp2_struggle.2010
days = { 6 31 }
}
stress_impact = {
compassionate = minor_stress_impact_gain
craven = minor_stress_impact_gain
content = medium_stress_impact_gain
eccentric = medium_stress_impact_loss
}
ai_chance = {
base = 8 # Prevents too many kings of thieves from showing up
modifier = {
add = 25
has_trait = just
}
ai_value_modifier = {
ai_boldness = 0.7
ai_compassion = -0.1
ai_greed = 0.3
ai_energy = 0.5
ai_honor = -0.1
ai_rationality = -0.2
ai_sociability = 0.3
ai_vengefulness = 0.5
}
}
}
option = { # Demand info
name = fp2_struggle.2009.b
hidden_effect = {
scope:fp2_2009_garduna_young_thief = { add_trait = depressed_1 }
save_scope_as = fp2_2009_thief_permanence_scope
}
every_sub_realm_county = {
limit = {
county_control < 100
}
custom = all_realm_county
change_county_control = 5
}
add_courtier = scope:fp2_2009_garduna_young_thief
scope:fp2_2009_garduna_young_thief = {
custom_tooltip = fp2_struggle.2009.b.blues
add_opinion = {
target = root
modifier = was_spared
opinion = 20
}
}
stress_impact = {
wrathful = minor_stress_impact_gain
vengeful = minor_stress_impact_gain
sadistic = minor_stress_impact_gain
}
ai_chance = {
base = 45
ai_value_modifier = {
ai_boldness = -0.1
ai_compassion = 0.65
ai_honor = 0.2
ai_rationality = 0.9
}
}
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:cleared_out
}
trigger_event = {
id = fp2_struggle.2021
days = { 450 3000 }
}
}
}
option = { # Ask for a cut
name = fp2_struggle.2009.c
trigger = {
is_ai = no # Option disabled for AI rulers
NOR = {
has_trait = gallant
has_trait = adventurer
has_trait = berserker
has_trait = peasant_leader
has_trait = viking
has_trait = reaver
prowess > very_high_skill_rating
has_trait = lunatic_genetic
}
}
add_gold = medium_gold_value
scope:fp2_2009_capital_county = { add_thieves_guild_modifier_effect = yes }
scope:fp2_2009_random_flavor_county_ichi = { change_county_control = -15 }
scope:fp2_2009_random_flavor_county_ni = { change_county_control = -15 }
scope:fp2_2009_marshal = {
if = {
limit = { has_trait = just }
add_opinion = {
target = root
modifier = disgusted_opinion
opinion = -35
}
}
else = {
if = {
limit = { has_trait = greedy }
add_opinion = {
target = root
modifier = respect_opinion # Greedy people respect "the grind"
opinion = 10
}
}
else = {
add_opinion = {
target = root
modifier = disappointed_opinion
opinion = -15
}
}
}
}
stress_impact = {
generous = medium_stress_impact_gain
content = minor_stress_impact_gain
just = major_stress_impact_gain
}
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:paid_off
}
trigger_event = {
id = fp2_struggle.2021
days = { 450 3000 }
}
}
}
option = { # Hire the guild to mess with a foreign ruler (work for me)
name = fp2_struggle.2009.d
trigger = { exists = scope:fp2_2009_hire_guild_unlocked } # Prevents AI from acting un-intelligently
scope:fp2_2009_involved_capital_county = { add_thieves_guild_modifier_effect = yes }
pay_short_term_gold = {
target = scope:fp2_2009_garduna_young_thief
gold = minor_gold_value
}
# Notifies the player on the recieving end of an event outcome that involves them.
scope:fp2_2009_involved_ruler = { # Hopefuly this will encoureage interaction in MP games.
trigger_event = {
id = fp2_struggle.2012
days = { 1 2 }
}
}
stress_impact = {
brave = minor_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = minor_stress_impact_gain
}
ai_chance = {
base = 25
modifier = {
add = 45
is_at_war_with = scope:fp2_2009_involved_ruler
}
modifier = {
add = 100 # hatred can cloud the mind
has_relation_nemesis = scope:fp2_2009_involved_ruler
}
ai_value_modifier = {
ai_boldness = 0.7
ai_compassion = -0.2
ai_greed = -0.1
ai_honor = -0.4
ai_rationality = 0.7
ai_vengefulness = 0.95
}
}
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:worked_together
}
trigger_event = {
id = fp2_struggle.2021
days = { 450 3000 }
}
}
}
option = { # Gift the thieve's the head to the foreign ruler
name = fp2_struggle.2009.e
scope:fp2_2009_garduna_young_thief = {
if = {
limit = { exists = scope:fp2_2009_roco_executioner } # ROCO flaire
death = {
death_reason = death_execution
killer = scope:fp2_2009_roco_executioner
}
}
else = {
death = {
death_reason = death_execution
killer = scope:fp2_2009_marshal
}
}
save_scope_as = fp2_2009_thief_permanence_scope
}
custom_tooltip = fp2_struggle.2009.e.a
hidden_effect = {
random_list = {
55 = {} # nothing happens
45 = {
random_list = {
33 = { scope:fp2_2009_random_flavor_county_ichi = { change_county_control = -15 } }
33 = { scope:fp2_2009_random_flavor_county_ni = { change_county_control = -15 } }
33 = { scope:fp2_2009_capital_county = { change_county_control = -15 } }
}
}
}
}
scope:fp2_2009_involved_ruler = {
if = {
limit = {
OR = {
has_trait = wrathful
has_trait = vengeful
has_trait = sadistic
}
}
add_opinion = {
target = root
modifier = gift_opinion
opinion = 40
}
progress_towards_friend_effect = { # very nice
REASON = friend_gave_severed_head
CHARACTER = root
OPINION = 0
}
}
else = {
add_opinion = {
target = root
modifier = gift_opinion # nice
opinion = 30
}
}
}
# Notifies the player on the recieving end that they have recieved a delightful gift
root = { save_scope_as = fp2_2009_has_gifted_head }
scope:fp2_2009_involved_ruler = {
trigger_event = {
id = fp2_struggle.2012
days = { 1 2 }
}
}
stress_impact = {
compassionate = medium_stress_impact_gain
forgiving = minor_stress_impact_gain
}
ai_chance = {
base = 35
ai_value_modifier = {
ai_boldness = 0.2
ai_compassion = -0.45
ai_honor = 0.8
ai_rationality = 0.1
ai_sociability = 0.5
}
}
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:lobbed_head
}
trigger_event = {
id = fp2_struggle.2021
days = { 450 3000 }
}
}
}
option = { # Debug option to quickly trigger 2021
name = debug_generic_option
trigger = { is_developer_testing_trigger = yes }
custom_tooltip = debug_generic_option_shortened_trigger_can_disable
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:cleared_out # modify this with the flag you need
}
trigger_event = { id = fp2_struggle.2021 }
}
}
after = {
if = {
limit = { NOT = { exists = scope:fp2_2009_thief_permanence_scope } }
scope:fp2_2009_garduna_young_thief = { silent_disappearance_effect = yes }
}
}
}
fp2_struggle.2010 = { # 2009 duel follow-up
type = character_event
title = fp2_struggle.2010.t
desc = fp2_struggle.2010.desc
trigger = { scope:fp2_2009_garduna_guild_master = { is_available_ai_adult = yes } }
theme = battle
override_background = { reference = corridor_night }
left_portrait = {
character = root
animation = throne_room_one_handed_passive_1
}
right_portrait = {
character = scope:fp2_2009_garduna_guild_master
animation = war_over_win
outfit_tags = {
western_stealth_hood
sub_saharan_high_nobility
mena_war_legwear
}
}
option = { # Duel
name = fp2_struggle.2010.b
root = { save_scope_as = fp2_2010_root_in_duel } # Used in invalidation check for player's death
scope:fp2_2009_garduna_guild_master = {
set_variable = {
name = signature_weapon
value = flag:dagger
}
}
configure_start_single_combat_effect = {
SC_INITIATOR = root
SC_ATTACKER = root
SC_DEFENDER = scope:fp2_2009_garduna_guild_master
FATALITY = always
FIXED = no
LOCALE = temple
OUTPUT_EVENT = fp2_struggle.2011
INVALIDATION_EVENT = fp2_struggle.2011 # If the thief dies, you still win. If you die, 2011 runs a check and fails to trigger.
}
ai_chance = { # Stress for craven was already taken when setting off in this quest
base = 50
ai_value_modifier = { ai_boldness = 0.5 }
}
}
option = { # Pay protection money
name = fp2_struggle.2010.c
pay_treasury_or_gold = { # Cowardice tax (costs more than hireing them)
target = scope:fp2_2009_garduna_guild_master
value = major_treasury_or_gold_value
}
stress_impact = {
brave = major_stress_impact_gain
just = major_stress_impact_gain
arrogant = major_stress_impact_gain
vengeful = medium_stress_impact_gain
}
ai_chance = {
base = 50
modifier = { # Nobody wants to be indebted to a thief
add = -25
gold < major_gold_value
}
ai_value_modifier = { ai_greed = -0.5 }
}
hidden_effect = {
save_scope_value_as = {
name = fp2_2009_event_outcome
value = flag:paid_off
}
trigger_event = {
id = fp2_struggle.2021
days = { 450 3000 }
}
}
}
}
fp2_struggle.2011 = { # You become the KING OF THIEVES
hidden = yes
immediate = {
if = {
limit = {
exists = scope:fp2_2011_reuse_gate
root = scope:fp2_2010_root_in_duel
}
send_interface_toast = {
type = event_toast_effect_good
desc = fp2_struggle.2011.desc
title = fp2_struggle.2011.a
right_icon = ROOT
if = { # Standard practice from EP1 onwards dictates that we ought not to overwrite positive nicknames (?)
limit = {
OR = {
has_any_nickname = no
has_bad_nickname = yes
}
}
give_nickname = nick_the_Thief_Slayer
}
add_prestige = major_prestige_gain
add_gold = minor_gold_value
}
}
else = {
save_scope_as = fp2_2011_reuse_gate
trigger_event = {
id = fp2_struggle.2011
days = 1
}
}
}
}
fp2_struggle.2012 = { # Displays letter notifying involved player/character that an action taken by 2009's root is affecting them
type = letter_event
sender = scope:fp2_2012_sender # Animation is WAD
opening = {
desc = {
first_valid = {
triggered_desc = {
trigger = { exists = scope:fp2_2009_has_gifted_head }
desc = fp2_struggle.2012.t.alt
}
desc = fp2_struggle.2012.t
}
}
}
desc = {
first_valid = {
triggered_desc = {
trigger = { exists = scope:fp2_2009_has_gifted_head }
desc = fp2_struggle.2012.desc.alt
}
desc = fp2_struggle.2012.desc
}
}
immediate = {
# Logic for deciding who is the author of the letter
if = {
limit = { exists = scope:fp2_2009_has_gifted_head } # If the event is the alt version where you gift the head
scope:fp2_2009_has_gifted_head = { save_scope_as = fp2_2012_sender }
}
else_if = {
limit = { exists = cp:councillor_spymaster } # Else cycle through possible chancellors
cp:councillor_spymaster = { save_scope_as = fp2_2012_sender }
}
else_if = {
limit = { exists = cp:councillor_marshal }
cp:councillor_marshal = { save_scope_as = fp2_2012_sender }
}
else_if = {
limit = { exists = cp:councillor_court_chaplain }
cp:councillor_court_chaplain = { save_scope_as = fp2_2012_sender }
}
else = { root = { save_scope_as = fp2_2012_sender } } # If all fails, you wrote the report yourself, about yourself, for yourself.
}
option = {
name = fp2_struggle.2012.a
trigger = { NOT = { exists = scope:fp2_2009_has_gifted_head } }
show_as_tooltip = { scope:fp2_2009_involved_capital_county = { add_thieves_guild_modifier_effect = yes } } # Has already happened, only to display info
}
option = {
name = fp2_struggle.2012.a.alt
trigger = { exists = scope:fp2_2009_has_gifted_head }
scope:fp2_2009_involved_capital_county = { change_county_control = 10 }
}
}
###################################
# The Secret to Freedom
# By Hugo Cortell
###################################
fp2_struggle.2013 = {
type = character_event
title = fp2_struggle.2013.t
desc = fp2_struggle.2013.desc
theme = secret
cooldown = { years = 2 }
override_background = {
trigger = { scope:fp2_2013_prisoner_with_a_secret = { is_in_prison_type = house_arrest } }
reference = sitting_room
}
override_background = {
trigger = { always = yes }
reference = dungeon
}
left_portrait = {
character = root
animation = scheme
}
right_portrait = {
character = scope:fp2_2013_prisoner_with_a_secret
triggered_animation = {
trigger = { scope:fp2_2013_prisoner_with_a_secret = { is_in_prison_type = house_arrest } }
animation = beg
}
animation = prisondungeon
override_imprisonment_visuals = yes
}
trigger = {
has_fp2_dlc_trigger = yes
any_prisoner = {
save_temporary_scope_as = temp_prisoner_with_secret # Prevents prisoner from revealing their own secret, which would be cool, but would require new loc
any_known_secret = {
secret_owner = {
this != scope:temp_prisoner_with_secret
top_liege = this
fp2_character_any_involvement_iberian_struggle_trigger = yes
}
NOT = { is_known_by = root }
}
}
}
immediate = {
random_prisoner = {
limit = {
save_temporary_scope_as = temp_prisoner_with_secret
any_known_secret = {
secret_owner = {
this != scope:temp_prisoner_with_secret
top_liege = this
fp2_character_any_involvement_iberian_struggle_trigger = yes
}
NOT = { is_known_by = root }
}
}
save_scope_as = fp2_2013_prisoner_with_a_secret
every_known_secret = {
limit = {
secret_owner = {
this != scope:fp2_2013_prisoner_with_a_secret
top_liege = this
}
NOT = { is_known_by = root }
}
secret_owner = { save_scope_as = fp2_2013_secret_owner }
save_scope_as = fp2_2013_secret_to_tell
}
stress_impact = {
brave = medium_stress_impact_gain
gallant = medium_stress_impact_gain
confider = major_stress_impact_gain
}
}
}
option = { # Agree
name = fp2_struggle.2013.a
show_as_tooltip = {
custom_tooltip = fp2_struggle.2013.a.a
scope:fp2_2013_prisoner_with_a_secret = { release_from_prison = yes }
}
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = witch.2010.message
left_icon = ROOT
right_icon = scope:fp2_2013_secret_owner
scope:fp2_2013_secret_to_tell = { reveal_to = root }
scope:fp2_2013_prisoner_with_a_secret = { release_from_prison = yes }
}
}
ai_chance = {
base = 15
ai_value_modifier = {
ai_boldness = -0.1
ai_compassion = 0.2
ai_honor = 0.1
ai_rationality = 0.4
ai_sociability = 0.1
ai_vengefulness = 0.1
}
}
}
option = { # Torture
name = fp2_struggle.2013.b
add_dread = minor_dread_gain
duel = {
skill = intrigue
value = medium_skill_rating
40 = { # Success
modifier = {
add = intrigue # Your intrigue level should make up for most of the 10 missing points to make this a 50 50
always = yes
}
modifier = {
add = 15 # Enjoy your job and it wont feel like work!
has_trait = sadistic
}
modifier = {
add = 35
has_trait = torturer
}
modifier = {
add = 5 # Iberia is home to many plants you should not rub against your skin, great for tickle-torture :D
has_trait = lifestyle_herbalist
}
modifier = {
add = 5
scope:fp2_2013_prisoner_with_a_secret = { has_trait = lazy }
}
modifier = {
add = 15 # Quickly changes their mind about wanting to resist torture
scope:fp2_2013_prisoner_with_a_secret = { has_trait = fickle }
}
custom_tooltip = fp2_struggle.2013.a.a
hidden_effect = {
send_interface_toast = {
type = event_toast_effect_good
title = witch.2010.message
left_icon = ROOT
right_icon = scope:fp2_2013_secret_owner
scope:fp2_2013_secret_to_tell = { reveal_to = root }
}
}
}
60 = { # You fail
desc = fp2_struggle.2013.b.b
modifier = {
add = scope:fp2_2013_prisoner_with_a_secret.prowess # This is a battle of your skill in torture (intrigue) against the will of your oponent (prowess, usually lower)
always = yes
}
modifier = {
add = 5
scope:fp2_2013_prisoner_with_a_secret = { has_trait = brave }
}
modifier = {
add = 5 # Being stubborn is as much a blessing as it is a curse, in this case, it is the former
scope:fp2_2013_prisoner_with_a_secret = { has_trait = stubborn }
}
modifier = {
add = 5
scope:fp2_2013_prisoner_with_a_secret = { has_trait = diligent }
}
modifier = {
add = 5 # They know nothing good can come from revealing information, what will the bargain with otherwise?
scope:fp2_2013_prisoner_with_a_secret = { has_trait = paranoid }
}
modifier = {
add = 2 # Maybe god is still on your side? Maybe it is a test?
scope:fp2_2013_prisoner_with_a_secret = { has_trait = zealous }
}
modifier = {
add = 2
scope:fp2_2013_prisoner_with_a_secret = { has_trait = callous }
}
modifier = {
add = 15 # I imagine this is sort of a lalatina moment
scope:fp2_2013_prisoner_with_a_secret = { has_trait = flagellant }
}
modifier = {
add = 10 # They are used to not revealing info under preassure, though torture is a bit more than they are used to...
scope:fp2_2013_prisoner_with_a_secret = { has_trait = confider }
}
send_interface_toast = {
type = event_toast_effect_bad
title = ease_tension_toast.failure
left_icon = ROOT
right_icon = scope:fp2_2013_prisoner_with_a_secret
}
}
}
reverse_add_opinion = {
target = scope:fp2_2013_prisoner_with_a_secret
modifier = tortured_me
opinion = -60 # 15 point reduction because there was a weak justification
years = 30
}
scope:fp2_2013_prisoner_with_a_secret = {
add_character_modifier = {
modifier = recently_tortured
years = 5
}
}
stress_impact = {
compassionate = major_stress_impact_gain
just = medium_stress_impact_gain
forgiving = medium_stress_impact_gain
}
ai_chance = {
base = 15
modifier = {
add = 25
has_trait = torturer
}
modifier = {
add = 15
has_trait = sadistic
}
ai_value_modifier = {
ai_boldness = 0.8
ai_compassion = -0.5
ai_greed = 0.6
ai_honor = -0.9
ai_vengefulness = 0.2
}
}
}
option = { # Send as gift
name = fp2_struggle.2013.c
flavor = fp2_struggle.2013.c.desc
trigger = { scope:fp2_2013_secret_owner = { is_ai = yes } }
custom_tooltip = fp2_struggle.2013.c.a
scope:fp2_2013_prisoner_with_a_secret = { release_from_prison = yes }
trigger_event = {
id = fp2_struggle.2014
days = { 1 4 }
}
ai_chance = {
base = 5
ai_value_modifier = {
ai_boldness = -0.1
ai_compassion = 0.2
ai_greed = -0.5
ai_energy = -0.1
ai_honor = 0.3
ai_sociability = 0.3
ai_vengefulness = -0.2
ai_zeal = -0.1
}
}
}
option = { # Dismiss
name = fp2_struggle.2013.d
random = {
chance = 5
modifier = {
add = 10
has_trait = depressed
}
modifier = {
add = 5
health < fine_health
}
show_as_tooltip = { custom_tooltip = fp2_struggle.2013.a.a }
hidden_effect = {
if = {
limit = { is_ai = no }
send_interface_toast = {
type = event_toast_effect_good
title = witch.2010.message
left_icon = ROOT
right_icon = scope:fp2_2013_secret_owner
scope:fp2_2013_secret_to_tell = { reveal_to = root }
}
}
}
}
ai_chance = {
base = 65
ai_value_modifier = {
ai_boldness = -0.2
ai_greed = -0.15
ai_energy = -0.1
ai_honor = 0.6
ai_sociability = 0.1
ai_vengefulness = -0.1
}
}
}
}
fp2_struggle.2014 = {
type = letter_event
sender = scope:fp2_2013_secret_owner
opening = fp2_struggle.2014.t
desc = {
desc = fp2_struggle.2014.desc.start
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2014_ai_secret_outcome = flag:prison }
desc = fp2_struggle.2014.desc.heavy.outcome.prison
}
triggered_desc = {
trigger = { scope:fp2_2014_ai_secret_outcome = flag:death }
desc = fp2_struggle.2014.desc.heavy.outcome.death
}
desc = fp2_struggle.2014.desc.light
}
}
trigger = {
scope:fp2_2013_secret_owner = { is_available_ai_adult = yes }
scope:fp2_2013_prisoner_with_a_secret = { is_available_ai_adult = yes }
}
on_trigger_fail = {
if = {
limit = { # Fallback - foreign ruler has died!
NOT = {
scope:fp2_2013_secret_owner = {
is_alive = yes
is_available_ai_adult = yes
}
}
}
send_interface_toast = {
type = event_death_neutral
desc = death_management.1007.t
left_icon = scope:fp2_2013_secret_owner
}
}
if = {
limit = { # Fallback - prisoner has died!
NOT = { scope:fp2_2013_prisoner_with_a_secret = { is_alive = yes } }
}
send_interface_toast = {
scope:fp2_2013_prisoner_with_a_secret = { save_temporary_scope_as = dead_character }
type = event_death_neutral
desc = death_management.1006.desc
left_icon = scope:fp2_2013_prisoner_with_a_secret
}
}
}
immediate = { # LOGIC FOR AI RESPONSE
save_scope_value_as = { # Calculate how "strong" a secret is
name = fp2_2014_secret_strength
value = {
value = 0
if = {
limit = { scope:fp2_2013_secret_to_tell = { is_criminal_for = scope:fp2_2013_secret_owner } }
add = 10
}
if = {
limit = { scope:fp2_2013_secret_to_tell = { is_shunned_for = scope:fp2_2013_secret_owner } }
add = 5
}
if = {
limit = { scope:fp2_2013_secret_to_tell = { secret_is_always_interesting_trigger = yes } }
add = 5
}
}
}
if = { # IS THIS SECRET A THREAT TO ME?
limit = { scope:fp2_2014_secret_strength >= 10 }
scope:fp2_2013_secret_owner = {
hidden_effect = {
add_opinion = {
target = scope:fp2_2013_prisoner_with_a_secret
modifier = betrayed_me_opinion
opinion = -50
}
}
add_opinion = {
target = root
modifier = did_not_tell_my_secret
opinion = 45
}
progress_towards_friend_effect = {
REASON = friend_kept_my_secret
CHARACTER = root
OPINION = 0
}
if = {
limit = {
has_dlc_feature = court_artifacts
any_character_artifact = {
NOT = { has_variable = historical_unique_artifact }
artifact_high_rarity_trigger = yes
}
}
random_character_artifact = {
limit = {
NOT = { has_variable = historical_unique_artifact }
artifact_high_rarity_trigger = yes
}
set_owner = root # If it breaks, use set_artifact_owner
}
}
save_opinion_value_as = {
name = fp2_2014_opinion_of_swine
target = scope:fp2_2013_prisoner_with_a_secret
}
}
if = { # YES, AND I MUST HIDE IT (prison outcome)
limit = {
scope:fp2_2013_secret_owner = {
NAND = {
has_trait = paranoid
ai_compassion < 30
}
}
}
save_scope_value_as = {
name = fp2_2014_ai_secret_outcome
value = flag:prison
}
scope:fp2_2013_secret_owner = {
rightfully_imprison_character_effect = {
TARGET = scope:fp2_2013_prisoner_with_a_secret
IMPRISONER = scope:fp2_2013_secret_owner
}
}
}
else = { # YES, AND I WILL TAKE NO CHANCES (execution outcome)
save_scope_value_as = {
name = fp2_2014_ai_secret_outcome
value = flag:death
}
scope:fp2_2013_prisoner_with_a_secret = {
death = {
death_reason = death_torture
killer = scope:fp2_2013_secret_owner
}
}
}
}
else = { # NO, ACTUALLY THIS IS NOT A BIG DEAL (release outcome)
scope:fp2_2013_secret_owner = {
hidden_effect = {
add_opinion = {
target = scope:fp2_2013_prisoner_with_a_secret
modifier = betrayed_me_opinion
opinion = -25
}
}
add_opinion = {
target = root
modifier = did_not_tell_my_secret
opinion = 25
}
if = {
limit = {
has_dlc_feature = court_artifacts
any_character_artifact = {
NOT = { has_variable = historical_unique_artifact }
artifact_low_rarity_trigger = yes
}
}
random_character_artifact = {
limit = {
NOT = { has_variable = historical_unique_artifact }
artifact_low_rarity_trigger = yes
}
set_owner = root
}
}
else = {
progress_towards_friend_effect = {
REASON = friend_protected_secrets
CHARACTER = root
OPINION = 0
}
}
}
save_scope_value_as = {
name = fp2_2014_ai_secret_outcome
value = flag:release
}
}
}
option = {
name = {
text = {
first_valid = {
triggered_desc = {
trigger = { NOT = { scope:fp2_2014_ai_secret_outcome = flag:release } }
desc = south_asia.0039.a
}
desc = fp2_struggle.2014.b
}
}
}
}
}
###################################
# Letter on The Back
# By Hugo Cortell
###################################
# (a post-it saying kick me)
###################################
scripted_trigger fp2_struggle_2015_vassal_check_trigger = {
is_available_ai_adult = yes
exists = location # Under no circumstance should it be necessary to need to check this
NOT = { has_trait = compassionate }
}
fp2_struggle.2015 = {
type = character_event
title = fp2_struggle.2015.t
desc = fp2_struggle.2015.desc
cooldown = { years = 25 }
theme = murder_scheme
override_background = { reference = council_chamber }
left_portrait = {
character = root
animation = chancellor
}
right_portrait = {
character = scope:fp2_struggle_2015_peasant_to_murder
animation = personality_forgiving
}
lower_right_portrait = scope:fp2_struggle_2015_murder_requester_vassal
trigger = {
is_ai = no # Murder schemes are heavy for performance
has_fp2_dlc_trigger = yes
root.top_liege = root
any_powerful_vassal = {
fp2_struggle_2015_vassal_check_trigger = yes
opinion = { # Redundant second time around
target = root
value < 30
}
}
}
immediate = {
random_vassal = { # From joe
limit = {
is_powerful_vassal = yes
fp2_struggle_2015_vassal_check_trigger = yes
opinion = {
target = root
value < 30
}
}
save_opinion_value_as = {
name = liege_opinion
target = root
}
save_scope_as = fp2_struggle_2015_murder_requester_vassal # Makes sure that one exists, even if [ThreadIndex != UINT32_MAX] causes the loop to skip a beat
}
while = {
limit = {
any_powerful_vassal = {
fp2_struggle_2015_vassal_check_trigger = yes
opinion = {
target = root
value < scope:liege_opinion
}
}
}
random_vassal = {
limit = {
is_powerful_vassal = yes
fp2_struggle_2015_vassal_check_trigger = yes
opinion = {
target = root
value < scope:liege_opinion
}
}
save_opinion_value_as = {
name = liege_opinion
target = root
}
save_scope_as = fp2_struggle_2015_murder_requester_vassal
}
}
create_character = {
location = scope:fp2_struggle_2015_murder_requester_vassal.location
template = generic_peasant_character
diplomacy = { 8 13 } # High stat
trait = trusting
random_traits = yes
faith = scope:fp2_struggle_2015_murder_requester_vassal.location.county.faith
culture = scope:fp2_struggle_2015_murder_requester_vassal.location.county.culture
save_scope_as = fp2_struggle_2015_peasant_to_murder
}
hidden_effect = {
scope:fp2_struggle_2015_peasant_to_murder = {
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = annoyed_opinion
opinion = -100
}
}
add_courtier = scope:fp2_struggle_2015_peasant_to_murder
}
}
option = { # Comply and kill the unsuspecting courtier
name = fp2_struggle.2015.a
trigger = { is_ai = no }
duel = {
skill = intrigue
value = average_skill_rating
10 = {
desc = fp2_struggle.2015.a.a
compare_modifier = {
value = scope:duel_value
multiplier = -1.25
}
send_interface_toast = {
type = event_intrigue_bad
title = murder_outcome.2302.t
left_icon = scope:fp2_struggle_2015_peasant_to_murder
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = disappointed_opinion
opinion = -15
}
remove_courtier_or_guest = scope:fp2_struggle_2015_peasant_to_murder
custom_tooltip = fp2_struggle.2015.a.murder_scheme
hidden_effect = {
scope:fp2_struggle_2015_murder_requester_vassal = {
start_scheme = {
type = murder
target_character = scope:fp2_struggle_2015_peasant_to_murder
}
}
}
}
reverse_add_opinion = {
target = scope:fp2_struggle_2015_peasant_to_murder
modifier = suspicion_opinion
opinion = -20
}
}
10 = {
compare_modifier = {
value = scope:duel_value
multiplier = 1.25
}
modifier = {
add = {
value = intrigue
multiply = 2
round = yes
}
always = yes
}
modifier = {
add = 35
has_trait = lifestyle_herbalist
}
modifier = {
add = 5
has_trait = drunkard # You know how to disguise drinks
}
modifier = {
add = 15
has_perk = swift_execution_perk
}
modifier = {
add = 10 # They add up
has_perk = a_job_done_right_perk
}
send_interface_toast = {
type = event_intrigue_good
title = fp2_struggle.2015.a.b
left_icon = scope:fp2_struggle_2015_murder_requester_vassal
scope:fp2_struggle_2015_peasant_to_murder = {
death = {
killer = ROOT
death_reason = death_poison
}
}
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = helped_me_in_time_of_need
opinion = 40
}
}
add_secret = {
type = secret_murder
target = scope:fp2_struggle_2015_peasant_to_murder
}
random_secret = {
type = secret_murder
limit = {
secret_target = scope:fp2_struggle_2015_peasant_to_murder
}
save_scope_as = fp2_2015_murder_secret
}
if = { # AHA! YOU FOOL! I TRICKED YOU INTO COMMITING A CRIME!
limit = {
scope:fp2_struggle_2015_murder_requester_vassal = {
OR = {
has_relation_rival = ROOT
has_secret_relation_rival = ROOT # ???
has_relation_nemesis = ROOT
AND = {
has_dread_level_towards = {
target = ROOT
level <= 1
}
OR = {
AND = {
has_trait = deceitful
opinion = {
target = root
value < -25
}
}
AND = {
ai_boldness > 9
ai_compassion < 1
ai_honor < -29
ai_vengefulness > -1
}
}
}
}
}
}
trigger_event = { # Usually I would use a notification but...
id = fp2_struggle.2016 # The narrative impact of a full letter is greater, it makes sure the betrayal stings. This vassal wrote just to rub salt in your eyes.
days = { 3 4 }
}
}
}
}
stress_impact = {
compassionate = medium_stress_impact_gain
gallant = minor_stress_impact_gain
}
}
option = { # Ignore the letter
name = fp2_struggle.2015.b
trigger = { is_ai = no }
send_interface_toast = {
type = event_toast_effect_good
title = murder_outcome.4302.t
left_icon = scope:fp2_struggle_2015_murder_requester_vassal
right_icon = scope:fp2_struggle_2015_peasant_to_murder
show_as_tooltip = { add_courtier = scope:fp2_struggle_2015_peasant_to_murder }
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = broke_promise
}
}
custom_tooltip = fp2_struggle.2015.a.murder_scheme
hidden_effect = {
scope:fp2_struggle_2015_murder_requester_vassal = {
start_scheme = {
type = murder
target_character = scope:fp2_struggle_2015_peasant_to_murder
}
}
}
}
option = { # Warn the courtier about this (vassal may find out)
name = fp2_struggle.2015.c
random_list = {
75 = {
desc = fp2_struggle.2015.c.b
send_interface_toast = {
type = event_intrigue_good
title = fp2_struggle.2015.c.b
left_icon = scope:fp2_struggle_2015_peasant_to_murder
right_icon = scope:fp2_struggle_2015_murder_requester_vassal
scope:fp2_struggle_2015_peasant_to_murder = { silent_disappearance_effect = yes }
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = helped_me_in_time_of_need
opinion = 25 # -15 points for suspicion (where is the body?)
}
}
}
25 = {
desc = fp2_struggle.2015.c.a
send_interface_toast = {
type = event_intrigue_bad
title = fp2_struggle.2015.c.a
left_icon = scope:fp2_struggle_2015_peasant_to_murder
right_icon = scope:fp2_struggle_2015_murder_requester_vassal
scope:fp2_struggle_2015_peasant_to_murder = { death = { death_reason = death_mysterious } }
reverse_add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = broke_promise
}
stress_impact = {
forgiving = minor_stress_impact_gain
humble = minor_stress_impact_gain
just = minor_stress_impact_gain
compassionate = minor_stress_impact_gain
trusting = minor_stress_impact_gain
gallant = minor_stress_impact_gain
}
}
}
}
}
}
fp2_struggle.2016 = {
type = letter_event
sender = scope:fp2_struggle_2015_murder_requester_vassal
opening = fp2_struggle.2016.t
desc = fp2_struggle.2016.desc
option = { # Tricked, backstabbed and quite possibly, out-smarted by your cunning vassal/rival
name = fp2_struggle.2016.a
hidden_effect = { scope:fp2_2015_murder_secret = { reveal_to = scope:fp2_struggle_2015_murder_requester_vassal } }
scope:fp2_struggle_2015_murder_requester_vassal = {
blackmail_target_with_secret_effect = {
SECRET = scope:fp2_2015_murder_secret
TARGET = ROOT
}
}
progress_towards_rival_effect = {
CHARACTER = scope:fp2_struggle_2015_murder_requester_vassal
REASON = rival_tricked_murder
OPINION = default_rival_opinion
}
add_opinion = {
target = scope:fp2_struggle_2015_murder_requester_vassal
modifier = betrayed_me_opinion
opinion = -60
}
}
}
###################################
# RETURN OF THE THIEF KING
# By Hugo Cortell
###################################
# Directors liked the original very much
##########################################
fp2_struggle.2021 = { # Main event
type = character_event
title = fp2_struggle.2021.t
desc = {
desc = fp2_struggle.2021.desc
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2009_event_outcome = flag:cleared_out }
desc = fp2_struggle.2021.desc.alt.cutout
}
triggered_desc = {
trigger = { scope:fp2_2009_event_outcome = flag:paid_off }
desc = fp2_struggle.2021.desc.alt.paidoff
}
triggered_desc = {
trigger = { scope:fp2_2009_event_outcome = flag:worked_together }
desc = fp2_struggle.2021.desc.alt.work
}
triggered_desc = {
trigger = { scope:fp2_2009_event_outcome = flag:lobbed_head }
desc = fp2_struggle.2021.desc.alt.behead
}
}
desc = { desc = fp2_struggle.2021.desc.outro }
}
theme = secret
override_background = {
trigger = { scope:fp2_2009_event_outcome = flag:cleared_out }
reference = alley_day
}
override_background = {
trigger = { scope:fp2_2009_event_outcome = flag:paid_off }
reference = tavern
}
override_background = {
trigger = { scope:fp2_2009_event_outcome = flag:worked_together }
reference = throne_room
}
override_background = {
trigger = { scope:fp2_2009_event_outcome = flag:lobbed_head }
reference = alley_night
}
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = scope:fp2_2009_garduna_guild_master
animation = scheme
outfit_tags = {
western_stealth_hood
sub_saharan_high_nobility
mena_war_legwear
}
}
trigger = {
fp2_character_involved_in_struggle_trigger = yes # To check that the struggle is still going on
exists = primary_title
scope:fp2_2009_garduna_guild_master = {
is_available_ai_adult = yes
OR = { # Is this char still looking for adventure or have they settled down?
is_pool_character = yes
is_pool_guest = yes
}
}
}
immediate = {
title:c_napoli.title_province = { # Originally, the thieves were going to set up a guild there, but thats not very nice.
county = {
save_scope_as = fp2_2021_old_napoly
holder.top_liege = {
save_scope_as = fp2_2021_angry_italian # So instead you just get an opinion debuff for narrative impact.
} # If this were not such a strange event, I would actually make it affect the character mechanically. But there is little excuse here.
}
}
# Spy Network Logic, once upon a time used to be elegant.
if = {
limit = { exists = struggle:iberian_struggle }
struggle:iberian_struggle = {
if = {
limit = { # Theoretically, effects which do not meet its conditions (the limit) are skipped over. However, the nightly has proven that wrong.
any_involved_ruler = { # As such we take a _much_ more conservative approach of triple checking everything.
exists = primary_title
has_any_secrets = yes
this != root
}
}
random_involved_ruler = {
limit = {
exists = primary_title
has_any_secrets = yes
this != root
}
random_secret = { save_scope_as = fp2_2021_secreto_numero_ichi }
}
if = {
limit = {
any_involved_ruler = {
exists = primary_title
has_any_secrets = yes
NOT = {
this = root
any_secret = { this = scope:fp2_2021_secreto_numero_ichi }
}
}
}
random_involved_ruler = {
limit = {
exists = primary_title
has_any_secrets = yes
NOT = {
this = root
any_secret = { this = scope:fp2_2021_secreto_numero_ichi }
}
}
random_secret = { save_scope_as = fp2_2021_secreto_numero_ni }
}
}
}
}
}
if = {
limit = { exists = cp:councillor_spymaster }
cp:councillor_spymaster = { save_scope_as = fp2_2021_spymaster }
}
hidden_effect = { # Hides exceptions from players, fix is not necessary
scope:fp2_2009_garduna_guild_master = {
save_scope_as = dueltarget # For Loc
move_to_pool_at = root.location # Fixes endless loop where the thief gets stretched across half the map
}
}
}
option = { # Send off to italy
name = fp2_struggle.2021.a
scope:fp2_2009_garduna_guild_master = {
pay_short_term_gold = {
target = ROOT
gold = minor_gold_value
}
}
custom_tooltip = fp2_struggle.2021.a.a
scope:fp2_2021_angry_italian = {
add_opinion = {
target = root
modifier = raided_me_opinion
opinion = -40
}
}
hidden_effect = { # Possible random outcomes
random_list = {
10 = { # "Retires", buys a house in italy and lives as an old man happily ever after (just like your dog went to a farm when it got old)
scope:fp2_2009_garduna_guild_master = { silent_disappearance_effect = yes }
modifier = {
add = 30
scope:fp2_2009_event_outcome = flag:lobbed_head
}
modifier = {
add = 20
scope:fp2_2009_event_outcome = flag:worked_together
}
}
30 = { # He just sorta roams around italy
scope:fp2_2009_garduna_guild_master = { move_to_pool_at = scope:fp2_2021_angry_italian.location }
modifier = {
add = 10
scope:fp2_2009_event_outcome = flag:cleared_out
}
}
10 = { # Joins napolitan court
scope:fp2_2009_garduna_guild_master = { remove_nickname = yes } # Becomes a functional member of society
scope:fp2_2021_angry_italian = {
add_courtier = scope:fp2_2009_garduna_guild_master
add_opinion = {
target = scope:fp2_2009_garduna_guild_master
modifier = impressed_opinion
opinion = 20
}
reverse_add_opinion = {
target = scope:fp2_2009_garduna_guild_master
modifier = opinion_welcomed_with_tea
}
}
modifier = {
add = 20
scope:fp2_2009_event_outcome = flag:paid_off
}
}
}
}
}
option = { # Recruit into court (cures courtier's depression if they were a member of the thief-king's gang)
name = fp2_struggle.2021.b
pay_short_term_gold = {
target = scope:fp2_2009_garduna_guild_master
gold = medium_gold_value
}
every_powerful_vassal = {
limit = { NOT = { has_trait = forgiving } }
custom = fp2_every_major_vassal_notifier
add_opinion = {
target = root
modifier = suspicion_opinion
opinion = -15
}
}
add_courtier = scope:fp2_2009_garduna_guild_master
if = {
limit = { exists = scope:fp2_2009_garduna_young_thief }
remove_trait = depressed_1 # My old boss survived! (though the rest are dead but shhh)
}
hidden_effect = {
scope:fp2_2009_garduna_guild_master = {
add_opinion = {
target = root
modifier = hired_me_opinion
opinion = 15
}
if = { # There can only be one top dog, one master of the shadows.
limit = { scope:fp2_2021_spymaster != scope:fp2_2009_garduna_young_thief }
random = {
chance = 25
set_relation_rival = {
target = scope:fp2_2021_spymaster
reason = rival_garduna_young_thief
}
}
}
}
}
}
option = { # Establish a spy network
name = fp2_struggle.2021.c
flavor = fp2_struggle.2021.c.flavor
trigger = {
OR = {
exists = scope:fp2_2021_secreto_numero_ichi
exists = scope:fp2_2021_secreto_numero_ni
}
}
pay_short_term_gold = {
target = scope:fp2_2009_garduna_guild_master
gold = major_gold_value
}
custom_tooltip = fp2_struggle.2021.c.a # Perhaps it can mention the spymaster?
hidden_effect = { # Note: You might end up learning secrets you already know, this is WAD
if = {
limit = {
exists = scope:fp2_2021_secreto_numero_ichi
exists = scope:fp2_2021_secreto_numero_ni
}
send_interface_toast = {
type = event_intrigue_good
title = fp2_struggle.2021.c.spynet.a
scope:fp2_2021_secreto_numero_ichi = { reveal_to = root }
scope:fp2_2021_secreto_numero_ni = { reveal_to = root }
}
}
else = {
if = {
limit = { exists = scope:fp2_2021_secreto_numero_ichi }
send_interface_toast = {
type = event_intrigue_good
title = fp2_struggle.2021.c.spynet.a
scope:fp2_2021_secreto_numero_ichi = { reveal_to = root }
}
}
else_if = {
limit = { exists = scope:fp2_2021_secreto_numero_ni }
send_interface_toast = {
type = event_intrigue_good
title = fp2_struggle.2021.c.spynet.a
scope:fp2_2021_secreto_numero_ni = { reveal_to = root }
}
}
}
}
scope:fp2_2009_garduna_guild_master = { silent_disappearance_effect = yes }
}
option = { # Duel option (get title late)
name = {
text = {
first_valid = {
triggered_desc = {
trigger = { scope:fp2_2009_event_outcome = flag:lobbed_head }
desc = fp2_struggle.2021.d.alt
}
desc = fp2_struggle.2021.d
}
}
}
trigger = { NOT = { age < 14 } }
custom_tooltip = fp2_struggle.2021.d.b
show_as_tooltip = {
if = {
limit = {
OR = {
has_any_nickname = no
has_bad_nickname = yes
}
}
give_nickname = nick_the_Thief_Slayer
}
}
ROOT = { save_scope_as = fp2_2021_root_in_duel }
scope:fp2_2009_garduna_guild_master = {
set_variable = {
name = signature_weapon
value = flag:dagger
}
}
if = { # Changes the background to match, you cannot use conditional values on scripted effects
limit = { scope:fp2_2009_event_outcome = flag:cleared_out }
configure_start_single_combat_effect = {
SC_INITIATOR = root
SC_ATTACKER = root
SC_DEFENDER = scope:fp2_2009_garduna_guild_master
FATALITY = always
FIXED = no
LOCALE = alley_day
OUTPUT_EVENT = fp2_struggle.2022
INVALIDATION_EVENT = fp2_struggle.2022
}
}
else_if = {
limit = { scope:fp2_2009_event_outcome = flag:paid_off }
configure_start_single_combat_effect = {
SC_INITIATOR = root
SC_ATTACKER = root
SC_DEFENDER = scope:fp2_2009_garduna_guild_master
FATALITY = always
FIXED = no
LOCALE = tavern
OUTPUT_EVENT = fp2_struggle.2022
INVALIDATION_EVENT = fp2_struggle.2022
}
}
else_if = {
limit = { scope:fp2_2009_event_outcome = flag:worked_together }
configure_start_single_combat_effect = {
SC_INITIATOR = root
SC_ATTACKER = root
SC_DEFENDER = scope:fp2_2009_garduna_guild_master
FATALITY = always
FIXED = no
LOCALE = throne_room
OUTPUT_EVENT = fp2_struggle.2022
INVALIDATION_EVENT = fp2_struggle.2022
}
}
else_if = {
limit = { scope:fp2_2009_event_outcome = flag:lobbed_head }
configure_start_single_combat_effect = {
SC_INITIATOR = root
SC_ATTACKER = root
SC_DEFENDER = scope:fp2_2009_garduna_guild_master
FATALITY = always
FIXED = no
LOCALE = alley_night
OUTPUT_EVENT = fp2_struggle.2022
INVALIDATION_EVENT = fp2_struggle.2022
}
}
}
after = { remove_global_variable = fp2_struggle_2009_thief_king_char }
}
fp2_struggle.2022 = { # You become the KING OF THIEVES again, well, late is better than never...
hidden = yes
immediate = {
if = {
limit = {
exists = scope:fp2_2022_reuse_gate
root = scope:fp2_2021_root_in_duel
}
send_interface_toast = {
type = event_toast_effect_good
title = fp2_struggle.2021.d.a
right_icon = ROOT
if = {
limit = {
OR = {
has_any_nickname = no
has_bad_nickname = yes
}
}
give_nickname = nick_the_Thief_Slayer
}
add_prestige = medium_prestige_gain # Penalty for finishing the job late
add_gold = minor_gold_value
}
}
else = {
save_scope_as = fp2_2022_reuse_gate
trigger_event = {
id = fp2_struggle.2022
days = 1
}
}
}
}
###################################
# The Price of War
# by Veronica Pazos
###################################
# You pawn your crown to get some gold to help in your war
##############################################################
fp2_struggle.3001 = {
type = character_event
title = fp2_struggle.3001.t
desc = {
desc = fp2_struggle.3001.desc
first_valid = {
triggered_desc = {
trigger = {
is_at_war = yes
}
desc = fp2_struggle.3001.desc_war_intro
}
triggered_desc = {
trigger = {
is_at_war = no
}
desc = fp2_struggle.3001.desc_no_war_intro
}
}
desc = fp2_struggle.3001.desc_outro
}
theme = crown
cooldown = { years = 5 } #in case you don't sell your crown you'll have to wait to get the chance again
override_background = { reference = council_chamber }
left_portrait = {
character = root
animation = worry
}
right_portrait = {
character = cp:councillor_steward
animation = personality_rational
}
trigger = {
has_fp2_dlc_trigger = yes #dlc check
is_available_even_at_war_adult = yes
primary_title.tier >= tier_kingdom #so we make sure you have an actual crown
OR = { #someone has to suggest this
exists = cp:councillor_steward
any_courtier = {
stewardship >= medium_skill_rating
}
}
gold < minor_gold_value #you don't have much gold
NOT = { has_character_flag = sold_crown_charmod } #you haven't sold your crown before
struggle:iberian_struggle = {
NOT = { is_struggle_phase = struggle_iberia_phase_compromise } #you're not in the compromise phase
}
}
weight_multiplier = { #more likely to trigger the poorer you are
modifier = {
add = 0.25
gold <= 25
}
modifier = {
add = 0.25
gold <= 20
}
modifier = {
add = 0.5
gold <= 15
}
modifier = {
add = 0.5
gold <= 10
}
}
immediate = {
play_music_cue = "mx_cue_touching_moment"
if = {
limit = {
exists = cp:councillor_steward
}
cp:councillor_steward = { save_scope_as = struggle_3001_steward }
}
else = {
random_courtier = {
limit = {
stewardship >= medium_skill_rating
}
save_scope_as = struggle_3001_steward
}
}
if = {
limit = {
has_any_artifact = yes
any_character_artifact = { artifact_type = helmet } #we check if you have a crown artifact
}
random_character_artifact = {
limit = { artifact_type = helmet }
save_scope_as = struggle_3001_crown_artifact
}
}
if = {
limit = {
is_married = yes
}
primary_spouse = {
save_scope_as = struggle_3001_spouse
}
}
}
option = { #sell your own crown
name = fp2_struggle.3001.a
flavor = fp2_struggle.3001.a_flavour
add_character_flag = sold_crown_charmod #you lose your crown
give_nickname = nick_the_crownless #now everyone knows
add_gold = medium_gold_max_value
add_prestige = major_prestige_loss
stress_impact = {
arrogant = medium_stress_impact_gain
humble = minor_stress_loss
}
ai_chance = {
base = 5
modifier = {
add = 5
gold <= 15
}
ai_value_modifier = {
ai_greed = 0.15
ai_rationality = 0.2
}
}
}
option = { #sell artifact crown instead
name = fp2_struggle.3001.b
trigger = { #triggers if you actually have one
any_character_artifact = {
artifact_slot_type = helmet
}
}
add_gold = medium_gold_value
add_prestige = minor_prestige_loss
destroy_artifact = scope:struggle_3001_crown_artifact
stress_impact = {
greedy = minor_stress_impact_gain
}
ai_chance = {
base = 5
modifier = {
add = 5
gold <= 15
}
ai_value_modifier = {
ai_greed = -0.3
ai_rationality = 0.2
}
}
}
option = { #but my spouse also has a crown...
name = fp2_struggle.3001.c
flavor = fp2_struggle.3001.c_flavour
trigger = {
is_married = yes #you have a spouse
scope:struggle_3001_spouse = {
NOT = { has_character_flag = sold_crown_charmod } #and you didn't sell their crown
}
}
add_gold = medium_gold_value
add_prestige = minor_prestige_loss
if = {
limit = {
scope:struggle_3001_spouse = {
has_trait = humble
}
}
scope:struggle_3001_spouse = {
add_opinion = {
target = ROOT
opinion = -25 #they are displeased
modifier = struggle_3001_spouse_crown_modifier
}
add_character_flag = sold_crown_charmod #your spouse loses their crown
}
}
else = {
scope:struggle_3001_spouse = {
add_opinion = {
target = ROOT
opinion = -75 #they REALLY hate you
modifier = struggle_3001_spouse_crown_modifier
}
add_character_flag = sold_crown_charmod #your spouse loses their crown
}
}
stress_impact = {
generous = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
}
ai_chance = {
base = 10
modifier = {
add = 5
gold <= 15
}
ai_value_modifier = {
ai_greed = 0.5
}
}
}
option = { #I'll be dead before losing my crown
name = fp2_struggle.3001.d
stress_impact = {
base = medium_stress_gain #you really need money
}
ai_chance = {
base = 5
}
}
}
###################################
# Order of the Hatchet
# By Veronica Pazos
###################################
# Order of the Hachet - Woman are defending your city
#######################################################
fp2_struggle.3011 = {
type = character_event
title = fp2_struggle.3011.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
faith = { has_doctrine = doctrine_gender_female_dominated }
}
desc = fp2_struggle.3011.desc_men #reverse genre event
}
desc = fp2_struggle.3011.desc
}
desc = fp2_struggle.3011.desc_outro
}
theme = realm
cooldown = { years = 20 }
left_portrait = {
character = root
animation = personality_rational
}
right_portrait = {
character = cp:councillor_marshal
animation = marshal
}
lower_right_portrait = scope:bishop
trigger = {
has_fp2_dlc_trigger = yes
fp2_character_any_involvement_iberian_struggle_trigger = yes #there's an ongoing struggle (includes dlc check)
is_available_even_at_war_adult = yes
is_landed_or_landless_administrative = yes
any_character_war = {
war_days >= 30 #a battle has likely happened
}
exists = cp:councillor_marshal #someone tells you about the incident
exists = cp:councillor_court_chaplain
faith = {
NOT = { has_doctrine = doctrine_gender_equal } #checks that this is unusual
}
OR = { #checks again that this makes sense, Ola Jentzsch's note
has_game_rule = default_gender_equality
has_game_rule = inversed_gender_equality
}
struggle:iberian_struggle = { #there's a struggle going on
OR = {
is_struggle_phase = struggle_iberia_phase_hostility
is_struggle_phase = struggle_iberia_phase_opportunity
}
}
any_sub_realm_barony = {
exists = holder
title_province = { has_holding_type = city_holding }
}
}
weight_multiplier = {
base = 1
}
immediate = {
cp:councillor_marshal = { save_scope_as = struggle_3011_marshal }
cp:councillor_court_chaplain = { save_scope_as = bishop }
random_sub_realm_barony = {
limit = {
exists = holder
title_province = { has_holding_type = city_holding }
}
county = { save_scope_as = struggle_3011_county_town }
}
}
option = { #that's dope
name = fp2_struggle.3011.a
scope:struggle_3011_county_town = {
add_county_modifier = {
modifier = fp2_order_of_the_hachet_modifier
years = 5
}
}
scope:bishop = {
add_opinion = {
target = ROOT
opinion = -25
modifier = angry_opinion
}
}
every_vassal = {
custom = custom.every_zealous_callous_or_sadistic_vassal
limit = {
OR = {
has_trait = zealous
has_trait = callous
}
}
add_opinion = {
target = ROOT
opinion = -10
modifier = annoyed_opinion
}
}
stress_impact = {
zealous = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_zeal = -1 #zealous AI will never pick this
ai_compassion = 0.2
ai_honor = 0.2
}
}
}
option = { #ridiculous
name = {
trigger = {
faith = { has_doctrine = doctrine_gender_male_dominated }
}
text = fp2_struggle.3011.b
}
name = {
trigger = {
faith = { has_doctrine = doctrine_gender_female_dominated }
}
text = fp2_struggle.3011.b_men
}
scope:bishop = {
add_opinion = {
target = ROOT
opinion = 10
modifier = grateful_opinion
}
}
if = {
limit = {
faith = { has_doctrine = doctrine_gender_male_dominated }
}
every_courtier = {
custom = custom.every_female_courtier
limit = {
is_female = yes
}
add_opinion = {
target = ROOT
opinion = -10
modifier = insult_opinion
}
}
}
else_if = {
limit = {
faith = { has_doctrine = doctrine_gender_female_dominated }
}
every_courtier = {
custom = custom.every_male_courtier
limit = {
is_male = yes
}
add_opinion = {
target = ROOT
opinion = -10
modifier = insult_opinion
}
}
}
stress_impact = {
cynical = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_zeal = 0.2
ai_rationality = -0.2
}
}
}
option = { #witches!
name = fp2_struggle.3011.c
trigger = {
has_trait = zealous
}
add_dread = medium_dread_gain
add_character_modifier = {
modifier = fp2_punished_order_of_the_hachet_modifier
years = 5
}
ai_chance = { #zealous AI will pick this option
base = 1
ai_value_modifier = {
ai_zeal = 0.8
ai_energy = -0.7
ai_vengefulness = 0.5
}
}
}
option = { #I shall save these damsels in distress!
name = fp2_struggle.3011.d
trigger = {
faith = { has_doctrine = doctrine_gender_male_dominated }
OR = {
has_trait = gallant
has_trait = arrogant
culture = {
has_cultural_tradition = tradition_chanson_de_geste
}
}
}
random_list = { #how does that go
75 = {
add_stress = medium_stress_gain
}
25 = {
add_stress = medium_stress_impact_loss
}
}
ai_chance = {
base = 10
}
}
}
###################################
# The Wrath of Heaven
# By Veronica Pazos
###################################
# "Lightning stones" in a siege
###################################
fp2_struggle.3021 = {
type = character_event
title = fp2_struggle.3021.t
desc = fp2_struggle.3021.desc
theme = martial
left_portrait = {
character = root
animation = personality_cynical
}
right_portrait = {
character = scope:struggle_3021_knight
animation = shock
}
lower_right_portrait = scope:struggle_3021_courtier
trigger = {
has_fp2_dlc_trigger = yes
fp2_character_any_involvement_iberian_struggle_trigger = yes
is_available_even_at_war_adult = yes
NOT = { has_character_flag = had_event_struggle_3021 } #so you don't research the same thing again
struggle:iberian_struggle = { #there's some kind of hostility going on
is_struggle_phase = struggle_iberia_phase_hostility
}
any_knight = { #someone sees this
is_available_healthy_ai_adult = yes
}
any_courtier = { #someone will research this
is_available_healthy_ai_adult = yes
count > 0
}
any_directly_owned_province = { #we have a castle to use it on
has_holding_type = castle_holding
NOT = { has_province_modifier = fp2_lightning_stones_modifier }
}
}
weight_multiplier = {
base = 1
modifier = {
add = 1
is_at_war = yes
}
}
immediate = {
add_character_flag = had_event_struggle_3021
random_knight = {
limit = {
is_available_healthy_ai_adult = yes
}
save_scope_as = struggle_3021_knight
}
every_courtier = { #get your courtiers
limit = {
is_available_ai_adult = yes
this != root.primary_spouse #you shouldn't lose your spouse or heir because of this
this != root.player_heir
}
add_to_list = struggle_3021_courtier_list
}
ordered_in_list = { #sort through to pick the one with highest learning
list = struggle_3021_courtier_list
order_by = learning
max = 1
save_scope_as = struggle_3021_courtier
}
random_directly_owned_province = { #this is where we can try it
limit = {
has_holding_type = castle_holding
}
save_scope_as = lightning_stones_province
}
}
option = { #we need to research this stuff
name = fp2_struggle.3021.a
scope:struggle_3021_courtier = { #This is who is doing the research
duel = {
skill = learning #The skill needed for research
value = average_skill_rating #Found in 00_basic_values.txt - An 8 in this case
12 = { #Success - We keep the weight values fairly close to our skill values so they can be affected. 20 is a good max.
compare_modifier = {
value = scope:duel_value
multiplier = 2 #This multiplies the *difference* between the skill and the target. Meaning folks with good skills will be much more likely to get it.
min = -5 #This prevents truly terrible people from completely losing the chance to succeed.
}
desc = good_struggle_3021_courtier_desc
root = {
send_interface_toast = {
title = good_stone_research_title
left_icon = scope:struggle_3021_courtier
scope:lightning_stones_province = {
add_province_modifier = {
modifier = fp2_lightning_stones_modifier
}
}
}
}
}
14 = { #Failure!
compare_modifier = {
value = scope:duel_value
multiplier = -2 #This multiplies and inverts the *difference* between the skill and the target. Meaning folks with bad skills will be much more likely to get this.
}
desc = bad_struggle_3021_courtier_desc
root = {
send_interface_toast = { #send a toast
title = bad_stone_research_title
desc = bad_struggle_3021_courtier_desc
left_icon = scope:struggle_3021_courtier
scope:struggle_3021_courtier = {
death = { death_reason = death_accident }
}
}
}
}
}
}
stress_impact = {
zealous = medium_stress_impact_gain
}
}
option = { #this is not the greatest idea
name = fp2_struggle.3021.b
reverse_add_opinion = {
target = scope:struggle_3021_courtier
modifier = insulted_opinion
opinion = -15
}
stress_impact = {
base = minor_stress_impact_loss
zealous = medium_stress_impact_gain
craven = minor_stress_impact_loss
brave = medium_stress_impact_gain
}
}
option = { #we can maybe use this in a feast
name = fp2_struggle.3021.c
trigger = {
OR = {
has_trait = vengeful
has_trait = deceitful
has_trait = arbitrary
has_trait = callous
intrigue >= high_skill_rating
has_lifestyle = intrigue_lifestyle
}
}
duel = {
skill = learning
target = scope:struggle_3021_courtier
30 = { #it works
compare_modifier = {
value = scope:duel_value
multiplier = 0.5
}
desc = good_struggle_3021_courtier_desc
root = {
send_interface_toast = {
title = good_stone_research_title
left_icon = scope:struggle_3021_courtier
add_character_modifier = {
modifier = fp2_lightning_stones_poison_modifier
years = 5
}
}
}
}
70 = { #it doesnt work
compare_modifier = {
value = scope:duel_value
}
desc = bad_struggle_3021_courtier_desc
root = {
send_interface_toast = { #send a toast
title = bad_stone_research_title
desc = bad_struggle_3021_courtier_desc
left_icon = scope:struggle_3021_courtier
scope:struggle_3021_courtier = {
death = { death_reason = death_accident }
}
}
}
}
}
stress_impact = {
forgiving = medium_stress_impact_gain
honest = medium_stress_impact_gain
compassionate = medium_stress_impact_gain
zealous = medium_stress_impact_gain
}
ai_chance = {
base = 10
ai_value_modifier = {
ai_boldness = 0.2
ai_vengefulness = 1
}
}
}
option = { #god's punihsment!
name = fp2_struggle.3021.d
trigger = {
OR = {
has_trait = zealous
stress >= high_medium_stress
}
}
add_piety = minor_piety_gain
stress_impact = {
zealous = minor_stress_loss
}
}
option = { #lightning stones for the lightning stone god
name = fp2_struggle.3021.e
trigger = {
religion = { is_in_family = rf_pagan }
}
add_piety = medium_piety_gain
}
}