# Events for the cultural festival portion of the Tour grand activity namespace = cultural_festival ############################ ## Tour Mini-Activity: Cultural Festival ############################ ## Vassal Events ## 1000-1999 ## by Veronica Pazos ############################ # ############################ ## Liege Events ## 2000-2999 ## by Veronica Pazos ############################ # cultural_festival.2000 - Cultural Festival Arrival Event (big variation) # cultural_festival.2001-2002 - Performer messes up in front of you # cultural_festival.2010 - King/Queen of Love and Beauty / Grim and Grievance # cultural_festival.2020 - You enjoy a cultural demonstration based on the time of the year/culture # cultural_festival.2030 - You tax people that go into the cultural festival # cultural_festival.2040 - You are horrified by the culture in the cultural festival # cultural_festival.2050 - Local dance is too scandalous - or not # cultural_festival.2060 - You bring sophisticated entertainments from the capital to a low-dev county # cultural_festival.2070 - You encounter a band of mercenaries enjoying the festivities, recruit? # cultural_festival.2080 - Weird guy offers you a mysterious bag of liquids # cultural_festival.2090 - Imprison performers on made up accussations # cultural_festival.2100 - A guild is contributing to the festival # cultural_festival.2110 - A dog breaks into a performance - Adopt? # # ############################ ## Bilateral Events ## 3000-3999 ## by Veronica Pazos ############################ # cultural_festival.3000-3002 - Big play based on liege # cultural_festival.3010-3011 - Alcohol/Juice fountain # cultural_festival.3020-3022 - Host a lavish ceremony to make your vassal formally repledge homage to you # cultural_festival.3030-3031 - Crown the best pig/cow/local_farm_animal # cultural_festival.3040-3042 - Sword in the stone # cultural_festival.3050-3051 - You struggle to stay awake during a boring performance # cultural_festival.3060-3061 - Take your spouse/vassal's spouse for a dance # cultural_festival.3070-3071 - Hold a feast of fools-esque ceremony # # ############################ ## 4000-4999 ## by Arkadiusz Majewski ############################ # cultural_festival.4000 - As Liege you end up in a conversation in a language you don't know # cultural_festival.4100 - Your courtier makes a cultural faux pas # cultural_festival.4200-4203 - Vassal does a parade, liege attends # cultural_festival.4300-4312 - Vassal initiates gift exchange custom, both can follow up on the gifts years later ##################################################################################### ###################### ## Liege Events ## 2000-2999 ## by Veronica Pazos ###################### ###################### ## Liege: Arrival event ## 2000 ## by Veronica Pazos ###################### cultural_festival.2000 = { type = activity_event title = cultural_festival.2000.t desc = { desc = cultural_festival.2000.desc.intro random_valid = { triggered_desc = { trigger = { NOT = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } has_relation_lover = scope:stop_host_scope } desc = cultural_festival.2000.desc.first_time_lovers } triggered_desc = { trigger = { NOT = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } has_relation_rival = scope:stop_host_scope } desc = cultural_festival.2000.desc.first_time_rivals } triggered_desc = { trigger = { NOT = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } opinion = { target = scope:stop_host_scope value >= -10 } opinion = { target = scope:stop_host_scope value <= 15 } } desc = cultural_festival.2000.desc.first_time_neutral } triggered_desc = { trigger = { NOT = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } OR = { opinion = { target = scope:stop_host_scope value > 15 } has_any_good_relationship_with_character_trigger = { CHARACTER = scope:stop_host_scope } } } desc = cultural_festival.2000.desc.first_time_good } triggered_desc = { trigger = { NOT = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } opinion = { target = scope:stop_host_scope value < -10 } } desc = cultural_festival.2000.desc.first_time_bad } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } has_relation_lover = scope:stop_host_scope } desc = cultural_festival.2000.desc.again_lovers } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } has_relation_rival = scope:stop_host_scope } desc = cultural_festival.2000.desc.again_rivals } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } OR = { opinion = { target = scope:stop_host_scope value > 15 } has_any_good_relationship_with_character_trigger = { CHARACTER = scope:stop_host_scope } } } desc = cultural_festival.2000.desc.again_good } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } opinion = { target = scope:stop_host_scope value >= -10 } opinion = { target = scope:stop_host_scope value <= 15 } } desc = cultural_festival.2000.desc.again_neutral } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } opinion = { target = scope:stop_host_scope value < -10 } } desc = cultural_festival.2000.desc.again_bad } } random_valid = { triggered_desc = { trigger = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } desc = cultural_festival.2000.desc.majesty } triggered_desc = { trigger = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } desc = cultural_festival.2000.desc.intimidation } triggered_desc = { trigger = { is_target_in_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } desc = cultural_festival.2000.desc.again_intimidation } triggered_desc = { trigger = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } desc = cultural_festival.2000.desc.taxation } } } theme = tour_arrival window = tour_arrival_event left_portrait = { character = root triggered_animation = { trigger = { has_relation_lover = scope:stop_host_scope } animation = flirtation_left } triggered_animation = { trigger = { OR = { opinion = { target = scope:stop_host_scope value > 15 } has_any_good_relationship_with_character_trigger = { CHARACTER = scope:stop_host_scope } } } animation = ecstasy } triggered_animation = { trigger = { OR = { opinion = { target = scope:stop_host_scope value < -10 } has_relation_rival = scope:stop_host_scope } } animation = dismissal } triggered_animation = { trigger = { OR = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } has_trait = ambitious has_trait = greedy has_trait = avaricious } } animation = dismissal } triggered_animation = { trigger = { OR = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } has_trait = callous has_trait = sadistic dread >= high_dread } } animation = personality_vengeful } animation = personality_rational } right_portrait = { character = scope:stop_host_scope triggered_animation = { trigger = { has_relation_lover = scope:stop_host_scope } animation = flirtation } triggered_animation = { trigger = { scope:stop_host_scope = { opinion = { target = scope:stop_host_scope value > 15 } has_any_good_relationship_with_character_trigger = { CHARACTER = root } } } animation = happiness } triggered_animation = { trigger = { scope:stop_host_scope = { OR = { opinion = { target = scope:stop_host_scope value < -10 } has_relation_rival = root } } } animation = boredom } animation = personality_honorable } immediate = { if = { limit = { root.location.county.holder = { OR = { has_relation_friend = root opinion = { target = root value >= low_positive_opinion } } } } play_arrival_music_effect = { WELCOME_LEVEL = welcome } } else = { play_arrival_music_effect = { WELCOME_LEVEL = neutral } } } option = { name = cultural_festival.2000.a custom_tooltip = cultural_festival_begins_tt if = { limit = { root.culture != root.location.culture } culture = { change_cultural_acceptance = { target = root.location.culture value = minor_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } } else = { root.location.county = { add_county_modifier = { modifier = recent_cultural_festival years = 20 } } } tour_generic_arrival_effect = yes } after = { add_to_variable_list = { name = visited_cultural_festival_province_var target = scope:cultural_festival_scope } } } ###################### ## Liege: Performer messes up in front of you, gets injured ## 2001 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2001_has_wrathful_trait = { OR = { has_trait = callous has_trait = sadistic has_trait = wrathful } } cultural_festival.2001 = { type = activity_event title = cultural_festival.2001.t desc = { desc = cultural_festival.2001.desc.intro first_valid = { triggered_desc = { trigger = { has_variable = child_in_disguise_var } desc = cultural_festival.2001.desc.child } triggered_desc = { trigger = { NOT = { has_variable = child_in_disguise_var } } desc = cultural_festival.2001.desc.normal } } } theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root triggered_animation = { trigger = { cultural_festival_2001_has_wrathful_trait = yes } animation = schadenfreude } animation = shock } right_portrait = { character = scope:injured_artist animation = pain } trigger = { #triggered in the on_action } weight_multiplier = { base = 1 } immediate = { location = { save_scope_as = injured_artist_location } random_list = { 35 = { trigger = { # if host has a child there's a tiny chance they'll be the artist scope:stop_host_scope = { any_child = { is_available_ai_adult = yes } } } set_variable = child_in_disguise_var scope:stop_host_scope = { random_child = { limit = { is_available_ai_adult = yes } increase_wounds_effect = { REASON = fall } save_scope_as = injured_artist } } } 65 = { create_character = { gender_female_chance = 50 culture = location.culture faith = location.faith random_traits = yes dynasty = none age = { 18 50 } employer = scope:stop_host_scope save_scope_as = injured_artist after_creation = { increase_wounds_effect = { REASON = fall } } } } } } option = { # So unfortunate name = cultural_festival.2001.a stress_impact = { compassionate = minor_stress_impact_gain forgiving = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = forgiving } } } } option = { # Help them! name = cultural_festival.2001.b remove_short_term_gold = tiny_gold_value scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_helped_injured_artist_modifier years = 5 } } if = { limit = { has_variable = child_in_disguise_var } scope:stop_host_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } hidden_effect = { trigger_event = { id = cultural_festival.2002 days = { 10 15 } } } stress_impact = { arrogant = minor_stress_impact_gain wrathful = minor_stress_impact_gain sadistic = medium_stress_impact_gain callous = medium_stress_impact_gain } ai_chance = { base = 50 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = sadistic has_trait = callous has_trait = wrathful } } } } option = { # Have them whipped name = cultural_festival.2001.c trigger = { cultural_festival_2001_has_wrathful_trait = yes } add_dread = medium_dread_gain scope:injured_artist = { increase_wounds_effect = { REASON = whipping } } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_whipped_injured_artist_modifier years = 5 } } if = { limit = { has_variable = child_in_disguise_var } scope:stop_host_scope = { progress_towards_rival_effect = { CHARACTER = root REASON = rival_whipped_my_kid OPINION = -30 } } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } decrease_tour_success_effect = { POINTS = 1 } } stress_impact = { gregarious = minor_stress_impact_gain compassionate = medium_stress_impact_gain just = medium_stress_impact_gain calm = medium_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = arrogant has_trait = sadistic has_trait = callous has_trait = wrathful } } modifier = { factor = 0 OR = { has_trait = compassionate has_trait = just has_trait = calm has_trait = forgiving } } } } } # Follow up: The person gives you a reward for your kindness scripted_trigger cultural_festival_2002_valid_secret_owner = { is_adult = yes is_ai = yes this != ROOT any_secret = { exists = this NOT = { is_known_by = root } } } cultural_festival.2002 = { type = activity_event title = cultural_festival.2002.t desc = { desc = cultural_festival.2002.desc.intro first_valid = { triggered_desc = { trigger = { exists = var:secret_var } desc = cultural_festival.2002.desc.secret } triggered_desc = { trigger = { exists = var:hunting_var } desc = cultural_festival.2002.desc.hunting } triggered_desc = { trigger = { exists = var:savings_var } desc = cultural_festival.2002.desc.savings } } } theme = cultural_festival override_background = { reference = market } left_portrait = { character = root animation = personality_honorable } right_portrait = { character = scope:injured_artist animation = beg } lower_center_portrait = { trigger = { has_variable = secret_var } character = scope:secret_target } trigger = { location = scope:injured_artist_location #you haven't left for the next stop } weight_multiplier = { base = 1 } immediate = { random_list = { #we select your reward 1 = { trigger = { scope:activity = { any_attending_character = { cultural_festival_2002_valid_secret_owner = yes } } } set_variable = secret_var } 1 = { set_variable = hunting_var } 1 = { set_variable = savings_var } } if = { #we get the secret scopes limit = { has_variable = secret_var } scope:activity = { random_attending_character = { limit = { cultural_festival_2002_valid_secret_owner = yes } save_scope_as = secret_target random_secret = { limit = { NOT = { is_known_by = root } } save_scope_as = secret_secret } } } } } option = { # Thanks! name = cultural_festival.2002.a if = { limit = { has_variable = secret_var } scope:secret_secret = { reveal_to = root } } else_if = { limit = { has_variable = hunting_var } add_character_modifier = { #skirmishers_damage_mult modifier = terrain_knowledge_modifier years = 10 } } else = { add_treasury_or_gold = { value = minor_treasury_or_gold_value max = 10 } } stress_impact = { compassionate = minor_stress_impact_gain forgiving = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = forgiving } } } } option = { # I can't accept this name = cultural_festival.2002.b add_piety = medium_piety_gain stress_impact = { arrogant = minor_stress_impact_gain wrathful = minor_stress_impact_gain sadistic = medium_stress_impact_gain callous = medium_stress_impact_gain } ai_chance = { base = 50 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = sadistic has_trait = callous has_trait = wrathful } } } } after = { remove_variable = secret_var remove_variable = hunting_var remove_variable = savings_var } } ###################### ## Liege: You're being crowned the Ugliest/Prettiest person ## 2010 ## by Veronica Pazos ###################### cultural_festival.2010 = { type = activity_event title = cultural_festival.2010.t desc = { first_valid = { triggered_desc = { trigger = { has_conventionally_ugly_trigger = yes } desc = cultural_festival.2010.desc_bad } triggered_desc = { trigger = { has_conventionally_attractive_trigger = yes } desc = cultural_festival.2010.desc_good } } } theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root triggered_animation = { trigger = { has_conventionally_ugly_trigger = yes OR = { has_trait = arrogant has_trait = wrathful has_trait = vengeful has_trait = callous has_trait = sadistic } } animation = rage } triggered_animation = { trigger = { has_conventionally_ugly_trigger = yes NOR = { has_trait = arrogant has_trait = wrathful has_trait = vengeful has_trait = callous has_trait = sadistic } } animation = grief } animation = ecstasy } right_portrait = { character = scope:stop_host_scope triggered_animation = { trigger = { has_conventionally_ugly_trigger = yes } animation = schadenfreude } animation = happiness } trigger = { is_landed_or_landless_administrative = yes NOT = { has_variable = was_monarch_good_bad_var } OR = { AND = { has_conventionally_attractive_trigger = yes #you're pretty scope:stop_host_scope = { #and the host doesn't hate you NOT = { has_relation_rival = root } } } AND = { has_conventionally_ugly_trigger = yes #or not pretty scope:stop_host_scope = { #and the host has something against you OR = { has_relation_rival = root has_relation_potential_rival = root AND = { has_hook_of_type = { target = root type = weak_blackmail_hook } opinion = { target = root value >= medium_negative_opinion } } has_hook_of_type = { target = root type = strong_blackmail_hook } } } } } } weight_multiplier = { base = 1 modifier = { factor = 2 scope:stop_host_scope = { has_relation_soulmate = root } } modifier = { factor = 2 scope:stop_host_scope = { has_relation_nemesis = root } } modifier = { factor = 1.5 scope:stop_host_scope = { has_relation_lover = root } } modifier = { factor = 1.5 OR = { has_trait = arrogant #more likely to happen if you care about this stuff has_trait = gregarious } } modifier = { factor = 0.5 OR = { has_trait = humble #less likely to happen if you don't like this has_trait = shy } } } immediate = { set_variable = was_monarch_good_bad_var #so you don't get the same event again } option = { # you're the king/queen of beauty - yass king/queen name = cultural_festival.2010.a trigger = { has_conventionally_attractive_trigger = yes } scope:activity = { add_activity_log_entry = { key = crowned_monarch_of_beauty_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { if = { limit = { is_male = yes } give_nickname = nick_monarch_of_beauty_and_noblesse_masc } else = { give_nickname = nick_monarch_of_beauty_and_noblesse } scope:cultural_festival_scope = { add_county_modifier = { modifier = king_of_beauty_modifier years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } } } } stress_impact = { base = minor_stress_impact_loss arrogant = minor_stress_impact_loss #you like this even more! humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 } } } option = { # you're king/queen of the homely - sigh name = cultural_festival.2010.b trigger = { has_conventionally_ugly_trigger = yes } scope:activity = { add_activity_log_entry = { key = crowned_monarch_of_ugly_log tags = { bad } character = scope:visiting_liege target = scope:stop_host_scope root = { if = { limit = { is_male = yes } give_nickname = nick_monarch_of_grim_and_grievance_masc } else = { give_nickname = nick_monarch_of_grim_and_grievance } add_opinion = { target = scope:stop_host_scope modifier = insult_opinion opinion = -50 } } } } stress_impact = { base = minor_stress_impact_gain wrathful = minor_stress_impact_gain vengeful = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 50 modifier = { factor = 0 } } } option = { #you're the king/queen of the homely - rage name = cultural_festival.2010.c trigger = { has_conventionally_ugly_trigger = yes } scope:activity = { add_activity_log_entry = { key = crowned_monarch_of_ugly_log tags = { bad } character = scope:visiting_liege target = scope:stop_host_scope root = { if = { limit = { has_relation_nemesis = scope:stop_host_scope } add_opinion = { target = scope:stop_host_scope modifier = insult_opinion opinion = -50 } } else_if = { limit = { has_relation_rival = scope:stop_host_scope } set_relation_nemesis = { #this is bad enough to make you nemesis target = scope:stop_host_scope copy_reason = rival reason = nemesis_monarch_of_grim_and_grievance } } else = { progress_towards_rival_effect = { CHARACTER = scope:stop_host_scope REASON = rival_king_of_ugly OPINION = -10 } } scope:cultural_festival_scope = { add_county_modifier = { modifier = king_of_ugly_modifier years = 5 } } } } } duel = { skill = prowess target = scope:stop_host_scope 50 = { #you win desc = cultural_festival.2010.c.success compare_modifier = { value = scope:duel_value multiplier = 3.5 } send_interface_toast = { title = cultural_festival.2010.c.success left_icon = root right_icon = scope:stop_host_scope scope:stop_host_scope = { increase_wounds_effect = { REASON = fight } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } } } 50 = { desc = cultural_festival.2010.c.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 } send_interface_toast = { title = cultural_festival.2010.c.failure left_icon = root increase_wounds_effect = { REASON = fight } } } } stress_impact = { content = minor_stress_impact_gain forgiving = minor_stress_impact_gain calm = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = content has_trait = forgiving has_trait = calm } } } } } ###################### ## Liege: You enjoy a cultural demonstration ## 2020 ## by Veronica Pazos ###################### cultural_festival.2020 = { type = activity_event title = cultural_festival.2020.t desc = { desc = cultural_festival.2020.desc.intro first_valid = { triggered_desc = { #Christmas trigger = { OR = { location.faith.religion = religion:eastern_orthodox_religion location.faith.religion = religion:catholic_religion location.faith.religion = religion:protestant_religion } OR = { #we take the broader Christmaside season current_month = 11 current_month = 12 current_month = 1 } } desc = cultural_festival.2020.desc.christmas } triggered_desc = { #Eid al-Fitr trigger = { location.faith.religion = religion:islam_religion OR = { current_month = 3 current_month = 4 current_month = 5 } } desc = cultural_festival.2020.desc.eid } triggered_desc = { #Midsommar trigger = { root.culture = { NOT = { has_cultural_pillar = heritage_north_germanic } } location.culture = { has_cultural_pillar = heritage_north_germanic } OR = { current_month = 5 current_month = 6 current_month = 7 current_month = 8 } } desc = cultural_festival.2020.desc.midsommar } triggered_desc = { #Regular Summer Solstice trigger = { NOT = { location.culture = { has_cultural_pillar = heritage_north_germanic } } OR = { current_month = 5 current_month = 6 current_month = 7 current_month = 8 } } desc = cultural_festival.2020.desc.summer_solstice } triggered_desc = { #Harvest Festival trigger = { OR = { current_month = 9 current_month = 10 current_month = 11 } } desc = cultural_festival.2020.desc.harvest } desc = cultural_festival.2020.desc.generic } } theme = cultural_festival left_portrait = { character = root animation = ecstasy } right_portrait = { character = scope:stop_host_scope animation = personality_forgiving } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes location.culture = { NOT = { has_variable = cultural_festival_culture_var } } #you haven't seen this festival in a while } weight_multiplier = { base = 1 modifier = { factor = 2 involved_activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } } immediate = { location.culture = { set_variable = { name = cultural_festival_culture_var days = 1825 # 5 years } save_scope_as = festival_culture_scope } } option = { # I love this culture! name = cultural_festival.2020.a if = { limit = { location.culture != root.culture #they're not of your same culture } culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = major_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = enjoyed_culture_modifier years = 10 } } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { lifestyle_reveler = minor_stress_impact_gain drunkard = minor_stress_impact_gain stubborn = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = lifestyle_reveler has_trait = drunkard has_trait = stubborn } } } } option = { # I like the festival itself name = { trigger = { drinks_alcohol_trigger = yes is_adult = yes scope:stop_host_scope = { drinks_alcohol_trigger = yes } } text = cultural_festival.2020.b.drink } name = { trigger = { OR = { drinks_alcohol_trigger = no AND = { drinks_alcohol_trigger = yes scope:stop_host_scope = { drinks_alcohol_trigger = no } } } } text = cultural_festival.2020.b.no_drink } add_character_modifier = { #stress gain - modifier = festival_tis_the_season years = 10 } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { base = major_stress_impact_loss lifestyle_reveler = minor_stress_impact_loss drunkard = minor_stress_impact_loss callous = minor_stress_impact_gain temperate = minor_stress_impact_gain content = minor_stress_impact_gain } ai_chance = { base = 50 modifier = { factor = 0 OR = { has_trait = callous has_trait = temperate has_trait = content } } } } } ###################### ## Liege: Taxes? ## 2030 ## by Veronica Pazos ###################### cultural_festival.2030 = { type = activity_event title = cultural_festival.2030.t desc = cultural_festival.2030.desc theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = greedy has_trait = avaricious } } animation = personality_greedy } animation = personality_rational } right_portrait = { character = scope:stop_host_scope animation = worry } trigger = { is_landed_or_landless_administrative = yes location.county ?= { development_level >= bad_development_level } } weight_multiplier = { base = 1 modifier = { factor = 2 location.county = { development_level >= medium_development_level } } } option = { # Tax the people name = cultural_festival.2030.a add_treasury_or_gold = medium_treasury_or_gold_value scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_taxation_modifier years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 2 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } decrease_tour_success_effect = { POINTS = 1 } } stress_impact = { compassionate = medium_stress_impact_gain generous = medium_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = forgiving has_trait = generous } } } } option = { # Let them go name = cultural_festival.2030.b scope:cultural_festival_scope = { add_county_modifier = { modifier = no_taxation_modifier years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain greedy = medium_stress_impact_gain avaricious = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = callous has_trait = sadistic has_trait = greedy has_trait = avaricious } } } } option = { # Tax them MORE name = cultural_festival.2030.c trigger = { OR = { has_trait = greedy has_trait = avaricious } } add_treasury_or_gold = major_treasury_or_gold_value location.county = { change_development_level = -1 } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 2 } } stress_impact = { compassionate = medium_stress_impact_gain generous = medium_stress_impact_gain forgiving = medium_stress_impact_gain just = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = greedy has_trait = avaricious } } modifier = { factor = 0 OR = { has_trait = compassionate has_trait = forgiving has_trait = just has_trait = generous } } } } } ###################### ## Liege: You're horrified by this (lack of) culture ## 2040 ## by Veronica Pazos ###################### cultural_festival.2040 = { type = activity_event title = cultural_festival.2040.t desc = cultural_festival.2040.desc theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:stop_host_scope animation = worry } trigger = { is_landed_or_landless_administrative = yes is_available_in_activity_trigger = yes location.county.culture != root.culture #this is not your culture exists = root.capital_county location = { county = { culture != root.capital_county.culture #this is not the capital's culture } } } immediate = { location.county.culture = { save_scope_as = festival_culture_scope } } weight_multiplier = { base = 1 modifier = { factor = 2 root.culture = { cultural_acceptance = { target = scope:stop_host_scope.culture value < hybridization_threshold_value } } } } option = { # This is AWFUL name = cultural_festival.2040.a if = { limit = { location.culture != root.culture } culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = minor_cultural_acceptance_loss desc = cultural_acceptance_insulted_festival } } } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = no_culture_modifier years = 10 } } } scope:cultural_festival_scope = { add_county_modifier = { modifier = helped_culture_modifier years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { compassionate = minor_stress_impact_gain gregarious = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = gregarious has_trait = humble } } } } option = { # It's not that bad name = cultural_festival.2040.b if = { limit = { location.culture != root.culture } culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = minor_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = appreciated_culture_modifier years = 5 } } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { zealous = minor_stress_impact_gain callous = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = zealous has_trait = callous has_trait = arrogant } } } } option = { # I'll show them what a good culture actually looks like name = cultural_festival.2040.c trigger = { has_trait = arrogant } duel = { skill = diplomacy value = average_skill_level 50 = { desc = cultural_festival.2040.c.success compare_modifier = { value = scope:duel_value multiplier = 3.5 } send_interface_toast = { title = cultural_festival.2040.c.success left_icon = root if = { limit = { location.culture != root.culture } culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = minor_cultural_acceptance_gain desc = cultural_acceptance_insulted_festival } } } add_prestige = minor_prestige_gain if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } } } 50 = { desc = cultural_festival.2040.c.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 } send_interface_toast = { title = cultural_festival.2040.c.failure left_icon = root add_prestige = medium_prestige_loss } } } stress_impact = { gregarious = minor_stress_impact_gain temperate = minor_stress_impact_gain shy = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 has_trait = arrogant } modifier = { factor = 0 OR = { has_trait = gregarious has_trait = temperate has_trait = shy } } } } } ###################### ## Liege: Local dance is too scandalous for you ## 2050 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2050_scandalous_trigger = { culture = { NOT = { has_cultural_tradition = tradition_modest } } #they need to not be modest AND NOR = { #their liege is into this has_trait = chaste has_trait = celibate } OR = { faith = { #there are many ways you can be scandalous OR = { has_doctrine_parameter = naked_adherents_active has_doctrine_parameter = deviancy_accepted NOT = { trait_is_sin = lustful } trait_is_sin = chaste trait_is_sin = celibate } } } } scripted_trigger cultural_festival_2050_modest_trigger = { faith = { trait_is_sin = lustful } #this is a sin OR = { culture = { has_cultural_tradition = tradition_modest } #you can just be modest faith = { #or you don't have these tenets NOR = { has_doctrine_parameter = naked_adherents_active has_doctrine_parameter = deviancy_accepted } } } } cultural_festival.2050 = { type = activity_event title = cultural_festival.2050.t desc = { desc = cultural_festival.2050.desc_intro first_valid = { triggered_desc = { trigger = { OR = { has_trait = lustful has_trait = deviant } } desc = cultural_festival.2050.desc_lustful } triggered_desc = { trigger = { NOR = { has_trait = lustful has_trait = deviant } } desc = cultural_festival.2050.desc_fallback } } desc = cultural_festival.2050.desc_outro } theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root animation = shock } right_portrait = { character = scope:stop_host_scope animation = ecstasy } trigger = { is_landed_or_landless_administrative = yes is_available_in_activity_trigger = yes location != root.capital_county.title_province #this is not happening in your capital scope:stop_host_scope = { cultural_festival_2050_scandalous_trigger = yes #they're scandalous } cultural_festival_2050_modest_trigger = yes #you're not # Probably best not for kids to be involved in this event at all scope:stop_host_scope = { is_adult = yes } scope:visiting_liege = { is_adult = yes } } immediate = { location.culture ?= { save_scope_as = festival_culture_scope } } weight_multiplier = { base = 1 modifier = { factor = 2 OR = { has_trait = lustful scope:stop_host_scope = { OR = { has_trait = lustful has_trait = deviant } } } } } option = { # OH MY GOD name = cultural_festival.2050.a scope:activity = { add_activity_log_entry = { key = culture_shock_log tags = { bad } character = scope:visiting_liege target = scope:stop_host_scope root = { culture = { #Decrease change_cultural_acceptance = { target = scope:festival_culture_scope value = minor_cultural_acceptance_loss desc = cultural_acceptance_insulted_festival } } } } } stress_impact = { lustful = minor_stress_impact_gain deviant = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = chaste has_trait = celibate has_trait = zealous } } modifier = { factor = 0 OR = { has_trait = lustful has_trait = deviant } } } } option = { # I shall defend their culture name = cultural_festival.2050.b scope:activity = { add_activity_log_entry = { key = culture_exchange_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = medium_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } add_piety = minor_piety_loss if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } } } } stress_impact = { shy = minor_stress_impact_gain chaste = medium_stress_impact_gain celibate = medium_stress_impact_gain zealous = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = shy has_trait = chaste has_trait = celibate has_trait = zealous } } } } option = { # This is amazing! name = cultural_festival.2050.c trigger = { has_trait = lustful has_trait = deviant } scope:activity = { add_activity_log_entry = { key = culture_exchange_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = medium_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } scope:stop_host_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 35 } } add_piety = medium_piety_loss if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } } } } stress_impact = { shy = medium_stress_impact_gain zealous = medium_stress_impact_gain chaste = major_stress_impact_gain celibate = major_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = lustful has_trait = deviant } } modifier = { factor = 0 OR = { has_trait = shy has_trait = chaste has_trait = celibate has_trait = zealous } } } } } ###################### ## Liege: You bring sophisticated entertainments from the capital ## 2060 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2060_arrogant_trigger = { OR = { has_trait = arrogant has_trait = wrathful has_trait = vengeful has_trait = sadistic has_trait = callous has_trait = stubborn } } cultural_festival.2060 = { type = activity_event title = cultural_festival.2060.t desc = cultural_festival.2060.desc theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:stop_host_scope triggered_animation = { trigger = { scope:stop_host_scope = { cultural_festival_2060_arrogant_trigger = yes } } animation = dismissal } animation = ecstasy } artifact = { target = scope:sophisticated_artifact position = lower_center_portrait } trigger = { is_landed_or_landless_administrative = yes location.county ?= { development_level <= bad_development_level } any_character_artifact = { #you bring something with you is_equipped = no } } weight_multiplier = { base = 1 modifier = { factor = 2 location.county = { development_level <= terrible_development_level } } modifier = { factor = 1.5 involved_activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } } immediate = { random_character_artifact = { limit = { is_equipped = no trigger_if = { limit = { scope:stop_host_scope = { highest_held_title_tier > tier_kingdom #No point in giving a court artifact if this is a character without a court. } } ep1_artifact_is_court_artifact_trigger = no } rarity = common } alternative_limit = { is_equipped = no trigger_if = { limit = { scope:stop_host_scope = { highest_held_title_tier > tier_kingdom #No point in giving a court artifact if this is a character without a court. } } ep1_artifact_is_court_artifact_trigger = no } rarity = masterwork } alternative_limit = { is_equipped = no trigger_if = { limit = { scope:stop_host_scope = { highest_held_title_tier > tier_kingdom #No point in giving a court artifact if this is a character without a court. } } ep1_artifact_is_court_artifact_trigger = no } rarity = famed } alternative_limit = { is_equipped = no trigger_if = { limit = { scope:stop_host_scope = { highest_held_title_tier > tier_kingdom #No point in giving a court artifact if this is a character without a court. } } ep1_artifact_is_court_artifact_trigger = no } } save_scope_as = sophisticated_artifact } if = { limit = { scope:stop_host_scope = { any_sponsored_inspiration = { count > 0 inspiration_owner.location = root.location } } } scope:stop_host_scope = { random_sponsored_inspiration = { limit = { inspiration_owner.location = root.location } inspiration_owner = { save_scope_as = inspired_character } } } } } option = { # Give it to them name = cultural_festival.2060.a scope:activity = { add_activity_log_entry = { key = gave_away_artifact_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope artifact = scope:sophisticated_artifact root.location.county = { change_development_progress = 2 } scope:sophisticated_artifact = { set_owner = scope:stop_host_scope } scope:stop_host_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 15 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 2 } } } } stress_impact = { callous = minor_stress_impact_gain greedy = medium_stress_impact_gain avaricious = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = callous } } } } option = { # Ask to have it back name = cultural_festival.2060.b scope:stop_host_scope = { add_opinion = { target = root modifier = annoyed_opinion opinion = -15 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { compassionate = minor_stress_impact_gain gregarious = minor_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = gregarious has_trait = generous } } } } option = { # Find a local to craft a similar artifact name = cultural_festival.2060.c trigger = { exists = scope:inspired_character exists = scope:inspired_character.inspiration } pay_short_term_gold = { target = scope:inspired_character gold = minor_gold_value } location.county = { change_development_progress = 2 } scope:inspired_character = { inspiration = { change_inspiration_progress = 20 } } stress_impact = { callous = minor_stress_impact_gain greedy = medium_stress_impact_gain avaricious = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = callous } } } } } ###################### ## Liege: You encounter a band of mercenaries enjoying the festivities, recruit? ## 2070 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2070_valid_mercenary = { is_available_healthy_ai_adult = yes prowess >= high_skill_rating trigger_if = { limit = { #your vassal and you can use these mercenaries can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:stop_host_scope } can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } } is_female = yes } trigger_else = { is_female = no } } cultural_festival.2070 = { type = activity_event title = cultural_festival.2070.t desc = cultural_festival.2070.desc theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = deceitful has_trait = disloyal has_trait = schemer } } animation = scheme } triggered_animation = { trigger = { OR = { has_trait = gregarious has_trait = lifestyle_reveler has_trait = drunkard } } animation = toast_goblet } animation = personality_honorable } right_portrait = { character = scope:retired_mercenary animation = drink_goblet } lower_center_portrait = scope:stop_host_scope cooldown = { years = 2 } trigger = { location.county ?= { county_control <= medium_county_control } } immediate = { #if there's an appropiate pool character pick them if = { limit = { any_pool_character = { province = root.location cultural_festival_2070_valid_mercenary = yes } } random_pool_character = { province = root.location limit = { cultural_festival_2070_valid_mercenary = yes } save_scope_as = retired_mercenary } } #otherwise create new character else = { create_character = { template = retired_mercenary location = root.location culture = root.location.culture faith = root.location.faith gender_female_chance = root_soldier_female_chance dynasty = none save_scope_as = retired_mercenary } } } weight_multiplier = { base = 1 modifier = { factor = 2 location.county = { county_control < low_county_control } } } option = { # hire them to keep the area controlled name = cultural_festival.2070.a pay_short_term_gold = { target = scope:retired_mercenary gold = minor_gold_value } add_character_modifier = { modifier = festival_hired_mercenaries #county_control years = 10 } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { drunkard = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = drunkard has_trait = gregarious } } } } option = { # challenge them to a game, if you win they must serve you for free, if they win you pay them double name = cultural_festival.2070.b random_list = { 50 = { send_interface_toast = { title = cultural_festival.2070.b.success left_icon = scope:retired_mercenary add_character_modifier = { modifier = festival_luck_mercenaries years = 10 } if = { limit = { scope:activity = { OR = { has_activity_option = { category = special_type option = tour_type_taxation } has_activity_option = { category = special_type option = tour_type_intimidation } } } } increase_tour_success_effect = { POINTS = 1 } } } } 50 = { send_interface_toast = { title = cultural_festival.2070.b.failure left_icon = scope:retired_mercenary pay_short_term_gold = { target = scope:retired_mercenary gold = minor_gold_value } } } } stress_impact = { drunkard = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = drunkard has_trait = gregarious } } } } option = { # challenge them to a game, if you win they must serve you for free, if they win you pay them double - but you cheat name = cultural_festival.2070.c trigger = { OR = { has_trait = deceitful has_trait = schemer } } duel = { skill = intrigue target = scope:retired_mercenary 70 = { compare_modifier = { value = scope:duel_value multiplier = 5 } send_interface_toast = { title = cultural_festival.2070.b.success left_icon = scope:retired_mercenary add_character_modifier = { modifier = festival_luck_mercenaries years = 10 } if = { limit = { scope:activity = { OR = { has_activity_option = { category = special_type option = tour_type_taxation } has_activity_option = { category = special_type option = tour_type_intimidation } } } } increase_tour_success_effect = { POINTS = 1 } } } } 30 = { compare_modifier = { value = scope:duel_value multiplier = -5 } send_interface_toast = { title = cultural_festival.2070.c.failure left_icon = scope:retired_mercenary pay_short_term_gold = { target = scope:retired_mercenary gold = minor_gold_value } #they also beat you up increase_wounds_no_death_effect = { REASON = fight } } } } stress_impact = { drunkard = minor_stress_impact_gain gregarious = minor_stress_impact_gain honest = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = drunkard has_trait = gregarious has_trait = honest } } } } option = { # have a nice one, gents name = cultural_festival.2070.d add_character_modifier = { modifier = festival_drank_with_mercenaries years = 10 } stress_impact = { temperate = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = temperate } } } } ###################### ## Liege: You encounter a mysterious merchant ## 2080 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2080_merchant = { is_ai = yes is_adult = yes is_landed_or_landless_administrative = no is_lowborn = yes is_councillor = no NOT = { is_courtier_of = root } NOR = { has_trait = zealous has_trait = cynical } } cultural_festival.2080 = { type = activity_event title = cultural_festival.2080.t desc = cultural_festival.2080.desc theme = cultural_festival cooldown = { years = 5 } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:mysterious_merchant animation = ecstasy } weight_multiplier = { base = 1 modifier = { factor = 2 has_trait = arbitrary } } immediate = { if = { limit = { any_pool_character = { province = root.location cultural_festival_2080_merchant = yes } } random_pool_character = { province = root.location limit = { cultural_festival_2080_merchant = yes } save_scope_as = mysterious_merchant } } else = { create_character = { template = merchant_template location = root.location dynasty = none faith = root.location.faith culture = root.location.culture save_scope_as = mysterious_merchant } } } option = { # Buy the red liquid name = cultural_festival.2080.a remove_short_term_gold = 1 #symbolic prize, you're buying one bottle custom_tooltip = { text = cultural_festival.2080.tt random_list = { 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.a.health add_character_modifier = festival_2080_red_health } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.a.prowess add_character_modifier = festival_2080_red_prowess } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.a.fertility add_character_modifier = festival_2080_red_fertility } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.a.prowess_bad add_character_modifier = festival_2080_red_prowess_bad } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.a.fertility_bad add_character_modifier = festival_2080_red_fertility_bad } } } } stress_impact = { greedy = miniscule_stress_impact_gain avaricious = miniscule_stress_impact_gain cynical = minor_stress_impact_gain paranoid = minor_stress_impact_gain craven = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 1.25 has_trait = arbitrary } modifier = { factor = 0.5 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } modifier = { factor = 0 OR = { gold <= tiny_gold_value has_trait = craven has_trait = paranoid } } } } option = { # Buy the green liquid name = cultural_festival.2080.b remove_short_term_gold = 1 custom_tooltip = { text = cultural_festival.2080.tt random_list = { 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.b.health_bad add_character_modifier = festival_2080_blue_health_bad } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.b.stress add_character_modifier = festival_2080_blue_stress } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.b.stress_bad add_character_modifier = festival_2080_blue_stress_bad } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.b.attraction add_character_modifier = festival_2080_blue_attraction } } 1 = { send_interface_toast = { left_icon = root title = cultural_festival_2080.b.stress_loss add_character_modifier = festival_2080_blue_stress_loss } } } } stress_impact = { greedy = miniscule_stress_impact_gain avaricious = miniscule_stress_impact_gain cynical = minor_stress_impact_gain craven = minor_stress_impact_gain paranoid = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 1.25 has_trait = arbitrary } modifier = { factor = 0.5 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } modifier = { factor = 0 OR = { gold <= tiny_gold_value has_trait = craven has_trait = paranoid } } } } option = { # Leave name = cultural_festival.2080.c stress_impact = { brave = minor_stress_impact_gain trusting = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = brave has_trait = trusting } } } } } ###################### ## Liege: Make a point of arresting performers on made-up allegations ## 2090 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2090_peasant = { is_ai = yes is_adult = yes is_landed_or_landless_administrative = no is_lowborn = yes is_councillor = no NOT = { is_courtier_of = root } } scripted_trigger cultural_festival_2090_faction = { exists = yes NOT = { exists = faction_war } faction_is_type = peasant_faction faction_leader ?= { location = root.location } } cultural_festival.2090 = { type = activity_event title = cultural_festival.2090.t desc = cultural_festival.2090.desc theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root animation = personality_vengeful } right_portrait = { character = scope:arrested_performer animation = fear } lower_right_portrait = { trigger = { exists = scope:faction_leader_scope } character = scope:faction_leader_scope } trigger = { OR = { involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } has_trait = callous has_trait = sadistic dread >= high_dread } } weight_multiplier = { base = 1 modifier = { factor = 2 involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } modifier = { factor = 2 any_targeting_faction = { faction_type = peasant_faction exists = yes NOT = { exists = faction_war } } } } immediate = { if = { limit = { any_pool_character = { province = root.location cultural_festival_2090_peasant = yes } } random_pool_character = { province = root.location limit = { cultural_festival_2090_peasant = yes } save_scope_as = arrested_performer } } else = { create_character = { template = generic_peasant_character location = root.location dynasty = none culture = root.location.culture faith = root.location.faith save_scope_as = arrested_performer } } if = { limit = { any_targeting_faction = { cultural_festival_2090_faction = yes } } random_targeting_faction = { limit = { cultural_festival_2090_faction = yes } save_scope_as = faction_scope faction_leader = { save_scope_as = faction_leader_scope } } } } option = { # Arrest them name = cultural_festival.2090.a scope:activity = { add_activity_log_entry = { key = arrested_performers_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { add_dread = medium_dread_gain scope:cultural_festival_scope = { #lose popular opinion add_county_modifier = { modifier = festival_arrested_artists years = 5 } } if = { limit = { involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 2 } } else = { increase_tour_success_effect = { POINTS = 1 } } } } } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain cynical = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } option = { # They're actually factioning against you name = cultural_festival.2090.b trigger = { any_targeting_faction = { cultural_festival_2090_faction = yes } } scope:activity = { add_activity_log_entry = { key = arrested_faction_leader_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { rightfully_imprison_character_effect = { TARGET = scope:faction_leader_scope IMPRISONER = root } scope:faction_leader_scope = { leave_faction_with_cooldown_effect = { FACTION = scope:faction_scope YEARS = 10 } } scope:cultural_festival_scope = { #lose popular opinion add_county_modifier = { modifier = festival_arrested_artists years = 5 } } if = { limit = { involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 2 } } else = { increase_tour_success_effect = { POINTS = 1 } } } } } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain cynical = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } option = { # Nahh name = cultural_festival.2090.c add_dread = minor_dread_loss scope:cultural_festival_scope = { #get popular opinion add_county_modifier = { modifier = festival_no_prisoners years = 5 } } stress_impact = { callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.5 OR = { has_trait = callous has_trait = sadistic } } modifier = { factor = 0 involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } } } } ###################### ## Liege: You see a guild contributing to the festival ## 2100 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_2100_courtier = { is_ai = yes is_adult = yes is_courtier_of = root } cultural_festival.2100 = { type = activity_event title = cultural_festival.2100.t desc = cultural_festival.2100.desc theme = cultural_festival cooldown = { years = 2 } override_background = { reference = market } left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:inspired_courtier animation = admiration } trigger = { scope:activity = { any_attending_character = { cultural_festival_2100_courtier = yes } } } weight_multiplier = { base = 1 modifier = { factor = 2 involved_activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } } immediate = { location = { save_scope_as = guild_location } scope:activity = { random_attending_character = { limit = { cultural_festival_2100_courtier = yes } weight = { base = 1 modifier = { add = 5 has_any_good_relationship_with_root_trigger = yes #someone you potentially care about } modifier = { add = 2 has_any_high_skill_rating = no #someone we can make useful } modifier = { add = -2 is_councillor = yes } } save_scope_as = inspired_courtier } } } option = { # Support them name = cultural_festival.2100.a remove_short_term_gold = { value = medium_gold_value max = 100 } location.county = { change_development_progress = medium_development_progress_gain } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain ambitious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = ambitious } NOT = { can_make_expensive_purchase_trigger = { PRICE = medium_gold_value } } } } } option = { # You get inspired name = cultural_festival.2100.b add_character_modifier = { modifier = discounted_guild_holding_build_cost_modifier years = 10 } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain cynical = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } option = { # Courtier gets inspired name = cultural_festival.2100.c scope:inspired_courtier = { duel = { skill = stewardship value = high_skill_rating 50 = { #they get the trait compare_modifier = { value = scope:duel_value multiplier = 3.5 } desc = cultural_festival.2100.c.success root = { send_interface_toast = { title = cultural_festival.2100.c.success left_icon = scope:inspired_courtier scope:inspired_courtier = { add_trait = architect } } } } 50 = { #they improve their skills compare_modifier = { value = scope:duel_value multiplier = -3.5 } desc = cultural_festival.2100.c.failure root = { send_interface_toast = { title = cultural_festival.2100.c.failure left_icon = scope:inspired_courtier scope:inspired_courtier = { add_stewardship_skill = 2 } } } } } } stress_impact = { callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.5 OR = { has_trait = callous has_trait = sadistic } } modifier = { factor = 0 involved_activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } } } } ###################### ## Liege: A puppy disrupts the performance ## 2110 ## by Veronica Pazos ###################### cultural_festival.2110 = { type = activity_event title = cultural_festival.2110.t desc = { desc = cultural_festival.2110.desc.intro first_valid = { triggered_desc = { trigger = { OR = { has_trait = callous has_trait = sadistic } } desc = cultural_festival.2110.desc.callous } } desc = cultural_festival.2110.desc.outro } theme = cultural_festival cooldown = { years = 2 } left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = callous has_trait = sadistic } } animation = dismissal } animation = personality_compassionate } lower_right_portrait = { trigger = { exists = scope:my_heir } character = scope:my_heir } trigger = { NOT = { any_owned_story = { type = story_cycle_pet_dog } } } weight_multiplier = { base = 1 modifier = { factor = 2 has_trait = compassionate } } immediate = { if = { limit = { any_child = { is_adult = no is_ai = yes } } random_child = { limit = { is_adult = no is_ai = yes } save_scope_as = my_heir } } } option = { # Adopt!!! name = cultural_festival.2110.a scope:activity = { add_activity_log_entry = { key = adopted_a_puppy_log tags = { good } character = scope:visiting_liege root = { start_dog_story_cycle_effect = yes } } } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain ambitious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = ambitious } NOT = { can_make_expensive_purchase_trigger = { PRICE = medium_gold_value } } } } } option = { # Get it for your heir name = cultural_festival.2110.b trigger = { exists = scope:my_heir } if = { limit = { NOT = { has_relation_friend = scope:my_heir } } set_relation_friend = { target = scope:my_heir reason = friend_festival_puppy } } else = { add_opinion = { target = scope:my_heir modifier = grateful_opinion opinion = 20 } } scope:my_heir = { start_dog_story_cycle_effect = yes } stress_impact = { greedy = minor_stress_impact_gain avaricious = minor_stress_impact_gain cynical = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } option = { # Pet the dog! Pet the dog! name = cultural_festival.2110.c trigger = { has_activity_intent = reduce_stress_intent } custom_tooltip = available_because_intent_tt stress_impact = { base = major_stress_impact_loss #your reward callous = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } option = { # Kick the dog name = cultural_festival.2110.d custom_tooltip = cultural_festival_2110_d_tt trigger = { OR = { has_trait = callous has_trait = sadistic } } scope:activity = { every_attending_character = { custom = cultural_festival_2110_d_opinion_tt limit = { NOR = { has_trait = callous has_trait = sadistic } } add_opinion = { target = root modifier = cruelty_opinion opinion = -5 } } } random = { chance = 10 increase_wounds_effect = { REASON = wild_animal } } stress_impact = { base = major_stress_impact_loss #your reward } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = callous has_trait = sadistic } } } } option = { # Ignore name = cultural_festival.2110.e add_prestige = miniscule_prestige_gain #you maintain your composure stress_impact = { compassionate = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = avaricious has_trait = cynical } } } } } ##################################################################################### ###################### ## Bilateral Events ## 3000-3999 ## by Veronica Pazos ###################### ###################### ## Bilateral: Big play based on liege ## 3000-3002 ## by Veronica Pazos ###################### # Vassal: Do you want to make a big play based on your visiting liege? cultural_festival.3000 = { type = activity_event title = cultural_festival.3000.t desc = cultural_festival.3000.desc theme = cultural_festival left_portrait = { character = root animation = admiration } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes is_available_in_activity_trigger = yes scope:visiting_liege = { can_receieve_good_available_compliment_trigger = yes } } weight_multiplier = { base = 1 modifier = { factor = 2 has_trait = lifestyle_poet #you're interested in theatre kinda } } option = { # I sure do! name = cultural_festival.3000.a custom_tooltip = cultural_festival.3000.a.tt remove_treasury_or_gold = medium_treasury_or_gold_value trigger_event = { id = cultural_festival.3001 days = 3 } stress_impact = { greedy = minor_stress_impact_gain } ai_chance = { base = 200 modifier = { factor = 0 OR = { has_trait = greedy short_term_treasury_or_gold < medium_treasury_or_gold_value } } } } option = { # Not really name = cultural_festival.3000.b stress_impact = { generous = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 200 modifier = { factor = 0 OR = { has_trait = generous has_trait = gregarious } } } } } # Vassal: Choose how to depict the liege cultural_festival.3001 = { type = activity_event title = cultural_festival.3001.t desc = cultural_festival.3001.desc theme = cultural_festival left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:liege_actor animation = beg } immediate = { randomize_available_compliment_effect = { COMPLIMENT_RECEIVER = scope:visiting_liege } randomize_available_compliment_effect = { COMPLIMENT_RECEIVER = scope:visiting_liege } randomize_good_available_compliment_effect = { COMPLIMENT_RECEIVER = scope:visiting_liege } create_character = { age = { 20 50 } location = root.location random_traits = yes faith = location.faith culture = location.culture dynasty = none gender_female_chance = { if = { limit = { scope:visiting_liege = { is_female = yes } } add = 100 } else = { add = 0 } } save_scope_as = liege_actor } } #Compassionate option = { trigger = { has_character_flag = available_compliment_compassionate } name = cultural_festival.3001.compassionate custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = compassionate COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #bold option = { trigger = { has_character_flag = available_compliment_bold } name = cultural_festival.3001.bold custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = bold COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #honorable option = { trigger = { has_character_flag = available_compliment_honorable } name = cultural_festival.3001.honorable custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = honorable COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #greed option = { trigger = { has_character_flag = available_compliment_greedy } name = cultural_festival.3001.greed custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = greed COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #rational option = { trigger = { has_character_flag = available_compliment_rational } name = cultural_festival.3001.rational custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = rational COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #zealous option = { trigger = { has_character_flag = available_compliment_zealous } name = cultural_festival.3001.zealous custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = zealous COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #energetic option = { trigger = { has_character_flag = available_compliment_energetic } name = cultural_festival.3001.energetic custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = energetic COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #forgiving option = { trigger = { has_character_flag = available_compliment_forgiving } name = cultural_festival.3001.forgiving custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = forgiving COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #beautiful option = { trigger = { has_character_flag = available_compliment_beautiful } name = cultural_festival.3001.beautiful custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = beautiful COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #strong option = { trigger = { has_character_flag = available_compliment_strong } name = cultural_festival.3001.strong custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = strong COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #extroverted option = { trigger = { has_character_flag = available_compliment_extroverted } name = cultural_festival.3001.extroverted custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = extroverted COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } #dominant option = { trigger = { has_character_flag = available_compliment_dominant } name = cultural_festival.3001.dominant custom_tooltip = cultural_festival.3001.tt hidden_effect = { scope:visiting_liege = { evaluate_compliment_effect = { COMPLIMENT_TYPE = dominant COMPLIMENT_GIVER = root } } } ai_chance = { base = 100 } } option = { # Represent them like a buffoon name = cultural_festival.3001.negative flavor = cultural_festival.3001.negative.flavor add_character_modifier = { modifier = dressed_liege_like_buffon_modifier years = 5 } scope:visiting_liege = { set_variable = buffoon_costume_var } stress_impact = { craven = minor_stress_impact_gain compassionate = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = craven has_trait = compassionate } } modifier = { factor = 2 OR = { has_trait = sadistic has_trait = callous } } } } after = { clear_available_compliments_effect = yes scope:visiting_liege = { trigger_event = { id = cultural_festival.3002 days = 3 } } } } scripted_effect cultural_festival.3002.add_hook = { scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.3002.a.toast left_icon = scope:visiting_liege add_hook = { target = root type = favor_hook } } } } # Liege: You see the play cultural_festival.3002 = { type = activity_event title = cultural_festival.3002.t desc = { desc = cultural_festival.3002.desc.intro first_valid = { triggered_desc = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:good } desc = cultural_festival.3002.desc.good } triggered_desc = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:neutral } desc = cultural_festival.3002.desc.neutral } triggered_desc = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:bad } desc = cultural_festival.3002.desc.bad } triggered_desc = { trigger = { has_variable = buffoon_costume_var } desc = cultural_festival.3002.desc.buffoon } } } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:good } animation = admiration } triggered_animation = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:neutral } animation = personality_rational } triggered_animation = { trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:bad } animation = disgust } triggered_animation = { trigger = { has_variable = buffoon_costume_var } animation = anger } } right_portrait = { character = scope:liege_actor animation = personality_honorable triggered_outfit = { trigger = { root = { has_variable = buffoon_costume_var } } remove_default_outfit = yes outfit_tags = { jester_outfit } } } lower_center_portrait = scope:stop_host_scope immediate = { scope:liege_actor = { add_character_flag = wear_armor } } option = { # Compliment is good, pay name = cultural_festival.3002.a trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:good } scope:activity = { add_activity_log_entry = { key = enjoyed_good_play_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.3002.a.toast left_icon = scope:visiting_liege root = { add_opinion = { modifier = grateful_opinion target = scope:stop_host_scope opinion = 50 } } } } add_prestige = minor_prestige_gain scope:stop_host_scope = { every_held_county = { add_county_modifier = { #everyone loves you modifier = festival_good_play years = 5 } } } } } } stress_impact = { humble = minor_stress_impact_gain paranoid = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { OR = { has_trait = humble has_trait = paranoid } add = -50 } } } option = { # Meh name = cultural_festival.3002.b trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:neutral } scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.3002.b.toast left_icon = scope:visiting_liege root = { add_opinion = { modifier = grateful_opinion target = scope:stop_host_scope opinion = 10 } } } } stress_impact = { arrogant = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.25 has_trait = arrogant } } } option = { # This is awful name = cultural_festival.3002.c trigger = { exists = scope:compliment_outcome scope:compliment_outcome = flag:bad } scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.3002.c.toast left_icon = scope:visiting_liege root = { add_opinion = { modifier = insulted_opinion target = scope:stop_host_scope opinion = -15 } } } } scope:cultural_festival_scope = { add_county_modifier = { #everyone thinks you're kinda lame modifier = festival_bad_play years = 5 } } stress_impact = { base = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = arrogant } } } option = { # You're a buffoon name = cultural_festival.3002.d trigger = { has_variable = buffoon_costume_var } scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.3002.d.toast left_icon = scope:visiting_liege root = { progress_towards_rival_effect = { CHARACTER = scope:stop_host_scope REASON = rival_buffoon_play OPINION = -30 } } } } stress_impact = { forgiving = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = forgiving has_trait = humble } } } } option = { # I don't really care about this, but Im gonna pretend I do name = cultural_festival.3002.e trigger = { exists = scope:compliment_outcome NOT = { scope:compliment_outcome = flag:good } scope:stop_host_scope = { can_add_hook = { target = root type = favor_hook } } } scope:cultural_festival_scope = { add_county_modifier = { #everyone loves you, kinda modifier = festival_neutral_play years = 5 } } scope:stop_host_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } cultural_festival.3002.add_hook = yes if = { limit = { has_variable = buffoon_costume_var } stress_impact = { vengeful = minor_stress_impact_gain wrathful = minor_stress_impact_gain callous = minor_stress_impact_gain arrogant = medium_stress_impact_gain } } else = { stress_impact = { base = minor_stress_impact_loss arrogant = minor_stress_impact_gain #you actually care about this stuff gregarious = minor_stress_impact_gain #you also care } } ai_chance = { base = 50 modifier = { factor = 0.25 OR = { has_trait = arrogant has_trait = gregarious } } } } after = { scope:liege_actor = { remove_character_flag = wear_armor } } } ###################### ## Bilateral: Make a fountain run with wine ## 3010-3011 ## by Veronica Pazos ###################### # Vassal: Do you want to make your fountain run with wine? cultural_festival.3010 = { type = activity_event title = cultural_festival.3010.t desc = cultural_festival.3010.desc theme = cultural_festival left_portrait = { character = root animation = personality_rational } override_background = { reference = garden } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes is_available_in_activity_trigger = yes scope:visiting_liege = { drinks_alcohol_trigger = yes #you heard that they like this NOT = { has_variable = fountain_event_var } #we set a 5 year cooldown for the liege too } } weight_multiplier = { base = 1 modifier = { factor = 1.5 any_child = { } } modifier = { factor = 1.25 OR = { has_trait = gregarious has_trait = drunkard } } } option = { # I sure do! name = cultural_festival.3010.a scope:activity = { add_activity_log_entry = { key = wine_fountain_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope } } remove_short_term_gold = minor_gold_value add_prestige = minor_prestige_gain if = { limit = { faith_forbids_alcohol_trigger = no } hidden_effect = { every_pool_character = { province = root.location limit = { drinks_alcohol_trigger = yes } add_opinion = { modifier = impressed_opinion target = root opinion = 5 } } location = { every_character_in_location = { #people love this limit = { drinks_alcohol_trigger = yes this != root } add_opinion = { modifier = impressed_opinion target = root opinion = 5 } } } } location.county = { holder = { every_courtier = { custom = custom.every_courtier limit = { location = root.location faith_forbids_alcohol_trigger = no } add_opinion = { modifier = impressed_opinion target = root opinion = 5 } } } add_county_modifier = { modifier = alcohol_fountain_modifier years = 5 } } } scope:visiting_liege = { add_opinion = { modifier = impressed_opinion target = root opinion = 20 } set_variable = { name = fountain_event_var years = 5 } set_variable = alcohol_fountain_var trigger_event = { id = cultural_festival.3011 days = 3 } } if = { limit = { has_trait = zealous faith_forbids_alcohol_trigger = yes } add_stress = medium_stress_gain } stress_impact = { greedy = minor_stress_impact_gain temperate = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = temperate short_term_gold < medium_gold_value AND = { has_trait = zealous faith_forbids_alcohol_trigger = yes } } } } } option = { # Maybe just juice? name = cultural_festival.3010.b scope:activity = { add_activity_log_entry = { key = juice_fountain_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope } } remove_short_term_gold = tiny_gold_value if = { #if you have children they love this limit = { any_child = { is_adult = no count > 0 } } every_child = { limit = { is_adult = no } add_opinion = { modifier = impressed_opinion target = root opinion = 15 } } } location.county = { add_county_modifier = { modifier = juice_fountain_modifier years = 5 } } scope:visiting_liege = { add_opinion = { modifier = impressed_opinion target = root opinion = 10 } set_variable = { name = fountain_event_var years = 5 } set_variable = juice_fountain_var trigger_event = { id = cultural_festival.3011 days = 3 } } stress_impact = { greedy = minor_stress_impact_gain drunkard = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.5 has_trait = greedy } modifier = { factor = 0 has_trait = drunkard } } } option = { # Not really name = cultural_festival.3010.c stress_impact = { avaricious = minor_stress_impact_gain #you want to climb the ladder gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = avaricious has_trait = gregarious } } } } } # Liege: You encounter this cool alcohol/juice fountain cultural_festival.3011 = { type = activity_event title = cultural_festival.3011.t desc = { desc = cultural_festival.3011.desc.intro first_valid = { triggered_desc = { trigger = { has_variable = alcohol_fountain_var } desc = cultural_festival.3011.desc.alcohol } triggered_desc = { trigger = { has_variable = juice_fountain_var } desc = cultural_festival.3011.desc.juice } } desc = cultural_festival.3011.desc.outro } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = paranoid has_trait = callous } } animation = disbelief } animation = admiration } right_portrait = { character = scope:stop_host_scope animation = happiness } override_background = { reference = garden } option = { # drink together name = cultural_festival.3011.a scope:cultural_festival_scope = { add_county_modifier = { modifier = drank_together_modifier years = 5 } } if = { limit = { has_variable = alcohol_fountain_var } stress_impact = { base = minor_stress_impact_loss paranoid = minor_stress_impact_gain temperate = minor_stress_impact_gain } } else = { stress_impact = { base = minor_stress_impact_loss paranoid = minor_stress_impact_gain } } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = paranoid has_trait = temperate } } } } option = { # make a wish name = cultural_festival.3011.b add_character_modifier = { modifier = festival_wishing_well_modifier years = 5 } if = { limit = { has_variable = alcohol_fountain_var } stress_impact = { cynical = minor_stress_impact_gain drunkard = minor_stress_impact_gain } } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = drunkard has_trait = cynical } } } } after = { remove_variable = alcohol_fountain_var remove_variable = juice_fountain_var } } ###################### ## Bilateral: Host a lavish ceremony to make your vassal formally repledge homage to you ## 3020-3022 ## by Veronica Pazos ###################### # Liege: Do you want to host this ceremony? cultural_festival.3020 = { type = activity_event title = cultural_festival.3020.t desc = cultural_festival.3020.desc theme = cultural_festival left_portrait = { character = root animation = personality_rational } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes government_has_flag = government_is_feudal is_available_in_activity_trigger = yes scope:stop_host_scope = { is_ai = yes } OR = { can_add_hook = { target = scope:stop_host_scope type = loyalty_hook } scope:stop_host_scope = { vassal_contract_obligation_level_can_be_increased = feudal_government_taxes } scope:stop_host_scope = { vassal_contract_obligation_level_can_be_increased = feudal_government_levies } } } weight_multiplier = { base = 1 modifier = { factor = 2 scope:stop_host_scope = { subject_contract_is_blocked_from_modification = yes } } modifier = { factor = 2 involved_activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } } option = { # I sure do! name = cultural_festival.3020.a custom_tooltip = cultural_festival.3020.a.tt trigger_event = { id = cultural_festival.3021 days = 3 } stress_impact = { humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = humble } } } option = { # Let's just relax instead name = cultural_festival.3020.b scope:stop_host_scope = { every_held_county = { add_county_modifier = { modifier = festival_no_homage_modifier years = 5 } } } stress_impact = { arrogant = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.5 has_trait = arrogant } } } } # Liege: What do you ask for? cultural_festival.3021 = { type = activity_event title = cultural_festival.3021.t desc = cultural_festival.3021.desc theme = cultural_festival left_portrait = { character = root animation = personality_honorable } right_portrait = { character = scope:stop_host_scope animation = personality_honorable } override_background = { reference = throne_room } option = { # Give me money name = cultural_festival.3021.a custom_tooltip = cultural_festival.3021.a.tt trigger = { scope:stop_host_scope = { vassal_contract_obligation_level_can_be_increased = feudal_government_taxes } } scope:activity = { add_activity_log_entry = { key = vassal_homage_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope scope:stop_host_scope = { vassal_contract_increase_obligation_level = feudal_government_taxes set_variable = homage_money_var } } } stress_impact = { brave = minor_stress_impact_gain compassionate = minor_stress_impact_gain generous = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 has_trait = greedy } } } option = { # Give me levies name = cultural_festival.3021.b custom_tooltip = cultural_festival.3021.a.tt trigger = { scope:stop_host_scope = { vassal_contract_obligation_level_can_be_increased = feudal_government_levies } } scope:activity = { add_activity_log_entry = { key = vassal_homage_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope scope:stop_host_scope = { vassal_contract_increase_obligation_level = feudal_government_levies set_variable = homage_levies_var } } } stress_impact = { greedy = minor_stress_impact_gain compassionate = minor_stress_impact_gain generous = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_lifestyle = martial_lifestyle martial >= high_skill_rating has_trait = brave } } } } option = { # Give me hook name = cultural_festival.3021.c flavor = cultural_festival.3021.c.flavor trigger = { can_add_hook = { target = scope:stop_host_scope type = loyalty_hook } } scope:activity = { add_activity_log_entry = { key = vassal_homage_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { add_hook = { target = scope:stop_host_scope type = loyalty_hook } scope:stop_host_scope = { set_subject_contract_modification_blocked = yes set_variable = homage_hook_var } } } } stress_impact = { greedy = minor_stress_impact_gain compassionate = minor_stress_impact_gain brave = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 1.25 OR = { has_lifestyle = intrigue_lifestyle intrigue >= high_skill_rating has_trait = deceitful } } } } option = { # Let's be friends name = cultural_festival.3021.d scope:activity = { add_activity_log_entry = { key = vassal_homage_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { progress_towards_friend_effect = { REASON = friend_homage_ceremony CHARACTER = scope:stop_host_scope OPINION = 50 } } } } scope:stop_host_scope = { set_variable = homage_friends_var } stress_impact = { greedy = minor_stress_impact_gain deceitful = minor_stress_impact_gain callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = compassionate has_trait = generous has_trait = forgiving } } modifier = { factor = 0 OR = { has_trait = deceitful has_trait = greedy has_trait = callous has_trait = sadistic } } } } after = { scope:stop_host_scope = { trigger_event = { id = cultural_festival.3022 days = 3 } } } } # Vassal: What do you think of this? scripted_effect cultural_festival.3022.vassal_contract_modified_effect = { scope:visiting_liege = { send_interface_toast = { title = cultural_festival.3022.annoyed left_icon = root scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = annoyed_opinion opinion = -10 } } } } } cultural_festival.3022 = { type = activity_event title = cultural_festival.3022.t desc = { desc = cultural_festival.3022.desc.intro first_valid = { triggered_desc = { trigger = { has_variable = homage_friends_var } desc = cultural_festival.3022.desc.friends } triggered_desc = { trigger = { has_variable = homage_hook_var } desc = cultural_festival.3022.desc.hook } triggered_desc = { trigger = { has_variable = homage_levies_var } desc = cultural_festival.3022.desc.levies } triggered_desc = { trigger = { has_variable = homage_money_var } desc = cultural_festival.3022.desc.money } } } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { has_variable = homage_money_var has_variable = homage_levies_var has_variable = homage_hook_var } OR = { has_trait = vengeful has_trait = wrathful has_trait = arrogant } } animation = anger } triggered_animation = { trigger = { OR = { has_variable = homage_money_var has_variable = homage_levies_var has_variable = homage_hook_var } } animation = stress } animation = happiness } right_portrait = { character = scope:visiting_liege animation = personality_honorable } override_background = { reference = throne_room } option = { # You had to give money name = cultural_festival.3022.a custom_tooltip = cultural_festival.3022.money trigger = { has_variable = homage_money_var } cultural_festival.3022.vassal_contract_modified_effect = yes stress_impact = { greedy = minor_stress_impact_gain } ai_chance = { base = 100 } } option = { # You had to give levies name = cultural_festival.3022.b custom_tooltip = cultural_festival.3022.levies trigger = { has_variable = homage_levies_var } cultural_festival.3022.vassal_contract_modified_effect = yes ai_chance = { base = 100 } } option = { # You had to give a strong hook name = cultural_festival.3022.a custom_tooltip = cultural_festival.3022.hook trigger = { has_variable = homage_hook_var } cultural_festival.3022.vassal_contract_modified_effect = yes stress_impact = { deceitful = minor_stress_impact_gain } ai_chance = { base = 100 } } option = { # Friendship name = cultural_festival.3022.d trigger = { has_variable = homage_friends_var } scope:visiting_liege = { send_interface_toast = { title = cultural_festival.3022.d.friends left_icon = root scope:stop_host_scope = { progress_towards_friend_effect = { REASON = friend_homage_ceremony CHARACTER = scope:visiting_liege OPINION = 50 } } } } stress_impact = { callous = minor_stress_impact_gain } ai_chance = { base = 100 } } after = { remove_variable = homage_money_var remove_variable = homage_levies_var remove_variable = homage_hook_var remove_variable = homage_friends_var } } ###################### ## Bilateral: Crown the best pig/cow/local_farm_animal ## 3030-3031 ## by Veronica Pazos ###################### # Vassal: Do you want to set up a local_farm_animal contest? cultural_festival.3030 = { type = activity_event title = cultural_festival.3030.t desc = cultural_festival.3030.desc theme = cultural_festival left_portrait = { character = root animation = personality_rational } right_portrait = { character = scope:local_farmer animation = happiness } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes is_available_in_activity_trigger = yes } immediate = { scope:stop_host_scope = { select_local_farm_animal_effect = yes } #let's find the animal to judge create_character = { template = generic_peasant_character location = root.location dynasty = none faith = root.faith culture = root.culture save_scope_as = local_farmer } } weight_multiplier = { base = 1 modifier = { factor = 2 location.county = { development_level <= bad_development_level } } modifier = { factor = 2 location = { terrain = farmlands } } } option = { # I sure do! name = cultural_festival.3030.a remove_treasury_or_gold = minor_treasury_or_gold_value scope:cultural_festival_scope = { add_county_modifier = { modifier = farm_contest_modifier years = 5 } } scope:visiting_liege = { trigger_event = { id = cultural_festival.3031 days = 3 } } stress_impact = { greedy = minor_stress_impact_gain callous = minor_stress_impact_gain #you think this is stupid } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy short_term_treasury_or_gold < medium_treasury_or_gold_value } } } } option = { # Nahhhh name = cultural_festival.3030.b remove_variable = local_farm_animal stress_impact = { gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0.5 has_trait = gregarious } } } after = { scope:local_farmer = { silent_disappearance_ai_effect = yes } } } # Liege: Crown the best local_farm_animal cultural_festival.3031 = { type = activity_event title = cultural_festival.3031.t desc = cultural_festival.3031.desc theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = callous has_trait = sadistic has_trait = cynical } } animation = disbelief } animation = personality_rational } right_portrait = { character = scope:stop_host_scope animation = happiness } immediate = { location.culture = { save_scope_as = festival_culture_scope } if = { limit = { scope:activity = { any_attending_character = { has_relation_rival = root can_set_relation_nemesis_trigger = { CHARACTER = root } } } } scope:activity = { random_attending_character = { limit = { has_relation_rival = root can_set_relation_nemesis_trigger = { CHARACTER = root } } save_scope_as = farm_animal_rival } } } } option = { # This one - the liege's, but it's ugly name = cultural_festival.3031.a scope:stop_host_scope = { add_opinion = { target = root modifier = flattered_opinion opinion = 20 } } add_character_modifier = { modifier = underdog_animal_contest_modifier years = 5 } stress_impact = { callous = minor_stress_impact_gain } ai_chance = { base = 100 } } option = { # This one - the favourite, but not the liege's name = cultural_festival.3031.b scope:cultural_festival_scope = { add_county_modifier = { modifier = favourite_animal_contest_modifier years = 10 } } scope:stop_host_scope = { add_opinion = { target = root modifier = insulted_opinion opinion = -10 } } stress_impact = { callous = minor_stress_impact_gain } ai_chance = { base = 100 } } option = { # This one - the diff culture one name = cultural_festival.3031.c trigger = { location.culture != root.culture #if the county culture is not your culture } culture = { change_cultural_acceptance = { target = scope:festival_culture_scope value = minor_cultural_acceptance_gain desc = cultural_acceptance_farm_contest } } scope:stop_host_scope = { #it's still not their animal add_opinion = { target = root modifier = insulted_opinion opinion = -10 } } stress_impact = { callous = minor_stress_impact_gain } ai_chance = { base = 100 } } option = { # This is ridiculous name = cultural_festival.3031.d trigger = { OR = { has_trait = callous has_trait = sadistic } } scope:cultural_festival_scope = { add_county_modifier = { modifier = mocked_animal_fair_modifier years = 10 } } stress_impact = { callous = medium_stress_impact_loss sadistic = major_stress_impact_loss humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = callous has_trait = sadistic } } } } option = { # If your rival is around, pick them as the best farm_animal name = cultural_festival.3031.e custom_tooltip = cultural_festival.3031.e.tt trigger = { scope:activity = { any_attending_character = { has_relation_rival = root can_set_relation_nemesis_trigger = { CHARACTER = root } } } } #you become nemesis, this is highly humiliating set_relation_nemesis = { reason = nemesis_animal_contest target = scope:farm_animal_rival } stress_impact = { base = minor_stress_impact_loss vengeful = minor_stress_impact_loss callous = medium_stress_impact_loss sadistic = major_stress_impact_loss forgiving = medium_stress_impact_gain compassionate = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = arrogant has_trait = callous has_trait = vengeful } } modifier = { factor = 0 OR = { has_trait = forgiving has_trait = compassionate } } } } after = { remove_variable = local_farm_animal if = { limit = { scope:stop_host_scope = { has_variable = local_farm_animal } } remove_variable = local_farm_animal } } } ###################### ## Bilateral: Sword in the stone ## 3040-3042 ## by Veronica Pazos ###################### # Vassal: Do you want to set up a sword in a stone cultural_festival.3040 = { type = activity_event title = cultural_festival.3040.t desc = cultural_festival.3040.desc theme = cultural_festival left_portrait = { character = root animation = personality_rational } right_portrait = { character = cp:councillor_marshal animation = disapproval } artifact = { target = scope:sword_in_the_stone_scope position = lower_center_portrait } override_background = { reference = courtyard } cooldown = { years = 2 } trigger = { is_landed_or_landless_administrative = yes exists = cp:councillor_marshal any_character_artifact = { #do you have an artifact that could be buried in a stone? OR = { artifact_type = axe artifact_type = spear artifact_type = dagger artifact_type = sword } } } immediate = { cp:councillor_marshal = { save_scope_as = marshal } random_character_artifact = { limit = { OR = { artifact_type = axe artifact_type = spear artifact_type = dagger artifact_type = sword } } save_scope_as = sword_in_the_stone_scope } } weight_multiplier = { base = 1 modifier = { #more likely to happen if you actually have a sword factor = 2 any_character_artifact = { artifact_type = sword } } } option = { # I sure do! name = cultural_festival.3040.a flavor = cultural_festival.3040.flavor custom_tooltip = cultural_festival.3040.a.tt add_prestige = medium_prestige_gain #this is a really cool activity scope:visiting_liege = { trigger_event = { id = cultural_festival.3041 days = 3 } } stress_impact = { greedy = minor_stress_impact_gain arrogant = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = greedy has_trait = arrogant } } } } option = { # Nahhhh name = cultural_festival.3040.b stress_impact = { gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = gregarious } } } } # Liege: Do you want to take this sword out of the stone? cultural_festival.3041 = { type = activity_event title = cultural_festival.3041.t desc = cultural_festival.3041.desc theme = cultural_festival left_portrait = { character = root animation = marshal } right_portrait = { character = scope:stop_host_scope animation = personality_bold } artifact = { target = scope:sword_in_the_stone_scope position = lower_center_portrait } option = { # Try to get it out name = cultural_festival.3041.a trigger = { NOT = { has_trait = giant } } duel = { skill = prowess value = high_skill_rating 50 = { #you get the sword compare_modifier = { value = scope:duel_value multiplier = 3.5 } desc = cultural_festival.3041.a.success send_interface_toast = { title = cultural_festival.3041.a.success left_icon = root right_icon = scope:sword_in_the_stone_scope scope:activity = { add_activity_log_entry = { key = got_sword_in_stone_log tags = { good } character = scope:visiting_liege artifact = scope:sword_in_the_stone_scope scope:sword_in_the_stone_scope = { set_owner = root if = { limit = { root = { can_equip_artifact = scope:sword_in_the_stone_scope } } equip_artifact_to_owner_replace = yes } } root = { add_prestige = medium_prestige_gain } if = { limit = { scope:activity = { OR = { has_activity_option = { category = special_type option = tour_type_majesty } has_activity_option = { category = special_type option = tour_type_intimidation } } } } increase_tour_success_effect = { POINTS = 1 } } } } } scope:stop_host_scope = { #we also send them a toast if you got the artifact send_interface_toast = { title = cultural_festival.3041.a.success.vassal left_icon = scope:visiting_liege right_icon = scope:sword_in_the_stone_scope scope:visiting_liege = { #but they like you add_opinion = { target = scope:stop_host_scope modifier = grateful_opinion opinion = 20 } } } } } 50 = { #you can't make it compare_modifier = { value = scope:duel_value multiplier = -3.5 } desc = cultural_festival.3041.a.failure send_interface_toast = { title = cultural_festival.3041.a.failure left_icon = root right_icon = scope:sword_in_the_stone_scope add_prestige = minor_prestige_loss } set_variable = couldnt_get_sword_var scope:stop_host_scope = { trigger_event = { id = cultural_festival.3042 days = 3 } } } } stress_impact = { weak = minor_stress_impact_gain content = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = weak has_trait = content has_trait = humble } } } } option = { # Let the host win name = cultural_festival.3041.b progress_towards_friend_effect = { REASON = friend_sword_in_stone CHARACTER = scope:stop_host_scope OPINION = 15 } scope:stop_host_scope = { #now they get a chance to take it out trigger_event = { id = cultural_festival.3042 days = 3 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { callous = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = callous } } } } option = { #You're a giant, you get this immediately name = cultural_festival.3041.c trigger = { has_trait = giant } scope:sword_in_the_stone_scope = { set_owner = root if = { limit = { root = { can_equip_artifact = scope:sword_in_the_stone_scope } } equip_artifact_to_owner_replace = yes } } add_prestige = minor_prestige_gain if = { limit = { scope:activity = { OR = { has_activity_option = { category = special_type option = tour_type_majesty } has_activity_option = { category = special_type option = tour_type_intimidation } } } } increase_tour_success_effect = { POINTS = 1 } } scope:stop_host_scope = { #we also send them a toast if you got the artifact send_interface_toast = { title = cultural_festival.3041.a.success.vassal left_icon = scope:visiting_liege right_icon = scope:sword_in_the_stone_scope scope:visiting_liege = { #but they like you add_opinion = { target = scope:stop_host_scope modifier = grateful_opinion opinion = 20 } } } } } } # Vassal: Do /you/ want to take the sword out? cultural_festival.3042 = { type = activity_event title = cultural_festival.3042.t desc = { desc = cultural_festival.3042.desc.intro first_valid = { triggered_desc = { trigger = { scope:visiting_liege = { has_variable = couldnt_get_sword_var } } desc = cultural_festival.3042.desc.failed } desc = cultural_festival.3042.desc.pretended } } theme = cultural_festival left_portrait = { character = root animation = marshal } right_portrait = { character = scope:visiting_liege animation = admiration } artifact = { target = scope:sword_in_the_stone_scope position = lower_center_portrait } option = { # Try to get it out name = cultural_festival.3042.a duel = { skill = prowess value = high_skill_rating 50 = { #you get the sword compare_modifier = { value = scope:duel_value multiplier = 3.5 } desc = cultural_festival.3041.a.success #we can reuse the loc for this send_interface_toast = { title = cultural_festival.3041.a.success left_icon = root right_icon = scope:sword_in_the_stone_scope add_prestige = medium_prestige_gain } } 50 = { #you can't make it compare_modifier = { value = scope:duel_value multiplier = -3.5 } desc = cultural_festival.3041.a.failure send_interface_toast = { title = cultural_festival.3041.a.failure left_icon = root right_icon = scope:sword_in_the_stone_scope add_prestige = minor_prestige_loss } } } stress_impact = { weak = minor_stress_impact_gain content = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = weak has_trait = content has_trait = humble } } } } option = { # Ignore it name = cultural_festival.3042.b stress_impact = { brave = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = brave } } } } } ###################### ## Bilateral: Struggle to stay awake during a boring performance ## 3050-3051 ## by Veronica Pazos ###################### # Liege: Do you try to stay awake to not insult your host? cultural_festival.3050 = { type = activity_event title = cultural_festival.3050.t desc = cultural_festival.3050.desc theme = cultural_festival left_portrait = { character = root animation = boredom } right_portrait = { character = scope:stop_host_scope animation = happiness } cooldown = { years = 2 } trigger = { #triggered by the monthly_pulse } weight_multiplier = { base = 1 modifier = { factor = 2 has_trait = impatient } } option = { # try name = cultural_festival.3050.a scope:stop_host_scope = { add_opinion = { target = root modifier = pleased_opinion opinion = 10 } } scope:cultural_festival_scope = { #people also like this add_county_modifier = { modifier = festival_enjoyed_local_performance years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { base = minor_stress_impact_gain #this is kinda stressful to you impatient = minor_stress_impact_gain #to make it major } ai_chance = { base = 100 modifier = { factor = 0 has_trait = impatient } } } option = { # you don't even care name = cultural_festival.3050.b custom_tooltip = cultural_festival.3050.b.tt if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } hidden_effect = { random_list = { 60 = { #the host notices modifier = { add = 10 scope:stop_host_scope = { has_trait = deceitful #they know you're lying } } scope:stop_host_scope = { trigger_event = { id = cultural_festival.3051 days = 3 } } } 40 = { #they don't notice modifier = { add = 15 has_trait = deceitful } modifier = { add = -10 has_trait = honest } } } } stress_impact = { base = medium_stress_impact_loss shy = minor_stress_impact_gain honest = minor_stress_impact_gain patient = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = shy has_trait = honest has_trait = patient } } } } } # Vassal: You notice liege falling asleep cultural_festival.3051 = { type = activity_event title = cultural_festival.3051.t desc = cultural_festival.3051.desc theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { has_trait = wrathful has_trait = callous has_trait = vengeful } } animation = rage } animation = disbelief } right_portrait = { character = scope:visiting_liege animation = boredom } option = { # b r u h name = cultural_festival.3051.a scope:visiting_liege = { send_interface_toast = { title = cultural_festival.3051.a.toast left_icon = scope:stop_host_scope scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = insult_opinion opinion = -15 } } } } stress_impact = { forgiving = minor_stress_impact_gain impatient = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = forgiving has_trait = impatient } } } } option = { # I kinda get it name = cultural_festival.3051.b stress_impact = { #you get stressed base = minor_stress_impact_gain humble = medium_stress_impact_loss arrogant = minor_stress_impact_gain patient = minor_stress_impact_gain } ai_chance = { base = 75 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = patient } } } } } ###################### ## Bilateral: Take someone to dance ## 3060-3061 ## by Veronica Pazos ###################### scripted_trigger cultural_festival_3060_valid_pool_character = { is_available_ai_adult = yes is_attracted_to_gender_of = root root = { is_attracted_to_gender_of = prev } } # Liege: Do you wanna dance with your spouse or with the vassal's? cultural_festival.3060 = { type = activity_event title = cultural_festival.3060.t desc = { desc = cultural_festival.3060.desc.intro first_valid = { triggered_desc = { trigger = { exists = scope:my_spouse } desc = cultural_festival.3060.desc.spouse } triggered_desc = { trigger = { exists = scope:vassal_spouse } desc = cultural_festival.3060.desc.vassal } } } theme = cultural_festival left_portrait = { character = root animation = flirtation_left } right_portrait = { character = scope:my_spouse animation = happiness trigger = { exists = scope:my_spouse } } lower_center_portrait = { character = scope:stop_host_scope trigger = { #they'll only be there if you're trying to dance with their spouse exists = scope:vassal_spouse scope:stop_host_scope != scope:my_spouse } } lower_right_portrait = { character = scope:vassal_spouse trigger = { exists = scope:vassal_spouse scope:vassal_spouse != root } } cooldown = { years = 2 } trigger = { OR = { # Only for adults and teenagers is_adult = yes # Pre-pubescent children are considered asexual, but adult asexuals should be allowed to get this event NOT = { has_sexuality = asexual } } OR = { scope:stop_host_scope = { #Host has a spouse in our location any_spouse = { location = root.location } } any_spouse = { #Our own spouse is in this location location = root.location } } } immediate = { random_spouse = { #if your spouse is here we grab them limit = { location = root.location } save_scope_as = my_spouse } scope:stop_host_scope = { #Host has a spouse in our location random_spouse = { limit = { location = root.location } save_scope_as = vassal_spouse } } } weight_multiplier = { base = 1 modifier = { factor = 2 any_spouse = { #Our own spouse is in this location location = root.location } } modifier = { factor = 2 scope:stop_host_scope = { any_spouse = { location = root.location } } } } option = { # I wanna dance with my spouse, obviously name = cultural_festival.3060.a trigger = { exists = scope:my_spouse } scope:my_spouse = { add_opinion = { target = root modifier = flattered_opinion opinion = 20 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { base = minor_stress_impact_loss gregarious = minor_stress_impact_loss loyal = medium_stress_impact_loss lazy = minor_stress_impact_gain callous = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = lazy has_trait = callous } } } } option = { # I wanna dance with YOUR spouse, obviously name = cultural_festival.3060.b trigger = { exists = scope:vassal_spouse scope:vassal_spouse != root } custom_tooltip = cultural_festival.3060.b.tt if = { limit = { NOR = { has_trait = celibate has_trait = chaste } } duel = { target = scope:vassal_spouse skill = diplomacy 50 = { desc = cultural_festival.3060.b.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } modifier = { scope:vassal_spouse = { OR = { has_trait = lustful has_trait = seducer } } factor = 2 } modifier = { OR = { has_trait = lustful has_trait = seducer } factor = 2 } send_interface_toast = { title = cultural_festival.3060.b.success left_icon = scope:vassal_spouse progress_towards_lover_effect = { CHARACTER = scope:vassal_spouse REASON = lover_festival_dancing OPINION = 5 } } } 50 = { desc = cultural_festival.3060.b.failure #nothing happens compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } modifier = { scope:vassal_spouse = { OR = { has_trait = celibate has_trait = chaste } } factor = 3 } send_interface_toast = { title = cultural_festival.3060.b.failure left_icon = scope:vassal_spouse } } } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } hidden_effect = { scope:stop_host_scope = { trigger_event = { id = cultural_festival.3061 days = 3 } } } stress_impact = { lustful = minor_stress_impact_loss seducer = minor_stress_impact_loss gregarious = minor_stress_impact_loss loyal = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = loyal } } } option = { # I wanna dance with all the locals name = cultural_festival.3060.c trigger = { #if one of the spouses doesn't exist, we open this option OR = { NOT = { exists = scope:my_spouse } NOT = { exists = scope:vassal_spouse } } } if = { limit = { exists = scope:my_spouse } scope:my_spouse = { add_opinion = { target = root modifier = insult_opinion opinion = -20 } } } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_danced_with_local_modifier years = 5 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 2 } } stress_impact = { base = minor_stress_impact_loss lazy = minor_stress_impact_gain callous = minor_stress_impact_gain loyal = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = loyal has_trait = lazy has_trait = callous } } } } option = { # I hate dancing name = cultural_festival.3060.d add_dread = minor_dread_gain if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 2 } } stress_impact = { lazy = minor_stress_impact_loss callous = minor_stress_impact_loss gregarious = minor_stress_impact_gain seducer = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 2 OR = { has_trait = lazy has_trait = callous } } modifier = { factor = 0 OR = { has_trait = gregarious has_trait = seducer } } } } } # Vassal: Your liege has chosen your spouse for a dance cultural_festival.3061 = { type = activity_event title = cultural_festival.3061.t desc = { desc = cultural_festival.3060.desc.intro #we reuse the intro desc = cultural_festival.3061.desc } theme = cultural_festival left_portrait = { character = root animation = disbelief } right_portrait = { character = scope:visiting_liege animation = flirtation } lower_center_portrait = scope:vassal_spouse option = { # How dare they???? name = cultural_festival.3061.a scope:visiting_liege = { add_opinion = { target = root modifier = angry_opinion opinion = -10 } send_interface_toast = { title = cultural_festival.3061.a.toast left_icon = scope:stop_host_scope scope:stop_host_scope = { progress_towards_rival_effect = { CHARACTER = scope:visiting_liege REASON = rival_danced_with_spouse OPINION = 0 } } } } stress_impact = { forgiving = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 has_trait = forgiving } } } option = { # Who wouldn't! name = cultural_festival.3061.b add_character_modifier = { modifier = festival_flattered_spouse_modifier years = 5 } scope:vassal_spouse = { add_opinion = { target = root modifier = flattered_opinion opinion = 15 } } stress_impact = { arrogant = minor_stress_impact_gain vengeful = minor_stress_impact_gain wrathful = minor_stress_impact_gain callous = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = arrogant has_trait = vengeful has_trait = wrathful has_trait = callous } } } } } ###################### ## Bilateral: Hold a Feast of Fools-esque ceremony ## 3070-3071 ## by Veronica Pazos ###################### scripted_effect cultural_festival.3070.bishop_angry_effect = { if = { limit = { scope:bishop = { NOR = { has_trait = cynical has_trait = gregarious } } } scope:bishop = { add_opinion = { target = root modifier = impious_opinion opinion = -10 } } } } # Vassal: Do you want to hold a Feast of Fools? cultural_festival.3070 = { type = activity_event title = cultural_festival.3070.t desc = cultural_festival.3070.desc theme = cultural_festival override_background = { reference = courtyard } left_portrait = { character = root animation = personality_rational } lower_right_portrait = scope:rival_jester lower_center_portrait = scope:sinful_jester lower_left_portrait = { trigger = { exists = scope:bishop scope:bishop = { NOR = { has_trait = cynical has_trait = gregarious } } } character = scope:bishop } cooldown = { years = 2 } trigger = { OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } #this is a deeply Christian thing location = { any_character_in_location = { this != scope:visiting_liege num_sinful_traits >= 1 is_adult = yes save_temporary_scope_as = jester_1 } any_character_in_location = { this != scope:jester_1 this != scope:visiting_liege OR = { has_relation_potential_rival = root has_relation_rival = root has_relation_nemesis = root root = { opinion = { target = prev #the character value < 0 } } } } } } weight_multiplier = { base = 1 modifier = { factor = 1.5 location = { any_character_in_location = { OR = { has_relation_rival = root has_relation_potential_rival = root } } } } modifier = { factor = 2 location = { any_character_in_location = { has_relation_nemesis = root } } } modifier = { government_has_flag = government_is_theocracy NOR = { has_trait = cynical any_secret = { type = secret_non_believer } } factor = 0.1 } } immediate = { if = { #if you have a nemesis here, we pick them limit = { location = { any_character_in_location = { this != scope:visiting_liege has_relation_nemesis = root } } } location = { random_character_in_location = { limit = { this != scope:visiting_liege has_relation_nemesis = root } save_scope_as = rival_jester } } } else_if = { #if you have a rival here, we pick them limit = { location = { any_character_in_location = { this != scope:visiting_liege has_relation_rival = root } } } location = { random_character_in_location = { limit = { this != scope:visiting_liege has_relation_rival = root } save_scope_as = rival_jester } } } else_if = { #if you have a potential rival here, we pick them limit = { location = { any_character_in_location = { this != scope:visiting_liege has_relation_potential_rival = root } } } location = { random_character_in_location = { limit = { this != scope:visiting_liege has_relation_potential_rival = root } save_scope_as = rival_jester } } } else = { #we grab someone that you dislike location = { random_character_in_location = { limit = { this != scope:visiting_liege root = { opinion = { target = prev #the character value < 0 } } } weight = { base = 100 modifier = { add = 100 is_powerful_vassal = yes } } save_scope_as = rival_jester } } } location = { random_character_in_location = { limit = { num_sinful_traits >= 1 is_adult = yes this != scope:rival_jester this != scope:visiting_liege } save_scope_as = sinful_jester } } if = { limit = { exists = cp:councillor_court_chaplain } cp:councillor_court_chaplain = { save_scope_as = bishop } } } option = { # pick someone you dislike name = cultural_festival.3070.a if = { #become potential rivals limit = { scope:rival_jester = { NOR = { has_relation_potential_rival = root has_relation_rival = root has_relation_nemesis = root } } } scope:rival_jester = { set_relation_potential_rival = { target = root reason = rival_feast_of_fools } } } else_if = { #become rivals if potential rivals limit = { scope:rival_jester = { has_relation_potential_rival = root } } scope:rival_jester = { set_relation_rival = { target = root reason = rival_feast_of_fools } } } else_if = { #become nemesis if rivals limit = { scope:rival_jester = { has_relation_rival = root } } scope:rival_jester = { set_relation_nemesis = { target = root reason = rival_feast_of_fools } } } else = { #they get hostile scheme power against you if nemesis scope:rival_jester = { set_variable = { name = festival_nemesis_fool_var value = scope:stop_host_scope } } } scope:rival_jester = { if = { limit = { is_male = no } give_nickname = nick_monarch_of_fools } else = { give_nickname = nick_monarch_of_fools_masc } add_character_modifier = { #attraction malus modifier = festival_king_of_fools_modifier years = 10 } save_scope_as = final_jester } every_held_county = { add_county_modifier = { modifier = festival_feast_of_fools_county_modifier years = 5 } } add_piety = minor_piety_loss cultural_festival.3070.bishop_angry_effect = yes scope:visiting_liege = { trigger_event = { id = cultural_festival.3071 days = 3 } } stress_impact = { forgiving = minor_stress_impact_gain compassionate = minor_stress_impact_gain zealous = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = zealous has_trait = forgiving has_trait = compassionate } } } } option = { # pick someone with a sinful trait name = cultural_festival.3070.b if = { # become potential rivals limit = { scope:sinful_jester = { NOR = { has_relation_potential_rival = root has_relation_rival = root has_relation_nemesis = root } } } scope:sinful_jester = { set_relation_potential_rival = { target = root reason = rival_feast_of_fools } } } else = { scope:sinful_jester = { add_opinion = { target = root modifier = humiliated_opinion opinion = -20 } } } scope:sinful_jester = { if = { limit = { is_male = no } give_nickname = nick_monarch_of_fools } else = { give_nickname = nick_monarch_of_fools_masc } add_character_modifier = { #attraction malus modifier = festival_king_of_fools_modifier years = 10 } save_scope_as = final_jester } every_held_county = { add_county_modifier = { modifier = festival_feast_of_fools_county_modifier years = 5 } } add_piety = minor_piety_loss #bishop doesn't really care that much since they're sinful scope:visiting_liege = { trigger_event = { id = cultural_festival.3071 days = 3 } } stress_impact = { compassionate = medium_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = forgiving has_trait = compassionate } } } } option = { # pick the liege name = cultural_festival.3070.c trigger = { OR = { has_trait = callous has_trait = sadistic dread >= high_dread } opinion = { # you don't super like this person target = liege value <= 10 } can_set_relation_rival_trigger = { CHARACTER = scope:visiting_liege } } if = { limit = { scope:visiting_liege = { is_ai = yes } } set_relation_rival = { target = scope:visiting_liege reason = rival_feast_of_fools } } every_held_county = { add_county_modifier = { modifier = festival_feast_of_fools_county_modifier years = 5 } } add_piety = minor_piety_loss cultural_festival.3070.bishop_angry_effect = yes scope:visiting_liege = { save_scope_as = final_jester set_variable = im_the_jester_var trigger_event = { id = cultural_festival.3071 days = 3 } } stress_impact = { compassionate = minor_stress_impact_gain just = medium_stress_impact_gain loyal = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = just has_trait = loyal } } modifier = { factor = 2 has_trait = callous opinion = { target = liege value <= 0 } } } } option = { # absolutely not name = cultural_festival.3070.d add_piety = minor_piety_gain if = { limit = { scope:bishop = { NOR = { has_trait = cynical has_trait = gregarious } } } scope:bishop = { add_opinion = { target = root modifier = pious_opinion opinion = 10 } } } stress_impact = { callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain vengeful = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = callous has_trait = sadistic has_trait = vengeful } } } } } # Liege: You observe a Feast of Fools cultural_festival.3071 = { type = activity_event title = cultural_festival.3071.t desc = { desc = cultural_festival.3071.desc.intro first_valid = { triggered_desc = { trigger = { has_variable = im_the_jester_var } desc = cultural_festival.3071.desc_jester } desc = cultural_festival.3071.desc_fallback } } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { has_variable = im_the_jester_var NOR = { has_trait = compassionate has_trait = forgiving has_trait = gregarious has_trait = lifestyle_reveler } } animation = anger } animation = happiness } right_portrait = { trigger = { root != scope:final_jester } character = scope:final_jester triggered_animation = { trigger = { OR = { has_trait = vengeful has_trait = wrathful has_trait = callous has_trait = sadistic } } animation = anger } animation = boredom outfit_tags = { jester_outfit } } lower_center_portrait = scope:stop_host_scope option = { # great stuff name = cultural_festival.3071.a scope:activity = { add_activity_log_entry = { key = festival_of_fools_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { if = { #cultural acceptance if you're not the same culture limit = { scope:stop_host_scope.culture != root.culture } root.culture = { change_cultural_acceptance = { target = scope:stop_host_scope.culture value = major_cultural_acceptance_gain desc = cultural_acceptance_feast_of_fools } } } else = { #popular opinion scope:stop_host_scope = { every_held_county = { add_county_modifier = { modifier = festival_feast_of_fools_county_modifier years = 10 } } } } add_piety = medium_piety_loss } } } stress_impact = { base = minor_stress_impact_loss callous = medium_stress_impact_loss sadistic = medium_stress_impact_loss diligent = minor_stress_impact_gain zealous = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = zealous has_trait = diligent } } modifier = { factor = 2 OR = { has_trait = callous has_trait = sadistic } } } } option = { # blasphemous name = cultural_festival.3071.b add_piety = medium_piety_gain if = { #if your priest is with you they like this limit = { current_travel_plan = { any_entourage_character = { has_council_position = councillor_court_chaplain } } } current_travel_plan = { random_entourage_character = { limit = { has_council_position = councillor_court_chaplain } add_opinion = { target = root modifier = pious_opinion opinion = 10 } } } } stress_impact = { cynical = minor_stress_impact_gain lifestyle_reveler = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = cynical has_trait = lifestyle_reveler has_trait = gregarious } } } } option = { # hire the guy name = cultural_festival.3071.c trigger = { root != scope:final_jester can_appoint_char_to_court_position = { CHAR = scope:final_jester COURT_POS = court_jester_court_position } } scope:final_jester = { set_variable = king_of_fools_var } #75% discount forever recruit_to_entourage_court_and_activity_effect = { CHAR_TO_ADD = scope:final_jester NEW_COURT_OWNER = root } court_position_grant_effect = { POS = court_jester CANDIDATE = scope:final_jester EMPLOYER = root } stress_impact = { avaricious = minor_stress_impact_gain greedy = minor_stress_impact_gain zealous = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = avaricious has_trait = greedy has_trait = zealous } } } } option = { # how dare you??? name = cultural_festival.3071.d trigger = { root = scope:final_jester } scope:activity = { add_activity_log_entry = { key = festival_of_fools_bad_log tags = { bad } character = scope:visiting_liege target = scope:stop_host_scope root = { if = { limit = { #if you're rivals but not nemesis become nemesis has_relation_rival = scope:stop_host_scope NOT = { has_relation_nemesis = scope:stop_host_scope} } set_relation_nemesis = { target = scope:stop_host_scope reason = rival_feast_of_fools } } else = { set_relation_rival = { target = scope:stop_host_scope reason = rival_feast_of_fools } } } } } stress_impact = { base = medium_stress_impact_loss compassionate = minor_stress_impact_gain calm = minor_stress_impact_gain forgiving = medium_stress_impact_gain } ai_chance = { base = 100 modifier = { factor = 0 OR = { has_trait = compassionate has_trait = calm has_trait = forgiving } } } } } ###################### ## Liege: You end up in a conversation in a language you don't know ## 4000 ## by Arkadiusz Majewski ###################### scripted_trigger unknown_language_character_trigger = { #pick someone you don't understand is_physically_able_ai_adult = yes culture = location.county.culture NOT = { knows_language_of_culture = scope:visiting_liege.culture } } scripted_trigger bilingual_character_trigger = { #pick someone that can understand both of you is_physically_able_ai_adult = yes knows_language_of_culture = scope:visiting_liege.culture knows_language_of_culture = scope:local_character_scope.culture NOT = { has_any_relation_trigger = { CHARACTER = scope:stop_host_scope } } } cultural_festival.4000 = { #Liege: You end up in a conversation in a language you don't know type = activity_event title = cultural_festival.4000.t desc = cultural_festival.4000.desc theme = cultural_festival left_portrait = { character = root animation = paranoia } right_portrait = { character = scope:local_translator_scope animation = worry } center_portrait = { character = scope:local_character_scope animation = disbelief } cooldown = { years = 5 } trigger = { #look for a character that you don't understand scope:stop_host_scope = { any_courtier_or_guest = { unknown_language_character_trigger = yes save_temporary_scope_as = unknown_language_character_scope } } NOT = { knows_language_of_culture = scope:unknown_language_character_scope.culture } } immediate = { scope:stop_host_scope = { random_courtier_or_guest = { #pick someone you don't understand limit = { unknown_language_character_trigger = yes } save_scope_as = local_character_scope } } if = { limit = { scope:stop_host_scope = { any_courtier_or_guest = { bilingual_character_trigger = yes } } } scope:stop_host_scope = { random_courtier_or_guest = { #pick someone that can understand both of you in vassals court limit = { bilingual_character_trigger = yes } save_scope_as = local_translator_scope } } } else_if = { #if above fails, pick someone that can understand both of you in your entourage limit = { current_travel_plan = { any_entourage_character = { bilingual_character_trigger = yes } } } current_travel_plan = { random_entourage_character = { limit = { bilingual_character_trigger = yes } save_scope_as = local_translator_scope } } } else = { #if above still fails, just create them create_character = { template = scholar_character location = scope:stop_host_scope.location faith = location.county.faith culture = location.county.culture dynasty = none save_scope_as = local_translator_scope } hidden_effect = { scope:local_translator_scope = { learn_language_of_culture = root.culture } } } } option = { #hire one of them as a translator name = cultural_festival.4000.a add_character_modifier = { #gain bonus to learning languages modifier = interpreter_option_modifier years = 5 } pay_short_term_gold = { #pay them to join target = scope:local_translator_scope gold = minor_gold_value } if = { #recruit them to court if you can limit = { scope:local_translator_scope = { NOT = { is_courtier_of = scope:visiting_liege } } } scope:local_translator_scope = { add_to_court_and_entourage_effect = yes } } scope:cultural_festival_scope = { #gain popular opinion add_county_modifier = { modifier = appreciated_culture_modifier years = 5 } } stress_impact = { ambitious = minor_stress_impact_loss greedy = minor_stress_impact_gain lazy = minor_stress_impact_gain } ai_chance = { base = 10 modifier = { factor = 0 OR = { has_trait = greedy has_trait = lazy short_term_gold < minor_gold_value } } } } option = { #pretend to understand the convesation name = cultural_festival.4000.b duel = { skill = intrigue target = scope:local_translator_scope 50 = { desc = cultural_festival.4000.b.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } send_interface_toast = { title = cultural_festival.4000.b.success left_icon = scope:local_translator_scope scope:cultural_festival_scope = { #gain popular opinion add_county_modifier = { modifier = appreciated_culture_modifier years = 5 } } increase_tour_success_effect = { POINTS = 1 } } } 50 = { desc = cultural_festival.4000.b.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } send_interface_toast = { title = cultural_festival.4000.b.failure left_icon = scope:local_translator_scope scope:cultural_festival_scope = { #lose popular opinion add_county_modifier = { modifier = no_culture_modifier years = 5 } } } } } stress_impact = { deceitful = medium_stress_impact_loss shy = minor_stress_impact_gain craven = minor_stress_impact_gain } ai_chance = { base = 10 modifier = { factor = 0 OR = { has_trait = shy has_trait = craven } } } } option = { #go away name = cultural_festival.4000.c stress_impact = { base = minor_stress_impact_loss shy = minor_stress_impact_loss craven = minor_stress_impact_loss brave = minor_stress_impact_gain gregarious = minor_stress_impact_gain } ai_chance = { base = 10 modifier = { factor = 0 OR = { has_trait = gregarious has_trait = brave } } } } } ###################### ## Bilateral: Your courtier made a cultural faux pas ## 4100 ## by Arkadiusz Majewski ###################### cultural_festival.4100 = { #Your courtier made a cultural faux pas type = activity_event title = cultural_festival.4100.t desc = cultural_festival.4100.desc theme = cultural_festival left_portrait = { character = root animation = worry } right_portrait = { character = scope:offended_character_scope animation = shock } center_portrait = { character = scope:inconsiderate_character_scope animation = fear } cooldown = { years = 5 } trigger = { OR = { AND = { root = scope:visiting_liege any_courtier_or_guest = { #find someone in your court that could commit a faux pas age > 5 culture != scope:stop_host_scope.culture } } AND = { root = scope:stop_host_scope any_courtier_or_guest = { #find someone in your court that could commit a faux pas age > 5 culture != scope:visiting_liege.culture } } } } immediate = { if = { #set who is offended by the faux pas, either liege or vassal limit = { root = scope:visiting_liege } scope:stop_host_scope = { save_scope_as = offended_character_scope } } else = { scope:visiting_liege = { save_scope_as = offended_character_scope } } random_courtier_or_guest = { #find someone in your court that could commit a faux pas limit = { age > 5 culture != scope:offended_character_scope.culture } save_scope_as = inconsiderate_character_scope } scope:offended_character_scope = { add_opinion = { target = scope:inconsiderate_character_scope modifier = insult_opinion opinion = -20 } } } option = { #try to convince everyone it's just a misunderstanding using diplomacy skill name = cultural_festival.4100.a duel = { skill = diplomacy target = scope:offended_character_scope 50 = { #on success gain opinion with both characters; gain cultural acceptance and increase tour success desc = cultural_festival.4100.a.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } modifier = { factor = 2 has_activity_intent = altruism_intent } send_interface_toast = { title = cultural_festival.4100.a.success left_icon = scope:offended_character_scope scope:inconsiderate_character_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } scope:offended_character_scope = { add_opinion = { target = root modifier = respect_opinion opinion = 10 } } if = { limit = { root.culture != scope:offended_character_scope.culture } root.culture = { change_cultural_acceptance = { target = scope:offended_character_scope.culture value = miniscule_positive_culture_acceptance desc = cultural_acceptance_gain_hold_court_event_outcome } } } if = { limit = { root = scope:visiting_liege } increase_tour_success_effect = { POINTS = 1 } } } } 50 = { #on fail gain opinion with offender, but lose with offended; lose cultural acceptance and decrease tour success desc = cultural_festival.4100.a.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } send_interface_toast = { title = cultural_festival.4100.a.failure left_icon = scope:offended_character_scope scope:inconsiderate_character_scope = { add_opinion = { target = root modifier = respect_opinion opinion = 10 } } scope:offended_character_scope = { add_opinion = { target = root modifier = insult_opinion opinion = -10 } } if = { limit = { root.culture != scope:offended_character_scope.culture } root.culture = { change_cultural_acceptance = { target = scope:offended_character_scope.culture value = miniscule_negative_culture_acceptance desc = cultural_acceptance_gain_hold_court_event_outcome } } } } } } stress_impact = { compassionate = minor_stress_impact_loss honest = minor_stress_impact_loss callous = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 has_trait = compassionate has_trait = honest } modifier = { add = -20 has_trait = callous } } } option = { #make the offender pay for their mistakes, gain opinion with offended name = cultural_festival.4100.b scope:inconsiderate_character_scope = { add_opinion = { target = root modifier = shamed_me_opinion opinion = -20 } pay_short_term_gold = { target = scope:offended_character_scope gold = minor_gold_value } } scope:offended_character_scope = { add_opinion = { target = root modifier = respect_opinion opinion = 20 } } stress_impact = { vengeful = minor_stress_impact_loss wrathful = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { factor = 10 has_relation_rival = scope:inconsiderate_character_scope has_relation_nemesis = scope:inconsiderate_character_scope } modifier = { add = 10 OR = { has_trait = vengeful has_trait = wrathful } } modifier = { add = -20 has_trait = compassionate } } } option = { #compensate in offenders name with gold; gain opinion with both name = cultural_festival.4100.c scope:inconsiderate_character_scope = { add_opinion = { target = root modifier = grateful_opinion opinion = 20 } } pay_short_term_gold = { target = scope:offended_character_scope gold = minor_gold_value } scope:offended_character_scope = { add_opinion = { target = root modifier = respect_opinion opinion = 10 } } stress_impact = { compassionate = minor_stress_impact_loss generous = minor_stress_impact_loss greedy = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { factor = 0 OR = { has_relation_rival = scope:inconsiderate_character_scope has_relation_nemesis = scope:inconsiderate_character_scope short_term_gold < minor_gold_value } } modifier = { add = 10 OR = { has_trait = generous has_trait = compassionate } } modifier = { add = -20 has_trait = greedy } } } } ###################### ## Bilateral: Vassal prepares a parade, Liege participates in the parade ## 4200-4203 ## by Arkadiusz Majewski ###################### scripted_effect parade_liege_enjoyment_effect = { #rewards for liege if liege likes the parade if = { limit = { scope:stop_host_scope.var:parade_type = flag:military_parade } scope:visiting_liege = { add_character_modifier = { modifier = festival_military_parade_best_modifier years = 5 } } } else_if = { limit = { scope:stop_host_scope.var:parade_type = flag:civil_parade } scope:visiting_liege = { add_character_modifier = { modifier = festival_civil_parade_best_modifier years = 5 } } } else = { scope:visiting_liege = { add_character_modifier = { modifier = festival_religious_parade_best_modifier years = 5 } } } if = { limit = { scope:visiting_liege.culture != location.county.culture } scope:visiting_liege.culture = { change_cultural_acceptance = { target = scope:stop_host_scope.location.county.culture value = major_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } } scope:visiting_liege = { add_opinion = { target = scope:stop_host_scope modifier = impressed_opinion opinion = 10 } } } scripted_effect parade_liege_dissatisfaction_effect = { #rewards for liege if liege dislikes the parade if = { limit = { scope:stop_host_scope.var:parade_type = flag:religious_parade } add_piety = minor_piety_gain } else = { add_prestige = minor_prestige_gain } scope:visiting_liege = { add_opinion = { target = scope:stop_host_scope modifier = bored_opinion opinion = -10 } add_character_flag = parade_liege_dissatisfaction_flag } } scripted_effect liege_parade_enjoyment_custom_tt_effect = { #custom tooltip hint for player how likely the liege is to like the parade if = { limit = { scope:liege_parade_enjoyment_value > 2 } custom_tooltip = cultural_festival.4200.tt.liege_likes } else_if = { limit = { scope:liege_parade_enjoyment_value >= 0 } custom_tooltip = cultural_festival.4200.tt.liege_indifferent } else = { custom_tooltip = cultural_festival.4200.tt.liege_dislikes } } scripted_effect positive_opinion_after_parade_effect = { scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = flattered_opinion opinion = 10 } } } scripted_effect negative_opinion_after_parade_effect = { scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = frustrated_opinion opinion = -10 } } } scripted_effect parade_end_effect = { #rewards for vassal dependent on parade type and if liege liked the parade if = { limit = { var:parade_type = flag:military_parade } if = { limit = { var:liege_parade_enjoyment >= 3 } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_military_parade_best_modifier years = 5 } } dynasty = { add_dynasty_prestige = minor_dynasty_prestige_gain } if = { limit = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } negative_opinion_after_parade_effect = yes } else = { positive_opinion_after_parade_effect = yes } } else_if = { limit = { OR = { var:liege_parade_enjoyment >= 0 scope:visiting_liege = { NOT = { has_character_flag = parade_liege_dissatisfaction_flag } } } } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_military_parade_best_modifier years = 5 } } dynasty = { add_dynasty_prestige = minor_dynasty_prestige_gain } } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_military_parade_modifier years = 5 } } dynasty ?= { add_dynasty_prestige = miniscule_dynasty_prestige_gain } negative_opinion_after_parade_effect = yes } } else_if = { limit = { var:parade_type = flag:civil_parade } if = { limit = { var:liege_parade_enjoyment >= 3 } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_civil_parade_best_modifier years = 5 } } add_prestige = minor_prestige_gain if = { limit = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } negative_opinion_after_parade_effect = yes } else = { positive_opinion_after_parade_effect = yes } } else_if = { limit = { OR = { var:liege_parade_enjoyment >= 0 scope:visiting_liege = { NOT = { has_character_flag = parade_liege_dissatisfaction_flag } } } } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_civil_parade_best_modifier years = 5 } } add_prestige = minor_prestige_gain } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_civil_parade_modifier years = 5 } } add_prestige = miniscule_prestige_gain negative_opinion_after_parade_effect = yes } } else_if = { limit = { var:parade_type = flag:religious_parade } if = { limit = { var:liege_parade_enjoyment >= 3 } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_religious_parade_best_modifier years = 5 } } add_piety = minor_piety_gain if = { limit = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } negative_opinion_after_parade_effect = yes } else = { positive_opinion_after_parade_effect = yes } } else_if = { limit = { OR = { var:liege_parade_enjoyment >= 0 scope:visiting_liege = { NOT = { has_character_flag = parade_liege_dissatisfaction_flag } } } } scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_religious_parade_best_modifier years = 5 } } add_piety = minor_piety_gain } else = { scope:cultural_festival_scope = { add_county_modifier = { modifier = festival_religious_parade_modifier years = 5 } } add_piety = miniscule_piety_gain negative_opinion_after_parade_effect = yes } } } scripted_effect clear_parade_variables_effect = { #clear all variables and flags remove_variable = parade_type remove_variable = parade_quality remove_variable = liege_parade_type remove_variable = liege_parade_enjoyment if = { limit = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } scope:visiting_liege = { remove_character_flag = parade_liege_dissatisfaction_flag } } } cultural_festival.4200 = { #Vassal: Do a parade, pick a type type = activity_event title = cultural_festival.4200.t desc = cultural_festival.4200.desc theme = cultural_festival left_portrait = { character = root animation = thinking } cooldown = { years = 5 } trigger = { scope:visiting_liege = { NOT = { has_character_flag = had_cultural_parade } } any_courtier = { is_available_ai_adult = yes } } immediate = { set_variable = { #used later to determine outcomes, descriptions and ai chance name = liege_parade_enjoyment value = 0 } random_list = { #decide which parade the liege likes by setting a var, used later to determine outcomes, descriptions and ai chance 1 = { modifier = { add = 10 scope:visiting_liege = { OR = { highest_skill = martial highest_skill = intrigue } } } modifier = { add = 10 scope:visiting_liege = { OR = { has_lifestyle = martial_lifestyle has_lifestyle = intrigue_lifestyle } } } set_variable = { name = liege_parade_type value = flag:military_parade } } 1 = { modifier = { add = 10 scope:visiting_liege = { OR = { highest_skill = diplomacy highest_skill = stewardship } } } modifier = { add = 10 scope:visiting_liege = { OR = { has_lifestyle = diplomacy_lifestyle has_lifestyle = stewardship_lifestyle } } } modifier = { add = 10 scope:visiting_liege.culture != location.county.culture } set_variable = { name = liege_parade_type value = flag:civil_parade } } 1 = { modifier = { add = 10 scope:visiting_liege = { highest_skill = learning } } modifier = { add = 10 scope:visiting_liege = { has_lifestyle = learning_lifestyle } } modifier = { add = 10 scope:visiting_liege.faith != location.county.faith } modifier = { add = 10 scope:visiting_liege = { has_trait = zealous } } set_variable = { name = liege_parade_type value = flag:religious_parade } } } scope:visiting_liege = { #makes sure that event does not trigger for liege with multiple vassals during the same tour add_character_flag = { flag = had_cultural_parade days = 3650 } } } option = { #pick military parade, set liege enjoyment according to parade type they like name = cultural_festival.4200.a if = { limit = { var:liege_parade_type = flag:military_parade } custom_tooltip = cultural_festival.4200.tt.liege_likes change_variable = { name = liege_parade_enjoyment add = 2 } } else_if = { limit = { var:liege_parade_type = flag:religious_parade } custom_tooltip = cultural_festival.4200.tt.liege_indifferent } else_if = { limit = { var:liege_parade_type = flag:civil_parade } custom_tooltip = cultural_festival.4200.tt.liege_dislikes change_variable = { name = liege_parade_enjoyment add = -2 } } set_variable = { name = parade_type value = flag:military_parade } stress_impact = { base = minor_stress_impact_loss brave = minor_stress_impact_loss craven = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 var:liege_parade_type = flag:military_parade } } } option = { #pick civil parade, set liege enjoyment according to parade type they like name = cultural_festival.4200.b if = { limit = { var:liege_parade_type = flag:civil_parade } custom_tooltip = cultural_festival.4200.tt.liege_likes change_variable = { name = liege_parade_enjoyment add = 2 } } else_if = { limit = { var:liege_parade_type = flag:military_parade } custom_tooltip = cultural_festival.4200.tt.liege_indifferent } else_if = { limit = { var:liege_parade_type = flag:religious_parade } custom_tooltip = cultural_festival.4200.tt.liege_dislikes change_variable = { name = liege_parade_enjoyment add = -2 } } set_variable = { name = parade_type value = flag:civil_parade } stress_impact = { base = minor_stress_impact_loss just = minor_stress_impact_loss arbitrary = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 var:liege_parade_type = flag:civil_parade } } } option = { #pick religious parade, set liege enjoyment according to parade type they like name = cultural_festival.4200.c if = { limit = { var:liege_parade_type = flag:religious_parade } custom_tooltip = cultural_festival.4200.tt.liege_likes change_variable = { name = liege_parade_enjoyment add = 2 } } else_if = { limit = { var:liege_parade_type = flag:civil_parade } custom_tooltip = cultural_festival.4200.tt.liege_indifferent } else_if = { limit = { var:liege_parade_type = flag:military_parade } custom_tooltip = cultural_festival.4200.tt.liege_dislikes change_variable = { name = liege_parade_enjoyment add = -2 } } set_variable = { name = parade_type value = flag:religious_parade } stress_impact = { base = minor_stress_impact_loss zealous = minor_stress_impact_loss cynical = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 var:liege_parade_type = flag:religious_parade } } } after = { trigger_event = cultural_festival.4201 } } cultural_festival.4201 = { #Vassal: Choose the quality of the parade type = activity_event title = cultural_festival.4201.t desc = { first_valid = { triggered_desc = { trigger = { var:parade_type = flag:military_parade } desc = cultural_festival.4201.desc_military } triggered_desc = { trigger = { var:parade_type = flag:civil_parade } desc = cultural_festival.4201.desc_civil } triggered_desc = { trigger = { var:parade_type = flag:religious_parade } desc = cultural_festival.4201.desc_religious } } desc = cultural_festival.4201.desc_end } theme = cultural_festival left_portrait = { character = root animation = worry } right_portrait = { character = scope:coordinator_scope animation = thinking } immediate = { if = { #set proper councillor as the parade coordinator limit = { var:parade_type = flag:military_parade exists = cp:councillor_marshal } cp:councillor_marshal = { save_scope_as = coordinator_scope } } else_if = { limit = { var:parade_type = flag:civil_parade exists = cp:councillor_steward } cp:councillor_steward = { save_scope_as = coordinator_scope } } else_if = { limit = { var:parade_type = flag:religious_parade exists = cp:councillor_court_chaplain } cp:councillor_court_chaplain = { save_scope_as = coordinator_scope } } else = { random_courtier = { limit = { is_available_ai_adult = yes } save_scope_as = coordinator_scope } } set_variable = { #used later to determine outcomes and descriptions name = parade_quality value = 0 } } option = { #make the best parade possible name = { trigger = { var:parade_type = flag:military_parade } text = cultural_festival.4201.a.military } name = { trigger = { var:parade_type = flag:civil_parade } text = cultural_festival.4201.a.civil } name = { trigger = { var:parade_type = flag:religious_parade } text = cultural_festival.4201.a.religious } save_temporary_scope_value_as = { #value needed to set proper custom tooltip hinting how it will affect your liege name = liege_parade_enjoyment_value value = { value = var:liege_parade_enjoyment add = 3 } } liege_parade_enjoyment_custom_tt_effect = yes remove_treasury_or_gold = major_treasury_or_gold_value change_variable = { name = parade_quality add = 3 } change_variable = { name = liege_parade_enjoyment add = var:parade_quality } stress_impact = { arrogant = minor_stress_impact_loss ambitious = minor_stress_impact_loss gluttonous = minor_stress_impact_loss humble = minor_stress_impact_gain greedy = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = arrogant has_trait = ambitious has_trait = gluttonous } } modifier = { add = 10 AND = { has_trait = zealous var:parade_type = flag:religious_parade } } modifier = { factor = 0 short_term_treasury_or_gold < major_treasury_or_gold_value } } } option = { #make an ok parade name = cultural_festival.4201.b save_temporary_scope_value_as = { #value needed to set proper custom tooltip hinting how it will affect your liege name = liege_parade_enjoyment_value value = { value = var:liege_parade_enjoyment add = 2 } } liege_parade_enjoyment_custom_tt_effect = yes remove_treasury_or_gold = minor_treasury_or_gold_value change_variable = { name = parade_quality add = 2 } change_variable = { name = liege_parade_enjoyment add = var:parade_quality } stress_impact = { temperate = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 10 has_trait = temperate } modifier = { factor = 0 short_term_treasury_or_gold < minor_treasury_or_gold_value } } } option = { #make a poor parade name = cultural_festival.4201.c save_temporary_scope_value_as = { #value needed to set proper custom tooltip hinting how it will affect your liege name = liege_parade_enjoyment_value value = { value = var:liege_parade_enjoyment add = -1 } } liege_parade_enjoyment_custom_tt_effect = yes add_prestige = miniscule_prestige_loss change_variable = { name = parade_quality add = -1 } change_variable = { name = liege_parade_enjoyment add = var:parade_quality } stress_impact = { base = minor_stress_impact_loss greedy = minor_stress_impact_loss cynical = minor_stress_impact_loss humble = minor_stress_impact_loss ambitious = minor_stress_impact_gain arrogant = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = greedy has_trait = cynical has_trait = humble } } modifier = { add = 10 AND = { has_trait = cynical var:parade_type = flag:religious_parade } } } } after = { scope:visiting_liege = { trigger_event = { id = cultural_festival.4202 days = 1 } } } } cultural_festival.4202 = { #Liege: Attend the parade and like it or not type = activity_event title = cultural_festival.4202.t desc = { first_valid = { triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:military_parade scope:stop_host_scope.var:parade_quality > 2 } desc = cultural_festival.4202.desc_military_best } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:military_parade scope:stop_host_scope.var:parade_quality >= 0 } desc = cultural_festival.4202.desc_military_good } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:military_parade scope:stop_host_scope.var:parade_quality < 0 } desc = cultural_festival.4202.desc_military_worst } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:civil_parade scope:stop_host_scope.var:parade_quality > 2 } desc = cultural_festival.4202.desc_civil_best } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:civil_parade scope:stop_host_scope.var:parade_quality >= 0 } desc = cultural_festival.4202.desc_civil_good } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:civil_parade scope:stop_host_scope.var:parade_quality < 0 } desc = cultural_festival.4202.desc_civil_worst } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.var:parade_quality > 2 } desc = cultural_festival.4202.desc_religious_best } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.var:parade_quality >= 0 } desc = cultural_festival.4202.desc_religious_good } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.var:parade_quality < 0 } desc = cultural_festival.4202.desc_religious_worst } } first_valid = { triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.faith != scope:visiting_liege.faith scope:stop_host_scope.var:parade_quality >= 0 } desc = cultural_festival.4202.desc_religious_different_faith_good } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.faith = scope:visiting_liege.faith scope:stop_host_scope.var:parade_quality >= 0 } desc = cultural_festival.4202.desc_religious_same_faith_good } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.faith != scope:visiting_liege.faith scope:stop_host_scope.var:parade_quality < 0 } desc = cultural_festival.4202.desc_religious_different_faith_bad } triggered_desc = { trigger = { scope:stop_host_scope.var:parade_type = flag:religious_parade scope:stop_host_scope.faith = scope:visiting_liege.faith scope:stop_host_scope.var:parade_quality < 0 } desc = cultural_festival.4202.desc_religious_same_faith_bad } } } theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:coordinator_scope animation = happiness } option = { #you enjoy the parade, for ai liege_parade_enjoyment var decides name = { trigger = { has_activity_intent = reduce_stress_intent } text = cultural_festival.4202.a.revelry } name = cultural_festival.4202.a parade_liege_enjoyment_effect = yes if = { limit = { has_activity_intent = reduce_stress_intent } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { base = minor_stress_impact_loss gregarious = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 100 scope:stop_host_scope.var:liege_parade_enjoyment >= 0 } } } option = { #you don't enjoy the parade, for ai liege_parade_enjoyment var decides name = cultural_festival.4202.b parade_liege_dissatisfaction_effect = yes stress_impact = { base = minor_stress_impact_loss callous = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 100 scope:stop_host_scope.var:liege_parade_enjoyment < 0 } modifier = { factor = 0 has_activity_intent = reduce_stress_intent } } } after = { scope:stop_host_scope = { trigger_event = { id = cultural_festival.4203 days = 1 } } } } cultural_festival.4203 = { #Vassal: Summary of the parade type = activity_event title = cultural_festival.4203.t desc = { first_valid = { triggered_desc = { trigger = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } desc = cultural_festival.4203.desc_failure } desc = cultural_festival.4203.desc_success } } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } animation = anger } animation = happiness } right_portrait = { character = scope:visiting_liege triggered_animation = { trigger = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } animation = disapproval } animation = admiration } immediate = { #display what was the liege reaction to the parade, based on option chosen in previous event if = { limit = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } show_as_tooltip = { parade_liege_dissatisfaction_effect = yes } } else = { show_as_tooltip = { parade_liege_enjoyment_effect = yes } } } option = { #effect is determined by previous actions, mainly liege_parade_enjoyment or overide by player name = { trigger = { scope:visiting_liege = { NOT = { has_character_flag = parade_liege_dissatisfaction_flag } } } text = cultural_festival.4203.a.success } name = { trigger = { scope:visiting_liege = { has_character_flag = parade_liege_dissatisfaction_flag } } text = cultural_festival.4203.a.failure } parade_end_effect = yes if = { limit = { scope:visiting_liege = { NOT = { has_character_flag = parade_liege_dissatisfaction_flag } } } stress_impact = { base = major_stress_impact_loss } } else = { stress_impact = { base = minor_stress_impact_loss } } } after = { clear_parade_variables_effect = yes } } ###################### ## Bilateral: Vassal and Liege exchange gifts; later they can decide to check up on them ## 4300-4312 ## by Arkadiusz Majewski ###################### scripted_effect create_cultural_artifact_effect = { #create a random artifact to possibly give as a gift random_list = { 10 = { create_artifact_weapon_effect = { OWNER = root CREATOR = root SET_WEAPON_TYPE = flag:no } } 10 = { create_artifact_armor_effect = { OWNER = root CREATOR = root SET_ARMOR_TYPE = flag:no } } 10 = { create_artifact_regalia_effect = { OWNER = root SMITH = root } } 10 = { create_artifact_crown_effect = { OWNER = root SMITH = root } } 10 = { create_artifact_brooch_effect = { OWNER = root SMITH = root } } 10 = { create_artifact_book_effect = { OWNER = root CREATOR = root SET_SUBJECT = flag:no SET_TOPIC = flag:no } } } scope:newly_created_artifact = { set_artifact_description = artifact_cultural_gift_desc } } scripted_effect choose_gift_effect = { #used only in tooltip to show the gift receiver what happened if = { limit = { exists = $CHOSEN_GIFT$ } if = { limit = { $CHOSEN_GIFT$ = flag:gift_existing_artifact } scope:existing_artifact = { set_owner = root } } else_if = { limit = { $CHOSEN_GIFT$ = flag:gift_newly_created_artifact } scope:newly_created_artifact = { set_owner = root } } else_if = { limit = { $CHOSEN_GIFT$ = flag:gift_gold } $GIFT_GIVER$ = { pay_short_term_gold = { target = root gold = minor_gold_value } } } } } scripted_effect create_giving_gift_memory_effect = { #create a memory of giving a gift create_character_memory = { type = gave_cultural_gift_memory participants = { gift_receiver = $GIFT_RECEIVER$ } } if = { limit = { exists = scope:new_memory } scope:new_memory = { set_variable = { name = gift_type value = scope:gifted_artifact } if = { limit = { exists = var:gift_type } #To prevent 'unused except in loc' errors } } } } scripted_effect give_artifact_gift_opinion_effect = { if = { limit = { root = scope:visiting_liege } scope:visiting_liege = { add_opinion = { target = scope:stop_host_scope modifier = gift_artifact_opinion opinion = 30 } } } else = { scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = gift_artifact_opinion opinion = 30 } } } } scripted_effect give_gold_gift_opinion_effect = { if = { limit = { root = scope:visiting_liege } scope:visiting_liege = { add_opinion = { target = scope:stop_host_scope modifier = gift_opinion opinion = 15 } } } else = { scope:stop_host_scope = { add_opinion = { target = scope:visiting_liege modifier = gift_opinion opinion = 15 } } } } scripted_trigger vassal_gift_giving_memory_trigger = { #check if vassal remembers giving liege a gift has_memory_type = gave_cultural_gift_memory any_memory_participant = { this = scope:visiting_liege } } scripted_effect equip_gifted_artifact_effect = { #equip the gift if possible if = { limit = { can_equip_artifact = scope:gifted_artifact } custom_tooltip = cultural_festival.4301.a.tt scope:gifted_artifact = { equip_artifact_to_owner_replace = yes } } } scripted_effect delete_new_artifact_effect = { #destroy newly created artifact if it wasn't picked as a gift destroy_artifact = scope:newly_created_artifact } cultural_festival.4300 = { #Vassal: Decide which gift to give type = activity_event title = cultural_festival.4300.t desc = { desc = cultural_festival.4300.desc triggered_desc = { trigger = { exists = scope:existing_artifact } desc = cultural_festival.4300.desc_existing_artifact } } theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:visiting_liege animation = boredom } artifact = { trigger = { exists = scope:existing_artifact } target = scope:existing_artifact position = lower_left_portrait } artifact = { trigger = { exists = scope:newly_created_artifact } target = scope:newly_created_artifact position = lower_center_portrait } cooldown = { years = 5 } trigger = { #check if you have a memory of giving your liege a gift root = { NOT = { any_memory = { vassal_gift_giving_memory_trigger = yes } } } } immediate = { if = { #look for any insignificant artifact you have and save it as something to gift limit = { has_any_artifact = yes any_character_artifact = { category = inventory } } random_character_artifact = { limit = { category = inventory NOT = { has_variable = historical_unique_artifact } } save_scope_as = existing_artifact } } hidden_effect = { #create new artifact and save it as something to gift create_cultural_artifact_effect = yes } add_character_flag = { #to make sure to not trigger 4310 in the same tour you gave the gift flag = gave_gift_recently_flag days = 1825 } } option = { #gift an already nonsignificant existing artifact from root inventory trigger = { exists = scope:existing_artifact } name = cultural_festival.4300.a scope:existing_artifact = { set_variable = { name = suppress_artifact_notifications value = yes days = 1 } set_variable = { name = gifted_artifact value = yes days = 1825 } set_owner = { target = scope:visiting_liege history = { location = scope:stop_host_scope.location actor = scope:stop_host_scope recipient = scope:visiting_liege type = given } } save_scope_as = gifted_artifact } save_scope_value_as = { #used later to determine outcomes and description name = vassal_chosen_gift value = flag:gift_existing_artifact } create_giving_gift_memory_effect = { GIFT_RECEIVER = scope:visiting_liege } #remember that you gave a gift to liege, used later to trigger a follow up event show_as_tooltip = { give_artifact_gift_opinion_effect = yes } hidden_effect = { #delete the newly created artifact, because it wasn't gifted away delete_new_artifact_effect = yes } scope:visiting_liege = { trigger_event = cultural_festival.4301 } custom_tooltip = cultural_festival.4300.tt stress_impact = { compassionate = minor_stress_impact_loss greedy = minor_stress_impact_loss } ai_chance = { base = 10 } } option = { #gift the newly created artifact name = cultural_festival.4300.b remove_short_term_gold = minor_gold_value scope:newly_created_artifact = { set_variable = { name = suppress_artifact_notifications value = yes days = 1 } set_variable = { name = gifted_artifact value = yes days = 1825 } set_owner = { target = scope:visiting_liege history = { location = scope:visiting_liege.location actor = scope:stop_host_scope recipient = scope:visiting_liege type = given } } save_scope_as = gifted_artifact } save_scope_value_as = { #used later to determine outcomes and description name = vassal_chosen_gift value = flag:gift_newly_created_artifact } create_giving_gift_memory_effect = { GIFT_RECEIVER = scope:visiting_liege } #remember that you gave a gift to liege, used later to trigger a follow up event show_as_tooltip = { give_artifact_gift_opinion_effect = yes } scope:visiting_liege = { trigger_event = cultural_festival.4301 } custom_tooltip = cultural_festival.4300.tt stress_impact = { generous = minor_stress_impact_loss greedy = minor_stress_impact_gain } ai_chance = { base = 5 modifier = { factor = 0 has_trait = greedy short_term_gold < minor_gold_value } } } option = { #gift just gold name = cultural_festival.4300.c pay_short_term_gold = { target = scope:visiting_liege gold = minor_gold_value } save_scope_value_as = { #used later to determine outcomes and description name = vassal_chosen_gift value = flag:gift_gold } show_as_tooltip = { give_gold_gift_opinion_effect = yes } hidden_effect = { #delete the newly created artifact, because it wasn't gifted away delete_new_artifact_effect = yes } scope:visiting_liege = { trigger_event = cultural_festival.4301 } custom_tooltip = cultural_festival.4300.tt stress_impact = { cynical = minor_stress_impact_loss generous = major_stress_impact_loss greedy = major_stress_impact_gain } ai_chance = { #this should be the least likely option when player is the gift receiver to ensure the follow up event triggering for them base = 1 modifier = { factor = 0 has_trait = greedy short_term_gold < minor_gold_value } } } option = { #no, i don't think I will name = cultural_festival.4300.d hidden_effect = { delete_new_artifact_effect = yes } stress_impact = { cynical = major_stress_impact_loss generous = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 has_trait = cynical } } } } cultural_festival.4301 = { #Liege: Get the gift from vassal and decide to keep it or destroy it type = activity_event title = cultural_festival.4301.t desc = { desc = cultural_festival.4301.desc first_valid = { triggered_desc = { trigger = { scope:vassal_chosen_gift = flag:gift_gold } desc = cultural_festival.4301.desc_gold } desc = cultural_festival.4301.desc_artifact } } theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:stop_host_scope animation = happiness } artifact = { trigger = { exists = scope:gifted_artifact } target = scope:gifted_artifact position = lower_center_portrait } immediate = { #display root what was the gift show_as_tooltip = { choose_gift_effect = { CHOSEN_GIFT = scope:vassal_chosen_gift GIFT_GIVER = scope:stop_host_scope } } give_artifact_gift_opinion_effect = yes } option = { #keep it, equip it if possible name = cultural_festival.4301.a trigger = { NOT = { scope:vassal_chosen_gift = flag:gift_gold } } equip_gifted_artifact_effect = yes scope:gifted_artifact = { set_variable = { name = received_as_cultural_gift value = scope:vassal_chosen_gift } } stress_impact = { trusting = minor_stress_impact_loss humble = minor_stress_impact_loss paranoid = minor_stress_impact_gain arrogant = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = honest has_trait = just } } modifier = { add = 100 OR = { has_relation_friend = scope:stop_host_scope has_relation_best_friend = scope:stop_host_scope has_relation_lover = scope:stop_host_scope has_relation_soulmate = scope:stop_host_scope } } } } option = { #get rid of the gift, quietly name = cultural_festival.4301.b trigger = { NOT = { scope:vassal_chosen_gift = flag:gift_gold } } destroy_artifact = scope:gifted_artifact add_gold = minor_gold_value stress_impact = { trusting = minor_stress_impact_gain humble = minor_stress_impact_gain paranoid = major_stress_impact_loss arrogant = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 50 has_trait = paranoid } modifier = { add = 10 OR = { has_trait = deceitful has_trait = cynical } } modifier = { add = 100 OR = { has_relation_rival = scope:stop_host_scope has_relation_nemesis = scope:stop_host_scope } } } } option = { #yay, you got gold! name = cultural_festival.4301.c trigger = { scope:vassal_chosen_gift = flag:gift_gold } give_gold_gift_opinion_effect = yes stress_impact = { greedy = major_stress_impact_loss paranoid = minor_stress_impact_loss } ai_chance = { #actually, doesn't matter as it is the only option if you got gifted gold base = 1 } } after = { trigger_event = cultural_festival.4302 custom_tooltip = cultural_festival.4301.tt } } cultural_festival.4302 = { #Liege: Pick the gift for Vassal, mirror of cultural_festival.4300 type = activity_event title = cultural_festival.4302.t desc = { desc = cultural_festival.4302.desc triggered_desc = { trigger = { exists = scope:existing_artifact } desc = cultural_festival.4302.desc_existing_artifact } first_valid = { triggered_desc = { trigger = { scope:vassal_chosen_gift = flag:gift_gold } desc = cultural_festival.4302.desc_gifted_gold } desc = cultural_festival.4302.desc_gold } } theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:stop_host_scope animation = happiness } artifact = { trigger = { exists = scope:existing_artifact } target = scope:existing_artifact position = lower_left_portrait } artifact = { trigger = { exists = scope:newly_created_artifact } target = scope:newly_created_artifact position = lower_center_portrait } immediate = { if = { limit = { root = { has_any_artifact = yes any_character_artifact = { category = inventory NOT = { has_variable = historical_unique_artifact } NOT = { has_variable = received_as_cultural_gift } #make sure you don't give back the thing you just got } } } random_character_artifact = { limit = { category = inventory artifact_owner = root NOT = { has_variable = historical_unique_artifact } NOT = { has_variable = received_as_cultural_gift } } save_scope_as = existing_artifact } } hidden_effect = { create_cultural_artifact_effect = yes } add_character_flag = { #to make sure to not trigger 4310 in the same tour you gave the gift flag = gave_gift_recently_flag days = 720 } } option = { #gift an already existing nonsignificant artifact from root inventory trigger = { exists = scope:existing_artifact } name = cultural_festival.4302.a scope:existing_artifact = { set_variable = { name = suppress_artifact_notifications value = yes days = 1 } set_variable = { name = gifted_artifact value = yes days = 1825 } set_owner = { target = scope:stop_host_scope history = { location = scope:stop_host_scope.location actor = scope:visiting_liege recipient = scope:stop_host_scope type = given } } save_scope_as = gifted_artifact } save_scope_value_as = { name = liege_chosen_gift value = flag:gift_existing_artifact } create_giving_gift_memory_effect = { GIFT_RECEIVER = scope:stop_host_scope } show_as_tooltip = { give_artifact_gift_opinion_effect = yes } hidden_effect = { delete_new_artifact_effect = yes } scope:stop_host_scope = { trigger_event = cultural_festival.4303 } stress_impact = { compassionate = minor_stress_impact_loss greedy = minor_stress_impact_loss } ai_chance = { base = 10 } } option = { #gift the newly created artifact name = cultural_festival.4302.b remove_short_term_gold = minor_gold_value scope:newly_created_artifact = { set_variable = { name = suppress_artifact_notifications value = yes days = 1 } set_variable = { name = gifted_artifact value = yes days = 1825 } set_owner = { target = scope:stop_host_scope history = { location = scope:stop_host_scope.location actor = scope:visiting_liege recipient = scope:stop_host_scope type = given } } save_scope_as = gifted_artifact } save_scope_value_as = { name = liege_chosen_gift value = flag:gift_newly_created_artifact } create_giving_gift_memory_effect = { GIFT_RECEIVER = scope:stop_host_scope } show_as_tooltip = { give_artifact_gift_opinion_effect = yes } scope:stop_host_scope = { trigger_event = cultural_festival.4303 } stress_impact = { generous = minor_stress_impact_loss greedy = minor_stress_impact_gain } ai_chance = { base = 5 modifier = { factor = 0 has_trait = greedy short_term_gold < minor_gold_value } } } option = { #gift just gold name = cultural_festival.4302.c pay_short_term_gold = { target = scope:stop_host_scope gold = minor_gold_value } save_scope_value_as = { name = liege_chosen_gift value = flag:gift_gold } show_as_tooltip = { give_gold_gift_opinion_effect = yes } hidden_effect = { delete_new_artifact_effect = yes } scope:stop_host_scope = { trigger_event = cultural_festival.4303 } stress_impact = { cynical = minor_stress_impact_loss generous = major_stress_impact_loss greedy = major_stress_impact_gain } ai_chance = { base = 1 modifier = { factor = 0 has_trait = greedy short_term_gold < minor_gold_value } } } option = { #no, I don't think I will name = cultural_festival.4302.d scope:stop_host_scope = { send_interface_toast = { title = cultural_festival.4302.d left_icon = scope:visiting_liege add_opinion = { target = scope:visiting_liege modifier = rude_opinion } } } hidden_effect = { delete_new_artifact_effect = yes } stress_impact = { cynical = major_stress_impact_loss generous = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 has_trait = cynical } } } } cultural_festival.4303 = { #Vassal: Get the gift from liege, mirror of cultural_festival.4301 type = activity_event title = cultural_festival.4303.t desc = { desc = cultural_festival.4303.desc first_valid = { triggered_desc = { trigger = { scope:liege_chosen_gift = flag:gift_gold } desc = cultural_festival.4303.desc_gold } desc = cultural_festival.4303.desc_artifact } } theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:visiting_liege animation = happiness } artifact = { trigger = { exists = scope:gifted_artifact } target = scope:gifted_artifact position = lower_center_portrait } immediate = { show_as_tooltip = { choose_gift_effect = { CHOSEN_GIFT = scope:liege_chosen_gift GIFT_GIVER = scope:visiting_liege } } give_artifact_gift_opinion_effect = yes } option = { name = cultural_festival.4303.a trigger = { NOT = { scope:liege_chosen_gift = flag:gift_gold } } equip_gifted_artifact_effect = yes set_variable = { name = received_as_cultural_gift value = scope:liege_chosen_gift } stress_impact = { trusting = minor_stress_impact_loss humble = minor_stress_impact_loss paranoid = minor_stress_impact_gain arrogant = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = honest has_trait = just } } modifier = { add = 100 OR = { has_relation_friend = scope:stop_host_scope has_relation_best_friend = scope:stop_host_scope has_relation_lover = scope:stop_host_scope has_relation_soulmate = scope:stop_host_scope } } } } option = { name = cultural_festival.4303.b trigger = { NOT = { scope:liege_chosen_gift = flag:gift_gold } } destroy_artifact = scope:gifted_artifact add_gold = minor_gold_value stress_impact = { trusting = minor_stress_impact_gain humble = minor_stress_impact_gain paranoid = major_stress_impact_loss arrogant = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 50 has_trait = paranoid } modifier = { add = 10 OR = { has_trait = deceitful has_trait = cynical } } modifier = { add = 100 OR = { has_relation_rival = scope:stop_host_scope has_relation_nemesis = scope:stop_host_scope } } } } option = { name = cultural_festival.4303.c trigger = { scope:liege_chosen_gift = flag:gift_gold } give_gold_gift_opinion_effect = yes stress_impact = { greedy = major_stress_impact_loss paranoid = minor_stress_impact_loss } ai_chance = { base = 1 } } } scripted_trigger liege_gift_giving_memory_trigger = { #check if liege remembers giving vassal a gift has_memory_type = gave_cultural_gift_memory any_memory_participant = { this = scope:stop_host_scope } } scripted_effect displayed_proper_gift_effect = { #progress towards friend and gain of cultural acceptance if possible scope:gift_receiver = { send_interface_toast = { title = cultural_festival.4311.proper_gift_taost left_icon = scope:gift_receiver right_icon = scope:giving_gift_memory_owner scope:giving_gift_memory_owner = { progress_towards_friend_effect = { CHARACTER = scope:gift_receiver OPINION = 30 REASON = friend_respected_foreign_culture } } scope:visiting_liege = { increase_tour_success_effect = { POINTS = 1 } } if = { limit = { scope:gift_receiver.culture != scope:giving_gift_memory_owner.culture } scope:gift_receiver.culture = { change_cultural_acceptance = { target = scope:giving_gift_memory_owner.culture value = major_cultural_acceptance_gain desc = cultural_acceptance_embraced_festival } } } } } } scripted_effect displayed_no_gift_effect = { #progress towards rivalry and loss of cultural acceptance if possible scope:gift_receiver = { send_interface_toast = { title = cultural_festival.4311.no_gift_toast left_icon = scope:gift_receiver right_icon = scope:giving_gift_memory_owner scope:giving_gift_memory_owner = { progress_towards_rival_effect = { CHARACTER = scope:gift_receiver OPINION = -30 REASON = rival_abused_subjects_hospitality } } if = { limit = { scope:gift_receiver.culture != scope:giving_gift_memory_owner.culture } scope:gift_receiver.culture = { change_cultural_acceptance = { target = scope:giving_gift_memory_owner.culture value = major_cultural_acceptance_loss desc = cultural_acceptance_embraced_festival } } } } } } scripted_effect set_var_gift_liege_response_effect = { #sets proper flag for var:gift_liege_response set_variable = { name = gift_liege_response value = $FLAG$ } } scripted_effect liege_failed_hook_effect = { #add hook, loyalty trait or prestige if possible scope:gift_receiver = { send_interface_toast = { title = cultural_festival.4311.liege_failed_toast left_icon = scope:gift_receiver right_icon = scope:giving_gift_memory_owner if = { limit = { scope:giving_gift_memory_owner = { can_add_hook = { target = scope:gift_receiver type = loyalty_hook } } } scope:giving_gift_memory_owner = { add_hook = { target = scope:gift_receiver type = loyalty_hook } add_prestige = miniscule_prestige_gain } } else = { if = { limit = { scope:stop_host_scope = { NOT = { has_trait = loyal } } } scope:stop_host_scope = { add_trait = loyal } } add_prestige = medium_prestige_gain } scope:visiting_liege = { if = { limit = { involved_activity ?= { has_activity_option = { category = special_type option = tour_type_intimidation } } } increase_tour_success_effect = { POINTS = 1 } } } } } } cultural_festival.4310 = { #Decide if you want to ask to see the gifts type = activity_event title = cultural_festival.4310.t desc = cultural_festival.4310.desc theme = cultural_festival left_portrait = { character = root animation = thinking } right_portrait = { character = scope:gift_receiver animation = boredom } cooldown = { years = 5 } trigger = { OR = { AND = { root = scope:visiting_liege any_memory = { liege_gift_giving_memory_trigger = yes } NOT = { has_character_flag = gave_gift_recently_flag } #to make sure to not trigger in the same tour you gave the gift } AND = { root = scope:stop_host_scope any_memory = { vassal_gift_giving_memory_trigger = yes } NOT = { has_character_flag = gave_gift_recently_flag } #to make sure to not trigger in the same tour you gave the gift } } } immediate = { random_memory = { limit = { OR = { AND = { root = scope:visiting_liege liege_gift_giving_memory_trigger = yes } AND = { root = scope:stop_host_scope vassal_gift_giving_memory_trigger = yes } } } save_scope_as = giving_gift_memory } scope:giving_gift_memory.memory_participant:gift_receiver = { save_scope_as = gift_receiver } if = { limit = { exists = scope:giving_gift_memory.var:gift_type } scope:giving_gift_memory.var:gift_type = { save_scope_as = gifted_artifact } } save_scope_as = giving_gift_memory_owner } option = { #Where is my gift? Is it safe, is it all right? name = cultural_festival.4310.a custom_tooltip = cultural_festival.4310.a.tt scope:gift_receiver = { trigger_event = { id = cultural_festival.4311 days = 1 } } stress_impact = { arrogant = major_stress_impact_loss paranoid = minor_stress_impact_loss content = minor_stress_impact_gain shy = minor_stress_impact_gain } ai_chance = { base = 1 } } option = { #Don't ask about it name = cultural_festival.4310.b add_piety = miniscule_piety_gain stress_impact = { arrogant = major_stress_impact_gain paranoid = minor_stress_impact_gain content = minor_stress_impact_loss shy = minor_stress_impact_loss } ai_chance = { #set to 0, because it guarantees trigger of the next event for player base = 0 } } } cultural_festival.4311 = { #Respond to gift accordingly, if you still have the gifts or not type = activity_event title = cultural_festival.4311.t desc = { desc = cultural_festival.4311.desc triggered_desc = { trigger = { NOT = { exists = scope:old_gift } } desc = cultural_festival.4311.desc.lost_gift } first_valid = { triggered_desc = { trigger = { exists = scope:old_gift } desc = cultural_festival.4311.desc.old_gift } triggered_desc = { trigger = { exists = scope:decoy_gift } desc = cultural_festival.4311.desc.decoy_gift } } triggered_desc = { trigger = { OR = { NOT = { exists = scope:decoy_gift } NOT = { exists = scope:old_gift } } } desc = cultural_festival.4311.desc.no_gift } } theme = cultural_festival left_portrait = { character = root animation = worry } right_portrait = { character = scope:giving_gift_memory_owner animation = happiness } artifact = { trigger = { exists = scope:old_gift } target = scope:old_gift position = lower_center_portrait } artifact = { trigger = { exists = scope:decoy_gift } target = scope:decoy_gift position = lower_right_portrait } immediate = { if = { limit = { has_any_artifact = yes any_character_artifact = { has_variable = received_as_cultural_gift } } random_character_artifact = { limit = { has_variable = received_as_cultural_gift } save_scope_as = old_gift } } else_if = { limit = { has_any_artifact = yes } random_character_artifact = { save_scope_as = decoy_gift } } } option = { #show the gift you got, if you still have it around name = cultural_festival.4311.a trigger = { exists = scope:old_gift } show_as_tooltip = { random_list = { 50 = { show_chance = no desc = cultural_festival.4311.a.success displayed_proper_gift_effect = yes } 50 = { show_chance = no desc = cultural_festival.4311.a.failure liege_failed_hook_effect = yes } } } set_var_gift_liege_response_effect = { FLAG = flag:show_real_gift_flag } stress_impact = { deceitful = minor_stress_impact_gain paranoid = minor_stress_impact_gain honest = minor_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 10 has_trait = honest } modifier = { add = -10 OR = { has_trait = deceitful has_trait = paranoid } } } } option = { #show a decoy gift, if you have any other artifact name = cultural_festival.4311.b trigger = { exists = scope:decoy_gift } duel = { skill = intrigue target = scope:giving_gift_memory_owner 50 = { #you win desc = cultural_festival.4311.b.success compare_modifier = { value = scope:duel_value multiplier = 2 } set_var_gift_liege_response_effect = { FLAG = flag:decoy_gift_succeeded_flag } show_as_tooltip = { displayed_proper_gift_effect = yes } } 50 = { desc = cultural_festival.4311.b.failure compare_modifier = { value = scope:duel_value multiplier = -2 } set_var_gift_liege_response_effect = { FLAG = flag:decoy_gift_failed_flag } show_as_tooltip = { displayed_no_gift_effect = yes } } } stress_impact = { deceitful = major_stress_impact_loss cynical = minor_stress_impact_loss honest = major_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = deceitful has_trait = cynical } } modifier = { add = -10 has_trait = honest } } } option = { #try to convince that they never gave you anything name = cultural_festival.4311.c trigger = { OR = { NOT = { exists = scope:decoy_gift } NOT = { exists = scope:old_gift } } } duel = { skill = diplomacy target = scope:giving_gift_memory_owner 50 = { #you win desc = cultural_festival.4311.c.success compare_modifier = { value = scope:duel_value multiplier = 2 } show_as_tooltip = { displayed_proper_gift_effect = yes } set_var_gift_liege_response_effect = { FLAG = flag:no_gift_succeeded_flag } } 50 = { desc = cultural_festival.4311.c.failure compare_modifier = { value = scope:duel_value multiplier = -2 } set_var_gift_liege_response_effect = { FLAG = flag:no_gift_failed_flag } show_as_tooltip = { displayed_no_gift_effect = yes } } } stress_impact = { stubborn = minor_stress_impact_loss deceitful = major_stress_impact_loss cynical = minor_stress_impact_loss honest = major_stress_impact_gain } ai_chance = { base = 1 modifier = { add = 10 OR = { has_trait = deceitful has_trait = cynical has_trait = stubborn } } modifier = { add = -10 has_trait = honest } } } option = { #tell them you no longer have it name = cultural_festival.4311.d trigger = { NOT = { exists = scope:old_gift } } set_var_gift_liege_response_effect = { FLAG = flag:liege_lost_gift_flag } show_as_tooltip = { add_prestige = minor_prestige_loss } stress_impact = { deceitful = minor_stress_impact_gain honest = major_stress_impact_loss } ai_chance = { base = 1 modifier = { add = 10 has_trait = honest } modifier = { add = -10 has_trait = deceitful } } } after = { scope:giving_gift_memory_owner = { trigger_event = cultural_festival.4312 } } } cultural_festival.4312 = { #Vassal: Liege shows you a gift, or not type = activity_event title = cultural_festival.4312.t desc = { desc = cultural_festival.4312.desc first_valid = { triggered_desc = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag } desc = cultural_festival.4312.desc.decoy_gift_succeeded } triggered_desc = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag } desc = cultural_festival.4312.desc.decoy_gift_failed } triggered_desc = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag } desc = cultural_festival.4312.desc.no_gift_succeeded } triggered_desc = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag } desc = cultural_festival.4312.desc.no_gift_failed } triggered_desc = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } desc = cultural_festival.4312.desc.liege_lost_gift } desc = cultural_festival.4312.desc.show_real_gift_flag } } theme = cultural_festival left_portrait = { character = root triggered_animation = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag } } animation = disbelief } triggered_animation = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag } } animation = anger } triggered_animation = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } animation = sadness } animation = happiness } right_portrait = { character = scope:gift_receiver triggered_animation = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag } } animation = schadenfreude } triggered_animation = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag } } animation = worry } triggered_animation = { trigger = { scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } animation = sadness } animation = happiness } artifact = { trigger = { exists = scope:old_gift } target = scope:old_gift position = lower_center_portrait } artifact = { trigger = { exists = scope:decoy_gift } target = scope:decoy_gift position = lower_right_portrait } option = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:show_real_gift_flag scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag } } name = { #you appreciate them holding on to your gift, display only if gift receiver shown you the real gift trigger = { exists = scope:old_gift scope:gift_receiver.var:gift_liege_response = flag:show_real_gift_flag } text = cultural_festival.4312.a } name = { #you appreciate them holding on to your gift, display only if gift receiver succeed in showing you a decoy trigger = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag } text = cultural_festival.4312.a.decoy_success } displayed_proper_gift_effect = yes stress_impact = { base = minor_stress_impact_loss compassionate = minor_stress_impact_loss } ai_chance = { base = 10 } } option = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } } name = { #you call their bluff, player only, display only if gift receiver succeed in showing you a decoy trigger = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag } text = cultural_festival.4312.b.decoy_success_holup } name = { #you're mad that they tried to trick you, display only if gift receiver failed in showing you a decoy trigger = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag } text = cultural_festival.4312.b.decoy_fail } name = { #you call their bluff, player only, display only if gift receiver succeed in convincing you about not giving a gift at all trigger = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag } text = cultural_festival.4312.b.nogift_success_holup } name = { #you're mad that they tried to trick you, display only if gift receiver failed in convincing you about not giving a gift at all trigger = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag } text = cultural_festival.4312.b.nogift_fail } name = { #you call their bluff, player only, display only if gift receiver said they lost it trigger = { scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } text = cultural_festival.4312.b.holup } displayed_no_gift_effect = yes stress_impact = { wrathful = minor_stress_impact_loss vengeful = minor_stress_impact_loss just = minor_stress_impact_loss forgiving = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { #has to be 0 in those cases, so that the tooltips and duel checks for the Player in previous event were telling the truth factor = 0 OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } } } } option = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:show_real_gift_flag #you want something in return, display only if gift receiver shown you the real gift scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag #you play along, display only if gift receiver failed in showing you a decoy scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag #you play along, display only if gift receiver failed in convincing you about not giving a gift at all } } name = cultural_festival.4312.c liege_failed_hook_effect = yes stress_impact = { callous = minor_stress_impact_loss vengeful = minor_stress_impact_loss content = minor_stress_impact_gain just = minor_stress_impact_gain forgiving = minor_stress_impact_gain } ai_chance = { base = 1 modifier = { #has to be 0 in those cases, so that the tooltips and duel checks for the Player in previous event were telling the truth factor = 0 OR = { scope:gift_receiver.var:gift_liege_response = flag:decoy_gift_failed_flag scope:gift_receiver.var:gift_liege_response = flag:no_gift_failed_flag } } } } option = { trigger = { OR = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } } name = { #you are told you never gave them anything, display only if gift receiver succeed in convincing you about not giving a gift at all trigger = { scope:gift_receiver.var:gift_liege_response = flag:no_gift_succeeded_flag } text = cultural_festival.4312.d.nogift_success } name = { #it's a pity, but it happens, display only if gift receiver said they lost it trigger = { scope:gift_receiver.var:gift_liege_response = flag:liege_lost_gift_flag } text = cultural_festival.4312.d } scope:gift_receiver = { send_interface_toast = { title = cultural_festival.4312.d left_icon = scope:gift_receiver right_icon = scope:giving_gift_memory_owner } add_prestige = minor_prestige_loss } stress_impact = { wrathful = minor_stress_impact_gain callous = minor_stress_impact_gain vengeful = minor_stress_impact_gain content = minor_stress_impact_loss just = minor_stress_impact_loss forgiving = minor_stress_impact_loss } ai_chance = { base = 1 } } after = { if = { limit = { exists = scope:gift_receiver.var:gift_liege_response } scope:gift_receiver = { remove_variable = gift_liege_response } } } }