namespace = fp2_struggle ###################################### # EL CID'S BIZARRE ADVENTURE SYSTEM # By Hugo Cortell ###################################### fp2_struggle.2045 = { hidden = yes trigger = { is_landless_adventurer = no } immediate = { if = { # Startup changes (give the cid his full nickname when he starts adventuring) limit = { NOT = { has_character_flag = has_already_begun_travelling } } remove_nickname = yes give_nickname = nick_the_cid_campeador add_character_flag = has_already_begun_travelling # Prevents yearly pulse from stacking up requests add_character_flag = blocked_from_leaving # Prevents el cid from vacationing in far away lands } if = { limit = { NOT = { has_character_flag = finished_el_cids_travels } } # In case several requests for the event are stacked up if = { # Being a guest is used as a boolean to check if the character is in an "evaluation" phase or already in a court. DO NOT USE THE GUEST SYSTEM FOR THIS. limit = { OR = { is_pool_guest = yes is_pool_character = yes is_foreign_court_guest = yes } } random_county_in_region = { # Naturally biased in favor of larger states limit = { exists = holder.liege } weight = { base = 1 modifier = { add = 10 holder.liege = { has_relation_friend = root } } modifier = { add = 30 holder.liege = { has_relation_best_friend = root } } compare_modifier = { value = holder.prestige_level multiplier = 1.5 } } region = world_europe_west_iberia # Locks el cid's forced travels to iberia holder.liege = { trigger_event = fp2_struggle.2051 } } } else = { if = { limit = { exists = liege } liege = { trigger_event = fp2_struggle.2050 } # This is you, you get the event, while el cid gets the "system event" } else = { employer = { trigger_event = fp2_struggle.2050 } # ditto } } } } } ############################################################# # Unease About El Sidi # By The Content Design Team (And scripted by Hugo Cortell) ############################################################# scripted_trigger el_cid_too_important_trigger = { OR = { any_extended_family_member = { this = scope:fp2_2050_el_cid } scope:fp2_2050_el_cid = { is_vassal_of = ROOT } has_relation_best_friend = scope:fp2_2050_el_cid is_spouse_of = scope:fp2_2050_el_cid } } fp2_struggle.2050 = { type = character_event title = { random_valid = { triggered_desc = { # Muslim Titles trigger = { religion = religion:islam_religion } desc = { random_valid = { desc = fp2_struggle.2050.t_muslim_one desc = fp2_struggle.2050.t_muslim_two desc = fp2_struggle.2050.t_muslim_three desc = fp2_struggle.2050.t_muslim_four } } } triggered_desc = { # Generic (Christian, nickname-like) Titles trigger = { NOT = { religion = religion:islam_religion } } desc = { random_valid = { desc = fp2_struggle.2050.t_generic_one desc = fp2_struggle.2050.t_generic_two desc = fp2_struggle.2050.t_generic_three desc = fp2_struggle.2050.t_generic_four } } } } } desc = { # See immediate for flags first_valid = { triggered_desc = { trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:generic_court } desc = fp2_struggle.2050.desc_court } triggered_desc = { trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:jelly_knights } desc = fp2_struggle.2050.desc_knights } triggered_desc = { trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:upset_nobles } desc = fp2_struggle.2050.desc_nobles } triggered_desc = { trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:faith_discomfort } desc = fp2_struggle.2050.desc_faith } desc = board_games.0001.desc.i_am_winning.trait.rowdy # Theoretically impossible to trigger, but if something breaks, players will see this and report it for sure } } theme = corruption override_background = { reference = throne_room } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:fp2_2050_el_cid animation = throne_room_two_handed_passive_1 } immediate = { character:107590 = { save_scope_as = fp2_2050_el_cid } random_list = { # Spin the wheel to decide who and why wishes ill on el cid 10 = { # Generic "the court thinks he is bad" save_scope_value_as = { name = fp2_2050_reason_for_kicking_out_el_cid value = flag:generic_court } } 10 = { # Your knights are all sore losers modifier = { add = 30 any_knight = { OR = { has_relation_rival = scope:fp2_2050_el_cid has_relation_nemesis = scope:fp2_2050_el_cid } } } save_scope_value_as = { name = fp2_2050_reason_for_kicking_out_el_cid value = flag:jelly_knights } } 10 = { # Nobles dislike upstart poor people modifier = { add = 30 any_vassal = { OR = { has_relation_rival = scope:fp2_2050_el_cid has_relation_nemesis = scope:fp2_2050_el_cid } } } save_scope_value_as = { name = fp2_2050_reason_for_kicking_out_el_cid value = flag:upset_nobles } } 10 = { # Generic faith concerns from your bishop save_scope_value_as = { name = fp2_2050_reason_for_kicking_out_el_cid value = flag:faith_discomfort } } } } option = { # Family, Friend or Vassal name = fp2_struggle.2050.a trigger = { el_cid_too_important_trigger = yes } hidden_effect = { scope:fp2_2050_el_cid = { add_character_flag = finished_el_cids_travels } # At this point we can imagine that this character has settled, this stops the cycle to prevent spam } custom_tooltip = fp2_struggle.2050.a.serve_tooltip send_interface_toast = { type = event_toast_effect_good title = fp2_struggle.2050.a.notif.t right_icon = scope:fp2_2050_el_cid reverse_add_opinion = { target = scope:fp2_2050_el_cid modifier = stood_by_me_opinion opinion = 10 years = 20 } } stress_impact = { fickle = minor_stress_impact_gain } ai_chance = { base = 1000 } } option = { # No, I stand by my knight and he can stay! name = fp2_struggle.2050.b trigger = { is_ai = no NOT = { scope:fp2_2050_el_cid = { is_vassal_of = ROOT } } } custom_tooltip = fp2_struggle.2050.a.serve_tooltip send_interface_toast = { type = event_toast_effect_good title = fp2_struggle.2050.a.notif.t right_icon = scope:fp2_2050_el_cid if = { limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:generic_court } add_character_modifier = { modifier = fp2_kept_accused_traitor_in_court_modifier years = 10 } } else_if = { limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:jelly_knights } add_character_modifier = { modifier = fp2_kept_op_knight_in_court_modifier years = 10 } } else_if = { limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:upset_nobles } add_character_modifier = { modifier = fp2_kept_upstart_knight_in_court_modifier years = 10 } } else_if = { limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:faith_discomfort } add_character_modifier = { modifier = fp2_kept_godless_mercenary_in_court_modifier years = 10 } } reverse_add_opinion = { target = scope:fp2_2050_el_cid modifier = stood_by_me_opinion opinion = 10 years = 20 } scope:fp2_2050_el_cid = { trigger_event = { id = fp2_struggle.2045 years = { 4 12 } } } } stress_impact = { fickle = minor_stress_impact_gain } } option = { # Okay, please do not give me malus name = fp2_struggle.2050.c trigger = { NOT = { scope:fp2_2050_el_cid = { is_vassal_of = ROOT } } } send_interface_toast = { type = event_toast_effect_bad title = fp2_struggle.2051.t right_icon = scope:fp2_2050_el_cid scope:fp2_2050_el_cid = { move_to_pool = yes trigger_event = { id = fp2_struggle.2045 days = { 1 4 } } } } stress_impact = { generous = minor_stress_impact_gain } ai_chance = { base = 1 } } option = { # Vanish el cid, even though he is your vassal (suggested by Max) name = fp2_struggle.2050.c trigger = { is_ai = no scope:fp2_2050_el_cid = { is_vassal_of = ROOT } } # The only reason to ever select this option is to gain those "repossessed" lands, but it is very mean. # It will give you tyranny, but it won't directly anger your vassals as they are *narratively* the reason why this is happening. # The primary reason this exists is to prevent ludonarrative dissonance with the event's description. It is less resource intensive than making new loc. # We set the tyranny and opinion loss based on how much was lost (Placed outside the toast to prevent clutter) add_tyranny = { value = medium_tyranny_gain multiply = scope:fp2_2050_el_cid.primary_title.tier } if = { limit = { can_set_relation_rival_trigger = { CHARACTER = scope:fp2_2050_el_cid } } set_relation_rival = scope:fp2_2050_el_cid } if = { # This is not out of order, it is WAD. If can_set_relation_rival_trigger fails, you just lose a friend but not gain a rival. limit = { has_relation_friend = scope:fp2_2050_el_cid } remove_relation_friend = scope:fp2_2050_el_cid } if = { limit = { scope:fp2_2050_el_cid.primary_title.tier < tier_kingdom } scope:fp2_2050_el_cid = { add_opinion = { modifier = betrayed_me_opinion target = root opinion = -100 } } } else = { scope:fp2_2050_el_cid = { add_opinion = { modifier = betrayed_me_opinion target = root opinion = -200 } } } create_title_and_vassal_change = { # This tells the engine to start paying closer attention to title changes (and not butt in) type = revoked save_scope_as = change } scope:fp2_2050_el_cid = { every_held_title = { change_title_holder = { holder = root change = scope:change } } } resolve_title_and_vassal_change = scope:change # Tells the engine that it is safe to go about its buisness with titles show_as_tooltip = { scope:fp2_2050_el_cid = { move_to_pool = yes } } # Just jomini things~ hidden_effect = { # Prevents rendering of toast on option highlight send_interface_toast = { type = event_toast_effect_bad title = fp2_struggle.2051.t right_icon = scope:fp2_2050_el_cid show_as_tooltip = { # Condensed version to fit into the toast if = { limit = { scope:fp2_2050_el_cid.primary_title.tier > tier_duchy } scope:fp2_2050_el_cid = { if = { limit = { has_relation_nemesis = ROOT } set_relation_nemesis = ROOT } add_opinion = { modifier = betrayed_me_opinion target = root opinion = -200 } } } else = { if = { limit = { has_relation_rival = ROOT } set_relation_rival = ROOT } add_opinion = { modifier = betrayed_me_opinion target = root opinion = -100 } } } # Standard stuff scope:fp2_2050_el_cid = { move_to_pool = yes trigger_event = { id = fp2_struggle.2045 days = { 1 4 } } } } } stress_impact = { # This kind of action comes with quite a bit of stress generous = minor_stress_impact_gain brave = medium_stress_impact_gain forgiving = major_stress_impact_gain gregarious = medium_stress_impact_gain honest = minor_stress_impact_gain humble = medium_stress_impact_gain just = major_stress_impact_gain trusting = medium_stress_impact_gain compassionate = major_stress_impact_gain august = minor_stress_impact_gain gallant = medium_stress_impact_gain } } } ############################################################ # El Cid Arrives At Your Court # By The Content Design Team (And scripted by Hugo Cortell) ############################################################ fp2_struggle.2051 = { type = character_event title = fp2_struggle.2051.t desc = fp2_struggle.2051.desc theme = vassal override_background = { reference = throne_room } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:fp2_2050_el_cid animation = throne_room_one_handed_passive_1 } immediate = { character:107590 = { save_scope_as = fp2_2050_el_cid } add_visiting_courtier = scope:fp2_2050_el_cid } option = { # You will enjoy a high position at my court! name = fp2_struggle.2051.a send_interface_toast = { type = event_toast_effect_good title = fp2_struggle.2050.a.notif.t right_icon = scope:fp2_2050_el_cid pay_treasury_or_gold = { target = scope:fp2_2050_el_cid value = medium_treasury_or_gold_value } add_courtier = scope:fp2_2050_el_cid } if = { limit = { exists = cp:councillor_marshal } fire_councillor = cp:councillor_marshal } assign_councillor_type = { type = councillor_marshal target = scope:fp2_2050_el_cid } scope:fp2_2050_el_cid = { add_opinion = { target = root modifier = hired_me_opinion opinion = 20 } add_opinion = { target = root modifier = given_luxuries_opinion opinion = 10 } trigger_event = { id = fp2_struggle.2045 years = { 4 12 } } } trigger = { is_ai = no } } option = { # Welcome or whatever name = fp2_struggle.2051.b send_interface_toast = { type = event_toast_effect_good title = fp2_struggle.2050.a.notif.t right_icon = scope:fp2_2050_el_cid pay_treasury_or_gold = { target = scope:fp2_2050_el_cid value = minor_treasury_or_gold_value } add_courtier = scope:fp2_2050_el_cid } scope:fp2_2050_el_cid = { trigger_event = { id = fp2_struggle.2045 years = { 4 10 } } } ai_chance = { base = 65 } } option = { # Away with you vile beggar! name = fp2_struggle.2051.c send_interface_toast = { type = event_toast_effect_bad title = fp2_struggle.2051.t right_icon = scope:fp2_2050_el_cid custom_tooltip = fp2_struggle.2050.c.notif scope:fp2_2050_el_cid = { move_to_pool = yes trigger_event = { id = fp2_struggle.2045 days = { 1 4 } } } } ai_chance = { base = 45 } } }