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 } }