namespace = tour_grounds_events ############################ ## Tour Mini-Activity: Tour Grounds ############################ ## Liege Events ## 6000-6999 ## by Chad Uhl ############################ # tour_grounds_events.6000 - Liege: Orgy with vassal # tour_grounds_events.6100 - Liege: Visit a Cathedral/Mosque (special building) # tour_grounds_events.6200 - Liege: Visit some farmlands (buildings) # tour_grounds_events.6201-4 - Bilateral: Child thief steals your gold in vassal's tradeport (buildings) # tour_grounds_events.6300 - Liege: Gloryhound Vassal challenges you to a sparring match ##################################################################################### ###################### ## Liege Events ## 6000-6999 ## by Chad Uhl ###################### scripted_trigger has_multiple_consorts_trigger = { any_consort = { count > 2 is_available_ai_adult = yes } } scripted_effect tour_grounds_events_6000_sex_effect = { if = { limit = { sex_opposite_of = scope:stop_host_scope } # Set up the error blocker for cheating sex, because the vassal couple might be monogamous but are consenting to the experiment here. save_scope_as = ignore_cheating_error_check had_sex_with_effect = { CHARACTER = scope:stop_host_scope PREGNANCY_CHANCE = seduce_pregnancy_chance } } if = { limit = { sex_opposite_of = scope:orgy_consort_1 } # Set up the error blocker for cheating sex, because the vassal couple might be monogamous but are consenting to the experiment here. ## Aaaand we set it up again because it gets cleaned up in the effect. save_scope_as = ignore_cheating_error_check had_sex_with_effect = { CHARACTER = scope:orgy_consort_1 PREGNANCY_CHANCE = seduce_pregnancy_chance } } if = { limit = { exists = scope:orgy_consort_2 } if = { limit = { sex_opposite_of = scope:orgy_consort_2 } # Set up the error blocker for cheating sex, because the vassal couple might be monogamous but are consenting to the experiment here. ## Aaaand we set it up again because it gets cleaned up in the effect x2. save_scope_as = ignore_cheating_error_check had_sex_with_effect = { CHARACTER = scope:orgy_consort_2 PREGNANCY_CHANCE = seduce_pregnancy_chance } } } if = { limit = { exists = scope:orgy_consort_3 } if = { limit = { sex_opposite_of = scope:orgy_consort_3 } # Set up the error blocker for cheating sex, because the vassal couple might be monogamous but are consenting to the experiment here. ## Aaaand we set it up again because it gets cleaned up in the effect x2. save_scope_as = ignore_cheating_error_check had_sex_with_effect = { CHARACTER = scope:orgy_consort_3 PREGNANCY_CHANCE = seduce_pregnancy_chance } } } # Progress towards lover if = { limit = { is_attracted_to_gender_of = scope:stop_host_scope scope:stop_host_scope = { is_attracted_to_gender_of = root } } progress_towards_lover_effect = { CHARACTER = scope:stop_host_scope REASON = lover_tour_grounds_orgy OPINION = default_lover_opinion } } if = { limit = { is_attracted_to_gender_of = scope:orgy_consort_1 scope:orgy_consort_1 = { is_attracted_to_gender_of = root } } progress_towards_lover_effect = { CHARACTER = scope:orgy_consort_1 REASON = lover_tour_grounds_orgy OPINION = default_lover_opinion } } if = { limit = { exists = scope:orgy_consort_2 is_attracted_to_gender_of = scope:orgy_consort_2 scope:orgy_consort_2 = { is_attracted_to_gender_of = root } } progress_towards_lover_effect = { CHARACTER = scope:orgy_consort_2 REASON = lover_tour_grounds_orgy OPINION = default_lover_opinion } } if = { limit = { exists = scope:orgy_consort_3 is_attracted_to_gender_of = scope:orgy_consort_3 scope:orgy_consort_3 = { is_attracted_to_gender_of = root } } progress_towards_lover_effect = { CHARACTER = scope:orgy_consort_3 REASON = lover_tour_grounds_orgy OPINION = default_lover_opinion } } } # You happen upon your vassal and their partner(s) getting steamy and they invite you to join tour_grounds_events.6000 = { type = activity_event title = tour_grounds_events.6000.t desc = { desc = tour_grounds_events.6000.desc first_valid = { triggered_desc = { trigger = { exists = scope:orgy_consort_2 exists = scope:orgy_consort_3 } desc = tour_grounds_events.6000.desc.three_consorts } desc = tour_grounds_events.6000.desc.one_consort } desc = tour_grounds_events.6000.desc.outro } theme = tour_grounds override_background = { reference = bedchamber } left_portrait = { character = root animation = stunned } center_portrait = { character = scope:stop_host_scope animation = wedding_groom_right } right_portrait = { character = scope:orgy_consort_1 animation = happiness camera = camera_event_very_right } lower_center_portrait = { trigger = { exists = scope:orgy_consort_3 } character = scope:orgy_consort_3 } lower_right_portrait = { trigger = { exists = scope:orgy_consort_2 } character = scope:orgy_consort_2 } trigger = { is_adult = yes exists = scope:stop_host_scope scope:stop_host_scope = { is_ai = yes is_adult = yes # Vassal or their primary consort is attracted to liege OR = { is_attracted_to_gender_of = root any_consort = { is_attracted_to_gender_of = root } } # Vassal has a partner/concubine(s) any_consort = { is_available_ai_adult = yes } } # No close family members allowed in sexy time, unless you're already incestuous trigger_if = { limit = { NOT = { is_incestuous_trigger = yes } trait_is_criminal_in_faith_trigger = { TRAIT = incestuous FAITH = root.faith GENDER_CHARACTER = root } } NOT = { is_close_or_extended_family_of = scope:stop_host_scope } } NOT = { has_sexuality = asexual } } cooldown = { years = 5 } weight_multiplier = { base = 1 # weight up if either are deviants modifier = { add = 1 is_deviant_trigger = yes } modifier = { add = 1 exists = scope:stop_host_scope scope:stop_host_scope = { is_deviant_trigger = yes } } # weight up for the vassal having multiple consorts modifier = { add = 1 exists = scope:stop_host_scope scope:stop_host_scope = { has_multiple_consorts_trigger = yes } } } immediate = { scope:stop_host_scope = { # if stop host has 3 consorts, we save them all. otherwise, just the one random_consort = { save_scope_as = orgy_consort_1 add_character_flag = is_naked } if = { limit = { has_multiple_consorts_trigger = yes } random_consort = { limit = { this != scope:orgy_consort_1 } save_scope_as = orgy_consort_2 add_character_flag = is_naked } random_consort = { limit = { NOR = { this = scope:orgy_consort_1 this = scope:orgy_consort_2 } } save_scope_as = orgy_consort_3 add_character_flag = is_naked } } add_character_flag = is_naked } } option = { # Join in on the sexy time name = { text = { first_valid = { triggered_desc = { trigger = { is_deviant_trigger = yes } desc = tour_grounds_events.6000.b } desc = tour_grounds_events.6000.a } } } trigger = { might_cheat_on_every_partner_trigger = yes } scope:activity = { add_activity_log_entry = { key = tourgy_log tags = { good } character = scope:visiting_liege target = scope:stop_host_scope root = { tour_grounds_events_6000_sex_effect = yes } } } stress_impact = { shy = medium_stress_impact_gain temperate = medium_stress_impact_gain chaste = major_stress_impact_gain gregarious = minor_stress_impact_loss lustful = major_stress_impact_loss deviant = medium_stress_impact_loss } ai_chance = { base = 33 ai_value_modifier = { ai_boldness = 1 ai_sociability = 1 ai_energy = 0.5 } modifier = { add = 50 OR = { has_trait = lustful has_trait = deviant } } modifier = { factor = 0 OR = { has_trait = chaste has_trait = temperate has_trait = shy } } } } option = { # Refuse sexy time name = tour_grounds_events.6000.c stress_impact = { deviant = major_stress_impact_gain lustful = major_stress_impact_gain chaste = minor_stress_impact_loss } ai_chance = { base = 33 modifier = { add = 30 has_trait = chaste } } } after = { scope:stop_host_scope = { remove_character_flag = is_naked } scope:orgy_consort_1 = { remove_character_flag = is_naked } scope:orgy_consort_2 ?= { remove_character_flag = is_naked } scope:orgy_consort_3 ?= { remove_character_flag = is_naked } } } scripted_trigger tg_6100_appropriate_loved_one_memory_trigger = { OR = { has_memory_type = relative_died has_memory_type = spouse_died has_memory_type = friend_died has_memory_type = soulmate_died } any_memory_participant = { NOR = { has_relation_rival = root has_relation_nemesis = root } trigger_if = { limit = { is_alive = no exists = killer } killer != root } } } scripted_trigger tg_6100_not_religious_trigger = { OR = { has_trait = cynical any_secret = { type = secret_non_believer } } } scripted_trigger tg_6100_location_has_cathedral_trigger = { OR = { has_building_or_higher = holy_site_cathedral_01 has_building_or_higher = holy_site_cologne_cathedral_01 has_building_or_higher = holy_site_canterbury_cathedral_01 has_building_or_higher = temple_of_uppsala_01 has_building_or_higher = lund_cathedral_01 has_building_or_higher = notre_dame_01 has_building_or_higher = cluny_abbey_01 has_building_or_higher = beta_giyorgis_01 has_building_or_higher = holy_wisdom_01 has_building_or_higher = duomo_florence_01 has_building_or_higher = wawel_cathedral_01 } } scripted_trigger tg_6100_location_has_mosque_trigger = { OR = { has_building_or_higher = holy_site_imam_ali_mosque_01 has_building_or_higher = holy_site_great_mosque_of_mecca_01 has_building_or_higher = holy_site_great_mosque_of_cordoba_01 has_building_or_higher = holy_site_great_mosque_of_djenne_01 has_building_or_higher = holy_site_great_mosque_of_samarra_01 has_building_or_higher = holy_site_prophetic_mosque_01 has_building_or_higher = damascus_mosque_01 } } # Christian Cathedral / Mosque tour_grounds_events.6100 = { type = activity_event title = tour_grounds_events.6100.t desc = { desc = tour_grounds_events.6100.desc.intro first_valid = { triggered_desc = { trigger = { tg_6100_not_religious_trigger = yes } desc = tour_grounds_events.6100.desc.cynical } triggered_desc = { trigger = { has_trait = zealous } desc = tour_grounds_events.6100.desc.zealous } desc = tour_grounds_events.6100.desc } } theme = tour_grounds override_background = { reference = temple } left_portrait = { character = root triggered_animation = { trigger = { tg_6100_not_religious_trigger = yes } animation = eyeroll } triggered_animation = { trigger = { has_trait = zealous } animation = personality_zealous } animation = admiration } right_portrait = { character = scope:stop_host_scope animation = personality_honorable } trigger = { # check for a christian cathedral special building location = { has_special_building = yes OR = { tg_6100_location_has_cathedral_trigger = yes tg_6100_location_has_mosque_trigger = yes } } # check that the host has the right religion scope:stop_host_scope = { trigger_if = { limit = { location = { tg_6100_location_has_cathedral_trigger = yes } } OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } } trigger_if = { limit = { location = { tg_6100_location_has_mosque_trigger = yes } } religion = religion:islam_religion } } } cooldown = { years = 5 } weight_multiplier = { base = 1 modifier = { add = 1 scope:stop_host_scope = { has_trait = zealous } } modifier = { add = 2 any_memory = { tg_6100_appropriate_loved_one_memory_trigger = yes } } } immediate = { # save scopes for loc save_scope_as = root_scope location = { save_scope_as = tour_grounds_event_location } # if root has a memory of a loved one dying, we pull that out to use in an option if = { limit = { any_memory = { tg_6100_appropriate_loved_one_memory_trigger = yes } } random_memory = { limit = { tg_6100_appropriate_loved_one_memory_trigger = yes } save_scope_as = tour_grounds_6100_beloved_memory random_memory_participant = { save_scope_as = tour_grounds_6100_beloved_char } } } } option = { # light a candle in memory of a dead loved one name = tour_grounds_events.6100.a trigger = { location = { tg_6100_location_has_cathedral_trigger = yes } exists = scope:tour_grounds_6100_beloved_memory } flavor = tour_grounds_events.6100.a.tt every_vassal_or_below = { custom = zealot_approves_of_religious_display vassal_stance = zealot add_opinion = { target = prev modifier = zealot_approves_of_religious_display_opinion } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } add_piety = miniscule_piety_gain stress_impact = { base = minor_stress_impact_loss zealous = minor_stress_impact_loss cynical = medium_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_boldness = 0.5 ai_zeal = 1 } modifier = { factor = 0 has_trait = cynical } } } option = { # pray for a dead loved one name = tour_grounds_events.6100.b trigger = { location = { tg_6100_location_has_mosque_trigger = yes } exists = scope:tour_grounds_6100_beloved_memory } flavor = tour_grounds_events.6100.b.tt every_vassal_or_below = { custom = zealot_approves_of_religious_display vassal_stance = zealot add_opinion = { target = prev modifier = zealot_approves_of_religious_display_opinion } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } add_piety = miniscule_piety_gain stress_impact = { base = minor_stress_impact_loss zealous = minor_stress_impact_loss cynical = medium_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_boldness = 0.5 ai_zeal = 1 } modifier = { factor = 0 has_trait = cynical } } } option = { # get a discount on building church holdings name = tour_grounds_events.6100.c add_character_modifier = { modifier = discounted_church_holding_build_cost_modifier years = 10 } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 1 } } ai_chance = { base = 33 ai_value_modifier = { ai_rationality = 0.75 ai_zeal = 0.5 ai_sociability = 0.5 } modifier = { factor = 0 has_trait = cynical } } stress_impact = { cynical = major_stress_impact_gain } } option = { # ignore everything and there's a chance they find out your secret name = tour_grounds_events.6100.d trigger = { tg_6100_not_religious_trigger = yes } duel = { skills = { intrigue learning } target = scope:stop_host_scope 50 = { desc = tour_grounds_events.6100.d.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } if = { limit = { any_secret = { type = secret_non_believer } } send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6100.d.success add_character_modifier = { modifier = played_it_cool_modifier years = 10 } } } else = { send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6100.d.success every_vassal = { custom = zealot_approves_of_religious_display vassal_stance = zealot add_opinion = { target = prev modifier = zealot_approves_of_religious_display_opinion } } } } } 50 = { desc = tour_grounds_events.6100.d.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } if = { limit = { any_secret = { type = secret_non_believer } } send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6100.d.failure random_secret = { type = secret_non_believer reveal_to = scope:stop_host_scope } } } else = { send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6100.d.failure every_vassal = { custom = zealot_disapproves_of_cynicism vassal_stance = zealot add_opinion = { target = prev modifier = zealot_disapproves_of_cynicism_opinion } } } } } } stress_impact = { zealous = medium_stress_impact_gain fickle = miniscule_stress_impact_loss } ai_chance = { ai_value_modifier = { ai_rationality = 0.5 ai_zeal = 0.1 } } } } # Pastures # Orchards # Cereal Fields # Vassal let's it slip that they've had a bountiful harvest # Checks that you, the liege, have the same building as the one you're seeing in your vassal's province scripted_trigger tg_6200_does_root_have_matching_building_trigger = { OR = { AND = { root.var:building_focus = flag:pastures capital_province = { has_building_or_higher = pastures_01 } } AND = { root.var:building_focus = flag:orchard capital_province = { has_building_or_higher = orchards_01 } } AND = { root.var:building_focus = flag:cereal_fields capital_province = { has_building_or_higher = cereal_fields_01 } } AND = { root.var:building_focus = flag:hill_farms capital_province = { has_building_or_higher = hill_farms_01 } } AND = { root.var:building_focus = flag:plantations capital_province = { has_building_or_higher = plantations_01 } } } } # If there are multiple valid buildings for the event, pick one to focus on scripted_effect tg_6200_pick_building_focus_effect = { random_list = { 1 = { trigger = { location.county = { any_county_province = { has_building_or_higher = pastures_01 } } } set_variable = { name = building_focus value = flag:pastures } } 1 = { trigger = { location.county = { any_county_province = { has_building_or_higher = orchards_01 } } } set_variable = { name = building_focus value = flag:orchard } } 1 = { trigger = { location.county = { any_county_province = { has_building_or_higher = cereal_fields_01 } } } set_variable = { name = building_focus value = flag:cereal_fields } } 1 = { trigger = { location.county = { any_county_province = { has_building_or_higher = hill_farms_01 } } } set_variable = { name = building_focus value = flag:hill_farms } } 1 = { trigger = { location.county = { any_county_province = { has_building_or_higher = plantations_01 } } } set_variable = { name = building_focus value = flag:plantations } } } } # Determine the difference in building level between the liege and vassal respectively scripted_effect tg_6200_determine_building_level_diff_effect = { if = { limit = { root.var:building_focus = flag:pastures } # check vassal building level root.location = { switch = { trigger = has_building pastures_01 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 1 } } } pastures_02 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 2 } } } pastures_03 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 3 } } } pastures_04 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 4 } } } pastures_05 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 5 } } } pastures_06 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 6 } } } pastures_07 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 7 } } } pastures_08 = { scope:root_scope = { set_variable = { name = vassal_building_level value = 8 } } } } } # check root building level root.capital_province = { switch = { trigger = has_building pastures_01 = { scope:root_scope = { set_variable = { name = root_building_level value = 1 } } } pastures_02 = { scope:root_scope = { set_variable = { name = root_building_level value = 2 } } } pastures_03 = { scope:root_scope = { set_variable = { name = root_building_level value = 3 } } } pastures_04 = { scope:root_scope = { set_variable = { name = root_building_level value = 4 } } } pastures_05 = { scope:root_scope = { set_variable = { name = root_building_level value = 5 } } } pastures_06 = { scope:root_scope = { set_variable = { name = root_building_level value = 6 } } } pastures_07 = { scope:root_scope = { set_variable = { name = root_building_level value = 7 } } } pastures_08 = { scope:root_scope = { set_variable = { name = root_building_level value = 8 } } } } } } else_if = { limit = { root.var:building_focus = flag:orchard } # check vassal building level root.location = { switch = { trigger = has_building orchards_01 = { root = { set_variable = { name = vassal_building_level value = 1 } } } orchards_02 = { root = { set_variable = { name = vassal_building_level value = 2 } } } orchards_03 = { root = { set_variable = { name = vassal_building_level value = 3 } } } orchards_04 = { root = { set_variable = { name = vassal_building_level value = 4 } } } orchards_05 = { root = { set_variable = { name = vassal_building_level value = 5 } } } orchards_06 = { root = { set_variable = { name = vassal_building_level value = 6 } } } orchards_07 = { root = { set_variable = { name = vassal_building_level value = 7 } } } orchards_08 = { root = { set_variable = { name = vassal_building_level value = 8 } } } } } # check root building level root.capital_province = { switch = { trigger = has_building orchards_01 = { root = { set_variable = { name = root_building_level value = 1 } } } orchards_02 = { root = { set_variable = { name = root_building_level value = 2 } } } orchards_03 = { root = { set_variable = { name = root_building_level value = 3 } } } orchards_04 = { root = { set_variable = { name = root_building_level value = 4 } } } orchards_05 = { root = { set_variable = { name = root_building_level value = 5 } } } orchards_06 = { root = { set_variable = { name = root_building_level value = 6 } } } orchards_07 = { root = { set_variable = { name = root_building_level value = 7 } } } orchards_08 = { root = { set_variable = { name = root_building_level value = 8 } } } } } } else_if = { limit = { root.var:building_focus = flag:cereal_fields } # check vassal building level root.location = { switch = { trigger = has_building cereal_fields_01 = { root = { set_variable = { name = vassal_building_level value = 1 } } } cereal_fields_02 = { root = { set_variable = { name = vassal_building_level value = 2 } } } cereal_fields_03 = { root = { set_variable = { name = vassal_building_level value = 3 } } } cereal_fields_04 = { root = { set_variable = { name = vassal_building_level value = 4 } } } cereal_fields_05 = { root = { set_variable = { name = vassal_building_level value = 5 } } } cereal_fields_06 = { root = { set_variable = { name = vassal_building_level value = 6 } } } cereal_fields_07 = { root = { set_variable = { name = vassal_building_level value = 7 } } } cereal_fields_08 = { root = { set_variable = { name = vassal_building_level value = 8 } } } } } # check root building level root.capital_province = { switch = { trigger = has_building cereal_fields_01 = { root = { set_variable = { name = root_building_level value = 1 } } } cereal_fields_02 = { root = { set_variable = { name = root_building_level value = 2 } } } cereal_fields_03 = { root = { set_variable = { name = root_building_level value = 3 } } } cereal_fields_04 = { root = { set_variable = { name = root_building_level value = 4 } } } cereal_fields_05 = { root = { set_variable = { name = root_building_level value = 5 } } } cereal_fields_06 = { root = { set_variable = { name = root_building_level value = 6 } } } cereal_fields_07 = { root = { set_variable = { name = root_building_level value = 7 } } } cereal_fields_08 = { root = { set_variable = { name = root_building_level value = 8 } } } } } } else_if = { limit = { root.var:building_focus = flag:hill_farms } # check vassal building level root.location = { switch = { trigger = has_building hill_farms_01 = { root = { set_variable = { name = vassal_building_level value = 1 } } } hill_farms_02 = { root = { set_variable = { name = vassal_building_level value = 2 } } } hill_farms_03 = { root = { set_variable = { name = vassal_building_level value = 3 } } } hill_farms_04 = { root = { set_variable = { name = vassal_building_level value = 4 } } } hill_farms_05 = { root = { set_variable = { name = vassal_building_level value = 5 } } } hill_farms_06 = { root = { set_variable = { name = vassal_building_level value = 6 } } } hill_farms_07 = { root = { set_variable = { name = vassal_building_level value = 7 } } } hill_farms_08 = { root = { set_variable = { name = vassal_building_level value = 8 } } } } } # check root building level root.capital_province = { switch = { trigger = has_building hill_farms_01 = { root = { set_variable = { name = root_building_level value = 1 } } } hill_farms_02 = { root = { set_variable = { name = root_building_level value = 2 } } } hill_farms_03 = { root = { set_variable = { name = root_building_level value = 3 } } } hill_farms_04 = { root = { set_variable = { name = root_building_level value = 4 } } } hill_farms_05 = { root = { set_variable = { name = root_building_level value = 5 } } } hill_farms_06 = { root = { set_variable = { name = root_building_level value = 6 } } } hill_farms_07 = { root = { set_variable = { name = root_building_level value = 7 } } } hill_farms_08 = { root = { set_variable = { name = root_building_level value = 8 } } } } } } else_if = { limit = { root.var:building_focus = flag:plantations } # check vassal building level root.location = { switch = { trigger = has_building plantations_01 = { root = { set_variable = { name = vassal_building_level value = 1 } } } plantations_02 = { root = { set_variable = { name = vassal_building_level value = 2 } } } plantations_03 = { root = { set_variable = { name = vassal_building_level value = 3 } } } plantations_04 = { root = { set_variable = { name = vassal_building_level value = 4 } } } plantations_05 = { root = { set_variable = { name = vassal_building_level value = 5 } } } plantations_06 = { root = { set_variable = { name = vassal_building_level value = 6 } } } plantations_07 = { root = { set_variable = { name = vassal_building_level value = 7 } } } plantations_08 = { root = { set_variable = { name = vassal_building_level value = 8 } } } } } # check root building level root.capital_province = { switch = { trigger = has_building plantations_01 = { root = { set_variable = { name = root_building_level value = 1 } } } plantations_02 = { root = { set_variable = { name = root_building_level value = 2 } } } plantations_03 = { root = { set_variable = { name = root_building_level value = 3 } } } plantations_04 = { root = { set_variable = { name = root_building_level value = 4 } } } plantations_05 = { root = { set_variable = { name = root_building_level value = 5 } } } plantations_06 = { root = { set_variable = { name = root_building_level value = 6 } } } plantations_07 = { root = { set_variable = { name = root_building_level value = 7 } } } plantations_08 = { root = { set_variable = { name = root_building_level value = 8 } } } } } } set_variable = { name = building_level_diff value = root.var:root_building_level } change_variable = { name = building_level_diff divide = root.var:vassal_building_level } } tour_grounds_events.6200 = { type = activity_event title = tour_grounds_events.6200.t desc = { desc = tour_grounds_events.6200.desc first_valid = { triggered_desc = { trigger = { root.var:building_focus = flag:pastures } desc = tour_grounds_events.6200.desc.pastures } triggered_desc = { trigger = { root.var:building_focus = flag:orchard } desc = tour_grounds_events.6200.desc.orchard } triggered_desc = { trigger = { root.var:building_focus = flag:cereal_fields } desc = tour_grounds_events.6200.desc.cereal_fields } triggered_desc = { trigger = { root.var:building_focus = flag:hill_farms } desc = tour_grounds_events.6200.desc.hill_farms } triggered_desc = { trigger = { root.var:building_focus = flag:plantations } desc = tour_grounds_events.6200.desc.plantations } } desc = tour_grounds_events.6200.outro } cooldown = { years = 5 } theme = tour_grounds override_background = { reference = farmland } left_portrait = { character = root animation = thinking } right_portrait = { character = scope:stop_host_scope animation = personality_honorable } trigger = { # check for pastures/orchards/cereal fields and that root has a matching building in their capital province location.county = { any_county_province = { OR = { trigger_if = { limit = { has_building_or_higher = pastures_01 } root.capital_province = { has_building_or_higher = pastures_01 } } trigger_if = { limit = { has_building_or_higher = orchards_01 } root.capital_province = { has_building_or_higher = orchards_01 } } trigger_if = { limit = { has_building_or_higher = cereal_fields_01 } root.capital_province = { has_building_or_higher = cereal_fields_01 } } trigger_if = { limit = { has_building_or_higher = hill_farms_01 } root.capital_province = { has_building_or_higher = hill_farms_01 } } trigger_if = { limit = { has_building_or_higher = plantations_01 } root.capital_province = { has_building_or_higher = plantations_01 } } } } } } weight_multiplier = { base = 1 } immediate = { # save scopes for loc save_scope_as = root_scope location.county = { random_county_province = { limit = { OR = { has_building_or_higher = pastures_01 has_building_or_higher = orchards_01 has_building_or_higher = cereal_fields_01 has_building_or_higher = hill_farms_01 has_building_or_higher = plantations_01 } } save_scope_as = tour_grounds_event_location } } capital_province = { save_scope_as = root_capital_scope } # Pick which building we want to focus on tg_6200_pick_building_focus_effect = yes if = { limit = { # technically shouldn't be necessary, but prevents errors exists = root.var:building_focus # check if root has the right building tg_6200_does_root_have_matching_building_trigger = yes } # determine the difference in their building level tg_6200_determine_building_level_diff_effect = yes } } option = { # You're pulling in a lot of grain here, time to up the ole tax name = tour_grounds_events.6200.a custom_tooltip = tour_grounds_events.6200.a.tt # You attempt to extort your vassal scope:stop_host_scope = { trigger_event = { id = tour_grounds_events.6201 days = 5 } } # decrease opinion with parochial vassals every_vassal = { custom = every_parochial_vassal add_opinion = { modifier = angry_opinion opinion = -20 target = root } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { greedy = minor_stress_impact_loss diligent = minor_stress_impact_loss content = minor_stress_impact_gain generous = medium_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_greed = 1 ai_rationality = 0.5 ai_sociability = 0.5 } modifier = { add = 20 has_trait = greedy } modifier = { add = -30 OR = { has_trait = content has_trait = generous } } } } option = { # name = tour_grounds_events.6200.b # learn the vassal's secret to success add_character_modifier = { modifier = bountiful_harvest_modifier years = 10 } if = { # check if root has the right building limit = { has_lifestyle = stewardship_lifestyle } add_stewardship_lifestyle_xp = major_lifestyle_xp } stress_impact = { lazy = minor_stress_impact_gain diligent = minor_stress_impact_loss } ai_chance = { base = 33 ai_value_modifier = { ai_rationality = 0.8 ai_sociability = 0.8 } modifier = { add = 20 has_trait = diligent } modifier = { add = -30 has_trait = lazy } } } option = { # Be nice and don't do anything name = tour_grounds_events.6200.c reverse_add_opinion = { target = scope:stop_host_scope modifier = pleased_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 = { generous = minor_stress_impact_loss humble = minor_stress_impact_loss calm = miniscule_stress_impact_loss } ai_chance = { base = 33 ai_value_modifier = { ai_greed = -0.5 ai_sociability = 0.8 } } } after = { if = { limit = { exists = root.var:building_focus } remove_variable = building_focus } if = { limit = { exists = root.var:vassal_building_level } remove_variable = vassal_building_level } if = { limit = { exists = root.var:root_building_level } remove_variable = root_building_level } if = { limit = { exists = root.var:building_level_diff } remove_variable = root_building_level } } } # follow-up event for vassal tour_grounds_events.6201 = { type = character_event title = tour_grounds_events.6201.t desc = tour_grounds_events.6201.desc theme = tour_grounds left_portrait = { character = root animation = worry } right_portrait = { character = scope:visiting_liege animation = personality_rational } option = { # accept a tax obligation increase name = tour_grounds_events.6201.a trigger = { vassal_contract_obligation_level_can_be_increased = feudal_government_taxes } # Increase vassal's tax obligation scope:visiting_liege = { send_interface_toast = { title = tour_grounds_events.6201.a.tt left_icon = scope:visiting_liege right_icon = scope:stop_host_scope scope:stop_host_scope = { vassal_contract_increase_obligation_level = feudal_government_taxes progress_towards_friend_effect = { REASON = friend_accepted_tax_increase CHARACTER = scope:visiting_liege OPINION = default_friend_opinion } } } } ai_chance = { base = 0 } } option = { # give your liege the extra profits name = tour_grounds_events.6201.b scope:visiting_liege = { send_interface_toast = { title = tour_grounds_events.6201.b.tt left_icon = scope:visiting_liege right_icon = scope:stop_host_scope scope:stop_host_scope = { pay_short_term_gold = { target = scope:visiting_liege gold = medium_gold_value } progress_towards_friend_effect = { REASON = friend_split_profits CHARACTER = scope:visiting_liege OPINION = default_friend_opinion } } } } ai_chance = { base = 0 } } option = { # deny your liege's demand name = tour_grounds_events.6201.c add_treasury_or_gold = medium_treasury_or_gold_value # give imprisonment reason scope:visiting_liege = { send_interface_toast = { title = tour_grounds_events.6201.c.tt left_icon = scope:visiting_liege right_icon = scope:stop_host_scope add_opinion = { target = scope:stop_host_scope modifier = embezzled_opinion } } } ai_chance = { base = 100 } } } # Tradeport # Liege: Gold is stolen at Vassal's tradeport tour_grounds_events.6202 = { type = activity_event title = tour_grounds_events.6202.t desc = tour_grounds_events.6202.desc theme = tour_grounds override_background = { reference = docks } left_portrait = { character = scope:stop_host_scope animation = shock } right_portrait = { character = scope:tiny_thief animation = schadenfreude } cooldown = { years = 5 } trigger = { location.county = { any_county_province = { has_building_or_higher = common_tradeport_01 } } } weight_multiplier = { base = 1 } immediate = { save_scope_as = root_scope location.county = { random_county_province = { limit = { has_building_or_higher = common_tradeport_01 } save_scope_as = event_location } } # create our tiny little thief to do the thieving create_character = { template = child_thief_character culture = scope:stop_host_scope.culture faith = scope:stop_host_scope.faith location = root.location save_scope_as = tiny_thief } # tiny_thief takes your gold! remove_short_term_gold = medium_gold_value set_variable = { name = gold_lost value = medium_gold_value } } option = { # Fix this, you dumb vassal! name = tour_grounds_events.6202.a custom_tooltip = tour_grounds_events.6202.a.tt random_list = { 1 = { show_chance = no desc = tour_grounds_events.6202.a.success custom_tooltip = tour_grounds_events.6202.b.success } 1 = { show_chance = no desc = tour_grounds_events.6202.a.failure custom_tooltip = tour_grounds_events.6202.b.failure } } scope:stop_host_scope = { trigger_event = { id = tour_grounds_events.6203 days = { 1 5 } } } stress_impact = { diligent = minor_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_greed = 1 ai_sociability = 0.5 ai_energy = 0.1 ai_vengefulness = 0.5 } } } option = { # Chase after the tiny_thief yourself name = tour_grounds_events.6202.b duel = { skills = { prowess intrigue } target = scope:tiny_thief 40 = { # You succeed in catching the tiny thief compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } custom_tooltip = tour_grounds_events.6202.b.success show_as_tooltip = { if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 1 } } } add_character_flag = caught_tiny_thief trigger_event = { id = tour_grounds_events.6204 days = { 1 5 } } } 60 = { # You fail to catch them and they are lost forever compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } custom_tooltip = tour_grounds_events.6202.b.failure send_interface_toast = { left_icon = root right_icon = scope:tiny_thief title = tour_grounds_events.6202.b.failure } } } stress_impact = { lazy = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_greed = 1 ai_sociability = 0.5 ai_energy = 1 ai_vengefulness = 0.5 } } } option = { # Let tiny_thief go name = tour_grounds_events.6202.c add_piety = major_piety_gain every_vassal_or_below = { vassal_stance = parochial custom = every_parochial_vassal add_opinion = { modifier = disapproving_opinion target = root opinion = -10 } } if = { limit = { exists = root.var:gold_lost } remove_variable = gold_lost } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } stress_impact = { greedy = medium_stress_impact_gain forgiving = medium_stress_impact_loss calm = minor_stress_impact_loss humble = minor_stress_impact_loss } ai_chance = { base = 33 ai_value_modifier = { ai_greed = -1 ai_sociability = 0.5 ai_vengefulness = -0.5 } modifier = { factor = 0 OR = { has_trait = greedy has_trait = vengeful has_trait = wrathful } } modifier = { add = 10 has_trait = humble } } } } # Vassal: decide what to do about the tiny_thief tour_grounds_events.6203 = { type = character_event title = tour_grounds_events.6203.t desc = tour_grounds_events.6203.desc theme = tour_grounds override_background = { reference = docks } left_portrait = { character = scope:visiting_liege animation = anger } right_portrait = { character = scope:tiny_thief animation = laugh } option = { # Pay your liege their lost gold name = tour_grounds_events.6203.a scope:visiting_liege = { send_interface_toast = { left_icon = scope:stop_host_scope right_icon = scope:tiny_thief title = tour_grounds_events.6203.toast scope:stop_host_scope = { pay_short_term_gold = { target = scope:visiting_liege gold = scope:visiting_liege.var:gold_lost } } } } stress_impact = { greedy = medium_stress_impact_gain disloyal = minor_stress_impact_gain } ai_chance = { base = 50 ai_value_modifier = { ai_greed = -1 ai_sociability = 0.5 ai_energy = -1 ai_vengefulness = 0.5 } modifier = { factor = 0 has_trait = greedy } } } option = { # Chase after the tiny_thief yourself name = tour_grounds_events.6203.b duel = { skills = { prowess intrigue } target = scope:tiny_thief 40 = { desc = tour_grounds_events.6202.b.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } send_interface_toast = { title = tour_grounds_events.6202.b.success left_icon = root right_icon = scope:tiny_thief } scope:visiting_liege = { trigger_event = { id = tour_grounds_events.6204 days = { 1 5 } } } } 60 = { desc = tour_grounds_events.6202.b.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } send_interface_toast = { title = tour_grounds_events.6202.b.failure left_icon = root right_icon = scope:tiny_thief } scope:visiting_liege = { trigger_event = { id = tour_grounds_events.6205 days = { 1 5 } } } } } ai_chance = { base = 50 ai_value_modifier = { ai_greed = 1 ai_energy = 1 } } } option = { # ain't my problem name = tour_grounds_events.6203.c reverse_add_opinion = { target = scope:visiting_liege modifier = disappointed_opinion opinion = -30 } scope:visiting_liege = { trigger_event = { id = tour_grounds_events.6205 days = { 1 5 } } } ai_chance = { base = 10 ai_value_modifier = { ai_energy = -0.5 } modifier = { factor = 0 has_trait = ambitious } } } } # Liege: tiny_thief is caught (either by vassal or liege themself) tour_grounds_events.6204 = { type = activity_event title = tour_grounds_events.6204.t desc = { first_valid = { triggered_desc = { trigger = { has_character_flag = caught_tiny_thief } desc = tour_grounds_events.6204.desc.caught_by_liege } desc = tour_grounds_events.6204.desc.caught_by_vassal } } theme = tour_grounds override_background = { reference = docks } left_portrait = { character = scope:stop_host_scope animation = happiness } right_portrait = { character = scope:tiny_thief animation = sadness } immediate = { involved_activity = { save_scope_as = current_activity } } option = { # Take the gold name = tour_grounds_events.6204.a add_gold = root.var:gold_lost if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_taxation } } } increase_tour_success_effect = { POINTS = 1 } } ai_chance = { base = 50 ai_value_modifier = { ai_greed = 1 } } } option = { # Take the tiny_thief under your wing name = tour_grounds_events.6204.b add_courtier = scope:tiny_thief scope:tiny_thief = { add_to_activity_without_travel = scope:current_activity } current_travel_plan = { add_companion = scope:tiny_thief } if = { limit = { num_of_relation_ward < 2 } set_relation_ward = { target = scope:tiny_thief reason = ward_tiny_thief } scope:tiny_thief = { set_default_education = yes } } every_vassal_or_below = { vassal_stance = courtly custom = every_courtly_vassal add_opinion = { modifier = disapproving_opinion target = root opinion = -10 } } if = { limit = { scope:activity = { has_activity_option = { category = special_type option = tour_type_majesty } } } increase_tour_success_effect = { POINTS = 1 } } ai_chance = { base = 50 ai_value_modifier = { ai_sociability = 0.75 ai_energy = 0.75 } } } after = { if = { limit = { exists = root.var:gold_lost } remove_variable = gold_lost } if = { limit = { has_character_flag = caught_tiny_thief } remove_character_flag = caught_tiny_thief } } } # Liege responds to vassal failing to catch the tiny_thief tour_grounds_events.6205 = { type = activity_event title = tour_grounds_events.6205.t desc = tour_grounds_events.6205.desc theme = tour_grounds override_background = { reference = docks } left_portrait = { character = root animation = anger } right_portrait = { character = scope:stop_host_scope animation = sadness } lower_center_portrait = { character = scope:tiny_thief } option = { # Demand the gold name = tour_grounds_events.6205.a duel = { skills = { diplomacy } target = scope:stop_host_scope 60 = { desc = tour_grounds_events.6205.a.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6205.a.success show_as_tooltip = { scope:stop_host_scope = { pay_short_term_gold = { target = scope:visiting_liege gold = scope:visiting_liege.var:gold_lost } } } } hidden_effect = { scope:stop_host_scope = { send_interface_toast = { left_icon = scope:stop_host_scope right_icon = scope:visiting_liege title = tour_grounds_events.6205.a.success pay_short_term_gold = { target = scope:visiting_liege gold = scope:visiting_liege.var:gold_lost } } } } } 40 = { desc = tour_grounds_events.6205.a.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } send_interface_toast = { left_icon = root right_icon = scope:tiny_thief title = tour_grounds_events.6205.a.failure add_prestige = minor_prestige_loss } } } ai_chance = { base = 33 ai_value_modifier = { ai_greed = -1 ai_sociability = 0.5 ai_energy = -1 ai_vengefulness = 0.5 } modifier = { factor = 0 has_trait = greedy } } } option = { # Have the vassal whipped name = tour_grounds_events.6205.b trigger = { OR = { has_trait = sadistic has_trait = wrathful dread >= 50 } } flavor = tour_grounds_events.6205.b.flavor scope:stop_host_scope = { increase_wounds_no_death_effect = { REASON = beaten } } add_dread = minor_dread_gain reverse_add_opinion = { target = scope:stop_host_scope modifier = whipped_me_opinion } stress_impact = { sadistic = minor_stress_impact_loss wrathful = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_sociability = -0.5 ai_energy = 0.5 ai_vengefulness = 1 } modifier = { factor = 0 has_trait = compassionate } modifier = { add = 30 OR = { has_trait = wrathful has_trait = sadistic } } } } option = { # Forgive the vassal name = tour_grounds_events.6205.c reverse_add_opinion = { modifier = forgiven_opinion years = 10 target = scope:stop_host_scope } stress_impact = { base = minor_stress_impact_gain forgiving = medium_stress_impact_loss greedy = major_stress_impact_gain vengeful = medium_stress_impact_gain calm = minor_stress_impact_loss sadistic = medium_stress_impact_gain } ai_chance = { base = 33 ai_value_modifier = { ai_greed = -1 ai_sociability = 0.5 ai_energy = -1 ai_vengefulness = 0.5 } modifier = { factor = 0 OR = { has_trait = greedy has_trait = wrathful has_trait = sadistic } } modifier = { add = 30 has_trait = forgiving } } } after = { if = { limit = { exists = root.var:gold_lost } remove_variable = gold_lost } } } # Liege: Vassal challenges you to an educational sparring match tour_grounds_events.6300 = { type = activity_event title = tour_grounds_events.6300.t desc = tour_grounds_events.6300.desc theme = tour_grounds override_background = { reference = army_camp } left_portrait = { character = scope:stop_host_scope animation = personality_bold } right_portrait = { character = scope:target_knight animation = celebrate_sword } lower_center_portrait = { trigger = { exists = scope:tg_6300_stand_in } character = scope:tg_6300_stand_in } cooldown = { years = 10 } trigger = { scope:stop_host_scope = { trigger_if = { limit = { is_ai = yes } has_vassal_stance = glory_hound } any_knight = { is_available_ai_adult = yes location = root.location } } } weight_multiplier = { base = 1 modifier = { add = 1 current_travel_plan = { any_entourage_character = { is_knight = yes } } } } immediate = { save_scope_as = root_scope location = { save_scope_as = event_location } # if possible, find a knight in the entourage if = { limit = { current_travel_plan = { any_entourage_character = { is_knight = yes } } } current_travel_plan = { random_entourage_character = { limit = { is_knight = yes } save_scope_as = tg_6300_stand_in } } } scope:stop_host_scope = { random_knight = { limit = { location = root.location } save_scope_as = target_knight } } scope:target_knight = { add_character_flag = wear_armor } scope:tg_6300_stand_in ?= { add_character_flag = wear_armor } } option = { # Accept the invitation to spar name = tour_grounds_events.6300.a flavor = tour_grounds_events.6300.flavor duel = { skills = { prowess martial } target = scope:target_knight 50 = { desc = tour_grounds_events.6300.a.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } send_interface_toast = { left_icon = root right_icon = scope:target_knight title = tour_grounds_events.6300.a.success # opinion bonus with glory hound vassals every_vassal_or_below = { vassal_stance = glory_hound custom = every_glory_hound_vassal add_opinion = { modifier = respect_opinion target = root opinion = 20 } } 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 } } } } 50 = { desc = tour_grounds_events.6300.a.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6300.a.failure # opinion malus with glory hound vassals every_vassal_or_below = { vassal_stance = glory_hound limit = { is_ai = yes } custom = every_glory_hound_vassal add_opinion = { modifier = disappointed_opinion target = root opinion = -20 } } } } } stress_impact = { craven = medium_stress_impact_gain } ai_chance = { base = 50 ai_value_modifier = { ai_boldness = 1 ai_energy = 1 } modifier = { add = 30 has_trait = brave } modifier = { add = -30 has_trait = craven } } } option = { # Suggest that your knight give a demonstration name = tour_grounds_events.6300.b trigger = { exists = scope:tg_6300_stand_in } scope:tg_6300_stand_in = { duel = { skills = { prowess martial } target = scope:target_knight 50 = { desc = tour_grounds_events.6300.b.success compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } root = { send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6300.b.success # county modifier for winning location.county = { add_county_modifier = { modifier = prowess_demonstration_modifier years = 30 } } } } } 50 = { desc = tour_grounds_events.6300.b.failure compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } root = { send_interface_toast = { left_icon = root right_icon = scope:stop_host_scope title = tour_grounds_events.6300.b.failure add_prestige = minor_prestige_loss } } } } } stress_impact = { craven = minor_stress_impact_loss } ai_chance = { base = 50 ai_value_modifier = { ai_boldness = 0.5 ai_energy = 0.1 } modifier = { add = -30 has_trait = brave } modifier = { add = 30 has_trait = craven } } } option = { # Decline name = tour_grounds_events.6300.c every_vassal_or_below = { vassal_stance = glory_hound custom = every_glory_hound_vassal add_opinion = { modifier = disappointed_opinion target = root opinion = -10 } } ai_chance = { base = 50 ai_value_modifier = { ai_boldness = -0.4 ai_sociability = -0.3 } modifier = { add = -20 has_trait = brave } modifier = { add = 20 has_trait = craven } } } after = { scope:target_knight = { remove_character_flag = wear_armor } scope:tg_6300_stand_in ?= { remove_character_flag = wear_armor } } }