@ep3_laamp_flavour_ewan_event_cooldown = 10 @ep3_laamp_flavour_ewan_event_cooldown_shorter = 2 @ep3_laamp_flavour_ewan_event_cooldown_short = 5 @ep3_laamp_flavour_ewan_event_cooldown_long = 20 @ep3_laamp_flavour_ewan_event_cooldown_longer = 35 @ep3_laamp_flavour_ewan_event_cooldown_longest = 70 @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force = 2000 @ep3_laamp_flavour_ewan_baggage_train_has_very_significant_armed_force = 4000 @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level = 3 @ep3_laamp_flavour_ewan_1041_years_since_rule = 5 @ep3_laamp_flavour_ewan_1103_age_threshold_young = 6 @ep3_laamp_flavour_ewan_1103_age_threshold_older = 12 @ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking = 75 @ep3_laamp_flavour_ewan_4051_minimum_provisions_count = 150 namespace = ep3_laamp_flavour_ewan ################################################## # #SIMPLE JOYS # 0001 - 0010 Pinkish Hues - Watching the sunrise/sunset. # 0011 - 0020 Fire & Friends - Larks at the campfire. # 0021 - 0030 A Little Follower - Happy cat or dog follows you. # 0031 - 0040 Tumbling Down - Stooge falls down hill. # 0041 - 0050 Travails of a Cook - Recipes on the road. # 0051 - 0060 A Friendly Clamour - A pleasant evening buzz as the camp settles down. # 0061 - 0070 An Unexpected Faire - Locals react with impromptu faire. # 0071 - 0080 Pounding Hooves - Riding with a hangover-stricken friend. # # #CHILDREARING # 1001 - 1010 Friends in Low Places - Highborn befriends a lowborn. # 1011 - 1020 Learning from Example - Learning from officer. # 1021 - 1030 Love at First Camp - Crush on a local girl/boy. # 1031 - 1040 Nurture - Taking after camp purpose. # 1041 - 1050 The Old Country - Child too young to remember asks what old home was like. # 1051 - 1060 It Isn't Fair - Child unhappy with life on the road. # 1061 - 1070 Quick Study - Child picks up local language quickly. # 1071 - 1080 At the Edge of Camp - Children playing in local terrain. # 1081 - 1090 Growing Up - Child demands own tent. # 1091 - 1100 Every Parent's Duty - Teaching a youngling how to ride. # 1101 - 1110 Helping Out - Child helps with packing. # 1111 - 1120 A Nose for Trouble - Child adopts puppy. # # #PERSONAL TENSIONS # 2001 - 2010 Plenty in Common - Friendship blooms over shared traits. # 2011 - 2020 Camp Gossip - Someone shagged someone else's spouse. # 2021 - 2030 Bound Together - Marriage/concubinage at camp. # 2031 - 2040 Through with You - Someone who hates you up and leaves. # 2041 - 2050 Closer Quarters - Lover developing from various sources. # 2051 - 2060 What's the Point? - Someone abandons bathing. # 2061 - 2070 My Spot - Fight at dinner over tent pitch location. # 2071 - 2080 Second-in-Command - People scrabble for empty/ineffectual SiC position. # 2081 - 2090 A Well-Oiled Machine - Helping each other out at pitch time. # 2091 - 2100 Crimes of Passion - Followers attack each other. # # #CAMP PURPOSE # 3001 - 3010 Heard of You - Brigands attract cool local criminals, scaled to prestige level. # 3011 - 3020 Arguing the Toss - Scholars debate a learned follower. # 3021 - 3030 Over the Horizon - Explorer gets a passion for stories of a distant land, populating contracts there & learning the local language. # 3031 - 3040 Mine by Right - Legitimist broods & extends their claims. # 3041 - 3050 People from a Better Time - Old loyalists join legitimist. # 3051 - 3060 Map Painting - Explorer writes/draws map of local area. # 3061 - 3070 A Guide to ... - Scholar writes book on local subject. # 3071 - 3080 The Law in Location.GetNameNoTier - Law attacks criminal gang. # 3081 - 3090 Wrestle for It - Merc challenged to a wrastlin'. # # #TRAVEL DANGER / SUPPLIES # 4001 - 4010 Bandits! - Bandit raid. # 4011 - 4020 A Land of Milk & Honey - Bountiful hunting/foraging. # 4021 - 4030 Parched - Difficulty finding water. # 4031 - 4040 Sickness in the Herd - Pack animals are sick or wounded. # 4041 - 4050 Fortuna's Tithe - Bad weather destroys wagons or pack animals. # 4051 - 4060 Supplies Unaccounted For - Supplies go missing in large armies. # 4061 - 4070 Eyes in the Night - local predator picking off people each evening. # 4071 - 4080 Slavers - bastards try to kidnap people from the edges of your train. # 4081 - 4090 Born of Desperation - hungry locals swarm at you, searching for food. # 4091 - 4100 Night Attack - unknown group assaults your camp one evening. # # #MISC MINOR EVENTS # 9501 - 9510 Core Tombola - Takes care of returning to camp after a period away. # 9511 - 9520 Follower Returned - follower comes back to you, mostly the same. # 9521 - 9530 Not As I Remember You - follower comes back to you, having taken on a local culture/faith. # 9531 - 9540 Missing Follower - follower fails to come back after a loan. # 9541 - 9550 Camp Activity Feed Message - something minor happens at camp. # # #MAINTENANCE # 9801 - 9810 General Maintenance - Reserved for w/e turns up. ################################################## ################################################## # MISC SCRIPTED TRIGGERS & EFFECTS scripted_trigger ep3_laamp_flavour_ewan_available_courtier_trigger = { is_adult = yes is_courtier_of = root location = root.location is_available_allow_travelling = yes } scripted_trigger ep3_laamp_flavour_ewan_available_child_trigger = { child_can_have_full_conversations_trigger = yes is_courtier_of = root location = root.location is_available_allow_travelling = yes } scripted_trigger ep3_laamp_flavour_ewan_available_anybody_trigger = { OR = { is_adult = yes child_can_have_full_conversations_trigger = yes } is_courtier_of = root location = root.location is_available_allow_travelling = yes } scripted_trigger ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = { is_adult = yes location = root.location } scripted_trigger ep3_laamp_flavour_ewan_no_dog_trigger = { NOR = { any_owned_story = { type = story_cycle_pet_dog } has_character_modifier = dog_story_modifier } } scripted_trigger ep3_laamp_flavour_ewan_no_cat_trigger = { NOR = { any_owned_story = { type = story_cycle_pet_cat } has_character_modifier = cat_story_modifier } } scripted_effect ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = { if = { limit = { number_of_personality_traits >= 3 } remove_trait = rowdy remove_trait = charming remove_trait = curious remove_trait = pensive remove_trait = bossy } } scripted_effect ep3_laamp_flavour_ewan_register_terrain_effect = { location = { switch = { trigger = terrain plains = { save_scope_value_as = { name = terrain_type value = flag:plains } } farmlands = { save_scope_value_as = { name = terrain_type value = flag:farmlands } } hills = { save_scope_value_as = { name = terrain_type value = flag:hills } } mountains = { save_scope_value_as = { name = terrain_type value = flag:mountains } } desert = { save_scope_value_as = { name = terrain_type value = flag:desert } } desert_mountains = { save_scope_value_as = { name = terrain_type value = flag:desert_mountains } } oasis = { save_scope_value_as = { name = terrain_type value = flag:oasis } } jungle = { save_scope_value_as = { name = terrain_type value = flag:jungle } } forest = { save_scope_value_as = { name = terrain_type value = flag:forest } } taiga = { save_scope_value_as = { name = terrain_type value = flag:taiga } } wetlands = { save_scope_value_as = { name = terrain_type value = flag:wetlands } } steppe = { save_scope_value_as = { name = terrain_type value = flag:steppe } } floodplains = { save_scope_value_as = { name = terrain_type value = flag:floodplains } } drylands = { save_scope_value_as = { name = terrain_type value = flag:drylands } } } } } ################################################## # SIMPLE JOYS ################################################## # Pinkish Hues # by Ewan Cowhig Croft # 0001 - 0010 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { ep3_laamp_flavour_ewan_available_$CONFIG$_trigger = yes NOT = { has_trait = blind } opinion = { target = root value >= 40 } trigger_if = { limit = { root = { is_ai = yes } } reverse_opinion = { target = root value >= 40 } } } scripted_trigger ep3_laamp_flavour_ewan_0002_watch_partner_trigger = { ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = courtier } NOR = { is_close_family_of = root is_consort_of = root trigger_if = { limit = { exists = scope:watch_partner_1 } this = scope:watch_partner_1 } } } # Watching the sunset. ep3_laamp_flavour_ewan.0001 = { type = character_event title = ep3_laamp_flavour_ewan.0001.t desc = { desc = ep3_laamp_flavour_ewan.0001.desc.intro.preamble first_valid = { triggered_desc = { trigger = { has_trait = lazy } desc = ep3_laamp_flavour_ewan.0001.desc.intro.lazy } triggered_desc = { trigger = { has_trait = diligent } desc = ep3_laamp_flavour_ewan.0001.desc.intro.diligent } desc = ep3_laamp_flavour_ewan.0001.desc.intro.fallback } first_valid = { triggered_desc = { trigger = { OR = { scope:terrain_type = flag:plains scope:terrain_type = flag:farmlands scope:terrain_type = flag:hills } } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_hill } triggered_desc = { trigger = { OR = { scope:terrain_type = flag:jungle scope:terrain_type = flag:forest scope:terrain_type = flag:taiga } } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.tree_covered_hill } triggered_desc = { trigger = { scope:terrain_type = flag:mountains } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_ridge } triggered_desc = { trigger = { OR = { scope:terrain_type = flag:desert scope:terrain_type = flag:oasis } } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_dune } triggered_desc = { trigger = { scope:terrain_type = flag:desert_mountains } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.dusty_ridge } triggered_desc = { trigger = { OR = { scope:terrain_type = flag:wetlands scope:terrain_type = flag:floodplains scope:terrain_type = flag:steppe } } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.stubby_hillock } triggered_desc = { trigger = { scope:terrain_type = flag:drylands } desc = ep3_laamp_flavour_ewan.0001.desc.midtro.dusty_hill } } first_valid = { triggered_desc = { trigger = { scope:terrain_type = flag:plains } desc = ep3_laamp_flavour_ewan.0001.desc.plains } triggered_desc = { trigger = { scope:terrain_type = flag:farmlands } desc = ep3_laamp_flavour_ewan.0001.desc.farmlands } triggered_desc = { trigger = { scope:terrain_type = flag:hills } desc = ep3_laamp_flavour_ewan.0001.desc.hills } triggered_desc = { trigger = { scope:terrain_type = flag:mountains } desc = ep3_laamp_flavour_ewan.0001.desc.mountains } triggered_desc = { trigger = { scope:terrain_type = flag:desert } desc = ep3_laamp_flavour_ewan.0001.desc.desert } triggered_desc = { trigger = { scope:terrain_type = flag:desert_mountains } desc = ep3_laamp_flavour_ewan.0001.desc.desert_mountains } triggered_desc = { trigger = { scope:terrain_type = flag:oasis } desc = ep3_laamp_flavour_ewan.0001.desc.oasis } triggered_desc = { trigger = { scope:terrain_type = flag:jungle } desc = ep3_laamp_flavour_ewan.0001.desc.jungle } triggered_desc = { trigger = { scope:terrain_type = flag:forest } desc = ep3_laamp_flavour_ewan.0001.desc.forest } triggered_desc = { trigger = { scope:terrain_type = flag:taiga } desc = ep3_laamp_flavour_ewan.0001.desc.taiga } triggered_desc = { trigger = { scope:terrain_type = flag:wetlands } desc = ep3_laamp_flavour_ewan.0001.desc.wetlands } triggered_desc = { trigger = { scope:terrain_type = flag:steppe } desc = ep3_laamp_flavour_ewan.0001.desc.steppe } triggered_desc = { trigger = { scope:terrain_type = flag:floodplains } desc = ep3_laamp_flavour_ewan.0001.desc.floodplains } triggered_desc = { trigger = { scope:terrain_type = flag:drylands } desc = ep3_laamp_flavour_ewan.0001.desc.drylands } } desc = ep3_laamp_flavour_ewan.0001.desc.outro } theme = laamp left_portrait = { character = root animation = admiration } lower_center_portrait = scope:watch_partner_2 lower_right_portrait = scope:watch_partner_1 override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0001 } # And check that we've had this title for a decent amount of time, so that we don't get this immediately every time. title_held_years >= 10 } # And uhhh. Unfortunately. NOT = { has_trait = blind } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0001 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0001 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longest } } # Grab our terrain. ep3_laamp_flavour_ewan_register_terrain_effect = yes # Flag a consort or child to watch it with. ## Consorts. every_consort = { limit = { ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = courtier } } add_to_list = possible_watch_partner_1_list } ## Children. every_child = { limit = { ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = child } } add_to_list = possible_watch_partner_1_list } ## Now, sort through them to find our best candidate. ordered_in_list = { list = possible_watch_partner_1_list order_by = { value = "opinion(root)" # If we're already friends/lovers, lower the score, as this should be for making new ones. if = { limit = { has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } } multiply = 0.5 } } save_scope_as = watch_partner_1 } # Flag a potential friend or friend to watch it with. ## Potential friends. every_relation = { type = potential_friend limit = { ep3_laamp_flavour_ewan_0002_watch_partner_trigger = yes } add_to_list = possible_watch_partner_2_list } ## Friends & best friends. every_relation = { type = friend limit = { ep3_laamp_flavour_ewan_0002_watch_partner_trigger = yes } add_to_list = possible_watch_partner_2_list } ## Now, sort through them to find our best candidate. ordered_in_list = { list = possible_watch_partner_2_list order_by = "opinion(root)" save_scope_as = watch_partner_2 } } # Appreciate the solitude. option = { name = ep3_laamp_flavour_ewan.0001.a add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0001_the_little_things_modifier years = 10 } stress_impact = { base = medium_stress_loss shy = medium_stress_impact_loss gregarious = miniscule_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } # Call up consort or child. option = { name = ep3_laamp_flavour_ewan.0001.b trigger = { exists = scope:watch_partner_1 } progress_towards_friend_effect = { REASON = friend_adventurer_watched_sunset CHARACTER = scope:watch_partner_1 OPINION = 30 } stress_impact = { gregarious = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } opinion_modifier = { opinion_target = scope:watch_partner_1 } } } # Call up friend/potential friend. option = { name = ep3_laamp_flavour_ewan.0001.c trigger = { exists = scope:watch_partner_2 } progress_towards_friend_effect = { REASON = friend_adventurer_watched_sunset CHARACTER = scope:watch_partner_2 OPINION = 40 } stress_impact = { gregarious = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } opinion_modifier = { opinion_target = scope:watch_partner_2 } } } # Get on with the evening/morning's work. option = { name = ep3_laamp_flavour_ewan.0001.d add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0001_all_business_modifier years = 10 } stress_impact = { diligent = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 2 } } } } ################################################## # Fire & Friends # by Ewan Cowhig Croft # 0011 - 0020 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0011_mocker_trigger = { has_trait = gregarious ep3_laamp_flavour_ewan_available_courtier_trigger = yes } scripted_trigger ep3_laamp_flavour_ewan_0011_mockee_trigger = { NOT = { has_trait = gregarious } ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Filter out anyone that most folks'd be _reluctant_ to criticise. NOR = { is_close_or_extended_family_of = root is_consort_of = root has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } } } # Larks at the campfire. ep3_laamp_flavour_ewan.0011 = { type = character_event title = ep3_laamp_flavour_ewan.0011.t desc = { desc = ep3_laamp_flavour_ewan.0011.desc.intro random_valid = { triggered_desc = { trigger = { scope:mockee = { has_trait = lustful } } desc = ep3_laamp_flavour_ewan.0011.desc.lustful } triggered_desc = { trigger = { scope:mockee = { has_trait = chaste } } desc = ep3_laamp_flavour_ewan.0011.desc.chaste } triggered_desc = { trigger = { scope:mockee = { has_trait = gluttonous } } desc = ep3_laamp_flavour_ewan.0011.desc.gluttonous } triggered_desc = { trigger = { scope:mockee = { has_trait = temperate } } desc = ep3_laamp_flavour_ewan.0011.desc.temperate } triggered_desc = { trigger = { scope:mockee = { has_trait = greedy } } desc = ep3_laamp_flavour_ewan.0011.desc.greedy } triggered_desc = { trigger = { scope:mockee = { has_trait = generous } } desc = ep3_laamp_flavour_ewan.0011.desc.generous } triggered_desc = { trigger = { scope:mockee = { has_trait = lazy } } desc = ep3_laamp_flavour_ewan.0011.desc.lazy } triggered_desc = { trigger = { scope:mockee = { has_trait = diligent } } desc = ep3_laamp_flavour_ewan.0011.desc.diligent } triggered_desc = { trigger = { scope:mockee = { has_trait = wrathful } } desc = ep3_laamp_flavour_ewan.0011.desc.wrathful } triggered_desc = { trigger = { scope:mockee = { has_trait = calm } } desc = ep3_laamp_flavour_ewan.0011.desc.calm } triggered_desc = { trigger = { scope:mockee = { has_trait = patient } } desc = ep3_laamp_flavour_ewan.0011.desc.patient } triggered_desc = { trigger = { scope:mockee = { has_trait = impatient } } desc = ep3_laamp_flavour_ewan.0011.desc.impatient } triggered_desc = { trigger = { scope:mockee = { has_trait = arrogant } } desc = ep3_laamp_flavour_ewan.0011.desc.arrogant } triggered_desc = { trigger = { scope:mockee = { has_trait = humble } } desc = ep3_laamp_flavour_ewan.0011.desc.humble } triggered_desc = { trigger = { scope:mockee = { has_trait = deceitful } } desc = ep3_laamp_flavour_ewan.0011.desc.deceitful } triggered_desc = { trigger = { scope:mockee = { has_trait = honest } } desc = ep3_laamp_flavour_ewan.0011.desc.honest } triggered_desc = { trigger = { scope:mockee = { has_trait = craven } } desc = ep3_laamp_flavour_ewan.0011.desc.craven } triggered_desc = { trigger = { scope:mockee = { has_trait = brave } } desc = ep3_laamp_flavour_ewan.0011.desc.brave } triggered_desc = { trigger = { scope:mockee = { has_trait = shy } } desc = ep3_laamp_flavour_ewan.0011.desc.shy } triggered_desc = { trigger = { scope:mockee = { has_trait = gregarious } } desc = ep3_laamp_flavour_ewan.0011.desc.gregarious } triggered_desc = { trigger = { scope:mockee = { has_trait = ambitious } } desc = ep3_laamp_flavour_ewan.0011.desc.ambitious } triggered_desc = { trigger = { scope:mockee = { has_trait = content } } desc = ep3_laamp_flavour_ewan.0011.desc.content } triggered_desc = { trigger = { scope:mockee = { has_trait = arbitrary } } desc = ep3_laamp_flavour_ewan.0011.desc.arbitrary } triggered_desc = { trigger = { scope:mockee = { has_trait = just } } desc = ep3_laamp_flavour_ewan.0011.desc.just } triggered_desc = { trigger = { scope:mockee = { has_trait = cynical } } desc = ep3_laamp_flavour_ewan.0011.desc.cynical } triggered_desc = { trigger = { scope:mockee = { has_trait = zealous } } desc = ep3_laamp_flavour_ewan.0011.desc.zealous } triggered_desc = { trigger = { scope:mockee = { has_trait = paranoid } } desc = ep3_laamp_flavour_ewan.0011.desc.paranoid } triggered_desc = { trigger = { scope:mockee = { has_trait = trusting } } desc = ep3_laamp_flavour_ewan.0011.desc.trusting } triggered_desc = { trigger = { scope:mockee = { has_trait = compassionate } } desc = ep3_laamp_flavour_ewan.0011.desc.compassionate } triggered_desc = { trigger = { scope:mockee = { has_trait = callous } } desc = ep3_laamp_flavour_ewan.0011.desc.callous } triggered_desc = { trigger = { scope:mockee = { has_trait = sadistic } } desc = ep3_laamp_flavour_ewan.0011.desc.sadistic } triggered_desc = { trigger = { scope:mockee = { has_trait = stubborn } } desc = ep3_laamp_flavour_ewan.0011.desc.stubborn } triggered_desc = { trigger = { scope:mockee = { has_trait = fickle } } desc = ep3_laamp_flavour_ewan.0011.desc.fickle } triggered_desc = { trigger = { scope:mockee = { has_trait = vengeful } } desc = ep3_laamp_flavour_ewan.0011.desc.vengeful } triggered_desc = { trigger = { scope:mockee = { has_trait = forgiving } } desc = ep3_laamp_flavour_ewan.0011.desc.forgiving } triggered_desc = { trigger = { scope:mockee = { has_trait = eccentric } } desc = ep3_laamp_flavour_ewan.0011.desc.eccentric } } desc = ep3_laamp_flavour_ewan.0011.desc.outro } theme = laamp left_portrait = { character = scope:mocker animation = laugh } right_portrait = { character = scope:mockee animation = disapproval } override_background = { reference = ep3_campfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0011 } } # Make sure we've got at least one mocker & one mockee. any_courtier = { ep3_laamp_flavour_ewan_0011_mocker_trigger = yes } any_courtier = { ep3_laamp_flavour_ewan_0011_mockee_trigger = yes } } weight_multiplier = { modifier = { add = -0.5 has_trait = shy } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0011 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0011 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab our courtiers. random_courtier = { limit = { ep3_laamp_flavour_ewan_0011_mocker_trigger = yes } save_scope_as = mocker } random_courtier = { limit = { ep3_laamp_flavour_ewan_0011_mockee_trigger = yes } save_scope_as = mockee } # Save our county for loc. location.county = { save_scope_as = current_county } } # Join in the ribbing of scope:mockee. option = { name = ep3_laamp_flavour_ewan.0011.a duel = { skill = diplomacy target = scope:mockee # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.a.tt.success left_icon = scope:mockee every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = proper_jokes_opinion opinion = 20 } } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.a.tt.failure left_icon = scope:mockee scope:mockee = { reverse_add_opinion = { target = root modifier = humiliated_opinion opinion = -30 } } } } } stress_impact = { gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -0.25 } opinion_modifier = { opinion_target = scope:mockee multiplier = -1 } } } # Turn the tables on scope:mocker. option = { name = ep3_laamp_flavour_ewan.0011.b duel = { skill = diplomacy target = scope:mocker # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.b.tt.success left_icon = scope:mocker every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = proper_jokes_opinion opinion = 20 } } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.b.tt.failure left_icon = scope:mocker scope:mocker = { reverse_add_opinion = { target = root modifier = humiliated_opinion opinion = -30 } } } } } stress_impact = { gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 0.5 } opinion_modifier = { opinion_target = scope:mocker } } } # Tell a joke of your own. option = { name = ep3_laamp_flavour_ewan.0011.c duel = { skill = diplomacy value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.c.tt.success every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = proper_jokes_opinion opinion = 20 } } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0011.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0011.c.tt.failure add_prestige = medium_prestige_loss } } } stress_impact = { gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 0.5 } } } # Soak it all in. option = { name = ep3_laamp_flavour_ewan.0011.d # Main effect is stress loss. stress_impact = { base = medium_stress_loss shy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } } ################################################## # A Little Follower # by Ewan Cowhig Croft # 0021 - 0030 ################################################## # Happy cat or dog follows you. ep3_laamp_flavour_ewan.0021 = { type = character_event title = ep3_laamp_flavour_ewan.0021.t desc = { first_valid = { triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.intro.cat } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.intro.dog } } random_valid = { triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.cat.1 } triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.cat.2 } triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.cat.3 } triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.cat.4 } triggered_desc = { trigger = { scope:animal_type = flag:cat } desc = ep3_laamp_flavour_ewan.0021.desc.cat.5 } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.dog.1 } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.dog.2 } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.dog.3 } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.dog.4 } triggered_desc = { trigger = { scope:animal_type = flag:dog } desc = ep3_laamp_flavour_ewan.0021.desc.dog.5 } } desc = ep3_laamp_flavour_ewan.0021.desc.outro } theme = laamp left_portrait = { character = root animation = admiration } override_background = { reference = corridor_day } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0021 } } # This one won't make sense if you could just get a dog at any point, so rule that out. NOT = { domicile = { has_domicile_building = baggage_train_kennel } } # Plus make sure that we don't _already_ have both dog & cat. OR = { ep3_laamp_flavour_ewan_no_dog_trigger = no ep3_laamp_flavour_ewan_no_cat_trigger = no } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0021 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0021 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Pick whether this'll be a cat or a dog. random_list = { # Prefer cats over dogs because: # A) You can get dogs via the kennels. # B) They are innately superior. 50 = { trigger = { ep3_laamp_flavour_ewan_no_dog_trigger = yes } save_scope_value_as = { name = animal_type value = flag:dog } } 150 = { trigger = { ep3_laamp_flavour_ewan_no_cat_trigger = yes } save_scope_value_as = { name = animal_type value = flag:cat } } } } # Adopt the animal. option = { name = ep3_laamp_flavour_ewan.0021.a if = { limit = { scope:animal_type = flag:cat } start_cat_story_cycle_effect = yes } else = { start_dog_story_cycle_effect = yes } # Everyone likes a pet. add_stress = medium_stress_impact_loss ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Low on provisions: that's... a meal... option = { name = ep3_laamp_flavour_ewan.0021.b trigger = { domicile.provisions <= provisions_privation_threshold_start } domicile = { change_provisions = microscopic_provisions_gain } stress_impact = { gluttonous = minor_stress_impact_loss callous = minor_stress_impact_loss compassionate = miniscule_stress_impact_gain temperate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # Sadistic: kick the animal. option = { name = ep3_laamp_flavour_ewan.0021.c trigger = { has_trait = sadistic } trait = sadistic # Remember that time random = { chance = 1 increase_wounds_effect = { REASON = wild_animal } } # Main effect is the stress loss. stress_impact = { sadistic = major_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -3 } } } # It's just a fellow traveller, leave it be. option = { name = ep3_laamp_flavour_ewan.0021.d if = { limit = { scope:animal_type = flag:cat } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0021_respected_cat_modifier years = 10 } } else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0021_respected_dog_modifier years = 10 } } stress_impact = { shy = minor_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } } ################################################## # Tumbling Down # by Ewan Cowhig Croft # 0031 - 0040 ################################################## # Stooge falls down hill. ep3_laamp_flavour_ewan.0031 = { type = character_event title = ep3_laamp_flavour_ewan.0031.t desc = { desc = ep3_laamp_flavour_ewan.0031.desc.intro first_valid = { triggered_desc = { trigger = { scope:terrain_type = flag:plains } desc = ep3_laamp_flavour_ewan.0031.desc.plains } triggered_desc = { trigger = { scope:terrain_type = flag:farmlands } desc = ep3_laamp_flavour_ewan.0031.desc.farmlands } triggered_desc = { trigger = { scope:terrain_type = flag:hills } desc = ep3_laamp_flavour_ewan.0031.desc.hills } triggered_desc = { trigger = { scope:terrain_type = flag:mountains } desc = ep3_laamp_flavour_ewan.0031.desc.mountains } triggered_desc = { trigger = { scope:terrain_type = flag:desert } desc = ep3_laamp_flavour_ewan.0031.desc.desert } triggered_desc = { trigger = { scope:terrain_type = flag:desert_mountains } desc = ep3_laamp_flavour_ewan.0031.desc.desert_mountains } triggered_desc = { trigger = { scope:terrain_type = flag:oasis } desc = ep3_laamp_flavour_ewan.0031.desc.oasis } triggered_desc = { trigger = { scope:terrain_type = flag:jungle } desc = ep3_laamp_flavour_ewan.0031.desc.jungle } triggered_desc = { trigger = { scope:terrain_type = flag:forest } desc = ep3_laamp_flavour_ewan.0031.desc.forest } triggered_desc = { trigger = { scope:terrain_type = flag:taiga } desc = ep3_laamp_flavour_ewan.0031.desc.taiga } triggered_desc = { trigger = { scope:terrain_type = flag:wetlands } desc = ep3_laamp_flavour_ewan.0031.desc.wetlands } triggered_desc = { trigger = { scope:terrain_type = flag:steppe } desc = ep3_laamp_flavour_ewan.0031.desc.steppe } triggered_desc = { trigger = { scope:terrain_type = flag:floodplains } desc = ep3_laamp_flavour_ewan.0031.desc.floodplains } triggered_desc = { trigger = { scope:terrain_type = flag:drylands } desc = ep3_laamp_flavour_ewan.0031.desc.drylands } } desc = ep3_laamp_flavour_ewan.0031.desc.midtro first_valid = { triggered_desc = { trigger = { scope:stooge = { is_alive = no } } desc = ep3_laamp_flavour_ewan.0031.desc.outro.dead } desc = ep3_laamp_flavour_ewan.0031.desc.outro.fallback } } theme = laamp left_portrait = { character = root animation = schadenfreude } right_portrait = { character = scope:stooge animation = fear } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0031 } } # This event'll be pointless if we don't have some stress, so make sure we're a little tense. stress >= 25 # Make sure we've got a stooge. court_position:stooge_camp_officer ?= { is_available_allow_travelling = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0031 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0031 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Grab our stooge. court_position:stooge_camp_officer = { save_scope_as = stooge } # Grab our terrain. ep3_laamp_flavour_ewan_register_terrain_effect = yes ## Plus, this means injury. scope:stooge = { increase_wounds_effect = { REASON = fell_wilderness } } # Save our county for loc. location.county = { save_scope_as = current_county } } # Laugh. option = { name = ep3_laamp_flavour_ewan.0031.a scope:stooge = { if = { limit = { is_alive = yes } add_opinion = { target = root modifier = cruelty_opinion opinion = -40 } } # Acknowledge that this is a wee bit ghoulish if they've died. else = { root = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0031_grisly_modifier years = 5 } } } } # Main effect comes from stress loss. stress_impact = { base = major_stress_loss sadistic = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } # Snicker, but leave it at that. option = { name = ep3_laamp_flavour_ewan.0031.b scope:stooge = { if = { limit = { is_alive = yes } add_opinion = { target = root modifier = cruelty_opinion opinion = -20 } } # Acknowledge that this is a wee bit ghoulish if they've died. else = { root = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0031_macabre_modifier years = 5 } } } } # Main effect comes from stress loss. stress_impact = { base = medium_stress_loss sadistic = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -0.5 ai_sociability = 0.5 } } } # Move on, this is beneath you. option = { name = ep3_laamp_flavour_ewan.0031.c add_prestige = miniscule_prestige_gain stress_impact = { arrogant = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } } ################################################## # Travails of a Cook # by Ewan Cowhig Croft # 0041 - 0050 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = { domicile.provisions >= domicile.max_provisions ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no } scripted_trigger ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = { domicile.provisions < domicile.max_provisions domicile.provisions > provisions_privation_threshold_start ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no } scripted_trigger ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = { domicile.provisions <= provisions_privation_threshold_start ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no } scripted_trigger ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = { location = { geographical_region = custom_sahara_proper # If we're in an oasis, we should act like it. NOT = { terrain = oasis } } } # Recipes on the road. ep3_laamp_flavour_ewan.0041 = { type = character_event title = ep3_laamp_flavour_ewan.0041.t desc = { first_valid = { triggered_desc = { trigger = { exists = scope:camp_cook } desc = ep3_laamp_flavour_ewan.0041.desc.has_cook } desc = ep3_laamp_flavour_ewan.0041.desc.nameless_cook } first_valid = { triggered_desc = { trigger = { scope:terrain_type = flag:plains } desc = ep3_laamp_flavour_ewan.0041.desc.plains } triggered_desc = { trigger = { scope:terrain_type = flag:farmlands } desc = ep3_laamp_flavour_ewan.0041.desc.farmlands } triggered_desc = { trigger = { scope:terrain_type = flag:hills } desc = ep3_laamp_flavour_ewan.0041.desc.hills } triggered_desc = { trigger = { scope:terrain_type = flag:mountains } desc = ep3_laamp_flavour_ewan.0041.desc.mountains } triggered_desc = { trigger = { scope:terrain_type = flag:desert } desc = ep3_laamp_flavour_ewan.0041.desc.desert } triggered_desc = { trigger = { scope:terrain_type = flag:desert_mountains } desc = ep3_laamp_flavour_ewan.0041.desc.desert_mountains } triggered_desc = { trigger = { scope:terrain_type = flag:oasis } desc = ep3_laamp_flavour_ewan.0041.desc.oasis } triggered_desc = { trigger = { scope:terrain_type = flag:jungle } desc = ep3_laamp_flavour_ewan.0041.desc.jungle } triggered_desc = { trigger = { scope:terrain_type = flag:forest } desc = ep3_laamp_flavour_ewan.0041.desc.forest } triggered_desc = { trigger = { scope:terrain_type = flag:taiga } desc = ep3_laamp_flavour_ewan.0041.desc.taiga } triggered_desc = { trigger = { scope:terrain_type = flag:wetlands } desc = ep3_laamp_flavour_ewan.0041.desc.wetlands } triggered_desc = { trigger = { scope:terrain_type = flag:steppe } desc = ep3_laamp_flavour_ewan.0041.desc.steppe } triggered_desc = { trigger = { scope:terrain_type = flag:floodplains } desc = ep3_laamp_flavour_ewan.0041.desc.floodplains } triggered_desc = { trigger = { scope:terrain_type = flag:drylands } desc = ep3_laamp_flavour_ewan.0041.desc.drylands } } desc = ep3_laamp_flavour_ewan.0041.desc.outro first_valid = { triggered_desc = { trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } desc = ep3_laamp_flavour_ewan.0041.desc.provisions.high } triggered_desc = { trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } desc = ep3_laamp_flavour_ewan.0041.desc.provisions.medium } triggered_desc = { trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } desc = ep3_laamp_flavour_ewan.0041.desc.provisions.low } triggered_desc = { trigger = { ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } desc = ep3_laamp_flavour_ewan.0041.desc.provisions.sahara } } } theme = laamp left_portrait = { character = root animation = stress } right_portrait = { character = scope:camp_cook animation = anger } override_background = { reference = corridor_day } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0041 } } } weight_multiplier = { base = 1 modifier = { add = 1 ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0041 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0041 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab our terrain. ep3_laamp_flavour_ewan_register_terrain_effect = yes # If we've got a camp cook, nab them. court_position:camp_cook_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } save_scope_as = camp_cook } } } # High prov: what're you even complaining about? option = { name = ep3_laamp_flavour_ewan.0041.a trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } scope:camp_cook ?= { add_opinion = { target = root modifier = piqued_opinion opinion = -25 } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0041_well_provided_camp_modifier years = 10 } stress_impact = { temperate = minor_stress_impact_loss gluttonous = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # High prov: fine, we can restock. option = { name = ep3_laamp_flavour_ewan.0041.b trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } duel = { skill = stewardship value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.b.tt.success left_icon = scope:camp_cook remove_short_term_gold = minor_gold_laamps_value domicile = { change_provisions = medium_provisions_gain } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.b.tt.failure left_icon = scope:camp_cook remove_short_term_gold = minor_gold_laamps_value domicile = { change_provisions = miniscule_provisions_gain } } } } if = { limit = { exists = scope:camp_cook } scope:camp_cook ?= { add_opinion = { target = root modifier = grateful_opinion opinion = 25 } } add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } } stress_impact = { gluttonous = minor_stress_impact_loss temperate = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } modifier = { factor = 0 gold <= major_gold_laamps_value } } } # High prov: absolutely not, work with what you've got. option = { name = ep3_laamp_flavour_ewan.0041.c trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } scope:camp_cook ?= { add_opinion = { target = root modifier = frustrated_opinion opinion = -40 } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0041_stern_camp_modifier years = 10 } stress_impact = { temperate = minor_stress_impact_loss gluttonous = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = -1 } } } # mess_tent_cooks: I'm sure you can come up with something between you. option = { name = ep3_laamp_flavour_ewan.0041.d trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes domicile = { has_domicile_building = mess_tent_cooks } } reason = has_building_mess_tent_cooks if = { limit = { exists = scope:camp_cook } reverse_add_opinion = { target = scope:camp_cook modifier = flattered_opinion opinion = 30 } } add_prestige = medium_prestige_gain # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Med prov: we can probably find something. option = { name = ep3_laamp_flavour_ewan.0041.e trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } duel = { skill = learning value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.e.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.e.tt.success left_icon = scope:camp_cook domicile = { change_provisions = medium_provisions_gain } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.e.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.e.tt.failure left_icon = scope:camp_cook domicile = { change_provisions = miniscule_provisions_gain } } } } stress_impact = { gluttonous = miniscule_stress_impact_loss temperate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Med prov: restocking would be a good idea anyway, let's make some deals. option = { name = ep3_laamp_flavour_ewan.0041.f trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } duel = { skill = stewardship value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.f.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.f.tt.success left_icon = scope:camp_cook remove_short_term_gold = medium_gold_laamps_value domicile = { change_provisions = major_provisions_gain } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.f.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.f.tt.failure left_icon = scope:camp_cook remove_short_term_gold = medium_gold_laamps_value domicile = { change_provisions = medium_provisions_gain } } } } if = { limit = { exists = scope:camp_cook } scope:camp_cook ?= { add_opinion = { target = root modifier = grateful_opinion opinion = 25 } } add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } modifier = { factor = 0 gold <= massive_gold_laamps_value } } } # Med prov: it's not in the budget. option = { name = ep3_laamp_flavour_ewan.0041.g trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } scope:camp_cook ?= { add_opinion = { target = root modifier = frustrated_opinion opinion = -40 } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0041_quite_stern_camp_modifier years = 10 } stress_impact = { greedy = miniscule_stress_impact_loss generous = minor_stress_impact_gain gluttonous = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } } } # mess_tent_brewers: just double the beer rations and call it a day. option = { name = ep3_laamp_flavour_ewan.0041.h trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes domicile = { has_domicile_building = mess_tent_brewers } } reason = has_building_mess_tent_brewers scope:camp_cook ?= { add_opinion = { target = root modifier = piqued_opinion opinion = -20 } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0041_doubled_beer_rations_camp_modifier years = 10 } stress_impact = { gluttonous = minor_stress_impact_loss gregarious = miniscule_stress_impact_loss temperate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Low prov: we can stop to forage. option = { name = ep3_laamp_flavour_ewan.0041.i trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } current_travel_plan = { delay_travel_plan = { months = 1 } } duel = { skill = learning value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.i.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.i.tt.success left_icon = scope:camp_cook domicile = { change_provisions = major_provisions_gain } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.i.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.i.tt.failure left_icon = scope:camp_cook domicile = { change_provisions = medium_provisions_gain } } } } # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Low prov: we'll buy what extra provisions we can... option = { name = ep3_laamp_flavour_ewan.0041.j trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } duel = { skill = stewardship value = extremely_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.j.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.j.tt.success left_icon = scope:camp_cook remove_short_term_gold = medium_gold_laamps_value domicile = { change_provisions = major_provisions_gain } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.0041.j.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.0041.j.tt.failure left_icon = scope:camp_cook remove_short_term_gold = medium_gold_laamps_value domicile = { change_provisions = medium_provisions_gain } } } } if = { limit = { exists = scope:camp_cook } scope:camp_cook ?= { add_opinion = { target = root modifier = grateful_opinion opinion = 25 } } add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } } # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } modifier = { factor = 0 gold <= massive_gold_laamps_value } } } # Low prov: we _have_ to push on. option = { name = ep3_laamp_flavour_ewan.0041.k trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } scope:camp_cook ?= { add_opinion = { target = root modifier = frustrated_opinion opinion = -40 } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0041_very_stern_camp_modifier years = 10 } # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # supply_tent_reserve_provisions: hmm, we might have _something_ reserved. option = { name = ep3_laamp_flavour_ewan.0041.l trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes domicile = { has_domicile_building = supply_tent_reserve_provisions } } reason = has_building_supply_tent_reserve_provisions if = { limit = { exists = scope:camp_cook } reverse_add_opinion = { target = scope:camp_cook modifier = grateful_opinion opinion = 20 } } add_prestige = medium_prestige_gain stress_impact = { gluttonous = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_greed = -1 } } } # Sahara: do you _see_ anywhere to buy provisions you idiot? option = { name = ep3_laamp_flavour_ewan.0041.m trigger = { ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } if = { limit = { exists = scope:camp_cook } reverse_add_opinion = { target = scope:camp_cook modifier = frustrated_opinion opinion = -40 } } else = { add_prestige = minor_prestige_loss } stress_impact = { base = medium_stress_gain temperate = minor_stress_impact_loss gluttonous = medium_stress_impact_gain } ai_chance = { # This'll generally be your only option, so we don't care about modifiers. base = 1 } } # Sahara + supply_tent_reserve_water: I don't care if we're eating gruel till we're through this. option = { name = ep3_laamp_flavour_ewan.0041.n trigger = { ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes domicile = { has_domicile_building = supply_tent_reserve_water } } reason = has_building_supply_tent_reserve_water if = { limit = { exists = scope:camp_cook } reverse_add_opinion = { target = scope:camp_cook modifier = frustrated_opinion opinion = -20 } } add_prestige = medium_prestige_gain # No stress gain here — narratively appropriate but we don't want you to feel like you're punished for planning ahead. ai_chance = { # If you've got this, take it. base = 1000 } } } ################################################## # A Friendly Clamour # by Ewan Cowhig Croft # 0051 - 0060 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = { provisions >= max_provisions } scripted_effect ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = { random_list = { # Supply Tent 100 = { trigger = { domicile = { has_domicile_building_or_higher = supply_tent_01 } NOT = { exists = scope:supply_tent } } save_scope_value_as = { name = supply_tent value = yes } } # Barber Tent 100 = { trigger = { domicile = { has_domicile_building_or_higher = barber_tent_01 } NOT = { exists = scope:barber_tent } } save_scope_value_as = { name = barber_tent value = yes } } # Baggage Train 100 = { trigger = { domicile = { has_domicile_building_or_higher = baggage_train_01 } NOT = { exists = scope:baggage_train } } save_scope_value_as = { name = baggage_train value = yes } } # Mess Tent 100 = { trigger = { domicile = { has_domicile_building_or_higher = mess_tent_01 } NOT = { exists = scope:mess_tent } } save_scope_value_as = { name = mess_tent value = yes } } # Camp Fire 100 = { trigger = { domicile = { has_domicile_building_or_higher = camp_fire_01 } NOT = { exists = scope:camp_fire } } save_scope_value_as = { name = camp_fire value = yes } } # Proving Grounds 100 = { trigger = { domicile = { has_domicile_building_or_higher = proving_grounds_01 } NOT = { exists = scope:proving_grounds } } save_scope_value_as = { name = proving_grounds value = yes } } # Camp Perimeter 100 = { trigger = { domicile = { has_domicile_building_or_higher = camp_perimeter_01 } NOT = { exists = scope:camp_perimeter } } save_scope_value_as = { name = camp_perimeter value = yes } } } } # A pleasant evening buzz as the camp settles down. ep3_laamp_flavour_ewan.0051 = { type = character_event title = ep3_laamp_flavour_ewan.0051.t desc = { desc = ep3_laamp_flavour_ewan.0051.desc.intro # Purpose. random_valid = { triggered_desc = { trigger = { has_realm_law = camp_purpose_wanderers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_wanderers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_wanderers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.3 } triggered_desc = { trigger = { has_realm_law = camp_purpose_mercenaries } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_mercenaries } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_mercenaries } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.3 } triggered_desc = { trigger = { has_realm_law = camp_purpose_scholars } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_scholars } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_scholars } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.3 } triggered_desc = { trigger = { has_realm_law = camp_purpose_explorers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_explorers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_explorers } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.3 } triggered_desc = { trigger = { has_realm_law = camp_purpose_brigands } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_brigands } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_brigands } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.3 } triggered_desc = { trigger = { has_realm_law = camp_purpose_legitimists } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.1 } triggered_desc = { trigger = { has_realm_law = camp_purpose_legitimists } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.2 } triggered_desc = { trigger = { has_realm_law = camp_purpose_legitimists } desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.3 } } # Buildings. random_valid = { triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = supply_tent_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = supply_tent_sutler } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_sutler } triggered_desc = { trigger = { domicile = { has_domicile_building = supply_tent_smithy } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_smithy } triggered_desc = { trigger = { domicile = { has_domicile_building = supply_tent_arsenal } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_arsenal } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = barber_tent_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = barber_tent_surgeons_tools } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_surgeons_tools } triggered_desc = { trigger = { domicile = { has_domicile_building = barber_tent_dentists_tools } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_dentists_tools } triggered_desc = { trigger = { domicile = { has_domicile_building = barber_tent_torturers_tools } any_prisoner = { } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_torturers_tools } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = baggage_train_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_ample_steeds } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_ample_steeds } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_porters } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_porters } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_trackers } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_trackers } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_kennel } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_kennel } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_siege_engineers } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_siege_engineers } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_shrine } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_shrine } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_scribes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_scribes } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_bartering_grounds } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_bartering_grounds } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_ransom_cages } any_prisoner = { } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_ransom_cages } triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_pleasure_tents } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_pleasure_tents } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = mess_tent_01 ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = mess_tent_herbalists ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_herbalists } triggered_desc = { trigger = { domicile = { has_domicile_building = mess_tent_brewers ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_brewers } triggered_desc = { trigger = { domicile = { has_domicile_building = mess_tent_bakers ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_bakers } triggered_desc = { trigger = { domicile = { has_domicile_building = mess_tent_cooks ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_cooks } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = camp_fire_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_fire_trailing_musicians } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_trailing_musicians } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_fire_wandering_poets } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_wandering_poets } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_fire_capering_fools } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_capering_fools } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_fire_local_hangers_on } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_local_hangers_on } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_fire_juicy_rumors } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_juicy_rumors } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = proving_grounds_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_horse_run } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_horse_run } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_camel_run } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_camel_run } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_elephantry_reserve } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_elephantry_reserve } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_nightly_barding_drills } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_nightly_barding_drills } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_the_stump } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_the_stump } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_personal_bouts } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_personal_bouts } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_training_circle } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_training_circle } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_mock_battle_drills } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_mock_battle_drills } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_the_stick_game } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_the_stick_game } triggered_desc = { trigger = { domicile = { has_domicile_building = proving_grounds_bodyguard_drills } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_bodyguard_drills } triggered_desc = { trigger = { domicile = { has_domicile_building_or_higher = camp_perimeter_01 } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_01 } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_perimeter_fixed_layout } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_fixed_layout } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_perimeter_palisade } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_palisade } triggered_desc = { trigger = { domicile = { has_domicile_building = camp_perimeter_ditch } } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_ditch } desc = ep3_laamp_flavour_ewan.0051.desc.buildings.fallback } desc = ep3_laamp_flavour_ewan.0051.desc.followers.connector # Courtiers. random_valid = { # Their relations. triggered_desc = { trigger = { OR = { exists = scope:courtier_friend_1 exists = scope:courtier_best_friend_1 exists = scope:courtier_rival_1 exists = scope:courtier_nemesis_1 exists = scope:courtier_lover_1 exists = scope:courtier_soulmate_1 } } desc = { random_valid = { triggered_desc = { trigger = { exists = scope:courtier_friend_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.friends } triggered_desc = { trigger = { exists = scope:courtier_best_friend_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.best_friends } triggered_desc = { trigger = { exists = scope:courtier_rival_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.rivals } triggered_desc = { trigger = { exists = scope:courtier_nemesis_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.nemeses } triggered_desc = { trigger = { exists = scope:courtier_lover_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.lovers } triggered_desc = { trigger = { exists = scope:courtier_soulmate_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.soulmates } } } } # How many you have of different kinds. triggered_desc = { trigger = { OR = { exists = scope:leading_child exists = scope:leading_knight exists = scope:culture_1 exists = scope:faith_1 } } desc = { random_valid = { triggered_desc = { trigger = { exists = scope:leading_child } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_children } triggered_desc = { trigger = { exists = scope:leading_knight } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_knights } triggered_desc = { trigger = { exists = scope:culture_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_languages } triggered_desc = { trigger = { exists = scope:faith_1 } desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_faiths } } } } # Notable characters. triggered_desc = { trigger = { exists = scope:notable_char } desc = { random_valid = { triggered_desc = { trigger = { scope:notable_char = { has_trait = lustful } # Rule this out if it might be narratively upsetting, as we don't want to deal with that headache. OR = { NOR = { is_consort_of = root has_relation_lover = root } accepts_adultery_without_penalty_trigger = yes } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.lustful } triggered_desc = { trigger = { scope:notable_char = { has_trait = gluttonous } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.gluttonous } triggered_desc = { trigger = { scope:notable_char = { has_trait = temperate } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.temperate } triggered_desc = { trigger = { scope:notable_char = { has_trait = greedy } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.greedy } triggered_desc = { trigger = { scope:notable_char = { has_trait = generous } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.generous } triggered_desc = { trigger = { scope:notable_char = { has_trait = lazy } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.lazy } triggered_desc = { trigger = { scope:notable_char = { has_trait = diligent } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.diligent } triggered_desc = { trigger = { scope:notable_char = { has_trait = wrathful } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.wrathful } triggered_desc = { trigger = { scope:notable_char = { has_trait = calm } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.calm } triggered_desc = { trigger = { scope:notable_char = { has_trait = patient } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.patient } triggered_desc = { trigger = { scope:notable_char = { has_trait = impatient } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.impatient } triggered_desc = { trigger = { scope:notable_char = { has_trait = arrogant } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.arrogant } triggered_desc = { trigger = { scope:notable_char = { has_trait = humble } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.humble } triggered_desc = { trigger = { scope:notable_char = { has_trait = deceitful } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.deceitful } triggered_desc = { trigger = { scope:notable_char = { has_trait = honest } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.honest } triggered_desc = { trigger = { scope:notable_char = { has_trait = gregarious } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.gregarious } triggered_desc = { trigger = { scope:notable_char = { has_trait = arbitrary } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.arbitrary } triggered_desc = { trigger = { scope:notable_char = { has_trait = just } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.just } triggered_desc = { trigger = { scope:notable_char = { has_trait = cynical } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.cynical } triggered_desc = { trigger = { scope:notable_char = { has_trait = zealous } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.zealous } triggered_desc = { trigger = { scope:notable_char = { has_trait = paranoid } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.paranoid } triggered_desc = { trigger = { scope:notable_char = { has_trait = trusting } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.trusting } triggered_desc = { trigger = { scope:notable_char = { has_trait = compassionate } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.compassionate } triggered_desc = { trigger = { scope:notable_char = { has_trait = callous } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.callous } triggered_desc = { trigger = { scope:notable_char = { has_trait = sadistic } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.sadistic } triggered_desc = { trigger = { scope:notable_char = { has_trait = stubborn } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.stubborn } triggered_desc = { trigger = { scope:notable_char = { has_trait = fickle } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.fickle } triggered_desc = { trigger = { scope:notable_char = { has_trait = vengeful } } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.vengeful } desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.fallback } } } # Fallbacks. ## Wrap these up so that their weighting doesn't get all weird. desc = { random_valid = { desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.1 desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.2 desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.3 } } } desc = ep3_laamp_flavour_ewan.0051.desc.outro } theme = laamp left_portrait = { character = root animation = happiness } override_background = { reference = corridor_night } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0051 } } # Make sure that we've got at least one mainline building built outside of our pavillion, so that our options aren't totally boring. domicile = { OR = { has_domicile_building_or_higher = supply_tent_01 has_domicile_building_or_higher = barber_tent_01 has_domicile_building_or_higher = baggage_train_01 has_domicile_building_or_higher = mess_tent_01 has_domicile_building_or_higher = camp_fire_01 has_domicile_building_or_higher = proving_grounds_01 has_domicile_building_or_higher = camp_perimeter_01 } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0051 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0051 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Roll which camp options we want to show. ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes # If we're a player, grab our courtier desc. ## Camp relations. ### Friends. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = friend ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_best_friend = prev } } } save_scope_as = courtier_friend_1 random_relation = { type = friend limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_best_friend = prev } } save_scope_as = courtier_friend_2 } } ### Best friends. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = best_friend ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } save_scope_as = courtier_best_friend_1 random_relation = { type = best_friend limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } save_scope_as = courtier_best_friend_2 } } ### Rivals. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = rival ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_nemesis = prev } } } save_scope_as = courtier_rival_1 random_relation = { type = rival limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_nemesis = prev } } save_scope_as = courtier_rival_2 } } ### Nemeses. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = nemesis ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } save_scope_as = courtier_nemesis_1 random_relation = { type = nemesis limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } save_scope_as = courtier_nemesis_2 } } ### Lovers. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = lover ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_soulmate = prev } } } save_scope_as = courtier_lover_1 random_relation = { type = lover limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_relation_soulmate = prev } } save_scope_as = courtier_lover_2 } } ### Soulmates. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes any_relation = { type = soulmate ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } save_scope_as = courtier_soulmate_1 random_relation = { type = soulmate limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } save_scope_as = courtier_soulmate_2 } } ## Follower states. ### Lots of children. if = { limit = { any_courtier = { count >= 8 ep3_laamp_flavour_ewan_available_child_trigger = yes } } # Nab a suitable child to be leading play. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } order_by = { value = age if = { limit = { has_trait = rowdy } add = 3 } if = { limit = { has_trait = charming } add = 2 } if = { limit = { has_trait = pensive } add = -5 } if = { limit = { has_trait = bossy } add = 5 } } save_scope_as = leading_child } } ### Lots of knights. if = { limit = { any_knight = { count >= 10 ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } ordered_knight = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } order_by = prowess save_scope_as = leading_knight } } ### Lots of different languages being spoken. #### First, assemble our list. culture = { add_to_list = cultures_with_unique_languages_list } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } culture = { save_scope_as = culture_temp if = { limit = { NOT = { any_in_list = { list = cultures_with_unique_languages_list has_same_culture_language = scope:culture_temp } } } add_to_list = cultures_with_unique_languages_list } } } #### Then, check how long it is. if = { limit = { "list_size(cultures_with_unique_languages_list)" >= 8 } random_in_list = { list = cultures_with_unique_languages_list limit = { this != root.culture } save_scope_as = culture_1 } random_in_list = { list = cultures_with_unique_languages_list limit = { NOR = { this = root.culture this = scope:culture_1 } } save_scope_as = culture_2 } random_in_list = { list = cultures_with_unique_languages_list limit = { NOR = { this = root.culture this = scope:culture_1 this = scope:culture_2 } } save_scope_as = culture_3 } } ### Lots of different faiths around. #### First, assemble our list. faith = { add_to_list = unique_faiths_list } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } faith = { add_to_list = unique_faiths_list } } #### Then, check how long it is. if = { limit = { "list_size(unique_faiths_list)" >= 5 } random_in_list = { list = unique_faiths_list limit = { this != root.faith } save_scope_as = faith_1 } random_in_list = { list = unique_faiths_list limit = { NOR = { this = root.faith this = scope:faith_1 } } save_scope_as = faith_2 } random_in_list = { list = unique_faiths_list limit = { NOR = { this = root.faith this = scope:faith_1 this = scope:faith_2 } } save_scope_as = faith_3 } } ## Notable character traits. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes OR = { is_close_family_of = root is_consort_of = root has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } has_any_court_position = yes } } save_scope_as = notable_char } } # camp_main_01: retire to my own tent. option = { name = ep3_laamp_flavour_ewan.0051.a # Consolation prestige. add_prestige = minor_prestige_gain stress_impact = { base = medium_stress_loss shy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } # supply_tent_01: visit the supply tent, check the stores. option = { name = ep3_laamp_flavour_ewan.0051.b trigger = { exists = scope:supply_tent } reason = has_building_supply_tent_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_supply_tent_modifier years = 10 } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } } } # barber_tent_01: go for a check-up and a shave/trim at the barbers option = { name = { text = { first_valid = { # Bald woman. triggered_desc = { trigger = { is_female = yes is_bald_trigger = yes } desc = ep3_laamp_flavour_ewan.0051.c.bald.female } # Bald man. triggered_desc = { trigger = { is_male = yes is_bald_trigger = yes } desc = ep3_laamp_flavour_ewan.0051.c.bald.male } # Non-bald man. triggered_desc = { trigger = { is_male = yes } desc = ep3_laamp_flavour_ewan.0051.c.hairy.male } # Non-bald woman. desc = ep3_laamp_flavour_ewan.0051.c.fallback } } } trigger = { exists = scope:barber_tent } reason = has_building_barber_tent_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_barber_tent_modifier years = 10 } stress_impact = { arrogant = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # baggage_train_01: organise the chaos of the baggage train. option = { name = ep3_laamp_flavour_ewan.0051.d trigger = { exists = scope:baggage_train } reason = has_building_baggage_train_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_baggage_train_modifier years = 10 } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # mess_tent_01: get some grub before a line forms. option = { name = ep3_laamp_flavour_ewan.0051.e trigger = { exists = scope:mess_tent } reason = has_building_mess_tent_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_mess_tent_modifier years = 10 } stress_impact = { gluttonous = miniscule_stress_impact_loss temperate = minor_stress_impact_gain } ai_chance = { base = 1 # Anyone who's ever worked in a field knows that this is the only logical thing to do AQAP. ai_value_modifier = { ai_rationality = 5 } } } # camp_fire_01: nab a good seat at the fire. option = { name = ep3_laamp_flavour_ewan.0051.f trigger = { exists = scope:camp_fire } reason = has_building_camp_fire_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_camp_fire_modifier years = 10 } stress_impact = { lazy = miniscule_stress_impact_loss gregarious = miniscule_stress_impact_loss # Don't bully the shies here, they can enjoy a nice fire too. diligent = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 ai_energy = -0.5 } } } # proving_grounds_01: check the soldiery are being diligent. option = { name = ep3_laamp_flavour_ewan.0051.g trigger = { exists = scope:proving_grounds } reason = has_building_proving_grounds_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_proving_grounds_modifier years = 10 } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # camp_perimeter_01: walk the perimeter, check we're being vigilant. option = { name = ep3_laamp_flavour_ewan.0051.h trigger = { exists = scope:camp_perimeter } reason = has_building_camp_perimeter_01_or_higher add_character_modifier = { modifier = ep3_laamp_flavour_ewan_0051_check_building_camp_perimeter_modifier years = 10 } stress_impact = { paranoid = miniscule_stress_impact_loss trusting = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } } ################################################## # An Unexpected Faire # by Ewan Cowhig Croft # 0061 - 0070 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0061_sahara_trigger = { geographical_region = custom_sahara_proper # If we're in an oasis, we should act like it. NOT = { terrain = oasis } } scripted_trigger ep3_laamp_flavour_ewan_0061_steppe_trigger = { geographical_region = world_steppe # We only lack cities on the steppe _proper_. terrain = steppe } # Locals react with impromptu faire. ep3_laamp_flavour_ewan.0061 = { type = character_event title = ep3_laamp_flavour_ewan.0061.t desc = ep3_laamp_flavour_ewan.0061.desc theme = laamp left_portrait = { character = root animation = happiness } right_portrait = { character = scope:local_merchant animation = admiration } override_background = { reference = market_scope } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0061 } } # No one likes brigands. NOT = { has_realm_law = camp_purpose_brigands } # Make sure the location is suitable for there to be a fair. location = { # Gotta have somewhere hosting us. has_holding = yes # And some infrastructure. county = { # We should have some level of urbanisation. development_level >= 20 # And be fully secure. county_control >= 100 } # Plus no plagues. any_province_epidemic = { count <= 0 } # Finally, no major regional blockers. ep3_laamp_flavour_ewan_0061_sahara_trigger = no ep3_laamp_flavour_ewan_0061_steppe_trigger = no } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0061 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0061 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Everyone's a little happier whatever we do. every_courtier = { limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } custom = ep3_laamp_flavour_ewan.0061.tt.everyone_loves_faires add_opinion = { target = root modifier = spirits_lifted_opinion opinion = 20 } add_stress = massive_stress_loss } # Generate our local dude. create_character = { template = merchant_template location = root.location culture = root.location.culture faith = root.location.faith save_scope_as = local_merchant } ## Plus give 'em a nickname. hidden_effect = { scope:local_merchant = { assign_random_nickname_effect = yes } } # Save our county for loc. location.county = { save_scope_as = current_county } # And our location for our background. location = { save_scope_as = background_market_scope } } # What a welcome surprise! option = { name = ep3_laamp_flavour_ewan.0061.a add_prestige = medium_prestige_gain # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Enroll a talented local. option = { name = ep3_laamp_flavour_ewan.0061.b add_courtier = scope:local_merchant reverse_add_opinion = { target = scope:local_merchant modifier = grateful_opinion opinion = 80 } stress_impact = { gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # Pick up some provisions. option = { name = ep3_laamp_flavour_ewan.0061.c remove_short_term_gold = minor_gold_laamps_value domicile = { change_provisions = medium_provisions_gain } stress_impact = { gluttonous = miniscule_stress_impact_loss temperate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } modifier = { factor = 0 gold <= medium_gold_laamps_value } } } # Stay at camp. option = { name = ep3_laamp_flavour_ewan.0061.d # Mostly just stress loss. stress_impact = { base = medium_stress_loss shy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } after = { # Clean up our local if we're not a player. if = { limit = { is_ai = yes this != scope:local_merchant.liege } scope:local_merchant = { death = { death_reason = death_vanished } } } } } ################################################## # Pounding Hooves # by Ewan Cowhig Croft # 0071 - 0080 ################################################## scripted_trigger ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes drinks_alcohol_trigger = yes NOR = { has_trait = temperate has_trait = shy } } # Riding with a hangover-stricken friend. ep3_laamp_flavour_ewan.0071 = { type = character_event title = ep3_laamp_flavour_ewan.0071.t desc = ep3_laamp_flavour_ewan.0071.desc theme = laamp left_portrait = { character = root animation = happiness } right_portrait = { character = scope:hanger animation = stress } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_0071 } } # And we've got a suitable follower. any_courtier = { ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_0071 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_0071 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Try to nab our most party-prone follower. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = yes } order_by = { value = diplomacy if = { limit = { has_trait = drunkard } add = 50 } if = { limit = { has_trait = gluttonous } add = 20 } if = { limit = { has_trait = gregarious } add = 10 } } save_scope_as = hanger add_character_modifier = { modifier = legend_hangover_modifier months = 3 } } } # Slow down for herhim. option = { name = ep3_laamp_flavour_ewan.0071.a reverse_add_opinion = { target = scope:hanger modifier = grateful_opinion opinion = 30 } stress_impact = { compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 2 } } } # Laugh at herhis predicament. option = { name = ep3_laamp_flavour_ewan.0071.b reverse_add_opinion = { target = scope:hanger modifier = annoyed_opinion opinion = -15 } # Plus stress loss. stress_impact = { base = medium_stress_loss sadistic = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } # Kick herhis horse into gear. option = { name = ep3_laamp_flavour_ewan.0071.c reverse_add_opinion = { target = scope:hanger modifier = angry_opinion opinion = -30 } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes this != scope:hanger } custom = custom.every_adult_follower add_opinion = { target = root modifier = proper_jokes_opinion opinion = 20 } } stress_impact = { sadistic = major_stress_impact_loss compassionate = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -0.5 ai_vengefulness = -0.5 } } } # Speed up and leave herhim to his misery. option = { name = ep3_laamp_flavour_ewan.0071.d reverse_add_opinion = { target = scope:hanger modifier = hurt_opinion opinion = -10 } stress_impact = { callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } } ################################################## # CHILDREARING ################################################## # Friends in Low Places # by Ewan Cowhig Croft # 1001 - 1010 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = { age >= scope:lower_age_bound_temp age <= scope:upper_age_bound_temp ep3_laamp_flavour_ewan_available_child_trigger = yes OR = { is_lowborn = yes dynasty.dynasty_prestige_level < @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level } NOR = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp } has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp } } } scripted_trigger ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes num_of_relation_friend <= 1 # Your child must also be suitably posh (since bastards'n'diff-house children exist). dynasty ?= { dynasty_prestige_level >= @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level } save_temporary_scope_as = char_temp save_temporary_scope_value_as = { name = lower_age_bound_temp value = { add = age add = -3 } } save_temporary_scope_value_as = { name = upper_age_bound_temp value = { add = age add = 3 } } root = { any_courtier = { ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = yes } } } scripted_trigger ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = { liege = root OR = { has_any_court_position = yes has_important_relationship_with_character_trigger = { CHARACTER = root } } } # Highborn befriends a lowborn. ep3_laamp_flavour_ewan.1001 = { type = character_event title = ep3_laamp_flavour_ewan.1001.t desc = ep3_laamp_flavour_ewan.1001.desc theme = laamp left_portrait = { character = scope:own_child animation = admiration } right_portrait = { character = scope:other_child animation = happiness } override_background = { reference = corridor_day } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1001 } } # You've gotta be suitably posh. dynasty ?= { dynasty_prestige_level >= @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level } # You have at least one valid child. ## This includes checking for a partner child. any_child = { ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1001 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1001 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab a random child of ours who fits the criteria. random_child = { limit = { ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = yes } save_scope_as = own_child } # Ok, now let's sort a partner child. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = yes } order_by = { value = diplomacy # Boost lowborns. if = { limit = { is_lowborn = yes } add = 1000 } # And anyone who isn't the spawn of someone important. if = { limit = { NOR = { mother ?= { ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = yes } father ?= { ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = yes } } } add = 100 } } save_scope_as = other_child } } # Run along then, you two. option = { name = ep3_laamp_flavour_ewan.1001.a random_list = { 50 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1001.set_friendship left_icon = scope:own_child right_icon = scope:other_child scope:own_child = { set_relation_friend = { reason = friend_children_grew_up_in_same_camp target = scope:other_child } add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } reverse_add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } } } } 50 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1001.set_hidden_potential_friendship left_icon = scope:own_child right_icon = scope:other_child scope:own_child = { add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 25 } reverse_add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 25 } hidden_effect = { set_relation_potential_friend = scope:other_child } } } } } stress_impact = { humble = miniscule_stress_impact_loss arrogant = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # I think you've made a friend for life there, my DaughterSon. option = { name = ep3_laamp_flavour_ewan.1001.b trigger = { scope:own_child = { num_of_relation_best_friend <= 0 } } random_list = { 70 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1001.set_best_friendship left_icon = scope:own_child right_icon = scope:other_child scope:own_child = { set_relation_best_friend = { reason = friend_children_grew_up_in_same_camp target = scope:other_child } add_mutual_gendered_blood_sibling_hook_effect = { TARGET = scope:other_child } } } scope:own_child = { add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } reverse_add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } } } 20 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1001.set_friendship left_icon = scope:own_child right_icon = scope:other_child scope:own_child = { set_relation_friend = { reason = friend_children_grew_up_in_same_camp target = scope:other_child } add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } reverse_add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 50 } } } } 10 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1001.friendship_fizzles left_icon = scope:own_child right_icon = scope:other_child scope:own_child = { add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 10 } reverse_add_opinion = { target = scope:other_child modifier = friendliness_opinion opinion = 10 } } } } } stress_impact = { humble = miniscule_stress_impact_loss arrogant = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Child.GetFirstName, GetSheHe's beneath you. option = { name = ep3_laamp_flavour_ewan.1001.c scope:own_child = { add_opinion = { target = scope:other_child modifier = estranged_opinion opinion = -25 } reverse_add_opinion = { target = scope:other_child modifier = hurt_opinion opinion = -50 } hidden_effect = { set_relation_potential_rival = scope:other_child } } hidden_effect = { # Scope:other_child will remember this. reverse_add_opinion = { target = scope:other_child modifier = respect_opinion opinion = -50 } } stress_impact = { arrogant = medium_stress_impact_loss humble = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } } ################################################## # Learning from Example # by Ewan Cowhig Croft # 1011 - 1020 ################################################## scripted_effect ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { # This'll give us a range of 1:2:3 for 1-2:3-4:5 aptitudes. $OFFICER_CHAR$ = { save_scope_value_as = { name = aptitude_gain value = { if = { limit = { has_court_position = second_camp_officer } add = "aptitude(second_camp_officer)" } else_if = { limit = { has_court_position = quartermaster_camp_officer } add = "aptitude(quartermaster_camp_officer)" } else_if = { limit = { has_court_position = armorer_camp_officer } add = "aptitude(armorer_camp_officer)" } else_if = { limit = { has_court_position = chief_forager_camp_officer } add = "aptitude(chief_forager_camp_officer)" } else_if = { limit = { has_court_position = master_thief_camp_officer } add = "aptitude(master_thief_camp_officer)" } else_if = { limit = { has_court_position = head_porter_camp_officer } add = "aptitude(head_porter_camp_officer)" } else_if = { limit = { has_court_position = head_groom_camp_officer } add = "aptitude(head_groom_camp_officer)" } else_if = { limit = { has_court_position = huntperson_camp_officer } add = "aptitude(huntperson_camp_officer)" } else_if = { limit = { has_court_position = kennelperson_camp_officer } add = "aptitude(kennelperson_camp_officer)" } else_if = { limit = { has_court_position = chief_engineer_camp_officer } add = "aptitude(chief_engineer_camp_officer)" } else_if = { limit = { has_court_position = witness_camp_officer } add = "aptitude(witness_camp_officer)" } else_if = { limit = { has_court_position = person_haggler_camp_officer } add = "aptitude(person_haggler_camp_officer)" } else_if = { limit = { has_court_position = camp_cook_camp_officer } add = "aptitude(camp_cook_camp_officer)" } else_if = { limit = { has_court_position = master_bard_camp_officer } add = "aptitude(master_bard_camp_officer)" } else_if = { limit = { has_court_position = master_of_arms_camp_officer } add = "aptitude(master_of_arms_camp_officer)" } multiply = 0.5 ceiling = yes min = 1 } } } # Log which skills we want to adjust. save_scope_value_as = { name = add_diplomacy value = $DIPLOMACY$ } save_scope_value_as = { name = add_martial value = $MARTIAL$ } save_scope_value_as = { name = add_stewardship value = $STEWARDSHIP$ } save_scope_value_as = { name = add_intrigue value = $INTRIGUE$ } save_scope_value_as = { name = add_learning value = $LEARNING$ } save_scope_value_as = { name = add_prowess value = $PROWESS$ } # Finally, increment the appropriate skills. scope:child = { if = { limit = { scope:add_diplomacy = yes } add_diplomacy_skill = scope:aptitude_gain } if = { limit = { scope:add_martial = yes } add_martial_skill = scope:aptitude_gain } if = { limit = { scope:add_stewardship = yes } add_stewardship_skill = scope:aptitude_gain } if = { limit = { scope:add_intrigue = yes } add_intrigue_skill = scope:aptitude_gain } if = { limit = { scope:add_learning = yes } add_learning_skill = scope:aptitude_gain } if = { limit = { scope:add_prowess = yes } add_prowess_skill = scope:aptitude_gain } } } scripted_effect ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { court_position:$POSITION$_camp_officer ?= { if = { limit = { is_available_allow_travelling = yes } save_scope_as = $POSITION$ add_to_list = prospective_positions_list } } } scripted_effect ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = { add_opinion = { target = scope:child modifier = little_helper_opinion opinion = 50 } reverse_add_opinion = { target = scope:child modifier = respect_opinion opinion = 30 } } # Learning from officer. ep3_laamp_flavour_ewan.1011 = { type = character_event title = ep3_laamp_flavour_ewan.1011.t desc = ep3_laamp_flavour_ewan.1011.desc theme = laamp left_portrait = { character = scope:child animation = admiration } lower_left_portrait = scope:portrait_1 lower_center_portrait = scope:portrait_2 lower_right_portrait = scope:portrait_3 override_background = { reference = army_camp } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1011 } } any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } OR = { court_position:second_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:quartermaster_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:armorer_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:chief_forager_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:master_thief_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:head_porter_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:head_groom_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:huntperson_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:kennelperson_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:chief_engineer_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:witness_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:person_haggler_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:camp_cook_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:master_bard_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } court_position:master_of_arms_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1011 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1011 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Pick a suitable child. ordered_child = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } order_by = age save_scope_as = child } # Now process our available court positions. ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = second } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = quartermaster } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = armorer } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = chief_forager } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_thief } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = head_porter } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = head_groom } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = huntperson } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = kennelperson } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = chief_engineer } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = witness } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = person_haggler } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = camp_cook } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_bard } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_of_arms } ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_of_spoils } ## Ok, now that we've got them, go over the list and check who's best at their job. ordered_in_list = { list = prospective_positions_list order_by = { if = { limit = { has_court_position = second_camp_officer } add = "aptitude(second_camp_officer)" } else_if = { limit = { has_court_position = quartermaster_camp_officer } add = "aptitude(quartermaster_camp_officer)" } else_if = { limit = { has_court_position = armorer_camp_officer } add = "aptitude(armorer_camp_officer)" } else_if = { limit = { has_court_position = chief_forager_camp_officer } add = "aptitude(chief_forager_camp_officer)" } else_if = { limit = { has_court_position = master_thief_camp_officer } add = "aptitude(master_thief_camp_officer)" } else_if = { limit = { has_court_position = head_porter_camp_officer } add = "aptitude(head_porter_camp_officer)" } else_if = { limit = { has_court_position = head_groom_camp_officer } add = "aptitude(head_groom_camp_officer)" } else_if = { limit = { has_court_position = huntperson_camp_officer } add = "aptitude(huntperson_camp_officer)" } else_if = { limit = { has_court_position = kennelperson_camp_officer } add = "aptitude(kennelperson_camp_officer)" } else_if = { limit = { has_court_position = chief_engineer_camp_officer } add = "aptitude(chief_engineer_camp_officer)" } else_if = { limit = { has_court_position = witness_camp_officer } add = "aptitude(witness_camp_officer)" } else_if = { limit = { has_court_position = person_haggler_camp_officer } add = "aptitude(person_haggler_camp_officer)" } else_if = { limit = { has_court_position = camp_cook_camp_officer } add = "aptitude(camp_cook_camp_officer)" } else_if = { limit = { has_court_position = master_bard_camp_officer } add = "aptitude(master_bard_camp_officer)" } else_if = { limit = { has_court_position = master_of_arms_camp_officer } add = "aptitude(master_of_arms_camp_officer)" } else_if = { limit = { has_court_position = master_of_spoils_camp_officer } add = "aptitude(master_of_spoils_camp_officer)" } } max = 3 check_range_bounds = no if = { limit = { NOT = { is_in_list = best_positions_list } } add_to_list = best_positions_list } } # Plus sort our portraits. random_in_list = { list = best_positions_list save_scope_as = portrait_1 } random_in_list = { list = best_positions_list limit = { this != scope:portrait_1 } save_scope_as = portrait_2 } random_in_list = { list = best_positions_list limit = { NOR = { this = scope:portrait_1 this = scope:portrait_2 } } save_scope_as = portrait_3 } } # second: picks up diplo + a little of everything. option = { name = ep3_laamp_flavour_ewan.1011.a trigger = { scope:second ?= { is_in_list = best_positions_list } } reason = have_second ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:second DIPLOMACY = yes MARTIAL = yes STEWARDSHIP = no INTRIGUE = no LEARNING = no PROWESS = no } scope:second = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # quartermaster: picks up stewardship. option = { name = ep3_laamp_flavour_ewan.1011.b trigger = { scope:quartermaster ?= { is_in_list = best_positions_list } } reason = have_quartermaster ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:quartermaster DIPLOMACY = no MARTIAL = no STEWARDSHIP = yes INTRIGUE = no LEARNING = no PROWESS = no } scope:quartermaster = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # armorer: picks up stewardship & learning. option = { name = ep3_laamp_flavour_ewan.1011.c trigger = { scope:armorer ?= { is_in_list = best_positions_list } } reason = have_armorer ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:armorer DIPLOMACY = no MARTIAL = no STEWARDSHIP = yes INTRIGUE = no LEARNING = yes PROWESS = no } scope:armorer = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # chief_forager: picks up prowess & learning. option = { name = ep3_laamp_flavour_ewan.1011.d trigger = { scope:chief_forager ?= { is_in_list = best_positions_list } } reason = have_chief_forager ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:chief_forager DIPLOMACY = no MARTIAL = no STEWARDSHIP = no INTRIGUE = no LEARNING = yes PROWESS = yes } scope:chief_forager = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # master_thief: picks up intrigue & prowess. option = { name = ep3_laamp_flavour_ewan.1011.e trigger = { scope:master_thief ?= { is_in_list = best_positions_list } } reason = have_master_thief ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:master_thief DIPLOMACY = no MARTIAL = no STEWARDSHIP = no INTRIGUE = yes LEARNING = no PROWESS = yes } scope:master_thief = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # head_porter: picks up martial & stewardship. option = { name = ep3_laamp_flavour_ewan.1011.f trigger = { scope:head_porter ?= { is_in_list = best_positions_list } } reason = have_head_porter ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:head_porter DIPLOMACY = no MARTIAL = yes STEWARDSHIP = yes INTRIGUE = no LEARNING = no PROWESS = no } scope:head_porter = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # head_groom: picks up learning & stewardship. option = { name = ep3_laamp_flavour_ewan.1011.g trigger = { scope:head_groom ?= { is_in_list = best_positions_list } } reason = have_head_groom ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:head_groom DIPLOMACY = no MARTIAL = no STEWARDSHIP = yes INTRIGUE = no LEARNING = yes PROWESS = no } scope:head_groom = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # huntperson: picks up prowess & learning. option = { name = ep3_laamp_flavour_ewan.1011.h trigger = { scope:huntperson ?= { is_in_list = best_positions_list } } reason = have_huntperson ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:huntperson DIPLOMACY = no MARTIAL = no STEWARDSHIP = no INTRIGUE = no LEARNING = yes PROWESS = yes } scope:huntperson = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # kennelperson: picks up martial & prowess. option = { name = ep3_laamp_flavour_ewan.1011.i trigger = { scope:kennelperson ?= { is_in_list = best_positions_list } } reason = have_kennelperson ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:kennelperson DIPLOMACY = no MARTIAL = yes STEWARDSHIP = no INTRIGUE = no LEARNING = no PROWESS = yes } scope:kennelperson = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # chief_engineer: picks up learning & martial. option = { name = ep3_laamp_flavour_ewan.1011.j trigger = { scope:chief_engineer ?= { is_in_list = best_positions_list } } reason = have_chief_engineer ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:chief_engineer DIPLOMACY = no MARTIAL = yes STEWARDSHIP = no INTRIGUE = no LEARNING = yes PROWESS = no } scope:chief_engineer = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # witness: picks up diplomacy. option = { name = ep3_laamp_flavour_ewan.1011.k trigger = { scope:witness ?= { is_in_list = best_positions_list } } reason = have_witness ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:witness DIPLOMACY = yes MARTIAL = no STEWARDSHIP = no INTRIGUE = no LEARNING = no PROWESS = no } scope:witness = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # person_haggler: picks up diplomacy, plus a little intrigue + stewardship. option = { name = ep3_laamp_flavour_ewan.1011.l trigger = { scope:person_haggler ?= { is_in_list = best_positions_list } } reason = have_person_haggler ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:person_haggler DIPLOMACY = yes MARTIAL = no STEWARDSHIP = yes INTRIGUE = yes LEARNING = no PROWESS = no } scope:person_haggler = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # camp_cook: picks up intrigue. option = { name = ep3_laamp_flavour_ewan.1011.m trigger = { scope:camp_cook ?= { is_in_list = best_positions_list } } reason = have_camp_cook ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:camp_cook DIPLOMACY = no MARTIAL = no STEWARDSHIP = no INTRIGUE = yes LEARNING = no PROWESS = no } scope:camp_cook = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # master_bard: picks up diplomacy + learning. option = { name = ep3_laamp_flavour_ewan.1011.n trigger = { scope:master_bard ?= { is_in_list = best_positions_list } } reason = have_master_bard ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:master_bard DIPLOMACY = yes MARTIAL = no STEWARDSHIP = no INTRIGUE = no LEARNING = yes PROWESS = no } scope:master_bard = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # master_of_arms: picks up martial + prowess. option = { name = ep3_laamp_flavour_ewan.1011.o trigger = { scope:master_of_arms ?= { is_in_list = best_positions_list } } reason = have_master_of_arms ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:master_of_arms DIPLOMACY = no MARTIAL = yes STEWARDSHIP = no INTRIGUE = no LEARNING = no PROWESS = yes } scope:master_of_arms = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } # master_of_spoils: picks up martial + prowess. option = { name = ep3_laamp_flavour_ewan.1011.o trigger = { scope:master_of_spoils ?= { is_in_list = best_positions_list } } reason = have_master_of_spoils ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { OFFICER_CHAR = scope:master_of_spoils DIPLOMACY = no MARTIAL = yes STEWARDSHIP = yes INTRIGUE = no LEARNING = no PROWESS = yes } scope:master_of_spoils = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } # No stress here. ai_chance = { # Pick an option at random, they're all good. base = 1 } } } ################################################## # Love at First Camp # by Ewan Cowhig Croft # 1021 - 1030 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1021_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes num_of_relation_crush <= 0 NOR = { has_sexuality = none # Not that you can't have a crush as a young asexual, we're just not really equipped to deal well with that complexity here. has_sexuality = asexual } } # Crush on a local girl/boy. ep3_laamp_flavour_ewan.1021 = { type = character_event title = ep3_laamp_flavour_ewan.1021.t desc = ep3_laamp_flavour_ewan.1021.desc theme = laamp left_portrait = { character = scope:child animation = flirtation_left } right_portrait = { character = scope:crush_child animation = admiration } lower_center_portrait = scope:crush_mother lower_right_portrait = scope:crush_father trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1021 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Make sure we have suitable children. any_child = { ep3_laamp_flavour_ewan_1021_valid_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1021 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1021 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longer } } # Now let's grab a suitable child. ordered_child = { limit = { ep3_laamp_flavour_ewan_1021_valid_child_trigger = yes } order_by = { value = age if = { limit = { has_trait = lustful } add = 10 } else_if = { limit = { has_trait = chaste } add = -10 } } save_scope_as = child # For determining crush gender. save_scope_as = attraction_check } # And create a suitable local family. ## Mother. create_character = { template = generic_peasant_character age = 35 location = root.location culture = root.location.culture faith = root.location.faith gender_female_chance = 100 save_scope_as = crush_mother after_creation = { save_scope_value_as = { name = crush_parents_age_diff value = { value = age add = { integer_range = { min = -5 max = 5 } } } } } } ## Father. create_character = { template = generic_peasant_character age = scope:crush_parents_age_diff location = root.location culture = root.location.culture faith = root.location.faith gender_female_chance = 0 save_scope_as = crush_father } ## Marry these two up — we can't be having children out of wedlock, after all. The very idea! hidden_effect = { scope:crush_mother = { if = { limit = { faith = { has_doctrine = doctrine_gender_female_dominated } } marry_matrilineal = scope:crush_father } else = { marry = scope:crush_father } } } ## Child. create_character = { location = root.location age = { value = scope:child.age add = 1 } culture = root.location.culture faith = root.location.faith gender_female_chance = scope_attraction_based_female_chance mother = scope:crush_mother father = scope:crush_father dynasty = none # Try to duplicate scope:child's personality. random_traits_list = { count = 3 lustful = { trigger = { scope:child = { has_trait = lustful } } } chaste = { trigger = { scope:child = { has_trait = chaste } } } gluttonous = { trigger = { scope:child = { has_trait = gluttonous } } } temperate = { trigger = { scope:child = { has_trait = temperate } } } greedy = { trigger = { scope:child = { has_trait = greedy } } } generous = { trigger = { scope:child = { has_trait = generous } } } lazy = { trigger = { scope:child = { has_trait = lazy } } } diligent = { trigger = { scope:child = { has_trait = diligent } } } wrathful = { trigger = { scope:child = { has_trait = wrathful } } } calm = { trigger = { scope:child = { has_trait = calm } } } patient = { trigger = { scope:child = { has_trait = patient } } } impatient = { trigger = { scope:child = { has_trait = impatient } } } arrogant = { trigger = { scope:child = { has_trait = arrogant } } } humble = { trigger = { scope:child = { has_trait = humble } } } deceitful = { trigger = { scope:child = { has_trait = deceitful } } } honest = { trigger = { scope:child = { has_trait = honest } } } craven = { trigger = { scope:child = { has_trait = craven } } } brave = { trigger = { scope:child = { has_trait = brave } } } shy = { trigger = { scope:child = { has_trait = shy } } } gregarious = { trigger = { scope:child = { has_trait = gregarious } } } ambitious = { trigger = { scope:child = { has_trait = ambitious } } } content = { trigger = { scope:child = { has_trait = content } } } arbitrary = { trigger = { scope:child = { has_trait = arbitrary } } } just = { trigger = { scope:child = { has_trait = just } } } cynical = { trigger = { scope:child = { has_trait = cynical } } } zealous = { trigger = { scope:child = { has_trait = zealous } } } paranoid = { trigger = { scope:child = { has_trait = paranoid } } } trusting = { trigger = { scope:child = { has_trait = trusting } } } compassionate = { trigger = { scope:child = { has_trait = compassionate } } } callous = { trigger = { scope:child = { has_trait = callous } } } sadistic = { trigger = { scope:child = { has_trait = sadistic } } } stubborn = { trigger = { scope:child = { has_trait = stubborn } } } fickle = { trigger = { scope:child = { has_trait = fickle } } } vengeful = { trigger = { scope:child = { has_trait = vengeful } } } forgiving = { trigger = { scope:child = { has_trait = forgiving } } } eccentric = { trigger = { scope:child = { has_trait = eccentric } } } } # Including childhood traits, if necessary. random_traits_list = { count = 1 rowdy = { trigger = { number_of_personality_traits < 3 scope:child = { has_trait = rowdy } } } charming = { trigger = { number_of_personality_traits < 3 scope:child = { has_trait = charming } } } curious = { trigger = { number_of_personality_traits < 3 scope:child = { has_trait = curious } } } pensive = { trigger = { number_of_personality_traits < 3 scope:child = { has_trait = pensive } } } bossy = { trigger = { number_of_personality_traits < 3 scope:child = { has_trait = bossy } } } } # And then, for good measure, we apply a fallback. random_traits = yes martial = { min_template_medium_skill max_template_medium_skill } stewardship = { min_template_medium_skill max_template_medium_skill } diplomacy = { min_template_medium_skill max_template_medium_skill } intrigue = { min_template_medium_skill max_template_medium_skill } learning = { min_template_medium_skill max_template_medium_skill } prowess = { min_template_medium_skill max_template_medium_skill } save_scope_as = crush_child after_creation = { random_list = { 200 = { # Character is of average weight, nothing happens } 25 = { change_current_weight = -25 } 25 = { change_current_weight = -75 } 25 = { change_current_weight = 25 } 25 = { change_current_weight = 75 } } add_character_flag = peasant_outfit } } # Tooltips are borked and can't be fixed without loc (even if we launder the event's immediate so that the spawned chars don't screw things up, it looks dodgy), so we hide the actual crush effect. hidden_effect = { scope:child = { set_relation_crush = scope:crush_child add_relation_flag = { relation = crush target = scope:crush_child flag = auto_progress_to_lover } } scope:crush_child = { if = { limit = { is_adult = no } set_relation_crush = scope:child } else = { add_opinion = { target = scope:child modifier = compliment_opinion opinion = 20 } } } } } # I suppose we could accommodate another family. option = { name = ep3_laamp_flavour_ewan.1021.a domicile = { change_provisions = major_provisions_loss } scope:child = { add_opinion = { target = root modifier = grateful_opinion opinion = 50 } add_opinion = { target = scope:crush_child modifier = childhood_crush opinion = 100 } reverse_add_opinion = { target = scope:crush_child modifier = childhood_crush opinion = 100 } } add_courtier = scope:crush_child add_courtier = scope:crush_mother reverse_add_opinion = { target = scope:crush_mother modifier = grateful_opinion opinion = 20 } add_courtier = scope:crush_father reverse_add_opinion = { target = scope:crush_father modifier = grateful_opinion opinion = 20 } stress_impact = { gregarious = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # You will stop seeing them this instant! option = { name = ep3_laamp_flavour_ewan.1021.b scope:child = { remove_relation_crush = scope:crush_child add_opinion = { target = root modifier = overreaction_opinion opinion = -40 } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } # Surely just a GetSeason fling. option = { name = ep3_laamp_flavour_ewan.1021.c random_list = { 100 = { desc = ep3_laamp_flavour_ewan.1021.c.crush_endures send_interface_toast = { title = ep3_laamp_flavour_ewan.1021.c.crush_endures left_icon = scope:child right_icon = scope:crush_child scope:child = { add_opinion = { target = scope:crush_child modifier = childhood_crush opinion = 50 } reverse_add_opinion = { target = scope:crush_child modifier = childhood_crush opinion = 50 } } } } 100 = { desc = ep3_laamp_flavour_ewan.1021.c.crush_fades send_interface_toast = { title = ep3_laamp_flavour_ewan.1021.c.crush_fades left_icon = scope:child right_icon = scope:crush_child scope:child = { remove_relation_crush = scope:crush_child } } } } # No stress here, you just don't involve yourself. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } after = { # If we've no connexion left, dispose of our peasants. if = { limit = { scope:child = { NOT = { has_relation_crush = scope:crush_child } } } scope:crush_mother = { death = { death_reason = death_vanished } } scope:crush_father = { death = { death_reason = death_vanished } } scope:crush_child = { death = { death_reason = death_vanished } } } } } ################################################## # Nurture # by Ewan Cowhig Croft # 1031 - 1040 ################################################## scripted_effect ep3_laamp_flavour_ewan_1031_apply_changes_effect = { # Gain a certain childhood personality trait. scope:child = { if = { limit = { number_of_personality_traits < 3 NOR = { has_trait = rowdy has_trait = charming has_trait = curious has_trait = pensive has_trait = bossy } } add_trait = $CHILDHOOD_TRAIT$ } # Else, gain a certain trait. else_if = { limit = { number_of_personality_traits < 3 NOR = { has_trait = $TRAIT_1$ has_trait = $TRAIT_2$ has_trait = $TRAIT_3$ has_trait = $TRAIT_4$ has_trait = $TRAIT_5$ } } random_list = { 100 = { trigger = { NOT = { has_trait = $TRAIT_1$ } } root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted left_icon = scope:child scope:child = { add_trait = $TRAIT_1$ } } } } 100 = { trigger = { NOT = { has_trait = $TRAIT_2$ } } root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted left_icon = scope:child scope:child = { add_trait = $TRAIT_2$ } } } } 100 = { trigger = { NOT = { has_trait = $TRAIT_3$ } } root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted left_icon = scope:child scope:child = { add_trait = $TRAIT_3$ } } } } 100 = { trigger = { NOT = { has_trait = $TRAIT_4$ } } root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted left_icon = scope:child scope:child = { add_trait = $TRAIT_4$ } } } } 100 = { trigger = { NOT = { has_trait = $TRAIT_5$ } } root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted left_icon = scope:child scope:child = { add_trait = $TRAIT_5$ } } } } } # Clean up our childhood traits if we've just capped out. hidden_effect = { ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = yes } } # Else, gain skill points. else = { root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.tt.skill_gain left_icon = scope:child scope:child = { add_$SKILL$_skill = scope:fallback_skill_gain } } } } } } scripted_effect ep3_laamp_flavour_ewan_1031_roll_duel_effect = { duel = { skill = $EDUCATION$ value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1031.g.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.g.tt.success left_icon = scope:child scope:child = { add_$EDUCATION$_skill = 2 } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1031.g.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.1031.g.tt.failure left_icon = scope:child scope:child = { add_$EDUCATION$_skill = -1 } } } } } # Taking after camp purpose. ep3_laamp_flavour_ewan.1031 = { type = character_event title = ep3_laamp_flavour_ewan.1031.t desc = { desc = ep3_laamp_flavour_ewan.1031.desc.intro first_valid = { triggered_desc = { trigger = { has_realm_law = camp_purpose_wanderers } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.wanderers } triggered_desc = { trigger = { has_realm_law = camp_purpose_mercenaries } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.mercenaries } triggered_desc = { trigger = { has_realm_law = camp_purpose_scholars } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.scholars } triggered_desc = { trigger = { has_realm_law = camp_purpose_explorers } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.explorers } triggered_desc = { trigger = { has_realm_law = camp_purpose_brigands } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.brigands } triggered_desc = { trigger = { has_realm_law = camp_purpose_legitimists } desc = ep3_laamp_flavour_ewan.1031.desc.purpose.legitimists } } desc = ep3_laamp_flavour_ewan.1031.desc.outro } theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:child triggered_animation = { trigger = { root = { OR = { has_realm_law = camp_purpose_mercenaries has_realm_law = camp_purpose_brigands } } } animation = marshal_wooden_sword } animation = personality_bold } override_background = { reference = army_camp } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1031 } } # Must have a suitable child. any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1031 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1031 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } random_child = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } weight = { modifier = { add = age always = yes } modifier = { add = 10 has_trait = diligent } modifier = { add = -10 has_trait = lazy } } save_scope_as = child } # Roll our fallback skill gain, so that it's set for the final tooltip. save_scope_value_as = { name = fallback_skill_gain value = { integer_range = { min = 1 max = 3 } } } } # Wanderers: Ahhh, the wanderlust has got 'er'im. option = { name = ep3_laamp_flavour_ewan.1031.a trigger = { has_realm_law = camp_purpose_wanderers } reason = purpose_wanderers ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = curious TRAIT_1 = diligent TRAIT_2 = calm TRAIT_3 = humble TRAIT_4 = brave TRAIT_5 = eccentric SKILL = diplomacy } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Mercenaries: SheHe'll be a warrior some day. option = { name = ep3_laamp_flavour_ewan.1031.b trigger = { has_realm_law = camp_purpose_mercenaries } reason = purpose_mercenaries if = { limit = { has_trait = education_martial } ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = rowdy TRAIT_1 = brave TRAIT_2 = wrathful TRAIT_3 = content TRAIT_4 = callous TRAIT_5 = gregarious SKILL = prowess } } else = { ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = rowdy TRAIT_1 = brave TRAIT_2 = wrathful TRAIT_3 = content TRAIT_4 = callous TRAIT_5 = gregarious SKILL = martial } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Scholars: such enthusiasm in one so young! option = { name = ep3_laamp_flavour_ewan.1031.c trigger = { has_realm_law = camp_purpose_scholars } reason = purpose_scholars if = { limit = { has_trait = education_learning } ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = pensive TRAIT_1 = temperate TRAIT_2 = patient TRAIT_3 = calm TRAIT_4 = shy TRAIT_5 = stubborn SKILL = diplomacy } } else = { ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = pensive TRAIT_1 = temperate TRAIT_2 = patient TRAIT_3 = calm TRAIT_4 = shy TRAIT_5 = stubborn SKILL = learning } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Explorers: I wonder what sights SheHe'll see... option = { name = ep3_laamp_flavour_ewan.1031.d trigger = { has_realm_law = camp_purpose_explorers } reason = purpose_explorers if = { limit = { has_trait = education_diplomacy } ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = charming TRAIT_1 = gregarious TRAIT_2 = brave TRAIT_3 = ambitious TRAIT_4 = fickle TRAIT_5 = eccentric SKILL = stewardship } } else = { ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = charming TRAIT_1 = gregarious TRAIT_2 = brave TRAIT_3 = ambitious TRAIT_4 = fickle TRAIT_5 = eccentric SKILL = diplomacy } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Brigands: it'll serve HerHim well. option = { name = ep3_laamp_flavour_ewan.1031.e trigger = { has_realm_law = camp_purpose_brigands } reason = purpose_brigands if = { limit = { has_trait = education_intrigue } ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = rowdy TRAIT_1 = deceitful TRAIT_2 = arbitrary TRAIT_3 = callous TRAIT_4 = sadistic TRAIT_5 = paranoid SKILL = prowess } } else = { ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = rowdy TRAIT_1 = deceitful TRAIT_2 = arbitrary TRAIT_3 = callous TRAIT_4 = sadistic TRAIT_5 = paranoid SKILL = intrigue } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Legitimists: such ambition is only natural. option = { name = ep3_laamp_flavour_ewan.1031.f trigger = { has_realm_law = camp_purpose_legitimists } reason = purpose_legitimists if = { limit = { has_trait = education_diplomacy } ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = bossy TRAIT_1 = ambitious TRAIT_2 = arrogant TRAIT_3 = diligent TRAIT_4 = patient TRAIT_5 = vengeful SKILL = prowess } } else = { ep3_laamp_flavour_ewan_1031_apply_changes_effect = { CHILDHOOD_TRAIT = bossy TRAIT_1 = ambitious TRAIT_2 = arrogant TRAIT_3 = diligent TRAIT_4 = patient TRAIT_5 = vengeful SKILL = diplomacy } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Perhaps we could consider another path? option = { name = ep3_laamp_flavour_ewan.1031.g trait = education_diplomacy_1 trait = education_diplomacy_2 trait = education_diplomacy_3 trait = education_diplomacy_4 trait = education_diplomacy_5 trait = education_martial_1 trait = education_martial_2 trait = education_martial_3 trait = education_martial_4 trait = education_martial_5 trait = education_stewardship_1 trait = education_stewardship_2 trait = education_stewardship_3 trait = education_stewardship_4 trait = education_stewardship_5 trait = education_intrigue_1 trait = education_intrigue_2 trait = education_intrigue_3 trait = education_intrigue_4 trait = education_intrigue_5 trait = education_learning_1 trait = education_learning_2 trait = education_learning_3 trait = education_learning_4 trait = education_learning_5 # Roll a different duel depending on our education. switch = { trigger = has_trait education_diplomacy = { ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = diplomacy } } education_martial = { ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = martial } } education_stewardship = { ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = stewardship } } education_intrigue = { ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = intrigue } } education_learning = { ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = learning } } } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 2 } } } # *sigh* Stop that, GirlBoy. option = { name = ep3_laamp_flavour_ewan.1031.h scope:child = { add_stress = medium_stress_gain } add_prestige = minor_prestige_gain # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -0.5 } } } } ################################################## # The Old Country # by Ewan Cowhig Croft # 1041 - 1050 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { has_memory_type = became_landless_adventurer_memory memory_age_years >= { value = @ep3_laamp_flavour_ewan_1041_years_since_rule add = $CHILD$.age } } # Child too young to remember asks what old home was like. ep3_laamp_flavour_ewan.1041 = { type = character_event title = ep3_laamp_flavour_ewan.1041.t desc = ep3_laamp_flavour_ewan.1041.desc theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:child animation = admiration } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1041 } } # We must've actually ruled somewhere — if we're a player. The AI won't care for this verisimilitude. trigger_if = { limit = { is_ai = no } any_claim = { any_past_holder_reversed = { this = root } } } # And have a suitable child available. ## This _should_ go in order of available children by the trigger, so it _should_ be ordered by age already. any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes save_temporary_scope_as = child_temp } # Finally, check that enough time has passed that the child might not remember the Old Country. any_memory = { ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { CHILD = scope:child_temp } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1041 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1041 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab our child. ordered_child = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } order_by = age save_scope_as = child } # Grab our memory. random_memory = { limit = { ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { CHILD = scope:child } } save_scope_as = memory } } # It was beautiful, little one. option = { name = ep3_laamp_flavour_ewan.1041.a random_list = { 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1041.a.tt.diplomacy left_icon = scope:child scope:child = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_diplomacy_modifier years = 10 } } } } 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1041.a.tt.stewardship left_icon = scope:child scope:child = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_stewardship_modifier years = 10 } } } } 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1041.a.tt.learning left_icon = scope:child scope:child = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_learning_modifier years = 10 } } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_honor = 2 } } } # A horrid place that spurned us. option = { name = ep3_laamp_flavour_ewan.1041.b random_list = { 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1041.b.tt.martial left_icon = scope:child scope:child = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_horrible_home_martial_modifier years = 10 } } } } 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1041.b.tt.intrigue left_icon = scope:child scope:child = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_horrible_home_intrigue_modifier years = 10 } } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # legitimists: some day, you'll know it for yourself. option = { name = ep3_laamp_flavour_ewan.1041.c trigger = { has_realm_law = camp_purpose_legitimists } reason = purpose_legitimists scope:child = { # Try to give them the ambitious trait. if = { limit = { number_of_personality_traits <= 3 NOT = { has_trait = ambitious } } add_trait = ambitious hidden_effect = { ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = yes } } # Else, give them a nice modifier. else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1041_rightful_home_modifier years = 10 } } add_opinion = { target = root modifier = stories_of_righteous_return_opinion opinion = 30 } } stress_impact = { base = minor_stress_loss ambitious = medium_stress_impact_loss arrogant = minor_stress_impact_loss humble = minor_stress_impact_gain content = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # not legitimists: maybe we'll return some day. Ask me then. option = { name = ep3_laamp_flavour_ewan.1041.d trigger = { NOT = { has_realm_law = camp_purpose_legitimists } } reverse_add_opinion = { target = scope:child modifier = stories_of_righteous_return_opinion opinion = 30 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # I won't speak of it. option = { name = ep3_laamp_flavour_ewan.1041.e reverse_add_opinion = { target = scope:child modifier = disappointed_opinion opinion = -10 } # Most of the effect here is in the stress loss. stress_impact = { base = medium_stress_loss shy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -2 } } } } ################################################## # It Isn't Fair # by Ewan Cowhig Croft # 1051 - 1060 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1051_valid_memory_trigger = { has_memory_type = became_landless_adventurer_memory memory_age_years >= 5 } scripted_trigger ep3_laamp_flavour_ewan_1051_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes NOR = { has_trait = humble has_trait = content } } scripted_effect ep3_laamp_flavour_ewan_1051_roll_duel_effect = { save_scope_value_as = { name = duel_diff value = { value = scope:child.$SKILL$ add = 7 max = very_high_skill_rating } } duel = { skill = $SKILL$ value = scope:duel_diff # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1051.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.1051.tt.success left_icon = scope:child scope:child = { add_$SKILL$_lifestyle_perk_points = 1 add_opinion = { target = root modifier = respect_opinion opinion = 20 } add_stress = major_stress_loss } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1051.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.1051.tt.failure left_icon = scope:child reverse_add_opinion = { target = scope:child modifier = hate_opinion opinion = -30 } random = { chance = 35 add_trait = depressed_1 } } } } } # Child unhappy with life on the road. ep3_laamp_flavour_ewan.1051 = { type = character_event title = ep3_laamp_flavour_ewan.1051.t desc = ep3_laamp_flavour_ewan.1051.desc theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:child animation = rage } override_background = { reference = corridor_night } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1051 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Valid child. any_child = { ep3_laamp_flavour_ewan_1051_valid_child_trigger = yes } # Valid memory. any_memory = { ep3_laamp_flavour_ewan_1051_valid_memory_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1051 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1051 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab our best child. random_child = { limit = { ep3_laamp_flavour_ewan_1051_valid_child_trigger = yes } weight = { modifier = { add = 10 has_trait = arrogant } modifier = { add = 10 has_trait = ambitious } modifier = { add = 10 has_trait = lazy } modifier = { add = 10 has_trait = impatient } modifier = { add = 10 has_trait = wrathful } modifier = { add = -10 has_trait = diligent } modifier = { add = -10 has_trait = patient } modifier = { add = -10 has_trait = calm } } save_scope_as = child add_stress = major_stress_gain } # And our memory. random_memory = { limit = { ep3_laamp_flavour_ewan_1051_valid_memory_trigger = yes } save_scope_as = memory } } # Come here, my GirlBoy. option = { name = ep3_laamp_flavour_ewan.1051.a ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = diplomacy } stress_impact = { compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 2 } } } # Fair? You're a House.GetName! Stand up straight! option = { name = ep3_laamp_flavour_ewan.1051.b ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = martial } stress_impact = { arrogant = minor_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain humble = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 ai_vengefulness = 1 } } } # I know, but it is what it is. option = { name = ep3_laamp_flavour_ewan.1051.c ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = learning } stress_impact = { content = minor_stress_impact_loss ambitious = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } # Leave HerHim to tantrum. option = { name = ep3_laamp_flavour_ewan.1051.d random_list = { 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1051.d.tt.annoyance_fades left_icon = scope:child scope:child = { add_stress = major_stress_loss } } } 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1051.d.tt.grudge_held left_icon = scope:child reverse_add_opinion = { target = scope:child modifier = grudge_opinion opinion = -35 } random = { chance = 50 add_trait = depressed_1 } } } } stress_impact = { callous = minor_stress_impact_loss lazy = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 opinion_modifier = { opinion_target = scope:child multiplier = -1 } } } } ################################################## # Quick Study # by Ewan Cowhig Croft # 1061 - 1070 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1061_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes NOT = { knows_language_of_culture = root.location.culture } current_extra_languages < language_soft_cap } # Child picks up local language quickly. ep3_laamp_flavour_ewan.1061 = { type = character_event title = ep3_laamp_flavour_ewan.1061.t desc = ep3_laamp_flavour_ewan.1061.desc theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:child animation = personality_bold } override_background = { reference = ep3_campfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1061 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Must have a suitable child. any_child = { ep3_laamp_flavour_ewan_1061_valid_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1061 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1061 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Grab a suitable child. random_child = { limit = { ep3_laamp_flavour_ewan_1061_valid_child_trigger = yes } weight = { modifier = { add = learning always = yes } } save_scope_as = child } # Teach them the language. scope:child = { learn_language_of_culture = root.location.culture } # Save our county for loc. location.county = { save_scope_as = current_county } } # Hmm, smart GirlBoy. option = { name = ep3_laamp_flavour_ewan.1061.a add_prestige = minor_prestige_gain scope:child = { add_prestige = medium_prestige_gain } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } # Maybe they could teach me... option = { name = ep3_laamp_flavour_ewan.1061.b trigger = { NOT = { knows_language_of_culture = root.location.culture } current_extra_languages < language_soft_cap } duel = { skill = learning value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1061.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.1061.b.tt.success left_icon = scope:child learn_language_of_culture = root.location.culture } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1061.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.1061.b.tt.failure left_icon = scope:child add_stress = medium_stress_gain } } } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # Get that foreign muck out of your mouth! option = { name = ep3_laamp_flavour_ewan.1061.c trigger = { NOT = { root.culture = { has_same_culture_language = root.location.culture } } } scope:child = { unlearn_language_of_culture = root.location.culture add_opinion = { target = root modifier = kindness_opinion opinion = -10 } } stress_impact = { arrogant = minor_stress_impact_loss humble = medium_stress_impact_gain } ai_chance = { base = 1 modifier = { add = { value = "culture.cultural_acceptance(root.location.culture)" multiply = -2 } always = yes } } } } ################################################## # At the Edge of Camp # by Ewan Cowhig Croft # 1071 - 1080 ################################################## # Children playing in local terrain. ep3_laamp_flavour_ewan.1071 = { type = character_event title = ep3_laamp_flavour_ewan.1071.t desc = { desc = ep3_laamp_flavour_ewan.1071.desc.intro first_valid = { triggered_desc = { trigger = { scope:terrain_type = flag:plains } desc = ep3_laamp_flavour_ewan.1071.desc.plains } triggered_desc = { trigger = { scope:terrain_type = flag:farmlands } desc = ep3_laamp_flavour_ewan.1071.desc.farmlands } triggered_desc = { trigger = { scope:terrain_type = flag:hills } desc = ep3_laamp_flavour_ewan.1071.desc.hills } triggered_desc = { trigger = { scope:terrain_type = flag:mountains } desc = ep3_laamp_flavour_ewan.1071.desc.mountains } triggered_desc = { trigger = { scope:terrain_type = flag:desert } desc = ep3_laamp_flavour_ewan.1071.desc.desert } triggered_desc = { trigger = { scope:terrain_type = flag:desert_mountains } desc = ep3_laamp_flavour_ewan.1071.desc.desert_mountains } triggered_desc = { trigger = { scope:terrain_type = flag:oasis } desc = ep3_laamp_flavour_ewan.1071.desc.oasis } triggered_desc = { trigger = { scope:terrain_type = flag:jungle } desc = ep3_laamp_flavour_ewan.1071.desc.jungle } triggered_desc = { trigger = { scope:terrain_type = flag:forest } desc = ep3_laamp_flavour_ewan.1071.desc.forest } triggered_desc = { trigger = { scope:terrain_type = flag:taiga } desc = ep3_laamp_flavour_ewan.1071.desc.taiga } triggered_desc = { trigger = { scope:terrain_type = flag:wetlands } desc = ep3_laamp_flavour_ewan.1071.desc.wetlands } triggered_desc = { trigger = { scope:terrain_type = flag:steppe } desc = ep3_laamp_flavour_ewan.1071.desc.steppe } triggered_desc = { trigger = { scope:terrain_type = flag:floodplains } desc = ep3_laamp_flavour_ewan.1071.desc.floodplains } triggered_desc = { trigger = { scope:terrain_type = flag:drylands } desc = ep3_laamp_flavour_ewan.1071.desc.drylands } } desc = ep3_laamp_flavour_ewan.1071.desc.outro } theme = laamp left_portrait = { character = root animation = dismissal } right_portrait = { character = scope:own_child animation = happiness } lower_left_portrait = scope:extra_child_3 lower_center_portrait = scope:extra_child_2 lower_right_portrait = scope:extra_child_1 override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1071 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Don't let the children out to play during a plague. location = { any_province_epidemic = { count <= 0 } } # And have a suitable named child of our own. any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1071 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1071 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab our terrain. ep3_laamp_flavour_ewan_register_terrain_effect = yes # Sort our child scopes. random_child = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } save_scope_as = own_child add_to_list = playing_children_list add_stress = major_stress_loss } ordered_courtier = { limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes this != scope:own_child } # Grab the children closest in age to our chosen child. order_by = { value = 100 if = { limit = { age > scope:own_child.age } add = { value = scope:own_child.age subtract = age } } else_if = { limit = { age < scope:own_child.age } add = { value = scope:own_child.age subtract = age multiply = -1 } } } max = 3 check_range_bounds = no if = { limit = { NOT = { exists = scope:extra_child_1 } } save_scope_as = extra_child_1 add_to_list = playing_children_list add_stress = major_stress_loss } else_if = { limit = { NOT = { this = scope:extra_child_1 exists = scope:extra_child_2 } } save_scope_as = extra_child_2 add_to_list = playing_children_list add_stress = major_stress_loss } else_if = { limit = { NOT = { this = scope:extra_child_1 this = scope:extra_child_2 exists = scope:extra_child_3 } } save_scope_as = extra_child_3 add_to_list = playing_children_list add_stress = major_stress_loss } # Set up future friendships. hidden_effect = { every_in_list = { list = playing_children_list save_scope_as = char_temp every_in_list = { list = playing_children_list if = { limit = { this != scope:char_temp can_set_relation_potential_friend_trigger = { CHARACTER = scope:char_temp } } set_relation_potential_friend = scope:char_temp } } } } } } # Stay within sight! option = { name = ep3_laamp_flavour_ewan.1071.a random_list = { 100 = { every_in_list = { list = playing_children_list custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child add_diplomacy_lifestyle_perk_points = 1 } } 100 = { every_in_list = { list = playing_children_list custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child add_stewardship_lifestyle_perk_points = 1 } } 100 = { every_in_list = { list = playing_children_list custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child add_intrigue_lifestyle_perk_points = 1 } } } stress_impact = { paranoid = medium_stress_impact_loss trusting = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Go on, explore. option = { name = ep3_laamp_flavour_ewan.1071.b random_list = { 100 = { every_in_list = { list = playing_children_list custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child add_martial_lifestyle_perk_points = 1 } } 100 = { every_in_list = { list = playing_children_list custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child add_learning_lifestyle_perk_points = 1 } } } stress_impact = { trusting = miniscule_stress_impact_loss paranoid = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Children, excited for the simplest things... option = { name = ep3_laamp_flavour_ewan.1071.c # Major effect is stress loss. add_stress = major_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_energy = -0.5 } } } } ################################################## # Growing Up # by Ewan Cowhig Croft # 1081 - 1090 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1081_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes age <= 12 NOT = { has_character_flag = demanded_own_tent } OR = { has_trait = bossy has_trait = rowdy has_trait = greedy has_trait = diligent has_trait = impatient has_trait = arrogant has_trait = shy has_trait = ambitious has_trait = paranoid has_trait = stubborn has_trait = eccentric } } scripted_effect ep3_laamp_flavour_ewan_1081_roll_duel_effect = { scope:child = { duel = { skill = $EDUCATION$ value = medium_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1081.b.tt.success root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1081.b.tt.success left_icon = scope:child scope:child = { add_opinion = { target = root modifier = respect_opinion opinion = 40 } add_prestige = medium_prestige_gain } } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1081.b.tt.failure root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1081.b.tt.failure left_icon = scope:child scope:child = { add_opinion = { target = root modifier = frustrated_opinion opinion = -40 } add_stress = major_stress_gain } } } } } } } # Child demands own tent. ep3_laamp_flavour_ewan.1081 = { type = character_event title = ep3_laamp_flavour_ewan.1081.t desc = ep3_laamp_flavour_ewan.1081.desc theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:child animation = anger } override_background = { reference = corridor_night } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1081 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # And that we've got a suitable child. any_child = { ep3_laamp_flavour_ewan_1081_valid_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1081 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1081 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab a suitable child. ordered_child = { limit = { ep3_laamp_flavour_ewan_1081_valid_child_trigger = yes } order_by = age save_scope_as = child add_character_flag = { flag = demanded_own_tent # Let the flag clean itself up some time after we become an adult, as it'll no longer be relevant. years = 16 } } } # Hmm, okay. You're a WomanMan now. option = { name = ep3_laamp_flavour_ewan.1081.a add_prestige = minor_prestige_loss scope:child = { add_opinion = { target = root modifier = respect_opinion opinion = 25 } add_prestige = minor_prestige_gain } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = -2 } } } # You want it? Earn it. option = { name = ep3_laamp_flavour_ewan.1081.b flavor = ep3_laamp_flavour_ewan.1081.b.f trait = education_diplomacy_1 trait = education_diplomacy_2 trait = education_diplomacy_3 trait = education_diplomacy_4 trait = education_diplomacy_5 trait = education_martial_1 trait = education_martial_2 trait = education_martial_3 trait = education_martial_4 trait = education_martial_5 trait = education_stewardship_1 trait = education_stewardship_2 trait = education_stewardship_3 trait = education_stewardship_4 trait = education_stewardship_5 trait = education_intrigue_1 trait = education_intrigue_2 trait = education_intrigue_3 trait = education_intrigue_4 trait = education_intrigue_5 trait = education_learning_1 trait = education_learning_2 trait = education_learning_3 trait = education_learning_4 trait = education_learning_5 # Roll a different duel depending on our education. switch = { trigger = has_trait education_diplomacy = { ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = diplomacy } } education_martial = { ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = martial } } education_stewardship = { ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = stewardship } } education_intrigue = { ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = intrigue } } education_learning = { ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = learning } } } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Bah, you're a child till I say otherwise. option = { name = ep3_laamp_flavour_ewan.1081.c add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:child modifier = frustrated_opinion opinion = -20 } stress_impact = { arrogant = miniscule_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -0.5 } } } } ################################################## # Every Parent's Duty # by Ewan Cowhig Croft # 1091 - 1100 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1091_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes NOT = { has_character_flag = taught_to_ride } # If you have Horse Lords, this _has_ to be taught much earlier. trigger_if = { limit = { root = { OR = { culture = { culture_has_archer_cavalry_maa = yes } mpo_can_recruit_nomad_maa_trigger = yes } } } age <= 8 } } scripted_effect ep3_laamp_flavour_ewan_1091_roll_duel_effect = { duel = { skill = $SKILL$ value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1091.tt.success root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1091.tt.success left_icon = scope:child scope:child = { add_opinion = { target = root modifier = amazed_opinion opinion = 40 } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1091_confidence_gained_modifier years = 10 } } } } } # Defeat! 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.1091.tt.failure root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1091.tt.failure left_icon = scope:child scope:child = { increase_wounds_no_death_effect = { REASON = horse_riding_accident } add_opinion = { target = root modifier = let_me_down_opinion opinion = -20 } } } } } } } # Teaching a youngling how to ride. ep3_laamp_flavour_ewan.1091 = { type = character_event title = ep3_laamp_flavour_ewan.1091.t desc = ep3_laamp_flavour_ewan.1091.desc theme = laamp left_portrait = { character = root animation = happiness } right_portrait = { character = scope:child animation = worry } override_background = { reference = army_camp } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1091 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # And have a suitable child any_child = { ep3_laamp_flavour_ewan_1091_valid_child_trigger = yes } } weight_multiplier = { # Weight up for Horse Lords, for whom this is especially vital (yes, over and above western knights). modifier = { add = 2 culture = { culture_has_archer_cavalry_maa = yes } } modifier = { add = 2 has_trait = nomadic_philosophy } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1091 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1091 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Grab a suitable child. ordered_child = { limit = { ep3_laamp_flavour_ewan_1091_valid_child_trigger = yes } order_by = age save_scope_as = child add_character_flag = { flag = taught_to_ride # Let the flag clean itself up some time after we become an adult, as it'll no longer be relevant. years = 16 } } } # Diplo duel: remember, be firm, but respectful. option = { name = ep3_laamp_flavour_ewan.1091.a ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = diplomacy } stress_impact = { compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Martial duel: don't be afraid to crack the whip! option = { name = ep3_laamp_flavour_ewan.1091.b ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = martial } stress_impact = { wrathful = miniscule_stress_impact_loss impatient = miniscule_stress_impact_loss callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss patient = minor_stress_impact_gain calm = minor_stress_impact_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Prowess duel: master the horse or it'll toss you. option = { name = ep3_laamp_flavour_ewan.1091.c ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = prowess } stress_impact = { calm = miniscule_stress_impact_loss patient = miniscule_stress_impact_loss impatient = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_vengefulness = 1 } } } # Say nothing. option = { name = ep3_laamp_flavour_ewan.1091.d random_list = { 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1091.d.tt.success left_icon = scope:child scope:child = { add_opinion = { target = root modifier = amazed_opinion opinion = 20 } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_1091_confidence_gained_modifier years = 10 } } } } 100 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.1091.d.tt.failure left_icon = scope:child scope:child = { increase_wounds_no_death_effect = { REASON = horse_riding_accident } add_opinion = { target = root modifier = let_me_down_opinion opinion = -10 } } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -0.5 } } } } ################################################## # Helping Out # by Ewan Cowhig Croft # 1101 - 1110 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = { child_is_infant_trigger = yes is_courtier_of = root location = root.location is_available_allow_travelling = yes } scripted_effect ep3_laamp_flavour_ewan_1101_increment_affection_effect = { reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 20 } hidden_effect = { add_opinion = { target = scope:child modifier = love_opinion opinion = 20 } } } # Child helps with packing. ep3_laamp_flavour_ewan.1101 = { type = character_event title = ep3_laamp_flavour_ewan.1101.t desc = ep3_laamp_flavour_ewan.1101.desc theme = laamp left_portrait = { character = root animation = boredom } right_portrait = { character = scope:child animation = admiration } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1101 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1101 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longest } } # Nab a suitable child. random_child = { limit = { ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = yes } save_scope_as = child } } # What're you doing there, little LassLad? option = { name = ep3_laamp_flavour_ewan.1101.a ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes # Set us up for our future events. set_variable = { name = packing_assistant value = scope:child } # Account for how many times we've helped. increment_variable_effect = { VAR = helped_packing VAL = 1 } stress_impact = { compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Shoo, you menace! option = { name = ep3_laamp_flavour_ewan.1101.b add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -10 } stress_impact = { callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } } # Pre-filter event, so that we can keep the spamminess down. ep3_laamp_flavour_ewan.1102 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Only valid for Laamps has_government = landless_adventurer_government # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1101 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Plus that we haven't started this chain once already. NOT = { has_variable = packing_assistant } # And that we have a suitable child. any_child = { ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = yes } } immediate = { # We keep this _quite_ low, as it's otherwise able to trigger any time you start a travel. random = { chance = 1 random = { chance = 75 trigger_event = ep3_laamp_flavour_ewan.1101 } } } } scripted_trigger ep3_laamp_flavour_ewan_1103_child_younger_trigger = { age <= @ep3_laamp_flavour_ewan_1103_age_threshold_young root = { NOT = { has_character_flag = had_packing_assistant_chain_stage_younger } } } scripted_trigger ep3_laamp_flavour_ewan_1103_child_older_trigger = { age > @ep3_laamp_flavour_ewan_1103_age_threshold_young age <= @ep3_laamp_flavour_ewan_1103_age_threshold_older root = { NOT = { has_character_flag = had_packing_assistant_chain_stage_older } } } scripted_trigger ep3_laamp_flavour_ewan_1103_child_teen_trigger = { age > @ep3_laamp_flavour_ewan_1103_age_threshold_older is_adult = no root = { NOT = { has_character_flag = had_packing_assistant_chain_stage_teen } } } scripted_trigger ep3_laamp_flavour_ewan_1103_child_adult_trigger = { is_adult = yes root = { NOT = { has_character_flag = had_packing_assistant_chain_stage_adult } # And they have to done it several times. var:helped_packing >= 3 } } scripted_trigger ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = { OR = { is_alive = no has_relation_rival = root opinion = { target = root value <= -75 } } } # Child helps with packing. ep3_laamp_flavour_ewan.1103 = { type = character_event title = ep3_laamp_flavour_ewan.1103.t desc = { first_valid = { triggered_desc = { trigger = { var:packing_assistant = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes } } desc = ep3_laamp_flavour_ewan.1103.desc.child_younger } triggered_desc = { trigger = { var:packing_assistant = { ep3_laamp_flavour_ewan_1103_child_older_trigger = yes } } desc = ep3_laamp_flavour_ewan.1103.desc.child_older } triggered_desc = { trigger = { var:packing_assistant = { ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes } } desc = ep3_laamp_flavour_ewan.1103.desc.child_teen } triggered_desc = { trigger = { var:packing_assistant = { ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } } desc = ep3_laamp_flavour_ewan.1103.desc.child_adult } } } theme = laamp left_portrait = { character = root animation = happiness } right_portrait = { character = scope:child animation = admiration } trigger = { has_variable = packing_assistant NOR = { has_character_flag = aborted_packing_chain has_variable = had_ep3_laamp_flavour_ewan_1104 } is_available_allow_travelling = yes var:packing_assistant = { is_courtier_of = root location = root.location is_available_allow_travelling = yes OR = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes ep3_laamp_flavour_ewan_1103_child_older_trigger = yes ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = no } } on_trigger_fail = { trigger_event = ep3_laamp_flavour_ewan.1104 } immediate = { # Nab our assistant for ease of reference. var:packing_assistant = { save_scope_as = child } } # Very young child helps a little. option = { name = ep3_laamp_flavour_ewan.1103.a trigger = { scope:child = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes } } ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes # Account for how many times we've helped. increment_variable_effect = { VAR = helped_packing VAL = 1 } add_stress = miniscule_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 3 } } } # Older child is quite helpful. option = { name = ep3_laamp_flavour_ewan.1103.b trigger = { scope:child = { ep3_laamp_flavour_ewan_1103_child_older_trigger = yes } } ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes # Account for how many times we've helped. increment_variable_effect = { VAR = helped_packing VAL = 1 } add_stress = minor_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 3 } } } # Teen is very helpful. option = { name = ep3_laamp_flavour_ewan.1103.c trigger = { scope:child = { ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes } } ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes # Account for how many times we've helped. increment_variable_effect = { VAR = helped_packing VAL = 1 } add_stress = medium_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 3 } } } # Adult might become your best friend over this simple activity. option = { name = ep3_laamp_flavour_ewan.1103.d trigger = { scope:child = { ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } } # Best friends, if possible. if = { limit = { can_set_relation_best_friend_trigger = { CHARACTER = scope:child } } set_relation_best_friend = { reason = best_friend_childhood_ritual target = scope:child } } # Loyalty hook, if possible. if = { limit = { can_add_hook = { target = scope:child type = loyalty_hook } } add_hook = { target = scope:child type = loyalty_hook } } # Oodles of opinion. reverse_add_opinion = { target = scope:child modifier = love_opinion opinion = 50 } add_stress = major_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 3 } } } # I can do it myself, scope:child. option = { name = ep3_laamp_flavour_ewan.1103.e add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = { value = -10 multiply = var:helped_packing } } add_character_flag = aborted_packing_chain stress_impact = { callous = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } after = { if = { limit = { scope:child = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes } } add_character_flag = had_packing_assistant_chain_stage_younger } if = { limit = { scope:child = { ep3_laamp_flavour_ewan_1103_child_older_trigger = yes } } add_character_flag = had_packing_assistant_chain_stage_older } if = { limit = { scope:child = { ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes } } add_character_flag = had_packing_assistant_chain_stage_teen } if = { limit = { scope:child = { ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } } add_character_flag = had_packing_assistant_chain_stage_adult } } } # Child will no longer help with packing — for one reason or another. ep3_laamp_flavour_ewan.1104 = { type = character_event title = ep3_laamp_flavour_ewan.1104.t desc = { first_valid = { triggered_desc = { trigger = { scope:child = { is_alive = no } } desc = ep3_laamp_flavour_ewan.1104.desc.child_dead } desc = ep3_laamp_flavour_ewan.1104.desc.child_rival } } theme = laamp left_portrait = { character = root animation = worry } right_portrait = { character = scope:child triggered_animation = { animation = map_fear trigger = { scope:child = { is_alive = no } } } triggered_animation = { animation = dismissal trigger = { scope:child = { is_alive = yes } } } } trigger = { has_variable = packing_assistant NOT = { has_variable = had_ep3_laamp_flavour_ewan_1104 } # Must've had at least one instance of the follow-up event, so that there's a pattern. var:helped_packing >= 2 # Aaaand make sure we should actually be firing _this_ event. var:packing_assistant = { ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = yes } } immediate = { # Limit this event to firing once. set_variable = { name = had_ep3_laamp_flavour_ewan_1104 value = yes } # Nab our (former) assistant for ease of reference. var:packing_assistant = { save_scope_as = child } } # Dead: you killed them. option = { name = ep3_laamp_flavour_ewan.1104.a trigger = { scope:child.killer ?= root } # Most of the effect is in the stress impact. stress_impact = { base = major_stress_gain compassionate = minor_stress_impact_gain # We don't account for callous here, because they get a special option. } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Dead: you do know who killed them and it wasn't you. option = { name = ep3_laamp_flavour_ewan.1104.b trigger = { scope:child = { killer ?= { is_alive = yes this != root } } } progress_towards_rival_effect = { REASON = rival_killed_heir CHARACTER = scope:child.killer OPINION = default_rival_opinion } stress_impact = { vengeful = major_stress_impact_loss forgiving = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Callous: _eh_. option = { name = ep3_laamp_flavour_ewan.1104.c trigger = { has_trait = callous } trait = callous # Entire effect is in the stress impact. stress_impact = { callous = massive_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } } } # Try to move on. option = { name = ep3_laamp_flavour_ewan.1104.d trigger = { NOT = { exists = scope:child.killer } } # Most of the effect is in the stress impact. stress_impact = { base = major_stress_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } } ################################################## # A Nose for Trouble # by Ewan Cowhig Croft # 1111 - 1120 ################################################## scripted_trigger ep3_laamp_flavour_ewan_1111_valid_child_trigger = { ep3_laamp_flavour_ewan_available_child_trigger = yes ep3_laamp_flavour_ewan_no_dog_trigger = yes } # Child adopts puppy. ep3_laamp_flavour_ewan.1111 = { type = character_event title = ep3_laamp_flavour_ewan.1111.t desc = { desc = ep3_laamp_flavour_ewan.1111.desc.intro first_valid = { triggered_desc = { trigger = { domicile = { has_domicile_building = baggage_train_kennel } } desc = ep3_laamp_flavour_ewan.1111.desc.has_kennels } desc = ep3_laamp_flavour_ewan.1111.desc.no_kennels } desc = ep3_laamp_flavour_ewan.1111.desc.outro } theme = laamp left_portrait = { character = root animation = laugh } right_portrait = { character = scope:child animation = happiness } override_background = { reference = corridor_day } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_1111 } } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # And have a suitable child. any_child = { ep3_laamp_flavour_ewan_1111_valid_child_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_1111 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_1111 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } random_child = { limit = { ep3_laamp_flavour_ewan_1111_valid_child_trigger = yes } save_scope_as = child } } # A GirlBoy and HerHis dog. option = { name = ep3_laamp_flavour_ewan.1111.a scope:child = { start_dog_story_cycle_effect = yes add_opinion = { target = root modifier = grateful_opinion opinion = 50 } add_stress = massive_stress_loss } # Everyone loves pets! ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Sadistic: drown the dog. option = { name = ep3_laamp_flavour_ewan.1111.b trigger = { has_trait = sadistic } trait = sadistic scope:child = { set_relation_rival = { reason = rival_drowned_dog target = root } } # Mostly stress loss for the positives here. stress_impact = { sadistic = 200 } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -3 } } } # Low on provisions: My, what a fat hound. Good find, LassLad! option = { name = ep3_laamp_flavour_ewan.1111.c trigger = { domicile.provisions <= provisions_privation_threshold_start } domicile = { change_provisions = microscopic_provisions_gain } scope:child = { progress_towards_rival_effect = { REASON = rival_ate_dog CHARACTER = root OPINION = default_rival_opinion } } stress_impact = { callous = miniscule_stress_impact_loss gluttonous = miniscule_stress_impact_loss temperate = minor_stress_impact_gain compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # Scope:child! Stop playing with that filthy mutt! option = { name = ep3_laamp_flavour_ewan.1111.d add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:child modifier = hurt_opinion opinion = -25 } stress_impact = { arrogant = miniscule_stress_impact_loss humble = minor_stress_impact_gain } ai_chance = { base = 1 opinion_modifier = { opinion_target = scope:child multiplier = -1 } } } } ################################################## # PERSONAL TENSIONS ################################################## # Plenty in Common # by Ewan Cowhig Croft # # 2001 - 2010 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2001_courtier_1_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } scripted_trigger ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { this = $TARGET$ } OR = { number_of_personality_traits_in_common = { target = $TARGET$ value >= 2 } AND = { number_of_personality_traits_in_common = { target = $TARGET$ value >= 1 } opinion = { target = $TARGET$ value >= 1 } } } number_of_opposing_personality_traits = { target = $TARGET$ value <= 0 } opinion = { target = $TARGET$ value >= -40 } NOR = { has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } } can_set_relation_friend_trigger = { CHARACTER = $TARGET$ } } scripted_effect ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = { scope:follower_1 = { # If the stars align, become best friends. if = { limit = { can_set_relation_best_friend_trigger = { CHARACTER = scope:follower_2 } opinion = { target = scope:follower_2 value >= 100 } reverse_opinion = { target = scope:follower_2 value >= 100 } } set_relation_best_friend = { reason = friend_mutual_traits target = scope:follower_2 } } # Otherwise, regular friends will do. else = { set_relation_friend = { reason = friend_mutual_traits target = scope:follower_2 } } } } # Friendship blooms over shared traits. ep3_laamp_flavour_ewan.2001 = { type = character_event title = ep3_laamp_flavour_ewan.2001.t desc = { desc = ep3_laamp_flavour_ewan.2001.desc.intro random_valid = { # Lustful triggered_desc = { trigger = { scope:follower_1 = { has_trait = lustful } scope:follower_2 = { has_trait = lustful } } desc = ep3_laamp_flavour_ewan.2001.desc.lustful } # Chaste triggered_desc = { trigger = { scope:follower_1 = { has_trait = chaste } scope:follower_2 = { has_trait = chaste } } desc = ep3_laamp_flavour_ewan.2001.desc.chaste } # Gluttonous triggered_desc = { trigger = { scope:follower_1 = { has_trait = gluttonous } scope:follower_2 = { has_trait = gluttonous } } desc = ep3_laamp_flavour_ewan.2001.desc.gluttonous } # Temperate triggered_desc = { trigger = { scope:follower_1 = { has_trait = temperate } scope:follower_2 = { has_trait = temperate } } desc = ep3_laamp_flavour_ewan.2001.desc.temperate } # Greedy triggered_desc = { trigger = { scope:follower_1 = { has_trait = greedy } scope:follower_2 = { has_trait = greedy } } desc = ep3_laamp_flavour_ewan.2001.desc.greedy } # Generous triggered_desc = { trigger = { scope:follower_1 = { has_trait = generous } scope:follower_2 = { has_trait = generous } } desc = ep3_laamp_flavour_ewan.2001.desc.generous } # Lazy triggered_desc = { trigger = { scope:follower_1 = { has_trait = lazy } scope:follower_2 = { has_trait = lazy } } desc = ep3_laamp_flavour_ewan.2001.desc.lazy } # Diligent triggered_desc = { trigger = { scope:follower_1 = { has_trait = diligent } scope:follower_2 = { has_trait = diligent } } desc = ep3_laamp_flavour_ewan.2001.desc.diligent } # Wrathful triggered_desc = { trigger = { scope:follower_1 = { has_trait = wrathful } scope:follower_2 = { has_trait = wrathful } } desc = ep3_laamp_flavour_ewan.2001.desc.wrathful } # Calm triggered_desc = { trigger = { scope:follower_1 = { has_trait = calm } scope:follower_2 = { has_trait = calm } } desc = ep3_laamp_flavour_ewan.2001.desc.calm } # Patient triggered_desc = { trigger = { scope:follower_1 = { has_trait = patient } scope:follower_2 = { has_trait = patient } } desc = ep3_laamp_flavour_ewan.2001.desc.patient } # Impatient triggered_desc = { trigger = { scope:follower_1 = { has_trait = impatient } scope:follower_2 = { has_trait = impatient } } desc = ep3_laamp_flavour_ewan.2001.desc.impatient } # Arrogant triggered_desc = { trigger = { scope:follower_1 = { has_trait = arrogant } scope:follower_2 = { has_trait = arrogant } } desc = ep3_laamp_flavour_ewan.2001.desc.arrogant } # Humble triggered_desc = { trigger = { scope:follower_1 = { has_trait = humble } scope:follower_2 = { has_trait = humble } } desc = ep3_laamp_flavour_ewan.2001.desc.humble } # Deceitful triggered_desc = { trigger = { scope:follower_1 = { has_trait = deceitful } scope:follower_2 = { has_trait = deceitful } } desc = ep3_laamp_flavour_ewan.2001.desc.deceitful } # Honest triggered_desc = { trigger = { scope:follower_1 = { has_trait = honest } scope:follower_2 = { has_trait = honest } } desc = ep3_laamp_flavour_ewan.2001.desc.honest } # Craven triggered_desc = { trigger = { scope:follower_1 = { has_trait = craven } scope:follower_2 = { has_trait = craven } } desc = ep3_laamp_flavour_ewan.2001.desc.craven } # Brave triggered_desc = { trigger = { scope:follower_1 = { has_trait = brave } scope:follower_2 = { has_trait = brave } } desc = ep3_laamp_flavour_ewan.2001.desc.brave } # Shy triggered_desc = { trigger = { scope:follower_1 = { has_trait = shy } scope:follower_2 = { has_trait = shy } } desc = ep3_laamp_flavour_ewan.2001.desc.shy } # Gregarious triggered_desc = { trigger = { scope:follower_1 = { has_trait = gregarious } scope:follower_2 = { has_trait = gregarious } } desc = ep3_laamp_flavour_ewan.2001.desc.gregarious } # Ambitious triggered_desc = { trigger = { scope:follower_1 = { has_trait = ambitious } scope:follower_2 = { has_trait = ambitious } } desc = ep3_laamp_flavour_ewan.2001.desc.ambitious } # Content triggered_desc = { trigger = { scope:follower_1 = { has_trait = content } scope:follower_2 = { has_trait = content } } desc = ep3_laamp_flavour_ewan.2001.desc.content } # Arbitrary triggered_desc = { trigger = { scope:follower_1 = { has_trait = arbitrary } scope:follower_2 = { has_trait = arbitrary } } desc = ep3_laamp_flavour_ewan.2001.desc.arbitrary } # Just triggered_desc = { trigger = { scope:follower_1 = { has_trait = just } scope:follower_2 = { has_trait = just } } desc = ep3_laamp_flavour_ewan.2001.desc.just } # Cynical triggered_desc = { trigger = { scope:follower_1 = { has_trait = cynical } scope:follower_2 = { has_trait = cynical } } desc = ep3_laamp_flavour_ewan.2001.desc.cynical } # Zealous triggered_desc = { trigger = { scope:follower_1 = { has_trait = zealous } scope:follower_2 = { has_trait = zealous } # Just for ease of loc. scope:follower_1.faith = scope:follower_2.faith } desc = ep3_laamp_flavour_ewan.2001.desc.zealous } # Paranoid triggered_desc = { trigger = { scope:follower_1 = { has_trait = paranoid } scope:follower_2 = { has_trait = paranoid } } desc = ep3_laamp_flavour_ewan.2001.desc.paranoid } # Trusting triggered_desc = { trigger = { scope:follower_1 = { has_trait = trusting } scope:follower_2 = { has_trait = trusting } } desc = ep3_laamp_flavour_ewan.2001.desc.trusting } # Compassionate triggered_desc = { trigger = { scope:follower_1 = { has_trait = compassionate } scope:follower_2 = { has_trait = compassionate } } desc = ep3_laamp_flavour_ewan.2001.desc.compassionate } # Callous triggered_desc = { trigger = { scope:follower_1 = { has_trait = callous } scope:follower_2 = { has_trait = callous } } desc = ep3_laamp_flavour_ewan.2001.desc.callous } # Sadistic triggered_desc = { trigger = { scope:follower_1 = { has_trait = sadistic } scope:follower_2 = { has_trait = sadistic } } desc = ep3_laamp_flavour_ewan.2001.desc.sadistic } # Stubborn triggered_desc = { trigger = { scope:follower_1 = { has_trait = stubborn } scope:follower_2 = { has_trait = stubborn } } desc = ep3_laamp_flavour_ewan.2001.desc.stubborn } # Fickle triggered_desc = { trigger = { scope:follower_1 = { has_trait = fickle } scope:follower_2 = { has_trait = fickle } } desc = ep3_laamp_flavour_ewan.2001.desc.fickle } # Vengeful triggered_desc = { trigger = { scope:follower_1 = { has_trait = vengeful } scope:follower_2 = { has_trait = vengeful } } desc = ep3_laamp_flavour_ewan.2001.desc.vengeful } # Forgiving triggered_desc = { trigger = { scope:follower_1 = { has_trait = forgiving } scope:follower_2 = { has_trait = forgiving } } desc = ep3_laamp_flavour_ewan.2001.desc.forgiving } # Eccentric triggered_desc = { trigger = { scope:follower_1 = { has_trait = eccentric } scope:follower_2 = { has_trait = eccentric } } desc = ep3_laamp_flavour_ewan.2001.desc.eccentric } } desc = ep3_laamp_flavour_ewan.2001.desc.outro } theme = laamp left_portrait = { character = scope:follower_1 animation = admiration } right_portrait = { character = scope:follower_2 animation = happiness } override_background = { reference = ep3_campfire } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2001 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2001 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Now, let's make them like each other a bit more. scope:follower_1 = { add_opinion = { target = scope:follower_2 modifier = friendliness_opinion opinion = 80 } reverse_add_opinion = { target = scope:follower_2 modifier = friendliness_opinion opinion = 80 } } } # Encourage the friendship. option = { name = ep3_laamp_flavour_ewan.2001.a ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes duel = { skill = diplomacy value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2001.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2001.a.tt.success left_icon = scope:follower_1 right_icon = scope:follower_2 reverse_add_opinion = { target = scope:follower_1 modifier = respect_opinion opinion = 40 } reverse_add_opinion = { target = scope:follower_2 modifier = respect_opinion opinion = 40 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2001.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2001.a.tt.failure left_icon = scope:follower_1 right_icon = scope:follower_2 reverse_add_opinion = { target = scope:follower_1 modifier = annoyed_opinion opinion = -20 } reverse_add_opinion = { target = scope:follower_2 modifier = annoyed_opinion opinion = -20 } } } } stress_impact = { gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Try to break up that friendship. option = { name = ep3_laamp_flavour_ewan.2001.b duel = { skill = diplomacy value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2001.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2001.b.tt.success left_icon = scope:follower_1 right_icon = scope:follower_2 reverse_add_opinion = { target = scope:follower_1 modifier = respect_opinion opinion = 20 } reverse_add_opinion = { target = scope:follower_2 modifier = respect_opinion opinion = 20 } } scope:follower_1 = { remove_opinion = { target = scope:follower_2 modifier = friendliness_opinion } } scope:follower_2 = { remove_opinion = { target = scope:follower_1 modifier = friendliness_opinion } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2001.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2001.b.tt.failure left_icon = scope:follower_1 right_icon = scope:follower_2 ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes reverse_add_opinion = { target = scope:follower_1 modifier = annoyed_opinion opinion = -30 } reverse_add_opinion = { target = scope:follower_2 modifier = annoyed_opinion opinion = -30 } } } } stress_impact = { callous = miniscule_stress_impact_loss sadistic = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } # Good for them. option = { name = ep3_laamp_flavour_ewan.2001.c ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } } # Pre-filtering event to set up scopes. ep3_laamp_flavour_ewan.2002 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2001 } } # Make sure we have suitable courtiers. any_courtier = { ep3_laamp_flavour_ewan_2001_courtier_1_trigger = yes save_temporary_scope_as = char_temp root = { any_courtier = { ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { TARGET = scope:char_temp } } } } } immediate = { while = { count = 10 limit = { NOT = { exists = scope:follower_2 } } # Sort our courtiers. ## First, get our scope:follower_1 candidate. random_courtier = { limit = { ep3_laamp_flavour_ewan_2001_courtier_1_trigger = yes NOT = { is_in_list = checked_courtier_1_candidates_list } } save_scope_as = follower_1 add_to_list = checked_courtier_1_candidates_list } ## Now, find a scope:follower_2 from their opinion of the scope:follower_1 candidates. if = { limit = { exists = scope:follower_1 } ordered_courtier = { limit = { ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { TARGET = scope:follower_1 } } order_by = "opinion(scope:follower_1)" save_scope_as = follower_2 } # And, wipe our checks so we can iterate the loop if required. if = { limit = { NOT = { exists = scope:follower_2 } } clear_saved_scope = follower_1 } } } # If we've actually got our dudes, proceed to the event. if = { limit = { exists = scope:follower_1 exists = scope:follower_2 } trigger_event = ep3_laamp_flavour_ewan.2001 } } } ################################################## # Camp Gossip # by Ewan Cowhig Croft # # 2011 - 2020 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Filter out anyone who matters to us, we want petty people. ## This is partially for tone, partially so we can be less rigorous with checks'n'effects. NOR = { is_consort_of = root is_close_family_of = root has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } } } scripted_trigger ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = { is_married = yes NOT = { trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = root } } accepts_adultery_without_penalty_trigger = no } scripted_trigger ep3_laamp_flavour_ewan_2011_might_steal_trigger = { OR = { has_trait = greedy has_trait = arbitrary has_trait_xp = { trait = gallowsbait track = thief value >= 50 } calc_true_if = { amount >= 2 has_trait = eccentric has_trait = cynical has_trait = impatient } } NOR = { has_trait = generous has_trait = just } } scripted_trigger ep3_laamp_flavour_ewan_2011_might_prank_trigger = { OR = { has_trait = gregarious has_trait = arbitrary has_trait = deceitful has_trait = eccentric } NOR = { has_trait = honest has_trait = just } } scripted_trigger ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = { OR = { has_trait = gregarious has_trait = arbitrary has_trait = deceitful has_trait = eccentric } NOR = { has_trait = honest has_trait = shy has_trait = just } } scripted_trigger ep3_laamp_flavour_ewan_2011_might_feud_trigger = { OR = { has_trait = wrathful has_trait = vengeful has_trait = diligent calc_true_if = { amount >= 2 has_trait = patient has_trait = arrogant has_trait = ambitious } } NOR = { has_trait = forgiving has_trait = lazy } } # It's only one line, but these are held in different events hundreds of lines of script apart, so good hygiene demands it. scripted_effect ep3_laamp_flavour_ewan_2011_duel_loss_effect = { add_prestige = minor_prestige_loss } # Someone shagged someone else's spouse/petty theft/series of cruel pranks/nasty rumours spread. ep3_laamp_flavour_ewan.2011 = { type = character_event title = ep3_laamp_flavour_ewan.2011.t desc = { desc = ep3_laamp_flavour_ewan.2011.desc.intro first_valid = { triggered_desc = { trigger = { scope:gossip_type = flag:affair } desc = ep3_laamp_flavour_ewan.2011.desc.affair } triggered_desc = { trigger = { scope:gossip_type = flag:petty_theft } desc = ep3_laamp_flavour_ewan.2011.desc.petty_theft } triggered_desc = { trigger = { scope:gossip_type = flag:cruel_pranks } desc = ep3_laamp_flavour_ewan.2011.desc.cruel_pranks } triggered_desc = { trigger = { scope:gossip_type = flag:nasty_rumours } desc = ep3_laamp_flavour_ewan.2011.desc.nasty_rumours } triggered_desc = { trigger = { scope:gossip_type = flag:hidden_feud } desc = ep3_laamp_flavour_ewan.2011.desc.hidden_feud } } desc = ep3_laamp_flavour_ewan.2011.desc.outro } theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:victim animation = stress } override_background = { reference = ep3_campfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2011 } } # Must have enough courtiers for this to be a possibility. any_courtier = { count >= 5 ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes OR = { ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes ep3_laamp_flavour_ewan_2011_might_steal_trigger = yes ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes ep3_laamp_flavour_ewan_2011_might_feud_trigger = yes } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2011 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2011 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Alright, which gossip will we be going with? random_list = { # Affair. 100 = { # Register our result. save_scope_value_as = { name = gossip_type value = flag:affair } # Try to find a suitable candidate to make this true. ## First by sorting everyone for whom it'd be shocking to have an affair into a list. every_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes } add_to_list = possible_affair_candidates_list } ## Then nabbing any valid pair. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_affair_candidates_list this != scope:char_temp has_secret_relation_lover = scope:char_temp save_temporary_scope_as = root_secret_check_temp root = { NOR = { any_known_secret = { secret_type = secret_lover secret_owner = scope:root_secret_check_temp secret_target = scope:char_temp } any_known_secret = { secret_type = secret_lover secret_owner = scope:char_temp secret_target = scope:root_secret_check_temp } } } save_temporary_scope_as = lover_temp } } # Grab our scopes. save_scope_as = lover_1 scope:lover_temp = { save_scope_as = lover_2 } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } # If we don't have any lovers yet, see if we've got anyone we could nudge. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes might_cheat_on_every_partner_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_affair_candidates_list this != scope:char_temp has_relation_potential_lover = scope:char_temp opinion = { target = scope:char_temp value >= 60 } reverse_opinion = { target = scope:char_temp value >= 60 } might_cheat_on_every_partner_trigger = yes can_set_relation_lover_trigger = { CHARACTER = scope:char_temp } save_temporary_scope_as = lover_temp } } # Grab our scopes. save_scope_as = lover_1 scope:lover_temp = { save_scope_as = lover_2 } # Now, randomise whether the story was true or false. random = { chance = 50 # Ok, exacerbate our love story. hidden_effect = { scope:lover_1 = { add_secret = { target = scope:lover_2 type = secret_lover } } } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } } # Otherwise, we register it as false. if = { limit = { NOT = { exists = scope:gossip_veracity } } save_scope_value_as = { name = gossip_veracity value = flag:false } } } # Petty theft. 100 = { # Register our result. save_scope_value_as = { name = gossip_type value = flag:petty_theft } # Try to find a suitable candidate to make this true. ## First, grab anyone/everyone who'd steal. every_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_steal_trigger = yes } add_to_list = possible_thieves_list } ## Then try to find anyone they'd steal from. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_thieves_list this != scope:char_temp opinion = { target = scope:char_temp value <= -50 } save_temporary_scope_as = thief_temp } } # Grab our scopes. save_scope_as = victim scope:thief_temp = { save_scope_as = thief } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } # Otherwise, we register it as false. if = { limit = { NOT = { exists = scope:gossip_veracity } } save_scope_value_as = { name = gossip_veracity value = flag:false } } } # Series of cruel pranks. 100 = { trigger = { any_courtier = { count >= 2 ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes } } # Register our result. save_scope_value_as = { name = gossip_type value = flag:cruel_pranks } # Try to find a suitable candidate to make this true. ## First, grab anyone/everyone who'd play harsh jokes. every_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes } add_to_list = possible_pranksters_list } ## Then try to find anyone they'd be cruel to. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_pranksters_list this != scope:char_temp opinion = { target = scope:char_temp value <= -50 } save_temporary_scope_as = prankster_temp } } # Grab our scopes. save_scope_as = victim scope:prankster_temp = { save_scope_as = prankster } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } # Otherwise, we register it as false. if = { limit = { NOT = { exists = scope:gossip_veracity } } save_scope_value_as = { name = gossip_veracity value = flag:false } # If we don't have a scope:victim by now, create one. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes } save_scope_as = victim } } # Plus stress out our victim a little. scope:victim = { add_stress = medium_stress_gain } } # Nasty rumours. 100 = { trigger = { any_courtier = { count >= 2 ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes } } # Register our result. save_scope_value_as = { name = gossip_type value = flag:nasty_rumours } # Try to find a suitable candidate to make this true. ## First, grab anyone/everyone who'd spread evil rumours. every_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes } add_to_list = possible_rumourmongers_list } ## Then try to find anyone they'd lie about. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_rumourmongers_list this != scope:char_temp opinion = { target = scope:char_temp value <= -50 } save_temporary_scope_as = rumourmonger_temp } } # Grab our scopes. save_scope_as = victim scope:rumourmonger_temp = { save_scope_as = rumourmonger } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } # Otherwise, we register it as false. if = { limit = { NOT = { exists = scope:gossip_veracity } } save_scope_value_as = { name = gossip_veracity value = flag:false } # If we don't have a scope:victim by now, create one. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes } save_scope_as = victim } } # Plus stress out our victim a little. scope:victim = { add_stress = medium_stress_gain } } # Hidden feud. 100 = { # Register our result. save_scope_value_as = { name = gossip_type value = flag:hidden_feud } # Try to find a suitable candidate to make this true. ## First, grab anyone/everyone who'd start shit over nothing. every_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes ep3_laamp_flavour_ewan_2011_might_feud_trigger = yes } add_to_list = possible_feuds_list } ## Then try to find anyone they'd steal from. random_courtier = { limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes save_temporary_scope_as = char_temp any_in_list = { list = possible_feuds_list this != scope:char_temp has_relation_potential_rival = scope:char_temp opinion = { target = scope:char_temp value <= -25 } save_temporary_scope_as = rival_temp } } # Grab our scopes. save_scope_as = rival_1 scope:rival_temp = { save_scope_as = rival_2 } # Now, randomise whether the story was true or false. random = { chance = 50 # Ok, exacerbate our rivalry. hidden_effect = { scope:rival_1 = { add_opinion = { target = scope:rival_2 modifier = irritated_opinion opinion = -50 } reverse_add_opinion = { target = scope:rival_2 modifier = irritated_opinion opinion = -50 } } } # And note that the story was true. save_scope_value_as = { name = gossip_veracity value = flag:true } } } # Otherwise, we register it as false. if = { limit = { NOT = { exists = scope:gossip_veracity } } save_scope_value_as = { name = gossip_veracity value = flag:false } } } } # Error suppression. if = { limit = { scope:gossip_veracity = flag:false } } } # Investigate the truth of the matter. option = { name = ep3_laamp_flavour_ewan.2011.a custom_tooltip = ep3_laamp_flavour_ewan.2011.a.tt.explanation duel = { skill = intrigue value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2011.a.tt.success # Alright, what event do we want to see? ## Affair actually happening. if = { limit = { scope:gossip_type = flag:affair scope:gossip_veracity = flag:true } trigger_event = ep3_laamp_flavour_ewan.2012 } ## Petty theft actually happened. else_if = { limit = { scope:gossip_type = flag:petty_theft scope:gossip_veracity = flag:true } trigger_event = ep3_laamp_flavour_ewan.2013 } ## Cruel pranks actually happening. else_if = { limit = { scope:gossip_type = flag:cruel_pranks scope:gossip_veracity = flag:true } trigger_event = ep3_laamp_flavour_ewan.2014 } ## Nasty rumours actually happening. else_if = { limit = { scope:gossip_type = flag:nasty_rumours scope:gossip_veracity = flag:true } trigger_event = ep3_laamp_flavour_ewan.2015 } ## Hidden feud actually on-going. else_if = { limit = { scope:gossip_type = flag:hidden_feud scope:gossip_veracity = flag:true } trigger_event = ep3_laamp_flavour_ewan.2016 } ## Otherwise, nothing was really happening. else = { # Which means we won the duel but there was nothing to see. save_scope_value_as = { name = duel_result value = flag:won } trigger_event = ep3_laamp_flavour_ewan.2017 } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2011.a.tt.failure # Flag that we failed the skill check & proceed to part 2. save_scope_value_as = { name = duel_result value = flag:lost } trigger_event = ep3_laamp_flavour_ewan.2017 show_as_tooltip = { ep3_laamp_flavour_ewan_2011_duel_loss_effect = yes } } } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 2 } } } # Agree with the accusations baselessly. option = { name = ep3_laamp_flavour_ewan.2011.b # Give us a minor modifier. add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_source_of_truth_modifier years = 3 } # At the cost of annoying scope:victim, if they exist. scope:victim ?= { add_opinion = { target = root modifier = annoyed_opinion opinion = -30 } } stress_impact = { deceitful = miniscule_stress_impact_loss gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 ai_honor = -1 } } } # Leave well enough alone. option = { name = ep3_laamp_flavour_ewan.2011.c # Consolation prestige for staying aloof. add_prestige = minor_prestige_gain stress_impact = { shy = minor_stress_impact_loss honest = miniscule_stress_impact_loss deceitful = minor_stress_impact_gain gregarious = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } } # Discovered affair. ep3_laamp_flavour_ewan.2012 = { type = character_event title = ep3_laamp_flavour_ewan.2012.t desc = ep3_laamp_flavour_ewan.2012.desc theme = laamp left_portrait = { character = scope:lover_1 animation = shock } right_portrait = { character = scope:lover_2 animation = worry } override_background = { reference = ep3_campfire } immediate = { # Nab our secret lover relationship. scope:lover_1 = { random_secret = { type = secret_lover limit = { OR = { AND = { secret_owner = scope:lover_1 secret_target = scope:lover_2 } AND = { secret_owner = scope:lover_2 secret_target = scope:lover_1 } } } save_scope_as = secret } } # And reveal it to root. scope:secret = { reveal_to = root } } # Reveal it immediately for bonuses. option = { name = ep3_laamp_flavour_ewan.2012.a scope:secret = { expose_secret = root } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } reverse_add_opinion = { target = scope:lover_1 modifier = cruelty_opinion opinion = -40 } reverse_add_opinion = { target = scope:lover_2 modifier = cruelty_opinion opinion = -40 } stress_impact = { honest = minor_stress_impact_loss deceitful = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } } } # Keep it — for now. option = { name = ep3_laamp_flavour_ewan.2012.b reverse_add_opinion = { target = scope:lover_1 modifier = grateful_opinion opinion = 50 } reverse_add_opinion = { target = scope:lover_2 modifier = grateful_opinion opinion = 50 } stress_impact = { deceitful = minor_stress_impact_loss honest = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } } # Discovered theft. ep3_laamp_flavour_ewan.2013 = { type = character_event title = ep3_laamp_flavour_ewan.2013.t desc = ep3_laamp_flavour_ewan.2013.desc theme = laamp left_portrait = { character = scope:victim animation = anger } right_portrait = { character = scope:thief animation = disbelief } override_background = { reference = ep3_campfire } immediate = { scope:victim = { pay_short_term_gold = { target = scope:thief gold = minor_gold_laamps_value } } } # Punish scope:thief. option = { name = ep3_laamp_flavour_ewan.2013.a # Scope:victim is happy. add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } scope:victim = { add_opinion = { target = root modifier = grateful_opinion opinion = 40 } progress_towards_rival_effect = { REASON = rival_stole_petty_sum CHARACTER = scope:thief OPINION = default_rival_opinion } } # Apply consequences. scope:thief = { add_opinion = { target = root modifier = cruelty_opinion opinion = -30 } # Plus some stress. add_stress = major_stress_gain # Apply some gallowsbait XP for scope:thief. laamp_rewards_apply_criminal_xp_effect = { TRACK = thief XP_MAX = gallowsbait_xp_minor_gain XP_MIN = gallowsbait_xp_minor_gain } } stress_impact = { honest = miniscule_stress_impact_loss just = miniscule_stress_impact_loss arbitrary = minor_stress_impact_gain deceitful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } } } # Cover for scope:thief. option = { name = ep3_laamp_flavour_ewan.2013.b # Scope:thief is happy. add_favour_hook_if_possible_simple_effect = { TARGET = scope:thief } reverse_add_opinion = { target = scope:thief modifier = grateful_opinion opinion = 40 } # Apply consequences. scope:victim = { add_opinion = { target = root modifier = failure_opinion opinion = -20 } # Plus some stress. add_stress = major_stress_gain } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss just = minor_stress_impact_gain honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -11 } } } # Let it be known, but leave it at that. option = { name = ep3_laamp_flavour_ewan.2013.c # Neither party is too happy. scope:victim = { add_opinion = { target = root modifier = upset_opinion opinion = -10 } progress_towards_rival_effect = { REASON = rival_stole_petty_sum CHARACTER = scope:thief OPINION = default_rival_opinion } } scope:thief = { add_opinion = { target = root modifier = upset_opinion opinion = -10 } # Apply some gallowsbait XP for scope:thief. laamp_rewards_apply_criminal_xp_effect = { TRACK = thief XP_MAX = gallowsbait_xp_minor_gain XP_MIN = gallowsbait_xp_minor_gain } } # But you do seem quite impartial. add_prestige = medium_prestige_gain add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } } # Discovered cruel pranks. ep3_laamp_flavour_ewan.2014 = { type = character_event title = ep3_laamp_flavour_ewan.2014.t desc = ep3_laamp_flavour_ewan.2014.desc theme = laamp left_portrait = { character = scope:victim animation = anger } right_portrait = { character = scope:prankster animation = disbelief } override_background = { reference = ep3_campfire } # Punish scope:prankster. option = { name = ep3_laamp_flavour_ewan.2014.a # Scope:victim is happy. add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } scope:victim = { add_opinion = { target = root modifier = grateful_opinion opinion = 30 } progress_towards_rival_effect = { REASON = rival_played_cruel_pranks CHARACTER = scope:prankster OPINION = default_rival_opinion } } # Apply consequences. scope:prankster = { add_opinion = { target = root modifier = cruelty_opinion opinion = -20 } # Plus some stress. add_stress = medium_stress_gain } stress_impact = { honest = miniscule_stress_impact_loss just = miniscule_stress_impact_loss arbitrary = minor_stress_impact_gain deceitful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } } } # Cover for scope:prankster. option = { name = ep3_laamp_flavour_ewan.2014.b # Scope:prankster is happy. add_favour_hook_if_possible_simple_effect = { TARGET = scope:prankster } reverse_add_opinion = { target = scope:prankster modifier = grateful_opinion opinion = 30 } # Apply consequences. scope:victim = { add_opinion = { target = root modifier = failure_opinion opinion = -20 } # Plus some stress. add_stress = medium_stress_gain } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss just = minor_stress_impact_gain honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -11 } } } # Let it be known, but leave it at that. option = { name = ep3_laamp_flavour_ewan.2014.c # Neither party is too happy. scope:victim = { add_opinion = { target = root modifier = upset_opinion opinion = -10 } progress_towards_rival_effect = { REASON = rival_played_cruel_pranks CHARACTER = scope:prankster OPINION = default_rival_opinion } } reverse_add_opinion = { target = scope:prankster modifier = upset_opinion opinion = -10 } # But you do seem quite impartial. add_prestige = minor_prestige_gain add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } } # Discovered source of rumours. ep3_laamp_flavour_ewan.2015 = { type = character_event title = ep3_laamp_flavour_ewan.2015.t desc = ep3_laamp_flavour_ewan.2015.desc theme = laamp left_portrait = { character = scope:victim animation = anger } right_portrait = { character = scope:rumourmonger animation = disbelief } override_background = { reference = ep3_campfire } # Punish scope:rumourmonger. option = { name = ep3_laamp_flavour_ewan.2015.a # Scope:victim is happy. add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } scope:victim = { add_opinion = { target = root modifier = grateful_opinion opinion = 30 } progress_towards_rival_effect = { REASON = rival_spread_rumours CHARACTER = scope:rumourmonger OPINION = default_rival_opinion } } # Apply consequences. scope:rumourmonger = { add_opinion = { target = root modifier = cruelty_opinion opinion = -20 } # Plus some stress. add_stress = medium_stress_gain } stress_impact = { honest = miniscule_stress_impact_loss just = miniscule_stress_impact_loss arbitrary = minor_stress_impact_gain deceitful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } } } # Cover for scope:rumourmonger. option = { name = ep3_laamp_flavour_ewan.2015.b # Scope:rumourmonger is happy. add_favour_hook_if_possible_simple_effect = { TARGET = scope:rumourmonger } reverse_add_opinion = { target = scope:rumourmonger modifier = grateful_opinion opinion = 30 } # Apply consequences. scope:victim = { add_opinion = { target = root modifier = failure_opinion opinion = -20 } # Plus some stress. add_stress = medium_stress_gain } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss just = minor_stress_impact_gain honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -11 } } } # Let it be known, but leave it at that. option = { name = ep3_laamp_flavour_ewan.2015.c # Neither party is too happy. scope:victim = { add_opinion = { target = root modifier = upset_opinion opinion = -10 } progress_towards_rival_effect = { REASON = rival_spread_rumours CHARACTER = scope:rumourmonger OPINION = default_rival_opinion } } reverse_add_opinion = { target = scope:rumourmonger modifier = upset_opinion opinion = -10 } # But you do seem quite impartial. add_prestige = minor_prestige_gain add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } } # Discovered hidden feud. ep3_laamp_flavour_ewan.2016 = { type = character_event title = ep3_laamp_flavour_ewan.2016.t desc = ep3_laamp_flavour_ewan.2016.desc theme = laamp left_portrait = { character = scope:rival_1 animation = anger } right_portrait = { character = scope:rival_2 animation = dismissal } override_background = { reference = ep3_campfire } immediate = { scope:rival_1 = { set_random_rivalry_reason = { TARGET = scope:rival_2 RELATION = rival } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier years = 10 } add_prestige = minor_prestige_gain } # Try to reconcile them. option = { name = ep3_laamp_flavour_ewan.2016.a # Nab whichever rival has the higher diplomacy to be the duel target. if = { limit = { scope:rival_1.diplomacy >= scope:rival_2.diplomacy } scope:rival_1 = { save_scope_as = duel_target } } else = { scope:rival_2 = { save_scope_as = duel_target } } # Then roll the duel. duel = { skill = diplomacy target = scope:duel_target # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2016.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2016.a.tt.success left_icon = scope:rival_1 right_icon = scope:rival_2 scope:rival_1 = { remove_relation_rival = scope:rival_2 } add_favour_hook_if_possible_simple_effect = { TARGET = scope:rival_1 } add_favour_hook_if_possible_simple_effect = { TARGET = scope:rival_2 } } reverse_add_opinion = { target = scope:rival_1 modifier = respect_opinion opinion = 30 } reverse_add_opinion = { target = scope:rival_2 modifier = respect_opinion opinion = 30 } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2016.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2016.a.tt.failure left_icon = scope:rival_1 right_icon = scope:rival_2 reverse_add_opinion = { target = scope:rival_1 modifier = respect_opinion opinion = -30 } reverse_add_opinion = { target = scope:rival_2 modifier = respect_opinion opinion = -30 } } } } stress_impact = { gregarious = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_loss shy = minor_stress_impact_gain callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 2 } } } # Instruct them that they will not allow their rivalry to hurt the camp. option = { name = ep3_laamp_flavour_ewan.2016.b reverse_add_opinion = { target = scope:rival_1 modifier = respect_opinion opinion = 20 } reverse_add_opinion = { target = scope:rival_2 modifier = respect_opinion opinion = 20 } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } } # No discovery. ep3_laamp_flavour_ewan.2017 = { type = character_event title = ep3_laamp_flavour_ewan.2017.t desc = { first_valid = { triggered_desc = { trigger = { scope:gossip_type = flag:affair } desc = ep3_laamp_flavour_ewan.2017.desc.affair } triggered_desc = { trigger = { scope:gossip_type = flag:petty_theft } desc = ep3_laamp_flavour_ewan.2017.desc.petty_theft } triggered_desc = { trigger = { scope:gossip_type = flag:cruel_pranks } desc = ep3_laamp_flavour_ewan.2017.desc.cruel_pranks } triggered_desc = { trigger = { scope:gossip_type = flag:nasty_rumours } desc = ep3_laamp_flavour_ewan.2017.desc.nasty_rumours } triggered_desc = { trigger = { scope:gossip_type = flag:hidden_feud } desc = ep3_laamp_flavour_ewan.2017.desc.hidden_feud } } first_valid = { triggered_desc = { trigger = { scope:duel_result = flag:won } desc = ep3_laamp_flavour_ewan.2017.desc.duel.won } desc = ep3_laamp_flavour_ewan.2017.desc.duel.lost } } theme = laamp left_portrait = { character = root triggered_animation = { animation = boredom trigger = { scope:duel_result = flag:won } } triggered_animation = { animation = shame trigger = { scope:duel_result = flag:lost } } } right_portrait = { character = scope:victim animation = paranoia } override_background = { reference = ep3_campfire } immediate = { # If we have a victim, they're none too happy. scope:victim ?= { add_stress = major_stress_gain } } # Duel won. option = { name = ep3_laamp_flavour_ewan.2017.a trigger = { scope:duel_result = flag:won } add_prestige = minor_prestige_gain stress_impact = { diligent = minor_stress_impact_loss } ai_chance = { # No logic needed for notification event. base = 1 } } # Duel lost. option = { name = ep3_laamp_flavour_ewan.2017.b trigger = { scope:duel_result = flag:lost } ep3_laamp_flavour_ewan_2011_duel_loss_effect = yes stress_impact = { trusting = miniscule_stress_impact_loss paranoid = miniscule_stress_impact_gain } ai_chance = { # No logic needed for notification event. base = 1 } } } ################################################## # Bound Together # by Ewan Cowhig Croft # # 2021 - 2030 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = { NOT = { has_character_flag = marriage_request_turned_down } NOT = { has_trait = celibate } ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Make sure they either don't have complex relationships already, or else don't care about them. any_consort = { count <= 0 } might_cheat_on_every_partner_trigger = yes # Filter out anyone who matters to us (excepting friends, who it's nice to approve, and rivals, who it's nice to turn down), we want mostly petty people. NOR = { is_close_family_of = root has_relation_lover = root } } scripted_trigger ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes NOT = { this = $TARGET$ } # Must have matching sexualities & the right legalities in place. is_attracted_to_gender_of = $TARGET$ $TARGET$ = { is_attracted_to_gender_of = prev } allowed_to_marry_character_gender_trigger = { CHARACTER = $TARGET$ } # Avoid pairing up people that are already somehow related to each other NOT = { is_close_or_extended_family_of = $TARGET$ } # Ensure our ages aren't too far apart — not that this couldn't happen, but huge age gaps are a big verisimilitude problem for many players. age >= { value = $TARGET$.age add = -15 } age <= { value = $TARGET$.age add = 15 } # Try to see how well they get along. OR = { AND = { # Something in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 1 } # Mutual positive opinions. opinion = { target = $TARGET$ value >= 1 } reverse_opinion = { target = $TARGET$ value >= 1 } } AND = { # Lots in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 2 } # They don't hate each other completely. opinion = { target = $TARGET$ value >= -30 } reverse_opinion = { target = $TARGET$ value >= -30 } } # Everything in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 3 } } # Make sure we're not already lovers. NOT = { has_relation_lover = $TARGET$ } # Filter out any rivals that somehow made it this far. NOT = { has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } } } # Marriage/concubinage at camp. ep3_laamp_flavour_ewan.2021 = { type = character_event title = ep3_laamp_flavour_ewan.2021.t desc = ep3_laamp_flavour_ewan.2021.desc theme = laamp left_portrait = { character = scope:follower_1 animation = flirtation_left } right_portrait = { character = scope:follower_2 animation = admiration } override_background = { reference = ep3_campfire } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2021 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2021 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Make sure they like each other. scope:follower_1 = { add_opinion = { target = scope:follower_2 modifier = love_opinion opinion = 100 } reverse_add_opinion = { target = scope:follower_2 modifier = love_opinion opinion = 100 } } # Plus, check if we should be matrilineal or patrilineal. random_list = { 100 = { trigger = { scope:follower_1 = { faith = { OR = { has_doctrine = doctrine_gender_female_dominated has_doctrine = doctrine_gender_equal } } is_female = yes } } save_scope_value_as = { name = dominant_partner value = flag:matrilineal } } 100 = { trigger = { scope:follower_1 = { faith = { OR = { has_doctrine = doctrine_gender_male_dominated has_doctrine = doctrine_gender_equal } } is_male = yes } } save_scope_value_as = { name = dominant_partner value = flag:patrilineal } } 100 = { trigger = { scope:follower_2 = { faith = { OR = { has_doctrine = doctrine_gender_female_dominated has_doctrine = doctrine_gender_equal } } is_female = yes } } save_scope_value_as = { name = dominant_partner value = flag:matrilineal } } 100 = { trigger = { scope:follower_2 = { faith = { OR = { has_doctrine = doctrine_gender_male_dominated has_doctrine = doctrine_gender_equal } } is_male = yes } } save_scope_value_as = { name = dominant_partner value = flag:patrilineal } } } } # Permit the union. option = { name = ep3_laamp_flavour_ewan.2021.a if = { limit = { scope:dominant_partner = flag:matrilineal scope:follower_1 = { is_female = yes } } scope:follower_1 = { marry_matrilineal = scope:follower_2 } } else = { scope:follower_2 = { marry = scope:follower_1 } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Allow, but require only concubinage. option = { name = ep3_laamp_flavour_ewan.2021.b trigger = { OR = { AND = { scope:dominant_partner = flag:matrilineal OR = { scope:follower_1 = { is_female = yes faith = { has_doctrine = doctrine_concubines } } scope:follower_2 = { is_female = yes faith = { has_doctrine = doctrine_concubines } } } } AND = { scope:dominant_partner = flag:patrilineal OR = { scope:follower_1 = { is_male = yes faith = { has_doctrine = doctrine_concubines } } scope:follower_2 = { is_male = yes faith = { has_doctrine = doctrine_concubines } } } } } } # Apply the concubinage. if = { limit = { scope:dominant_partner = flag:matrilineal scope:follower_1 = { is_female = yes } } scope:follower_1 = { make_concubine = scope:follower_2 } } else = { scope:follower_2 = { make_concubine = scope:follower_1 } } # If your faith doesn't allow concubinage, pay piety for this. if = { limit = { NOT = { faith = { has_doctrine = doctrine_concubines } } } add_piety = major_piety_loss } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_vengefulness = 0.25 } } } # Forbid them. option = { name = ep3_laamp_flavour_ewan.2021.c custom_tooltip = ep3_laamp_flavour_ewan.2021.c.tt reverse_add_opinion = { target = scope:follower_1 modifier = angry_opinion opinion = -50 } reverse_add_opinion = { target = scope:follower_2 modifier = angry_opinion opinion = -50 } # Decent chance this won't stop 'em. hidden_effect = { random = { chance = 25 scope:follower_1 = { add_secret = { target = scope:follower_2 type = secret_lover } } } } # Stop either of them from asking again for a _while_. scope:follower_1 = { add_character_flag = { flag = marriage_request_turned_down years = 30 } } scope:follower_2 = { add_character_flag = { flag = marriage_request_turned_down years = 30 } } stress_impact = { sadistic = minor_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } } # Pre-filtering event to set up scopes. ep3_laamp_flavour_ewan.2022 = { hidden = yes trigger = { trigger_if = { limit = { is_ai = yes } static_group_filter = { group = ep3_laamp_flavour_ewan.2022 match = 0.2 } } # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2021 } } # Must have suitable courtiers around and about. any_courtier = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes save_temporary_scope_as = char_temp root = { any_courtier = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:char_temp } } } } } immediate = { while = { count = 10 limit = { NOT = { exists = scope:follower_2 } } # Alright, let's select our lovebirds. ## First, pick a scope:follower_1 candidate. random_courtier = { limit = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes NOT = { is_in_list = checked_courtier_1_candidates_list } } save_scope_as = follower_1 add_to_list = checked_courtier_1_candidates_list } ## Now, nab a suitable pair. if = { limit = { exists = scope:follower_1 } random_courtier = { limit = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:follower_1 } } weight = { opinion_modifier = { opinion_target = scope:follower_1 multiplier = 0.5 } opinion_modifier = { who = scope:follower_1 opinion_target = this multiplier = 0.5 } } save_scope_as = follower_2 } # And, wipe our checks so we can iterate the loop if required. if = { limit = { NOT = { exists = scope:follower_2 } } clear_saved_scope = follower_1 } } } # If we've actually got our dudes, proceed to the event. if = { limit = { exists = scope:follower_1 exists = scope:follower_2 } trigger_event = ep3_laamp_flavour_ewan.2021 } } } ################################################## # Through with You # by Ewan Cowhig Croft # # 2031 - 2040 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Make sure they hate us. opinion = { target = root value <= -95 } # And wouldn't suck in the resultant duel. diplomacy >= high_skill_rating # Plus stop the stooge from leaving. NOT = { has_court_position = stooge_camp_officer } # Filter out characters who've tried this and failed. NOT = { has_character_flag = failed_to_quit_camp } } # Someone who hates you up and leaves. ep3_laamp_flavour_ewan.2031 = { type = character_event title = ep3_laamp_flavour_ewan.2031.t desc = { desc = ep3_laamp_flavour_ewan.2031.desc.intro first_valid = { triggered_desc = { trigger = { scope:waverers_check = flag:some } desc = ep3_laamp_flavour_ewan.2031.desc.waverers.some } desc = ep3_laamp_flavour_ewan.2031.desc.waverers.none } } theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:firebrand animation = rage } override_background = { reference = ep3_campfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2031 } } # Make sure we have at least one firebrand troublemaker. any_courtier = { ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2031 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2031 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longer } } # Grab a suitable firebrand. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = yes } order_by = diplomacy save_scope_as = firebrand } # See if we have anyone else who'd leave with them. every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes opinion = { target = root value <= -60 } # Not the stooge. NOT = { has_court_position = stooge_camp_officer } # Nor scope:firebrand themselves. this != scope:firebrand } add_to_list = wavering_courtiers_list save_scope_value_as = { name = waverers_check value = flag:some } } # If we've got not waverers, flag that for loc. if = { limit = { "list_size(wavering_courtiers_list)" <= 0 } save_scope_value_as = { name = waverers_check value = flag:none } } } # Perhaps I can persuade you... option = { name = ep3_laamp_flavour_ewan.2031.a duel = { skill = diplomacy target = scope:firebrand # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2031.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2031.a.tt.success left_icon = scope:firebrand scope:firebrand = { add_stress = major_stress_gain hidden_effect = { add_opinion = { target = root modifier = respect_opinion opinion = 30 } } } every_in_list = { list = wavering_courtiers_list custom = ep3_laamp_flavour_ewan.2031.tt.success.wavering_courtiers add_opinion = { target = root modifier = respect_opinion opinion = 30 } } } scope:firebrand = { add_character_flag = failed_to_quit_camp } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2031.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2031.a.tt.failure left_icon = scope:firebrand add_prestige = medium_prestige_loss scope:firebrand = { select_and_move_to_pool_effect = yes } every_in_list = { list = wavering_courtiers_list custom = ep3_laamp_flavour_ewan.2031.tt.failure.wavering_courtiers_move_to_pool select_and_move_to_pool_effect = yes } } } } stress_impact = { calm = minor_stress_impact_loss forgiving = minor_stress_impact_loss vengeful = medium_stress_impact_gain wrathful = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # You're going nowhere, clap HerHim in irons! option = { name = ep3_laamp_flavour_ewan.2031.b # If you don't have a good reason, then yeah, this'll make you look like a douche. imprison_character_effect = { TARGET = scope:firebrand IMPRISONER = root } scope:firebrand = { add_character_flag = failed_to_quit_camp } stress_impact = { wrathful = miniscule_stress_impact_loss vengeful = miniscule_stress_impact_loss forgiving = minor_stress_impact_gain calm = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } } } # Leave if you wish, but you'll take no one and nothing. option = { name = ep3_laamp_flavour_ewan.2031.c trigger = { scope:waverers_check = flag:some } duel = { skill = prowess target = scope:firebrand # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2031.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2031.c.tt.success left_icon = scope:firebrand scope:firebrand = { select_and_move_to_pool_effect = yes } every_in_list = { list = wavering_courtiers_list custom = ep3_laamp_flavour_ewan.2031.tt.success.wavering_courtiers add_opinion = { target = root modifier = respect_opinion opinion = 30 } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2031.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2031.c.tt.failure left_icon = scope:firebrand add_prestige = medium_prestige_loss scope:firebrand = { select_and_move_to_pool_effect = yes } every_in_list = { list = wavering_courtiers_list custom = ep3_laamp_flavour_ewan.2031.tt.failure.wavering_courtiers_move_to_pool select_and_move_to_pool_effect = yes } } } } stress_impact = { calm = miniscule_stress_impact_loss forgiving = miniscule_stress_impact_loss vengeful = miniscule_stress_impact_gain wrathful = miniscule_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Go then, all of you. option = { name = { text = { first_valid = { triggered_desc = { trigger = { scope:waverers_check = flag:some } desc = ep3_laamp_flavour_ewan.2031.d.multi } desc = ep3_laamp_flavour_ewan.2031.d.solo } } } # Consolation prestige. if = { limit = { scope:waverers_check = flag:some } add_prestige = medium_prestige_gain } else = { add_prestige = minor_prestige_gain } # And we lose _everyone_. scope:firebrand = { select_and_move_to_pool_effect = yes } every_in_list = { list = wavering_courtiers_list select_and_move_to_pool_effect = yes } stress_impact = { shy = medium_stress_impact_loss calm = medium_stress_impact_loss forgiving = medium_stress_impact_loss compassionate = medium_stress_impact_loss gregarious = minor_stress_impact_gain sadistic = medium_stress_impact_gain vengeful = major_stress_impact_gain wrathful = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } } ################################################## # Closer Quarters # by Ewan Cowhig Croft # # 2041 - 2050 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { has_trait = celibate } # Make sure they either don't have complex relationships already, or else don't care about them. might_cheat_on_every_partner_trigger = yes # One lover at a time (for most), just to keep the complexity down. OR = { num_of_relation_lover <= 0 has_trait = lustful has_trait = seducer has_trait = rakish } # Filter out anyone we're in a relationship with, so that there's no weird complexities to account for there. NOR = { is_consort_of = root has_relation_lover = root } # If it'd be criminal for us to cheat/fornicate, then at least make sure we'd chance it. trigger_if = { limit = { OR = { trait_is_criminal_in_faith_trigger = { FAITH = faith TRAIT = adulterer GENDER_CHARACTER = this } AND = { is_male = yes faith = { has_doctrine_parameter = homosexuality_illegal } } } } NOR = { has_trait = zealous has_trait = craven has_trait = just } } } scripted_trigger ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_precise_trigger = { ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes NOT = { this = $TARGET$ } # Must have matching sexualities & the right legalities in place. is_attracted_to_gender_of = $TARGET$ $TARGET$ = { is_attracted_to_gender_of = prev } # Ensure our ages aren't too far apart — not that this couldn't happen, but huge age gaps are a big verisimilitude problem for many players. age >= { value = $TARGET$.age add = -8 } age <= { value = $TARGET$.age add = 8 } # Try to see how well they get along. OR = { AND = { # Something in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 1 } # Mutual positive opinions. opinion = { target = $TARGET$ value >= 1 } reverse_opinion = { target = $TARGET$ value >= 1 } } AND = { # Lots in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 2 } # They don't hate each other completely. opinion = { target = $TARGET$ value >= -30 } reverse_opinion = { target = $TARGET$ value >= -30 } } # Everything in common. number_of_personality_traits_in_common = { target = $TARGET$ value >= 3 } # Allow the terminally horny to hook up. AND = { has_trait = lustful $TARGET$ = { has_trait = lustful } } } # Filter out any rivals that somehow made it this far. NOT = { has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } } } # Lover developing from various sources. ep3_laamp_flavour_ewan.2041 = { type = character_event title = ep3_laamp_flavour_ewan.2041.t desc = ep3_laamp_flavour_ewan.2041.desc theme = laamp left_portrait = { character = scope:follower_1 animation = love } right_portrait = { character = scope:follower_2 animation = flirtation } override_background = { reference = ep3_campfire } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2041 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2041 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Make sure they like each other. scope:follower_1 = { add_opinion = { target = scope:follower_2 modifier = tryst_opinion opinion = 75 } reverse_add_opinion = { target = scope:follower_2 modifier = tryst_opinion opinion = 75 } } } # Have them split up. option = { name = ep3_laamp_flavour_ewan.2041.a # Nab whichever follower has the higher diplomacy to be the duel target. if = { limit = { scope:follower_1.diplomacy >= scope:follower_2.diplomacy } scope:follower_1 = { save_scope_as = duel_target } } else = { scope:follower_2 = { save_scope_as = duel_target } } duel = { skill = diplomacy target = scope:duel_target # Victory! 60 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2041.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2041.a.tt.success left_icon = scope:follower_1 right_icon = scope:follower_2 add_prestige = minor_prestige_gain scope:follower_1 = { stress_impact = { base = medium_stress_gain chaste = minor_stress_impact_loss lustful = minor_stress_impact_gain } } scope:follower_2 = { stress_impact = { base = medium_stress_gain chaste = minor_stress_impact_loss lustful = minor_stress_impact_gain } } } } # Defeat. 40 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2041.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2041.a.tt.failure left_icon = scope:follower_1 right_icon = scope:follower_2 scope:follower_1 = { set_random_lover_reason = { TARGET = scope:follower_2 } add_opinion = { target = root modifier = annoyed_opinion opinion = -40 } } reverse_add_opinion = { target = scope:follower_2 modifier = annoyed_opinion opinion = -40 } } scope:follower_1 = { remove_opinion = { target = scope:follower_2 modifier = tryst_opinion } } scope:follower_2 = { remove_opinion = { target = scope:follower_1 modifier = tryst_opinion } } } } stress_impact = { sadistic = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } opinion_modifier = { opinion_target = scope:follower_1 multiplier = -0.5 } opinion_modifier = { opinion_target = scope:follower_2 multiplier = -0.5 } } } # None of my business. option = { name = ep3_laamp_flavour_ewan.2041.b scope:follower_1 = { set_random_lover_reason = { TARGET = scope:follower_2 } } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 2 } opinion_modifier = { opinion_target = scope:follower_1 multiplier = 0.5 } opinion_modifier = { opinion_target = scope:follower_2 multiplier = 0.5 } } } } # Pre-filtering event to set up scopes. ep3_laamp_flavour_ewan.2042 = { hidden = yes trigger = { trigger_if = { limit = { is_ai = yes } static_group_filter = { group = ep3_laamp_flavour_ewan.2042 match = 0.2 } } # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2041 } } # Must have suitable courtiers around and about. any_courtier = { ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes save_temporary_scope_as = char_temp root = { any_courtier = { ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_precise_trigger = { TARGET = scope:char_temp } } } } } immediate = { while = { count = 10 limit = { NOT = { exists = scope:follower_2 } } # Alright, let's select our lovebirds. ## First up, pick an appropriate character. random_courtier = { limit = { ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes NOT = { is_in_list = checked_courtier_1_candidates_list } } save_scope_as = follower_1 add_to_list = checked_courtier_1_candidates_list } ## Now, nab a suitable pair. if = { limit = { exists = scope:follower_1 } random_courtier = { limit = { ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:follower_1 } } weight = { modifier = { add = attraction always = yes } modifier = { add = 50 has_trait = lustful } modifier = { add = -50 has_trait = chaste } } save_scope_as = follower_2 } # And, wipe our checks so we can iterate the loop if required. if = { limit = { NOT = { exists = scope:follower_2 } } clear_saved_scope = follower_1 } } } # If we've actually got our dudes, proceed to the event. if = { limit = { exists = scope:follower_1 exists = scope:follower_2 } trigger_event = ep3_laamp_flavour_ewan.2041 } } } ################################################## # What's the Point? # by Ewan Cowhig Croft # # 2051 - 2060 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes OR = { has_trait = lazy has_trait = eccentric has_trait = athletic AND = { has_trait = diligent has_trait = humble } } NOR = { has_trait = arrogant has_trait = gregarious culture = { has_cultural_parameter = better_disease_resistance } } } # Someone abandons bathing. ep3_laamp_flavour_ewan.2051 = { type = character_event title = ep3_laamp_flavour_ewan.2051.t desc = { desc = ep3_laamp_flavour_ewan.2051.desc.intro first_valid = { triggered_desc = { trigger = { scope:smelly = { has_trait = diligent has_trait = humble } } desc = ep3_laamp_flavour_ewan.2051.desc.diligent_and_humble } triggered_desc = { trigger = { scope:smelly = { has_trait = athletic } } desc = ep3_laamp_flavour_ewan.2051.desc.athletic } triggered_desc = { trigger = { scope:smelly = { has_trait = gregarious } } desc = ep3_laamp_flavour_ewan.2051.desc.gregarious } desc = ep3_laamp_flavour_ewan.2051.desc.lazy } desc = ep3_laamp_flavour_ewan.2051.desc.outro } theme = laamp left_portrait = { character = root animation = disgust } right_portrait = { character = scope:smelly animation = personality_bold } override_background = { reference = wilderness } override_effect_2d = { reference = flies } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2051 } } # Must have at least one potential scope:smelly. any_courtier = { ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2051 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2051 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longer } } # Nab our scope:smelly. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = yes } order_by = { # We want the least socially competent person available. value = 100 subtract = diplomacy } save_scope_as = smelly add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2051_is_stinker_modifier years = 10 } } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes this != scope:smelly } custom = custom.every_follower add_opinion = { target = scope:smelly modifier = disgusted_opinion opinion = -30 } } } # Scope:smelly, you _reek_! option = { name = { text = { first_valid = { triggered_desc = { trigger = { scope:smelly = { has_trait = diligent has_trait = humble } } desc = ep3_laamp_flavour_ewan.2051.a.diligent_and_humble } triggered_desc = { trigger = { scope:smelly = { has_trait = athletic } } desc = ep3_laamp_flavour_ewan.2051.a.athletic } triggered_desc = { trigger = { scope:smelly = { has_trait = gregarious } } desc = ep3_laamp_flavour_ewan.2051.a.gregarious } desc = ep3_laamp_flavour_ewan.2051.a.lazy } } } reverse_add_opinion = { target = scope:smelly modifier = upset_opinion opinion = -20 } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2051_disciplined_stinker_modifier years = 10 } stress_impact = { arrogant = minor_stress_impact_loss honest = minor_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 2 } } } # Join HerHim in filthy freedom. option = { name = ep3_laamp_flavour_ewan.2051.b reverse_add_opinion = { target = scope:smelly modifier = pleased_opinion opinion = 35 } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2051_joined_stinker_modifier years = 10 } stress_impact = { content = miniscule_stress_impact_loss humble = miniscule_stress_impact_loss arrogant = medium_stress_impact_gain ambitious = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 ai_boldness = 1 } } } # Leave this petty drama to play out. option = { name = ep3_laamp_flavour_ewan.2051.c # Consolation prestige. add_prestige = minor_prestige_gain stress_impact = { shy = miniscule_stress_impact_loss lazy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -2 } } } } ################################################## # My Spot # by Ewan Cowhig Croft # # 2061 - 2070 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOR = { has_trait = patient has_trait = calm has_trait = humble } } scripted_trigger ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOT = { this = $TARGET$ } # Make sure we've got poor relations with our target. opinion = { target = $TARGET$ value <= -20 } reverse_opinion = { target = $TARGET$ value <= -20 } NOT = { has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } } save_temporary_scope_as = char_temp2 } # Fight at dinner over tent pitch location. ep3_laamp_flavour_ewan.2061 = { type = character_event title = ep3_laamp_flavour_ewan.2061.t desc = ep3_laamp_flavour_ewan.2061.desc theme = laamp left_portrait = { character = scope:victim animation = anger } right_portrait = { character = scope:thief animation = dismissal } override_background = { reference = corridor_night } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2061 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2061 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Now, make them upset with one another. scope:thief = { add_opinion = { target = scope:victim modifier = overreaction_opinion opinion = -30 } reverse_add_opinion = { target = scope:victim modifier = annoyed_opinion opinion = -30 } } } # Side with scope:victim. option = { name = ep3_laamp_flavour_ewan.2061.a add_favour_hook_if_possible_simple_effect = { TARGET = scope:victim } reverse_add_opinion = { target = scope:victim modifier = respect_opinion opinion = 20 } reverse_add_opinion = { target = scope:thief modifier = upset_opinion opinion = -20 } stress_impact = { honest = miniscule_stress_impact_loss just = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } opinion_modifier = { opinion_target = scope:victim } } } # Side with scope:thief. option = { name = ep3_laamp_flavour_ewan.2061.b add_favour_hook_if_possible_simple_effect = { TARGET = scope:thief } reverse_add_opinion = { target = scope:thief modifier = respect_opinion opinion = 20 } reverse_add_opinion = { target = scope:victim modifier = upset_opinion opinion = -20 } stress_impact = { deceitful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss just = minor_stress_impact_gain honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -1 } opinion_modifier = { opinion_target = scope:thief } } } # Fixed Layout: we have rules for a reason, scope:thief. option = { name = ep3_laamp_flavour_ewan.2061.c trigger = { domicile = { has_domicile_building = camp_perimeter_fixed_layout } } reason = has_building_camp_perimeter_fixed_layout add_favour_hook_if_possible_simple_effect = { TARGET = scope:victim } reverse_add_opinion = { target = scope:victim modifier = respect_opinion opinion = 30 } reverse_add_opinion = { target = scope:thief modifier = respect_opinion opinion = 20 } add_prestige = medium_prestige_gain stress_impact = { honest = miniscule_stress_impact_loss just = miniscule_stress_impact_loss diligent = miniscule_stress_impact_loss } ai_chance = { # Just a good option for the AI to take if they can. base = 1000 } } # Figure it out amongst yourselves. option = { name = ep3_laamp_flavour_ewan.2061.d # Consolation prestige. add_prestige = minor_prestige_gain stress_impact = { shy = miniscule_stress_impact_loss gregarious = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } } # Pre-filtering event to set up scopes. ep3_laamp_flavour_ewan.2062 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2061 } } # Make sure we've got suitable courtiers available. any_courtier = { ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = yes save_temporary_scope_as = char_temp root = { any_courtier = { ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } } } } } immediate = { while = { count = 10 limit = { NOT = { exists = scope:thief } } # Find our best courtiers. ## First, grabbing a valid annoyed char. random_courtier = { limit = { ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = yes NOT = { is_in_list = checked_courtier_1_candidates_list } } save_scope_as = victim add_to_list = checked_courtier_1_candidates_list } ## Then processing out a good thief. if = { limit = { exists = scope:victim } random_courtier = { limit = { ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { TARGET = scope:victim } } weight = { modifier = { add = 20 has_trait = wrathful } modifier = { add = 15 has_trait = deceitful } modifier = { add = 5 has_trait = arrogant } modifier = { add = 10 has_trait = arbitrary } modifier = { add = -20 has_trait = just } modifier = { add = 5 has_trait = fickle } modifier = { add = 15 has_trait = vengeful } modifier = { add = -15 has_trait = forgiving } modifier = { add = -15 has_trait = honest } } save_scope_as = thief } # And, wipe our checks so we can iterate the loop if required. if = { limit = { NOT = { exists = scope:thief } } clear_saved_scope = victim } } } # If we've actually got our dudes, proceed to the event. if = { limit = { exists = scope:victim exists = scope:thief } trigger_event = ep3_laamp_flavour_ewan.2061 } } } ################################################## # Second-in-Command # by Ewan Cowhig Croft # # 2071 - 2080 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes can_be_employed_as = second_camp_officer "aptitude(second_camp_officer)" >= 2 # Plus make sure they'd actually want the job. NOR = { has_trait = lazy has_trait = humble has_trait = content has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } } opinion = { target = root value >= 20 } # For tonal reasons, it's easiest to just avoid disloyal/loyalty-hooked characters getting in here for any reason. NOR = { has_trait = disloyal root = { has_strong_hook = prev } } } scripted_effect ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { camp_officer_grant_effect = { EMPLOYER = root POS = second CANDIDATE = $CHOSEN$ } reverse_add_opinion = { target = $CHOSEN$ modifier = grateful_opinion opinion = 50 } } scripted_effect ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { # If we have a scope:current_sic, then they're upset too. scope:current_sic ?= { add_opinion = { target = root modifier = insult_opinion opinion = -50 } } # Whilst everyone else is just annoyed. reverse_add_opinion = { target = $CANDIDATE_A$ modifier = insult_opinion opinion = -30 } reverse_add_opinion = { target = $CANDIDATE_B$ modifier = insult_opinion opinion = -30 } } # People scrabble for empty/ineffectual SiC position. ep3_laamp_flavour_ewan.2071 = { type = character_event title = ep3_laamp_flavour_ewan.2071.t desc = { first_valid = { triggered_desc = { trigger = { exists = scope:current_sic } desc = ep3_laamp_flavour_ewan.2071.desc.sic_exists } desc = ep3_laamp_flavour_ewan.2071.desc.sic_vacant } desc = ep3_laamp_flavour_ewan.2071.desc.outro } theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:current_sic animation = worry } lower_left_portrait = scope:candidate_1 lower_center_portrait = scope:candidate_2 lower_right_portrait = scope:candidate_3 override_background = { reference = armory } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2071 } } # Either you don't have a SiC, or your SiC sucks. OR = { NOT = { employs_court_position = second_camp_officer } court_position:second_camp_officer = { "aptitude(second_camp_officer)" <= 1 } } # You have at least three characters who'd be better. any_courtier = { count >= 3 ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2071 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2071 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Is the spot vacant, or merely incompetent? if = { limit = { employs_court_position = second_camp_officer } court_position:second_camp_officer = { save_scope_as = current_sic } } # Alright, process out our possible SiCs. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = yes } order_by = { # Ok, first we group by aptitude. value = "aptitude(second_camp_officer)" # Then we want to use diplomacy as a tiebreaker... ## ... so make it a decimal of aptitude... multiply = 100 ## ... and _then_ add it. add = diplomacy } max = 3 check_range_bounds = no # We place these in order of how much they'll offer you, which means we actually want to invert our count for how we save the scopes (so 3 -> 2 -> 1). if = { limit = { NOT = { exists = scope:candidate_3 } } save_scope_as = candidate_3 } else_if = { limit = { NOT = { this = scope:candidate_3 exists = scope:candidate_2 } } save_scope_as = candidate_2 } else_if = { limit = { NOT = { this = scope:candidate_3 this = scope:candidate_2 exists = scope:candidate_1 } } save_scope_as = candidate_1 } } } # Accept scope:candidate_1, and their offer of complete loyalty. option = { name = ep3_laamp_flavour_ewan.2071.a ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_1 } add_hook = { target = scope:candidate_1 type = loyalty_hook } # Flag that the loyalty hook is dependent on this court position. scope:candidate_1 = { set_variable = { name = loyalty_dependent_on_position value = root } } # Everyone else is upset. ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { CANDIDATE_A = scope:candidate_2 CANDIDATE_B = scope:candidate_3 } # No stress here. ai_chance = { base = 1 opinion_modifier = { opinion_target = scope:candidate_1 } } } # Take scope:candidate_2, who says they'll work themselves to death. option = { name = ep3_laamp_flavour_ewan.2071.b ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_2 } scope:candidate_2 = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2071_b_work_self_to_death_modifier years = 20 } } # Everyone else is upset. ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { CANDIDATE_A = scope:candidate_1 CANDIDATE_B = scope:candidate_3 } # No stress here. ai_chance = { base = 1 opinion_modifier = { opinion_target = scope:candidate_2 } } } # Mmmm, scope:candidate_3, please: HerHis skills are self-evident. option = { name = ep3_laamp_flavour_ewan.2071.c ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_3 } # Everyone else is upset. ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { CANDIDATE_A = scope:candidate_1 CANDIDATE_B = scope:candidate_2 } # No stress here. ai_chance = { base = 1 opinion_modifier = { opinion_target = scope:candidate_3 } } } # It shall remain vacant/scope:sic shall keep HerHis post. option = { name = { text = { first_valid = { triggered_desc = { trigger = { exists = scope:current_sic } desc = ep3_laamp_flavour_ewan.2071.d.post_filled } desc = ep3_laamp_flavour_ewan.2071.d.post_empty } } } # If we have a scope:current_sic, then they're duly grateful. scope:current_sic ?= { add_opinion = { target = root modifier = grateful_opinion opinion = 30 } } # Whilst everyone else is just annoyed. reverse_add_opinion = { target = scope:candidate_1 modifier = insult_opinion opinion = -30 } reverse_add_opinion = { target = scope:candidate_2 modifier = insult_opinion opinion = -30 } reverse_add_opinion = { target = scope:candidate_3 modifier = insult_opinion opinion = -30 } # Consolation prestige. add_prestige = minor_prestige_gain # Lose stress if we're playing to our reputation + it's appropriate. if = { limit = { exists = scope:current_sic } stress_impact = { loyal = medium_stress_loss } } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } } ################################################## # A Well-Oiled Machine # by Ewan Cowhig Croft # # 2081 - 2090 ################################################## # Helping each other out at pitch time. ep3_laamp_flavour_ewan.2081 = { type = character_event title = ep3_laamp_flavour_ewan.2081.t desc = { desc = ep3_laamp_flavour_ewan.2081.desc.intro first_valid = { triggered_desc = { trigger = { scope:follower_1 = { OR = { opinion = { target = scope:follower_2 value <= -25 } reverse_opinion = { target = scope:follower_2 value <= -25 } } } } desc = ep3_laamp_flavour_ewan.2081.desc.dislike } triggered_desc = { trigger = { scope:follower_1 = { OR = { opinion = { target = scope:follower_2 value >= 25 } reverse_opinion = { target = scope:follower_2 value >= 25 } } } } desc = ep3_laamp_flavour_ewan.2081.desc.like } desc = ep3_laamp_flavour_ewan.2081.desc.neutral } desc = ep3_laamp_flavour_ewan.2081.desc.outro } theme = laamp left_portrait = { character = scope:follower_1 animation = laugh } right_portrait = { character = scope:follower_2 animation = personality_bold } override_background = { reference = corridor_night } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2081 } } # Must have suitable courtiers available. any_courtier = { count >= 2 ep3_laamp_flavour_ewan_available_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2081 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2081 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longer } } # Nab our two courtiers. random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } weight = { modifier = { add = stewardship always = yes } modifier = { add = 10 has_trait = diligent } modifier = { add = -10 has_trait = lazy } } save_scope_as = follower_1 } random_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes this != scope:follower_1 } weight = { modifier = { add = stewardship always = yes } modifier = { add = 10 has_trait = diligent } modifier = { add = -10 has_trait = lazy } } save_scope_as = follower_2 } } # Do you need another hand? option = { name = ep3_laamp_flavour_ewan.2081.a reverse_add_opinion = { target = scope:follower_1 modifier = one_of_us_opinion opinion = 30 } reverse_add_opinion = { target = scope:follower_2 modifier = one_of_us_opinion opinion = 30 } add_prestige = minor_prestige_loss stress_impact = { diligent = miniscule_stress_impact_loss humble = miniscule_stress_impact_loss content = miniscule_stress_impact_loss ambitious = minor_stress_impact_gain lazy = minor_stress_impact_gain arrogant = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Legitimist: after you're done here, go help raise my pavillion. option = { name = ep3_laamp_flavour_ewan.2081.b trigger = { has_realm_law = camp_purpose_legitimists } reason = purpose_legitimists add_prestige = medium_prestige_gain stress_impact = { arrogant = medium_stress_impact_loss lazy = minor_stress_impact_loss ambitious = miniscule_stress_impact_loss content = minor_stress_impact_gain humble = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Hmmm... don't like that, better move them apart. option = { name = ep3_laamp_flavour_ewan.2081.c trigger = { NOT = { has_realm_law = camp_purpose_legitimists } } reverse_add_opinion = { target = scope:follower_1 modifier = annoyed_opinion opinion = -10 } reverse_add_opinion = { target = scope:follower_2 modifier = annoyed_opinion opinion = -10 } stress_impact = { paranoid = minor_stress_impact_loss trusting = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -1 } } } # Fixed Layout: as it should be. option = { name = ep3_laamp_flavour_ewan.2081.d trigger = { domicile = { has_domicile_building = camp_perimeter_fixed_layout } } reason = has_building_camp_perimeter_fixed_layout add_character_modifier = { modifier = ep3_laamp_flavour_ewan_2081_d_well_oiled_operation_modifier years = 10 } # No stress here, ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # Good to see those two getting on! option = { name = ep3_laamp_flavour_ewan.2081.e scope:follower_1 = { add_opinion = { target = scope:follower_2 modifier = respect_opinion opinion = 30 } reverse_add_opinion = { target = scope:follower_2 modifier = respect_opinion opinion = 30 } } # No stress here, ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } } ################################################## # Crimes of Passion # by Ewan Cowhig Croft # # 2091 - 2100 ################################################## scripted_trigger ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Mustn't have a deescalatory personality. NOR = { has_trait = patient has_trait = calm has_trait = forgiving } # And make sure a fight is conceivable. prowess >= 7 can_start_single_combat_trigger = yes } scripted_trigger ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { NOT = { this = $TARGET$ } ep3_laamp_flavour_ewan_available_courtier_trigger = yes # Make sure we've got poor relations with our target. opinion = { target = $TARGET$ value <= -25 } reverse_opinion = { target = $TARGET$ value <= -25 } NOT = { has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } } save_temporary_scope_as = char_temp2 } scripted_effect ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = { configure_start_single_combat_effect = { SC_INITIATOR = scope:attacker SC_ATTACKER = scope:attacker SC_DEFENDER = scope:defender FATALITY = always FIXED = no LOCALE = terrain_scope INVALIDATION_EVENT = single_combat.1006 OUTPUT_EVENT = ep3_laamp_flavour_ewan.2092 } } # Followers attack each other. ep3_laamp_flavour_ewan.2091 = { type = character_event title = ep3_laamp_flavour_ewan.2091.t desc = ep3_laamp_flavour_ewan.2091.desc theme = laamp left_portrait = { character = scope:attacker animation = random_weapon_aggressive } right_portrait = { character = scope:defender animation = shock } override_background = { reference = ep3_campfire } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_2091 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_2091 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Now, make them upset with one another. scope:attacker = { add_opinion = { target = scope:defender modifier = hate_opinion opinion = -50 } reverse_add_opinion = { target = scope:defender modifier = hate_opinion opinion = -50 } } # Plus make sure we _definitely_ know who root is, for the after-toasts. save_scope_as = og_root } # Intervene. option = { name = ep3_laamp_flavour_ewan.2091.a duel = { skill = diplomacy target = scope:attacker # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2091.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.2091.a.tt.success left_icon = scope:attacker right_icon = scope:defender reverse_add_opinion = { target = scope:attacker modifier = respect_opinion opinion = 40 } reverse_add_opinion = { target = scope:defender modifier = respect_opinion opinion = 40 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.2091.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.2091.a.tt.failure left_icon = scope:attacker right_icon = scope:defender reverse_add_opinion = { target = scope:attacker modifier = respect_opinion opinion = -20 } reverse_add_opinion = { target = scope:defender modifier = respect_opinion opinion = -20 } } scope:attacker = { increase_wounds_no_death_effect = { REASON = fight } } scope:defender = { increase_wounds_no_death_effect = { REASON = fight } } } } stress_impact = { calm = miniscule_stress_impact_loss just = miniscule_stress_impact_loss arbitrary = minor_stress_impact_gain patient = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Freebooters/S4H: invite them to settle their grievances with a formal duel. option = { name = ep3_laamp_flavour_ewan.2091.b trigger = { OR = { has_realm_law = camp_purpose_mercenaries has_realm_law = camp_purpose_brigands } } reason = purpose_brigands_and_mercenaries add_prestige = medium_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes NOR = { this = scope:attacker this = scope:defender } } custom = custom.every_adult_follower add_stress = major_stress_loss add_opinion = { target = root modifier = entertained_opinion opinion = 30 } } save_scope_value_as = { name = duel_legal value = yes } custom_tooltip = ep3_laamp_flavour_ewan.2091.tt.duel_commences ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = yes # For once, all sides of the Calm/Just axes are happy! Blood and justice on the right terms! ## ... or something. stress_impact = { calm = minor_stress_impact_loss arbitrary = minor_stress_impact_loss just = minor_stress_impact_loss wrathful = minor_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # Have the attacker arrested and thrown in the stocks. option = { name = ep3_laamp_flavour_ewan.2091.c rightfully_imprison_character_effect = { TARGET = scope:attacker IMPRISONER = root } reverse_add_opinion = { target = scope:defender modifier = grateful_opinion opinion = 50 } stress_impact = { just = miniscule_stress_impact_loss arbitrary = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = 1 } } } # Let them play it out. option = { name = ep3_laamp_flavour_ewan.2091.d custom_tooltip = ep3_laamp_flavour_ewan.2091.tt.duel_commences ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = yes stress_impact = { wrathful = miniscule_stress_impact_loss arbitrary = miniscule_stress_impact_loss just = minor_stress_impact_gain calm = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } } ep3_laamp_flavour_ewan.2092 = { hidden = yes immediate = { if = { limit = { scope:sc_victor = scope:attacker } scope:og_root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.2092.tt.attacker_won left_icon = scope:attacker right_icon = scope:defender custom_tooltip = ep3_laamp_flavour_ewan.2092.tt.attacker_won.tt scope:attacker = { if = { limit = { NOT = { exists = scope:duel_legal } } laamp_rewards_apply_criminal_xp_effect = { TRACK = marauder XP_MAX = gallowsbait_xp_medium_gain XP_MIN = gallowsbait_xp_medium_gain } } } } } } else = { scope:og_root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.2092.tt.defender_won left_icon = scope:defender right_icon = scope:attacker custom_tooltip = ep3_laamp_flavour_ewan.2092.tt.defender_won.tt } } } } } # Pre-filtering event to set up scopes. ep3_laamp_flavour_ewan.2093 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_2091 } } # Make sure we've got suitable courtiers available. any_courtier = { ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = yes save_temporary_scope_as = char_temp root = { any_courtier = { ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } } } } } immediate = { while = { count = 10 limit = { NOT = { exists = scope:attacker } } # Find our best courtiers. ## First, grab a suitable candidate. random_courtier = { limit = { ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = yes NOT = { is_in_list = checked_courtier_1_candidates_list } } save_scope_as = defender add_to_list = checked_courtier_1_candidates_list } ## Then processing out a good one. if = { limit = { exists = scope:defender } random_courtier = { limit = { ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { TARGET = scope:defender } } weight = { modifier = { add = 20 has_trait = wrathful } modifier = { add = 15 has_trait = deceitful } modifier = { add = 5 has_trait = arrogant } modifier = { add = 10 has_trait = arbitrary } modifier = { add = -20 has_trait = just } modifier = { add = 5 has_trait = fickle } modifier = { add = 15 has_trait = vengeful } modifier = { add = -15 has_trait = forgiving } modifier = { add = -15 has_trait = honest } opinion_modifier = { who = this opinion_target = scope:defender multiplier = -0.5 } } save_scope_as = attacker } # And, wipe our checks so we can iterate the loop if required. if = { limit = { NOT = { exists = scope:attacker } } clear_saved_scope = defender } } } # If we've actually got our dudes, proceed to the event. if = { limit = { exists = scope:defender exists = scope:attacker } trigger_event = ep3_laamp_flavour_ewan.2091 } } } ################################################## # CAMP PURPOSE ################################################## # Heard of You # by Ewan Cowhig Croft # # 3001 - 3010 ################################################## scripted_effect ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { create_character = { template = criminal_brains_character location = root.location save_scope_as = brains diplomacy = { $OVERRIDE_SKILL_LOW$ $OVERRIDE_SKILL_HIGH$ } stewardship = { min_template_medium_skill max_template_medium_skill } } create_character = { template = criminal_brawn_character location = root.location save_scope_as = brawn prowess = { $OVERRIDE_SKILL_LOW$ $OVERRIDE_SKILL_HIGH$ } } create_character = { template = criminal_fingers_character location = root.location save_scope_as = fingers intrigue = { $OVERRIDE_SKILL_LOW$ $OVERRIDE_SKILL_HIGH$ } } # Plus try to give 'em all fun nicknames. hidden_effect = { scope:brains = { assign_random_nickname_effect = yes } scope:brawn = { assign_random_nickname_effect = yes } scope:fingers = { assign_random_nickname_effect = yes } } } scripted_effect ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { add_courtier = scope:brains add_courtier = scope:brawn add_courtier = scope:fingers reverse_add_opinion = { target = scope:brains modifier = grateful_opinion opinion = $OPINION$ } reverse_add_opinion = { target = scope:brawn modifier = grateful_opinion opinion = $OPINION$ } reverse_add_opinion = { target = scope:fingers modifier = grateful_opinion opinion = $OPINION$ } } # Brigands attract cool local criminals, scaled to prestige level. ep3_laamp_flavour_ewan.3001 = { type = character_event title = ep3_laamp_flavour_ewan.3001.t desc = { desc = ep3_laamp_flavour_ewan.3001.desc.intro first_valid = { triggered_desc = { trigger = { prestige_level >= 5 } desc = ep3_laamp_flavour_ewan.3001.desc.legendary } triggered_desc = { trigger = { prestige_level >= 4 } desc = ep3_laamp_flavour_ewan.3001.desc.exalted } triggered_desc = { trigger = { prestige_level >= 3 } desc = ep3_laamp_flavour_ewan.3001.desc.illustrious } triggered_desc = { trigger = { prestige_level >= 2 } desc = ep3_laamp_flavour_ewan.3001.desc.distinguished } triggered_desc = { trigger = { prestige_level >= 1 } desc = ep3_laamp_flavour_ewan.3001.desc.established } desc = ep3_laamp_flavour_ewan.3001.desc.disgraced } } theme = laamp left_portrait = { character = root animation = thinking } right_portrait = { character = scope:brains animation = admiration } lower_center_portrait = scope:brawn lower_right_portrait = scope:fingers override_background = { reference = armory } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3001 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_brigands # And can't have more than a certain amount of courtiers already. any_courtier = { count <= 20 } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3001 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3001 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Spawn our lil dudes. if = { limit = { prestige_level = 0 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_low_skill OVERRIDE_SKILL_HIGH = max_template_low_skill } } else_if = { limit = { prestige_level = 1 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_average_skill OVERRIDE_SKILL_HIGH = max_template_average_skill } } else_if = { limit = { prestige_level = 2 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_medium_skill OVERRIDE_SKILL_HIGH = max_template_medium_skill } } else_if = { limit = { prestige_level = 3 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_decent_skill OVERRIDE_SKILL_HIGH = max_template_decent_skill } } else_if = { limit = { prestige_level = 4 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_high_skill OVERRIDE_SKILL_HIGH = max_template_high_skill } } else_if = { limit = { prestige_level = 5 } ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_very_high_skill OVERRIDE_SKILL_HIGH = max_template_very_high_skill } } ## Shouldn't happen, but just in case, leave a fallback equivalent to the bottom rung. else = { ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { OVERRIDE_SKILL_LOW = min_template_low_skill OVERRIDE_SKILL_HIGH = max_template_low_skill } } # Plus make sure they get on. hidden_effect = { scope:brains = { set_relation_friend = { reason = friend_petty_criminals_together target = scope:fingers } set_relation_friend = { reason = friend_petty_criminals_together target = scope:brawn } } scope:brawn = { set_relation_friend = { reason = friend_petty_criminals_together target = scope:fingers } } } # Save our county for loc. location.county = { save_scope_as = current_county } } # Sure, we'll take you on... option = { name = ep3_laamp_flavour_ewan.3001.a ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { OPINION = 100 } stress_impact = { trusting = miniscule_stress_impact_loss paranoid = miniscule_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # Stewardship duel: ... but you've gotta pay into the _pot_ first. option = { name = ep3_laamp_flavour_ewan.3001.b duel = { skill = stewardship target = scope:brains # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3001.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3001.b.tt.success left_icon = scope:brains scope:brains = { pay_short_term_gold = { target = root gold = medium_gold_laamps_value } # Don't actually charge scope:brains, though. hidden_effect = { add_gold = medium_gold_laamps_value } } } ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { OPINION = 40 } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3001.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3001.b.tt.failure left_icon = scope:brains add_prestige = medium_prestige_loss } } } stress_impact = { greedy = minor_stress_impact_loss generous = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 2 } } } # Heh, get out of here y'curs. option = { name = ep3_laamp_flavour_ewan.3001.c add_prestige = medium_prestige_gain reverse_add_opinion = { target = scope:brains modifier = disappointed_opinion opinion = -20 } reverse_add_opinion = { target = scope:brawn modifier = disappointed_opinion opinion = -20 } reverse_add_opinion = { target = scope:fingers modifier = disappointed_opinion opinion = -20 } stress_impact = { paranoid = miniscule_stress_impact_loss trusting = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -2 } } } after = { # If we're an AI & didn't recruit them, clean up our criminals. if = { limit = { is_ai = yes NOR = { this = scope:brains.liege this = scope:brawn.liege this = scope:fingers.liege } } scope:brains = { death = { death_reason = death_vanished } } scope:brawn = { death = { death_reason = death_vanished } } scope:fingers = { death = { death_reason = death_vanished } } } } } ################################################## # Arguing the Toss # by Ewan Cowhig Croft # # 3011 - 3020 ################################################## scripted_trigger ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes diplomacy >= decent_skill_rating } scripted_trigger ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes learning >= decent_skill_rating } # Scholars debate a learned follower. ep3_laamp_flavour_ewan.3011 = { type = character_event title = ep3_laamp_flavour_ewan.3011.t desc = ep3_laamp_flavour_ewan.3011.desc theme = laamp left_portrait = { character = scope:eloquent_follower animation = toast_goblet } right_portrait = { character = scope:wise_follower animation = writing } override_background = { reference = bp1_bonfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3011 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_scholars # And some suitable courtiers. any_courtier = { ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = yes } ## Check for at least two, if we only have one valid courtier for diplo, them also being the best courtier for learning doesn't cause a hole in the script. any_courtier = { count >= 2 ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3011 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3011 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Set up our courtiers. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = yes } order_by = diplomacy save_scope_as = eloquent_follower } ordered_courtier = { limit = { ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = yes this != scope:eloquent_follower } order_by = learning save_scope_as = wise_follower } } # Diplo duel the eloquent follower for prestige. option = { name = ep3_laamp_flavour_ewan.3011.a duel = { skill = diplomacy target = scope:eloquent_follower # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3011.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3011.a.tt.success left_icon = scope:eloquent_follower add_prestige = { if = { limit = { scope:eloquent_follower.diplomacy >= 32 } add = major_prestige_gain } else = { add = medium_prestige_gain } } reverse_add_opinion = { target = scope:eloquent_follower modifier = respect_opinion opinion = 40 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3011.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3011.a.tt.failure left_icon = scope:eloquent_follower reverse_add_opinion = { target = scope:eloquent_follower modifier = respect_opinion opinion = 20 } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Learning duel the wise follower for prestige. option = { name = ep3_laamp_flavour_ewan.3011.b duel = { skill = learning target = scope:wise_follower # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3011.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3011.b.tt.success left_icon = scope:wise_follower add_prestige = { if = { limit = { scope:wise_follower.learning >= 32 } add = major_prestige_gain } else = { add = medium_prestige_gain } } reverse_add_opinion = { target = scope:wise_follower modifier = respect_opinion opinion = 40 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3011.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3011.b.tt.failure left_icon = scope:wise_follower reverse_add_opinion = { target = scope:wise_follower modifier = respect_opinion opinion = 20 } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # Nightly Debates: better version of the usual modifier. option = { name = ep3_laamp_flavour_ewan.3011.c trigger = { domicile = { has_domicile_building = camp_fire_nightly_debates } } reason = has_building_camp_fire_nightly_debates add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3011_d_presiding_over_lively_debates_modifier years = 10 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } # Nod along for a positive modifier. option = { name = ep3_laamp_flavour_ewan.3011.d trigger = { NOT = { domicile = { has_domicile_building = camp_fire_nightly_debates } } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3011_d_presiding_over_debates_modifier years = 10 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = -1 } } } } ################################################## # Over the Horizon # by Ewan Cowhig Croft # # 3021 - 3030 ################################################## scripted_trigger ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = { save_temporary_scope_as = title_temp holder ?= { OR = { prestige_level >= high_prestige_level court_grandeur_current_level >= 6 } root = { NOR = { knows_language_of_culture = prev.culture knows_language_of_culture = capital_county.culture current_extra_languages >= language_soft_cap } OR = { NOT = { has_variable = laamp_recently_visited_kingdoms } NOT = { is_target_in_variable_list = { name = laamp_recently_visited_kingdoms target = scope:title_temp } } } } NOT = { has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } } # Put our performance-intensive checks riiiiight at the back, so we've ruled out as many places as possible by the time we get to these. ## First a bunch of mass county-counting, but we only care about this for players. root = { trigger_if = { limit = { is_ai = no } NOT = { culture = { any_culture_kingdom = { this = scope:title_temp } } } } } ## Then distance. capital_county.title_province = { "squared_distance(root.location)" >= squared_distance_massive } } } scripted_effect ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { # Make sure the contracts we're about to generate won't disappear. save_scope_value_as = { name = toggle_distance_ignore value = yes } # Now create our actual contracts. populate_location_with_special_contracts_effect = { AREA_CHAR = $KINGDOM$.holder AMOUNT = 5 } # Then, an easier-than-usual learning duel to try to pick up the language from afar. duel = { skill = learning value = very_high_skill_rating # Victory! 60 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 10 desc = ep3_laamp_flavour_ewan.3021.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3021.tt.success learn_language_of_culture = $KINGDOM$.title_capital_county.culture } } # Defeat. 40 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3021.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3021.tt.failure add_stress = medium_stress_gain } } } } # Explorer gets a passion for stories of a distant land, populating contracts there & learning the local language.number. ep3_laamp_flavour_ewan.3021 = { type = character_event title = ep3_laamp_flavour_ewan.3021.t desc = ep3_laamp_flavour_ewan.3021.desc theme = laamp left_portrait = { character = root animation = admiration } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3021 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_explorers any_kingdom = { count >= 3 ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = yes } } weight_multiplier = { # Weight this down for the AI, as we're doing a bunch of distance checks. modifier = { add = -0.9 is_ai = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3021 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3021 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Alright, let's pick some kingdoms. ## First, put all the valid ones in a list. every_kingdom = { limit = { ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = yes } add_to_list = potential_kingdoms_list } ordered_in_list = { list = potential_kingdoms_list order_by = { holder = { # Go by CGV level first. add = { value = court_grandeur_current_level multiply = 1000 } # Then prestige level. add = { value = prestige_level multiply = 100 } # Then add diplomacy as a tie-breaker. add = diplomacy } } max = 3 check_range_bounds = no if = { limit = { NOT = { exists = scope:kingdom_1 } } save_scope_as = kingdom_1 } else_if = { limit = { NOT = { this = scope:kingdom_1 exists = scope:kingdom_2 } } save_scope_as = kingdom_2 } else_if = { limit = { NOT = { this = scope:kingdom_1 this = scope:kingdom_2 exists = scope:kingdom_3 } } save_scope_as = kingdom_3 } } } # Scope:kingdom_1. option = { name = ep3_laamp_flavour_ewan.3021.a custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_1.contracts_appear ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_1 } # No stress here. ai_chance = { base = 1 modifier = { add = { value = "scope:kingdom_1.holder.capital_county.culture.cultural_acceptance(root.culture)" multiply = 2 } always = yes } } } # Scope:kingdom_2. option = { name = ep3_laamp_flavour_ewan.3021.b custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_2.contracts_appear ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_2 } # No stress here. ai_chance = { base = 1 modifier = { add = { value = "scope:kingdom_2.holder.capital_county.culture.cultural_acceptance(root.culture)" multiply = 2 } always = yes } } } # Scope:kingdom_3. option = { name = ep3_laamp_flavour_ewan.3021.c custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_3.contracts_appear ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_3 } # No stress here. ai_chance = { base = 1 modifier = { add = { value = "scope:kingdom_3.holder.capital_county.culture.cultural_acceptance(root.culture)" multiply = 2 } always = yes } } } # I have places to ponder yet... option = { name = ep3_laamp_flavour_ewan.3021.d # Consolation prestige. add_prestige = minor_prestige_gain # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = -3 } } } } ################################################## # Mine by Right # by Ewan Cowhig Croft # # 3031 - 3040 ################################################## scripted_trigger ep3_laamp_flavour_ewan_3031_family_title_trigger = { any_held_title = { title_tier >= kingdom save_temporary_scope_as = title_temp root = { NOT = { has_claim_on = scope:title_temp } } } } scripted_trigger ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = { holder ?= { any_held_title = { title_tier >= kingdom save_temporary_scope_as = title_temp2 root = { NOR = { scope:title_temp ?= scope:title_temp2 has_claim_on = scope:title_temp2 } } } } } scripted_trigger ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = { has_memory_type = became_landless_adventurer_memory var:old_primary_title ?= { tier >= tier_kingdom save_temporary_scope_as = title_temp3 root = { NOR = { scope:title_temp ?= this scope:title_temp2 ?= this has_claim_on = scope:title_temp3 } } } } # Legitimist broods & extends their claims. ep3_laamp_flavour_ewan.3031 = { type = character_event title = ep3_laamp_flavour_ewan.3031.t desc = { desc = ep3_laamp_flavour_ewan.3031.desc.intro triggered_desc = { trigger = { exists = scope:family_title } desc = ep3_laamp_flavour_ewan.3031.desc.family_title } triggered_desc = { trigger = { exists = scope:adjacent_title } desc = ep3_laamp_flavour_ewan.3031.desc.adjacent_title } triggered_desc = { trigger = { exists = scope:memory_title } desc = ep3_laamp_flavour_ewan.3031.desc.memory_title } desc = ep3_laamp_flavour_ewan.3031.desc.outro } theme = laamp left_portrait = { character = root animation = spymaster } lower_left_portrait = scope:portrait_3 lower_center_portrait = scope:portrait_2 lower_right_portrait = scope:portrait_1 trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3031 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_legitimists # Then make sure that we could populate at least one specific option. OR = { any_close_or_extended_family_member = { ep3_laamp_flavour_ewan_3031_family_title_trigger = yes } any_claim = { ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = yes } any_memory = { ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = yes } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3031 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3031 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Try to nab our titles. ordered_close_or_extended_family_member = { limit = { ep3_laamp_flavour_ewan_3031_family_title_trigger = yes } order_by = { # If we're a player, order it by their opinion of us. if = { limit = { is_ai = no } value = "reverse_opinion(root)" } # Otherwise, order by our opinion of them. else = { value = "opinion(root)" } } scope:title_temp = { save_scope_as = family_title } } ordered_claim = { limit = { ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = yes } order_by = { # If we're a player, order it by their opinion of us. if = { limit = { holder = { is_ai = no } } value = "holder.reverse_opinion(root)" } # Otherwise, order by our opinion of them. else = { value = "holder.opinion(root)" } } save_scope_as = adjacent_title } random_memory = { limit = { ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = yes } var:old_primary_title = { save_scope_as = memory_title } } # Sort our portrait scopes. scope:family_title ?= { holder = { save_scope_as = portrait_1 } } scope:adjacent_title ?= { if = { limit = { exists = scope:portrait_1 } holder = { save_scope_as = portrait_2 } } else = { holder = { save_scope_as = portrait_1 } } } scope:memory_title ?= { if = { limit = { exists = scope:portrait_2 } holder = { save_scope_as = portrait_3 } } else_if = { limit = { exists = scope:portrait_1 } holder = { save_scope_as = portrait_2 } } else = { holder = { save_scope_as = portrait_1 } } } # Account for some stress that'd apply in every option. stress_impact = { ambitious = medium_stress_impact_loss arrogant = medium_stress_impact_loss } } # Add the best extant title held by up to an extended family member. option = { name = ep3_laamp_flavour_ewan.3031.a trigger = { exists = scope:family_title } add_pressed_claim = scope:family_title reverse_add_opinion = { target = scope:family_title.holder modifier = audacity_opinion opinion = -30 } stress_impact = { arbitrary = medium_stress_impact_loss just = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } opinion_modifier = { opinion_target = scope:family_title.holder multiplier = -1 } } } # Add another same-tier-or-higher title held by someone who holds a kingdom+title you have a claim on. option = { name = ep3_laamp_flavour_ewan.3031.b trigger = { exists = scope:adjacent_title } add_pressed_claim = scope:adjacent_title reverse_add_opinion = { target = scope:adjacent_title.holder modifier = audacity_opinion opinion = -30 } stress_impact = { arbitrary = medium_stress_impact_loss just = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } opinion_modifier = { opinion_target = scope:adjacent_title.holder multiplier = -1 } } } # Regain claims to a title you have a memory of losing but don't have a claim on. option = { name = ep3_laamp_flavour_ewan.3031.c trigger = { exists = scope:memory_title } add_pressed_claim = scope:memory_title reverse_add_opinion = { target = scope:memory_title.holder modifier = audacity_opinion opinion = -30 } stress_impact = { arbitrary = medium_stress_impact_loss just = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } opinion_modifier = { opinion_target = scope:memory_title.holder multiplier = -1 } } } # Fixate on future gains. option = { name = ep3_laamp_flavour_ewan.3031.d add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3031_d_brooding_over_titles_modifier years = 10 } # No stress for opt out. ai_chance = { base = 1 ai_value_modifier = { ai_honor = 2 } } } } ################################################## # People from a Better Time # by Ewan Cowhig Croft # # 3041 - 3050 ################################################## scripted_trigger ep3_laamp_flavour_ewan_3041_valid_memory_trigger = { has_memory_type = became_landless_adventurer_memory memory_age_years >= 5 var:old_primary_title ?= { tier >= tier_kingdom } } scripted_effect ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = { random_de_jure_county = { limit = { holder = { any_liege_or_above = { this = scope:former_title.holder } } NOT = { is_in_list = partisan_titles_list } # Make sure players don't get caught in the crossfire. trigger_if = { limit = { holder = { is_ai = no } } holder = scope:former_title.holder } } weight = { # Weight up stuff directly held by the usurper. modifier = { add = 10000 holder = scope:former_title.holder } # And stuff adjacent to the capital, just to cluster the effects in large realms. modifier = { add = 100 kingdom.title_capital_county = scope:former_title.capital_county } } add_to_list = partisan_titles_list } } # Old loyalists join legitimist. ep3_laamp_flavour_ewan.3041 = { type = character_event title = ep3_laamp_flavour_ewan.3041.t desc = { desc = ep3_laamp_flavour_ewan.3041.desc.intro random_valid = { triggered_desc = { trigger = { has_trait = compassionate } desc = ep3_laamp_flavour_ewan.3041.desc.compassionate } triggered_desc = { trigger = { has_trait = sadistic } desc = ep3_laamp_flavour_ewan.3041.desc.sadistic } triggered_desc = { trigger = { has_trait = callous } desc = ep3_laamp_flavour_ewan.3041.desc.callous } triggered_desc = { trigger = { has_trait = wrathful } desc = ep3_laamp_flavour_ewan.3041.desc.wrathful } triggered_desc = { trigger = { has_trait = calm } desc = ep3_laamp_flavour_ewan.3041.desc.calm } triggered_desc = { trigger = { has_trait = arrogant } desc = ep3_laamp_flavour_ewan.3041.desc.arrogant } triggered_desc = { trigger = { has_trait = humble } desc = ep3_laamp_flavour_ewan.3041.desc.humble } triggered_desc = { trigger = { has_trait = ambitious } desc = ep3_laamp_flavour_ewan.3041.desc.ambitious } triggered_desc = { trigger = { has_trait = content } desc = ep3_laamp_flavour_ewan.3041.desc.content } triggered_desc = { trigger = { has_trait = arbitrary } desc = ep3_laamp_flavour_ewan.3041.desc.arbitrary } triggered_desc = { trigger = { has_trait = just } desc = ep3_laamp_flavour_ewan.3041.desc.just } triggered_desc = { trigger = { NOR = { has_trait = compassionate has_trait = sadistic has_trait = callous has_trait = wrathful has_trait = calm has_trait = arrogant has_trait = humble has_trait = ambitious has_trait = content has_trait = arbitrary has_trait = just } } desc = ep3_laamp_flavour_ewan.3041.desc.fallback } } first_valid = { triggered_desc = { trigger = { has_claim_on = scope:former_title } desc = ep3_laamp_flavour_ewan.3041.desc.title_claimed } desc = ep3_laamp_flavour_ewan.3041.desc.title_forsaken } } theme = laamp left_portrait = { character = root animation = personality_bold } right_portrait = { character = scope:commander animation = marshal } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3041 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_legitimists # And we have to be doing something with our lives. prestige_level >= 2 # Must have held a title some years ago. any_memory = { ep3_laamp_flavour_ewan_3041_valid_memory_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3041 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3041 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Nab our title. random_memory = { limit = { ep3_laamp_flavour_ewan_3041_valid_memory_trigger = yes } var:old_primary_title = { save_scope_as = former_title } } ## Plus pick titles to be affected by our partisans. scope:former_title = { ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes } # Create a commander for the troops. create_character = { template = new_commander_character culture = scope:former_title.capital_county.culture faith = scope:former_title.capital_county.faith location = root.location gender_female_chance = root_soldier_female_chance dynasty = none save_scope_as = commander after_creation = { add_opinion = { target = root modifier = loyalty_opinion opinion = 300 } } } ## Give 'em a nickname. hidden_effect = { scope:commander = { assign_random_nickname_effect = yes } } } # More troops for the royal army-in-exile! option = { name = { text = { first_valid = { triggered_desc = { trigger = { any_claim = { tier >= tier_empire } } desc = ep3_laamp_flavour_ewan.3041.a.imperial } desc = ep3_laamp_flavour_ewan.3041.a.royal } } } add_courtier = scope:commander add_hook = { type = loyalty_hook target = scope:commander } spawn_army = { name = legitimist_loyalists levies = { value = 200 # Increase this by a step for every prestige level we have beyond the minimum. add = { value = prestige_level add = -1 } } men_at_arms = { type = armored_footmen men = { value = 200 # Increase this by a step for every prestige level we have beyond the minimum. add = { value = prestige_level add = -1 } } } location = root.location origin = scope:former_title.capital_county.title_province } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Your loyalty is noted, but best used to subvert scope:usurper's rule [go reinforce peasant faction]. option = { name = ep3_laamp_flavour_ewan.3041.b trigger = { NOT = { has_trait = deceitful } # Can't be used against players unless it's _both_ players. OR = { scope:former_title.holder = { is_ai = yes } AND = { is_ai = no scope:former_title.holder = { is_ai = no } } } } every_in_list = { list = partisan_titles_list custom = ep3_laamp_flavour_ewan.3041.tt.up_to_ten_usurper_held_counties change_county_control = -30 } stress_impact = { deceitful = miniscule_stress_impact_loss honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # Deceitful: as above, but better. option = { name = ep3_laamp_flavour_ewan.3041.c trigger = { has_trait = deceitful # Can't be used against players unless it's _both_ players. OR = { scope:former_title.holder = { is_ai = yes } AND = { is_ai = no scope:former_title.holder = { is_ai = no } } } } trait = deceitful every_in_list = { list = partisan_titles_list custom = ep3_laamp_flavour_ewan.3041.tt.up_to_ten_usurper_held_counties change_county_control = -50 } stress_impact = { deceitful = miniscule_stress_impact_loss honest = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # I thank you, but I do not _need_ you. option = { name = ep3_laamp_flavour_ewan.3041.d add_prestige = medium_prestige_gain stress_impact = { arrogant = miniscule_stress_impact_loss humble = minor_stress_impact_gain } ai_chance = { # The AI should virtually never turn down free troops. base = 1 } } after = { # Clean up our captain if we're not a player. if = { limit = { is_ai = yes this != scope:captain.liege } scope:captain = { death = { death_reason = death_vanished } } } } } ################################################## # Map Painting # by Ewan Cowhig Croft # # 3051 - 3060 ################################################## scripted_effect ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { duel = { skill = diplomacy value = $DUEL_DIFF$ # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3051.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3051.tt.success create_artifact = { name = handcrafted_map description = { random_valid = { desc = handcrafted_map_desc.mythic_beasts desc = handcrafted_map_desc.geography desc = handcrafted_map_desc.settlements desc = handcrafted_map_desc.people.urban desc = handcrafted_map_desc.fauna desc = handcrafted_map_desc.flora desc = handcrafted_map_desc.government desc = handcrafted_map_desc.tourism_sites desc = handcrafted_map_desc.routes desc = handcrafted_map_desc.people.rural } } modifier = artifact_learning_$TIER$_modifier modifier = artifact_diplomacy_$TIER$_modifier type = miscellaneous rarity = $RARITY$ visuals = pocket_map max_durability = 100 save_scope_as = newly_created_map } scope:newly_created_map = { set_variable = { name = map_subject_title value = root.location.empire } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3051.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3051.tt.failure add_stress = medium_stress_gain } } } } # Explorer writes/draws map of local area. ep3_laamp_flavour_ewan.3051 = { type = character_event title = ep3_laamp_flavour_ewan.3051.t desc = ep3_laamp_flavour_ewan.3051.desc theme = laamp left_portrait = { character = root animation = writing } artifact = { target = scope:newly_created_map position = lower_center_portrait trigger = { exists = scope:newly_created_map } } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3051 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_explorers # For tonal reasons, you can't be blind. NOT = { has_trait = blind } # Can't already have a map of this empire. NOT = { any_artifact = { artifact_type = miscellaneous # Deliberately not using ?= in case the NOT makes it go wonky. has_variable = map_subject_title var:map_subject_title = root.location.empire } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3051 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3051 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Nab our location for loc. location.kingdom = { save_scope_as = kingdom } } # Go for an illustrious artefact. option = { name = ep3_laamp_flavour_ewan.3051.a ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { DUEL_DIFF = extremely_high_skill_rating RARITY = illustrious TIER = 3 } stress_impact = { diligent = medium_stress_impact_loss lazy = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 3 } } } # Go for a famed artefact. option = { name = ep3_laamp_flavour_ewan.3051.b ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { DUEL_DIFF = very_high_skill_rating RARITY = famed TIER = 2 } stress_impact = { diligent = minor_stress_impact_loss lazy = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 2 } } } # Go for a masterwork artefact. option = { name = ep3_laamp_flavour_ewan.3051.c ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { DUEL_DIFF = high_skill_rating RARITY = masterwork TIER = 1 } stress_impact = { diligent = miniscule_stress_impact_loss lazy = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Simply have fun with it. option = { name = ep3_laamp_flavour_ewan.3051.d # Consolation prestige. add_prestige = medium_prestige_gain # Plus some solid stress loss. add_stress = medium_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } } ################################################## # A Guide to ... # by Ewan Cowhig Croft # # 3061 - 3070 ################################################## # Scholar writes book on local subject. ep3_laamp_flavour_ewan.3061 = { type = character_event title = ep3_laamp_flavour_ewan.3061.t desc = ep3_laamp_flavour_ewan.3061.desc theme = laamp left_portrait = { character = root animation = writing } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3061 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_scholars # For tonal reasons, you can't be blind. NOT = { has_trait = blind } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3061 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3061 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown } } # Save our county for loc. location.county = { save_scope_as = current_county } } # Write on peoples & places. option = { name = ep3_laamp_flavour_ewan.3061.a add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3061_peoples_and_places_modifier years = 10 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Write on prose & poetry. option = { name = ep3_laamp_flavour_ewan.3061.b add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3061_prose_and_poetry_modifier years = 10 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Write on plants & animals. option = { name = ep3_laamp_flavour_ewan.3061.c add_character_modifier = { modifier = ep3_laamp_flavour_ewan_3061_plants_and_animals_modifier years = 10 } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 } } } # Simply doodle some thoughts. option = { name = ep3_laamp_flavour_ewan.3061.d # Mostly just stress relief. add_stress = major_stress_loss ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } } ################################################## # The Law in Scope:location # by Ewan Cowhig Croft # # 3071 - 3080 ################################################## # Law attacks criminal gang. ep3_laamp_flavour_ewan.3071 = { type = character_event title = ep3_laamp_flavour_ewan.3071.t desc = ep3_laamp_flavour_ewan.3071.desc theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:local_soldier animation = random_weapon_aggressive } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3071 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_brigands # Sheriffs'll still try even against an army, just picking their moment, but even they have their limits. current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_very_significant_armed_force # Plus make sure that we're kind of a dick. calc_true_if = { amount >= 2 # We'll either take moderate progress in at least two tracks... has_trait_xp = { trait = gallowsbait track = bandit value >= 30 } has_trait_xp = { trait = gallowsbait track = trickster value >= 30 } has_trait_xp = { trait = gallowsbait track = thief value >= 30 } has_trait_xp = { trait = gallowsbait track = poacher value >= 30 } has_trait_xp = { trait = gallowsbait track = marauder value >= 30 } ## Or getting significant progress in any one track (since this'll count the prior increment as a separate validated trigger). has_trait_xp = { trait = gallowsbait track = bandit value >= 60 } has_trait_xp = { trait = gallowsbait track = trickster value >= 60 } has_trait_xp = { trait = gallowsbait track = thief value >= 60 } has_trait_xp = { trait = gallowsbait track = poacher value >= 60 } has_trait_xp = { trait = gallowsbait track = marauder value >= 60 } } # County checks. location.county = { # Must be in both a high-security area. county_control >= 100 # And not currently doing a job for the land's ruler. holder = { save_temporary_scope_as = holder_temp } NOT = { root = { any_character_active_contract = { task_contract_employer ?= { save_temporary_scope_as = employer_temp OR = { this = scope:holder_temp scope:holder_temp = { any_liege_or_above = { this = scope:employer_temp } } } } } } } # Plus make sure that the holder doesn't actually think we're pretty chill. holder = { opinion = { target = root value <= 35 } NOT = { has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } } } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3071 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3071 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Create a local soldier. hidden_effect_new_object = { create_character = { template = new_warrior_character location = root.location culture = root.location.culture faith = root.location.faith gender_female_chance = root_soldier_female_chance save_scope_as = local_soldier } location.county.holder = { add_courtier = scope:local_soldier } } # Save our county for loc. location.county = { save_scope_as = current_county } } # SCE: duel the lead attacker. option = { name = ep3_laamp_flavour_ewan.3071.a trigger = { can_start_single_combat_trigger = yes } custom_tooltip = { text = duel_to_the_death.tt configure_start_single_combat_effect = { SC_INITIATOR = scope:local_soldier SC_ATTACKER = scope:local_soldier SC_DEFENDER = root FATALITY = always FIXED = no LOCALE = terrain_scope INVALIDATION_EVENT = single_combat.1006 OUTPUT_EVENT = ep3_laamp_flavour_ewan.3072 } } stress_impact = { brave = medium_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Intrigue insta-win: bring in your ambush immediately. option = { name = ep3_laamp_flavour_ewan.3071.b trigger = { intrigue >= extremely_high_skill_rating } skill = intrigue scope:local_soldier = { death = { death_reason = death_battle } } add_prestige = medium_prestige_gain stress_impact = { deceitful = minor_stress_impact_loss } ai_chance = { # Honour or no, if you can insta-win, do it. base = 1000 } } # Intrigue duel: you've got men nearby who can help. option = { name = ep3_laamp_flavour_ewan.3071.c trigger = { intrigue < extremely_high_skill_rating } duel = { skill = intrigue value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3071.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3071.c.tt.success left_icon = scope:local_soldier scope:local_soldier = { death = { death_reason = death_battle } } add_prestige = medium_prestige_gain } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3071.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3071.c.tt.failure left_icon = scope:local_soldier increase_wounds_effect = { REASON = battle } add_prestige = medium_prestige_loss } } } stress_impact = { deceitful = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # Martial insta-win: your party easily counter-attacks. option = { name = ep3_laamp_flavour_ewan.3071.d trigger = { martial >= extremely_high_skill_rating } skill = martial scope:local_soldier = { death = { death_reason = death_battle } } add_prestige = medium_prestige_gain # No stress here. ai_chance = { # Honour or no, if you can insta-win, do it. base = 1000 } } # Martial duel: rally your small party against them. option = { name = ep3_laamp_flavour_ewan.3071.e trigger = { martial < extremely_high_skill_rating } duel = { skill = martial value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3071.e.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3071.e.tt.success left_icon = scope:local_soldier scope:local_soldier = { death = { death_reason = death_battle } } add_prestige = medium_prestige_gain } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3071.e.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3071.e.tt.failure left_icon = scope:local_soldier increase_wounds_effect = { REASON = battle } add_prestige = medium_prestige_loss } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 ai_rationality = 1 } } } # Flee. option = { name = ep3_laamp_flavour_ewan.3071.f random_list = { 100 = { desc = ep3_laamp_flavour_ewan.3071.f.success add_prestige = minor_prestige_loss } 100 = { desc = ep3_laamp_flavour_ewan.3071.f.failure increase_wounds_effect = { REASON = battle } add_prestige = medium_prestige_loss } } stress_impact = { craven = medium_stress_impact_loss brave = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = -2 } } } } ep3_laamp_flavour_ewan.3072 = { hidden = yes immediate = { if = { limit = { scope:sc_victor = root } root = { trigger_event = { id = ep3_laamp_flavour_ewan.3073 days = 1 } } } # No else: doesn't really matter if root is dead now, does it? } } # You won the single combat! ep3_laamp_flavour_ewan.3073 = { type = character_event title = ep3_laamp_flavour_ewan.3073.t desc = ep3_laamp_flavour_ewan.3073.desc theme = laamp left_portrait = { character = root animation = random_weapon_celebrate } override_background = { reference = battlefield } # Victory! option = { name = ep3_laamp_flavour_ewan.3073.a # We give you a bit more than the usual amount, since you risked your life overtly. add_prestige = 250 # No stress here. ai_chance = { # No logic needed for notification event. base = 1 } } } ################################################## # Wrestle for It # by Ewan Cowhig Croft # # 3081 - 3090 ################################################## scripted_trigger ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = { can_start_single_combat_trigger = yes ep3_laamp_flavour_ewan_available_courtier_trigger = yes prowess >= medium_skill_rating is_knight = yes NOR = { has_trait = shy has_trait = humble has_trait = lazy } # This is a friendly challenge, so make sure we're not getting an utter bastard to do it. opinion = { target = root value >= 1 } } # Merc challenged to a wrastlin'. ep3_laamp_flavour_ewan.3081 = { type = character_event title = ep3_laamp_flavour_ewan.3081.t desc = ep3_laamp_flavour_ewan.3081.desc theme = laamp left_portrait = { character = root animation = stayback } right_portrait = { character = scope:challenger animation = wrestling_victory } override_background = { reference = army_camp } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_3081 } } # Must have the correct camp purpose. has_realm_law = camp_purpose_mercenaries # We're not _actually_ going to use the SCE, but it's a good benchmark for whether wrestling would even make sense. can_start_single_combat_trigger = yes # And we should have at least one courtier who'd be game to try. any_courtier = { ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_3081 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_3081 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_long } } # Grab a suitable courtier. ordered_courtier = { limit = { ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = yes } order_by = { value = prowess # A few traits let you skip the queue (partially). if = { limit = { has_trait = wrathful } add = 5 } if = { limit = { has_trait = arrogant } add = 5 } if = { limit = { has_trait = athletic } add = 5 } } save_scope_as = challenger } } # Sure. option = { name = ep3_laamp_flavour_ewan.3081.a duel = { skill = prowess target = scope:challenger # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3081.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.3081.a.tt.success left_icon = scope:challenger add_prestige = medium_prestige_gain reverse_add_opinion = { target = scope:challenger modifier = respect_opinion opinion = 40 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.3081.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.3081.a.tt.failure left_icon = scope:challenger add_prestige = miniscule_prestige_gain reverse_add_opinion = { target = scope:challenger modifier = respect_opinion opinion = 20 } } } } stress_impact = { humble = minor_stress_impact_loss gregarious = miniscule_stress_impact_loss shy = minor_stress_impact_gain arrogant = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } opinion_modifier = { opinion_target = scope:challenger } } } # Have HerHim beaten for even asking. option = { name = ep3_laamp_flavour_ewan.3081.b add_dread = 30 reverse_add_opinion = { target = scope:challenger modifier = overreaction_opinion opinion = -50 } scope:challenger = { increase_wounds_effect = { REASON = beaten } } stress_impact = { sadistic = medium_stress_impact_loss arrogant = minor_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = minor_stress_impact_gain humble = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_vengefulness = 2 } opinion_modifier = { opinion_target = scope:challenger multiplier = -1 } } } # Hah, no. option = { name = ep3_laamp_flavour_ewan.3081.c add_prestige = minor_prestige_gain reverse_add_opinion = { target = scope:challenger modifier = haughty_opinion opinion = -20 } stress_impact = { arrogant = minor_stress_impact_loss humble = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 2 } } } } ################################################## # TRAVEL DANGER / SUPPLIES ################################################## # Bandits! # by Ewan Cowhig Croft # 4001 - 4010 ################################################## scripted_effect ep3_laamp_flavour_ewan_4001_duel_victory_effect = { add_prestige = { value = medium_prestige_gain if = { limit = { scope:sc_victor ?= root } # If you win the duel, we give you a bit more than the usual amount, since you risked your life overtly. add = 100 } } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = respect_opinion opinion = 20 } } } scripted_effect ep3_laamp_flavour_ewan_4001_duel_defeat_effect = { add_prestige = medium_prestige_loss increase_wounds_effect = { REASON = bandit_attack } domicile = { change_provisions = { value = scope:provisions_loss multiply = -1 } } } # Bandit raid whilst moving. ep3_laamp_flavour_ewan.4001 = { type = character_event title = ep3_laamp_flavour_ewan.4001.t desc = ep3_laamp_flavour_ewan.4001.desc theme = widgetless_travel_danger left_portrait = { character = root animation = shock } right_portrait = { character = scope:bandit_leader animation = threatening } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4001 } } # Must have the correct travel danger type. location = { travel_danger_type = { travel_plan = root.current_travel_plan type = county_control } } # Bandits won't attack forces over a certain size, even assuming you're spread out in a long line. current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4001 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4001 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } # Nab this as a scope, as we may need it if the duel finishes up. save_scope_as = laamp_title } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Create a hostile bandit. create_character = { template = bandit_character location = root.location culture = root.location.culture faith = root.location.faith martial = { min_template_decent_skill max_template_high_skill } prowess = { min_template_decent_skill max_template_high_skill } save_scope_as = bandit_leader } # How many provisions do we need to surrender? save_scope_value_as = { name = provisions_loss value = { add = domicile.provisions multiply = 0.33 floor = yes min = @ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking } } } # Martial duel to repel them. option = { name = ep3_laamp_flavour_ewan.4001.a duel = { skill = martial target = scope:bandit_leader # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4001.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4001.a.tt.success left_icon = scope:bandit_leader ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes scope:bandit_leader = { death = { death_reason = death_attacking_laamp_train } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4001.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4001.a.tt.failure left_icon = scope:bandit_leader ep3_laamp_flavour_ewan_4001_duel_defeat_effect = yes } } } stress_impact = { brave = miniscule_stress_impact_loss craven = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 ai_rationality = 1 } } } # SCE: tackle the bandit leader head-on. option = { name = ep3_laamp_flavour_ewan.4001.b trigger = { can_start_single_combat_trigger = yes } custom_tooltip = { text = duel_to_the_death.tt configure_start_single_combat_effect = { SC_INITIATOR = root SC_ATTACKER = root SC_DEFENDER = scope:bandit_leader FATALITY = always FIXED = no LOCALE = terrain_scope INVALIDATION_EVENT = single_combat.1006 OUTPUT_EVENT = ep3_laamp_flavour_ewan.4002 } } stress_impact = { brave = medium_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # Brigands: back off, little fish. option = { name = ep3_laamp_flavour_ewan.4001.c trigger = { has_realm_law = camp_purpose_brigands } reason = purpose_brigands duel = { skill = intrigue target = scope:bandit_leader # Victory! 60 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4001.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4001.c.tt.success left_icon = scope:bandit_leader ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes } } # Defeat. 40 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4001.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4001.c.tt.failure left_icon = scope:bandit_leader ep3_laamp_flavour_ewan_4001_duel_defeat_effect = yes } } } stress_impact = { arrogant = miniscule_stress_impact_loss humble = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -2 } } } # Surrender an amount of provisions to them. option = { name = ep3_laamp_flavour_ewan.4001.d trigger = { domicile.provisions >= scope:provisions_loss } show_as_unavailable = { always = yes } add_prestige = miniscule_prestige_loss domicile = { change_provisions = { value = scope:provisions_loss multiply = -1 } } stress_impact = { craven = major_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = -2 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ep3_laamp_flavour_ewan.4002 = { hidden = yes immediate = { if = { limit = { scope:sc_victor = root } root = { trigger_event = { id = ep3_laamp_flavour_ewan.4003 days = 1 } } } else = { # Otherwise, remember to have the bandits loot. scope:laamp_title.holder.domicile = { change_provisions = { value = scope:provisions_loss multiply = -1 } } } } } # You won the single combat! ep3_laamp_flavour_ewan.4003 = { type = character_event title = ep3_laamp_flavour_ewan.4003.t desc = ep3_laamp_flavour_ewan.4003.desc theme = laamp left_portrait = { character = root animation = random_weapon_celebrate } override_background = { reference = battlefield } # Victory! option = { name = ep3_laamp_flavour_ewan.4003.a ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes # No stress here. ai_chance = { # No logic needed for notification event. base = 1 } } } ################################################## # A Land of Milk & Honey # by Ewan Cowhig Croft # 4011 - 4020 ################################################## # Bountiful hunting/foraging. ep3_laamp_flavour_ewan.4011 = { type = character_event title = ep3_laamp_flavour_ewan.4011.t desc = ep3_laamp_flavour_ewan.4011.desc theme = widgetless_travel left_portrait = { character = root animation = happiness } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4011 } } # Must be in a nice, safe area with plentiful food. current_travel_plan.current_danger_value <= 0 location = { county.county_control >= 100 OR = { terrain = farmlands AND = { terrain = floodplains county.development_level >= 25 } } } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4011 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4011 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Everyone loses stress. stress_impact = { base = medium_stress_loss lazy = minor_stress_impact_loss gluttonous = minor_stress_impact_loss } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower # No complex impact because it'll make the tooltips wonky. add_stress = medium_stress_loss } # How many provisions do we take on? random_list = { 100 = { save_scope_value_as = { name = provisions_gain value = medium_provisions_gain } } 100 = { save_scope_value_as = { name = provisions_gain value = major_provisions_gain } } 100 = { save_scope_value_as = { name = provisions_gain value = massive_provisions_gain } } } # Save our county for loc. location.county = { save_scope_as = current_county } } # Enjoy the fruits. option = { name = ep3_laamp_flavour_ewan.4011.a domicile = { change_provisions = scope:provisions_gain } # Stress handled in the immediate. ai_chance = { # Only one option, so no logic needed. base = 1 } } } ################################################## # Parched # by Ewan Cowhig Croft # 4021 - 4030 ################################################## scripted_effect ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = { add_prestige = minor_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = saviour_opinion opinion = 20 } } } scripted_effect ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = { if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier } custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.dehydration_already_at_worst } else_if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier } hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier years = 10 } } else_if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier } hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier years = 10 } } else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier years = 10 } } } scripted_effect ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = { if = { limit = { health <= good_health } ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = yes } every_courtier = { limit = { location = root.location health <= good_health } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.dehydration_increments hidden_effect = { ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = yes } } } scripted_effect ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.officer_aptitude random_list = { 0 = { desc = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.success left_icon = $OFFICER$ ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = yes } modifier = { add = { value = $APTITUDE$ multiply = 20 min = 5 max = 95 } always = yes } } 0 = { desc = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.failure left_icon = $OFFICER$ ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes } modifier = { add = { value = 100 add = { add = $APTITUDE$ multiply = -20 } min = 5 max = 95 } always = yes } } } } # Difficulty finding water. ep3_laamp_flavour_ewan.4021 = { type = character_event title = ep3_laamp_flavour_ewan.4021.t desc = ep3_laamp_flavour_ewan.4021.desc theme = widgetless_travel_danger left_portrait = { character = root animation = stress } lower_left_portrait = scope:portrait_1 override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4021 } } # If we've already got the parched modifier, don't stack it past the max. NOT = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier } # Make sure we're not somewhere where we could credibly source water. location = { any_neighboring_province = { is_river_province = no } # You can't drink coastal ocean water except for some inland freshwater seas, but they will tend to have tributaries flowing into them so we allow it. is_coastal = no } # And make sure we're not absolutely swimming in supplies. domicile ?= { provisions <= sixty_percent_provisions_value } # Must have the correct travel danger type. location = { OR = { travel_danger_type = { travel_plan = root.current_travel_plan terrain = desert } travel_danger_type = { travel_plan = root.current_travel_plan terrain = desert_mountains } # Some terrains depend on season. AND = { is_nice_season_to_be_outside_trigger = { LOCATION = root.location } travel_danger_type = { travel_plan = root.current_travel_plan terrain = steppe } } AND = { is_nice_season_to_be_outside_trigger = { LOCATION = root.location } travel_danger_type = { travel_plan = root.current_travel_plan terrain = drylands } } } } } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4021 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4021 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # If we have a forager or a huntsman, grab whichever is better at their job. court_position:chief_forager_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } save_scope_as = forager # We'll want their aptitude later. save_scope_value_as = { name = forager_apt value = "aptitude(chief_forager_camp_officer)" } # Plus, register who we're showing a portrait of. save_scope_as = portrait_1 } } court_position:huntperson_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } save_scope_as = hunter # We'll want their aptitude later. save_scope_value_as = { name = hunter_apt value = "aptitude(huntperson_camp_officer)" } # Plus, register who we're showing a portrait of. save_scope_as = portrait_1 } } # Sort whose event option will be displayed. ## If we have both, pick whichever is better (preferring the forager). if = { limit = { exists = scope:forager exists = scope:hunter } if = { limit = { scope:forager_apt >= scope:hunter_apt } save_scope_value_as = { name = preferred_officer value = flag:forager } } else = { save_scope_value_as = { name = preferred_officer value = flag:hunter } } } else_if = { limit = { exists = scope:forager } save_scope_value_as = { name = preferred_officer value = flag:forager } } else_if = { limit = { exists = scope:hunter } save_scope_value_as = { name = preferred_officer value = flag:hunter } } # Sort our duel diff according to what terrain we're in. save_scope_value_as = { name = duel_diff value = { if = { limit = { location = { terrain = desert } } add = very_high_skill_rating } if = { limit = { location = { terrain = desert_mountains } } add = extremely_high_skill_rating } if = { limit = { location = { terrain = steppe } } add = high_skill_rating } if = { limit = { location = { terrain = drylands } } add = decent_skill_rating } } } } weight_multiplier = { modifier = { add = 1 ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } } # Learning duel: there must be _something_ around here... option = { name = ep3_laamp_flavour_ewan.4021.a duel = { skill = intrigue value = scope:duel_diff # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4021.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.a.tt.success left_icon = scope:CHANGE_ME ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = yes } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4021.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.a.tt.failure left_icon = scope:CHANGE_ME ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Chief forager: send them out searching. option = { name = ep3_laamp_flavour_ewan.4021.b trigger = { scope:preferred_officer ?= flag:forager } reason = have_chief_forager ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { OFFICER = scope:forager APTITUDE = scope:forager_apt } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Huntsman: send them out searching. option = { name = ep3_laamp_flavour_ewan.4021.c trigger = { scope:preferred_officer ?= flag:hunter } reason = have_huntperson ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { OFFICER = scope:hunter APTITUDE = scope:hunter_apt } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Reserve water: ration your way through this. option = { name = ep3_laamp_flavour_ewan.4021.d trigger = { domicile = { has_domicile_building = supply_tent_reserve_water } } reason = has_building_supply_tent_reserve_water add_prestige = minor_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = respect_opinion opinion = 10 } } # No stress here. ai_chance = { # If you have the good option, take the good option. base = 1000 } } # Let's hope we're out of this hell soon. option = { name = ep3_laamp_flavour_ewan.4021.e random_list = { 30 = { desc = ep3_laamp_flavour_ewan.4021.e.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.e.tt.success # Consolation prestige, since you took the "I'm inept and I did no planning" option. add_prestige = minor_prestige_gain } modifier = { add = -20 location = { terrain = desert_mountains } } modifier = { add = 25 location = { terrain = drylands } } } 70 = { desc = ep3_laamp_flavour_ewan.4021.e.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4021.e.tt.failure ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes } modifier = { add = 20 location = { terrain = desert_mountains } } modifier = { add = -25 location = { terrain = drylands } } } } stress_impact = { zealous = miniscule_stress_impact_loss cynical = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ################################################## # Sickness in the Herd # by Ewan Cowhig Croft # 4031 - 4040 ################################################## scripted_effect ep3_laamp_flavour_ewan_4031_animals_treated_effect = { add_prestige = minor_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = respect_opinion opinion = 10 } } } scripted_effect ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = { add_prestige = minor_prestige_loss add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier years = 10 } } scripted_effect ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = { every_courtier = { limit = { location = root.location has_trait = callous } custom = custom.every_callous_follower add_opinion = { target = root modifier = practical_opinion opinion = 40 } } every_courtier = { limit = { location = root.location has_trait = compassionate } custom = custom.every_compassionate_follower add_opinion = { target = root modifier = callous_opinion opinion = -40 } } } # Pack animals are sick or wounded. ep3_laamp_flavour_ewan.4031 = { type = character_event title = ep3_laamp_flavour_ewan.4031.t desc = ep3_laamp_flavour_ewan.4031.desc theme = widgetless_travel_danger left_portrait = { character = root animation = stress } lower_left_portrait = scope:groom override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4031 } } # Make sure we're not already suffering from the previous effects of sickness amongst the animals. NOR = { has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_affects_some_of_herd_modifier has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_wildly_through_herd_modifier has_character_modifier = ep3_laamp_flavour_ewan_4031_callous_culled_herd_modifier has_character_modifier = ep3_laamp_flavour_ewan_4031_plentiful_steeds_culled_herd_modifier has_character_modifier = ep3_laamp_flavour_ewan_4031_callous_and_plentiful_steeds_culled_herd_modifier } } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4031 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4031 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # If we have a groom, nab 'em. court_position:head_groom_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } save_scope_as = groom # We'll want their aptitude later. save_scope_value_as = { name = groom_apt value = "aptitude(head_groom_camp_officer)" } } } } # Learning duel to treat them. option = { name = ep3_laamp_flavour_ewan.4031.a duel = { skill = learning value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4031.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.a.tt.success ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4031.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.a.tt.failure ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes } } } stress_impact = { compassionate = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } modifier = { add = 50 highest_skill = learning } } } # Martial duel to treat them. option = { name = ep3_laamp_flavour_ewan.4031.b duel = { skill = martial value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4031.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.b.tt.success ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4031.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.b.tt.failure ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } modifier = { add = 50 highest_skill = martial } } } # Head groom: up & at 'em m'droog. option = { name = ep3_laamp_flavour_ewan.4031.c trigger = { exists = scope:groom } random_list = { 0 = { desc = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.success left_icon = scope:groom ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes } modifier = { add = { value = scope:groom_apt multiply = 20 min = 5 max = 95 } always = yes } } 0 = { desc = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.failure left_icon = scope:groom ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes } modifier = { add = { value = 100 add = { add = scope:groom_apt multiply = -20 } min = 5 max = 95 } always = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Callous: slaughter and toss the sick ones, save the rest. option = { name = ep3_laamp_flavour_ewan.4031.d trigger = { has_trait = callous NOT = { domicile = { has_domicile_building = baggage_train_ample_steeds } } } trait = callous add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_callous_culled_herd_modifier years = 10 } ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes stress_impact = { callous = medium_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } } } # Plentiful Steeds: slaughter and toss the sick ones, save the rest. option = { name = ep3_laamp_flavour_ewan.4031.e trigger = { NOT = { has_trait = callous } domicile = { has_domicile_building = baggage_train_ample_steeds } } reason = has_building_baggage_train_ample_steeds add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_plentiful_steeds_culled_herd_modifier years = 10 } ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes stress_impact = { callous = minor_stress_impact_loss compassionate = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } } } # Callous & Plentiful Steeds: slaughter and toss the sick ones, save the rest. option = { name = ep3_laamp_flavour_ewan.4031.f trigger = { has_trait = callous domicile = { has_domicile_building = baggage_train_ample_steeds } } reason = is_callous_has_building_baggage_train_ample_steeds add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_callous_and_plentiful_steeds_culled_herd_modifier years = 10 } ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes stress_impact = { callous = major_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = -2 } } } # Carry on & pray to HealthGodName for mercy. option = { name = ep3_laamp_flavour_ewan.4031.g random_list = { 10 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_fades custom_tooltip = ep3_laamp_flavour_ewan.4031.g.tt.some_of_herd.tt } } 30 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_contained add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_sickness_affects_some_of_herd_modifier years = 10 } } } 40 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_spreads add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier years = 10 } } } 20 = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_spreads_wildly add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_wildly_through_herd_modifier years = 10 } } } } stress_impact = { zealous = miniscule_stress_impact_loss cynical = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_zeal = 1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ################################################## # Fortuna's Tithe # by Ewan Cowhig Croft # 4041 - 4050 ################################################## scripted_trigger ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = { location = root.location health <= good_health } scripted_trigger ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = { maa_current_troops_count >= 2 root = { OR = { is_at_war = no AND = { is_at_war = yes prev = { is_raised = no } } } } } scripted_trigger ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = { OR = { scope:weather_type = flag:storm_snow scope:weather_type = flag:frozen_water } } scripted_effect ep3_laamp_flavour_ewan_4041_train_rallies_effect = { add_prestige = medium_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = saviour_opinion opinion = $OPINION$ } } } scripted_effect ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = { if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t3_modifier } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_already_at_worst } else_if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier } hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t3_modifier years = 8 } } else_if = { limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier } hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier years = 8 } } else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier years = 8 } } } scripted_effect ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = { switch = { trigger = scope:weather_type flag:storm_thunder = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 40 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } if = { limit = { NOR = { exists = scope:lightning_strike_happened root.primary_title = { has_variable = had_ep3_laamp_flavour_ewan_4041_lightning_strike } } } random = { chance = 1 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning hidden_effect = { random_list = { 60 = { increase_wounds_effect = { REASON = struck_by_lightning } increase_wounds_effect = { REASON = struck_by_lightning } increase_wounds_effect = { REASON = struck_by_lightning } } 40 = { death = { death_reason = death_struck_by_lightning } } } save_scope_as = lightning_strike_happened root = { primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4041_lightning_strike value = scope:lightning_strike_happened years = 50 } } send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning if = { limit = { scope:lightning_strike_happened = { is_alive = no } } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning.dead } else = { custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning.alive } } } } } } } } flag:storm_wind = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 25 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } } } flag:storm_snow = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 60 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } } } flag:storm_sand = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 50 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.modifier_worse_for_vulnerable_characters hidden_effect = { if = { limit = { OR = { is_adult = no AND = { is_female = yes age >= Define:NCharacter|FEMALE_ELDERLY_AGE } AND = { is_male = yes age >= Define:NCharacter|MALE_ELDERLY_AGE } } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_sandstorm_lungs_vulnerable_modifier years = 10 } } else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_sandstorm_lungs_adult_modifier years = 5 } } } } } } flag:wild_fires = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 30 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.modifier_worse_for_vulnerable_characters hidden_effect = { if = { limit = { OR = { is_adult = no AND = { is_female = yes age >= Define:NCharacter|FEMALE_ELDERLY_AGE } AND = { is_male = yes age >= Define:NCharacter|MALE_ELDERLY_AGE } } } add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_wildfire_lungs_vulnerable_modifier years = 10 } } else = { add_character_modifier = { modifier = ep3_laamp_flavour_ewan_4041_wildfire_lungs_adult_modifier years = 5 } } } } if = { limit = { # Some people can always outrun the flames... trigger_if = { limit = { # ... unless fate has been especially cruel. NOT = { has_trait = one_legged } } NOR = { has_trait = athletic has_trait = strong has_trait = physique_good } } } random = { chance = 5 death = { death_reason = death_burnt_in_wild_fire } } } } every_maa_regiment = { limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment random = { chance = 40 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.wildfire hidden_effect = { change_maa_troops_count = { value = maa_current_troops_count multiply = { integer_range = { min = ep3_laamp_flavour_ewan_4041_regiment_damage_wildfires_min max = ep3_laamp_flavour_ewan_4041_regiment_damage_wildfires_max } } multiply = -1 } } } } } flag:avalanches = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 60 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } if = { limit = { NOR = { has_trait = winter_soldier has_trait = rough_terrain_expert } } random = { chance = 5 death = { death_reason = death_swept_away_by_avalanche } } } } every_maa_regiment = { limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment random = { chance = { value = 40 # Big ups to the Barcas. if = { limit = { is_unit_type = elephant_cavalry } add = 40 } } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.avalanche hidden_effect = { change_maa_troops_count = { value = maa_current_troops_count multiply = { integer_range = { min = ep3_laamp_flavour_ewan_4041_regiment_damage_avalanches_min max = ep3_laamp_flavour_ewan_4041_regiment_damage_avalanches_max } } multiply = -1 } } } } } flag:flash_floods = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 30 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } if = { limit = { # Except strong/veteran swimmers... trigger_if = { limit = { # ... unless fate has been especially cruel. NOT = { has_trait = one_legged } } NOR = { has_trait = forder has_trait = athletic has_trait = strong has_trait = physique_good } } } random = { chance = 5 death = { death_reason = death_swept_away_by_flash_flood } } } } every_maa_regiment = { limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment random = { chance = { value = 40 # Big ups to the Barcas. if = { limit = { is_unit_type = elephant_cavalry } add = 40 } } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.flash_floods hidden_effect = { change_maa_troops_count = { value = maa_current_troops_count multiply = { integer_range = { min = ep3_laamp_flavour_ewan_4041_regiment_damage_flash_floods_min max = ep3_laamp_flavour_ewan_4041_regiment_damage_flash_floods_max } } multiply = -1 } } } } } flag:frozen_water = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 50 custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } } if = { limit = { NOT = { has_trait = winter_soldier } # No swimming exception on this one: the shock of it, especially in thick winter clothing, is gonna paralyse you. } random = { chance = 5 death = { death_reason = death_drowned_in_hidden_icy_water } } } } every_maa_regiment = { limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment random = { chance = { value = 30 # Heavier MaA types & cavalry are screwed. if = { limit = { OR = { is_unit_type = elephant_cavalry is_unit_type = camel_cavalry is_unit_type = heavy_cavalry is_unit_type = light_cavalry is_unit_type = heavy_infantry is_unit_type = siege_weapon } } add = 30 } # Anything lighter, or at least not mounted, can at least _try_ to bolt. else_if = { limit = { OR = { is_unit_type = skirmishers is_unit_type = archers is_unit_type = pikemen } } add = -20 } } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.frozen_water hidden_effect = { change_maa_troops_count = { value = maa_current_troops_count multiply = { integer_range = { min = ep3_laamp_flavour_ewan_4041_regiment_damage_frozen_water_min max = ep3_laamp_flavour_ewan_4041_regiment_damage_frozen_water_max } } multiply = -1 } } } } } flag:earthquake = { every_courtier = { limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health random = { chance = 25 death = { death_reason = death_consumed_by_earthquake } } } every_maa_regiment = { limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment random = { chance = { value = 50 # Heavier MaA types are screwed. if = { limit = { OR = { is_unit_type = elephant_cavalry is_unit_type = heavy_infantry is_unit_type = siege_weapon is_unit_type = heavy_cavalry } } add = 30 } # Anything lighter can at least _try_ to bolt. else_if = { limit = { OR = { is_unit_type = skirmishers is_unit_type = archers } } add = -30 } } custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.earthquake hidden_effect = { change_maa_troops_count = { value = maa_current_troops_count multiply = { integer_range = { min = ep3_laamp_flavour_ewan_4041_regiment_damage_earthquake_min max = ep3_laamp_flavour_ewan_4041_regiment_damage_earthquake_max } } multiply = -1 } } } } } } } # Bad weather destroys wagons or pack animals. ep3_laamp_flavour_ewan.4041 = { type = character_event title = ep3_laamp_flavour_ewan.4041.t desc = { first_valid = { triggered_desc = { trigger = { scope:weather_type = flag:storm_thunder } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.thunder } triggered_desc = { trigger = { scope:weather_type = flag:storm_wind } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.wind } triggered_desc = { trigger = { scope:weather_type = flag:storm_snow } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.snow } triggered_desc = { trigger = { scope:weather_type = flag:storm_sand } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.sand } triggered_desc = { trigger = { scope:weather_type = flag:wild_fires } desc = { desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.intro first_valid = { triggered_desc = { trigger = { location = { OR = { terrain = steppe terrain = drylands } } } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.scrub } triggered_desc = { trigger = { location = { OR = { terrain = hills terrain = mountains } } } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.slopes } triggered_desc = { trigger = { location = { OR = { terrain = jungle terrain = forest terrain = taiga } } } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.treeline } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.fallback } } } triggered_desc = { trigger = { scope:weather_type = flag:avalanches } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.avalanche } triggered_desc = { trigger = { scope:weather_type = flag:flash_floods } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.flood } triggered_desc = { trigger = { scope:weather_type = flag:frozen_water } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.frozen_water } triggered_desc = { trigger = { scope:weather_type = flag:earthquake } desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.earthquake } } desc = ep3_laamp_flavour_ewan.4041.desc.outro } theme = widgetless_travel_danger left_portrait = { character = root triggered_animation = { trigger = { OR = { scope:weather_type = flag:storm_thunder scope:weather_type = flag:storm_snow scope:weather_type = flag:storm_wind } } animation = shiver } animation = shock } override_background = { trigger = { ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = yes } reference = wilderness } override_background = { trigger = { ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = no } reference = wilderness } # ALL THE VFX! override_effect_2d = { trigger = { scope:weather_type = flag:wild_fires } reference = smoke } widgets = { widget = { is_shown = { OR = { scope:weather_type = flag:storm_snow scope:weather_type = flag:avalanches scope:weather_type = flag:frozen_water } } gui = "event_window_widget_vfx_snowstorm" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:storm_thunder } gui = "event_window_widget_vfx_lightning_storm" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:storm_wind } gui = "event_window_widget_vfx_rain_storm" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:storm_sand } gui = "event_window_widget_vfx_sandstorm" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:wild_fires } gui = "event_window_widget_vfx_heavy_smoke" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:flash_floods } gui = "event_window_widget_vfx_rainy_fog" container = "foreground_shader_vfx_container" } widget = { is_shown = { scope:weather_type = flag:earthquake } gui = "event_window_widget_vfx_earthquake" container = "foreground_shader_vfx_container" } } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4041 } } } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4041 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4041 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Roll our severe weather type. random_list = { # Some storms can happen anywhere. ## Thunder. 250 = { trigger = { location = { NOR = { terrain = desert terrain = desert_mountains terrain = oasis } } } save_scope_value_as = { name = weather_type value = flag:storm_thunder } } ## Wind. 250 = { trigger = { location = { NOR = { terrain = desert terrain = desert_mountains terrain = oasis } } } save_scope_value_as = { name = weather_type value = flag:storm_wind } } # Snow storms. 100 = { trigger = { location_has_normal_or_worse_winter_trigger = yes # Some people won't consider this excessive hardship. NOR = { culture_uses_frequent_winter_transportation_trigger = yes has_trait = winter_soldier } } save_scope_value_as = { name = weather_type value = flag:storm_snow } } # Sand storms. 100 = { trigger = { location = { OR = { terrain = desert terrain = desert_mountains terrain = oasis } } } save_scope_value_as = { name = weather_type value = flag:storm_sand } } # Wild fires. 100 = { trigger = { # Is it summer where we are? is_nice_season_to_be_outside_trigger = { LOCATION = root.location } # If so, proceed. location = { # Just in case, since winter may retreat late in Siberia but wild fires do happen. county = { county_has_winter_trigger = no } # Suitable terrains. OR = { terrain = plains terrain = farmlands terrain = hills terrain = mountains terrain = jungle terrain = forest terrain = taiga terrain = steppe terrain = drylands } # And places where they occur. OR = { geographical_region = world_europe_south geographical_region = world_europe_east geographical_region = world_asia_minor geographical_region = world_middle_east geographical_region = world_india geographical_region = world_africa geographical_region = world_steppe geographical_region = world_burma geographical_region = world_asia_china geographical_region = world_asia_japan geographical_region = world_asia_korea geographical_region = world_asia_southeast } } } save_scope_value_as = { name = weather_type value = flag:wild_fires } } # Avalanches. 200 = { trigger = { location_has_normal_or_worse_winter_trigger = yes location = { terrain = mountains } # Some people won't consider this excessive hardship. NOR = { has_trait = rough_terrain_expert culture = { has_cultural_parameter = mountain_trait_bonuses } } } save_scope_value_as = { name = weather_type value = flag:avalanches } } # Flood. 200 = { trigger = { OR = { location = { OR = { terrain = floodplains terrain = wetlands } } AND = { current_season_wet = yes location = { OR = { is_coastal = yes any_neighboring_province = { is_river_province = yes } terrain = plains terrain = hills terrain = farmlands terrain = jungle terrain = forest } # Some places will never have floods — not that they mightn't IRL, but they'd be potentially verisimilitude-breaking at a glance IG. NOR = { terrain = mountains terrain = desert terrain = desert_mountains terrain = oasis } } } } # Some people won't consider this excessive hardship. NOT = { has_trait = forder } } save_scope_value_as = { name = weather_type value = flag:flash_floods } } # Frozen water. 200 = { trigger = { location_has_normal_or_worse_winter_trigger = yes location = { OR = { terrain = plains terrain = forest terrain = taiga } } # Rule out anyone who wouldn't be fooled by this. NOR = { culture_uses_frequent_winter_transportation_trigger = yes has_trait = winter_soldier } } save_scope_value_as = { name = weather_type value = flag:frozen_water } } # Earthquakes. 10 = { trigger = { location = { OR = { geographical_region = world_europe_south_east geographical_region = world_europe_south_italy geographical_region = world_asia_minor geographical_region = world_middle_east_persia geographical_region = world_tibet geographical_region = world_himalaya geographical_region = world_burma geographical_region = world_asia_china geographical_region = world_asia_japan geographical_region = world_asia_korea geographical_region = world_asia_southeast # Plus some places but _only_ in their mountainous/hilly areas. AND = { geographical_region = ghw_region_iberia OR = { terrain = mountains terrain = desert_mountains terrain = hills } } AND = { geographical_region = ghw_region_north_africa OR = { terrain = mountains terrain = desert_mountains terrain = hills } } AND = { geographical_region = ghw_region_horn_of_africa OR = { terrain = mountains terrain = desert_mountains terrain = hills } } } } } save_scope_value_as = { name = weather_type value = flag:earthquake } # If this isn't the direct holding of a player, cause some serious damage. location.county.holder = { if = { limit = { NOT = { is_ai = yes } } random_courtier = { limit = { location = prev.location } death = { death_reason = death_consumed_by_earthquake } } random_courtier = { limit = { location = prev.location } death = { death_reason = death_consumed_by_earthquake } } random_courtier = { limit = { location = prev.location } death = { death_reason = death_consumed_by_earthquake } } random_courtier = { limit = { location = prev.location } death = { death_reason = death_consumed_by_earthquake } } prev = { change_development_level = { integer_range = { min = -35 max = -10 } } change_county_control = -100 } random = { chance = 20 death = { death_reason = death_consumed_by_earthquake } } } } } } } # Martial duel to get things going. option = { name = ep3_laamp_flavour_ewan.4041.a duel = { skill = martial value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4041.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.a.tt.success ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 30 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4041.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.a.tt.failure ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Stewardship duel to get things going. option = { name = ep3_laamp_flavour_ewan.4041.b duel = { skill = stewardship value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4041.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.b.tt.success ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 30 } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4041.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.b.tt.failure ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } } } # Stubborn: come on, _heave_! option = { name = ep3_laamp_flavour_ewan.4041.c trigger = { has_trait = stubborn } trait = stubborn random_list = { 50 = { desc = ep3_laamp_flavour_ewan.4041.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.c.tt.success ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 40 } } } 50 = { desc = ep3_laamp_flavour_ewan.4041.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.c.tt.failure ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes } } } stress_impact = { stubborn = minor_stress_impact_loss } ai_chance = { # If you're stubborn, you're quite likely to uhhh... be stubborn. base = 100 } } # Pray to FateGodName & hope. option = { name = ep3_laamp_flavour_ewan.4041.d trigger = { NOT = { has_trait = stubborn } } random_list = { 25 = { desc = ep3_laamp_flavour_ewan.4041.d.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.d.tt.success add_prestige = minor_prestige_gain } } 75 = { desc = ep3_laamp_flavour_ewan.4041.d.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4041.d.tt.failure add_piety = minor_piety_loss ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes } } } stress_impact = { zealous = miniscule_stress_impact_loss cynical = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_zeal = 1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ################################################## # Supplies Unaccounted For # by Ewan Cowhig Croft # 4051 - 4060 ################################################## scripted_effect ep3_laamp_flavour_ewan_4051_roll_duel_effect = { duel = { skill = $SKILL$ value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = $VICTORY_LOC$ send_interface_toast = { title = $VICTORY_LOC$ add_prestige = minor_prestige_gain custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.most_provisions_regained domicile = { change_provisions = { value = scope:provisions_tally multiply = 0.8 ceiling = yes } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = $DEFEAT_LOC$ send_interface_toast = { title = $DEFEAT_LOC$ random_list = { 40 = { custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.some_provisions_regained domicile = { change_provisions = { value = scope:provisions_tally multiply = 0.2 ceiling = yes } } } 60 = { custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.provisions_lost } } } } } } # Supplies go missing in large armies. ep3_laamp_flavour_ewan.4051 = { type = character_event title = ep3_laamp_flavour_ewan.4051.t desc = ep3_laamp_flavour_ewan.4051.desc theme = widgetless_travel_danger left_portrait = { character = root animation = anger } override_background = { reference = army_camp } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4051 } } # No one would seriously try this in a smaller baggage train. ## Outside of that one gallowsbait event, of course. current_military_strength >= @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force # Plus make sure we've got enough provisions for someone to try it on. domicile.provisions >= @ep3_laamp_flavour_ewan_4051_minimum_provisions_count } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4051 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4051 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Lose an amount of provisions scaling to how many we currently have. domicile = { if = { limit = { provisions >= 1000 } # Register how many we're expending so we can try to get most of them back. save_scope_value_as = { name = provisions_tally value = 300 } change_provisions = { value = scope:provisions_tally multiply = -1 } } else_if = { limit = { provisions >= 750 } # Register how many we're expending so we can try to get most of them back. save_scope_value_as = { name = provisions_tally value = 250 } change_provisions = { value = scope:provisions_tally multiply = -1 } } else_if = { limit = { provisions >= 500 } # Register how many we're expending so we can try to get most of them back. save_scope_value_as = { name = provisions_tally value = 150 } change_provisions = { value = scope:provisions_tally multiply = -1 } } else_if = { limit = { provisions >= 250 } # Register how many we're expending so we can try to get most of them back. save_scope_value_as = { name = provisions_tally value = 75 } change_provisions = { value = scope:provisions_tally multiply = -1 } } else = { # Register how many we're expending so we can try to get most of them back. save_scope_value_as = { name = provisions_tally value = 50 } change_provisions = { value = scope:provisions_tally multiply = -1 } } } } # Martial duel to find who's responsible. option = { name = ep3_laamp_flavour_ewan.4051.a ep3_laamp_flavour_ewan_4051_roll_duel_effect = { SKILL = martial VICTORY_LOC = ep3_laamp_flavour_ewan.4051.a.tt.success DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.a.tt.failure } stress_impact = { wrathful = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Stewardship duel to find who's responsible. option = { name = ep3_laamp_flavour_ewan.4051.b ep3_laamp_flavour_ewan_4051_roll_duel_effect = { SKILL = stewardship VICTORY_LOC = ep3_laamp_flavour_ewan.4051.b.tt.success DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.b.tt.failure } stress_impact = { diligent = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 } } } # Intrigue duel to find who's responsible. option = { name = ep3_laamp_flavour_ewan.4051.c ep3_laamp_flavour_ewan_4051_roll_duel_effect = { SKILL = intrigue VICTORY_LOC = ep3_laamp_flavour_ewan.4051.c.tt.success DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.c.tt.failure } stress_impact = { deceitful = miniscule_stress_impact_loss } ai_chance = { base = 1 ai_value_modifier = { ai_honor = -1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ################################################## # Eyes in the Night # by Ewan Cowhig Croft # 4061 - 4070 ################################################## scripted_trigger ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = { OR = { has_trait = cannibal any_secret = { type = secret_cannibal } } } scripted_effect ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { # Alright, figure out how big our size mult'll be. save_scope_value_as = { name = hunter_size value = { integer_range = { min = $MIN$ max = $MAX$ } } } # And set up our duel diffs. save_scope_value_as = { name = duel_diff_safe value = { value = scope:hunter_size multiply = 2.5 floor = yes min = 10 max = 20 } } save_scope_value_as = { name = duel_diff_risky value = { value = scope:hunter_size multiply = 3.5 floor = yes } } } scripted_effect ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = { if = { limit = { scope:hunter_size >= 9 } random_courtier = { limit = { location = root.location } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_1 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location this != scope:death_1 } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_2 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location NOR = { this = scope:death_1 this = scope:death_2 } } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_3 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location NOR = { this = scope:death_1 this = scope:death_2 this = scope:death_3 } } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } death = { death_reason = death_hunted_by_wild_beast } } } else_if = { limit = { scope:hunter_size >= 6 } random_courtier = { limit = { location = root.location } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_1 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location this != scope:death_1 } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_2 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location NOR = { this = scope:death_1 this = scope:death_2 } } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } death = { death_reason = death_hunted_by_wild_beast } } } else_if = { limit = { scope:hunter_size >= 3 } random_courtier = { limit = { location = root.location } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_1 death = { death_reason = death_hunted_by_wild_beast } } random_courtier = { limit = { location = root.location this != scope:death_1 } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } save_scope_as = death_2 death = { death_reason = death_hunted_by_wild_beast } } } else = { random_courtier = { limit = { location = root.location } weight = { base = 50 modifier = { add = { add = prowess add = { value = martial multiply = 0.5 } multiply = -1 } } } death = { death_reason = death_hunted_by_wild_beast } } } } # Local predator picking off people each evening. ep3_laamp_flavour_ewan.4061 = { type = character_event title = ep3_laamp_flavour_ewan.4061.t desc = { desc = ep3_laamp_flavour_ewan.4061.desc.intro # Animal size. first_valid = { triggered_desc = { trigger = { scope:hunter_size >= 12 } desc = ep3_laamp_flavour_ewan.4061.desc.size.titanic } triggered_desc = { trigger = { scope:hunter_size >= 10 } desc = ep3_laamp_flavour_ewan.4061.desc.size.colossal } triggered_desc = { trigger = { scope:hunter_size >= 8 } desc = ep3_laamp_flavour_ewan.4061.desc.size.mammoth } triggered_desc = { trigger = { scope:hunter_size >= 6 } desc = ep3_laamp_flavour_ewan.4061.desc.size.huge } triggered_desc = { trigger = { scope:hunter_size >= 4 } desc = ep3_laamp_flavour_ewan.4061.desc.size.large } desc = ep3_laamp_flavour_ewan.4061.desc.size.nimble } desc = ep3_laamp_flavour_ewan.4061.desc.midtro # Sight. first_valid = { triggered_desc = { trigger = { has_trait = blind } desc = ep3_laamp_flavour_ewan.4061.desc.sight.blind } desc = ep3_laamp_flavour_ewan.4061.desc.sight.sighted } # Terrain first_valid = { triggered_desc = { trigger = { location = { any_neighboring_province = { is_river_province = yes } } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.major_river } triggered_desc = { trigger = { location = { terrain = farmlands } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.farmlands } triggered_desc = { trigger = { location = { terrain = hills } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.hills } triggered_desc = { trigger = { location = { terrain = mountains } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.mountains } triggered_desc = { trigger = { location = { terrain = desert } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.desert } triggered_desc = { trigger = { location = { terrain = desert_mountains } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.desert_mountains } triggered_desc = { trigger = { location = { terrain = oasis } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.oasis } triggered_desc = { trigger = { location = { terrain = jungle } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.jungle } triggered_desc = { trigger = { location = { terrain = forest } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.forest } triggered_desc = { trigger = { location = { terrain = taiga } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.taiga } triggered_desc = { trigger = { location = { terrain = wetlands } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.wetlands } triggered_desc = { trigger = { location = { terrain = steppe } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.steppe } triggered_desc = { trigger = { location = { terrain = floodplains } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.floodplains } triggered_desc = { trigger = { location = { terrain = drylands } } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.drylands } desc = ep3_laamp_flavour_ewan.4061.desc.terrain.plains } desc = ep3_laamp_flavour_ewan.4061.desc.outro } theme = widgetless_travel_danger left_portrait = { character = root animation = worry } # Night would be more dramatic, but the follow-up wilderness events _have_ to be during the day due to art constraints, so we start off in the morning instead. override_background = { reference = corridor_day } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4061 } } # Narrative'll break if you don't have _some_ available courtiers. any_courtier = { location = root.location } } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4061 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4061 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_short } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Roll our large Old World man-eater. random_list = { # Feral Dog (fallback) 25 = { save_scope_value_as = { name = hunter_type value = flag:dog } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 4 } } # Wolf 250 = { trigger = { location = { hunt_animal_wolf_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:wolf } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 2 MAX = 4 } } # Hyena 200 = { trigger = { location = { hunt_animal_hyena_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:hyena } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 4 } } # Lion 200 = { trigger = { location = { hunt_animal_lion_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:lion } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 2 MAX = 6 } } # Tiger 300 = { trigger = { location = { hunt_animal_tiger_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:tiger } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 4 MAX = 7 } } # Leopard 150 = { trigger = { location = { hunt_animal_leopard_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:leopard } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 3 MAX = 5 } } # Panther (black leopards) 1 = { trigger = { location = { hunt_animal_leopard_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:panther } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 3 MAX = 5 } } # Lynx 75 = { trigger = { location = { hunt_animal_lynx_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:lynx } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 2 MAX = 4 } } # Caracal 75 = { trigger = { location = { hunt_animal_caracal_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:caracal } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 3 } } # Bear 150 = { trigger = { location = { hunt_animal_bear_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:bear } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 4 MAX = 9 } } # Hippo ## This one goes out to Dog: he was the best, deadliest pet an Arisen could ever ask for. ## Yes, hippos do eat meat, though in the ordinary course of things they wouldn't _hunt_ per se. Not like this — basically this'd have to be a hippo that's maybe desperate for food, likely extra territorial, and probably just has a certain taste for meat. 25 = { trigger = { location = { hunt_animal_hippo_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:hippo } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 8 MAX = 12 } } # Crocodile 100 = { trigger = { ## location = { hunt_animal_crocodile_trigger = yes } # Just to be safe, try to ensure we're at least intending to step near their habitat for longer than a day. current_travel_plan.next_location = { hunt_animal_crocodile_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:crocodile } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 3 MAX = 8 } } # Cannibal (generated) 1 = { trigger = { can_start_single_combat_trigger = yes } save_scope_value_as = { name = hunter_type value = flag:cannibal_generated } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 1 } # Create & nab our cannibal. create_character = { template = criminal_brawn_character location = root.location save_scope_as = cannibal trait = cannibal prowess = { max_template_medium_skill max_template_very_high_skill } } } # Cannibal (existing) 10 = { trigger = { can_start_single_combat_trigger = yes any_pool_character = { province = root.location ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = yes } } save_scope_value_as = { name = hunter_type value = flag:cannibal_existing } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 1 } # Nab our cannibal. random_pool_character = { province = root.location limit = { ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = yes } save_scope_as = cannibal } } # Cannibal (Chad) 50 = { trigger = { can_start_single_combat_trigger = yes character:easteregg_chad_uhl ?= { is_alive = yes location ?= root.location is_pool_character = yes } } save_scope_value_as = { name = hunter_type value = flag:cannibal_chad } ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { MIN = 1 MAX = 1 } # Nab our cannibal. character:easteregg_chad_uhl = { save_scope_as = cannibal } } } # Apply our local modifier. location.county = { if = { limit = { # But not to hapless players who don't know what's happening. NOT = { holder = { is_ai = no } } } switch = { trigger = scope:hunter_size 12 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_12_modifier years = 3 } } 11 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_11_modifier years = 3 } } 10 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_10_modifier years = 3 } } 9 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_09_modifier years = 3 } } 8 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_08_modifier years = 3 } } 7 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_07_modifier years = 3 } } 6 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_06_modifier years = 3 } } 5 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_05_modifier years = 3 } } 4 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_04_modifier years = 3 } } 3 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_03_modifier years = 3 } } 2 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_02_modifier years = 3 } } 1 = { add_county_modifier = { modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_01_modifier years = 3 } } } } } } # Martial duel to try and organise better watches. option = { name = ep3_laamp_flavour_ewan.4061.a custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.safe duel = { skill = martial value = scope:duel_diff_safe # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4061.a.tt.success send_interface_toast = { type = event_toast_effect_good title = ep3_laamp_flavour_ewan.4061.a.tt.success add_prestige = minor_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = saviour_opinion opinion = 20 } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4061.a.tt.failure send_interface_toast = { type = event_toast_effect_bad title = ep3_laamp_flavour_ewan.4061.a.tt.failure ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = yes } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # Go after it yourself. option = { name = ep3_laamp_flavour_ewan.4061.b custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.risky custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.risky.are_you_sure trigger_event = ep3_laamp_flavour_ewan.4062 # Flag not to clean up our cannibal, if we made one. save_scope_value_as = { name = dont_clean_cannibal value = yes } stress_impact = { lifestyle_hunter = minor_stress_impact_loss brave = minor_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 2 } } } # As long as it doesn't eat anyone important. option = { name = ep3_laamp_flavour_ewan.4061.c random_list = { 50 = { desc = ep3_laamp_flavour_ewan.4061.c.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4061.c.tt.success add_prestige = miniscule_prestige_gain } } 50 = { desc = ep3_laamp_flavour_ewan.4061.c.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4061.c.tt.failure ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = yes } } } stress_impact = { craven = medium_stress_impact_loss brave = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = -2 } } } after = { # If we're slowed due to multi, resume travel. mp_resume_travel_plan = yes # Clean up our cannibal, if necessary. if = { limit = { scope:hunter_type = flag:cannibal_generated NOT = { exists = scope:dont_clean_cannibal } } scope:cannibal = { death = { death_reason = death_vanished } } } } } scripted_trigger ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = { OR = { scope:hunter_type = flag:cannibal_generated scope:hunter_type = flag:cannibal_existing scope:hunter_type = flag:cannibal_chad } } scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_canine_trigger = { OR = { scope:hunter_type = flag:dog scope:hunter_type = flag:wolf scope:hunter_type = flag:hyena } } scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_feline_trigger = { OR = { scope:hunter_type = flag:lion scope:hunter_type = flag:tiger scope:hunter_type = flag:leopard scope:hunter_type = flag:panther scope:hunter_type = flag:lynx scope:hunter_type = flag:caracal } } scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_human_trigger = { OR = { scope:hunter_type = flag:cannibal_generated scope:hunter_type = flag:cannibal_existing scope:hunter_type = flag:cannibal_chad } } scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_effect = { duel = { skill = $SKILL$ value = scope:duel_diff_risky # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.tt.success add_prestige = { value = medium_prestige_gain add = { value = scope:hunter_size multiply = 50 } } every_courtier = { limit = { location = root.location } custom = custom.every_follower add_opinion = { target = root modifier = saviour_opinion opinion = { value = 30 add = { value = scope:hunter_size multiply = 2 } } } } } ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.tt.failure ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes } } } } scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = { switch = { trigger = scope:hunter_type flag:dog = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = dog SUCCESS_% = 90 FAILURE_% = 10 WOUNDS = 1 } } flag:wolf = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = wolf SUCCESS_% = 80 FAILURE_% = 20 WOUNDS = 1 } } flag:hyena = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = hyena SUCCESS_% = 85 FAILURE_% = 15 WOUNDS = 1 } } flag:lion = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = lion SUCCESS_% = 60 FAILURE_% = 40 WOUNDS = 2 } } flag:tiger = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = tiger SUCCESS_% = 40 FAILURE_% = 60 WOUNDS = 3 } } flag:leopard = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = leopard SUCCESS_% = 60 FAILURE_% = 40 WOUNDS = 2 } } flag:panther = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = panther SUCCESS_% = 60 FAILURE_% = 40 WOUNDS = 2 } } flag:lynx = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = lynx SUCCESS_% = 80 FAILURE_% = 20 WOUNDS = 1 } } flag:caracal = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = caracal SUCCESS_% = 80 FAILURE_% = 20 WOUNDS = 1 } } flag:bear = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = bear SUCCESS_% = 30 FAILURE_% = 70 WOUNDS = 3 } } flag:hippo = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = hippo SUCCESS_% = 10 FAILURE_% = 90 WOUNDS = 3 } } flag:crocodile = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { ANIMAL = crocodile SUCCESS_% = 40 FAILURE_% = 60 WOUNDS = 3 } } } } scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { save_scope_value_as = { name = wounds_tally value = $WOUNDS$ } random_list = { $SUCCESS_%$ = { increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } if = { limit = { scope:wounds_tally = 2 } increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } } else_if = { limit = { scope:wounds_tally >= 3 } increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } } } $FAILURE_%$ = { death = { death_reason = death_killed_by_monstrous_$ANIMAL$ } } } } scripted_effect ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = { hidden_effect = { location.county = { remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_12_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_11_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_10_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_09_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_08_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_07_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_06_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_05_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_04_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_03_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_02_modifier remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_01_modifier } } } scripted_effect ep3_laamp_flavour_ewan_4062_engagement_stress_effect = { # vs. cannibals. if = { limit = { OR = { scope:hunter_type = flag:cannibal_generated scope:hunter_type = flag:cannibal_existing scope:hunter_type = flag:cannibal_chad } } stress_impact = { base = 10 lifestyle_hunter = -10 brave = -20 craven = 10 } } # vs. size. ## 12. else_if = { limit = { scope:hunter_size >= 12 } stress_impact = { base = 50 lifestyle_hunter = -30 brave = -30 craven = 30 } } ## 10. else_if = { limit = { scope:hunter_size >= 10 } stress_impact = { base = 40 lifestyle_hunter = -25 brave = -25 craven = 25 } } ## 08. else_if = { limit = { scope:hunter_size >= 8 } stress_impact = { base = 20 lifestyle_hunter = -20 brave = -20 craven = 20 } } ## 06. else_if = { limit = { scope:hunter_size >= 6 } stress_impact = { base = 10 lifestyle_hunter = -15 brave = -15 craven = 15 } } ## 04. else_if = { limit = { scope:hunter_size >= 4 } stress_impact = { lifestyle_hunter = -10 brave = -10 craven = 10 } } ## 02. else_if = { limit = { scope:hunter_size >= 2 } stress_impact = { lifestyle_hunter = -7 brave = -7 craven = 7 } } ## 01. else = { stress_impact = { lifestyle_hunter = -5 brave = -5 craven = 5 } } # If we're over a certain size, we take base stress. # Set up our animal stress. save_scope_value_as = { name = brave_size_stress value = { add = scope:hunter_size multiply = -3 } } save_scope_value_as = { name = craven_size_stress value = { add = scope:hunter_size multiply = 4 } } } # Alright, time to fight! ep3_laamp_flavour_ewan.4062 = { type = character_event title = { first_valid = { triggered_desc = { trigger = { scope:hunter_type = flag:dog } desc = ep3_laamp_flavour_ewan.4062.t.dog } triggered_desc = { trigger = { scope:hunter_type = flag:wolf } desc = ep3_laamp_flavour_ewan.4062.t.wolf } triggered_desc = { trigger = { scope:hunter_type = flag:hyena } desc = ep3_laamp_flavour_ewan.4062.t.hyena } triggered_desc = { trigger = { scope:hunter_type = flag:lion } desc = ep3_laamp_flavour_ewan.4062.t.lion } triggered_desc = { trigger = { scope:hunter_type = flag:tiger } desc = ep3_laamp_flavour_ewan.4062.t.tiger } triggered_desc = { trigger = { scope:hunter_type = flag:leopard } desc = ep3_laamp_flavour_ewan.4062.t.leopard } triggered_desc = { trigger = { scope:hunter_type = flag:panther } desc = ep3_laamp_flavour_ewan.4062.t.panther } triggered_desc = { trigger = { scope:hunter_type = flag:lynx } desc = ep3_laamp_flavour_ewan.4062.t.lynx } triggered_desc = { trigger = { scope:hunter_type = flag:caracal } desc = ep3_laamp_flavour_ewan.4062.t.caracal } triggered_desc = { trigger = { scope:hunter_type = flag:bear } desc = ep3_laamp_flavour_ewan.4062.t.bear } triggered_desc = { trigger = { scope:hunter_type = flag:hippo } desc = ep3_laamp_flavour_ewan.4062.t.hippo } triggered_desc = { trigger = { scope:hunter_type = flag:crocodile } desc = ep3_laamp_flavour_ewan.4062.t.crocodile } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_generated } desc = ep3_laamp_flavour_ewan.4062.t.cannibal_generated } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_existing } desc = ep3_laamp_flavour_ewan.4062.t.cannibal_existing } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_chad } desc = ep3_laamp_flavour_ewan.4062.t.cannibal_chad } } } desc = { desc = ep3_laamp_flavour_ewan.4062.desc.intro # Tracks. first_valid = { triggered_desc = { trigger = { ep3_laamp_flavour_ewan_4062_animal_group_canine_trigger = yes } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.canine } triggered_desc = { trigger = { ep3_laamp_flavour_ewan_4062_animal_group_feline_trigger = yes } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.feline } triggered_desc = { trigger = { scope:hunter_type = flag:bear } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.ursine } triggered_desc = { trigger = { scope:hunter_type = flag:hippo } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.hippopotomine } triggered_desc = { trigger = { scope:hunter_type = flag:crocodile } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.crocodyline } triggered_desc = { trigger = { ep3_laamp_flavour_ewan_4062_animal_group_human_trigger = yes } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.human } } desc = ep3_laamp_flavour_ewan.4062.desc.tracks.connector # Terrain first_valid = { triggered_desc = { trigger = { location = { any_neighboring_province = { is_river_province = yes } } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.major_river } triggered_desc = { trigger = { location = { terrain = farmlands } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.farmlands } triggered_desc = { trigger = { location = { terrain = hills } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.hills } triggered_desc = { trigger = { location = { terrain = mountains } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.mountains } triggered_desc = { trigger = { location = { terrain = desert } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.desert } triggered_desc = { trigger = { location = { terrain = desert_mountains } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.desert_mountains } triggered_desc = { trigger = { location = { terrain = oasis } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.oasis } triggered_desc = { trigger = { location = { terrain = jungle } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.jungle } triggered_desc = { trigger = { location = { terrain = forest } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.forest } triggered_desc = { trigger = { location = { terrain = taiga } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.taiga } triggered_desc = { trigger = { location = { terrain = wetlands } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.wetlands } triggered_desc = { trigger = { location = { terrain = steppe } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.steppe } triggered_desc = { trigger = { location = { terrain = floodplains } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.floodplains } triggered_desc = { trigger = { location = { terrain = drylands } } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.drylands } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.plains } desc = ep3_laamp_flavour_ewan.4062.desc.terrain.connector # Animal first_valid = { triggered_desc = { trigger = { scope:hunter_type = flag:dog } desc = ep3_laamp_flavour_ewan.4062.desc.animal.dog } triggered_desc = { trigger = { scope:hunter_type = flag:wolf } desc = ep3_laamp_flavour_ewan.4062.desc.animal.wolf } triggered_desc = { trigger = { scope:hunter_type = flag:hyena } desc = ep3_laamp_flavour_ewan.4062.desc.animal.hyena } triggered_desc = { trigger = { scope:hunter_type = flag:lion } desc = ep3_laamp_flavour_ewan.4062.desc.animal.lion } triggered_desc = { trigger = { scope:hunter_type = flag:tiger } desc = ep3_laamp_flavour_ewan.4062.desc.animal.tiger } triggered_desc = { trigger = { scope:hunter_type = flag:leopard } desc = ep3_laamp_flavour_ewan.4062.desc.animal.leopard } triggered_desc = { trigger = { scope:hunter_type = flag:panther } desc = ep3_laamp_flavour_ewan.4062.desc.animal.panther } triggered_desc = { trigger = { scope:hunter_type = flag:lynx } desc = ep3_laamp_flavour_ewan.4062.desc.animal.lynx } triggered_desc = { trigger = { scope:hunter_type = flag:caracal } desc = ep3_laamp_flavour_ewan.4062.desc.animal.caracal } triggered_desc = { trigger = { scope:hunter_type = flag:bear } desc = ep3_laamp_flavour_ewan.4062.desc.animal.bear } triggered_desc = { trigger = { scope:hunter_type = flag:hippo scope:hunter_size >= 10 } desc = ep3_laamp_flavour_ewan.4062.desc.animal.hippo.largest } triggered_desc = { trigger = { scope:hunter_type = flag:hippo } desc = ep3_laamp_flavour_ewan.4062.desc.animal.hippo.fallback } triggered_desc = { trigger = { scope:hunter_type = flag:crocodile } desc = ep3_laamp_flavour_ewan.4062.desc.animal.crocodile } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_generated } desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_generated } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_existing } desc = { first_valid = { triggered_desc = { trigger = { character:easteregg_anna_johansson ?= scope:cannibal } desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.anna } triggered_desc = { trigger = { scope:cannibal = { any_secret = { type = secret_cannibal } } } desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.secret } desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.fallback } } } triggered_desc = { trigger = { scope:hunter_type = flag:cannibal_chad } desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_chad } } } theme = widgetless_travel_danger left_portrait = { character = root animation = shock } right_portrait = { character = scope:cannibal animation = random_weapon_aggressive } override_background = { reference = wilderness } immediate = { # Plus, we'll need to know how big our animal is. set_variable = { name = 4061_size_adjective value = scope:hunter_size } # Sort our sacrifices. court_position:huntperson_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } save_scope_as = huntsperson } } court_position:kennelperson_camp_officer ?= { if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } save_scope_as = kenneler } } } # Animal: martial duel. option = { name = ep3_laamp_flavour_ewan.4062.a trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no } ep3_laamp_flavour_ewan_4062_animal_duel_effect = { SKILL = martial } ep3_laamp_flavour_ewan_4062_engagement_stress_effect = yes ai_chance = { base = 1 modifier = { add = { value = martial multiply = 10 } martial > prowess } } } # Animal: prowess duel. option = { name = ep3_laamp_flavour_ewan.4062.b trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no } ep3_laamp_flavour_ewan_4062_animal_duel_effect = { SKILL = prowess } ep3_laamp_flavour_ewan_4062_engagement_stress_effect = yes ai_chance = { base = 1 modifier = { add = { value = prowess multiply = 10 } prowess > martial } } } # Huntperson: shoot her, SHOOOOT HERRRR! option = { name = ep3_laamp_flavour_ewan.4062.c trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no exists = scope:huntsperson } reason = have_huntperson scope:huntsperson = { duel = { skill = prowess value = scope:duel_diff_risky # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.c.tt.success root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.c.tt.success left_icon = scope:huntsperson add_prestige = { value = medium_prestige_gain add = { value = scope:hunter_size multiply = 50 } multiply = 0.5 } every_courtier = { limit = { location = root.location } custom = custom.every_follower add_opinion = { target = scope:huntsperson modifier = saviour_opinion opinion = { value = 30 add = { value = scope:hunter_size multiply = 2 } } } } } ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.c.tt.failure root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.c.tt.failure left_icon = scope:huntsperson scope:huntsperson = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes } } } } } } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Dog: kennelmaster, bring me that hound! option = { name = ep3_laamp_flavour_ewan.4062.d trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no scope:hunter_type = flag:dog exists = scope:kenneler NOT = { has_character_modifier = dog_story_modifier } } scope:kenneler = { duel = { skill = prowess value = scope:duel_diff_risky # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.d.tt.success root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.d.tt.success left_icon = scope:kenneler add_prestige = medium_prestige_gain start_dog_story_cycle_effect = yes every_courtier = { limit = { location = root.location } custom = custom.every_follower add_opinion = { target = scope:kenneler modifier = impressed_opinion opinion = { value = 15 add = { value = scope:hunter_size multiply = 2 } } } } } ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4062.d.tt.failure root = { send_interface_toast = { title = ep3_laamp_flavour_ewan.4062.d.tt.failure left_icon = scope:kenneler scope:kenneler = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes } } } } } } stress_impact = { greedy = miniscule_stress_impact_loss lustful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_sociability = 1 } } } # Cannibal: single combat. option = { name = ep3_laamp_flavour_ewan.4062.e trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = yes } # In case death would change it (say, losing an artefact), register scope:cannibal's prowess. save_scope_value_as = { name = cannibal_prowess value = scope:cannibal.prowess } # Then, into the actual duel we go! custom_tooltip = { text = duel_to_the_death.tt configure_start_single_combat_effect = { SC_INITIATOR = scope:cannibal SC_ATTACKER = scope:cannibal SC_DEFENDER = root FATALITY = always FIXED = no LOCALE = terrain_scope INVALIDATION_EVENT = single_combat.1006 OUTPUT_EVENT = ep3_laamp_flavour_ewan.4063 } } # No stress here. ai_chance = { # You don't get a choice here, you're fightin'. base = 1 } } after = { # If we're slowed due to multi, resume travel. mp_resume_travel_plan = yes # Clean up our animal size. if = { # The AI can get killed here _real_ fast, so we make sure to check that they're not gonna fire an error. limit = { is_alive = yes } remove_variable = 4061_size_adjective } } } ep3_laamp_flavour_ewan.4063 = { hidden = yes immediate = { if = { limit = { scope:sc_victor = root } root = { trigger_event = { id = ep3_laamp_flavour_ewan.4064 days = 1 } } # Log if it was Chad who lost. if = { limit = { character:easteregg_chad_uhl ?= scope:sc_loser } trigger_event = ep3_laamp_flavour_ewan.4065 } # Or Anna. else_if = { limit = { character:easteregg_anna_johansson ?= scope:sc_loser } trigger_event = ep3_laamp_flavour_ewan.4067 } } # Log if it was Chad who won. else_if = { limit = { character:easteregg_chad_uhl ?= scope:sc_victor } trigger_event = ep3_laamp_flavour_ewan.4066 } # Or Anna. else_if = { limit = { character:easteregg_anna_johansson ?= scope:sc_loser } trigger_event = ep3_laamp_flavour_ewan.4068 } } } # You won the single combat! ep3_laamp_flavour_ewan.4064 = { type = character_event title = ep3_laamp_flavour_ewan.4064.t desc = ep3_laamp_flavour_ewan.4064.desc theme = laamp left_portrait = { character = root animation = random_weapon_celebrate } override_background = { reference = wilderness } immediate = { add_prestige = { value = medium_prestige_gain add = { value = scope:cannibal_prowess multiply = 25 } } ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes } # Victory! option = { name = { text = { first_valid = { triggered_desc = { trigger = { OR = { any_secret = { type = secret_cannibal } has_trait = cannibal } } desc = ep3_laamp_flavour_ewan.4064.a.is_cannibal } desc = ep3_laamp_flavour_ewan.4064.a.not_cannibal } } } every_courtier = { limit = { location = root.location } custom = custom.every_follower add_opinion = { target = root modifier = saviour_opinion opinion = { value = 30 add = scope:cannibal_prowess } } } # No stress here. ai_chance = { # No logic needed for notification event. base = 1 } } } # Gather our ultimate fighter statistics. ep3_laamp_flavour_ewan.4065 = { hidden = yes } ep3_laamp_flavour_ewan.4066 = { hidden = yes } ep3_laamp_flavour_ewan.4067 = { hidden = yes } ep3_laamp_flavour_ewan.4068 = { hidden = yes } ################################################## # Slavers # by Ewan Cowhig Croft # 4071 - 4080 ################################################## scripted_trigger ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes NOR = { is_close_family_of = root is_consort_of = root has_important_relationship_with_character_trigger = { CHARACTER = root } highest_skill_value >= very_high_skill_rating prowess >= very_high_skill_rating average_of_all_skills_and_prowess >= sum_of_all_skills_threshold_excellent has_trait_with_flag = illness has_wounds_trigger = yes } } scripted_effect ep3_laamp_flavour_ewan_4071_won_duel_effect = { add_prestige = { value = medium_prestige_gain if = { limit = { scope:sc_victor ?= root } # If you win the duel, we give you a bit more than the usual amount, since you risked your life overtly. add = 100 } } every_courtier = { limit = { location = root.location } custom = custom.every_follower add_opinion = { target = root modifier = saviour_opinion opinion = 30 } } } scripted_effect ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = { scope:follower_1 = { death = { death_reason = death_disappeared_into_slave_markets } } scope:follower_2 = { death = { death_reason = death_disappeared_into_slave_markets } } scope:follower_3 = { death = { death_reason = death_disappeared_into_slave_markets } } } # Bastards try to kidnap people from the edges of your train. ep3_laamp_flavour_ewan.4071 = { type = character_event title = ep3_laamp_flavour_ewan.4071.t desc = ep3_laamp_flavour_ewan.4071.desc theme = widgetless_travel_danger left_portrait = { character = root animation = shock } right_portrait = { character = scope:slaver animation = schadenfreude } lower_left_portrait = scope:follower_1 lower_center_portrait = scope:follower_2 lower_right_portrait = scope:follower_3 override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4071 } } # Must have the correct travel danger type. location = { travel_danger_type = { travel_plan = root.current_travel_plan type = county_control } } # And you won't see slavers literally outside someone important's capital, just openly kidnapping travellers. NOT = { location.county = { holder.highest_held_title_tier >= tier_duchy this = holder.capital_county } } # Must have enough courtiers to lose in a duel. any_courtier = { count >= 3 ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = yes } # Slavers won't attack forces over a certain size, even assuming you're spread out in a long line. current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4071 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4071 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Nab our available courtiers. ## First sorting them to a list. every_courtier = { limit = { ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = yes } add_to_list = loseable_courtiers_list } ## Then sorting who we'll lose if we lose a duel. ordered_in_list = { list = loseable_courtiers_list order_by = sum_of_all_skills_and_prowess_value max = 3 check_range_bounds = no if = { limit = { NOT = { exists = scope:follower_1 } } save_scope_as = follower_1 } else_if = { limit = { NOT = { this = scope:follower_1 exists = scope:follower_2 } } save_scope_as = follower_2 } else_if = { limit = { NOT = { this = scope:follower_1 this = scope:follower_2 exists = scope:follower_3 } } save_scope_as = follower_3 } } ## Then sorting who we'll lose if we sell people. if = { # Which means making sure we've got enough people; we want 5, we have three taken from us, so we need at least 8 in the list. limit = { "list_size(loseable_courtiers_list)" >= 8 } ordered_in_list = { list = loseable_courtiers_list order_by = { value = sum_of_all_skills_and_prowess_value multiply = -1 } max = 5 check_range_bounds = no # We're gonna save these as individual scopes for easier tooltipping, but also put them in a list for less verbose checking in some specific script later. if = { limit = { NOT = { exists = scope:follower_4 } } save_scope_as = follower_4 add_to_list = sellable_courtiers_list } else_if = { limit = { NOT = { this = scope:follower_4 exists = scope:follower_5 } } save_scope_as = follower_5 add_to_list = sellable_courtiers_list } else_if = { limit = { NOT = { this = scope:follower_4 this = scope:follower_5 exists = scope:follower_6 } } save_scope_as = follower_6 add_to_list = sellable_courtiers_list } else_if = { limit = { NOT = { this = scope:follower_4 this = scope:follower_5 this = scope:follower_6 exists = scope:follower_7 } } save_scope_as = follower_7 add_to_list = sellable_courtiers_list } else_if = { limit = { NOT = { this = scope:follower_4 this = scope:follower_5 this = scope:follower_6 this = scope:follower_7 exists = scope:follower_8 } } save_scope_as = follower_8 add_to_list = sellable_courtiers_list } } } # Create a hostile slaver. create_character = { template = bandit_character location = root.location culture = root.location.culture faith = root.location.faith trait = gallowsbait martial = { min_template_decent_skill max_template_high_skill } stewardship = { min_template_decent_skill max_template_high_skill } prowess = { min_template_decent_skill max_template_high_skill } save_scope_as = slaver after_creation = { # Make sure we telegraph that they're a dick. ## First, level up their gallowsbait laamp_rewards_apply_criminal_xp_effect = { TRACK = bandit XP_MAX = gallowsbait_xp_massive_gain XP_MIN = gallowsbait_xp_massive_gain } laamp_rewards_apply_criminal_xp_effect = { TRACK = marauder XP_MAX = gallowsbait_xp_massive_gain XP_MIN = gallowsbait_xp_massive_gain } ## Then make sure they've got a suitably horrid personality. if = { limit = { number_of_personality_traits < 3 } add_trait = callous } if = { limit = { number_of_personality_traits < 3 } add_trait = greedy } if = { limit = { number_of_personality_traits < 3 } add_trait = arbitrary } if = { limit = { number_of_personality_traits < 3 } add_trait = wrathful } if = { limit = { number_of_personality_traits < 3 } add_trait = vengeful } } } } # Martial duel to fight them off. option = { name = ep3_laamp_flavour_ewan.4071.a duel = { skill = martial target = scope:slaver # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4071.a.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4071.a.tt.success left_icon = scope:slaver ep3_laamp_flavour_ewan_4071_won_duel_effect = yes scope:slaver = { death = { death_reason = death_attacking_laamp_train } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4071.a.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4071.a.tt.failure left_icon = scope:slaver add_prestige = minor_prestige_loss ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes } } } # No stress here, ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 2 } } } # SCE: launch yourself at the largest and fiercest of them. option = { name = ep3_laamp_flavour_ewan.4071.b trigger = { can_start_single_combat_trigger = yes } custom_tooltip = { text = duel_to_the_death.tt configure_start_single_combat_effect = { SC_INITIATOR = root SC_ATTACKER = root SC_DEFENDER = scope:slaver FATALITY = always FIXED = no LOCALE = terrain_scope INVALIDATION_EVENT = single_combat.1006 OUTPUT_EVENT = ep3_laamp_flavour_ewan.4072 } } save_scope_value_as = { name = duel_begun value = yes } stress_impact = { brave = medium_stress_impact_loss craven = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Haggle & sell some lesser courtiers yourself. option = { name = ep3_laamp_flavour_ewan.4071.c trigger = { exists = scope:follower_4 } # Alright, explain how this works. custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.profit custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.limitations custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.death # Then sum it up. scope:slaver = { pay_short_term_gold = { target = root gold = { add = scope:follower_4.sum_of_all_skills_and_prowess_value add = scope:follower_5.sum_of_all_skills_and_prowess_value add = scope:follower_6.sum_of_all_skills_and_prowess_value add = scope:follower_7.sum_of_all_skills_and_prowess_value add = scope:follower_8.sum_of_all_skills_and_prowess_value } } } # And we'd lose the listed courtiers, permanently. scope:follower_4 = { death = { death_reason = death_disappeared_into_slave_markets killer = root } } scope:follower_5 = { death = { death_reason = death_disappeared_into_slave_markets killer = root } } scope:follower_6 = { death = { death_reason = death_disappeared_into_slave_markets killer = root } } scope:follower_7 = { death = { death_reason = death_disappeared_into_slave_markets killer = root } } scope:follower_8 = { death = { death_reason = death_disappeared_into_slave_markets killer = root } } # Sort out opinions. ## We make a fake version first for easier tooltipping. show_as_tooltip = { every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes has_trait = callous } custom = custom.every_callous_follower add_opinion = { target = root modifier = practical_opinion opinion = 30 } } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes has_trait = compassionate } custom = custom.every_compassionate_follower add_opinion = { target = root modifier = callous_opinion opinion = -100 } } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes NOR = { has_trait = compassionate has_trait = callous } } custom = custom.every_other_follower add_opinion = { target = root modifier = outraged_opinion opinion = -50 } } } ## Then we process the actual list. hidden_effect = { every_courtier = { # Compassionates. if = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes has_trait = compassionate } add_opinion = { target = root modifier = callous_opinion opinion = -100 } } # Callous courtiers who didn't lose friends, consorts, or spouses. else_if = { limit = { has_trait = callous save_temporary_scope_as = char_temp NOT = { any_in_list = { list = sellable_courtiers_list OR = { AND = { reverse_opinion = { target = scope:char_temp value >= 30 } OR = { is_consort_of = scope:char_temp is_close_or_extended_family_of = scope:char_temp } } has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp } } } } } add_opinion = { target = root modifier = practical_opinion opinion = 30 } } else_if = { limit = { save_temporary_scope_as = char_temp NOT = { any_in_list = { list = sellable_courtiers_list count = all OR = { reverse_opinion = { target = scope:char_temp value <= -80 } has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp } } } } } add_opinion = { target = root modifier = outraged_opinion opinion = -50 } } } } # Last, but by no means least, gallowsbait. laamp_rewards_apply_criminal_xp_effect = { TRACK = marauder XP_MAX = gallowsbait_xp_major_gain XP_MIN = gallowsbait_xp_major_gain } stress_impact = { callous = major_stress_impact_loss arbitrary = medium_stress_impact_loss just = massive_stress_impact_gain compassionate = massive_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 2 ai_compassion = -3 } } } # Ignore the cries and hope for the best. option = { name = ep3_laamp_flavour_ewan.4071.d random_list = { 25 = { desc = ep3_laamp_flavour_ewan.4071.d.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4071.d.tt.success scope:slaver = { death = { death_reason = death_attacking_laamp_train } } } } 75 = { desc = ep3_laamp_flavour_ewan.4071.d.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4071.d.tt.failure add_prestige = medium_prestige_loss ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes } } } stress_impact = { craven = medium_stress_impact_loss brave = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_energy = 1 ai_honor = -0.5 } } } after = { # If we're slowed due to multi, resume travel. mp_resume_travel_plan = yes # Whatever else happens, our slaver is gone. hidden_effect = { scope:slaver = { if = { limit = { is_alive = yes NOT = { exists = scope:duel_begun } } death = { death_reason = death_vanished } } } } } } ep3_laamp_flavour_ewan.4072 = { hidden = yes immediate = { if = { limit = { scope:sc_victor = root } root = { trigger_event = ep3_laamp_flavour_ewan.4073 } } else = { ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes } } } # You won the single combat! ep3_laamp_flavour_ewan.4073 = { type = character_event title = ep3_laamp_flavour_ewan.4073.t desc = ep3_laamp_flavour_ewan.4073.desc theme = laamp left_portrait = { character = root animation = random_weapon_celebrate } override_background = { reference = battlefield } # Victory! option = { name = ep3_laamp_flavour_ewan.4073.a ep3_laamp_flavour_ewan_4071_won_duel_effect = yes # No stress here. ai_chance = { # No logic needed for notification event. base = 1 } } } ################################################## # Born of Desperation # by Ewan Cowhig Croft # 4081 - 4090 ################################################## scripted_effect ep3_laamp_flavour_ewan_4081_duel_loss_effect = { add_prestige = medium_prestige_loss increase_wounds_effect = { REASON = starving_peasant_horde } domicile = { change_provisions = { value = scope:provisions_loss multiply = -1 } } } scripted_effect ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { duel = { skill = $SKILL$ value = high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = $VICTORY_LOC$ send_interface_toast = { title = $VICTORY_LOC$ add_prestige = medium_prestige_gain every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } custom = custom.every_adult_follower add_opinion = { target = root modifier = respect_opinion opinion = 20 } } } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = $DEFEAT_LOC$ send_interface_toast = { title = $DEFEAT_LOC$ ep3_laamp_flavour_ewan_4081_duel_loss_effect = yes } } } } # Hungry locals swarm at you, searching for food. ep3_laamp_flavour_ewan.4081 = { type = character_event title = ep3_laamp_flavour_ewan.4081.t desc = { desc = ep3_laamp_flavour_ewan.4081.desc.intro first_valid = { triggered_desc = { trigger = { scope:hunger_type = flag:epidemic } desc = ep3_laamp_flavour_ewan.4081.desc.epidemic } triggered_desc = { trigger = { scope:hunger_type = flag:mundane } desc = ep3_laamp_flavour_ewan.4081.desc.mundane } } desc = ep3_laamp_flavour_ewan.4081.desc.outro } theme = widgetless_travel_danger left_portrait = { character = root animation = shock } right_portrait = { character = scope:local_peasant animation = aggressive_spear outfit_tags = { beggar_rags } hide_info = yes } override_background = { reference = wilderness } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4081 } } # Must have the correct travel danger type. location = { OR = { travel_danger_type = { travel_plan = root.current_travel_plan type = county_control } travel_danger_type = { travel_plan = root.current_travel_plan type = epidemic } } } # A mob won't attack forces over a certain size, even assuming you're spread out in a long line. current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4081 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4081 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Check to see if this is a generic famine or an epidemic-induced one. if = { limit = { location = { any_province_epidemic = { } } } save_scope_value_as = { name = hunger_type value = flag:epidemic } } else ={ save_scope_value_as = { name = hunger_type value = flag:mundane } } # How many provisions do we need to surrender? save_scope_value_as = { name = provisions_loss value = { add = domicile.provisions multiply = 0.2 floor = yes min = @ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking } } # Save our county for loc. location.county = { save_scope_as = current_county } # Create a peasant to look annoyed for players. if = { limit = { is_ai = no } hidden_effect = { random_list = { 90 = { create_character = { template = generic_peasant_character location = root.location culture = root.location.culture faith = root.location.faith prowess = 16 save_scope_as = local_peasant after_creation = { change_current_weight = -100 add_character_flag = no_headgear } } } 10 = { create_character = { template = diseased_peasant_character location = root.location culture = root.location.culture faith = root.location.faith prowess = 16 save_scope_as = local_peasant after_creation = { change_current_weight = -100 add_character_flag = no_headgear } } } } } } } # Diplomacy duel to try and calm them. option = { name = ep3_laamp_flavour_ewan.4081.a ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { SKILL = diplomacy VICTORY_LOC = ep3_laamp_flavour_ewan.4081.a.tt.success DEFEAT_LOC = ep3_laamp_flavour_ewan.4081.a.tt.failure } stress_impact = { calm = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain wrathful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_compassion = 1 } } } # Stewardship duel to try and force them to pay. option = { name = ep3_laamp_flavour_ewan.4081.b duel = { skill = stewardship value = high_skill_rating # Victory! 60 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4081.b.tt.success send_interface_toast = { title = ep3_laamp_flavour_ewan.4081.b.tt.success add_gold = medium_gold_laamps_value every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes OR = { has_trait = compassionate has_trait = generous } # Compassionate overrules greedy, but callous and sadistic overrule generous. NOR = { has_trait = callous has_trait = sadistic } } custom = ep3_laamp_flavour_ewan.4081.b.tt.success.every_compassionate_or_generous_follower add_opinion = { target = root modifier = callous_opinion opinion = -30 } } every_courtier = { limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes OR = { has_trait = callous has_trait = sadistic has_trait = greedy } # Callous and sadistic overrule generous, but compassionate overrules greedy. NOT = { has_trait = compassionate } } custom = ep3_laamp_flavour_ewan.4081.b.tt.success.every_callous_greedy_or_sadistic_follower add_opinion = { target = root modifier = practical_opinion opinion = 30 } } } } # Defeat. 40 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = ep3_laamp_flavour_ewan.4081.b.tt.failure send_interface_toast = { title = ep3_laamp_flavour_ewan.4081.b.tt.failure ep3_laamp_flavour_ewan_4081_duel_loss_effect = yes } } } stress_impact = { greedy = medium_stress_impact_loss callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss compassionate = medium_stress_impact_gain generous = major_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_greed = 1 ai_compassion = -0.5 } } } # Martial duel to force them back. option = { name = ep3_laamp_flavour_ewan.4081.c ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { SKILL = martial VICTORY_LOC = ep3_laamp_flavour_ewan.4081.c.tt.success DEFEAT_LOC = ep3_laamp_flavour_ewan.4081.c.tt.failure } stress_impact = { wrathful = medium_stress_impact_loss callous = minor_stress_impact_loss sadistic = minor_stress_impact_loss calm = minor_stress_impact_gain compassionate = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 ai_compassion = -0.5 } } } # Accept and let them take X provisions. option = { name = ep3_laamp_flavour_ewan.4081.d trigger = { domicile.provisions >= scope:provisions_loss } show_as_unavailable = { always = yes } add_prestige = miniscule_prestige_loss domicile = { change_provisions = { value = scope:provisions_loss multiply = -1 } } stress_impact = { calm = miniscule_stress_impact_loss generous = miniscule_stress_impact_loss compassionate = miniscule_stress_impact_loss callous = minor_stress_impact_gain sadistic = minor_stress_impact_gain greedy = minor_stress_impact_gain wrathful = minor_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = -1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes # Clean up our peasant. scope:local_peasant ?= { silent_disappearance_effect = yes } } } ################################################## # Night Attack # by Ewan Cowhig Croft # 4091 - 4100 ################################################## scripted_effect ep3_laamp_flavour_ewan_4091_roll_duel_effect = { duel = { skill = $SKILL$ value = very_high_skill_rating # Victory! 50 = { compare_modifier = { value = scope:duel_value multiplier = 3.5 min = -49 } min = 5 desc = $SUCCESS_LOC$ send_interface_toast = { title = $SUCCESS_LOC$ add_prestige = medium_prestige_gain } } # Defeat. 50 = { compare_modifier = { value = scope:duel_value multiplier = -3.5 min = -49 } min = 5 desc = $FAILURE_LOC$ send_interface_toast = { title = $FAILURE_LOC$ increase_wounds_effect = { REASON = battle } random_courtier = { limit = { location = root.location } increase_wounds_effect = { REASON = battle } save_temporary_scope_as = courtier_1 } random_courtier = { limit = { location = root.location this != scope:courtier_1 } increase_wounds_effect = { REASON = battle } save_temporary_scope_as = courtier_2 } random_courtier = { limit = { location = root.location this != scope:courtier_1 this != scope:courtier_2 } increase_wounds_effect = { REASON = battle } } } } } } # Unknown group assaults your camp one evening. ep3_laamp_flavour_ewan.4091 = { type = character_event title = ep3_laamp_flavour_ewan.4091.t desc = ep3_laamp_flavour_ewan.4091.desc theme = widgetless_travel_danger left_portrait = { character = root animation = shock } right_portrait = { character = scope:retainer animation = aggressive_sword outfit_tags = { military_outfit } hide_info = yes } override_background = { reference = ep3_campfire } trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_available_travelling_adult = yes current_travel_plan = { is_travel_with_domicile = yes } # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_4091 } } # Must have the correct travel danger type. location = { OR = { travel_danger_type = { travel_plan = root.current_travel_plan type = owner_opinion } travel_danger_type = { travel_plan = root.current_travel_plan type = county_control } } } # Plus rule out anyone who'd have likely have a palisade. NOT = { domicile = { has_domicile_building = camp_perimeter_palisade } } } immediate = { # Slow down in MP. mp_delay_travel_plan = { DAYS = 90 } if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_4091 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_4091 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Increment XP. traveler_danger_xp_effect = { MIN = 1 MAX = 3 } # Save our county for loc. location.county = { save_scope_as = current_county } # Create a bandit to look annoyed for players. if = { limit = { is_ai = no } hidden_effect = { create_character = { template = mercenary employer = root.location.county.holder culture = root.location.culture faith = root.location.county.holder.faith gender_female_chance = root_soldier_female_chance save_scope_as = retainer } } } } # Martial duel to fight them off. option = { name = ep3_laamp_flavour_ewan.4091.a ep3_laamp_flavour_ewan_4091_roll_duel_effect = { SKILL = martial SUCCESS_LOC = ep3_laamp_flavour_ewan.4091.a.tt.success FAILURE_LOC = ep3_laamp_flavour_ewan.4091.a.tt.failure } # No stress here. ai_chance = { base = 1 ai_value_modifier = { ai_rationality = 1 } } } # Prowess duel to launch yourself into the frey. option = { name = ep3_laamp_flavour_ewan.4091.b ep3_laamp_flavour_ewan_4091_roll_duel_effect = { SKILL = prowess SUCCESS_LOC = ep3_laamp_flavour_ewan.4091.b.tt.success FAILURE_LOC = ep3_laamp_flavour_ewan.4091.b.tt.failure } stress_impact = { brave = minor_stress_impact_loss craven = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = 1 } } } # Hide from the chaos. option = { name = ep3_laamp_flavour_ewan.4091.c every_courtier = { limit = { location = root.location NOT = { has_trait = craven } } custom = ep3_laamp_flavour_ewan.4091.c.every_non_craven_follower add_opinion = { target = root modifier = disgusted_opinion opinion = -25 } } stress_impact = { craven = minor_stress_impact_loss brave = medium_stress_impact_gain } ai_chance = { base = 1 ai_value_modifier = { ai_boldness = -1 } } } # If we're slowed due to multi, resume travel. after = { mp_resume_travel_plan = yes } } ################################################## # LOANED COURTIER RETURNS ################################################## # Core Tombola # by Ewan Cowhig Croft # 9501 - 9510 ################################################## scripted_trigger ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = { culture = { OR = { this != prev.host.culture this != prev.host.capital_county.culture } } } scripted_trigger ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { num_sinful_traits = { value <= 0 target = $FAITH$ } num_virtuous_traits = { value >= 1 target = $FAITH$ } } scripted_trigger ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = { NOT = { has_character_flag = ai_will_not_convert } faith = { NOR = { this = prev.host.faith this = prev.host.capital_county.faith } } # Cynics don't care enough to switch ## Or rather, they switch for entirely cynical reasons and we're portraying this as more of a finding-your-true-self thing. NOT = { has_trait = cynical } # Religious characters compare what faiths fit them best. OR = { # Non-zealous characters will consider a switch if they're not virtuous but would be in a new faith. AND = { NOT = { has_trait = zealous } num_virtuous_traits = { value <= 0 target = faith } OR = { ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.faith } ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.capital_county.faith } } } # Zealous characters will _also_ switch, but also need to feel like they're sinful in their current faith. AND = { has_trait = zealous num_sinful_traits = { value >= 1 target = faith } num_virtuous_traits = { value <= 0 target = faith } OR = { ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.faith } ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.capital_county.faith } } } } } # Takes care of returning to camp after a period away. ep3_laamp_flavour_ewan.9501 = { hidden = yes trigger = { is_imprisoned = no scope:visitor = { is_alive = yes is_imprisoned = no is_incapable = no } } on_trigger_fail = { # Dead. if = { limit = { scope:visitor = { is_alive = no } } trigger_event = ep3_laamp_flavour_ewan.9531 } # Imprisoned. else_if = { limit = { scope:visitor = { is_imprisoned = yes } } trigger_event = ep3_laamp_flavour_ewan.9532 } # Incapable. else_if = { limit = { scope:visitor = { is_incapable = yes } } trigger_event = ep3_laamp_flavour_ewan.9533 } # If we're imprisoned, just return them to camp with no fanfare. else_if = { limit = { is_imprisoned = yes } scope:visitor = { return_to_court = yes } } # Fallback (we don't know what's happened to them). else = { trigger_event = ep3_laamp_flavour_ewan.9534 } } immediate = { # Wherever they were, we give them the language of the place & their soon-to-be-former host if they didn't speak them already. scope:visitor = { # Prio the host's language. if = { limit = { NOT = { knows_language_of_culture = host.culture } current_extra_languages < language_soft_cap } learn_language_of_culture = host.culture } # Then the local tongue. if = { limit = { NOT = { knows_language_of_culture = host.capital_county.culture } current_extra_languages < language_soft_cap } learn_language_of_culture = host.capital_county.culture } # Nab our host scopes so we can reference them in loc. host = { save_scope_as = host capital_county = { save_scope_as = capital } } } # Next, determine what event we get when they return. ## Try to have these add up to 100%. random_list = { # They're the same as ever. 60 = { trigger_event = ep3_laamp_flavour_ewan.9511 # Boosts for other entries come out of this one, so we reduce the likelihood based on modifiers further down. modifier = { add = -20 scope:visitor = { has_trait = gregarious } } modifier = { add = -60 scope:visitor = { has_trait = zealous ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes } } } # They've learnt a thing or two. 25 = { trigger_event = ep3_laamp_flavour_ewan.9512 } # They have taken on the local culture. 5 = { trigger = { scope:visitor = { ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = yes NOT = { has_character_flag = laamp_follower_tombola_changed_culture_flag } } } scope:visitor = { add_character_flag = laamp_follower_tombola_changed_culture_flag } trigger_event = ep3_laamp_flavour_ewan.9521 # More likely for gregarious characters. modifier = { add = 20 scope:visitor = { has_trait = gregarious } } # Less likely for shy characters. modifier = { add = -5 scope:visitor = { has_trait = shy } } } # They have adopted the local faith. 5 = { # Zealous characters won't ever consider this unless they have a sin-virtue mismatch. trigger = { scope:visitor = { ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes NOT = { has_character_flag = laamp_follower_tombola_changed_faith_flag } } } scope:visitor = { add_character_flag = laamp_follower_tombola_changed_faith_flag } trigger_event = ep3_laamp_flavour_ewan.9522 # If zealous characters are valid for this, then it means the new faith is a much better fit, so we weight them up drastically. modifier = { add = 60 scope:visitor = { has_trait = zealous } } } # They've taken both the culture and the faith 5 = { trigger = { scope:visitor = { ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = yes # Zealous characters won't ever consider this unless they have a sin-virtue mismatch. ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes NOR = { has_character_flag = laamp_follower_tombola_changed_culture_flag has_character_flag = laamp_follower_tombola_changed_faith_flag } } } scope:visitor = { add_character_flag = laamp_follower_tombola_changed_culture_flag add_character_flag = laamp_follower_tombola_changed_faith_flag } trigger_event = ep3_laamp_flavour_ewan.9523 # More likely for gregarious characters. modifier = { add = 20 scope:visitor = { has_trait = gregarious } } # Less likely for shy characters. modifier = { add = -5 scope:visitor = { has_trait = shy } } # If zealous characters are valid for this, then it means the new faith is a much better fit, so we weight them up drastically. modifier = { add = 60 scope:visitor = { has_trait = zealous } } } } } } ################################################## # Follower Returned # by Ewan Cowhig Croft # 9511 - 9520 ################################################## scripted_effect ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = { stress_impact = { sadistic = minor_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = medium_stress_impact_gain } } # Follower returns, the same as when they left. ep3_laamp_flavour_ewan.9511 = { type = character_event title = ep3_laamp_flavour_ewan.9511.t desc = { desc = ep3_laamp_flavour_ewan.9511.desc.intro first_valid = { triggered_desc = { trigger = { exists = scope:visitor_spouse } desc = ep3_laamp_flavour_ewan.9511.desc.spouse.got_married } desc = ep3_laamp_flavour_ewan.9511.desc.spouse.nope } desc = ep3_laamp_flavour_ewan.9511.desc.outro } theme = laamp left_portrait = { character = root animation = personality_honorable } right_portrait = { character = scope:visitor animation = happiness } lower_right_portrait = scope:visitor_spouse override_background = { reference = ep3_campfire } immediate = { scope:visitor = { # Have they have gotten married to a local? if = { limit = { can_marry_trigger = yes OR = { NOT = { has_sexuality = homosexual } allowed_to_marry_same_sex_trigger = yes } might_cheat_on_every_partner_trigger = yes } random = { chance = { value = 20 # Reduce this a little for each existing marriage. every_spouse = { add = -5 } # Gregarious characters go out more. if = { limit = { has_trait = gregarious } add = 10 } # Lustful characters are potentially in the market. if = { limit = { has_trait = gregarious } add = 5 } } # Create our new char. save_scope_as = attraction_check create_character = { employer = root age = { value = scope:visitor.age integer_range = { min = -5 max = 5 } min = 20 max = 85 } gender_female_chance = scope_attraction_based_female_chance culture = scope:visitor.host.capital_county.culture faith = scope:visitor.host.capital_county.faith dynasty = none diplomacy = { min_template_low_skill max_template_medium_skill } martial = { min_template_low_skill max_template_medium_skill } stewardship = { min_template_low_skill max_template_medium_skill } intrigue = { min_template_low_skill max_template_medium_skill } learning = { min_template_low_skill max_template_medium_skill } prowess = { min_template_low_skill max_template_medium_skill } random_traits = no # Education random_traits_list = { count = 1 education_diplomacy_2 = {} education_martial_2 = {} education_stewardship_2 = {} education_intrigue_2 = {} education_learning_2 = {} } # Personality traits that match their partner random_traits_list = { count = 2 lustful = { trigger = { scope:visitor = { has_trait = lustful } } } chaste = { trigger = { scope:visitor = { has_trait = chaste } } } gluttonous = { trigger = { scope:visitor = { has_trait = gluttonous } } } temperate = { trigger = { scope:visitor = { has_trait = temperate } } } greedy = { trigger = { scope:visitor = { has_trait = greedy } } } generous = { trigger = { scope:visitor = { has_trait = generous } } } lazy = { trigger = { scope:visitor = { has_trait = lazy } } } diligent = { trigger = { scope:visitor = { has_trait = diligent } } } wrathful = { trigger = { scope:visitor = { has_trait = wrathful } } } calm = { trigger = { scope:visitor = { has_trait = calm } } } patient = { trigger = { scope:visitor = { has_trait = patient } } } impatient = { trigger = { scope:visitor = { has_trait = impatient } } } arrogant = { trigger = { scope:visitor = { has_trait = arrogant } } } humble = { trigger = { scope:visitor = { has_trait = humble } } } deceitful = { trigger = { scope:visitor = { has_trait = deceitful } } } honest = { trigger = { scope:visitor = { has_trait = honest } } } craven = { trigger = { scope:visitor = { has_trait = craven } } } brave = { trigger = { scope:visitor = { has_trait = brave } } } shy = { trigger = { scope:visitor = { has_trait = shy } } } gregarious = { trigger = { scope:visitor = { has_trait = gregarious } } } ambitious = { trigger = { scope:visitor = { has_trait = ambitious } } } content = { trigger = { scope:visitor = { has_trait = content } } } arbitrary = { trigger = { scope:visitor = { has_trait = arbitrary } } } just = { trigger = { scope:visitor = { has_trait = just } } } cynical = { trigger = { scope:visitor = { has_trait = cynical } } } zealous = { trigger = { scope:visitor = { has_trait = zealous } } } paranoid = { trigger = { scope:visitor = { has_trait = paranoid } } } trusting = { trigger = { scope:visitor = { has_trait = trusting } } } compassionate = { trigger = { scope:visitor = { has_trait = compassionate } } } callous = { trigger = { scope:visitor = { has_trait = callous } } } sadistic = { trigger = { scope:visitor = { has_trait = sadistic } } } stubborn = { trigger = { scope:visitor = { has_trait = stubborn } } } fickle = { trigger = { scope:visitor = { has_trait = fickle } } } vengeful = { trigger = { scope:visitor = { has_trait = vengeful } } } forgiving = { trigger = { scope:visitor = { has_trait = forgiving } } } eccentric = { trigger = { scope:visitor = { has_trait = eccentric } } } } # +1 random personality trait random_traits_list = { count = 1 lustful = {} chaste = {} gluttonous = {} temperate = {} greedy = {} generous = {} lazy = {} diligent = {} wrathful = {} calm = {} patient = {} impatient = {} arrogant = {} humble = {} deceitful = {} honest = {} craven = {} brave = {} shy = {} gregarious = {} ambitious = {} content = {} arbitrary = {} just = {} cynical = {} zealous = {} paranoid = {} trusting = {} compassionate = {} callous = {} sadistic = {} stubborn = {} fickle = {} vengeful = {} forgiving = {} eccentric = {} } # Somethings to spice 'em up. random_traits_list = { count = { 1 2 } # Lifestyles lifestyle_reveler = {} lifestyle_blademaster = {} lifestyle_hunter = {} lifestyle_mystic = {} lifestyle_physician = {} lifestyle_herbalist = {} lifestyle_gardener = {} # Stress drunkard = {} rakish = {} reclusive = {} irritable = {} flagellant = {} profligate = {} improvident = {} contrite = {} comfort_eater = {} inappetetic = {} journaller = {} confider = {} athletic = {} # Fame lifestyle_poet = {} loyal = {} disloyal = {} gallowsbait = {} # Health depressed_genetic = {} lunatic_genetic = {} possessed_genetic = {} one_eyed = {} one_legged = {} disfigured = {} # Genetic beauty_bad_1 = {} beauty_good_1 = {} intellect_bad_1 = {} intellect_good_1 = {} physique_bad_1 = {} physique_good_1 = {} clubfooted = {} hunchbacked = {} lisping = {} stuttering = {} dwarf = {} giant = {} spindly = {} scaly = {} albino = {} wheezing = {} bleeder = {} infertile = {} # Natural fecund = {} strong = {} shrewd = {} } save_scope_as = visitor_spouse after_creation = { set_sexuality = bisexual } } # Alright, now let's marry 'em up. if = { limit = { is_female = yes } marry_matrilineal = scope:visitor_spouse } else = { marry = scope:visitor_spouse } # Aaaand make sure that the marriage is a happy one. hidden_effect = { set_random_lover_reason = { TARGET = scope:visitor_spouse } add_opinion = { target = scope:visitor_spouse modifier = love_opinion opinion = 100 } reverse_add_opinion = { target = scope:visitor_spouse modifier = love_opinion opinion = 100 } } } } # And send 'em home. return_to_court = yes } } # Welcome, welcome! option = { name = ep3_laamp_flavour_ewan.9511.a # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # _Married?_ I think not! option = { name = ep3_laamp_flavour_ewan.9511.b trigger = { exists = scope:visitor_spouse } # Divorce. scope:visitor = { divorce = scope:visitor_spouse } # Banish them. remove_courtier_or_guest = { character = scope:visitor_spouse new_location = scope:host.capital_county.title_province } # And apply some opinions. scope:visitor = { add_opinion = { modifier = forced_divorce_opinion target = root } } scope:visitor_spouse = { add_opinion = { modifier = forced_divorce_opinion target = root } } stress_impact = { sadistic = major_stress_impact_loss callous = miniscule_stress_impact_loss compassionate = major_stress_impact_gain } # The AI should never take this option. ai_chance = { base = 0 } } # You are no longer welcome with us. option = { name = ep3_laamp_flavour_ewan.9511.c scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } # Follower returns and they've learnt a thing or two. ep3_laamp_flavour_ewan.9512 = { type = character_event title = ep3_laamp_flavour_ewan.9512.t desc = ep3_laamp_flavour_ewan.9512.desc theme = laamp left_portrait = { character = root animation = happiness } right_portrait = { character = scope:visitor triggered_animation = { trigger = { scope:skill = flag:diplomacy } animation = chancellor } triggered_animation = { trigger = { OR = { scope:skill = flag:martial scope:skill = flag:prowess } } animation = marshal } triggered_animation = { trigger = { scope:skill = flag:stewardship } animation = steward } triggered_animation = { trigger = { scope:skill = flag:intrigue } animation = spymaster } triggered_animation = { trigger = { scope:skill = flag:learning } animation = chaplain } animation = hero_flex } override_background = { reference = ep3_campfire } immediate = { scope:visitor = { # Sort how much skill we'll be adding. save_scope_value_as = { name = skill_gain value = { integer_range = { min = 2 max = 4 } if = { limit = { has_trait = diligent } add = 1 } else_if = { limit = { has_trait = lazy } add = -1 } } } # Now add it to the highest skill that scope:visitor has. switch = { trigger = highest_skill diplomacy = { add_diplomacy_skill = scope:skill_gain } martial = { add_martial_skill = scope:skill_gain } stewardship = { add_stewardship_skill = scope:skill_gain } intrigue = { add_intrigue_skill = scope:skill_gain } learning = { add_learning_skill = scope:skill_gain } } # Finally, return them to court. return_to_court = yes } } # How you've improved, scope:visitor! option = { name = ep3_laamp_flavour_ewan.9512.a # No effect. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Begone, vagabond. option = { name = ep3_laamp_flavour_ewan.9512.b scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } ################################################## # Not As I Remember You # by Ewan Cowhig Croft # 9521 - 9530 ################################################## scripted_effect ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = { scope:visitor = { culture = { save_scope_as = old_culture } random_list = { 100 = { trigger = { this != host.culture } set_culture = host.culture save_scope_value_as = { name = culture_change value = flag:host } } 100 = { trigger = { this != host.capital_county.culture } set_culture = host.capital_county.culture save_scope_value_as = { name = culture_change value = flag:capital } } } culture = { save_scope_as = new_culture } } } scripted_effect ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = { # Sort our reactions. ## They changed away from our culture. if = { limit = { culture = scope:old_culture } save_scope_value_as = { name = culture_reaction value = flag:changed_away } } ## They changed _to_ our culture. else_if = { limit = { culture = scope:new_culture } save_scope_value_as = { name = culture_reaction value = flag:changed_to } } ## They simply changed culture. else = { save_scope_value_as = { name = culture_reaction value = flag:uninvolved } } } scripted_effect ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = { # They've learnt a lot from their new ethos (even if it was the same as their old one). ## First, randomise our values. save_scope_value_as = { name = skill_2 value = { integer_range = { min = 2 max = 5 } } } save_scope_value_as = { name = skill_1 value = { integer_range = { min = { value = scope:skill_2 add = 1 } max = 6 } } } ## Then apply them. switch = { trigger = has_cultural_pillar ethos_bellicose = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.martial add_martial_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.prowess add_prowess_skill = scope:skill_2 } } ethos_stoic = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.martial add_martial_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.stewardship add_stewardship_skill = scope:skill_2 } } ethos_bureaucratic = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.stewardship add_stewardship_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.learning add_learning_skill = scope:skill_2 } } ethos_spiritual = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.learning add_learning_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.diplomacy add_diplomacy_skill = scope:skill_2 } } ethos_courtly = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.diplomacy add_diplomacy_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.intrigue add_intrigue_skill = scope:skill_2 } } ethos_egalitarian = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.diplomacy add_diplomacy_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.stewardship add_stewardship_skill = scope:skill_2 } } ethos_communal = { custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.stewardship add_stewardship_skill = scope:skill_1 } custom_tooltip = { text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.learning add_learning_skill = scope:skill_2 } } } } # Follower has taken on the culture of the place they stayed at. ep3_laamp_flavour_ewan.9521 = { type = character_event title = ep3_laamp_flavour_ewan.9521.t desc = { desc = ep3_laamp_flavour_ewan.9521.desc.intro first_valid = { triggered_desc = { trigger = { scope:culture_change = flag:host } desc = ep3_laamp_flavour_ewan.9521.desc.source.host } triggered_desc = { trigger = { scope:culture_change = flag:capital } desc = ep3_laamp_flavour_ewan.9521.desc.source.capital } } first_valid = { triggered_desc = { trigger = { scope:culture_reaction = flag:changed_away } desc = ep3_laamp_flavour_ewan.9521.desc.reaction.changed_away } triggered_desc = { trigger = { scope:culture_reaction = flag:changed_to } desc = ep3_laamp_flavour_ewan.9521.desc.reaction.changed_to } triggered_desc = { trigger = { scope:culture_reaction = flag:uninvolved } desc = ep3_laamp_flavour_ewan.9521.desc.reaction.uninvolved } } desc = ep3_laamp_flavour_ewan.9521.desc.outro } theme = laamp left_portrait = { character = root triggered_animation = { trigger = { scope:culture_reaction = flag:changed_away } animation = shock } triggered_animation = { trigger = { scope:culture_reaction = flag:changed_to } animation = admiration } triggered_animation = { trigger = { scope:culture_reaction = flag:uninvolved } animation = personality_forgiving } } right_portrait = { character = scope:visitor animation = personality_bold } override_background = { reference = ep3_campfire } immediate = { # Configure scope:visitor's culture change. ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = yes # Sort our reactions. ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = yes # They've learnt a lot from their new ethos (even if it was the same as their old one). ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = yes # Bring them home. scope:visitor = { return_to_court = yes } } # Accept them back. option = { name = { text = { first_valid = { triggered_desc = { trigger = { scope:culture_reaction = flag:changed_away } desc = ep3_laamp_flavour_ewan.9521.a.changed_away } triggered_desc = { trigger = { scope:culture_reaction = flag:changed_to } desc = ep3_laamp_flavour_ewan.9521.a.changed_to } triggered_desc = { trigger = { scope:culture_reaction = flag:uninvolved } desc = ep3_laamp_flavour_ewan.9521.a.uninvolved } } } } # No effects. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # You're not wanted any more, scope:visitor. option = { name = ep3_laamp_flavour_ewan.9521.b scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } scripted_effect ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = { scope:visitor = { faith = { save_scope_as = old_faith } random_list = { 100 = { trigger = { this != host.faith } set_character_faith = host.faith save_scope_value_as = { name = faith_change value = flag:host } } 100 = { trigger = { this != host.capital_county.faith } set_character_faith = host.capital_county.faith save_scope_value_as = { name = faith_change value = flag:capital } } } faith = { save_scope_as = new_faith } } } scripted_effect ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = { # Sort our reactions. ## We are cynical. if = { limit = { has_trait = cynical } save_scope_value_as = { name = faith_reaction value = flag:give_a_shit } } ## They changed away from our faith. if = { limit = { faith = scope:old_faith } save_scope_value_as = { name = faith_reaction value = flag:changed_away } } ## They changed _to_ our faith. else_if = { limit = { faith = scope:new_faith } save_scope_value_as = { name = faith_reaction value = flag:changed_to_ours } } ## They changed to a faith we love. else_if = { limit = { faith = scope:new_faith } save_scope_value_as = { name = faith_reaction value = flag:changed_to_lovable } } ## They changed to a faith we tolerate. else_if = { limit = { faith = scope:new_faith } save_scope_value_as = { name = faith_reaction value = flag:changed_to_acceptable } } ## They simply changed faith. else = { save_scope_value_as = { name = faith_reaction value = flag:uninvolved } } } # Follower has taken on the faith of the place they stayed at. ep3_laamp_flavour_ewan.9522 = { type = character_event title = ep3_laamp_flavour_ewan.9522.t desc = { desc = ep3_laamp_flavour_ewan.9522.desc.intro first_valid = { triggered_desc = { trigger = { scope:faith_change = flag:host } desc = ep3_laamp_flavour_ewan.9522.desc.source.host } triggered_desc = { trigger = { scope:faith_change = flag:capital } desc = ep3_laamp_flavour_ewan.9522.desc.source.capital } } desc = ep3_laamp_flavour_ewan.9522.desc.source.bridge first_valid = { triggered_desc = { trigger = { scope:faith_reaction = flag:give_a_shit } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.give_a_shit } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_away } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_away } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_ours } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_ours } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_lovable } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_lovable } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_acceptable } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_acceptable } triggered_desc = { trigger = { scope:faith_reaction = flag:uninvolved } desc = ep3_laamp_flavour_ewan.9522.desc.reaction.uninvolved } } desc = ep3_laamp_flavour_ewan.9522.desc.outro } theme = laamp left_portrait = { character = root triggered_animation = { trigger = { scope:faith_reaction = flag:give_a_shit } animation = dismissal } triggered_animation = { trigger = { scope:faith_reaction = flag:changed_away } animation = shock } triggered_animation = { trigger = { OR = { scope:faith_reaction = flag:changed_to_ours scope:faith_reaction = flag:changed_to_lovable scope:faith_reaction = flag:changed_to_acceptable } } animation = admiration } triggered_animation = { trigger = { scope:faith_reaction = flag:uninvolved } animation = personality_forgiving } } right_portrait = { character = scope:visitor animation = personality_zealous } override_background = { reference = ep3_campfire } immediate = { # Configure scope:visitor's faith change. ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = yes # Sort our reactions. ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = yes # The conversion process involves a lot of education. scope:visitor = { add_learning_skill = { integer_range = { min = 3 max = 8 } } } # Bring them home. scope:visitor = { return_to_court = yes } } # Zealous, same faith: welcome, SisterBrother! option = { name = ep3_laamp_flavour_ewan.9522.a trigger = { has_trait = zealous faith = scope:visitor.faith } trait = zealous add_piety = minor_piety_gain stress_impact = { zealous = minor_stress_impact_loss } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Zealous, other: But why convert to scope:new_faith... option = { name = ep3_laamp_flavour_ewan.9522.b trigger = { has_trait = zealous NOR = { faith = scope:visitor.faith faith = scope:old_faith } } trait = zealous # No effects. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Zealous, converted away: What have you done, you fool?! option = { name = ep3_laamp_flavour_ewan.9522.c trigger = { has_trait = zealous faith = scope:old_faith } trait = zealous # No effects. stress_impact = { zealous = minor_stress_impact_gain } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Cynical: scope:old_faith, scope:new_faith, you're still scope:visitor to me. option = { name = ep3_laamp_flavour_ewan.9522.d trigger = { has_trait = cynical } reverse_add_opinion = { target = scope:visitor modifier = respect_opinion opinion = 50 } if = { limit = { can_set_relation_potential_friend_trigger = { CHARACTER = scope:visitor } } set_relation_potential_friend = scope:visitor } stress_impact = { cynical = medium_stress_impact_loss } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Good to have you back, scope:visitor. option = { name = ep3_laamp_flavour_ewan.9522.e trigger = { NOR = { has_trait = zealous has_trait = cynical } } # No effect. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # You are no longer welcome here. option = { name = ep3_laamp_flavour_ewan.9522.f scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } # Follower has taken on the faith and culture of the place they stayed at. ep3_laamp_flavour_ewan.9523 = { type = character_event title = ep3_laamp_flavour_ewan.9523.t desc = { desc = ep3_laamp_flavour_ewan.9523.desc.intro first_valid = { triggered_desc = { trigger = { scope:faith_change = flag:host } desc = ep3_laamp_flavour_ewan.9523.desc.source.host } triggered_desc = { trigger = { scope:faith_change = flag:capital } desc = ep3_laamp_flavour_ewan.9523.desc.source.capital } } desc = ep3_laamp_flavour_ewan.9523.desc.source.bridge first_valid = { triggered_desc = { trigger = { scope:faith_reaction = flag:give_a_shit } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.give_a_shit } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_away } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_away } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_ours } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_ours } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_lovable } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_lovable } triggered_desc = { trigger = { scope:faith_reaction = flag:changed_to_acceptable } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_acceptable } triggered_desc = { trigger = { scope:faith_reaction = flag:uninvolved } desc = ep3_laamp_flavour_ewan.9523.desc.reaction.uninvolved } } desc = ep3_laamp_flavour_ewan.9523.desc.outro } theme = laamp # We dupe the faith logic for portraits, because it's the more important of the two & because _Jesus H. Christ_ the permutations otherwise. left_portrait = { character = root triggered_animation = { trigger = { scope:faith_reaction = flag:give_a_shit } animation = dismissal } triggered_animation = { trigger = { scope:faith_reaction = flag:changed_away } animation = shock } triggered_animation = { trigger = { OR = { scope:faith_reaction = flag:changed_to_ours scope:faith_reaction = flag:changed_to_lovable scope:faith_reaction = flag:changed_to_acceptable } } animation = admiration } triggered_animation = { trigger = { scope:faith_reaction = flag:uninvolved } animation = personality_forgiving } } right_portrait = { character = scope:visitor animation = personality_zealous } override_background = { reference = ep3_campfire } immediate = { # Configure scope:visitor's changes. ## Culture. ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = yes ## Faith. ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = yes # Sort our reactions. ## Culture. ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = yes ## Faith. ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = yes # They've learnt a lot from their new ethos (even if it was the same as their old one). ## Ignore a bonus from conversion — they're already getting a substantial one from this change that's more flavourful. ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = yes # Bring them home. scope:visitor = { return_to_court = yes } } # Zealous, same faith: welcome, SisterBrother! option = { name = ep3_laamp_flavour_ewan.9523.a trigger = { has_trait = zealous faith = scope:visitor.faith } trait = zealous add_piety = minor_piety_gain stress_impact = { zealous = minor_stress_impact_loss } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Zealous, other: But why convert to scope:new_faith... option = { name = ep3_laamp_flavour_ewan.9523.b trigger = { has_trait = zealous NOR = { faith = scope:visitor.faith faith = scope:old_faith } } trait = zealous # No effects. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Zealous, converted away: What have you done, you fool?! option = { name = ep3_laamp_flavour_ewan.9523.c trigger = { has_trait = zealous faith = scope:old_faith } trait = zealous # No effects. stress_impact = { zealous = minor_stress_impact_gain } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Cynical: scope:old_faith, scope:new_faith, you're still scope:visitor to me. option = { name = ep3_laamp_flavour_ewan.9523.d trigger = { has_trait = cynical } reverse_add_opinion = { target = scope:visitor modifier = respect_opinion opinion = 50 } if = { limit = { can_set_relation_potential_friend_trigger = { CHARACTER = scope:visitor } } set_relation_potential_friend = scope:visitor } stress_impact = { cynical = medium_stress_impact_loss } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Good to have you back, scope:visitor. option = { name = ep3_laamp_flavour_ewan.9523.e trigger = { NOR = { has_trait = zealous has_trait = cynical } } # No effect. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # You are no longer welcome here. option = { name = ep3_laamp_flavour_ewan.9523.f scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } ################################################## # Missing Follower # by Ewan Cowhig Croft # 9531 - 9540 ################################################## # Follower has died whilst away from camp. ep3_laamp_flavour_ewan.9531 = { type = character_event title = ep3_laamp_flavour_ewan.9531.t desc = ep3_laamp_flavour_ewan.9531.desc theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:visitor animation = map_fear } override_background = { reference = ep3_campfire } trigger = { # Make sure that this isn't a character who we would've been informed about the death of already (i.e., a spouse or family — relations are lost on death already so we have to bite the bullet there without doing something awful with variables). NOR = { is_spouse_of_even_if_dead = scope:visitor is_close_or_extended_family_of = scope:visitor } } immediate = { custom_tooltip = ep3_laamp_flavour_ewan.9531.tt.follower_is_dead hidden_effect = { scope:visitor = { return_to_court = yes } } } # To think we shall never see HerHim again... option = { name = ep3_laamp_flavour_ewan.9531.a # No effect. # No stress here. # The AI should only take this if it's the _only_ option. ai_chance = { base = 0 } } # Callous: eh. option = { name = ep3_laamp_flavour_ewan.9531.b trigger = { has_trait = callous } trait = callous stress_impact = { callous = major_stress_impact_loss } # If you're callous, take the stress loss. ai_chance = { base = 100 } } } # Follower has been imprisoned away from camp. ep3_laamp_flavour_ewan.9532 = { type = character_event title = ep3_laamp_flavour_ewan.9532.t desc = ep3_laamp_flavour_ewan.9532.desc theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:visitor animation = prisondungeon } override_background = { reference = ep3_campfire } trigger = { root != scope:visitor.imprisoner } on_trigger_fail = { scope:visitor = { return_to_court = yes } } immediate = { scope:visitor.imprisoner = { save_scope_as = imprisoner } show_as_tooltip = { rightfully_imprison_character_less_verbose_effect = { TARGET = scope:visitor IMPRISONER = scope:imprisoner } } hidden_effect = { scope:visitor = { return_to_court = yes } } } # We must free scope:visitor! option = { name = ep3_laamp_flavour_ewan.9532.a # No effects. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Scope:imprisoner can keep HerHim for all I care. option = { name = ep3_laamp_flavour_ewan.9532.b remove_courtier_or_guest = scope:visitor ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } # Follower has become incapable whilst away from camp. ep3_laamp_flavour_ewan.9533 = { type = character_event title = ep3_laamp_flavour_ewan.9533.t desc = ep3_laamp_flavour_ewan.9533.desc theme = laamp left_portrait = { character = root animation = shock } right_portrait = { character = scope:visitor animation = paranoia } override_background = { reference = ep3_campfire } immediate = { custom_tooltip = ep3_laamp_flavour_ewan.9533.tt.follower_is_incapable scope:visitor = { return_to_court = yes } } # What on Earth happened to HerHim? option = { name = ep3_laamp_flavour_ewan.9533.a trigger = { NOT = { has_trait = compassionate } } # No effect. # No stress here. # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Compassionate: worry not, scope:visitor, we shall care for you. option = { name = ep3_laamp_flavour_ewan.9533.b trigger = { has_trait = compassionate } trait = compassionate reverse_add_opinion = { target = scope:visitor modifier = feast_helped_me_opinion opinion = 50 } every_courtier = { custom = custom.every_non_callous_or_sadistic_follower limit = { NOR = { has_trait = callous has_trait = sadistic } } add_opinion = { target = root modifier = respect_opinion opinion = 20 } } stress_impact = { compassionate = major_stress_impact_loss } # The AI should always just uncritically take people back. ai_chance = { base = 100 } } # Drive this imbecile away. option = { name = ep3_laamp_flavour_ewan.9533.c scope:visitor = { select_and_move_to_pool_effect = yes } ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes # The AI should never take this option. ai_chance = { base = 0 } } } # Follower never comes home. ep3_laamp_flavour_ewan.9534 = { type = character_event title = ep3_laamp_flavour_ewan.9534.t desc = ep3_laamp_flavour_ewan.9534.desc theme = laamp left_portrait = { character = root animation = worry } right_portrait = { character = scope:visitor animation = map_disbelief } override_background = { reference = ep3_campfire } immediate = { custom_tooltip = ep3_laamp_flavour_ewan.9534.tt.follower_is_lost hidden_effect = { remove_courtier_or_guest = { character = scope:visitor new_location = scope:visitor.location } } } # I wonder what could have happened to HerHim... option = { name = ep3_laamp_flavour_ewan.9534.a # No effects. # No stress, no AI. } } ################################################## # Camp Activity Feed Message # by Ewan Cowhig Croft # 9541 - 9550 ################################################## scripted_trigger ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = { is_adult = yes is_available_allow_travelling = yes } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes has_any_nickname = no } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes ep3_laamp_flavour_ewan_no_dog_trigger = yes } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes ep3_laamp_flavour_ewan_no_cat_trigger = yes } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = { this != scope:follower_1 ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes "trait_compatibility(scope:follower_1)" >= low_positive_trait_compatibility NOT = { has_important_relationship_with_character_trigger = { CHARACTER = scope:follower_1 } } } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = { this != scope:follower_1 ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes "trait_compatibility(scope:follower_1)" <= low_negative_trait_compatibility NOT = { has_important_relationship_with_character_trigger = { CHARACTER = scope:follower_1 } } } scripted_trigger ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes stress >= 1 } # Something minor happens at camp. ep3_laamp_flavour_ewan.9541 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_9541 } } # Plus make sure _someone_ is valid for something. any_courtier = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_9541 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_9541 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_shorter } } # Grab a courtier for our relation effect triggers. random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } save_scope_as = follower_1 } # Right, determine what's going to be happening. random_list = { # Nicknames. 500 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = yes } } random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = yes } weight = { laamp_weight_up_minor_chars_modifier = yes } save_scope_as = eponymee } hidden_effect = { scope:eponymee = { assign_random_nickname_effect = yes hidden_effect = { if = { limit = { has_any_nickname = no } set_random_negative_nickname_effect = yes } } } } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.nickname_gained desc = ep3_laamp_flavour_ewan.9541.desc.nickname_gained left_icon = scope:eponymee } } # Dogs. 75 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = yes } } random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = yes } weight = { laamp_weight_up_minor_chars_modifier = yes } save_scope_as = pet_owner } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.dog_gained desc = ep3_laamp_flavour_ewan.9541.desc.dog_gained left_icon = scope:pet_owner scope:pet_owner = { start_dog_story_cycle_effect = yes } } } # Cats. 100 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = yes } } random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = yes } weight = { laamp_weight_up_minor_chars_modifier = yes } save_scope_as = pet_owner } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.cat_gained desc = ep3_laamp_flavour_ewan.9541.desc.cat_gained left_icon = scope:pet_owner scope:pet_owner = { start_cat_story_cycle_effect = yes } } } # Opinions & potential friends. 100 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = yes } } ordered_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = yes } order_by = "trait_compatibility(scope:follower_1)" save_scope_as = follower_2 } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.opinion_gained desc = ep3_laamp_flavour_ewan.9541.desc.opinion_gained left_icon = scope:follower_1 right_icon = scope:follower_2 scope:follower_1 = { if = { limit = { can_set_relation_potential_friend_trigger = { CHARACTER = scope:follower_2 } } set_relation_potential_friend = scope:follower_2 } add_opinion = { target = scope:follower_2 modifier = friendliness_opinion opinion = 30 } reverse_add_opinion = { target = scope:follower_2 modifier = friendliness_opinion opinion = 30 } } } } # Opinions & potential rivals. 100 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = yes } } ordered_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = yes } order_by = "trait_compatibility(scope:follower_1)" save_scope_as = follower_2 } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.opinion_lost desc = ep3_laamp_flavour_ewan.9541.desc.opinion_lost left_icon = scope:follower_1 right_icon = scope:follower_2 scope:follower_1 = { if = { limit = { can_set_relation_potential_rival_trigger = { CHARACTER = scope:follower_2 } } set_relation_potential_rival = scope:follower_2 } add_opinion = { target = scope:follower_2 modifier = irritated_opinion opinion = -30 } reverse_add_opinion = { target = scope:follower_2 modifier = irritated_opinion opinion = -30 } } } } # Gain stress. ## Largely here as a fallback — not that interesting so we weight it down reaaaalll good. 5 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } } random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } weight = { laamp_weight_up_minor_chars_modifier = yes } save_scope_as = stressee } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.stress_gained desc = ep3_laamp_flavour_ewan.9541.desc.stress_gained left_icon = scope:stressee scope:stressee = { random_list = { 20 = { add_stress = minor_stress_gain } 60 = { add_stress = medium_stress_gain } 20 = { add_stress = major_stress_gain } } } } } # Lose stress. 120 = { trigger = { any_courtier = { ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = yes } } random_courtier = { limit = { ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = yes } save_scope_as = stressee } send_interface_message = { type = event_camp_follower_with_text title = ep3_laamp_flavour_ewan.9541.t.stress_lost desc = ep3_laamp_flavour_ewan.9541.desc.stress_lost left_icon = scope:stressee scope:stressee = { random_list = { 10 = { add_stress = minor_stress_loss } 60 = { add_stress = medium_stress_loss } 30 = { add_stress = major_stress_loss } } } } } } } } ################################################## # AI Laamp Converts # by Ewan Cowhig Croft # 9551 - 9560 ################################################## scripted_trigger ep3_laamp_flavour_ewan_9551_character_would_go_idea_shopping_trigger = { NOR = { has_character_flag = ai_will_not_convert has_trait = faith_warrior has_trait = crusader_king has_trait = stubborn faith = location.faith } # Religious characters compare what faiths fit them best. OR = { # Non-zealous characters will consider a switch if they're not virtuous but would be in a new faith. AND = { NOT = { has_trait = zealous } num_virtuous_traits = { value <= 0 target = faith } ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = location.faith } } # Zealous characters will _also_ switch, but also need to feel like they're sinful in their current faith. AND = { has_trait = zealous num_sinful_traits = { value >= 1 target = faith } num_virtuous_traits = { value <= 0 target = faith } ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = location.faith } } # Cynical characters will gladly convert to whatever, provided they feel it suits them. AND = { has_trait = cynical NOR = { has_trait = arrogant has_trait = stubborn } } } # Just rule out the inevitable modded HoF laamps from trying to abandon their faith. NOT = { faith.religious_head ?= root } } # AI laamps convert to various local faiths. ep3_laamp_flavour_ewan.9551 = { hidden = yes trigger = { # DLC check. has_ep3_dlc_trigger = yes # Standard checks. is_adult = yes is_available_allow_travelling = yes # Make sure we're on dry land. is_location_valid_for_travel_event_on_land = yes # Laamps use title cooldowns, to help trim down repeats when succession happens. primary_title = { NOT = { has_variable = had_ep3_laamp_flavour_ewan_9551 } } # Now make sure that we'd actually convert. ## Never convert reformed to unreformed without good reason. location.faith = { OR = { NOT = { has_doctrine_parameter = unreformed } AND = { has_doctrine_parameter = unreformed root.faith = { has_doctrine_parameter = unreformed } } root = { has_trait = eccentric } } } ## General validity checks. ep3_laamp_flavour_ewan_9551_character_would_go_idea_shopping_trigger = yes # AI-only. is_ai = yes } immediate = { if = { limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } increment_global_variable_effect = { VAR = tally_lfe_9551 VAL = 1 } } # Set our cooldown. primary_title = { set_variable = { name = had_ep3_laamp_flavour_ewan_9551 value = yes years = @ep3_laamp_flavour_ewan_event_cooldown_longest } } # And convert our character. set_character_faith_with_conversion = location.faith } } ################################################## # MAINTENANCE # Range 9801+ reserved for w/e lil management events might turn up.