namespace = fp1_other_decisions ################################################## # #Religious Events # 0001 - 0020 Gruesome Festivals - hold a mighty sacrifice dedicated to your divinities. # 0021 - 0040 GF Consequences - events resulting from GFs, e.g., the world freaking out at the sacrifice of a HoF. # 0041 - 0060 Unreserved # 0061 - 0080 GF Maintenance Events - invalidation events & Chief Sacrifice resets. # # 0101 - 0120 Stele Setup Events - select type & location. ################################################## ################################################## # Gruesome Festivals # by Ewan Cowhig Croft # 0001 - 0020 ################################################## # Human Sacrifice will be referred to as HumSac throughout. I make no apologies for whatever you envision as a result. # Clean up declining guest list: we track this separately, since we don't always want to fire it at the same time. scripted_effect gruesome_sacrifices_clean_up_declining_guests_effect = { #Shouldn't ever need to be more complicated than this, but might be. clear_variable_list = gf_guests_rejecting_invite_list } scripted_trigger sacrifice_method_hang_n_fang_trigger = { scope:activity.var:gf_faith = { religion = religion:germanic_religion has_doctrine_parameter = cannibalism_legal } } scripted_trigger sacrifice_method_eat_em_trigger = { scope:activity.var:gf_faith = { has_doctrine_parameter = cannibalism_legal } } scripted_trigger sacrifice_method_hang_em_trigger = { scope:activity.var:gf_faith.religion = religion:germanic_religion } scripted_trigger gruesome_festivals_available_impressable_nobles = { highest_held_title_tier >= tier_county # Exempt priests, who have their own option. NOT = { government_has_flag = government_is_theocracy } } scripted_trigger gruesome_festivals_available_impressable_clergy = { highest_held_title_tier >= tier_county government_has_flag = government_is_theocracy } scripted_trigger dislikes_humsac_trigger = { NOR = { has_doctrine_parameter = flower_war_cb_active has_doctrine_parameter = human_sacrifice_active has_doctrine_parameter = gruesome_festivals_active } } scripted_effect gruesome_festivals_blotter_opinion_gain_of_guests_effect = { reverse_add_opinion = { modifier = pleased_opinion target = scope:blotter opinion = 30 } } # Let the sacrifice begin! fp1_other_decisions.0003 = { type = activity_event title = fp1_other_decisions.0003.t desc = { # How big is the whole affair? first_valid = { triggered_desc = { trigger = { scope:activity.var:blot_scale = flag:small } desc = fp1_other_decisions.0003.desc.intro.small } triggered_desc = { trigger = { scope:activity.var:blot_scale = flag:medium } desc = fp1_other_decisions.0003.desc.intro.medium } triggered_desc = { trigger = { scope:activity.var:blot_scale = flag:large } desc = fp1_other_decisions.0003.desc.intro.large } } # What's on the menu? first_valid = { # Adequate animal sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:animals_regular } desc = fp1_other_decisions.0003.desc.animals.regular } # Magnificent animal sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:animals_magnificent } desc = fp1_other_decisions.0003.desc.animals.magnificent } # Adequate HumSac, sans chief sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:humans_regular NOT = { exists = scope:unlucky_guest } } desc = fp1_other_decisions.0003.desc.humans.regular.sans_chief } # Magnificent HumSac, sans chief sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:humans_magnificent NOT = { exists = scope:unlucky_guest } } desc = fp1_other_decisions.0003.desc.humans.magnificent.sans_chief } # Adequate HumSac, plus chief sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:humans_regular exists = scope:unlucky_guest } desc = fp1_other_decisions.0003.desc.humans.regular.plus_chief } # Magnificent HumSac, plus chief sacrifice. triggered_desc = { trigger = { scope:activity.var:blot_sacrifice = flag:humans_magnificent exists = scope:unlucky_guest } desc = fp1_other_decisions.0003.desc.humans.magnificent.plus_chief } } # How is it getting to the menu? ## Named sacrifice is present. triggered_desc = { trigger = { exists = scope:unlucky_guest } desc = { first_valid = { # Norse pagans cannibals hang their sacrifices, *then* eat them. triggered_desc = { trigger = { sacrifice_method_hang_n_fang_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.named.norse_cannibals } # Cannibals execute them, then eat them them. triggered_desc = { trigger = { sacrifice_method_eat_em_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.named.cannibals } # Norse pagans hang their sacrifices. triggered_desc = { trigger = { sacrifice_method_hang_em_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.named.norse } # Fallback: disembowl the sacrifice. desc = fp1_other_decisions.0003.desc.sacrifice.named.fallback } } } ## Humans are present. triggered_desc = { trigger = { NOT = { exists = scope:unlucky_guest } OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } } desc = { first_valid = { # Norse pagans cannibals hang their sacrifices, *then* eat them. triggered_desc = { trigger = { sacrifice_method_hang_n_fang_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.unnamed.norse_cannibals } # Cannibals execute them, then eat them them. triggered_desc = { trigger = { sacrifice_method_eat_em_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.unnamed.cannibals } # Norse pagans hang their sacrifices. triggered_desc = { trigger = { sacrifice_method_hang_em_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.unnamed.norse } # Fallback: disembowl the sacrifice. desc = fp1_other_decisions.0003.desc.sacrifice.unnamed.fallback } } } ## Only animal sacrifices. triggered_desc = { trigger = { OR = { scope:activity.var:blot_sacrifice = flag:animals_regular scope:activity.var:blot_sacrifice = flag:animals_magnificent } } desc = { first_valid = { # No special Norse-cannibal or cannibal variants for animals, as they're just animals. # Norse pagans hang their sacrifices. triggered_desc = { trigger = { sacrifice_method_hang_em_trigger = yes } desc = fp1_other_decisions.0003.desc.sacrifice.animal.norse } # Fallback: disembowl the sacrifice. desc = fp1_other_decisions.0003.desc.sacrifice.animal.fallback } } } # And what's your basic take on affairs? first_valid = { # If you don't share the faith, then this is a political ceremony. triggered_desc = { trigger = { faith != scope:gf_faith } desc = fp1_other_decisions.0003.desc.outro.political } # Otherwise, you're faithful, and it's not. desc = fp1_other_decisions.0003.desc.outro.faithful } } theme = party left_portrait = { character = scope:blotter animation = personality_rational } right_portrait = { character = scope:unlucky_guest animation = fear } override_background = { reference = temple } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Generic can-continue check. #gruesome_sacrifices_grand_blot_can_continue_trigger = yes # Already-started can-continue check. #gruesome_sacrifices_grand_blot_in_progress_trigger = yes } on_trigger_fail = { # # If you have a prisoner marked for sacrifice, relieve them. # every_prisoner = { # limit = { has_character_modifier = gruesome_festivals_designated_sacrifice_fp1_modifier } # designate_gruesome_festivals_sacrifice_modifier_removed_effect = { DESIGNATOR = scope:blotter } # } } immediate = { involved_activity = { save_scope_as = activity } # Get the party (audibly) started. play_music_cue = "mx_cue_banquet" # Is it somebody specific's death day? if = { limit = { # We don't actually need to check these scopes, but it's a convenient early out if your dungeon is huge for some reason. OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } any_prisoner = { has_character_modifier = gruesome_festivals_designated_sacrifice_fp1_modifier } } # Ahhh, it is! Nab 'em for the murderising & calculate piety to be gained. random_prisoner = { limit = { has_character_modifier = gruesome_festivals_designated_sacrifice_fp1_modifier } # Once for the portrait. save_scope_as = unlucky_guest # And once for loc. save_scope_as = sacrifice #To give accurate death notifications add_character_flag = { flag = is_currently_being_sacrificed days = 1 } } } # If someone is dying but we don't care who, generate a dummy sacrifice. else_if = { limit = { NOT = { exists = scope:unlucky_guest } OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } } random_dummy_gender_soldier_effect = { SCOPE_NAME = sacrifice } } # Take care of happy subjects. ## Build a list of affected happy subjects. ### Small first. if = { limit = { scope:activity.var:blot_scale = flag:small } # Nab all courtiers & guests. every_courtier_or_guest = { limit = { faith = scope:gf_faith } add_to_list = happified_character_subjects_list } } ### Then try a medium list. else_if = { limit = { scope:activity.var:blot_scale = flag:medium } # Nab all courtiers & guests. every_courtier_or_guest = { limit = { faith = scope:gf_faith } add_to_list = happified_character_subjects_list } # Also nab all barons in your domain. every_vassal = { limit = { highest_held_title_tier = tier_barony faith = scope:gf_faith } add_to_list = happified_character_subjects_list } # Nab your domain titles. every_held_title = { title_tier = county limit = { is_landless_type_title = no faith = scope:gf_faith } add_to_list = happified_title_subjects_list } } ### Finally, try a large list. else_if = { limit = { scope:activity.var:blot_scale = flag:large } # Nab all courtiers & guests. every_courtier_or_guest = { limit = { faith = scope:gf_faith } add_to_list = happified_character_subjects_list } # Also nab all vassals and sub-vassals. every_vassal_or_below = { limit = { faith = scope:gf_faith } add_to_list = happified_character_subjects_list } # Nab all sub-realm titles. every_sub_realm_county = { limit = { faith = scope:gf_faith } add_to_list = happified_title_subjects_list } } ### Aaaand remove anyone who spurned the invitation explicitly. if = { limit = { has_variable_list = gf_guests_rejecting_invite_list any_in_list = { variable = gf_guests_rejecting_invite_list count >= 1 # Account for people who might have converted in the meanwhilst. faith = scope:gf_faith } } every_in_list = { variable = gf_guests_rejecting_invite_list # TIT-25457 remove_from_list = happified_title_subjects_list } } # Set up var:gf_faith for custom loc to work; not used in strictly every permutation, but doesn't really need an if gate on it. set_variable = { name = gf_faith value = scope:gf_faith } scope:activity = { add_activity_log_entry = { key = gruesome_festival_immediate_log score = 1000 show_in_conclusion = yes character = root # Piety based on value calculated from the selected activity option activity_host = { if = { limit = { exists = var:gf_piety_value } add_piety = var:gf_piety_value remove_variable = gf_piety_value } } ## Big RIP, scope:unlucky_guest. if = { limit = { exists = scope:unlucky_guest } # Sort opinions and kinslaying. add_kinslayer_trait_or_nothing_effect = { VICTIM = scope:unlucky_guest} execute_opinion_effect = { VICTIM = scope:unlucky_guest EXECUTIONER = scope:blotter } # Are you HumSac'ing the HoF of a faith that doesn't practice HumSac? ## We hide this, since it's too late for you to do anything about now and it's more fun/terrifying to find out about it *after* the sacrifice. hidden_effect = { humsacd_a_hof_effect = { SACRIFICER = scope:blotter SACRIFICED_HOF = scope:unlucky_guest } } ## And are you actually humsac'ing your *OWN* HoF? if = { limit = { scope:blotter.faith.religious_head = scope:unlucky_guest } # Inform players that they're an abysmal, abysmal faith adherent. every_player = { limit = { this != scope:blotter faith = scope:unlucky_guest.faith } trigger_event = fp1_other_decisions.0023 } # Update scope:blotter's HumSac'd HoFs kill tally manually, since we're not going through the usual effect. add_to_variable_list = { name = humsacd_hofs target = scope:unlucky_guest.faith } # And tell scope:blotter they dun goofed. trigger_event = { id = fp1_other_decisions.0024 # We give it a day's delay, since they _might_ have taken a conversion option in the event itself, in which case the follow-up event is invalid. days = 1 } } # How exactly do they die? scope:unlucky_guest = { # Cannibalist Germanic pagans will hang them, then eat them. trigger_event = fp1_other_decisions.1000 if = { limit = { sacrifice_method_hang_n_fang_trigger = yes } death = { killer = scope:blotter death_reason = death_ritually_hung_then_eaten } } # All other Germanic pagans will hang them. else_if = { limit = { sacrifice_method_eat_em_trigger = yes } death = { killer = scope:blotter death_reason = death_ritually_eaten } } # All other cannibals will just eat them. else_if = { limit = { sacrifice_method_hang_em_trigger = yes } death = { killer = scope:blotter death_reason = death_ritually_hung } } # Fallback deaths go here; variants should be added above this point. else = { death = { killer = scope:blotter death_reason = death_sacrificed_to_gods } } } } ## Naturally, if appropriate, you become a cannibal. activity_host = { if = { limit = { OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } scope:gf_faith = { has_doctrine_parameter = cannibalism_legal } NOT = { has_trait = cannibal } } add_trait = cannibal } } ## Happify them appropriately. ### First we do characters. if = { limit = { any_in_list = { list = happified_character_subjects_list count >= 1 } } every_in_list = { list = happified_character_subjects_list custom = fp1_other_decisions.0003.happy_characters_list add_opinion = { target = scope:blotter modifier = fp1_held_grand_sacrifice_opinion } # And gain some opinion back from scope:blotter for turning up. hidden_effect = { gruesome_festivals_blotter_opinion_gain_of_guests_effect = yes } } } ### Then we do titles. if = { limit = { any_in_list = { list = happified_title_subjects_list count >= 1 } } every_in_list = { list = happified_title_subjects_list custom = fp1_other_decisions.0003.happy_titles_list add_county_modifier = { modifier = held_grand_sacrifice_fp1_modifier years = 7 } } } # Take care of unhappy subjects. ## Is building a list of unhappy subjects necessary? activity_host = { if = { limit = { OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } } # If so, then we build one. ## Grabbing all sub-realm characters who dislike HumSac. every_courtier_or_guest = { limit = { faith = { dislikes_humsac_trigger = yes } } add_to_list = unhappified_character_subjects_list } every_vassal_or_below = { limit = { faith = { dislikes_humsac_trigger = yes } } add_to_list = unhappified_character_subjects_list } ## Then all sub-realm counties. every_sub_realm_county = { limit = { faith = { dislikes_humsac_trigger = yes } } add_to_list = unhappified_title_subjects_list } # Before unhappifying them to taste. ## Again, first characters. if = { limit = { any_in_list = { list = unhappified_character_subjects_list count >= 1 } } every_in_list = { list = unhappified_character_subjects_list custom = fp1_other_decisions.0003.unhappy_characters_list add_opinion = { target = scope:blotter modifier = fp1_held_human_sacrifice_opinion } } } ## Then counties. if = { limit = { any_in_list = { list = unhappified_title_subjects_list count >= 1 } } every_in_list = { list = unhappified_title_subjects_list custom = fp1_other_decisions.0003.unhappy_titles_list add_county_modifier = { modifier = held_human_sacrifice_fp1_modifier years = 7 } } # Flag this character as having upset people. set_variable = { name = offended_counties_with_humsac value = yes years = 7 } } } } } } # Cannibalism cleanup. ## Specifically, we want every ranking guest who might have gotten some human meat reserved to become a cannibal. We do this later in the block so that we've already built a solid list of invited vassals. if = { limit = { OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } scope:gf_faith = { has_doctrine_parameter = cannibalism_legal } } hidden_effect = { every_in_list = { list = happified_title_subjects_list limit = { # Filter out lowborns. exists = dynasty NOT = { has_trait = cannibal } } send_interface_toast = { title = fp1_other_decisions.0003.attendee_became_cannibal left_icon = scope:blotter add_trait = cannibal } } } } } # Faithful: focus on the faith. option = { name = fp1_other_decisions.0003.a # Only available if you follow the scope:gf_faith & have priests to impress at all. trigger = { faith = { this = scope:gf_faith has_doctrine = doctrine_theocracy_temporal } } scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_faith_option_log score = 900 show_in_conclusion = yes character = root activity_host = { # Your commitment to ritual earns you opinion with the priestly classes. if = { limit = { any_learning_councillor = { exists = this } } every_learning_councillor = { add_opinion = { target = scope:blotter modifier = pleased_opinion opinion = 50 } } } if = { limit = { any_in_list = { list = happified_character_subjects_list gruesome_festivals_available_impressable_clergy = yes } } every_in_list = { list = happified_character_subjects_list custom = fp1_other_decisions.0003.b.clergy_list limit = { gruesome_festivals_available_impressable_clergy = yes } add_opinion = { target = scope:blotter modifier = pleased_opinion opinion = 40 } } } } } } stress_impact = { zealous = major_stress_impact_loss cynical = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_sociability = -0.25 } modifier = { # Weight up for stress. add = 30 has_trait = zealous } modifier = { # Weight down for stress. add = 10 has_trait = cynical } } } # Faithful: focus on the nobility. option = { name = fp1_other_decisions.0003.b # Must have actually got some other landed nobility coming, and be of the faith and able to take part fully. trigger = { faith = scope:gf_faith any_in_list = { list = happified_character_subjects_list gruesome_festivals_available_impressable_nobles = yes } } scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_nobility_option_log score = 900 show_in_conclusion = yes character = root # The nobles appreciate the extra attention you grace them with. every_in_list = { list = happified_character_subjects_list custom = fp1_other_decisions.0003.b.nobility_list limit = { gruesome_festivals_available_impressable_nobles = yes } add_opinion = { target = scope:blotter modifier = pleased_opinion opinion = 20 } } } } stress_impact = { arrogant = medium_stress_impact_loss humble = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_energy = -0.25 # Just because there's a lot fewer nobles than peasants. } modifier = { # Weight up for stress. add = 20 has_trait = arrogant } modifier = { # Weight down for stress. add = -20 has_trait = humble } } } # Faithful: focus on the commoners. option = { name = fp1_other_decisions.0003.c # Must be of the faith and able to take part fully. trigger = { faith = scope:gf_faith } scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_commoners_option_log score = 900 show_in_conclusion = yes character = root # The commoners appreciate the extra attention. every_in_list = { list = happified_title_subjects_list custom = fp1_other_decisions.0003.happy_titles_list remove_county_modifier = held_grand_sacrifice_fp1_modifier add_county_modifier = { modifier = commoners_grand_sacrifice_fp1_modifier years = 7 } } } } stress_impact = { humble = major_stress_impact_loss arrogant = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_energy = 0.25 # Just because there's a lot fewer nobles than peasants. } modifier = { # Weight up for stress. add = 30 has_trait = humble } modifier = { # Weight down for stress. add = -30 has_trait = arrogant } } } # Political: engage no more than is necessary. option = { name = fp1_other_decisions.0003.d # Must be an outsider. trigger = { faith != scope:gf_faith } scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_nobility_option_log score = 900 show_in_conclusion = yes character = root activity_host = { # You console yourself with a minor moral victory. add_stress = medium_stress_loss } } } stress_impact = { arrogant = major_stress_impact_loss humble = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_zeal = 0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 30 has_trait = arrogant } modifier = { # Weight down for stress. add = -30 has_trait = humble } } } # Political: engage wholeheartedly. option = { name = fp1_other_decisions.0003.e # Must be an outsider. trigger = { faith != scope:gf_faith } scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_nobility_option_log score = 900 show_in_conclusion = yes character = root # The commoners appreciate the extra attention. every_in_list = { list = happified_title_subjects_list custom = fp1_other_decisions.0003.happy_titles_list remove_county_modifier = held_grand_sacrifice_fp1_modifier add_county_modifier = { modifier = commoners_grand_sacrifice_fp1_modifier years = 10 } } } } stress_impact = { humble = major_stress_impact_loss arrogant = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_zeal = -0.5 } modifier = { # Weight up for stress. add = 30 has_trait = humble } modifier = { # Weight down for stress. add = -30 has_trait = arrogant } } } # Political: you know, they make some good points... option = { name = fp1_other_decisions.0003.f # Must be an outsider. trigger = { faith != scope:gf_faith # We only allow this under certain circumstances. OR = { # The vast majority of your sub-realm follows their faith. any_sub_realm_county = { percent >= 0.75 faith = scope:gf_faith } # Their fervour is high, your fervour is low. ## Normal people require a very stark difference. AND = { faith = { fervor <= 10 } scope:gf_faith = { fervor >= 90 } } ## Cynics are a bit less fussed. AND = { faith = { fervor <= 25 } scope:gf_faith = { fervor >= 75} } } } # First, we save your old faith for reference. faith = { save_scope_as = old_faith } # Next, we convert your faith. set_character_faith_with_conversion = scope:gf_faith scope:activity = { add_activity_log_entry = { key = gruesome_festival_faithful_nobility_option_log score = 900 show_in_conclusion = yes character = root activity_host = { # Then charge piety for the transition. ## A sensible fee if they're reformed or you're both unreformed. if = { limit = { OR = { NOT = { scope:gf_faith = { has_doctrine_parameter = unreformed } } AND = { scope:old_faith = { has_doctrine_parameter = unreformed } scope:gf_faith = { has_doctrine_parameter = unreformed } } } } add_piety = -500 } ## A reasonable, though still extremely high, fee otherwise, as then you're reformed & they're unreformed. else = { add_piety = -2000 } # Finally, you get a nickname. if = { limit = { OR = { has_bad_nickname = yes has_any_nickname = no } } # Converting within your religion, you're a heretic. if = { limit = { scope:old_faith.religion = scope:gf_faith.religion } give_nickname = nick_the_heretic } # Converting outside of your religious family, you're a heathen. else_if = { limit = { OR = { AND = { scope:old_faith.religion = { is_in_family = rf_eastern } NOT = { scope:gf_faith.religion = { is_in_family = rf_eastern } } } AND = { scope:old_faith.religion = { is_in_family = rf_pagan } NOT = { scope:gf_faith.religion = { is_in_family = rf_pagan } } } AND = { scope:old_faith.religion = { is_in_family = rf_abrahamic } NOT = { scope:gf_faith.religion = { is_in_family = rf_abrahamic } } } } } give_nickname = nick_the_heathen } # And otherwise, you're an apostate. else = { give_nickname = nick_the_apostate } } } } } stress_impact = { trusting = medium_stress_impact_loss cynical = major_stress_impact_loss paranoid = medium_stress_impact_gain arrogant = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.25 ai_zeal = -1 } modifier = { # Weight up for stress. add = 20 has_trait = trusting } modifier = { # Weight up for stress. add = 30 has_trait = cynical } modifier = { # Weight down for stress. add = -20 has_trait = paranoid } modifier = { # Weight down for stress. add = -30 has_trait = arrogant } } } after = { # Take care of anyone who insulted you by not showing up. trigger_event = { id = fp1_other_decisions.0012 months = 3 } } } scripted_trigger gruesome_festivals_will_gain_cannibal_trait_trigger = { # Is human flesh potentially on the menu? scope:activity.var:gf_faith = { has_doctrine_parameter = cannibalism_legal } # Are you already a cannibal? NOT = { has_trait = cannibal } # Is HumSac taking place to give meat to serve? OR = { scope:activity.var:blot_sacrifice = flag:humans_regular scope:activity.var:blot_sacrifice = flag:humans_magnificent } } scripted_effect gruesome_festivals_turn_down_invitation_effect = { # Add this character to scope:blotter's list of non-attendees. save_temporary_scope_as = current_rejecter scope:blotter = { add_to_variable_list = { name = gf_guests_rejecting_invite_list target = scope:current_rejecter } } #This removes the character from the activity and reroutes them homeward root.current_travel_plan = { if = { limit = { can_cancel = yes } cancel_travel_plan = yes } } } # Vassal: chance to decline invitation. fp1_other_decisions.0011 = { type = character_event title = fp1_other_decisions.0011.t desc = { desc = fp1_other_decisions.0011.desc.intro first_valid = { triggered_desc = { trigger = { scope:activity.var:gf_faith = { has_doctrine_parameter = cannibalism_legal } } desc = fp1_other_decisions.0011.desc.cannibal_blot } desc = fp1_other_decisions.0011.desc.fallback } desc = fp1_other_decisions.0011.desc.outro } theme = party left_portrait = { character = scope:blotter animation = personality_honorable } override_background = { reference = throne_room } trigger = { # DLC check. has_fp1_dlc_trigger = yes } # We divide our options between gaining the cannibal trait and not gaining the cannibal trait. ## If gaining the cannibal trait, we make a bigger deal about attending, since we don't want the player to accidentally become a cannibal because they weren't paying attention. ## If not gaining the cannibal trait (because no human flesh is being served or because you're already a cannibal), our options are a bit more varied. # Non-Cannibal Gain: go graciously. option = { name = fp1_other_decisions.0011.a trigger = { gruesome_festivals_will_gain_cannibal_trait_trigger = no } # Get some opinion with scope:blotter for turning up. show_as_tooltip = { gruesome_festivals_blotter_opinion_gain_of_guests_effect = yes } stress_impact = { forgiving = minor_stress_impact_loss gregarious = medium_stress_impact_loss vengeful = minor_stress_impact_gain shy = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 20 has_trait = gregarious } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -20 has_trait = shy } } } # Non-Cannibal Gain: tell 'em to get stuffed. option = { name = fp1_other_decisions.0011.b trigger = { gruesome_festivals_will_gain_cannibal_trait_trigger = no } # Scope:blotter will doubtless notice you failed to turn up. custom_tooltip = fp1_other_decisions.0011.b.tt gruesome_festivals_turn_down_invitation_effect = yes stress_impact = { vengeful = minor_stress_impact_loss shy = medium_stress_impact_loss forgiving = minor_stress_impact_gain gregarious = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 20 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = gregarious } } } # Will Become Cannibal: go, and enjoy the HumSac to the fullest. option = { name = fp1_other_decisions.0011.c trigger = { gruesome_festivals_will_gain_cannibal_trait_trigger = yes } # You'll eventually gain the cannibal trait, too. show_as_tooltip = { add_trait = cannibal } # Get some opinion with scope:blotter for turning up. show_as_tooltip = { gruesome_festivals_blotter_opinion_gain_of_guests_effect = yes } stress_impact = { forgiving = minor_stress_impact_loss gregarious = medium_stress_impact_loss sadistic = medium_stress_impact_loss vengeful = minor_stress_impact_gain shy = medium_stress_impact_gain compassionate = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_vengefulness = -0.5 ai_compassion = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 20 has_trait = gregarious } modifier = { # Weight up for stress. add = 20 has_trait = sadistic } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -20 has_trait = shy } modifier = { # Weight down for stress. add = -20 has_trait = compassionate } } } # Will Become Cannibal: go, but refuse to partake in human flesh. option = { name = fp1_other_decisions.0011.d trigger = { gruesome_festivals_will_gain_cannibal_trait_trigger = yes } # Costs you a bit of extra piety, but you do opt out of the cannibal option. add_piety = medium_piety_loss # Get some opinion with scope:blotter for turning up. show_as_tooltip = { gruesome_festivals_blotter_opinion_gain_of_guests_effect = yes } stress_impact = { forgiving = minor_stress_impact_loss gregarious = medium_stress_impact_loss compassionate = medium_stress_impact_loss vengeful = minor_stress_impact_gain shy = medium_stress_impact_gain sadistic = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_sociability = 0.5 ai_compassion = 0.5 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight up for stress. add = 20 has_trait = gregarious } modifier = { # Weight up for stress. add = 20 has_trait = compassionate } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } modifier = { # Weight down for stress. add = -20 has_trait = shy } modifier = { # Weight down for stress. add = -20 has_trait = sadistic } } } # Will Become Cannibal: not a chance in GetFaith.GetNegativeAfterLife! option = { name = fp1_other_decisions.0011.e trigger = { gruesome_festivals_will_gain_cannibal_trait_trigger = yes } # Costs you a bit of extra piety, but you do opt out of the cannibal option. add_piety = medium_piety_loss # Scope:blotter will doubtless notice you failed to turn up. custom_tooltip = fp1_other_decisions.0011.e.tt gruesome_festivals_turn_down_invitation_effect = yes stress_impact = { vengeful = minor_stress_impact_loss shy = medium_stress_impact_loss forgiving = minor_stress_impact_gain gregarious = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_sociability = -0.5 } modifier = { # Weight up for stress. add = 10 has_trait = vengeful } modifier = { # Weight up for stress. add = 20 has_trait = shy } modifier = { # Weight down for stress. add = -10 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = gregarious } } } } # Blotter: at least one vassal declined your invitation. fp1_other_decisions.0012 = { type = character_event title = fp1_other_decisions.0012.t desc = { desc = fp1_other_decisions.0012.desc.intro first_valid = { triggered_desc = { trigger = { exists= scope:decliner_2 } desc = fp1_other_decisions.0012.desc.multiple_decliners } desc = fp1_other_decisions.0012.desc.single_decliner } desc = fp1_other_decisions.0012.desc.outro } theme = party left_portrait = { character = scope:decliner_1 animation = personality_honorable } right_portrait = { character = scope:decliner_2 animation = personality_honorable } lower_left_portrait = { character = scope:decliner_3 } lower_center_portrait = { character = scope:decliner_4 } lower_right_portrait = { character = scope:decliner_5 } override_background = { reference = throne_room } trigger = { # DLC check. has_fp1_dlc_trigger = yes # Do you have the appropriate variable list, and is there anyone actually in it? has_variable_list = gf_guests_rejecting_invite_list any_in_list = { variable = gf_guests_rejecting_invite_list is_alive = yes is_imprisoned = no count >= 1 } } immediate = { # Work out which of our decliners is the worst and why. ordered_in_list = { variable = gf_guests_rejecting_invite_list max = gruesome_festival_gf_guests_rejecting_invite_list_max_value order_by = { value = 0 # Weight up players a little. if = { limit = { is_ai = no } add = 10 } # Then weight up by rank. ## Kings. if = { limit = { highest_held_title_tier >= tier_kingdom } add = 25 } ## Dukes. if = { limit = { highest_held_title_tier = tier_duchy } add = 10 } # And add a little for every held county. every_held_title = { title_tier = county add = 1 } #If they somehow die or are imprisoned before this event if = { limit = { OR = { is_alive = no is_imprisoned = yes } } multiply = 0 } } if = { limit = { NOT = { exists = scope:decliner_1 } } save_scope_as = decliner_1 } else_if = { limit = { NOT = { this = scope:decliner_1 exists = scope:decliner_2 } } save_scope_as = decliner_2 } else_if = { limit = { NOT = { this = scope:decliner_1 this = scope:decliner_2 exists = scope:decliner_3 } } save_scope_as = decliner_3 } else_if = { limit = { NOT = { this = scope:decliner_1 this = scope:decliner_2 this = scope:decliner_3 exists = scope:decliner_4 } } save_scope_as = decliner_4 } else_if = { limit = { NOT = { this = scope:decliner_1 this = scope:decliner_2 this = scope:decliner_3 this = scope:decliner_4 exists = scope:decliner_5 } } save_scope_as = decliner_5 } } # Add them to a list for easy general management if there's more than one. scope:decliner_1 = { add_to_list = decliners_list } if = { limit = { exists = scope:decliner_2 } add_to_list = decliners_list } if = { limit = { exists = scope:decliner_3 } add_to_list = decliners_list } if = { limit = { exists = scope:decliner_4 } add_to_list = decliners_list } if = { limit = { exists = scope:decliner_5 } add_to_list = decliners_list } # Clean up the variable list. gruesome_sacrifices_clean_up_declining_guests_effect = yes } # Only the arch-offender annoys me! option = { name = fp1_other_decisions.0012.a # Inform scope:decliner_1. hidden_effect = { scope:decliner_1 = { send_interface_toast = { title = fp1_other_decisions.0012.a.decliner_toast.t left_icon = scope:blotter show_as_tooltip = { progress_towards_rival_effect = { REASON = rival_blotter_declined CHARACTER = scope:blotter OPINION = -30 } } } } } # Then actual rivalry/opinion loss. progress_towards_rival_effect = { REASON = rival_blotter_declined CHARACTER = scope:decliner_1 OPINION = -30 } stress_impact = { forgiving = minor_stress_impact_loss vengeful = minor_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.5 ai_rationality = -0.25 } modifier = { # Weight up for stress. add = 10 has_trait = forgiving } modifier = { # Weight down for stress. add = -10 has_trait = vengeful } } } # Damn and blast the whole lot of them! option = { name = fp1_other_decisions.0012.b # Only available if more than one of them turned you down. trigger = { exists = scope:decliner_2 } # Inform the decliners. hidden_effect = { every_in_list = { list = decliners_list send_interface_toast = { title = fp1_other_decisions.0012.a.decliner_toast.t left_icon = scope:blotter show_as_tooltip = { progress_towards_rival_effect = { REASON = rival_blotter_declined CHARACTER = scope:blotter OPINION = -30 } } } } } # Then actual rivalry/opinion loss. every_in_list = { list = decliners_list limit = { this != scope:blotter } custom = fp1_other_decisions.0012.b.all_decliners_list progress_towards_rival_effect = { REASON = rival_blotter_declined CHARACTER = scope:blotter OPINION = -30 } } stress_impact = { forgiving = major_stress_impact_loss vengeful = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_vengefulness = 0.75 ai_rationality = -0.50 } modifier = { # Weight up for stress. add = 30 has_trait = forgiving } modifier = { # Weight down for stress. add = -30 has_trait = vengeful } } } # Bah, who cares about a bunch of no-shows? option = { name = { trigger = { NOT = { exists = scope:decliner_2 } } text = fp1_other_decisions.0012.c.singular } name = { trigger = { exists = scope:decliner_2 } text = fp1_other_decisions.0012.c.plural } # Carefreeeeeeee! add_stress = medium_stress_loss # But it was still a slight. add_prestige = minor_prestige_loss stress_impact = { forgiving = medium_stress_impact_loss vengeful = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_rationality = 0.25 ai_vengefulness = -0.5 } modifier = { # Weight up for stress. add = 20 has_trait = forgiving } modifier = { # Weight down for stress. add = -20 has_trait = vengeful } } } } ################################################## # GF Consequences # by Ewan Cowhig Croft # 0021 - 0040 ################################################## scripted_effect gruesome_festivals_martyred_a_hof_effect = { # We only show this here, actual effects are applied in the humsacd_a_hof_effect. show_as_tooltip = { $SACRIFICED_HOF$ = { faith = { change_fervor = { value = hof_humsacd_fervour_gain desc = fervor_gain_sacrficed_head_of_faith } } # Since the nickname is assigned elsewhere, if they've already gotten it, it's safe to show it again. if = { limit = { has_nickname = nick_the_martyr } give_nickname = nick_the_martyr } } } } # Your HoF was sacrificed. fp1_other_decisions.0021 = { type = character_event title = fp1_other_decisions.0021.t desc = { desc = fp1_other_decisions.0021.desc first_valid = { triggered_desc = { trigger = { faith = { has_doctrine_parameter = holy_wars_forbidden } } desc = fp1_other_decisions.0021.desc.disallows_holy_wars } desc = fp1_other_decisions.0021.desc.allows_holy_wars } } theme = skull left_portrait = { character = scope:sacrificer animation = personality_dishonorable } right_portrait = { character = scope:sacrificed_hof animation = fear } override_background = { reference = throne_room } immediate = { play_music_cue = "mx_cue_murder" gruesome_festivals_martyred_a_hof_effect = { SACRIFICED_HOF = scope:sacrificed_hof } } # What blasphemy is this?! option = { name = { trigger = { has_trait = zealous } text = fp1_other_decisions.0021.a.zealous } name = { trigger = { has_trait = cynical } text = fp1_other_decisions.0021.a.cynical } name = { trigger = { NOR = { has_trait = zealous has_trait = cynical } } text = fp1_other_decisions.0021.a.fallback } # Scope:hof_sacrificer has become immensely cheaper to holy war. if = { limit = { NOT = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } } } custom_tooltip = fp1_other_decisions.0021.cheaper_holy_wars.tt custom_tooltip = fp1_other_decisions.0021.easier_holy_wars.tt custom_tooltip = fp1_other_decisions.0021.ghw_target_preference.tt } ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } } # You sacrificed a HoF & people are pissed. fp1_other_decisions.0022 = { type = character_event title = fp1_other_decisions.0022.t desc = { desc = fp1_other_decisions.0022.desc first_valid = { triggered_desc = { trigger = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } } desc = fp1_other_decisions.0022.desc.disallows_holy_wars } desc = fp1_other_decisions.0022.desc.allows_holy_wars } } theme = skull left_portrait = { character = scope:sacrificer animation = personality_honorable } right_portrait = { character = scope:sacrificed_hof animation = fear } override_background = { reference = throne_room } trigger = { # We only want to get this event once per faith, since the effects don't really stack (except for fervour). NAND = { has_variable_list = humsacd_hofs_notified is_target_in_variable_list = { name = humsacd_hofs_notified target = scope:sacrificed_hof.faith } } } immediate = { play_music_cue = "mx_cue_murder" gruesome_festivals_martyred_a_hof_effect = { SACRIFICED_HOF = scope:sacrificed_hof } # Stop repeats of the same event per person per faith. add_to_variable_list = { name = humsacd_hofs_notified target = scope:sacrificed_hof.faith } scope:sacrificed_hof = { save_scope_as = unlucky_guest } } # Oops and/or meh. option = { name = { trigger = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } } text = fp1_other_decisions.0022.a.pacifists } name = { trigger = { NOT = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } } has_trait = craven } text = fp1_other_decisions.0022.a.craven } name = { trigger = { NOR = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } has_trait = craven } } text = fp1_other_decisions.0022.a.fallback } # Scope:hof_sacrificer has become immensely cheaper to holy war. if = { limit = { NOT = { scope:sacrificed_hof.faith = { has_doctrine_parameter = holy_wars_forbidden } } } custom_tooltip = fp1_other_decisions.0021.cheaper_holy_wars.tt custom_tooltip = fp1_other_decisions.0021.easier_holy_wars.tt custom_tooltip = fp1_other_decisions.0021.ghw_target_preference.tt } ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } } scripted_effect gruesome_festivals_own_faith_martyred_own_hof_effect = { add_piety_level = -5 add_character_modifier = { modifier = ultimate_blasphemer_modifier } if = { limit = { faith = { has_doctrine_parameter = excommunication_active } } # Add excommunication directly, since no one specific requested this. add_excommunication_actual_effect = yes } } # Your HoF was sacrificed by someone sharing your faith for the sake of someone else's faith. fp1_other_decisions.0023 = { type = character_event title = fp1_other_decisions.0023.t desc = { desc = fp1_other_decisions.0023.desc.intro first_valid = { triggered_desc = { trigger = { scope:unlucky_guest.faith = { has_doctrine_parameter = excommunication_active } } desc = fp1_other_decisions.0023.desc.has_excommunication } desc = fp1_other_decisions.0023.desc.does_not_have_excommunication } desc = fp1_other_decisions.0023.desc.outro } theme = skull left_portrait = { character = scope:blotter animation = paranoia } right_portrait = { character = scope:unlucky_guest animation = fear } override_background = { reference = throne_room } immediate = { gruesome_festivals_martyred_a_hof_effect = { SACRIFICED_HOF = scope:unlucky_guest } } # This is unforgiveable! option = { name = fp1_other_decisions.0023.a trigger = { NOT = { has_trait = cynical } } # Indicate that scope:blotter is about to get the slap-down. scope:blotter = { show_as_tooltip = { gruesome_festivals_own_faith_martyred_own_hof_effect = yes } } ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } # What kind of a person are they? option = { name = fp1_other_decisions.0023.b trigger = { has_trait = cynical } # Indicate that scope:blotter is about to get the slap-down. scope:blotter = { show_as_tooltip = { gruesome_festivals_own_faith_martyred_own_hof_effect = yes } } ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } } # You sacrificed your OWN HoF, despite not even believing in the HumSac faith. fp1_other_decisions.0024 = { type = character_event title = fp1_other_decisions.0024.t desc = { desc = fp1_other_decisions.0024.desc.intro first_valid = { triggered_desc = { trigger = { scope:unlucky_guest.faith = { has_doctrine_parameter = excommunication_active } } desc = fp1_other_decisions.0024.desc.has_excommunication } desc = fp1_other_decisions.0024.desc.does_not_have_excommunication } desc = fp1_other_decisions.0024.desc.outro } theme = skull left_portrait = { character = scope:blotter animation = paranoia } right_portrait = { character = scope:unlucky_guest animation = fear } override_background = { reference = throne_room } trigger = { # If you converted away, you're golden. scope:blotter.faith = scope:unlucky_guest.faith } immediate = { gruesome_festivals_martyred_a_hof_effect = { SACRIFICED_HOF = scope:unlucky_guest } gruesome_festivals_own_faith_martyred_own_hof_effect = yes } # _What have I done?!_ option = { name = fp1_other_decisions.0024.a trigger = { has_trait = zealous } # Naturally, this will cause a lot of stress. add_stress = monumental_stress_gain ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } # They're only a human, not divinity itself! option = { name = fp1_other_decisions.0024.b trigger = { has_trait = cynical } # Naturally, this will cause a lot of stress. add_stress = major_stress_gain ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } # It was my subjects, not me! option = { name = fp1_other_decisions.0024.c trigger = { NOR = { has_trait = zealous has_trait = cynical } } # Naturally, this will cause a lot of stress. add_stress = massive_stress_gain ai_chance = { # Only one option, so it doesn't much matter. base = 100 } } } fp1_other_decisions.1000 = { type = character_event title = fp1_other_decisions.1000.t desc = fp1_other_decisions.1000.desc theme = skull left_portrait = { character = scope:blotter animation = personality_zealous } override_background = { trigger = { scope:blotter = { religion = religion:germanic_religion } } reference = fp1_tribal_temple } override_background = { trigger = { scope:blotter = { NOT = { religion = religion:germanic_religion } } } reference = temple_scope } option = { name = fp1_other_decisions.1000.a show_as_tooltip = { death = { killer = scope:blotter death_reason = death_sacrificed_to_gods } } } } ################################################## # GF Maintenance Events # by Ewan Cowhig Croft # 0061 - 0080 ################################################## # Someone intending to sacrifice you has died fp1_other_decisions.0062 = { hidden = yes immediate = { # If preparing a grand sacrifice, make sure your prisoners are relieved. if = { limit = { has_character_flag = gruesome_festivals_can_pick_human_sacrifice } every_prisoner = { limit = { has_character_modifier = gruesome_festivals_designated_sacrifice_fp1_modifier } designate_gruesome_festivals_sacrifice_modifier_removed_effect = { DESIGNATOR = root } } } } } # Designated sacrifice has died fp1_other_decisions.0063 = { hidden = yes immediate = { if = { limit = { has_character_modifier = gruesome_festivals_designated_sacrifice_fp1_modifier NOT = { has_character_flag = is_currently_being_sacrificed } } save_scope_as = designated_sacrifice if = { # Should always have an imprisoner, but just in case. limit = { exists = imprisoner } imprisoner = { send_interface_message = { type = event_religious_bad_with_text title = fp1_other_decisions.0063.t desc = fp1_other_decisions.0063.desc right_icon = scope:designated_sacrifice } } } } } } # Someone with offended counties has lost them (via death or independence). fp1_other_decisions.0064 = { hidden = yes trigger = { has_variable = offended_counties_with_humsac } immediate = { fp1_remove_humsac_offended_counties_effect = yes } } ################################################## # Stele Setup Events # by Ewan Cowhig Croft & Linnéa Thimrén # 0101 - 0120 ################################################## # Select which type of stele you'll be raising. fp1_other_decisions.0101 = { type = character_event title = fp1_other_decisions.0101.t desc = fp1_other_decisions.0101.desc theme = faith left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:ancestor animation = personality_zealous } lower_right_portrait = scope:foe override_background = { reference = throne_room } trigger = { # DLC check. has_fp1_dlc_trigger = yes } immediate = { # Save some variables as scopes for easy loc. if = { limit = { exists = var:ancestor_to_bury } var:ancestor_to_bury = { save_scope_as = ancestor } } if = { limit = { exists = var:recent_conquest_victory } var:recent_conquest_victory = { save_scope_as = foe } } if = { limit = { exists = var:recent_rank_increase } var:recent_rank_increase = { save_scope_as = new_title } } } # Bury an ancestor. option = { name = fp1_other_decisions.0101.a # For family. trigger = { has_variable = ancestor_to_bury } # Note the type going forwards. save_scope_value_as = { name = stele_type value = flag:ancestor } # Inform root & proceed. custom_tooltip = fp1_other_decisions.0101.a.tt trigger_event = fp1_other_decisions.0111 stress_impact = { humble = medium_stress_impact_loss arrogant = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_compassion = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 20 has_trait = humble } modifier = { # Weight down for stress. add = -20 has_trait = arrogant } } } # Commemorate a conquest. option = { name = fp1_other_decisions.0101.b # Won a war that gained them territory. trigger = { has_variable = recent_conquest_victory } # Note the type going forwards. save_scope_value_as = { name = stele_type value = flag:conquest } # Inform root & proceed. custom_tooltip = fp1_other_decisions.0101.b.tt trigger_event = fp1_other_decisions.0111 stress_impact = { arrogant = minor_stress_impact_loss vengeful = medium_stress_impact_loss humble = minor_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_honor = 0.25 } modifier = { # Weight up for stress. add = 10 has_trait = arrogant } modifier = { # Weight up for stress. add = 20 has_trait = vengeful } modifier = { # Weight down for stress. add = -10 has_trait = humble } modifier = { # Weight down for stress. add = -20 has_trait = forgiving } } } # Memorialise an increase in rank. option = { name = fp1_other_decisions.0101.c # Marking going up a rank. trigger = { has_variable = recent_rank_increase } # Note the type going forwards. save_scope_value_as = { name = stele_type value = flag:promotion } # Inform root & proceed. custom_tooltip = fp1_other_decisions.0101.c.tt trigger_event = fp1_other_decisions.0111 stress_impact = { arrogant = major_stress_impact_loss humble = major_stress_impact_gain } ai_chance = { base = 100 ai_value_modifier = { ai_boldness = 0.5 ai_greed = 0.25 } modifier = { # Weight up for stress. add = 30 has_trait = arrogant } modifier = { # Weight down for stress. add = -30 has_trait = humble } } } # Actually, nahhhhhh. option = { name = fp1_other_decisions.0101.d # Give 'em their deposit back. add_gold = var:raise_stele_refund # Clear the cooldown. remove_decision_cooldown = raise_stele_decision # No stress impact for opting out. ai_chance = { # If the AI has opened the interface, it should pick an option. base = 0 } } # Run some mild clean-up. after = { # Clean-up the refund value. remove_variable = raise_stele_refund } } scripted_effect fp1_apply_stele_effects = { # Apply content-specific effects. # Save ancillary characters. ## Save the commissioning character. $LOCATION$ = { save_temporary_scope_as = stele_location set_variable = { name = stele_commissioner value = root years = fp1_stele_duration_value } } ## Create a hidden dummy character from the local area to ascribe the carvings to. hidden_effect = { # Make the character. create_character = { age = 25 random_traits = yes gender_female_chance = 50 dynasty = none faith = $LOCATION$.faith culture = $LOCATION$.culture location = $LOCATION$.title_province save_scope_as = carver } # Save them in the designated county. $LOCATION$ = { set_variable = { name = stele_carver value = scope:carver years = fp1_stele_duration_value } } # Kill them off. scope:carver = { death = { death_reason = death_vanished } } } ## Ancestor effects. if = { limit = { scope:stele_type = flag:ancestor } $LOCATION$ = { # Set up the container for loc. set_variable = { name = stele_container value = root.var:ancestor_to_bury years = fp1_stele_duration_value } # Plus we want to remember the _type_ of stele we've got, so we can check if it's a character or title in there later. set_variable = { name = stele_scope_type value = flag:character years = fp1_stele_duration_value } # Add the actual modifier. ## Stronger version for counties with stele-liking cultures. if = { limit = { fp1_can_raise_stele_title_scope_trigger = yes } add_county_modifier = { modifier = fp1_stele_ancestors_strong years = fp1_stele_duration_value desc = fp1_stele_ancestors_strong_custom_desc } } ## Weaker version for counties with cultures that don't. else = { add_county_modifier = { modifier = fp1_stele_ancestors_weak years = fp1_stele_duration_value desc = fp1_stele_ancestors_strong_custom_desc } } # Add a generic flag for easy value adjustments elsewhere. set_variable = { name = stele_slot_occupied value = yes years = fp1_stele_duration_value } } } ## Conquest effects. if = { limit = { scope:stele_type = flag:conquest } $LOCATION$ = { # Set up the container for loc. set_variable = { name = stele_container value = root.var:recent_conquest_victory years = fp1_stele_duration_value } # Plus we want to remember the _type_ of stele we've got, so we can check if it's a character or title in there later. set_variable = { name = stele_scope_type value = flag:character years = fp1_stele_duration_value } # Add the actual modifier. ## Stronger version for counties with stele-liking cultures. if = { limit = { fp1_can_raise_stele_title_scope_trigger = yes } add_county_modifier = { modifier = fp1_stele_conquest_strong years = fp1_stele_duration_value desc = fp1_stele_conquest_strong_custom_desc } } ## Weaker version for counties with cultures that don't. else = { add_county_modifier = { modifier = fp1_stele_conquest_weak years = fp1_stele_duration_value desc = fp1_stele_conquest_strong_custom_desc } } # Add a generic flag for easy value adjustments elsewhere. set_variable = { name = stele_slot_occupied value = yes years = fp1_stele_duration_value } } } ## Promotion effects. if = { limit = { scope:stele_type = flag:promotion } $LOCATION$ = { # Set up the container for loc. set_variable = { name = stele_container value = root.var:recent_rank_increase years = fp1_stele_duration_value } # Plus we want to remember the _type_ of stele we've got, so we can check if it's a character or title in there later. set_variable = { name = stele_scope_type value = flag:title years = fp1_stele_duration_value } # Add the actual modifier. ## Stronger version for counties with stele-liking cultures. if = { limit = { fp1_can_raise_stele_title_scope_trigger = yes } add_county_modifier = { modifier = fp1_stele_promotion_strong years = fp1_stele_duration_value desc = fp1_stele_promotion_strong_custom_desc } } ## Weaker version for counties with cultures that don't. else = { add_county_modifier = { modifier = fp1_stele_promotion_weak years = fp1_stele_duration_value desc = fp1_stele_promotion_strong_custom_desc } } # Add a generic flag for easy value adjustments elsewhere. set_variable = { name = stele_slot_occupied value = yes years = fp1_stele_duration_value } } } } # With type chosen, select a specific location. fp1_other_decisions.0111 = { type = character_event title = fp1_other_decisions.0111.t desc = { desc = fp1_other_decisions.0111.desc.intro first_valid = { triggered_desc = { trigger = { scope:stele_type = flag:ancestor } desc = fp1_other_decisions.0111.desc.ancestor } triggered_desc = { trigger = { scope:stele_type = flag:conquest } desc = fp1_other_decisions.0111.desc.conquest } triggered_desc = { trigger = { scope:stele_type = flag:promotion } desc = fp1_other_decisions.0111.desc.promotion } } desc = fp1_other_decisions.0111.desc.outro } theme = faith left_portrait = { character = root # We grieve ancestors. triggered_animation = { trigger = { scope:stele_type = flag:ancestor } animation = grief } # And celebrate successes. triggered_animation = { trigger = { NOT = { scope:stele_type = flag:ancestor } } animation = personality_bold } } right_portrait = { character = scope:secondary_portrait # Ancestors show piety. triggered_animation = { trigger = { scope:stele_type = flag:ancestor } animation = personality_zealous } # Foes show disgust. triggered_animation = { trigger = { scope:stele_type = flag:conquest } animation = disgust } } override_background = { reference = fp1_runestone } trigger = { # DLC check. has_fp1_dlc_trigger = yes } immediate = { # First, we need to grab all of root's personally held counties. every_held_title = { title_tier = county limit = { is_landless_type_title = no } add_to_list = personally_held_counties_list } # Then we sort them out according to the effectiveness of the modifiers. ## Ancestor stelae want stele-valid areas with low popular opinion. if = { limit = { scope:stele_type = flag:ancestor } ordered_in_list = { list = personally_held_counties_list max = raise_stele_county_preference_cap_value order_by = raise_stele_variant_ancestor_value # Grab three options. if = { limit = { NOT = { exists = scope:location_a } } save_scope_as = location_a } else_if = { limit = { NOR = { this = scope:location_a exists = scope:location_b } } save_scope_as = location_b } else_if = { limit = { NOR = { this = scope:location_a this = scope:location_b exists = scope:location_c } } save_scope_as = location_c } } } ## Conquest stelae want stele-valid areas with low control. else_if = { limit = { scope:stele_type = flag:conquest } ordered_in_list = { list = personally_held_counties_list max = raise_stele_county_preference_cap_value order_by = raise_stele_variant_conquest_value # Grab three options. if = { limit = { NOT = { exists = scope:location_a } } save_scope_as = location_a } else_if = { limit = { NOR = { this = scope:location_a exists = scope:location_b } } save_scope_as = location_b } else_if = { limit = { NOR = { this = scope:location_a this = scope:location_b exists = scope:location_c } } save_scope_as = location_c } } } ## Promotion stelae want stele-valid areas with high development. else_if = { limit = { scope:stele_type = flag:promotion } ordered_in_list = { list = personally_held_counties_list max = raise_stele_county_preference_cap_value order_by = raise_stele_variant_promotion_value # Grab three options. if = { limit = { NOT = { exists = scope:location_a } } save_scope_as = location_a } else_if = { limit = { NOR = { this = scope:location_a exists = scope:location_b } } save_scope_as = location_b } else_if = { limit = { NOR = { this = scope:location_a this = scope:location_b exists = scope:location_c } } save_scope_as = location_c } } } # If, for some reason, we have no designated county, just pick their capital. else_if = { limit = { NOT = { exists = scope:location_a } } capital_county = { save_scope_as = location_a } } # Next, try to set up a secondary portrait. ## Ancestors can be shown. if = { limit = { scope:stele_type = flag:ancestor } var:ancestor_to_bury = { save_scope_as = secondary_portrait } } ## As can beaten foes. else_if = { limit = { scope:stele_type = flag:conquest } var:recent_conquest_victory = { save_scope_as = secondary_portrait } } ## But there's no secondary character available for promotion steles. # Finally, take care of generic stele effects. fp1_apply_generic_stele_bonuses_effect = yes } # Scope:location_a sounds good. option = { name = fp1_other_decisions.0111.a # Sort the local stele. fp1_apply_stele_effects = { LOCATION = scope:location_a } # No stress impact for arbitrary choice. ai_chance = { # AI should always pick the best option. base = 100 } } # Scope:location_b is a decent spot. option = { name = fp1_other_decisions.0111.b trigger = { exists = scope:location_b } # Sort the local stele. fp1_apply_stele_effects = { LOCATION = scope:location_b } # No stress impact for arbitrary choice. ai_chance = { # AI should always pick the best option; the first one. base = 0 } } # Scope:location_c makes a fine choice. option = { name = fp1_other_decisions.0111.c trigger = { exists = scope:location_c } # Sort the local stele. fp1_apply_stele_effects = { LOCATION = scope:location_c } # No stress impact for arbitrary choice. ai_chance = { # AI should always pick the best option; the first one. base = 0 } } # Run some mild clean-up. after = { # Remove used variables. if = { limit = { scope:stele_type = flag:ancestor } remove_variable = ancestor_to_bury } else_if = { limit = { scope:stele_type = flag:conquest } remove_variable = recent_conquest_victory } else_if = { limit = { scope:stele_type = flag:promotion } remove_variable = recent_rank_increase } } } # Error suppression. fp1_other_decisions.0112 = { hidden = yes orphan = yes immediate = { if = { limit = { exists = var:stele_scope_type exists = var:stele_container exists = var:stele_commissioner exists = var:stele_carver } # TIT-23473 # No effect needed. } } } # New holder for a county with a stele. fp1_other_decisions.0113 = { hidden = yes orphan = yes trigger = { # Use expanded version if we have FP1. has_fp1_dlc_trigger = yes # Using a scripted effect here so we can look at the same trigger in the grant title interaction fp1_remove_stele_new_holder_trigger = { TITLE = scope:title PREVIOUS_HOLDER = scope:previous_holder NEW_HOLDER = root } } immediate = { # Blanket remove all types. scope:title = { remove_variable = stele_scope_type remove_variable = stele_container remove_variable = stele_carver remove_variable = stele_commissioner remove_variable = stele_slot_occupied remove_county_modifier = fp1_stele_ancestors_strong remove_county_modifier = fp1_stele_ancestors_weak remove_county_modifier = fp1_stele_conquest_strong remove_county_modifier = fp1_stele_conquest_weak remove_county_modifier = fp1_stele_promotion_strong remove_county_modifier = fp1_stele_promotion_weak } } }