N3OW/events/dlc/ep3/ep3_laamp_flavour_ewan_events.txt
2026-01-06 14:25:21 +01:00

23648 lines
574 KiB
Text

@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.