idk why I dont have a cursor

This commit is contained in:
Magpie490 2025-06-02 16:22:24 +01:00
parent 701d55c01f
commit cda3acdcea
349 changed files with 78627 additions and 7804 deletions

View file

@ -0,0 +1,664 @@
is_available_for_activity_trigger = {
NOT = { exists = involved_activity }
is_adult = yes
OR = {
is_ai = no
is_busy_in_events_unlocalised = no
}
is_at_war = no
is_imprisoned = no
is_healthy = yes
NOR = {
exists = var:booked_for_a_party
exists = var:engaged_in_single_combat
}
}
is_available_for_child_activity_trigger = {
NOT = { exists = involved_activity }
is_adult = no
age >= 4
age < less_than_two_years_to_adulthood_value #To avoid being away when Coming of Age-event triggers
OR = {
is_ai = no
is_busy_in_events_unlocalised = no
}
is_at_war = no
is_imprisoned = no
is_hostage = no
is_healthy = yes
NOR = {
exists = var:hostage_travelling_to_warden
exists = var:ward_travelling_to_guardian
}
}
is_available_in_activity_trigger = {
exists = involved_activity
is_adult = yes
OR = {
is_ai = no
is_busy_in_events_unlocalised = no
}
is_at_war = no
is_imprisoned = no
is_healthy = yes
}
### Witch Ritual
activity_witch_ritual_valid_trigger = {
exists = house
house = {
has_house_modifier = witch_coven
any_house_member = {
NOT = { this = root }
is_witch_known_by_trigger = { CHARACTER = root }
}
}
}
### Petition Liege triggers
# Council Seat
petition_liege_council_seat_liege_trigger = {
liege ?= {
OR = {
cp:councillor_chancellor ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege }
}
}
cp:councillor_marshal ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege }
}
}
cp:councillor_steward ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege }
}
}
cp:councillor_spymaster ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege }
}
}
trigger_if = {
limit = { root.faith = root.liege.faith }
root.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment }
cp:councillor_court_chaplain ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = root.liege }
}
}
}
NOT = { exists = cp:councillor_chancellor }
NOT = { exists = cp:councillor_marshal }
NOT = { exists = cp:councillor_steward }
NOT = { exists = cp:councillor_spymaster }
trigger_if = {
limit = { root.faith = root.liege.faith }
root.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment }
NOT = { exists = cp:councillor_court_chaplain }
}
}
}
}
petition_liege_council_chaplain_appointable_trigger = {
$LIEGE$.faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment }
$LIEGE$.faith = $JOB_TAKER$.faith
}
petition_liege_councillor_second_trigger = {
NOT = { $JOB_TAKER$.var:petition_liege_council_first ?= flag:$ROLE$ }
trigger_if = {
limit = { exists = $LIEGE$.cp:councillor_$ROLE$ }
OR = {
$JOB_TAKER$.$SKILL$ >= $LIEGE$.cp:councillor_$ROLE$.$SKILL$
$JOB_TAKER$ = { has_trait = education_$SKILL$ }
}
}
trigger_else = { $JOB_TAKER$.$SKILL$ >= mediocre_skill_rating }
}
petition_liege_councillor_blocked_trigger = {
$JOB_TAKER$ = {
can_be_$ROLE$_trigger = { COURT_OWNER = $LIEGE$ }
}
$LIEGE$.cp:councillor_$ROLE$ ?= {
NOT = {
is_blocked_from_being_fired_from_council_trigger = { COURT_OWNER = $LIEGE$ }
}
trigger_if = {
limit = { exists = scope:eunuch }
NOT = { is_close_family_of = scope:eunuch }
}
}
}
# Pay Debt
petition_liege_pay_debt_trigger = {
debt_level > -1
liege.debt_level = -1
}
# War Aid
petition_liege_war_aid_trigger = {
is_at_war = yes
save_temporary_scope_as = vassal
any_character_war = {
scope:vassal = { is_leader_in_war = prev }
trigger_if = {
limit = {
scope:vassal = { is_attacker_in_war = prev }
}
defender_war_score >= petition_war_aid_score_value
}
trigger_else = { attacker_war_score >= petition_war_aid_score_value }
}
}
petition_liege_war_liege_involvement_trigger = {
liege = {
NOR = {
any_character_war = {
root.liege = { is_leader_in_war = prev }
trigger_if = {
limit = {
root.liege = { is_defender_in_war = prev }
}
OR = {
primary_attacker.primary_title.tier >= root.liege.primary_title.tier
petition_liege_attacker_strength_value > petition_war_aid_liege_ally_advantage_value
}
}
trigger_else = {
OR = {
primary_attacker.primary_title.tier >= root.liege.primary_title.tier
petition_liege_attacker_strength_value > petition_war_aid_liege_ally_advantage_value
}
}
}
is_in_ongoing_great_holy_war = yes
}
}
}
petition_liege_war_aid_share_trigger = {
NOT = {
any_character_war = {
root = { is_leader_in_war = prev }
any_war_participant = { this = root.liege }
}
}
}
# Vassal War
petition_liege_vassal_war_trigger = {
any_character_war = {
root = { is_leader_in_war = prev } # root is a war leader
primary_attacker.liege = primary_defender.liege # War is between vassals of the same liege
NOT = {
root.liege = { is_participant_in_war = prev } # Liege is not involved in the war
}
}
}
# Control
petition_liege_county_control_trigger = {
tier = tier_county
trigger_if = {
limit = { tier = tier_county }
county_control < medium_county_control
}
}
# Convert
petition_liege_county_convert_trigger = {
tier = tier_county
trigger_if = {
limit = { tier = tier_county }
NOT = { county.faith = holder.faith }
}
}
# Opinion
petition_liege_county_opinion_trigger = {
tier = tier_county
trigger_if = {
limit = { tier = tier_county }
county_opinion <= petition_county_opinion_value
}
}
# Fortify
petition_liege_fortify_border_trigger = {
tier = tier_county
trigger_if = {
limit = { tier = tier_county }
county = {
save_temporary_scope_as = county_scope
any_title_to_title_neighboring_county = {
NOT = { holder.top_liege = scope:county_scope.holder.top_liege } # petition_liege
NOT = {
holder.top_liege = { is_allied_to = scope:county_scope.holder.top_liege } # petition_liege
}
}
}
}
}
# Liege Title
petition_liege_title_liege_trigger = {
holder = prev.liege
NOT = { THIS = prev.liege.primary_title }
tier < prev.liege.primary_title.tier
trigger_if = {
limit = { exists = county }
NOT = { county = holder.capital_county }
}
OR = {
tier > tier_county
holder = {
any_held_title = {
count > 1
tier = tier_county
}
}
}
}
# Vassal Title
petition_liege_title_vassal_trigger = {
exists = holder
holder = { save_temporary_scope_as = second_temp }
OR = {
scope:second_temp.liege = prev.liege
scope:second_temp.liege.liege = prev.liege
scope:second_temp.liege.liege.liege = prev.liege
}
NOR = {
scope:second_temp = prev.liege
has_variable = petition_title_cooldown
scope:second_temp = { is_at_war = yes }
prev.liege = {
any_targeting_faction = {
any_faction_member = { this = scope:second_temp }
}
}
}
#trigger_if = {
# limit = { exists = county }
# NOT = { county = holder.capital_county }
#}
scope:second_temp = {
trigger_if = {
limit = { government_has_flag = government_is_feudal }
NOT = { vassal_contract_obligation_level_can_be_decreased = title_revocation_rights }
}
}
OR = {
tier > tier_county
scope:second_temp = {
any_held_title = {
count > 1
tier = tier_county
}
}
}
}
# Construct City
petition_liege_construct_city_trigger = {
county_has_empty_province_trigger = yes
OR = {
county_has_no_city_trigger = yes
county_has_all_holding_types = yes
}
}
# Construct Temple
petition_liege_construct_temple_trigger = {
county_has_empty_province_trigger = yes
OR = {
county_has_no_church_trigger = yes
county_has_all_holding_types = yes
}
}
# AI weightings
petition_liege_medium_cost_trigger = {
exists = scope:petition_vassal
scope:petition_vassal = { has_variable = petition_type }
OR = {
trigger_if = {
limit = { scope:petition_vassal.var:petition_type = flag:pay_debt }
scope:petition_vassal.debt_level < 3
}
scope:petition_vassal.var:petition_type = flag:war_aid
scope:petition_vassal.var:petition_type = flag:vassal_war
scope:petition_vassal.var:petition_type = flag:title_vassal
trigger_if = {
limit = { scope:petition_vassal.var:petition_type = flag:war_aid }
petitioner_war_aid_levies_cost_value > scope:petition_liege.medium_gold_value
}
}
}
petition_liege_high_cost_trigger = {
exists = scope:petition_vassal
scope:petition_vassal = { has_variable = petition_type }
OR = {
trigger_if = {
limit = { scope:petition_vassal.var:petition_type = flag:pay_debt }
scope:petition_vassal.debt_level >= 3
}
scope:petition_vassal.var:petition_type = flag:title_liege
scope:petition_vassal.var:petition_type = flag:construct_city
scope:petition_vassal.var:petition_type = flag:construct_temple
scope:petition_vassal.var:petition_type = flag:development
trigger_if = {
limit = { scope:petition_vassal.var:petition_type = flag:war_aid }
petitioner_war_aid_levies_cost_value > scope:petition_liege.major_gold_value
}
}
}
petition_liege_likes_trigger = {
exists = $COMPARE$
OR = {
has_relation_friend = $COMPARE$
has_relation_best_friend = $COMPARE$
has_relation_soulmate = $COMPARE$
has_relation_lover = $COMPARE$
is_close_family_of = $COMPARE$
opinion = {
target = $COMPARE$
value >= 50
}
}
}
petition_liege_dislikes_trigger = {
exists = $COMPARE$
OR = {
has_relation_rival = $COMPARE$
has_relation_nemesis = $COMPARE$
opinion = {
target = $COMPARE$
value <= -50
}
}
}
# Character is not already involved in the event e.g. claim target, incumbent councillor, etc.
petition_liege_skiller_trigger = {
is_available_adult = yes
trigger_if = {
limit = { exists = scope:second_party }
NOT = { this = scope:second_party }
}
trigger_if = {
limit = { exists = scope:vassal_claimant }
NOT = { this = scope:vassal_claimant }
}
trigger_if = {
limit = { exists = scope:second_councillor }
NOT = { this = scope:second_councillor }
}
trigger_if = {
limit = { exists = scope:diplomacy_check }
NOT = { this = scope:diplomacy_check }
}
trigger_if = {
limit = { exists = scope:martial_check }
NOT = { this = scope:martial_check }
}
trigger_if = {
limit = { exists = scope:stewardship_check }
NOT = { this = scope:stewardship_check }
}
trigger_if = {
limit = { exists = scope:intrigue_check }
NOT = { this = scope:intrigue_check }
}
trigger_if = {
limit = { exists = scope:learning_check }
NOT = { this = scope:learning_check }
}
trigger_if = {
limit = { exists = scope:petition_vassal }
NOT = { this = scope:petition_vassal }
}
}
# Has a councillor or spouse who is not involved in the event already
petition_liege_has_main_skiller_trigger = {
scope:petition_liege = {
OR = {
trigger_if = {
limit = { exists = cp:councillor_chancellor }
cp:councillor_chancellor = { petition_liege_skiller_trigger = yes }
}
trigger_else = { always = no }
trigger_if = {
limit = { exists = cp:councillor_marshal }
cp:councillor_marshal = { petition_liege_skiller_trigger = yes }
}
trigger_else = { always = no }
trigger_if = {
limit = { exists = cp:councillor_steward }
cp:councillor_steward = { petition_liege_skiller_trigger = yes }
}
trigger_else = { always = no }
trigger_if = {
limit = { exists = cp:councillor_spymaster }
cp:councillor_spymaster = { petition_liege_skiller_trigger = yes }
}
trigger_else = { always = no }
trigger_if = {
limit = { exists = cp:councillor_court_chaplain }
cp:councillor_court_chaplain = { petition_liege_skiller_trigger = yes }
}
trigger_else = { always = no }
trigger_if = {
limit = {
is_married = yes
exists = primary_spouse
}
primary_spouse = {
is_playable_character = no
petition_liege_skiller_trigger = yes
exists = scope:petition_vassal
NOT = { has_any_scripted_relation = scope:petition_vassal }
}
}
trigger_else = { always = no }
}
}
}
# Character can be a wildcard, due to their existing relationship with petitioner
petition_liege_wildcard_trigger = {
OR = {
has_relation_friend = scope:petition_vassal
has_relation_best_friend = scope:petition_vassal
has_relation_lover = scope:petition_vassal
has_relation_soulmate = scope:petition_vassal
opinion = {
target = scope:petition_vassal
value >= 50
}
}
}
# No more than 2 skill check options already exist
petition_liege_skillcheck_limit = {
calc_true_if = {
amount < 2
exists = scope:diplomacy_check
exists = scope:martial_check
exists = scope:stewardship_check
exists = scope:intrigue_check
exists = scope:learning_check
}
}
# Character is valid councillor and invalid wildcard
petition_liege_skiller_no_wildcard_trigger = {
petition_liege_skiller_trigger = yes
petition_liege_wildcard_trigger = no
}
# Character has some way to be placated by liege
petition_liege_relation_favor_trigger = {
can_add_hook = {
type = favor_hook
target = scope:petition_liege
}
OR = {
has_relation_friend = scope:petition_liege
has_relation_best_friend = scope:petition_liege
has_relation_lover = scope:petition_liege
has_relation_soulmate = scope:petition_liege
}
}
# For picking which council position to offer
petition_liege_councillor_replace_weight_trigger = {
AND = {
scope:petition_vassal = { has_variable = petition_liege_council_first }
scope:petition_vassal.var:petition_liege_council_first = flag:$JOB$
OR = {
NOT = { has_councillor_for_skill = $SKILL$ }
AND = {
exists = scope:second_party
scope:petition_vassal.$SKILL$ > scope:second_party.$SKILL$
}
}
}
}
# Petition is still valid
petition_liege_valid_trigger = {
is_alive = yes
is_imprisoned = no
has_variable = petition_liege_scope
liege = var:petition_liege_scope
var:petition_liege_scope = {
is_imprisoned = no
has_royal_court = yes
}
}
adventurer_potential_destination_distance_check = {
#This is made to be used inside set_adventure_location_effect - it relies on the scope it is being run in being the adventurer
#Also expects $REGION$
any_county_in_region = {
region = $REGION$
trigger_if = {
limit = {
prev.adventure_inspiration_average_skill_value >= high_inspiration_skill
}
NOT = {
prev.location = {
geographical_region = $REGION$
}
} #Highly skilled adventurers can travel anywhere - and will not pick the region they are already in
}
trigger_else_if = {
limit = {
prev.adventure_inspiration_average_skill_value >= medium_inspiration_skill
}
squared_distance = {
target = prev.location
value <= medium_adventure_max_length
}
}
trigger_else = {
#low_inspiration_skill
squared_distance = {
target = prev.location
value < short_adventure_max_length
}
}
}
}
activity_invite_rule_trigger = {
is_adult = yes
is_imprisoned = no
in_diplomatic_range = root
}
considers_social_presence_a_gift_to_other_trigger = {
has_trait = improvident
OR = {
has_trait = gregarious
has_trait = arrogant
}
}
not_hosting_a_murder_feast = {
trigger_if = {
limit = {
this = scope:host
scope:activity = {
has_activity_type = activity_feast
}
}
scope:activity = {
NOT = {
has_activity_option = {
category = special_type
option = feast_type_murder
}
}
}
}
trigger_else = {
always = yes
}
}
factor_zero_if_entitled_to_freebie_activity_trigger = {
dynasty ?= { has_dynasty_perk = ep2_activities_legacy_5 }
this = house.house_head
NOT = { has_variable = ep2_activities_legacy_5_had_freebie }
}
# to be run in activity scope
has_attending_activity_guests = {
# We have more than one attending character
# Host always attends so we ignore them
any_attending_character = {
count > 1 # 1 includes the host who always attends
}
}
any_journey_point_of_interest_trigger = {
has_special_building = yes
NOR = {
has_building_or_higher = generic_university
has_building_or_higher = hall_of_heroes_01
has_building_or_higher = special_sicilian_parliament_01
has_building_or_higher = special_greenhouse_01
has_building_or_higher = holy_site_cathedral_01
has_building_or_higher = holy_site_mosque_01
has_building_or_higher = holy_site_fire_temple_01
has_building_or_higher = holy_site_pagan_grand_temple_01
has_building_or_higher = holy_site_indian_grand_temple_01
has_building_or_higher = holy_site_other_grand_temple_01
has_building_or_higher = generic_copper_mines_01
has_building_or_higher = generic_silver_mines_01
has_building_or_higher = generic_gold_mines_01
}
}

View file

@ -0,0 +1,129 @@
# This character is publicly known for cheating on the SPOUSE
exposed_cheating_on_spouse_trigger = { #Is a publicly known cheater against spouse
OR = {
reverse_has_opinion_modifier = {
modifier = unfaithful_spouse_exposed_opinion
target = $SPOUSE$
}
AND = {
has_variable = std_from_unfaithfulness_against
var:std_from_unfaithfulness_against = $SPOUSE$
}
}
}
would_attempt_to_seduce_trigger = {
is_adult = yes
age <= 50
# Already interested or not a relation
trigger_if = {
limit = { has_any_scripted_relation = $CHARACTER$ }
OR = {
has_relation_potential_lover = $CHARACTER$
has_relation_crush = $CHARACTER$
}
}
# Not married
NOT = { is_consort_of = $CHARACTER$ }
OR = {
# Pre-existing schemes
is_scheming_against = {
target = $CHARACTER$
type = seduce
}
is_scheming_against = {
target = $CHARACTER$
type = courting
}
AND = {
# Sexuality
is_attracted_to_gender_of = $CHARACTER$
NOR = {
# Proactive
has_trait = chaste
# Undevoted
any_relation = { type = soulmate }
}
# Compatible or attractive
OR = {
trait_compatibility = {
target = $CHARACTER$
value >= low_positive_trait_compatibility
}
$CHARACTER$.attraction >= medium_positive_attraction
}
}
}
# Flouts the laws of decency
would_attempt_to_seduce_incest_trigger = { CHARACTER = $CHARACTER$ }
# Flouts the sanctity of marriage
would_attempt_to_seduce_married_trigger = yes
}
would_attempt_to_seduce_incest_trigger = {
trigger_if = {
limit = {
save_temporary_scope_as = potential_cheater
OR = {
# Checks for incest
relation_with_character_is_incestuous_in_faith_trigger = {
FAITH = scope:potential_cheater.faith
CHARACTER = $CHARACTER$
}
# Check celibate clergy too since it's a similar overcoming of norms
AND = {
is_clergy = yes
faith = { has_doctrine = doctrine_clerical_marriage_allowed }
}
}
}
# Isn't god-fearing
NOT = { has_trait = zealous }
# Is randy
has_trait = lustful
# Takes what they want
ai_boldness >= medium_positive_ai_value
# Likes them
opinion = {
target = $CHARACTER$
value >= 25
}
# Big attraction or get on very well
OR = {
trait_compatibility = {
target = $CHARACTER$
value >= medium_positive_trait_compatibility
}
$CHARACTER$.attraction >= medium_positive_attraction
}
}
}
would_attempt_to_seduce_married_trigger = {
trigger_if = {
limit = { is_married = yes }
OR = {
# Adultery is accepted for their gender in their faith
AND = {
is_female = yes
faith = { has_doctrine_parameter = adultery_female_accepted }
}
AND = {
is_male = yes
faith = { has_doctrine_parameter = adultery_male_accepted }
}
NOR = {
# Isn't god-fearing
has_trait = zealous
save_temporary_scope_as = potential_cheater
# Isn't that fond of partner
opinion = {
target = scope:potential_cheater.primary_spouse
value >= 25
}
# Isn't honorable
ai_honor >= low_positive_ai_value
}
}
}
}

View file

@ -0,0 +1,19 @@

###TRIGGER LIST
#ai_will_give_favor_trigger
#CHAR1 is the character who will be giving the favor, CHAR2 is the character who will be receiving it(i.e., CHAR2 is the one that gets to call in the favor).
ai_will_give_favor_trigger = {
$CHAR1$ = {
NOR = {
has_relation_rival = $CHAR2$
opinion = {
value <= -25
target = $CHAR2$
}
is_scheming_against = { target = $CHAR2$ type = murder }
}
}
}

View file

@ -0,0 +1,291 @@

###TRIGGER LIST
#opposing_ai_values_trigger - Checks if one character has a positive value and another character has a negative value for the same ai value.
#Needs TARGET and the name of the VALUE
opposing_ai_values_trigger = {
OR = {
AND = {
ai_$VALUE$ < 0
$TARGET$ = { ai_$VALUE$ > 0 }
}
AND = {
ai_$VALUE$ > 0
$TARGET$ = { ai_$VALUE$ < 0 }
}
}
}
ai_has_warlike_personality = {
OR = {
AND = {
has_trait = despoiler_of_byzantium
any_held_title = {
OR = {
empire = title:e_byzantium
empire = title:e_latin_empire
}
}
}
vassal_contract_has_flag = admin_ai_is_warlike # Admin vassals with the "Frontier" administration consider it their job to expand
AND = { # The unity decision "Organize House Members for War" forces AI house members to adopt this stance
exists = house
house = {
has_house_modifier = unity_house_organized_for_war_modifier
}
}
AND = { # They are Detractors during the FP3 Struggle in the Unrest Phase
any_character_struggle = {
trigger_if = {
limit = { is_struggle_type = persian_struggle }
is_struggle_phase = struggle_persia_phase_unrest
}
trigger_else = { always = no }
}
has_trait = fp3_struggle_detractor
}
AND = { # Nomads are not 'unpredictable', they are Warlike instead
government_has_flag = government_is_nomadic
ai_has_cautious_personality = no
economical_ai_guts_trigger = no
}
AND = {
ai_boldness > 0
ai_greed >= 0
OR = {
has_trait = wrathful
has_trait = impatient
has_trait = sadistic
has_trait = ambitious
has_trait = vengeful
has_trait = zealous
has_trait = irritable
AND = {
ai_boldness >= 50
ai_greed >= 50
}
AND = {
ai_boldness >= 25
ai_greed >= 100
}
AND = {
ai_boldness >= 100
ai_greed >= 25
}
government_has_flag = government_is_tribal
culture = { has_cultural_pillar = ethos_bellicose }
}
NOR = {
ai_compassion >= 75
has_trait = compassionate
has_trait = craven
has_trait = calm
faith = { has_doctrine_parameter = pacifist_opinion_active }
culture = { has_cultural_parameter = reduced_cost_for_conversion_to_pacifist_faith }
AND = {
exists = house
house = {
has_house_modifier = unity_house_focused_on_economy_modifier
}
}
vassal_contract_has_flag = admin_ai_is_builder
}
}
# Or we're on the warpath.
has_variable = imperial_expedition_charged
}
ai_has_conqueror_personality = no
}
ai_has_cautious_personality = {
ai_boldness <= 0
OR = {
has_trait = paranoid
has_trait = craven
AND = {
ai_boldness <= -25
OR = {
has_trait = patient
has_trait = calm
has_trait = content
culture = { has_cultural_pillar = ethos_stoic }
culture = { has_cultural_tradition = tradition_stalwart_defenders }
}
}
}
NOR = {
has_trait = fickle
has_trait = lunatic
AND = {
exists = house
house = {
OR = {
has_house_modifier = unity_house_organized_for_war_modifier
has_house_modifier = unity_house_focused_on_economy_modifier
}
}
}
AND = { # They are Detractors during the FP3 Struggle in the Unrest Phase
any_character_struggle = {
is_struggle_type = persian_struggle
is_struggle_phase = struggle_persia_phase_unrest
}
has_trait = fp3_struggle_detractor
}
vassal_contract_has_flag = admin_ai_is_warlike
vassal_contract_has_flag = admin_ai_is_builder
}
ai_has_conqueror_personality = no
}
ai_has_economical_boom_personality = {
OR = {
vassal_contract_has_flag = admin_ai_is_builder # Admin vassals with the "Civilian" administration consider it their job to improve the economy
AND = { # The unity decision "Encourage House to Improve the Economy" forces AI house members to adopt this stance
exists = house
house = {
has_house_modifier = unity_house_focused_on_economy_modifier
}
}
AND = {
economical_ai_guts_trigger = yes
ai_has_warlike_personality = no
}
}
ai_has_conqueror_personality = no
}
economical_ai_guts_trigger = {
ai_boldness > 0
OR = {
has_focus = stewardship_domain_focus # Only this focus, which is 33% of all stewardship focused characters in the world
has_trait = calm
has_trait = patient
has_trait = diligent
has_trait = generous
has_trait = stubborn
has_trait = profligate
has_trait = improvident
has_character_modifier = the_city_builder_modifier
has_character_modifier = the_castle_builder_modifier
has_character_modifier = the_temple_builder_modifier
}
NAND = {
has_trait = greedy
has_trait = impatient
AND = {
exists = house
house = {
has_house_modifier = unity_house_organized_for_war_modifier
}
}
}
}
ai_wants_low_unity = {
government_has_flag = government_is_clan
# To actively decrease Unity, the AI needs the following personality
OR = {
AND = {
OR = {
has_trait_malicious_trigger = yes
has_trait_dominant_trigger = yes
}
has_trait_submissive_trigger = no
has_trait_benevolent_trigger = no
}
ai_has_warlike_personality = yes
ai_has_conqueror_personality = yes
has_character_flag = agenda_towards_escalation
}
}
ai_wants_high_unity = {
government_has_flag = government_is_clan
# We'll make sure that the AI only wants to actively increase Unity if they have a matching personality
OR = {
AND = {
OR = {
has_trait_benevolent_trigger = yes
has_trait_submissive_trigger = yes
}
has_trait_malicious_trigger = no
}
ai_has_economical_boom_personality = yes
AND = {
NOT = { has_trait = fp3_struggle_detractor }
# House is the most recent Caliphs house
exists = struggle:persian_struggle
trigger_if = {
limit = { exists = title:d_sunni.holder }
house = title:d_sunni.holder.house
}
trigger_else = { house = title:d_sunni.previous_holder.house }
}
has_character_flag = agenda_towards_deescalation
}
# And to make sure the AI doesn't want to increase and decrease Unity at the same time
ai_wants_low_unity = no
}
ai_has_conqueror_personality = {
OR = {
has_trait = conqueror
has_trait = greatest_of_khans
has_character_modifier = the_great_khan_modifier
any_owned_story = {
story_type = story_conqueror
}
}
}
ai_should_get_conqueror_bonuses = {
AND = {
OR = {
has_game_rule = default_conquerors_bonuses
has_game_rule = extreme_conquerors_bonuses
has_game_rule = random_conquerors_bonuses
has_game_rule = reduced_random_conquerors_bonuses
}
ai_has_conqueror_personality = yes
}
}
ai_should_get_extreme_conqueror_bonuses = {
AND = {
has_character_modifier = ai_extreme_conqueror_modifier
ai_has_conqueror_personality = yes
}
}
ai_should_focus_on_building_in_their_capital = {
is_landed = yes
highest_held_title_tier >= tier_county
ai_has_conqueror_personality = no
NOT = { government_has_flag = government_is_nomadic }
exists = capital_county
exists = culture
OR = {
capital_county.title_province.free_building_slots > 0
AND = {
culture = { has_innovation = innovation_ledger }
capital_county.title_province.combined_building_level <= 4
}
AND = {
culture = { has_innovation = innovation_baliffs }
capital_county.title_province.combined_building_level <= 6
}
AND = {
culture = { has_innovation = innovation_guilds }
capital_county.title_province.combined_building_level <= 9
}
AND = {
culture = { has_innovation = innovation_cranes }
capital_county.title_province.combined_building_level <= 12
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,17 @@
is_valid_auto_title_holder = {
is_capable_adult = yes
is_claimant = no
is_imprisoned = no
trigger_if = {
limit = {
scope:base.primary_title = { has_title_law = female_only_law }
}
is_female = yes
}
trigger_if = {
limit = {
scope:base.primary_title = { has_title_law = male_only_law }
}
is_male = yes
}
}

View file

@ -17,7 +17,7 @@
#can_become_concubine
#is_busy_in_events_localised
# For flags that will never be seen by the player and thus don't need to be localised.
# Despite the name, there are rare instances in which these may become visible to the player - if you add to this list, add localization also
is_busy_in_events_unlocalised = {
OR = {
has_character_flag = is_in_diplomacy_foreign_special_event
@ -30,6 +30,7 @@ is_busy_in_events_unlocalised = {
has_character_flag = is_in_intrigue_special_event
has_character_flag = is_in_learning_special_event
has_character_flag = is_in_task_contract_event_chain
has_character_flag = migration_events_1060_rode_ahead
}
}
@ -318,6 +319,26 @@ is_within_diplo_range = {
}
}
# This trigger checks if a character is a Nomad
is_nomad = {
government_has_flag = government_is_nomadic
is_ruler = yes
}
# This trigger checks if a character is a landed Nomad
is_landed_nomad = {
government_has_flag = government_is_nomadic
is_landed = yes
is_ruler = yes
}
# Checks if a character is a landless nomad with a domicile
is_landless_nomad = {
government_has_flag = government_is_nomadic
is_landed = no
has_domicile = yes
}
# This trigger checks if a character is a landless adventurer
is_landless_adventurer = {
government_has_flag = government_is_landless_adventurer
@ -327,15 +348,21 @@ is_landless_adventurer = {
# This trigger checks if a character is a governor in an admin realm (implying they are landed)
is_governor = {
ghas_government = administrative_government
government_has_flag = government_is_administrative
is_landed = yes
is_independent_ruler = no
highest_held_title_tier >= tier_duchy
}
is_governor_or_admin_count = {
government_has_flag = government_is_administrative
is_landed = yes
is_independent_ruler = no
highest_held_title_tier >= tier_county
}
# Checks if a character is a landless house_head within an admin realm
is_landless_administrative = {
has_government = administrative_government
government_has_flag = government_is_administrative
is_landed = no
is_house_head = yes
has_domicile = yes
@ -349,12 +376,13 @@ is_landed_or_landless_administrative = {
}
}
# Checks if a character is either landed, a landless house head within an admin realm, or a landless adventurer
# Checks if a character is either landed, a landless house head within an admin realm, a landless nomad, or a landless adventurer
is_playable_character = {
OR = {
is_landed = yes
is_landless_administrative = yes
is_landless_adventurer = yes
is_landless_nomad = yes
}
}

View file

@ -0,0 +1,220 @@

should_mother_give_house_to_bastard_trigger = {
#Also governs the "should_mother_give_house_to_bastard" scripted rule
trigger_if = {
limit = { NOT = { exists = mother } }
always = no
}
trigger_else_if = {
limit = { NOT = { exists = mother.house } }
always = no
}
trigger_else_if = {
limit = { NOT = { exists = father } }
always = yes
}
trigger_else_if = {
limit = {
real_father = { is_ruler = yes }
mother = { is_ruler = no }
exists = real_father.house
}
always = no
}
trigger_else_if = {
limit = {
real_father = { is_ruler = no }
mother = { is_ruler = yes }
exists = mother.house
}
always = yes
}
trigger_else_if = {
limit = {
mother = { NOT = { exists = house } }
exists = real_father.house
}
always = no
}
trigger_else_if = {
limit = {
real_father = { NOT = { exists = house } }
exists = mother.house
}
always = yes
}
# making the default behavior explicit if no other trigger_(else_)ifs are valid
trigger_else = {
always = yes
}
}
secret_unmarried_illegitimate_child_is_valid_trigger = {
$TARGET$ = {
is_alive = yes
exists = real_father
exists = mother
NOT = { has_trait = child_of_concubine }
save_temporary_scope_as = temp_child
trigger_if = {
limit = {
exists = father
exists = scope:temp_child.real_father
}
NOT = { father = scope:temp_child.real_father }
}
}
}
secret_disputed_heritage_is_valid_trigger = {
$TARGET$ = { # Child
is_alive = yes
exists = real_father
exists = father
exists = mother
NOT = { real_father = father }
NOR = {
has_trait = bastard
has_trait = wild_oat
has_trait = legitimized_bastard
}
}
}
bastard_secret_is_criminal = {
$TARGET$ = { save_temporary_scope_as = criminal_bastard }
$PARTICIPANT$ = { save_temporary_scope_as = criminal_participant }
OR = {
#Mother if female adultery is criminal
scope:criminal_participant = {
scope:criminal_bastard = { mother = scope:criminal_participant }
OR = {
faith = { has_doctrine_parameter = adultery_female_crime }
any_liege_or_above = { faith = { has_doctrine_parameter = adultery_female_crime } }
}
}
#Real father is male adultery is criminal
scope:criminal_participant = {
scope:criminal_bastard = { real_father = scope:criminal_participant }
OR = {
faith = { has_doctrine_parameter = adultery_male_crime }
any_liege_or_above = { faith = { has_doctrine_parameter = adultery_male_crime } }
}
}
}
}
bastard_secret_is_shunned = {
# FOR DEBUG PURPOSES -- REMOVE ONCE RESOLVED TODO_CD
assert_if = {
limit = { NOT = { exists = $TARGET$ } }
text = "Empty TARGET was passed to bastard_secret_is_shunned!"
}
assert_if = {
limit = { NOT = { exists = $TARGET$ } }
text = "Empty PARTICIPANT was passed to bastard_secret_is_shunned!"
}
#Saving bastard & other parent scope
$TARGET$ = { save_temporary_scope_as = bastard }
$PARTICIPANT$ = { save_temporary_scope_as = participant }
assert_if = {
limit = { NOT = { exists = scope:bastard } }
text = "scope:bastard does not exist in bastard_secret_is_shunned!"
}
assert_if = {
limit = { NOT = { exists = scope:participant } }
text = "scope:participant does not exist in bastard_secret_is_shunned!"
}
assert_if = {
limit = { NOT = { exists = scope:bastard.mother } }
text = "scope:bastard.mother does not exist in bastard_secret_is_shunned!"
}
assert_if = {
limit = { NOT = { exists = scope:bastard.real_father } }
text = "scope:bastard.real_father does not exist in bastard_secret_is_shunned!"
}
OR = {
#Bastard child: always shunned, never criminal
scope:participant = scope:bastard
#Mother if female adultery is shunned
scope:participant = {
exists = scope:bastard.mother
this = scope:bastard.mother
OR = {
faith = { has_doctrine_parameter = adultery_female_shunned }
any_liege_or_above = { faith = { has_doctrine_parameter = adultery_female_shunned } }
}
}
#Real father is male adultery is shunned
scope:participant = {
exists = scope:bastard.real_father
this = scope:bastard.real_father
OR = {
faith = { has_doctrine_parameter = adultery_male_shunned }
any_liege_or_above = { faith = { has_doctrine_parameter = adultery_male_shunned } }
}
}
#Either parent if incest is shunned
AND = {
# Can't have incest with only one parent!
exists = scope:bastard.real_father
exists = scope:bastard.mother
# Also the secret participant has to be one of the parents
scope:participant = {
OR = {
this = scope:bastard.mother
this = scope:bastard.real_father
}
trigger_if = {
limit = { this = scope:bastard.mother }
scope:bastard.real_father = { save_temporary_scope_as = other_parent }
}
trigger_else = {
scope:bastard.mother = { save_temporary_scope_as = other_parent }
}
# Check if the relation would be incestuous in my faith or my liege's faith
relation_with_character_is_incestuous_in_faith_trigger = {
CHARACTER = scope:other_parent
FAITH = scope:participant.faith
}
any_liege_or_above = {
save_temporary_scope_as = liege_or_above
scope:participant = {
relation_with_character_is_incestuous_in_faith_trigger = {
CHARACTER = scope:other_parent
FAITH = scope:liege_or_above.faith
}
}
}
}
}
}
NOT = {
bastard_secret_is_criminal = {
TARGET = scope:bastard
PARTICIPANT = scope:participant
}
}
}
has_any_bastard_trait_trigger = {
OR = {
has_trait = wild_oat
has_any_negative_bastard_trait_trigger = yes
}
}
has_any_negative_bastard_trait_trigger = {
OR = {
has_trait = bastard
has_trait = legitimized_bastard
has_trait = disputed_heritage
}
}

View file

@ -0,0 +1,59 @@

### Birth trigger list
birth_will_happen_as_usual_trigger = {
OR = {
has_character_flag = birth_will_go_smoothly
has_character_flag = birth_child_will_become_sickly
has_character_flag = birth_mother_will_become_ill
}
}
allow_naming_on_birth_of_child_trigger = {
save_temporary_scope_as = naming_parent
exists = $CHILD$
is_ai = no
is_close_family_of = $CHILD$
OR = {
#I am the only player parent of child
NOT = {
$CHILD$ = {
any_parent = {
is_ai = no
NOT = { this = scope:naming_parent }
}
}
}
#I am the best player to name this child
AND = {
$CHILD$ = { #There are two player parents
exists = father
exists = mother
NOT = { any_parent = { is_ai = yes } }
}
OR = {
AND = { #They are of my dynasty, not theirs
dynasty = $CHILD$.dynasty
$CHILD$ = {
any_parent = {
NOT = { this = scope:naming_parent }
NOT = { dynasty = $CHILD$.dynasty }
}
}
}
AND = { #I am their mother, and parents are of same dynasty/neither has baby's dynasty
$CHILD$ = { mother = { this = scope:naming_parent } }
OR = {
$CHILD$.mother.dynasty = $CHILD$.father.dynasty
NOR = {
$CHILD$.mother.dynasty = $CHILD$.dynasty
$CHILD$.father.dynasty = $CHILD$.dynasty
}
}
}
}
}
}
}

View file

@ -0,0 +1,76 @@

##################################################
# GENERIC TRIGGERS
# Note: this is a very stripped down trigger set. It's expected that it'll be parsed through something that parses out more typically unsuitable candidates (e.g., prisoners under most circumstances).
bg_can_start_board_game_trigger = {
# Check for the usual stuff.
can_start_board_game_eligibility_checks_trigger = yes
# And filter out those who can never play a board game.
bg_can_start_board_game_is_scope_banned_checks_trigger = no
}
can_start_board_game_eligibility_checks_trigger = {
# Children need to be old enough to know to not eat the playing pieces.
age >= 8
# Otherwise, we're actually pretty forgiving of basically everyone being able to play somehow. For now.
}
bg_can_start_board_game_is_scope_banned_checks_trigger = {
# Currently, we just *always* filter anyone who's already in a bout.
exists = var:engaged_in_board_game
}
##################################################
# INTERACTION TRIGGERS
bg_game_type_region_pachisi_trigger = {
OR = {
geographical_region = world_india
geographical_region = world_burma
}
}
bg_game_type_region_hnefatafl_trigger = {
NOT = { geographical_region = board_game_fidchell_region }
OR = {
geographical_region = world_europe_north
geographical_region = world_europe_west_britannia
}
}
bg_game_type_region_tabula_trigger = {
OR = {
geographical_region = world_asia_minor
geographical_region = world_europe_south
}
}
bg_game_type_region_go_trigger = {
geographical_region = world_tibet
}
bg_game_type_region_fidchell_trigger = {
geographical_region = board_game_fidchell_region
}
bg_stake_land_valid_neighbouring_county_to_trade_trigger = {
tier = tier_county
# Suppress a false positive error.
trigger_if = {
limit = { tier = tier_county }
NOT = { this = prev.capital_county }
any_neighboring_county = {
# Ensure that they're swappable.
OR = {
# Generally, the county should be held by the other character.
holder = $NEIGHBOUR$
# But OCMs can be traded too.
holder = {
liege = $NEIGHBOUR$
sub_realm_size = 1
}
}
}
}
}

View file

@ -0,0 +1,789 @@
######################################################################
# Government
######################################################################
building_requirement_tribal = {
scope:holder ?= {
OR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
}
}
building_requirement_tribal_holding_in_county = {
NOT = {
county = {
any_county_province = {
has_holding_type = tribal_holding
}
}
}
}
building_requirement_nomad = {
scope:holder ?= {
government_has_flag = government_is_nomadic
}
}
building_requirement_nomad_holding_in_county = {
NOT = {
county = {
any_county_province = {
has_holding_type = nomad_holding
}
}
}
}
building_requirement_herder = {
scope:holder ?= {
government_has_flag = government_is_herder
}
}
building_requirement_herder_holding_in_county = {
NOT = {
county = {
any_county_province = {
has_holding_type = herder_holding
}
}
}
}
######################################################################
# Holding Level
######################################################################
building_requirement_castle_city_church = {
trigger_if = {
limit = { has_holding_type = castle_holding }
has_building_or_higher = castle_$LEVEL$
}
trigger_else_if = {
limit = { has_holding_type = city_holding }
has_building_or_higher = city_$LEVEL$
}
trigger_else_if = {
limit = { has_holding_type = church_holding }
has_building_or_higher = temple_$LEVEL$
}
trigger_else = {
custom_description = {
text = "building_requirement_castle_city_church_failed"
always = no
}
}
}
######################################################################
# Special
######################################################################
building_hall_of_heroes_requirement = {
custom_description = {
text = building_requirement_hall_of_heroes_failed
has_variable = hall_of_heroes
scope:holder = {
OR = {
has_religion = religion:baltic_religion
has_religion = religion:slavic_religion
has_religion = religion:finno_ugric_religion
has_religion = religion:siberian_religion
}
}
}
}
building_university_requirement = {
#has_variable = university
}
######################################################################
# Terrain
######################################################################
building_common_tradeport_requirement_terrain = {
OR = {
is_coastal = yes
is_riverside_province = yes
}
}
building_pastures_requirement_terrain = {
OR = {
terrain = farmlands
terrain = plains
terrain = steppe
terrain = desert
terrain = drylands
terrain = oasis
terrain = mountains
terrain = desert_mountains
terrain = hills
terrain = floodplains
AND = {
terrain = jungle
NOT = { geographical_region = world_innovation_elephants }
}
}
}
building_hunting_grounds_requirement_terrain = {
OR = {
terrain = plains
terrain = drylands
terrain = steppe
terrain = hills
terrain = taiga
terrain = forest
terrain = jungle
terrain = wetlands
}
}
building_orchards_requirement_terrain = {
OR = {
terrain = floodplains
terrain = oasis
has_building_or_higher = qanats_05
AND = {
culture = {
has_cultural_parameter = vegetarian_fruit_orchard_allowed
}
}
}
}
building_farm_estates_requirement_terrain = {
terrain = farmlands
}
building_military_camps_requirement_terrain = {
#OR = { # All Terrains
# terrain = farmlands
# terrain = plains
# terrain = drylands
# terrain = desert
# terrain = oasis
# terrain = floodplains
# terrain = steppe
# terrain = mountains
# terrain = desert_mountains
# terrain = wetlands
# terrain = forest
# terrain = taiga
# terrain = jungle
# terrain = hills
#}
}
building_regimental_grounds_requirement_terrain = {
OR = {
terrain = floodplains
terrain = farmlands
}
}
building_ramparts_requirement_terrain = {
OR = {
terrain = taiga
terrain = forest
terrain = jungle
}
}
building_curtain_walls_requirement_terrain = {
OR = {
terrain = farmlands
terrain = plains
terrain = wetlands
terrain = floodplains
}
}
building_watchtowers_requirement_terrain = {
OR = {
terrain = desert
terrain = drylands
terrain = oasis
terrain = steppe
}
}
building_cereal_fields_requirement_terrain = {
OR = {
terrain = farmlands
terrain = plains
terrain = drylands
terrain = floodplains
county = {
OR = {
has_county_modifier = fertile_desert_mountains_modifier
has_county_modifier = dodekapolis_modifier
}
}
has_building_or_higher = qanats_05
}
}
building_outposts_requirement_terrain = {
OR = {
terrain = wetlands
terrain = taiga
terrain = forest
terrain = jungle
}
}
building_barracks_requirement_terrain = {
#OR = {
# terrain = farmlands
# terrain = plains
# terrain = drylands
# terrain = floodplains # new
# terrain = hills
# terrain = mountains
# terrain = forest
# terrain = taiga
# terrain = jungle
# terrain = wetlands
# terrain = steppe
#}
}
building_camel_farms_requirement_terrain = {
geographical_region = world_innovation_camels # new
OR = {
terrain = desert
terrain = desert_mountains
terrain = oasis
terrain = floodplains
terrain = drylands # new
}
}
building_stables_requirement_terrain = {
# All terrains
}
building_smiths_requirement_terrain = {
# All terrains
}
building_workshops_requirement_terrain = {
# All terrains
}
building_logging_camps_requirement_terrain = {
OR = {
terrain = taiga
terrain = forest
terrain = jungle
}
}
building_peat_quarries_requirement_terrain = {
terrain = wetlands
}
building_hill_farms_requirement_terrain = {
terrain = hills
}
building_elephant_pens_requirement_terrain = {
terrain = jungle
OR = {
geographical_region = world_innovation_elephants
culture = { has_cultural_parameter = elephant_pens_building_bonuses }
}
}
building_horse_pastures_requirement_terrain = {
OR = {
terrain = steppe
geographical_region = world_steppe_east
culture = { has_cultural_parameter = unlock_horse_pastures_building }
}
}
building_plantations_requirement_terrain = {
OR = {
terrain = drylands
terrain = desert
terrain = oasis
}
}
building_quarries_requirement_terrain = {
OR = {
terrain = mountains
terrain = desert_mountains
culture = { has_cultural_parameter = can_build_quarries_everywhere }
}
}
building_warrior_lodges_requirement_terrain = {
OR = {
AND = {
OR = {
terrain = mountains
terrain = desert_mountains
terrain = hills
}
NOT = { geographical_region = world_horse_buildings_in_hills_and_mountains }
}
culture = { has_cultural_parameter = warrior_lodges_lift_restrictions }
}
}
building_hillside_grazing_requirement_terrain = {
OR = {
terrain = mountains
terrain = desert_mountains
terrain = hills
}
geographical_region = world_horse_buildings_in_hills_and_mountains
}
building_wind_furnace_requirement_terrain = {
geographical_region = world_india
OR = {
is_coastal = yes
AND = {
scope:holder.top_liege = {
any_realm_county = {
any_county_province = {
has_building_or_higher = konasamudram_mines_01
}
}
}
duchy = {
any_de_jure_county = {
any_county_province = {
has_building_or_higher = konasamudram_mines_01
}
}
}
}
}
scope:holder.culture = { has_innovation = innovation_wootz_steel }
}
building_hill_forts_requirement_terrain = {
OR = {
terrain = mountains
terrain = desert_mountains
terrain = hills
}
}
building_windmills_requirement_terrain = {
county ?= {
any_county_province = {
OR = {
terrain = farmlands
terrain = plains
terrain = hills
is_coastal = yes
}
}
}
}
building_watermills_requirement_terrain = {
county ?= {
any_county_province = {
OR = {
terrain = mountains
terrain = wetlands
terrain = forest
terrain = taiga
terrain = jungle
is_riverside_province = yes
}
}
}
}
building_caravanserai_requirement_terrain = {
county ?= {
any_county_province = {
OR = {
terrain = drylands
terrain = desert
terrain = oasis
terrain = floodplains
terrain = steppe
terrain = desert_mountains
AND = {
geographical_region = world_europe_west_iberia
has_global_variable = fp2_struggle_conciliation_ending
}
}
}
}
}
building_qanats_requirement_terrain = {
county ?= {
any_county_province = {
OR = {
terrain = hills
terrain = mountains
terrain = desert_mountains
terrain = desert
terrain = drylands
}
culture = { has_cultural_parameter = unlocks_qanat_building }
}
}
}
building_hospices_requirement_terrain = {
}
has_any_special_mine_trigger = {
OR = {
has_building_or_higher = rammelsberg_mines_01
has_building_or_higher = kutna_hora_mines_01
has_building_or_higher = kremnica_mines_01
has_building_or_higher = falun_mines_01
has_building_or_higher = schwaz_mines_01
has_building_or_higher = argentiera_mines_01
has_building_or_higher = kollur_mines_01
has_building_or_higher = siderokausia_mines_01
has_building_or_higher = mali_mines_01
has_building_or_higher = konasamudram_mines_01
has_building_or_higher = dean_mines_01
has_building_or_higher = zawar_mines_01
has_building_or_higher = takkeda_mines_01
has_building_or_higher = khetri_mines_01
has_building_or_higher = taghaza_mines_01
has_building_or_higher = ijil_mines_01
has_building_or_higher = turda_mines_01
has_building_or_higher = phocaea_mines_01
has_building_or_higher = pansjhir_mines_01
has_building_or_higher = trepca_mines_01
has_building_or_higher = rudnik_mines_01
has_building_or_higher = cevennes_mines_01
has_building_or_higher = allaq_mines_01
has_building_or_higher = verespatak_mines_01
has_building_or_higher = nishapur_mines_01
has_building_or_higher = srebrenica_mines_01
has_building_or_higher = ratnapura_mines_01
}
}
######################################################################
# Baronies that cannot have a holding (intended for Sahara)
######################################################################
barony_cannot_construct_holding = {
barony.title_province = {
OR = {
terrain = desert
terrain = desert_mountains
}
geographical_region = world_africa_sahara
}
}
######################################################################
# Triggers for add_random_building_effect script effect
######################################################################
# is any existing building of the checked tier? (e.g. 02)
has_any_building_of_level_trigger = {
OR = {
has_building = outposts_$BUILDING_LEVEL$
has_building = logging_camps_$BUILDING_LEVEL$
has_building = peat_quarries_$BUILDING_LEVEL$
has_building = hill_forts_$BUILDING_LEVEL$
has_building = plantations_$BUILDING_LEVEL$
has_building = quarries_$BUILDING_LEVEL$
has_building = hunting_grounds_$BUILDING_LEVEL$
has_building = military_camps_$BUILDING_LEVEL$
has_building = pastures_$BUILDING_LEVEL$
has_building = ramparts_$BUILDING_LEVEL$
has_building = curtain_walls_$BUILDING_LEVEL$
has_building = watchtowers_$BUILDING_LEVEL$
has_building = cereal_fields_$BUILDING_LEVEL$
has_building = barracks_$BUILDING_LEVEL$
has_building = camel_farms_$BUILDING_LEVEL$
has_building = hill_farms_$BUILDING_LEVEL$
has_building = elephant_pens_$BUILDING_LEVEL$
has_building = common_tradeport_$BUILDING_LEVEL$
has_building = orchards_$BUILDING_LEVEL$
has_building = farm_estates_$BUILDING_LEVEL$
has_building = regimental_grounds_$BUILDING_LEVEL$
has_building = monastic_schools_$BUILDING_LEVEL$
}
}
# is any existing building a lower tier than compare building?
has_lesser_building_trigger = {
trigger_if = {
limit = { has_building_or_higher = $COMPARE$_02 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
}
trigger_else_if = {
limit = { has_building_or_higher = $COMPARE$_03 }
OR = {
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 }
}
}
trigger_else_if = {
limit = { has_building_or_higher = $COMPARE$_04 }
OR = {
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 }
}
}
trigger_else_if = {
limit = { has_building_or_higher = $COMPARE$_05 }
OR = {
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 }
}
}
trigger_else_if = {
limit = { has_building_or_higher = $COMPARE$_06 }
OR = {
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 05 }
}
}
trigger_else_if = {
limit = { has_building_or_higher = $COMPARE$_07 }
OR = {
has_any_building_of_level_trigger = { BUILDING_LEVEL = 01 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 02 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 03 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 04 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 05 }
has_any_building_of_level_trigger = { BUILDING_LEVEL = 06 }
}
}
trigger_else = { always = no } # Must already be highest tier possible
}
# can this building be added?
add_random_building_trigger = {
building_$BUILDING$_requirement_terrain = yes # terrain fits building type
trigger_if = { # if all slots are full, this building type exists already
limit = { free_building_slots = 0 }
has_building_or_higher = $BUILDING$_01
NOT = {
has_lesser_building_trigger = { COMPARE = $BUILDING$ }
}
}
trigger_else = {
NOT = { has_building_or_higher = $BUILDING$_01 }
}
}
# Innovation and holding level triggers for most economic buildings
generic_economic_building_innovation_trigger = {
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_01 }
scope:build_owner.culture = { has_innovation = innovation_crop_rotation }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_02 }
building_requirement_castle_city_church = { LEVEL = 02 }
scope:build_owner.culture = { has_innovation = innovation_manorialism }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_04 }
building_requirement_castle_city_church = { LEVEL = 03 }
scope:build_owner.culture = { has_innovation = innovation_guilds }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_06 }
building_requirement_castle_city_church = { LEVEL = 04 }
scope:build_owner.culture = { has_innovation = innovation_cranes }
}
}
# Innovation and holding level triggers for most fortification buildings
generic_fortification_building_innovations_trigger = {
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_01 }
scope:build_owner.culture = { has_innovation = innovation_motte }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_02 }
building_requirement_castle_city_church = { LEVEL = 02 }
scope:build_owner.culture = { has_innovation = innovation_battlements }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_04 }
building_requirement_castle_city_church = { LEVEL = 03 }
scope:build_owner.culture = { has_innovation = innovation_hoardings }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_06 }
building_requirement_castle_city_church = { LEVEL = 04 }
scope:build_owner.culture = { has_innovation = innovation_machicolations }
}
}
# Innovation and holding level triggers for most recruitment buildings
generic_recruitment_building_innovations_trigger = {
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_01 }
scope:build_owner.culture = { has_innovation = innovation_barracks }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_02 }
building_requirement_castle_city_church = { LEVEL = 02 }
scope:build_owner.culture = { has_innovation = innovation_burhs }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_04 }
building_requirement_castle_city_church = { LEVEL = 03 }
scope:build_owner.culture = { has_innovation = innovation_castle_baileys }
}
trigger_if = {
limit = { has_building_or_higher = $BUILDING$_06 }
building_requirement_castle_city_church = { LEVEL = 04 }
scope:build_owner.culture = { has_innovation = innovation_royal_armory }
}
}
islamic_special_building_trigger = {
OR = {
has_building = holy_site_great_mosque_of_djenne_01
has_building = holy_site_great_mosque_of_samarra_01
has_building = holy_site_prophetic_mosque_01
has_building = hagia_sophia_02
has_building = the_friday_mosque_01 # shared zoroastrian
has_building = holy_site_great_mosque_of_cordoba_01 # shared christian
has_building_or_higher = damascus_mosque_01
}
}
christian_special_building_trigger = {
OR = {
has_building = holy_site_cologne_cathedral_01
has_building = holy_site_canterbury_cathedral_01
has_building = holy_site_canterbury_cathedral_02
has_building = holy_site_canterbury_cathedral_03
has_building = temple_of_uppsala_01
has_building = temple_of_uppsala_02
has_building = lund_cathedral_01
has_building = holy_site_great_mosque_of_cordoba_01 # shared muslim
has_building_or_higher = cluny_abbey_01
has_building_or_higher = beta_giyorgis_01
has_building_or_higher = holy_wisdom_01
has_building_or_higher = duomo_florence_01
has_building_or_higher = wawel_cathedral_01
}
}
eastern_special_building_trigger = {
OR = {
has_building = buddhas_of_bamian_01
has_building = brihadeeswarar_temple_01
has_building = shwedagon_pagoda_01
has_building = ananda_temple_01
has_building = khajuraho_01
has_building_or_higher = jokhang_01
has_building_or_higher = konark_temple_01
has_building_or_higher = vatapi_caves_01
}
}
# Religious special building triggers
religious_special_building_exclusion_trigger = { # checks if any special buildings present do not fit your religion
OR = {
AND = { # Generic
NOT = {
barony = { is_holy_site_of = holder.faith }
}
OR = {
has_building = holy_site_cathedral_01
has_building = holy_site_mosque_01
has_building = holy_site_pagan_grand_temple_01
has_building = holy_site_indian_grand_temple_01
has_building = holy_site_other_grand_temple_01
has_building = hagia_sophia_01
has_building = holy_site_mahabodhi_temple_01
has_building = holy_site_imam_ali_mosque_01
has_building = holy_site_great_mosque_of_mecca_01
islamic_special_building_trigger = yes
christian_special_building_trigger = yes
}
}
AND = { # Islamic
NOT = { barony.holder.religion = religion:islam_religion }
islamic_special_building_trigger = yes
}
AND = { # Christian
NOT = { barony.holder.religion = religion:christianity_religion }
christian_special_building_trigger = yes
}
AND = { # Islamic/Zoroastrian
NOT = { barony.holder.religion = religion:zoroastrianism_religion }
has_building = the_friday_mosque_01 # shared muslim
}
AND = { # Eastern family
NOR = {
ROOT.religion = religion:hinduism_religion
ROOT.religion = religion:buddhism_religion
ROOT.religion = religion:jainism_religion
ROOT.religion = religion:taoism_religion
ROOT.religion = religion:zoroastrianism_religion
}
eastern_special_building_trigger = yes
}
# Judaism
AND = {
barony.holder.religion = religion:judaism_religion
has_building = dome_of_the_rock_01
}
AND = {
NOT = { barony.holder.religion = religion:judaism_religion }
has_building = temple_in_jerusalem_01
}
}
}
building_murex_farm_requirement_terrain = {
is_county_capital = yes
is_coastal = yes
geographical_region = mediteranean_coast
NOR = {
this.barony = title:b_salmydessus
this.barony = title:b_chelai
}
}
building_breweries_requirement = {
OR = {
AND = {
has_building_or_higher = temple_$NUMBER$
OR = {
faith = faith:catholic
faith = { has_doctrine_parameter = allows_brewery }
}
}
AND = {
has_building_or_higher = city_$NUMBER$
culture = { has_cultural_parameter = allows_brewery }
}
}
}

View file

@ -0,0 +1,362 @@
@infant_upper_age_threshold_value = 2
@teen_lower_threshold_value = 13
@teen_upper_threshold_value = 19
child_is_infant_trigger = {
age <= @infant_upper_age_threshold_value
is_adult = no
}
# Duplicated because there were some weird edge case OR uses where "child_is_infant_trigger = no" read _extremely_ confusingly.
child_not_infant_trigger = {
age > @infant_upper_age_threshold_value
is_adult = no
}
# At what point is it not weird to hear a child using (relatively) advanced reasoning & so able to hold an extended conversation?
child_can_have_full_conversations_trigger = {
age >= 6
is_adult = no
}
child_not_teen_trigger = {
child_not_infant_trigger = yes
age < @teen_lower_threshold_value
is_adult = no
}
# Duplicated because there were some weird edge case OR uses where "child_not_teen_trigger = no" read _extremely_ confusingly.
child_is_teen_trigger = {
age >= @teen_lower_threshold_value
is_adult = no
}
child_old_enough_for_responsibility_trigger = {
age >= 8
is_adult = no
}
# Note: we don't want to say that children below this definitely can't read, that's a lot of edge cases to account for, but it's convenient to roughly unified trigger we can check for whether pensive characters are more likely to read or be read to.
child_likely_reader_trigger = { age >= 7 }
character_is_teen_trigger = {
age >= @teen_lower_threshold_value
age <= @teen_upper_threshold_value
}
character_is_teen_or_older_trigger = {
age > @teen_lower_threshold_value
}
save_good_friend_character_trigger_check = {
is_adult = no
age >= root.age_dif_child_down_friend
age <= root.age_dif_child_up_friend
NOT = { this = root }
is_imprisoned = no
opinion = {
target = root
value > -10
}
NOR = {
has_relation_friend = root
has_any_bad_relationship_with_root_trigger = yes
}
}
save_good_crush_character_trigger_check = {
is_adult = no
age >= root.age_dif_child_down
age <= root.age_dif_child_up
age > childhood_education_start_age
NOT = { this = root }
is_imprisoned = no
is_close_family_of_root_trigger = no
NOR = {
root = { has_relation_crush = prev }
has_relation_victim = root
}
OR = {
has_sexuality = heterosexual
has_sexuality = bisexual
has_sexuality = homosexual
}
is_attracted_to_gender_of = root
root = { is_attracted_to_gender_of = prev }
OR = {
num_of_relation_crush <= 2
has_trait = lustful
}
}
save_good_bully_character_trigger_check = {
is_adult = no
age >= 6
age >= root.age
NOT = { this = root }
is_imprisoned = no
OR = {
has_trait_malicious_trigger = yes
has_trait_dominant_trigger = yes
has_trait_emotional_trigger = yes
}
NOR = {
has_trait = compassionate
has_trait_submissive_trigger = yes
}
opinion = {
target = root
value < 0
}
NOR = {
has_any_bad_relationship_with_root_trigger = yes
has_relation_victim = root
has_relation_friend = root
has_relation_crush = root
}
}
save_good_victim_character_trigger_check = {
is_adult = no
age >= 6
age <= root.age
NOT = { this = root }
is_imprisoned = no
reverse_opinion = {
target = root
value < 0
}
NOR = {
has_any_bad_relationship_with_root_trigger = yes
has_relation_victim = root
has_relation_friend = root
has_relation_crush = root
}
}
child_suitable_to_play_with_character = {
# Is available for events at $CHARACTER$'s locale.
is_available_child = yes
exists = location
location = $CHARACTER$.location
# Of a suitable age range.
child_not_infant_trigger = yes
# Doesn't have a bad relationship with $CHARACTER$.
NOT = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = $CHARACTER$ }
}
}
child_suitable_to_play_with_character_one_sided = {
child_suitable_to_play_with_character = { CHARACTER = $CHARACTER$ }
is_ai = yes
}
childhood_mean_child_trigger = {
OR = {
has_trait = rowdy
has_personality_malicious_trigger = yes
has_personality_dominant_trigger = yes
ai_compassion <= low_negative_ai_value
}
}
childhood_loud_child_trigger = {
OR = {
has_trait = curious
has_trait = bossy
has_personality_extroverted_trigger = yes
has_personality_emotional_trigger = yes
ai_energy >= low_positive_ai_value
ai_boldness >= low_positive_ai_value
}
}
childhood_quiet_child_trigger = {
OR = {
has_trait = pensive
has_personality_submissive_trigger = yes
has_personality_introverted_trigger = yes
ai_energy <= low_negative_ai_value
ai_boldness <= low_negative_ai_value
}
}
childhood_nice_child_trigger = {
OR = {
has_trait = charming
has_trait = curious
has_personality_benevolent_trigger = yes
has_personality_levelheaded_trigger = yes
ai_compassion >= low_positive_ai_value
}
}
suitable_same_realm_child = {
exists = location.county.holder # Scoping like this allows children in the pool to also get this event
location.county.holder = {
OR = {
AND = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age >= 6
}
any_courtier_or_guest = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age >= 6
}
any_warden_hostage = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age >= 6
}
any_vassal = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age >= 6
}
any_vassal = {
any_courtier_or_guest = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age >= 6
}
}
}
}
}
similar_age_same_court_child = {
exists = location.county.holder # Scoping like this allows children in the pool to also get this event
location.county.holder = {
OR = {
AND = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age <= root.age_plus_3
age >= age_minus_3
}
any_courtier_or_guest = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age <= root.age_plus_3
age >= age_minus_3
}
any_warden_hostage = {
is_ai = yes
is_available_child = yes
NOT = { this = root }
age <= root.age_plus_3
age >= age_minus_3
}
}
}
}
suitable_crush_trigger = {
AND = {
save_temporary_scope_as = temp_crush
is_ai = yes
is_available_child = yes
NOT = { this = root }
child_not_infant_trigger = yes
age <= root.age_plus_3
age >= root.age_minus_3
location = root.location
OR = {
matching_gender_and_sexuality_trigger = {
CHARACTER_1 = root
CHARACTER_2 = scope:temp_crush
}
AND = {
has_sexuality = asexual
root = {
OR = {
is_attracted_to_gender_of = scope:temp_crush
has_sexuality = asexual
}
}
}
AND = {
root = { has_sexuality = asexual }
OR = {
is_attracted_to_gender_of = root
has_sexuality = asexual
}
}
}
NOT = {
relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = root }
}
}
}
suitable_crush_same_court_child = {
exists = location.county.holder # Scoping like this allows children in the pool to also get this event
location.county.holder = {
OR = {
save_good_crush_character_trigger_check = yes
any_courtier_or_guest = {
save_good_crush_character_trigger_check = yes
}
any_warden_hostage = {
save_good_crush_character_trigger_check = yes
}
}
}
}
guardian_or_court_tutor_trait = {
trigger_if = {
limit = {
any_relation = {
type = guardian
}
}
any_relation = {
type = guardian
has_trait = $TRAIT$
}
}
trigger_else = {
court_owner.court_position:court_tutor_court_position ?= {
has_trait = $TRAIT$
}
}
}
guardian_or_court_tutor_2_trait = {
trigger_if = {
limit = {
any_relation = {
type = guardian
}
}
any_relation = {
type = guardian
OR = {
has_trait = $TRAIT$
has_trait = $TRAIT_2$
}
}
}
trigger_else = {
court_owner.court_position:court_tutor_court_position ?= {
OR = {
has_trait = $TRAIT$
has_trait = $TRAIT_2$
}
}
}
}

View file

@ -0,0 +1,26 @@
### CLAN TRIGGERS ###
is_in_clan_trigger = {
exists = house
government_has_flag = government_is_clan
top_liege = house.house_head
}
is_in_same_clan_as_trigger = {
exists = house
exists = $CHARACTER$.house
OR = {
government_has_flag = government_is_clan
$CHARACTER$ = { government_has_flag = government_is_clan }
}
house = $CHARACTER$.house
top_liege = $CHARACTER$.top_liege
}
check_tax_collector_aptitude = {
$CHARACTER$ = {
tax_collector_aptitude = {
tax_slot_type = clan_tax_slot
value = $VALUE$
}
}
}

View file

@ -126,7 +126,12 @@ portrait_wear_armor_trigger = {
}
}
}
NOT = { has_any_charioteer_trait = yes }
NOT = {
OR = {
has_court_position = court_astrologer_court_position
has_any_charioteer_trait = yes
}
}
portrait_ep2_wedding_clothes_trigger = no
trigger_if = {
limit = { portrait_sickness_trigger = yes }
@ -271,6 +276,7 @@ portrait_wear_helmet_trigger = { # Different from Armor, as Kings and Emperors s
}
is_incapable = no
is_imprisoned = no
NOT = { has_court_position = court_astrologer_court_position }
trigger_if = {
limit = { portrait_sickness_trigger = yes }
is_in_army = yes
@ -394,6 +400,52 @@ is_dwarf_height = {
}
}
should_use_fat_animation = {
OR = {
AND = { # Dwarf not fat
scope:current_weight <= 40
is_dwarf_height = yes
}
AND = { # Fat non dwarf
scope:current_weight >= 40
is_dwarf_height = no
}
AND = { # Pregnant non dwarf
portrait_has_trait_trigger = { TRAIT = pregnant }
is_dwarf_height = no
}
}
}
should_use_fat_dwarf_animation = {
# Fat dwarf
scope:current_weight >= 40
is_dwarf_height = yes
}
should_use_pregnant_animation = {
portrait_has_trait_trigger = { TRAIT = pregnant }
scope:current_weight <= 40
is_dwarf_height = no
}
should_use_fat_pregnant_animation = {
portrait_has_trait_trigger = { TRAIT = pregnant }
OR = {
scope:current_weight >= 40
AND = {
is_dwarf_height = yes
scope:current_weight <= 40
}
}
}
should_use_fat_dwarf_pregnant_animation = {
portrait_has_trait_trigger = { TRAIT = pregnant }
is_dwarf_height = yes
scope:current_weight >= 40
}
portrait_shared_clothing_contents_trigger = {
trigger_if = {
limit = { exists = top_liege.var:adopted_cultural_style }
@ -637,7 +689,10 @@ portrait_fp3_iranian_clothing_spouse_trigger = {
#turkic
portrait_fp3_turkic_clothing_trigger = {
has_fp3_dlc_trigger = yes
OR = {
has_fp3_dlc_trigger = yes
has_mpo_dlc_trigger = yes
}
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = scope:culture
CULTURE_FLAG = turkic
@ -645,7 +700,24 @@ portrait_fp3_turkic_clothing_trigger = {
}
portrait_fp3_turkic_clothing_spouse_trigger = {
has_fp3_dlc_trigger = yes
OR = {
has_fp3_dlc_trigger = yes
has_mpo_dlc_trigger = yes
}
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = culture
CULTURE_FLAG = turkic
}
}
portrait_turkic_clothing_trigger = {
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = scope:culture
CULTURE_FLAG = turkic
}
}
portrait_turkic_clothing_spouse_trigger = {
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = culture
CULTURE_FLAG = turkic
@ -869,20 +941,6 @@ portrait_rus_clothing_spouse_trigger = {
}
}
portrait_turkic_clothing_trigger = {
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = scope:culture
CULTURE_FLAG = turkic
}
}
portrait_turkic_clothing_spouse_trigger = {
portrait_shared_clothing_contents_trigger = {
CULTURE_SCOPE = culture
CULTURE_FLAG = turkic
}
}
portrait_can_use_noble_headgear_trigger = {
NAND = {
portrait_has_trait_trigger = { TRAIT = peasant_leader }
@ -1068,19 +1126,20 @@ portrait_commoner_trigger = {
government_has_flag = government_is_landless_adventurer
has_realm_law = camp_purpose_scholars
}
government_has_flag = government_is_herder
}
NOR = {
portrait_high_nobles_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
portrait_royalty_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
portrait_imperial_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
portrait_low_nobles_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
}
trigger_if = {
@ -1107,10 +1166,10 @@ portrait_commoner_trigger = {
liege ?= {
highest_held_title_tier >= tier_duchy
}
OR = {
OR = {
has_council_position = councillor_chancellor
has_council_position = councillor_steward
}
}
}
}
trigger_if = {
@ -1140,11 +1199,12 @@ portrait_commoner_no_mayors_trigger = {
government_has_flag = government_is_landless_adventurer
has_realm_law = camp_purpose_scholars
}
government_has_flag = government_is_herder
}
trigger_if = {
limit = { exists = this } # To check if this is an actual character
NOR = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_spouse ?= {
AND = {
highest_held_title_tier > tier_county
@ -1190,13 +1250,13 @@ portrait_low_nobles_trigger = {
}
NOR = {
portrait_imperial_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
portrait_royalty_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
portrait_high_nobles_trigger = {
CULTURE_INPUT = $CULTURE_INPUT$
CULTURE_INPUT = $CULTURE_INPUT$
}
}
OR = {
@ -1208,11 +1268,11 @@ portrait_low_nobles_trigger = {
liege ?= {
highest_held_title_tier >= tier_duchy
}
OR = {
OR = {
has_council_position = councillor_chancellor
has_council_position = councillor_steward
}
portrait_$CULTURE_INPUT$_clothing_trigger = yes
}
portrait_$CULTURE_INPUT$_clothing_trigger = yes
}
AND = { # Courtiers
highest_held_title_tier < tier_county
@ -1242,8 +1302,9 @@ portrait_low_nobles_trigger = {
highest_held_title_tier = tier_county
}
NOR = {
government_has_flag = government_is_herder
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1272,7 +1333,7 @@ portrait_low_nobles_trigger = {
}
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1319,7 +1380,7 @@ portrait_high_nobles_trigger = {
OR = {
highest_held_title_tier >= tier_duchy # Most cultures do not have specific clothes for royalty and imperial tier, so we use the high nobility for anything from duke/duchess and up
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1353,7 +1414,7 @@ portrait_high_nobles_trigger = {
OR = {
highest_held_title_tier >= tier_duchy
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1388,6 +1449,7 @@ portrait_high_nobles_trigger = {
}
}
AND = { # Family members of rulers
highest_held_title_tier <= tier_duchy
any_close_family_member = {
is_ruler = yes
highest_held_title_tier > tier_duchy
@ -1418,7 +1480,7 @@ portrait_high_nobles_headgear_trigger = {
OR = {
highest_held_title_tier = tier_duchy
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_county
}
AND = {
@ -1451,7 +1513,7 @@ portrait_high_nobles_headgear_trigger = {
OR = {
highest_held_title_tier = tier_duchy
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_county
}
AND = {
@ -1485,6 +1547,7 @@ portrait_high_nobles_headgear_trigger = {
}
}
AND = { # Family members of rulers
highest_held_title_tier <= tier_duchy
any_close_family_member = {
is_ruler = yes
highest_held_title_tier > tier_duchy
@ -1500,7 +1563,7 @@ portrait_high_nobles_headgear_trigger = {
highest_held_title_tier >= tier_kingdom
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1510,7 +1573,7 @@ portrait_high_nobles_headgear_trigger = {
}
portrait_$CULTURE_INPUT$_clothing_trigger = yes
}
}
}
}
portrait_royalty_trigger = {
@ -1522,7 +1585,7 @@ portrait_royalty_trigger = {
highest_held_title_tier = tier_kingdom
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1544,7 +1607,7 @@ portrait_royalty_trigger = {
highest_held_title_tier = tier_kingdom
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1563,7 +1626,7 @@ portrait_royalty_trigger = {
highest_held_title_tier >= tier_kingdom
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1615,7 +1678,7 @@ portrait_royalty_african_headgear_trigger = {
}
}
}
NOT = { government_has_flag = government_is_republic }
NOT = { government_has_flag = government_is_special_republic }
OR = {
portrait_african_clothing_trigger = yes
AND = {
@ -1653,7 +1716,7 @@ portrait_royalty_african_headgear_trigger = {
has_realm_law = camp_purpose_legitimists
}
}
NOT = { government_has_flag = government_is_republic }
NOT = { government_has_flag = government_is_special_republic }
OR = {
portrait_african_clothing_spouse_trigger = yes
AND = {
@ -1684,7 +1747,7 @@ portrait_imperial_trigger = {
highest_held_title_tier = tier_empire
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1705,7 +1768,7 @@ portrait_imperial_trigger = {
highest_held_title_tier = tier_empire
NOR = {
AND = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
primary_title.tier > tier_barony
}
AND = {
@ -1744,7 +1807,7 @@ portrait_imperial_nobles_headgear_trigger = {
is_ruler = yes
government_has_flag = government_is_landless_adventurer
}
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
AND = {
is_ruler = yes
government_has_flag = government_is_theocracy
@ -2000,6 +2063,22 @@ portrait_beggar_trigger = {
}
}
}
trigger_if = {
limit = {
is_married = yes
}
NOT = {
any_consort = {
OR = {
is_landed = yes
AND = {
government_has_flag = government_is_nomadic
is_ruler = yes
}
}
}
}
}
}
@ -2036,7 +2115,7 @@ portrait_mayor_trigger = {
portrait_mayor_headgear_trigger = {
exists = this
highest_held_title_tier < tier_county
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
portrait_$CULTURE_INPUT$_clothing_trigger = yes
}
@ -2181,17 +2260,9 @@ portrait_religious_head_popes_trigger = {
exists = this
OR = {
AND = {
faith = faith:roman_catholic
faith = faith:catholic
is_adult = yes
religion = religion:catholic_religion
primary_title ?= {
is_head_of_faith = yes
}
}
AND = {
faith = faith:sevillian
is_adult = yes
religion = religion:catholic_religion
religion = religion:christianity_religion
primary_title ?= {
is_head_of_faith = yes
}
@ -2242,25 +2313,8 @@ portrait_religious_christian_trigger = {
}
portrait_religious_catholic_trigger = {
OR = {
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:roman_catholic }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:sevillian }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:celtic }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:iberian }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:orleaniste }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:teutonic }
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:catholic }
}
}
@ -2377,7 +2431,7 @@ portrait_religious_african_trigger = {
portrait_reichskrone_trigger = {
exists = this
AND = {
OR = {
has_primary_title = title:e_hre
any_equipped_character_artifact = {
has_variable = reichskrone
@ -2411,9 +2465,9 @@ portrait_ep2_western_travel_cloak_trigger = {
# thou shalt shed thy cloak whilst at an activity
trigger_if = {
limit = {
involved_activity ?= {
involved_activity ?= {
NOR = {
has_activity_type = activity_hunt
has_activity_type = activity_hunt
has_activity_type = activity_roaming
}
}
@ -2446,9 +2500,9 @@ portrait_ep2_mena_travel_cloak_trigger = {
# thou shalt shed thy cloak whilst at an activity
trigger_if = {
limit = {
involved_activity ?= {
involved_activity ?= {
NOR = {
has_activity_type = activity_hunt
has_activity_type = activity_hunt
has_activity_type = activity_roaming
}
}
@ -2535,5 +2589,3 @@ portrait_ep2_wedding_clothes_trigger = {
}
### General headgear triggers ###

View file

@ -0,0 +1,364 @@
#Triggers to control Coat of Arms weighting
coa_african_trigger = {
OR = {
coa_african_culture_trigger = yes
coa_african_religion_trigger = yes
}
}
coa_african_culture_trigger = {
scope:culture = {
OR = {
has_coa_gfx = central_african_group_coa_gfx
has_coa_gfx = east_african_coa_gfx
has_coa_gfx = west_african_group_coa_gfx
}
}
}
coa_african_religion_trigger = {
scope:faith.religion = {
save_temporary_scope_as = religion
}
OR = {
scope:religion = religion:akom_religion
scope:religion = religion:waaqism_religion
scope:religion = religion:west_african_religion
scope:religion = religion:west_african_bori_religion
scope:religion = religion:west_african_orisha_religion
scope:religion = religion:west_african_roog_religion
}
}
coa_bishopric_trigger = {
scope:faith.religion = religion:christianity_religion
coa_theocratic_trigger = yes
}
coa_breton_trigger = {
OR = {
scope:culture = { has_coa_gfx = breton_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:k_brittany
}
}
}
}
}
coa_byzantine_trigger = {
OR = {
scope:culture = { has_coa_gfx = byzantine_group_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:e_byzantium
}
}
}
}
}
coa_castilian_trigger = {
OR = {
scope:culture = { has_coa_gfx = castilian_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:k_castille
}
}
}
}
}
coa_coptic_trigger = {
OR = {
# TODO graphical faith trigger
scope:faith = faith:coptic
#scope:faith = faith:armenian_apostolic
#scope:faith = faith:paulician
}
}
coa_cross_trigger = {
scope:faith = {
religion = religion:christianity_religion
NOT = { has_doctrine = tenet_aniconism }
}
}
coa_england_switches_to_france_coa_trigger = {
holder = {
OR = {
has_title = title:k_france
has_claim_on = title:k_france
has_title = title:e_france
has_claim_on = title:e_france
}
}
}
coa_switch_to_norman_trigger = {
holder.culture = {
OR = {
has_coa_gfx = english_coa_gfx
has_coa_gfx = frankish_group_coa_gfx
has_coa_gfx = latin_group_coa_gfx
has_coa_gfx = iberian_group_coa_gfx
}
}
}
coa_switch_to_norse_trigger = {
holder = {
NOT = {
faith.religion = religion:christianity_religion
}
OR = {
faith.religion = religion:germanic_religion
culture = { has_coa_gfx = norse_coa_gfx }
}
}
}
coa_feudal_trigger = {
scope:faith.religion = religion:christianity_religion
government_has_flag = government_is_feudal
}
coa_french_trigger = {
OR = {
scope:culture = { has_coa_gfx = french_coa_gfx }
AND = {
exists = root
any_liege_or_above = {
primary_title = {
this = title:k_france
}
}
}
}
}
coa_irish_trigger = {
OR = {
scope:culture = { has_coa_gfx = irish_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:k_ireland
}
}
}
}
}
coa_indian_culture_trigger = {
OR = {
scope:culture = { has_coa_gfx = burman_group_coa_gfx }
scope:culture = { has_coa_gfx = dravidian_group_coa_gfx }
scope:culture = { has_coa_gfx = indo_aryan_group_coa_gfx }
scope:culture = { has_coa_gfx = tibetan_group_coa_gfx }
}
}
coa_indian_region_trigger = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
OR = {
this = title:e_india
this = title:e_bengal
this = title:e_deccan
this = title:e_rajastan
this = title:e_tibet
}
}
}
}
coa_indian_religion_trigger = {
scope:faith.religion = {
save_temporary_scope_as = religion
}
OR = {
scope:religion = religion:bon_religion
scope:religion = religion:buddhism_religion
scope:religion = religion:hinduism_religion
scope:religion = religion:jainism_religion
}
}
coa_indian_trigger = {
OR = {
coa_indian_culture_trigger = yes
coa_indian_region_trigger = yes
coa_indian_religion_trigger = yes
}
}
coa_jewish_trigger = {
OR = {
scope:faith.religion = religion:judaism_religion
scope:culture = { has_coa_gfx = israelite_group_coa_gfx }
}
}
coa_leonese_trigger = {
OR = {
scope:culture = { has_coa_gfx = leonese_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:k_leon
}
}
}
}
}
coa_manx_trigger = {
OR = {
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:d_the_isles # Mann
}
}
}
AND = {
exists = root
any_liege_or_above = {
primary_title = {
OR = {
this = title:c_isle_of_man
this = title:d_the_isles # Mann
}
}
}
}
}
}
coa_mena_trigger = {
OR = {
scope:faith.religion = religion:islam_religion
scope:culture = {
OR = {
has_coa_gfx = arabic_group_coa_gfx
has_coa_gfx = berber_group_coa_gfx
}
}
}
}
coa_suomenusko_trigger = {
OR = {
scope:faith.religion = religion:finno_ugric_religion
scope:culture = {
OR = {
has_coa_gfx = balto_finnic_group_coa_gfx
has_coa_gfx = ugro_permian_group_coa_gfx
has_coa_gfx = volga_finnic_group_coa_gfx
}
}
}
}
coa_polish_trigger = {
OR = {
scope:culture = { has_coa_gfx = polish_coa_gfx }
AND = {
exists = root
any_liege_or_above = {
primary_title = {
this = title:k_poland
}
}
}
}
}
coa_scottish_trigger = {
OR = {
scope:culture = { has_coa_gfx = scottish_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:k_scotland
}
}
}
}
}
coa_theocratic_trigger = {
exists = root
OR = {
government_has_flag = government_is_theocracy
AND = {
exists = liege
liege = {
any_sub_realm_barony = {
lessee = ROOT
title_province = {
has_holding_type = church_holding
}
}
}
}
}
}
coa_welsh_trigger = {
scope:culture = { has_coa_gfx = welsh_coa_gfx }
}
coa_tamga_trigger = {
scope:culture = { has_coa_gfx = steppe_coa_gfx }
}
coa_scandinavian_trigger = {
OR = {
scope:culture = { has_coa_gfx = swedish_coa_gfx }
scope:culture = { has_coa_gfx = norwegian_coa_gfx }
scope:culture = { has_coa_gfx = danish_coa_gfx }
}
}
coa_norse_trigger = {
scope:culture = { has_coa_gfx = norse_coa_gfx }
}
coa_germanic_trigger = {
scope:culture = { has_coa_gfx = german_group_coa_gfx }
}
coa_iberian_trigger = {
OR = {
scope:culture = { has_coa_gfx = iberian_group_coa_gfx }
AND = {
scope:culture = { has_coa_gfx = arabic_group_coa_gfx }
AND = {
exists = scope:title
scope:title = {
any_this_title_or_de_jure_above = {
this = title:e_spain
}
}
}
}
}
}
coa_iranian_trigger = {
scope:culture = { has_coa_gfx = iranian_group_coa_gfx }
}

View file

@ -0,0 +1,62 @@
#Triggers relating to Commander Characters
commander_in_terrain_specialisation = {
OR = {
AND = {
has_trait = desert_warrior
location = {
terrain = desert
terrain = desert_mountains
}
}
AND = {
has_trait = jungle_stalker
location = { terrain = jungle }
}
AND = {
has_trait = open_terrain_expert
location = {
terrain = farmlands
terrain = plains
terrain = steppe
}
}
AND = {
has_trait = rough_terrain_expert
location = {
terrain = hills
terrain = mountains
terrain = wetlands
}
}
AND = {
has_trait = forest_fighter
location = {
terrain = forest
terrain = taiga
}
}
}
}
has_commander_trait_trigger = {
OR = {
has_trait = logistician
has_trait = military_engineer
has_trait = aggressive_attacker
has_trait = unyielding_defender
has_trait = forder
has_trait = flexible_leader
has_trait = desert_warrior
has_trait = jungle_stalker
has_trait = reaver
has_trait = reckless
has_trait = holy_warrior
has_trait = open_terrain_expert
has_trait = rough_terrain_expert
has_trait = forest_fighter
has_trait = cautious_leader
has_trait = organizer
has_trait = winter_soldier
}
}

View file

@ -0,0 +1,22 @@
#####################
# COMPLIMENT SYSTEM #
#####################
#This system evaluates whether a character would accept a certain type of compliment (types listed below) from another character. It will set a compliment_outcome varaible with a flag value of either good, neutral or bad which can be used to trigger follow up events. Read more in the effects file.
can_receieve_good_available_compliment_trigger = {
OR = {
ai_compassion >= low_positive_ai_value
ai_boldness >= low_positive_ai_value
ai_honor >= low_positive_ai_value
ai_greed >= low_positive_ai_value
ai_rationality >= low_positive_ai_value
ai_zeal >= low_positive_ai_value
ai_energy >= low_positive_ai_value
ai_vengefulness <= low_negative_ai_value
attraction >= 10
has_trait = strong
has_trait = physique_good
has_personality_extroverted_trigger = yes
has_personality_dominant_trigger = yes
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,47 @@

###TRIGGER LIST
# has_county_corruption_trigger - Does the County have any corruption modifiers
# immune_to_county_corruption_trigger - Is the County immune to corruption for any reason
# is_valid_for_county_corruption_trigger - Can County Corruption be applied in this County
has_county_corruption_trigger = {
OR = {
has_county_modifier = county_corruption_inefficient_tax_collection_modifier
has_county_modifier = county_corruption_deserting_levies_modifier
has_county_modifier = county_corruption_smuggling_ring_modifier
has_county_modifier = county_corruption_bandits_rampant_modifier
has_county_modifier = county_corruption_inefficient_census_modifier
has_county_modifier = county_corruption_lack_of_sheriffs_modifier
has_county_modifier = county_corruption_lack_of_courts_modifier
has_county_modifier = county_corruption_thieves_guild_modifier
has_county_modifier = county_corruption_unsafe_highways_modifier
has_county_modifier = county_corruption_uncooperative_guilds_modifier
has_county_modifier = county_corruption_lackluster_administration_modifier
has_county_modifier = county_corruption_roaming_bandits_modifier
has_county_modifier = county_corruption_wild_beast_attacks_modifier
has_county_modifier = county_corruption_upset_shepherds_modifier
has_county_modifier = county_corruption_rogue_warriors_modifier
has_county_modifier = county_corruption_unruly_nomads_modifier
has_county_modifier = small_investment_in_revolt_modifier
has_county_modifier = medium_investment_in_revolt_modifier
has_county_modifier = high_investment_in_revolt_modifier
}
}
immune_to_county_corruption_trigger = {
OR = {
is_landless_type_title = yes
has_variable = corruption_event_happening
has_variable = county_corruption_recent_removal
is_target_of_council_task = task_increase_control
has_county_modifier = marshal_task_military_presence_modifier
}
}
is_valid_for_county_corruption_trigger = {
NOT = {
county_corruption_modifier_count >= max_county_corruption_modifiers_at_once
}
immune_to_county_corruption_trigger = no
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,92 @@
is_non_spouse_councillor_trigger = {
is_available_healthy_ai_adult = yes
NOT = {
is_spouse_of = scope:ruler
}
}
court_event_ongoing_trigger = {
OR = {
has_local_player_open_court_event = yes
has_local_player_unopened_court_event = yes
}
}
is_available_non_adventurer_inspired_person_trigger = {
exists = inspiration
is_in_the_same_court_as_or_guest = scope:ruler
is_available_healthy_ai_adult = yes
}
is_available_schemer = {
save_temporary_scope_as = schemer_check
OR = {
has_owned_scheme = yes
scope:ruler = {
any_targeting_scheme = {
is_hostile = yes
any_scheme_agent_character = {
this = scope:schemer_check
}
}
}
}
is_available_healthy_ai_adult = yes
}
is_available_non_primary_consort = {
is_available = yes
NOT = {this = primary_spouse }
}
is_available_non_child_family = {
is_available = yes
is_healthy = yes
child_not_infant_trigger = yes
is_close_or_extended_family_of = scope:ruler
}
is_incorrect_type_for_throne_trigger = {
trigger_if = {
limit = {
exists = $CHARACTER$.capital_county
}
$CHARACTER$.capital_county.culture = {
OR = {
has_graphical_mena_culture_group_trigger = yes
has_graphical_india_culture_group_trigger = yes
}
}
}
OR = {
has_trait = dwarf
has_trait = giant
is_adult = no
}
}
is_spouse_incorrect_type_for_throne_trigger = {
trigger_if = {
limit = {
exists = $CHARACTER$.capital_county
}
$CHARACTER$.capital_county.culture = {
OR = {
has_graphical_mena_culture_group_trigger = yes
has_graphical_india_culture_group_trigger = yes
}
}
}
exists = $CHARACTER$.primary_spouse
$CHARACTER$.primary_spouse = {
OR = {
has_trait = dwarf
has_trait = giant
is_adult = no
}
}
}
has_court_event_flag = {
has_character_flag = in_court_event
}

View file

@ -0,0 +1,6 @@
court_love_is_shunned_or_criminal_trigger = {
OR = {
scope:target = { relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = scope:owner } }
scope:target = { relation_with_character_is_sodomy_in_my_or_lieges_faith_trigger = { CHARACTER = scope:owner } }
}
}

View file

@ -0,0 +1,829 @@
###TRIGGER LIST###
#GUEST/COURTIER LEAVING/ARRIVING TRIGGERS:
#any_child_not_in_traveling_family_trigger
#any_consort_not_in_traveling_family_trigger
#courtier_allowed_to_leave_trigger
#guest_allowed_to_leave_trigger
#guest_allowed_to_arrive_trigger
#GUEST/COURTIER USEFULNESS:
#courtier_or_guest_claim_trigger
#useful_courtier_or_guest_claim_trigger
#has_useful_potential_spouse_claim_trigger
#guest_knight_candidate_trigger
#guest_commander_candidate_trigger
#guest_vassal_candidate_trigger
#guest_physician_candidate_trigger
#guest_male_female_balance_trigger
#child_available_for_guest_marriage_trigger
#guest_marriage_candidate_trigger
#POOL CHARACTER TRIGGERS:
#pool_character_is_pruneable_trigger
####GUEST/COURTIER LEAVING/ARRIVING TRIGGERS###
same_location_and_court_status_as = { # Same location and both are in court / are guests / are pool characters
exists = location
exists = $CHARACTER$.location
location = $CHARACTER$.location
OR = {
is_in_the_same_court_as = $CHARACTER$
trigger_if = {
limit = { $CHARACTER$ = { is_pool_guest = yes } }
is_pool_guest = yes
}
trigger_if = {
limit = { $CHARACTER$ = { is_pool_character = yes } }
is_pool_character = yes
}
}
}
any_child_not_in_traveling_family_trigger = {
save_temporary_scope_as = traveler
exists = location
any_child = {
is_adult = no
same_location_and_court_status_as = { CHARACTER = scope:traveler }
save_temporary_scope_as = checking_child
scope:traveler = {
NOT = {
any_traveling_family_member = { this = scope:checking_child }
}
}
}
}
any_consort_not_in_traveling_family_trigger = {
save_temporary_scope_as = traveler
exists = location
any_spouse = {
exists = location
same_location_and_court_status_as = { CHARACTER = scope:traveler }
save_temporary_scope_as = checking_consort
scope:traveler = {
NOT = {
any_traveling_family_member = { this = scope:checking_consort }
}
}
}
}
courtier_allowed_to_leave_trigger = {
save_temporary_scope_as = leaving_courtier
NOR = {
# Not blocked by script
has_character_flag = blocked_from_leaving
is_councillor_of = scope:liege
is_consort_of = scope:liege
scope:liege = {
player_heir_position = {
target = scope:leaving_courtier
value <= 2 #Not 1st, 2nd or 3rd player heir (0,1,2)
}
}
has_any_court_position = yes
has_relation_lover = scope:liege
is_knight_of = scope:liege
is_tax_collector_of = scope:liege
any_relation = {
type = ward
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = guardian
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = mentor
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
any_relation = {
type = student
OR = {
this = scope:liege
AND = {
is_courtier_of = scope:liege
OR = {
NOT = { any_close_family_member = { this = scope:leaving_courtier } }
any_close_family_member = { this = scope:liege }
}
}
}
}
has_epidemic_disease_trigger = yes
#Keep daughters/sons for marriages
AND = {
OR = {
is_child_of = scope:liege
is_grandchild_of = scope:liege
is_great_grandchild_of = scope:liege
}
NOT = { has_trait = bastard }
trigger_if = { #Daughters
limit = { is_female = yes }
scope:liege = {
OR = {
has_realm_law = male_only_law
has_realm_law = male_preference_law
}
}
}
trigger_else = { #Sons
scope:liege = {
OR = {
has_realm_law = female_only_law
has_realm_law = female_preference_law
}
}
}
}
#No children of liege can leave court while children
AND = {
OR = {
is_child_of = scope:liege
is_grandchild_of = scope:liege
is_great_grandchild_of = scope:liege
}
is_adult = no
}
#Claimant won't leave while claim is pressed...
scope:liege = { pressing_claim_of_character_trigger = { CHARACTER = scope:leaving_courtier } }
#Would be leaving without a child or consort
any_child_not_in_traveling_family_trigger = yes
any_consort_not_in_traveling_family_trigger = yes
#...Or while they have a promise for a claim getting pressed
has_character_flag = courtier_staying_for_claim
#...Or if they're involved in an ongoing event
has_variable = stewardship_duty_1062_employer
#...Or if someone is trying to elope with them
any_targeting_scheme = {
scheme_type = elope
}
#Non-dominant spouses don't wander off
AND = {
is_married = yes
any_spouse = {
OR = {
AND = {
exists = liege
liege = scope:leaving_courtier.liege
}
AND = {
exists = host
exists = scope:leaving_courtier.host
liege = scope:leaving_courtier.host
}
is_in_the_same_court_as = scope:leaving_courtier
}
}
trigger_if = {
limit = { is_female = yes }
scope:liege = {
OR = {
has_realm_law = male_only_law
has_realm_law = male_preference_law
}
}
}
trigger_else = {
scope:liege = {
OR = {
has_realm_law = female_only_law
has_realm_law = female_preference_law
}
}
}
}
# Diarchs don't leave their court.
is_diarch = yes
is_designated_diarch = yes
#Shieldmaidens stay till dismissed.
has_trait = shieldmaiden
# Children taught a lesson won't leave
has_character_modifier = mellowed_spirit
# Courtiers with sponsored inspirations won't leave on their own.
AND = {
exists = inspiration
inspiration = { exists = inspiration_sponsor }
}
scope:liege = { government_has_flag = government_is_landless_adventurer }
is_obedient_to = scope:liege
}
}
guest_allowed_to_leave_trigger = {
NOR = {
# Not blocked by script
has_character_flag = blocked_from_leaving
#Agent in a local scheme
scope:host = {
any_courtier = {
any_targeting_scheme = {
any_scheme_agent_character = {
this = scope:guest
}
}
}
}
scope:host = {
any_targeting_scheme = {
any_scheme_agent_character = {
this = scope:guest
}
}
}
any_child = { # No child can be a known child of the host
is_adult = no
any_parent = { this = scope:host }
}
# Diarchs don't leave their court.
is_diarch = yes
is_designated_diarch = yes
#Too sick to travel
has_epidemic_disease_trigger = yes
#Would be leaving without spouse or underage child
any_child_not_in_traveling_family_trigger = yes
any_consort_not_in_traveling_family_trigger = yes
#Is waiting for inspiration funding
exists = inspiration
}
}
guest_allowed_to_arrive_trigger = {
trigger_if = {
limit = { exists = var:last_visited_ruler }
NOT = { var:last_visited_ruler = $HOST$ }
}
trigger_if = { # Make sure that they're not trying to go back to where they are right now
limit = { exists = host }
NOT = { host = $HOST$ }
}
has_epidemic_disease_trigger = no
NOT = { has_relation_rival = $HOST$ }
#Compatible faiths
faith = {
save_temporary_scope_as = potential_guest_faith
faith_hostility_level = {
target = $HOST$.faith
value < faith_evil_level
}
}
$HOST$.faith = {
faith_hostility_level = {
target = scope:potential_guest_faith
value < faith_evil_level
}
}
#Isn't too good for host
NAND = {
OR = {
any_claim = { tier = tier_empire }
any_close_family_member = { highest_held_title_tier = tier_empire }
}
$HOST$ = { highest_held_title_tier <= tier_county }
}
} #Note: this trigger used to contain opinion triggers but then some awful rulers could never get guests because everyone hates them
#This is a localized trigger for checking that a character do not have a spouse that's employed or has some other circumstance blocking them from being recruited to a court
can_recruit_character_to_court_trigger = {
$RECRUITER$ = { save_temporary_scope_as = recruiter }
$RECRUITEE$ = { save_temporary_scope_as = recruitee }
scope:recruitee = {
bp2_valid_for_standard_interactions_trigger = yes
NOR = {
custom_description = {
text = is_not_wandering_child
subject = scope:recruitee
AND = {
is_adult = no
NOT = { is_close_or_extended_family_of = scope:recruiter }
}
}
is_imprisoned = yes
is_theocratic_lessee = yes
is_diarch = yes
trigger_if = {
limit = {
exists = host
NOT = { is_player_heir_of = scope:recruiter }
}
is_player_heir_of = host
}
trigger_if = {
limit = { exists = host }
is_consort_of = host
}
trigger_if = {
limit = { exists = host }
host = {
pressing_claim_of_character_trigger = { CHARACTER = scope:recruitee }
}
}
trigger_if = {
limit = { exists = host }
#Are they employed?
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_court_position_employer = { this = scope:recruitee.host }
}
trigger_if = {
limit = {
scope:recruiter = { is_landless_adventurer = yes }
}
custom_tooltip = {
text = can_recruit_character_to_court_trigger.tt.laamps_invitation_restrictions
NOR = {
is_player_heir_of = scope:recruiter
has_relation_soulmate = scope:recruiter
has_relation_best_friend = scope:recruiter
is_consort_of = scope:recruiter
AND = {
is_pool_character = yes
OR = {
has_relation_friend = scope:recruiter
has_relation_lover = scope:recruiter
is_close_family_of = scope:recruiter
}
}
}
}
}
#Do they have the "wrong" marriage type and the spouse is employed?
custom_description = {
text = is_married_matrilineally_and_spouse_is_dominant_partner
subject = scope:recruitee
any_spouse = {
is_female = yes
matrilinear_marriage = yes
exists = host
host = scope:recruitee.host
save_temporary_scope_as = spouse
OR = { #Is employed in some way
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
scope:spouse = {
any_court_position_employer = { this = scope:recruitee.host }
}
}
}
}
custom_description = {
text = is_married_patrilineally_and_spouse_is_dominant_partner
subject = scope:recruitee
any_spouse = {
is_male = yes
patrilinear_marriage = yes
exists = host
host = scope:recruitee.host
save_temporary_scope_as = spouse
OR = { #Is employed in some way
is_councillor_of = scope:recruitee.host
is_knight_of = scope:recruitee.host
any_relation = {
type = ward
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = guardian
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = mentor
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
any_relation = {
type = student
OR = {
this = scope:recruitee.host
is_close_family_of = scope:recruitee.host
}
}
scope:spouse = {
any_court_position_employer = { this = scope:recruitee.host }
}
}
}
}
custom_description = {
text = "is_escaped_prisoner"
subject = scope:recruitee
OR = {
has_opinion_modifier = {
modifier = attempted_imprisonment_opinion
target = scope:recruiter
}
has_opinion_modifier = {
modifier = treasonous_imprison_refusal
target = scope:recruiter
}
AND = {
exists = var:escaped_imprisonment_from
var:escaped_imprisonment_from = scope:recruiter
}
}
}
}
}
}
###GUEST/COURTIER USEFULNESS TRIGGERS###
courtier_or_guest_claim_trigger = {
exists = holder
NOT = {
holder = {
OR = {
this = $RULER$
target_is_liege_or_above = $RULER$
}
}
}
}
useful_courtier_or_guest_claim_trigger = {
courtier_or_guest_claim_trigger = { RULER = $RULER$ }
tier < $RULER$.highest_held_title_tier
$RULER$ = { is_landed = yes }
OR = { #For distance check
exists = title_province
exists = holder.capital_province
}
#The higher tier the ruler has, the longer distance is acceptable
#We prefer to measure against the title's province, but if there is none, check its holder
trigger_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_empire } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_almost_massive } }
}
}
trigger_else_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_kingdom } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_huge } }
}
}
trigger_else_if = {
limit = { $RULER$ = { highest_held_title_tier = tier_duchy } }
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_large } }
}
}
trigger_else = {
trigger_if = {
limit = { exists = title_province }
title_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } }
}
trigger_else = {
holder.capital_province = { squared_distance = { target = $RULER$.capital_province value <= squared_distance_medium } }
}
}
}
neighboring_useful_courtier_or_guest_claim_trigger = {
courtier_or_guest_claim_trigger = { RULER = $RULER$ }
tier < $RULER$.highest_held_title_tier
exists = $RULER$.capital_province
holder = {
any_sub_realm_county = {
is_neighbor_to_realm = $RULER$
}
}
}
has_useful_potential_spouse_claim_trigger = {
any_claim = {
pressed = yes
exists = holder
NOT = {
holder = {
OR = {
this = $RULER$
target_is_liege_or_above = $RULER$
}
}
}
}
}
guest_knight_candidate_trigger = {
can_be_knight_trigger = { ARMY_OWNER = $HOST$ }
age < 60
age >= 25
prowess > medium_skill_rating
}
guest_commander_candidate_trigger = {
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $HOST$ }
age < 60
age >= 25
martial > medium_skill_rating
}
guest_vassal_candidate_good_traits_trigger = {
OR = { #Gives +opinion of liege
has_trait = content
has_trait = trusting
has_trait = humble
}
}
guest_vassal_candidate_bad_traits_trigger = {
OR = { #Gives -opinion of liege
has_trait = ambitious
has_trait = arrogant
has_trait = impatient
}
}
guest_vassal_candidate_trigger = {
age < 60
faith = scope:host.faith
culture = scope:host.culture
faith = {
has_dominant_ruling_gender = prev
}
guest_vassal_candidate_bad_traits_trigger = no
save_temporary_scope_as = vassal_candidate
is_eunuch_trigger = no
NOR = { #So they don't leave your realm through inheritance
any_heir_title = {
scope:guest = { is_primary_heir_of = scope:vassal_candidate }
}
any_child = { is_playable_character = yes }
has_trait = devoted
has_trait = order_member
}
}
guest_physician_candidate_trigger = {
age < 70
learning >= decent_skill_rating
}
guest_male_female_balance_trigger = { #are you interesting enough to get "upbalanced" to make up for lack of available positions due to your gender?
is_adult = yes
age <= 65
is_lowborn = no
}
child_available_for_guest_marriage_trigger = {
is_married = no
is_betrothed = no
age >= 10
OR = {
is_vassal_of = scope:host
is_courtier_of = scope:host
}
}
guest_marriage_candidate_trigger = {
save_temporary_scope_as = marriage_candidate
OR = {
is_male = yes
age <= 40
}
OR = {
AND = {
is_married = no
can_marry_character_trigger = { CHARACTER = scope:host }
}
scope:host = {
any_child = {
child_available_for_guest_marriage_trigger = yes
can_marry_character_trigger = { CHARACTER = scope:marriage_candidate }
}
}
}
}
###POOL TRIGGERS###
is_visitable_relation_trigger = {
exists = capital_province
capital_province = { local_pool_is_full_trigger = no }
NOR = {
this = $CHARACTER$.host
has_relation_rival = $CHARACTER$
}
$CHARACTER$ = {
NAND = {
exists = var:last_visited_ruler
var:last_visited_ruler = prev
}
}
}
###########################
# POOL CHARACTER TRIGGERS #
###########################
pool_character_is_pruneable_trigger = {
save_temporary_scope_as = pool_prune_check
is_adult = yes
NOR = {
has_trait = peasant_leader
has_trait = gallowsbait
has_trait = heresiarch
has_trait = populist_leader
has_trait = adventurer_follower
has_trait = adventurer
has_trait = historical_character
has_character_flag = ai_will_not_convert
is_married = yes
any_claim = { always = yes }
any_child = { is_adult = no }
num_of_good_genetic_traits >= 1
any_relation = {
type = lover
is_ruler = yes
}
any_relation = {
type = friend
is_ruler = yes
}
any_close_or_extended_family_member = { is_ruler = yes }
AND = { #Belongs to a dynasty with more than 1 member
exists = dynasty
dynasty = { any_dynasty_member = { NOT = { this = scope:pool_prune_check } } }
}
any_relation = {
type = rival
is_ai = no
}
has_character_flag = easteregg
}
trigger_if = {
limit = {
is_lowborn = no
}
NOR = {
diplomacy >= high_skill_rating
martial >= high_skill_rating
stewardship >= high_skill_rating
intrigue >= high_skill_rating
learning >= high_skill_rating
prowess >= high_skill_rating
any_relation = {
type = rival
is_ruler = yes
}
culture = {
has_cultural_tradition = tradition_diasporic
}
}
}
}
local_pool_is_full_trigger = {
number_of_characters_in_pool >= full_pool_size
}
guest_poet_candidate_trigger = {
age < 80
age >= 16
diplomacy > medium_skill_rating
}
is_courtier_or_knight_of_root = {
OR = {
is_courtier_of = root
is_knight_of = root
}
}
guest_herder_candidate_trigger = {
government_has_flag = government_is_herder
has_trait = lifestyle_seasoned_pastor
trigger_if = {
limit = { root.faith = { has_doctrine = doctrine_gender_male_dominated } }
is_male = yes
}
trigger_if = {
limit = { root.faith = { has_doctrine = doctrine_gender_female_dominated } }
is_female = yes
}
age < 45
age >= 25
}

View file

@ -0,0 +1,68 @@
#is_witch_trigger
#is_deviant_trigger
is_witch_trigger = {
custom_description = {
text = is_a_witch
subject = this
OR = {
has_trait = witch
any_secret = { secret_type = secret_witch }
}
}
}
is_witch_known_by_trigger = {
OR = {
has_trait = witch
custom_description = {
text = has_a_witch_secret_known_by_character
subject = this
object = $CHARACTER$
any_secret = {
secret_type = secret_witch
is_known_by = $CHARACTER$
}
}
}
}
is_deviant_trigger = {
OR = {
has_trait = deviant
any_secret = { secret_type = secret_deviant }
}
}
is_incestuous_trigger = {
OR = {
has_trait = incestuous
any_secret = {
secret_type = secret_incest
}
}
}
sexual_activity_with_partner_is_criminal_in_faith_trigger = {
save_temporary_scope_as = sexual_legality_check
OR = {
#Incest (currently never illegal so commented out)
#AND = {
# relation_with_character_is_incestuous_in_faith_trigger = { CHARACTER = $PARTNER$ FAITH = $FAITH$ }
# trait_is_criminal_in_faith_trigger = { TRAIT = incestuous FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check } }
#}
#Sodomy
AND = {
relation_with_character_is_sodomy_in_faith_trigger = { CHARACTER = $PARTNER$ FAITH = $FAITH$ }
trait_is_criminal_in_faith_trigger = { TRAIT = sodomite FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check }
}
#Adultery/fornication
AND = {
NOT = { is_consort_of = $PARTNER$ }
trait_is_criminal_in_faith_trigger = { TRAIT = fornicator FAITH = $FAITH$ GENDER_CHARACTER = scope:sexual_legality_check }
}
}
}

View file

@ -0,0 +1,16 @@
knows_about_character_being_same_crypto_religionist_trigger = {
exists = secret_faith
$CHARACTER$ = { exists = secret_faith }
secret_faith = $CHARACTER$.secret_faith
any_known_secret = {
secret_owner = $CHARACTER$
secret_type = secret_crypto_religionist
}
}
has_crypto_religionist_secret_known_by_character_trigger = {
any_secret = {
secret_type = secret_crypto_religionist
any_secret_knower = { this = $CHARACTER$ }
}
}

View file

@ -0,0 +1,185 @@

### Cultural heritage triggers
# By their nature these triggers will be a bit lose and inaccurate, so keep that in mind when using them!
#ASIA
culture_has_asian_heritage_pillar_trigger = {
OR = {
culture_has_east_asian_heritage_pillar_trigger = yes
culture_has_west_asian_heritage_pillar_trigger = yes
culture_has_south_asian_heritage_pillar_trigger = yes
culture_has_north_asian_heritage_pillar_trigger = yes
culture_has_central_asian_heritage_pillar_trigger = yes
}
}
culture_has_east_asian_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_tibetan
has_cultural_pillar = heritage_chinese
has_cultural_pillar = heritage_mongolic
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_burman
has_cultural_pillar = heritage_qiangic
}
}
}
culture_has_west_asian_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_iranian
has_cultural_pillar = heritage_turkic
}
}
}
culture_has_south_asian_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_indo_aryan
has_cultural_pillar = heritage_dravidian
has_cultural_pillar = heritage_burman
has_cultural_pillar = heritage_qiangic
}
}
}
culture_has_north_asian_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_mongolic
has_cultural_pillar = heritage_ugro_permian
}
}
}
culture_has_central_asian_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_qiangic
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_mongolic
}
}
}
#AFRICA
culture_has_african_heritage_pillar_trigger = {
OR = {
culture_has_west_african_heritage_pillar_trigger = yes
culture_has_east_african_heritage_pillar_trigger = yes
culture_has_north_african_heritage_pillar_trigger = yes
culture_has_central_african_heritage_pillar_trigger = yes
}
}
culture_has_west_african_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_akan
has_cultural_pillar = heritage_yoruba
has_cultural_pillar = heritage_west_african
has_cultural_pillar = heritage_senegambian
has_cultural_pillar = heritage_sahelian
has_cultural_pillar = heritage_akan
}
}
}
culture_has_east_african_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_somalian
has_cultural_pillar = heritage_east_african
}
}
}
culture_has_north_african_heritage_pillar_trigger = {
culture = {
has_cultural_pillar = heritage_berber
}
}
culture_has_central_african_heritage_pillar_trigger = {
culture = {
has_cultural_pillar = heritage_central_african
}
}
#MENA
culture_has_mena_heritage_pillar_trigger = {
OR = {
culture = { has_cultural_pillar = heritage_arabic }
culture = { has_cultural_pillar = heritage_syriac }
culture_has_north_african_heritage_pillar_trigger = yes
}
}
#EUROPE
culture_has_european_heritage_pillar_trigger = {
OR = {
culture_has_west_european_heritage_pillar_trigger = yes
culture_has_east_european_heritage_pillar_trigger = yes
culture_has_north_european_heritage_pillar_trigger = yes
culture_has_south_european_heritage_pillar_trigger = yes
culture_has_central_european_heritage_pillar_trigger = yes
}
}
culture_has_west_european_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_goidelic
has_cultural_pillar = heritage_west_germanic
has_cultural_pillar = heritage_brythonic
has_cultural_pillar = heritage_israelite
}
}
}
culture_has_east_european_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_volga_finnic
has_cultural_pillar = heritage_east_slavic
has_cultural_pillar = heritage_baltic
has_cultural_pillar = heritage_caucasian
}
}
}
culture_has_north_european_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_balto_finnic
has_cultural_pillar = heritage_north_germanic
has_cultural_pillar = heritage_ugro_permian
}
}
}
culture_has_south_european_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_iberian
has_cultural_pillar = heritage_latin
has_cultural_pillar = heritage_byzantine
has_cultural_pillar = heritage_south_slavic
has_cultural_pillar = heritage_israelite
}
}
}
culture_has_central_european_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_magyar
has_cultural_pillar = heritage_west_slavic
has_cultural_pillar = heritage_central_germanic
has_cultural_pillar = heritage_frankish
has_cultural_pillar = heritage_israelite
has_cultural_pillar = heritage_israelite
}
}
}
culture_has_slavic_heritage_pillar_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_south_slavic
has_cultural_pillar = heritage_east_slavic
has_cultural_pillar = heritage_west_slavic
}
}
}

View file

@ -0,0 +1,586 @@

### Cultural trigger list
# drinks_alcohol_trigger - Would this person drink alcohol?
# holder_or_above_is_player_of_culture - Is this county's holder or anyone above them in the de facto hierarchy a player with the same culture?
######################
# Cultural triggers #
######################
drinks_alcohol_trigger = {
is_adult = yes
custom_tooltip = {
text = drinks_alcohol
OR = {
has_trait = drunkard
faith_forbids_alcohol_trigger = no
}
}
}
faith_forbids_alcohol_trigger = {
OR = {
religion = religion:islam_religion # Prohibited by khamr, a prohibition against intoxicants
religion = religion:jainism_religion # Prohibited along with the consumption of any fermented food
AND = {
has_trait = zealous
religion = religion:buddhism_religion # Discouraged as it disrupts progress along the eightfold path
}
}
}
# If you need to check if a county drinks alcohol.
faith_only_forbids_alcohol_trigger = {
OR = {
religion = religion:islam_religion # Prohibited by khamr, a prohibition against intoxicants
religion = religion:jainism_religion # Prohibited along with the consumption of any fermented food
religion = religion:buddhism_religion # Discouraged as it disrupts progress along the eightfold path
}
}
holder_or_above_is_player_of_culture = {
culture = {
save_temporary_scope_as = this_culture
}
OR = {
holder = {
AND = {
is_ai = no
culture = scope:this_culture
}
any_liege_or_above = {
is_ai = no
culture = scope:this_culture
}
}
}
}
culture_in_winter_geographical_region_trigger = {
custom_description = {
text = culture_in_winter_geographical_region_trigger_desc
any_culture_county = {
any_county_province = {
OR = {
geographical_region = world_europe_north
geographical_region = world_europe_west
geographical_region = world_europe_east
geographical_region = world_steppe
geographical_region = world_tibet
}
}
}
}
}
culture_in_non_sedentary_geographical_region_trigger = {
custom_description = {
text = culture_in_non_sedentary_geographical_region_trigger_desc
any_culture_county = {
any_county_province = {
OR = {
geographical_region = world_steppe
}
}
}
}
}
culture_not_pacifistic_trigger = {
custom_description = {
text = culture_not_pacifist_trigger_desc
NOT = {
culture_tradition:tradition_pacifism = { is_in_list = traits }
}
}
}
culture_not_warlike_trigger = {
custom_description = {
text = culture_not_warlike_trigger_desc
NOR = {
culture_tradition:tradition_winter_warriors = { is_in_list = traits }
culture_tradition:tradition_forest_fighters = { is_in_list = traits }
culture_tradition:tradition_mountaineers = { is_in_list = traits }
culture_tradition:tradition_warriors_of_the_dry = { is_in_list = traits }
culture_tradition:tradition_highland_warriors = { is_in_list = traits }
culture_tradition:tradition_jungle_warriors = { is_in_list = traits }
culture_tradition:tradition_quarrelsome = { is_in_list = traits }
culture_tradition:tradition_malleable_invaders = { is_in_list = traits }
culture_tradition:tradition_hunters = { is_in_list = traits }
culture_tradition:tradition_warrior_culture = { is_in_list = traits }
culture_tradition:tradition_martial_admiration = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_winter_warriors_desc
NOT = {
culture_tradition:tradition_winter_warriors = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_forest_fighter_desc
NOT = {
culture_tradition:tradition_forest_fighters = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_mountaineers_desc
NOT = {
culture_tradition:tradition_mountaineers = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_warriors_of_the_dry_desc
NOT = {
culture_tradition:tradition_warriors_of_the_dry = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_highland_warriors_desc
NOT = {
culture_tradition:tradition_highland_warriors = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_jungle_warriors_desc
NOT = {
culture_tradition:tradition_jungle_warriors = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_quarrelsome_desc
NOT = {
culture_tradition:tradition_quarrelsome = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_malleable_invaders_desc
NOT = {
culture_tradition:tradition_malleable_invaders = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_hunters_desc
NOT = {
culture_tradition:tradition_hunters = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_warrior_culture_desc
NOT = {
culture_tradition:tradition_warrior_culture = { is_in_list = traits }
}
}
custom_description = {
text = culture_has_martial_admiration_desc
NOT = {
culture_tradition:tradition_martial_admiration = { is_in_list = traits }
}
}
}
should_have_same_faith_succession_trigger = {
culture = {
has_cultural_parameter = same_faith_inheritance_only
}
NOR = {
government_has_flag = government_is_theocracy # Handled separately
government_has_flag = government_is_holy_order # Handled separately
government_has_flag = government_is_mercenary # Irrelevant
}
}
not_tribal_raid_trigger = {
culture = {
has_cultural_parameter = not_tribal_raiding_malus
}
NOT = { government_has_flag = government_is_tribal }
}
culture_is_not_historical_hybrid_trigger = {
#Used to tell if a hybrid culture is one of the historical hybrids or not, mainly in checks for AI hybridization checks related to game rules.
#Expects to be used in culture scope
NOR = {
this = culture:norman
this = culture:maghrebi
this = culture:gaelic
this = culture:anglo_saxon
this = culture:scottish
this = culture:andalusian
this = culture:catalan
this = culture:english
this = culture:sicilian
this = culture:cisalpine
}
}
# Cultural MAA triggers - Used in various places for triggers, AI weights, etc.
culture_has_skirmisher_maa = {
OR = {
has_cultural_parameter = unlock_maa_horn_warrior
has_cultural_parameter = unlock_maa_shomer
has_cultural_parameter = unlock_maa_abudrar
has_cultural_parameter = unlock_maa_guinea_warrior
has_innovation = innovation_adaptive_militia #Goedendag - Later Era MAA
has_cultural_parameter = unlock_maa_akritai
}
}
culture_has_archer_maa = {
OR = {
has_cultural_parameter = unlock_maa_archers_of_the_nile
has_cultural_parameter = unlock_maa_bush_hunter
has_cultural_parameter = unlock_maa_metsanvartija
has_cultural_parameter = unlock_maa_maturkan_warriors
has_cultural_parameter = unlock_maa_longbowmen
has_innovation = innovation_repeating_crossbow #Chu-ko-nu Archers
has_innovation = innovation_bamboo_bows #Paiks
}
}
culture_has_heavy_infantry_maa = {
OR = {
has_cultural_parameter = unlock_maa_ayyar
has_cultural_parameter = unlock_maa_mubarizun
has_cultural_parameter = unlock_maa_druzhina
has_cultural_parameter = unlock_maa_khandayat
has_cultural_parameter = unlock_maa_garudas
has_cultural_parameter = unlock_maa_palace_guards
has_cultural_parameter = unlock_maa_huscarls
has_cultural_parameter = unlock_maa_mountaineer
has_cultural_parameter = unlock_maa_zbrojnosh
has_innovation = innovation_sarawit #Sarawit - Later Era MAA
has_innovation = innovation_legionnaires #Praetorian
has_cultural_parameter = unlock_maa_varangian_guards
}
}
culture_has_pikemen_maa = { #I.e. Spearmen
OR = {
has_cultural_parameter = unlock_maa_zupin_warrior
has_innovation = innovation_rectilinear_schiltron #Schiltron - Later Era MAA
has_innovation = innovation_pike_columns #Picchieri - Later Era MAA
has_innovation = innovation_zweihanders #Later Era MAA
has_cultural_parameter = unlock_maa_skoutatoi
}
}
culture_has_light_cavalry_maa = {
OR = {
has_cultural_parameter = unlock_maa_mulaththamun
has_cultural_parameter = unlock_maa_hussar #Konni
has_cultural_parameter = unlock_maa_tawashi #Tawashi
has_cultural_parameter = unlock_maa_ayrudzi
has_innovation = innovation_desert_tactics #Chasseur
has_innovation = innovation_caballeros #Caballero
has_innovation = innovation_hobbies #Hobelar
has_innovation = innovation_sahel_horsemen #Sahel Horsemen
}
}
culture_has_heavy_cavalry_maa = {
OR = {
has_cultural_parameter = unlock_maa_cataphract
has_cultural_parameter = unlock_maa_monaspa
has_cultural_parameter = unlock_maa_tarkhan
has_cultural_parameter = unlock_maa_conrois
has_cultural_parameter = unlock_maa_cataphract_archers
has_innovation = innovation_valets #Gendarme - Later Era MAA
}
}
culture_has_archer_cavalry_maa = {
OR = {
has_cultural_parameter = unlock_maa_horse_archers
has_cultural_parameter = unlock_maa_mangudai
culture_head ?= {
mpo_can_recruit_nomad_maa_trigger = yes
}
any_player = {
culture = prev
mpo_can_recruit_nomad_maa_trigger = yes
}
}
}
#Culture specialized in maa type
culture_specializes_in_skirmisher_maa = {
OR = {
has_cultural_tradition = tradition_forest_folk
has_cultural_tradition = tradition_jungle_dwellers
has_cultural_tradition = tradition_polders
has_cultural_tradition = tradition_adaptive_skirmishing
has_cultural_tradition = tradition_hit_and_run
has_cultural_tradition = tradition_forest_wardens
has_cultural_tradition = tradition_hussar
has_cultural_tradition = tradition_fp3_pragmatic_creed
culture_has_skirmisher_maa = yes
}
}
culture_specializes_in_archer_maa = {
OR = {
has_cultural_tradition = tradition_forest_folk
has_cultural_tradition = tradition_jungle_dwellers
has_cultural_tradition = tradition_adaptive_skirmishing
has_cultural_tradition = tradition_formation_fighting
culture_has_archer_maa = yes
}
}
culture_specializes_in_heavy_infantry_maa = {
OR = {
has_cultural_tradition = tradition_roman_legacy
has_cultural_tradition = tradition_metal_craftsmanship
has_cultural_tradition = tradition_mountain_homes
has_cultural_tradition = tradition_stand_and_fight
has_cultural_tradition = tradition_mobile_guards
has_cultural_tradition = tradition_mountaineer_ruralism
culture_has_heavy_infantry_maa = yes
}
}
culture_specializes_in_pikemen_maa = {
OR = {
has_cultural_tradition = tradition_mountaineer_ruralism
has_cultural_tradition = tradition_metal_craftsmanship
has_cultural_tradition = tradition_mountain_homes
has_cultural_tradition = tradition_formation_fighting
has_cultural_tradition = tradition_stand_and_fight
has_cultural_tradition = tradition_mobile_guards
culture_has_pikemen_maa = yes
}
}
culture_specializes_in_light_cavalry_maa = {
OR = {
has_cultural_tradition = tradition_dryland_dwellers
has_cultural_tradition = tradition_pastoralists
has_cultural_tradition = tradition_hit_and_run
has_cultural_tradition = tradition_horse_breeder
has_cultural_tradition = tradition_saharan_nomads
culture_has_light_cavalry_maa = yes
}
}
culture_specializes_in_heavy_cavalry_maa = {
OR = {
has_cultural_tradition = tradition_roman_legacy
has_cultural_tradition = tradition_mountain_homes
has_cultural_tradition = tradition_horse_breeder
has_cultural_tradition = tradition_stand_and_fight
has_cultural_tradition = tradition_mobile_guards
has_cultural_tradition = tradition_ep3_indomitable_azatani
has_cultural_tradition = tradition_mountaineer_ruralism
culture_has_heavy_cavalry_maa = yes
}
}
culture_specializes_in_archer_cavalry_maa = {
OR = {
has_cultural_tradition = tradition_ep3_indomitable_azatani
has_cultural_tradition = tradition_horse_breeder
has_cultural_tradition = tradition_mpo_iron_cavalry
has_cultural_tradition = tradition_devoted_horsemanship
culture_has_archer_cavalry_maa = yes
}
}
# Language trigger - Makes languages available when you diverge your culture
language_is_shown_trigger = {
scope:character = {
OR = {
AND = {
exists = var:legendary_culture
var:legendary_culture = { has_cultural_pillar = $LANGUAGE$ }
}
AND = {
# The target language needs to fulfill ALL of the following:
any_sub_realm_county = { # Language needs to be well-represented within your realm
percent >= 0.1
culture = { has_cultural_pillar = $LANGUAGE$ }
}
any_sub_realm_county = { # Language needs to border your own culture
culture = { has_cultural_pillar = $LANGUAGE$ }
any_neighboring_county = {
culture = { this = scope:character.culture }
}
}
any_sub_realm_county = { # You need a minimum acceptance with any culture speaking the language
culture = {
has_cultural_pillar = $LANGUAGE$
cultural_acceptance = {
target = scope:character.culture
value >= 25
}
}
}
}
}
}
}
# Language trigger - Makes heritages available when you diverge your culture
heritage_is_shown_trigger = {
scope:character = {
OR = {
AND = {
exists = var:legendary_culture
var:legendary_culture = { has_cultural_pillar = $HERITAGE$ }
}
culture = { has_cultural_pillar = $HERITAGE$ }
}
}
}
# Checks if you could Hybridise with the culture without checking for acceptance
is_valid_for_hybridising_trigger = {
$CHARACTER$ = {
culture = {
NOT = { has_same_culture_heritage = $CULTURE$ }
culture_age >= culture_hybrid_cooldown
}
trigger_if = {
limit = {
NAND = {
exists = var:special_culture
var:special_culture = $CULTURE$
}
}
custom_description = {
text = culture_present_in_realm_for_hybridization
any_sub_realm_county = {
culture = $CULTURE$
}
}
}
custom_description = {
text = culture_is_not_parent_culture
culture = {
NOT = {
any_parent_culture = {
this = $CULTURE$
}
}
}
}
custom_description = {
text = culture_is_not_child_culture
$CULTURE$ = {
NOT = {
any_parent_culture = {
this = $CHARACTER$.culture
}
}
}
}
}
}
# Checks if you can currently hybridise with the culture
can_hybridize_culture_trigger = {
is_valid_for_hybridising_trigger = {
CHARACTER = $CHARACTER$
CULTURE = $CULTURE$
}
$CHARACTER$ = {
culture = {
cultural_acceptance = { target = $CULTURE$ value >= hybridization_threshold_value }
}
}
}
# Uses current scope and scope:culture
cultures_share_relevant_region_trigger = {
OR = {
AND = {
culture_overlaps_geographical_region = world_europe
scope:culture = {
culture_overlaps_geographical_region = world_europe
}
}
AND = {
culture_overlaps_geographical_region = world_asia_minor
scope:culture = {
culture_overlaps_geographical_region = world_asia_minor
}
}
AND = {
OR = {
culture_overlaps_geographical_region = world_middle_east
culture_overlaps_geographical_region = world_middle_east_persia
}
scope:culture = {
OR = {
culture_overlaps_geographical_region = world_middle_east
culture_overlaps_geographical_region = world_middle_east_persia
}
}
}
AND = {
culture_overlaps_geographical_region = world_steppe
scope:culture = {
culture_overlaps_geographical_region = world_steppe
}
}
AND = {
culture_overlaps_geographical_region = world_tibet
scope:culture = {
culture_overlaps_geographical_region = world_tibet
}
}
AND = {
OR = {
culture_overlaps_geographical_region = world_india
culture_overlaps_geographical_region = world_burma
}
scope:culture = {
OR = {
culture_overlaps_geographical_region = world_india
culture_overlaps_geographical_region = world_burma
}
}
}
AND = {
culture_overlaps_geographical_region = world_africa
scope:culture = {
culture_overlaps_geographical_region = world_africa
}
}
}
}
is_vegetarian_trigger = {
OR = {
culture = {
has_cultural_parameter = cannot_hunt
}
faith_is_vegetarian_trigger = yes
}
}
faith_is_vegetarian_trigger = {
faith = {
OR = {
religion = religion:buddhism_religion
religion = religion:jainism_religion
religion = religion:bon_religion
this = faith:mazdakism
this = faith:manichean
}
}
}
culture_tradition_reduction_trigger = {
scope:character = {
has_variable_list = culture_tradition_reduction
is_target_in_variable_list = {
name = culture_tradition_reduction
target = culture_tradition:$TRADITION$
}
}
}

View file

@ -0,0 +1,97 @@
block_death_event_trigger = {
OR = {
trigger_if = {
limit = { exists = var:block_death_event_from }
var:block_death_event_from = $DEAD$
#If we get timed variables in list:
# is_target_in_variable_list = {
# name = block_death_event_from
# target = $DEAD$
# }
}
has_character_flag = sent_relevant_death_event
}
}
had_gruesome_death_trigger = { #Used to check if a character's death was gruesome
OR = {
death_reason = death_physician_mistreatment
death_reason = death_murder
death_reason = death_ended_on_feast_table
death_reason = death_mysterious
death_reason = death_plotting
death_reason = death_script_cruelty
death_reason = death_punishment
death_reason = death_dungeon
death_reason = death_head_ripped_off
death_reason = death_cloven_in_half
death_reason = death_viciously_dismembered
death_reason = death_ripped_apart_limb_by_limb
death_reason = death_chopped_to_pieces
death_reason = death_heart_ripped_out
death_reason = death_fear
death_reason = death_skull_cracked_open
death_reason = death_strangled_with_own_intestines
death_reason = death_carp_accident
death_reason = death_whipping
death_reason = death_torture
death_reason = death_execution_blood_eagle
death_reason = death_execution_blot
death_reason = death_execution
death_reason = death_burned
death_reason = death_eaten
death_reason = death_beaten
death_reason = death_sacrificed_to_gods
death_reason = death_crucified
death_reason = death_burned_witch
death_reason = death_feast_accident
death_reason = death_fall
death_reason = death_poison
death_reason = death_crocodile
death_reason = death_dog_attack
death_reason = death_wolves
death_reason = death_bear
death_reason = death_ritually_hung_then_eaten
death_reason = death_ritually_hung
death_reason = death_ritually_eaten
death_reason = death_botched_decapitation
death_reason = death_decapitated
death_reason = death_kennel
death_reason = death_thrown_onto_chariot_track
death_reason = death_thrown_off_kathisma
death_reason = death_killed_while_attempting_murder
death_reason = death_chariot_race_trick
death_reason = death_snake
}
}
death_killer_always_public_trigger = {
OR = {
# Executions
death_reason = death_crucified
death_reason = death_burned_witch
death_reason = death_torture
death_reason = death_execution_blood_eagle
death_reason = death_execution_blot
death_reason = death_execution
death_reason = death_dungeon
death_reason = death_ritually_hung_then_eaten
death_reason = death_ritually_hung
death_reason = death_ritually_eaten
death_reason = death_hostage_execution
death_reason = death_botched_decapitation
death_reason = death_decapitated
death_reason = death_sacrificed_to_gods
death_reason = death_eaten
death_reason = death_kennel
# Public Fights
death_reason = death_fight
death_reason = death_battle
death_reason = death_duel
death_reason = death_beaten
death_reason = death_killed_while_attempting_murder
# Accidents
death_reason = death_carp_accident
death_reason = death_feast_accident
}
}

View file

@ -0,0 +1,870 @@
#############
# Diarchy Scripted Triggers
#############
##################################################
# General Triggers
character_hates_scope_due_to_strife_guts_trigger = {
# We've got to share a direct liege for strife to be valid.
exists = liege
exists = $TARGET$.liege
liege = $TARGET$.liege
# And $TARGET$ must have accumulated enough strife to aggravate me (which we modulate up or down a little with some traits).
$TARGET$.strife_opinion >= strife_harm_threshold_value
# Finally, there has to be at least _some_ love lost.
opinion = {
target = $TARGET$
value < 0
}
}
# This is hooked up to the is_diarch_valid rule, invalidating them if it returns false, referenced by Code.
is_diarch_valid_trigger = {
# Basics.
is_alive = yes
OR = {
# We always want adults...
is_adult = yes
# ... _unless_ this is junior emperor, they're always children.
liege ?= { has_diarchy_parameter = diarchy_type_is_junior_emperorship }
}
# Event blocks.
OR = {
is_ai = no
NOT = { has_character_flag = cannot_be_diarch }
}
trigger_if = {
limit = {
exists = liege
}
# Being in a diarchy yourself will disable you, outside of co-rulerships.
trigger_if = {
limit = {
NOT = {
liege = { has_diarchy_active_parameter = diarchy_is_co_rulership }
}
}
# If you're in an entrenched regency for some reason, you can't manage a regency yourself.
NOT = { has_diarchy_parameter = diarchy_type_is_entrenched_regency }
# You need to be mentally & physically sound, to some degree.
regency_for_personal_reasons_trigger = no
}
# Diarchy-specific checks.
## Viziers.
trigger_if = {
limit = {
liege = { has_diarchy_parameter = diarchy_is_vizierate }
}
# Must match their liege's gender preference.
diarch_matches_liege_faith_gender_preference_trigger = yes
# Viziers aren't big land-owners.
## Not in this way, at least.
highest_held_title_tier <= tier_barony
}
# If you have somehow managed to get invited to/start an activity outside of your realm (e.g., you're the spouse in a grand wedding), then yeah, you forfeit your position.
## ... unless you're a co-ruler.
trigger_if = {
limit = {
NOT = {
liege = { has_diarchy_active_parameter = diarchy_is_co_rulership }
}
}
# We cannot be at war with our liege.
NOT = { is_at_war_with = liege }
NAND = {
# Is it redundant to check twice?
## Yes.
### Do the machine spirits demand this thoroughness of us?
#### Also yes.
##### Do not ask why the God-Machine commands it, merely be glad that it commanded it of you.
is_travelling = yes
exists = current_travel_plan
# We check your liege so that you can attend business within the realm easily.
## Schemes are their own special lil guys so we take care of them separately.
trigger_if = {
limit = {
exists = scope:owner
exists = scope:target
}
travel_would_cause_regency_trigger = { REALM_HOLDER = scope:owner.liege }
}
## Else, we're an ordinary, gods-fearing root scope, so use that.
trigger_else = {
travel_would_cause_regency_trigger = { REALM_HOLDER = this.liege }
}
}
}
}
}
# This is hooked up to the is_diarch_able rule, referenced by Code.
is_diarch_able_trigger = {
# You can't possibly manage someone else's realm from prison.
is_imprisoned = no
# You need to be mentally & physically sound, to some degree.
## Mostly, this will invalidate, but it won't for co-rulerships so we just disable them here.
regency_for_personal_reasons_trigger = no
# You'd clearly be preoccupied.
trigger_if = {
limit = { exists = involved_activity }
save_temporary_scope_as = diarch_temp
involved_activity.activity_location.county.holder = {
NOR = {
this = scope:diarch_temp.liege
NOT = {
any_liege_or_above = { this = scope:diarch_temp.liege }
}
}
}
}
# If you're in a diarchy for any other reason, you need to chill.
NOT = { has_active_diarchy = yes }
}
# And *this* needs to be added to guest activity intents to keep diarchs from showing up to the same parties as their liege.
bannable_serving_diarch_trigger = {
liege?= { NOT = { is_landless_adventurer = yes } }
OR = {
# Diarchs with official responsibilities can't come out to play.
is_diarch = yes
is_designated_diarch = yes
# Assumed diarchs don't get to either if they're the AI, as the player might be planning around them & the AI may have designated to avoid people after if it'd known they were going to welch.
## Assumed-diarch players can make an intelligent choice on whether they want to go to events or not.
AND = {
is_ai = yes
is_diarchy_successor = yes
}
}
}
diarch_has_situational_loyalty_trigger = {
diarch_loyalty > diarch_loyalty_visibly_disloyal_threshold
diarch_loyalty < diarch_loyalty_visibly_loyal_threshold
}
diarch_callable_in_internal_war_trigger = {
OR = {
# CBs where the liege doesn't (necessarily) control an internal attacker.
using_cb = peasant_war
using_cb = populist_war
# All other internal CBs.
primary_attacker = {
any_liege_or_above = { this = scope:actor }
}
}
}
diarch_matches_liege_faith_gender_preference_trigger = {
OR = {
# Female preference.
AND = {
is_female = yes
liege.faith = { has_doctrine = doctrine_gender_female_dominated }
}
# Male preference.
AND = {
is_male = yes
liege.faith = { has_doctrine = doctrine_gender_male_dominated }
}
# Equality.
liege.faith = { has_doctrine = doctrine_gender_equal }
}
}
##################################################
# Setup Triggers
basic_eligible_for_diarchy_trigger = {
is_landed_or_landless_administrative = yes
NOT = { government_has_flag = government_is_landless_adventurer } # Laamps don't use diarchs
highest_held_title_tier >= tier_county
NOT = { has_active_diarchy = yes }
}
regency_for_personal_reasons_trigger = {
custom_tooltip = {
text = regency_for_personal_reasons_trigger.tt.cannot_govern_by_themselves
OR = {
AND = {
is_adult = no
NOT = {
liege = { has_diarchy_parameter = diarchy_type_is_junior_emperorship }
}
}
is_incapable = yes
has_character_modifier = isolating_modifier
}
}
}
imprisonment_would_cause_regency_trigger = {
custom_tooltip = {
text = imprisonment_would_cause_regency_trigger.tt.imprisoned_abroad
is_imprisoned = yes
# Doesn't count if your gaoler is your vassal.
save_temporary_scope_as = liege_temp
NOT = {
any_vassal_or_below = { this = scope:liege_temp.imprisoner }
}
}
}
travel_would_cause_regency_trigger = {
OR = {
# Travelling one-way.
AND = {
# Make sure that we _aren't_ going bilaterally.
NOT = { current_travel_plan.final_destination_province = current_travel_plan.departure_location }
# Then check that we're actually going outside of the realm.
current_travel_plan.final_destination_province.county.holder = {
NOR = {
any_liege_or_above = { this = $REALM_HOLDER$ }
this = $REALM_HOLDER$
}
}
}
# Travelling in a circle.
AND = {
# Make sure that we _are_ going bilaterally.
current_travel_plan.final_destination_province = current_travel_plan.departure_location
# Check the next destination province instead.
## We put a break in to check if there _is_ a county because you might be travelling through the ocean.
current_travel_plan.next_destination_province.county ?= {
holder = {
NOR = {
any_liege_or_above = { this = $REALM_HOLDER$ }
this = $REALM_HOLDER$
}
}
}
}
}
}
can_leave_diarchy_trigger = {
trigger_if = {
limit = { is_imprisoned = yes }
imprisonment_would_cause_regency_trigger = no
}
is_travelling = no
regency_for_personal_reasons_trigger = no
}
regent_would_remain_loyal_after_death_trigger = {
is_ai = yes
diarch_loyalty_score_type_regency_value >= diarch_loyalty_visibly_loyal_threshold
}
##################################################
# Character Interactions
diarch_cannot_be_disabled_trigger = {
custom_description = {
text = diarch_interactions_tt_is_able
subject = $DIARCH$
$DIARCH$ = { is_diarch_able_trigger = yes }
}
}
diarch_legal_meddling_claimable_title_trigger = {
custom_description = {
text = "you_must_not_have_a_claim_on_the_title"
NOT = {
any_claimant = { this = $ACTOR$ }
}
}
custom_description = {
text = "character_interactions_not_rel_head_title"
is_head_of_faith = no
}
custom_tooltip = {
text = title_must_be_county_tier.tt
tier = tier_county
}
# This is mostly here to stop people from not claiming titles because they have valid titles that are _outside_ the sub-realm.
custom_tooltip = {
text = title_must_be_same_realm.tt
holder = {
any_liege_or_above = { this = $ACTOR$.liege }
}
}
}
diarch_syphon_treasury_embezzlement_modifiers_trigger = {
OR = {
has_county_modifier = syphon_treasury_massive_sum_modifier
has_county_modifier = syphon_treasury_large_sum_modifier
has_county_modifier = syphon_treasury_medium_sum_modifier
has_county_modifier = syphon_treasury_small_sum_modifier
}
}
diarch_shift_privileges_valid_target_title_trigger = {
NOR = {
has_county_modifier = shift_privileges_monopolies_sold_modifier
has_county_modifier = shift_privileges_scutage_exemptions_modifier
has_county_modifier = shift_privileges_conflicting_deeds_modifier
}
}
diarch_swing_scales_valid_shared_hof_trigger = {
# You must share a HoF to be able to petition one.
custom_tooltip = {
text = swing_scales_currency_interaction.tt.no_shared_hof
exists = scope:actor.faith.religious_head
exists = scope:recipient.faith.religious_head
scope:actor.faith.religious_head = scope:recipient.faith.religious_head
}
# And opinions've gotta line up.
trigger_if = {
limit = { exists = scope:actor.faith.religious_head }
# They must like you.
custom_tooltip = {
text = swing_scales_currency_interaction.tt.hof_needs_to_like_you_more
scope:actor.faith.religious_head = {
opinion = {
target = scope:actor
value >= high_positive_opinion
}
}
}
# And not like scope:recipient too much.
custom_tooltip = {
text = swing_scales_currency_interaction.tt.hof_needs_to_like_them_less
scope:actor.faith.religious_head = {
opinion = {
target = scope:recipient
value <= medium_positive_opinion
}
}
}
# Plus scope:recipient can't have anything over them.
custom_tooltip = {
text = swing_scales_currency_interaction.tt.hof_refuses_to_cross_recipient
NOT = {
scope:recipient = { has_strong_hook = scope:actor.faith.religious_head }
}
}
}
}
diarch_liege_wants_to_stiff_regent_trigger = {
OR = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient }
opinion = {
target = scope:recipient
value <= very_high_negative_opinion
}
}
}
cannot_release_former_regent_whilst_old_regent_holds_power_trigger = {
$PRISONER$ = {
trigger_if = {
limit = {
has_variable = imprisoned_by_diarch
exists = $PRISONER$.liege
$REGENT$ = { is_diarch_of_target = $PRISONER$.liege }
}
custom_tooltip = {
text = overthrow_regent_scheme_interaction.tt.cannot_release
NOR = {
var:imprisoned_by_diarch = $PRISONER$.imprisoner
var:imprisoned_by_diarch ?= $PRISONER$.liege.diarch
}
}
}
}
}
interaction_actor_is_liege_with_vizierate_trigger = {
scope:recipient.liege ?= scope:actor
scope:actor = { has_diarchy_active_parameter = diarchy_is_vizierate }
}
is_valid_basic_candidate_for_vizier_trigger = {
is_diarch_valid_trigger = yes
diarch_matches_liege_faith_gender_preference_trigger = yes
}
# I don't have a problem, I can quit scripted triggers any time I want.
## But more seriously: mostly just here for brevity/not wanting to re-do script after I had to add a second scripted trigger targeting top lieges.
character_has_co_emperorship_trigger = {
OR = {
has_diarchy_parameter = diarchy_type_is_co_emperorship
has_diarchy_parameter = diarchy_type_is_junior_emperorship
}
}
liege_has_co_emperorship_trigger = {
liege ?= { character_has_co_emperorship_trigger = yes }
}
top_liege_has_co_emperorship_trigger = {
liege ?= { character_has_co_emperorship_trigger = yes }
}
appointment_interactions_recipient_is_suitable_co_emperor_trigger = {
scope:actor = { top_liege_has_co_emperorship_trigger = yes }
OR = {
scope:recipient = { is_diarch_of_target = scope:secondary_recipient.top_liege }
scope:secondary_recipient = { is_diarch_of_target = scope:actor.top_liege }
}
# Don't get the bonus just because we're promoting our courtiers in our realm.
trigger_if = {
limit = {
NOT = { scope:target = scope:actor.primary_title }
}
NOT = { scope:target.holder = scope:actor }
}
}
may_appoint_co_emperors_trigger = {
highest_held_title_tier >= tier_empire
has_realm_law = acclamation_succession_law
OR = {
has_title = title:e_byzantium
has_title = title:e_roman_empire
culture = { has_cultural_parameter = unlock_co_emperors }
}
}
may_appoint_co_monarchs_trigger = {
highest_held_title_tier >= tier_kingdom
government_has_flag = may_elevate_co_monarch
}
valid_junior_emperor_candidate_trigger = {
is_adult = no
is_close_or_extended_family_of = $LIEGE$
is_imprisoned = no
OR = {
is_courtier_of = $LIEGE$
is_vassal_of = $LIEGE$
}
# Prevent weird governments from taking place.
NOR = {
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
government_has_flag = government_is_landless_adventurer
}
}
valid_co_emperor_candidate_trigger = {
is_adult = yes
is_imprisoned = no
save_temporary_scope_as = co_emperor_temp
custom_tooltip = {
text = valid_co_emperor_candidate_liege_trigger
top_liege = $LIEGE$
}
custom_tooltip = {
text = valid_co_emperor_candidate_family_trigger
OR = {
is_close_or_extended_family_of = $LIEGE$
AND = {
house ?= {
OR = {
is_powerful_family = yes
is_dominant_family = yes
}
}
scope:co_emperor_temp = house.house_head
any_held_title = { is_noble_family_title = yes }
}
}
}
NOR = {
has_trait = blind
has_trait = eunuch
has_trait = incapable
# Prevent weird governments from taking place.
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
government_has_flag = government_is_landless_adventurer
}
}
valid_co_monarch_candidate_trigger = {
is_adult = yes
is_child_of = $LIEGE$
is_imprisoned = no
trigger_if = {
limit = { is_ruler = no }
is_courtier_of = $LIEGE$
}
trigger_else = { is_vassal_of = $LIEGE$ }
# Gender restrictions.
custom_tooltip = {
text = valid_co_monarch_candidate_trigger.tt.gender_wrong_for_co_rule
OR = {
AND = {
is_female = yes
$LIEGE$ = {
OR = {
has_realm_law = female_only_law
has_realm_law = female_preference_law
}
}
}
AND = {
is_male = yes
$LIEGE$ = {
OR = {
has_realm_law = male_only_law
has_realm_law = male_preference_law
}
}
}
$LIEGE$ = { has_realm_law = equal_law }
}
}
# Prevent weird governments from taking place.
NOR = {
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
government_has_flag = government_is_landless_adventurer
}
}
governor_can_be_called_as_ally_in_expedition_war_basic_trigger = {
scope:actor.liege ?= { has_diarchy_parameter = unlock_diarch_requests_military_expedition_interaction }
scope:recipient = {
liege ?= scope:actor.liege
# Must be a governor.
government_has_flag = government_is_administrative
}
}
liege_can_maim_co_ruler_without_killing_them_trigger = {
culture = {
OR = {
has_cultural_parameter = can_blind_prisoners
has_cultural_parameter = can_castrate_prisoners
}
}
}
liege_should_systematically_maim_co_ruler_trigger = {
OR = {
AND = {
has_diarchy_active_parameter = diarchy_is_co_rulership
liege_can_maim_co_ruler_without_killing_them_trigger = yes
diarch ?= scope:recipient
}
AND = {
liege ?= { has_diarchy_active_parameter = diarchy_is_co_rulership }
liege_can_maim_co_ruler_without_killing_them_trigger = yes
is_diarch_of_target = scope:recipient
}
}
}
valid_kingdom_for_diarch_to_demand_as_despotate_trigger = {
tier = tier_kingdom
is_landless_type_title = no
# Weird formatting for the sake of cleaner tooltips.
trigger_if = {
limit = { is_title_created = no }
is_title_created = no
}
trigger_else = { holder = scope:recipient }
scope:recipient = { completely_controls = scope:target }
NOT = {
scope:recipient.capital_county = { target_is_de_jure_liege_or_above = scope:target }
}
}
is_in_scapegoating_diarchy_visibility_trigger = {
custom_tooltip = {
text = is_in_scapegoating_diarchy_visibility_trigger.tt.explanation
subject = scope:actor
OR = {
AND = {
scope:recipient = { $PARAMETER_TYPE$ = unlock_scapegoat_counterpart_interaction }
scope:actor = { is_diarch_of_target = scope:recipient }
}
AND = {
scope:actor = { $PARAMETER_TYPE$ = unlock_scapegoat_counterpart_interaction }
scope:recipient = { is_diarch_of_target = scope:actor }
}
}
}
}
ai_diarch_would_maim_execute_superior_if_got_chance_trigger = {
OR = {
opinion = {
target = $LIEGE$
value <= -1
}
has_trait = callous
has_trait = sadistic
has_trait = ambitious
has_trait = arrogant
}
NOR = {
has_trait = compassionate
has_trait = content
}
}
##################################################
# Succession Triggers
diarch_candidate_shares_relationship_with_lesser_consort_trigger = {
# Grab the right scope.
save_temporary_scope_as = char_temp
# Now check.
any_relation = {
type = $RELATION$
is_consort_of = scope:char_temp.liege
OR = {
NOT = { exists = scope:char_temp.liege.primary_spouse }
NOT = { this = scope:char_temp.liege.primary_spouse }
}
}
}
diarch_candidate_shares_relationship_with_child_trigger = {
# Grab the right scope.
save_temporary_scope_as = char_temp
# Now check.
any_relation = {
type = $RELATION$
is_adult = yes
is_child_of = scope:char_temp.liege
is_courtier_of = scope:char_temp.liege
}
}
diarch_candidate_shares_minority_status_with_trigger = {
# For performance purposes, let's do the most obvious check first.
any_liege_or_above = {
NOT = { $QUALITY$ = scope:char_temp.$QUALITY$ }
}
# Grab the right scope.
save_temporary_scope_as = char_temp
liege = {
# Ok, now make sure we connect to at least one suitable character.
## Yes we're putting a whole trigger in the scripted parameter.
### No one will believe you if you try to tell them of my crimes.
$TRIGGER_OR_TARGET$ = { $QUALITY$ = scope:char_temp.$QUALITY$ }
}
}
##################################################
# Important Actions
action_regent_imprison_suitable_char_covassals_trigger = {
opinion = {
target = root
value <= very_high_negative_opinion
}
save_temporary_scope_as = char_temp
# Could you take the interaction?
root = {
is_character_interaction_valid = {
interaction = diarch_imprison_interaction
recipient = scope:char_temp
}
}
}
action_regent_imprison_suitable_char_rivals_trigger = {
save_temporary_scope_as = char_temp
root = {
is_character_interaction_valid = {
interaction = diarch_imprison_interaction
recipient = scope:char_temp
}
}
}
action_shift_privileges_suitable_char_trigger = {
save_temporary_scope_as = char_temp
# Make sure we've got equal or higher diplo and so might get away with a cheeky forgery.
diplomacy <= root.diplomacy
# And we don't want to spam with little guys, especially as they're more expensive to use prestige on.
OR = {
highest_held_title_tier >= tier_duchy
# But don't block this out entirely within duchies.
liege.highest_held_title_tier = tier_duchy
}
# Could you take the interaction?
root = {
is_character_interaction_valid = {
interaction = diarch_shift_privileges_interaction
recipient = scope:char_temp
}
}
}
action_legal_meddling_suitable_char_trigger = {
max_military_strength < root.eighty_percent_of_max_military_strength
NOR = {
has_any_good_relationship_with_character_trigger = { CHARACTER = root }
root = { has_truce = prev }
is_allied_to = root
}
}
action_legal_meddling_suitable_title_trigger = {
diarch_legal_meddling_claimable_title_trigger = { ACTOR = root }
root = {
# Could you take the interaction?
is_character_interaction_valid = {
interaction = diarch_legal_meddling_interaction
recipient = scope:char_temp
}
}
}
##################################################
# Decisions
diarch_coup_valid_conspiracy_culmination_vassals_trigger = {
OR = {
is_powerful_vassal_of = $LIEGE$
house ?= { is_powerful_family = yes }
}
is_imprisoned = no
}
diarch_coup_attempt_is_valid_trigger = {
# Diarchy checks.
is_diarch = yes
$LIEGE$ = { has_diarchy_active_parameter = regents_can_try_to_overthrow_present_lieges }
## Liege must be physically present to overthrow. You can't coup them whilst they're abroad.
$LIEGE$ = {
is_imprisoned = no
is_travelling = no
is_at_war = no
custom_tooltip = {
text = custom.not_attending_activity
NOT = { exists = involved_activity }
}
age >= 5
}
# Support checks.
## Have you gathered enough support from the realm's powerful vassals and/or councillors?
custom_tooltip = {
text = diarch_attempt_to_overthrow_liege.tt.majority_powerful_vassal_support
subject = root
has_variable_list = coup_pv_supporters_list
any_in_list = {
variable = coup_pv_supporters_list
count >= pv_overthrow_threshold_value
# Double check they're still valid.
diarch_coup_valid_conspiracy_culmination_vassals_trigger = { LIEGE = $LIEGE$ }
}
}
# As a speed-bump, we check how long this diarchy has been on for.
OR = {
# Either, you've been a diarch for a good long ways.
years_as_diarch >= 8
# Or, you haven't been but everyone is kinda used to the concept of a diarch.
AND = {
years_as_diarch >= 4
$LIEGE$ = { years_in_diarchy >= 10 }
}
# OR, you've laid the groundwork for such a coup already
custom_tooltip = {
text = diarch_attempt_to_overthrow_liege_bypass
has_character_flag = laid_coup_groundwork_flag
}
}
# And finally, for ease of sanity, your liege must be of a certain size.
$LIEGE$.sub_realm_size >= minor_realm_size
}
diarch_coup_attempt_is_valid_showing_failure_only_trigger = {
# Diarch must be able to act.
diarch_cannot_be_disabled_trigger = { DIARCH = $DIARCH$ }
# Plus standard checks.
is_available_adult = yes
# Filter this out in advance, else we risk trying to enter a duel later, only to find we're already engaged in one.
custom_description = {
text = ENGAGED_IN_SINGLE_COMBAT
NOT = { exists = var:engaged_in_single_combat }
}
# Liege must have _something_ at the highest tier that isn't a HoF title.
custom_tooltip = {
text = diarch_attempt_to_overthrow_liege.tt.liege_cant_hold_only_hof_highest_title
liege = {
any_held_title = {
tier = prev.highest_held_title_tier
is_head_of_faith = no
}
}
}
}
diarch_coup_attempt_grabbable_kingdom_trigger = {
highest_held_title_tier >= tier_empire
any_held_title = {
diarch_coup_attempt_grabbable_kingdom_guts_trigger = { TARGET = $TARGET$ }
}
}
diarch_coup_attempt_grabbable_kingdom_guts_trigger = {
tier = tier_kingdom
is_head_of_faith = no
any_de_jure_county = {
holder = {
any_liege_or_above = { this = $TARGET$ }
}
}
}
diarch_coup_attempt_grabbable_capital_and_duchies_trigger = {
is_head_of_faith = no
is_landless_type_title = no
OR = {
AND = {
tier = tier_county
this.duchy = $TARGET$.primary_title.title_capital_county.duchy
}
this = $TARGET$.primary_title.title_capital_county.duchy
}
}
##################################################
# Mandates
#TODO_CD_EP2; rig these up to the actual loyalty value.
diarch_loyalty_due_to_hook_trigger = {
$LIEGE$ = {
OR = {
has_hook_of_type = {
target = $DIARCH$
type = loyalty_hook
}
has_hook_of_type = {
target = $DIARCH$
type = predecessor_loyalty_hook
}
}
}
}
diarch_wants_to_engage_with_mandates_trigger = {
save_temporary_scope_value_as = {
name = diarch_loyalty
value = $DIARCH$.diarch_loyalty_score_type_regency_value
}
OR = {
scope:diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold
scope:diarch_loyalty <= diarch_loyalty_visibly_disloyal_threshold
}
}
##################################################
# Events
character_has_regency_diarchy_trigger = {
exists = diarch
OR = {
has_diarchy_active_parameter = diarchy_type_is_temporary_regency
has_diarchy_active_parameter = diarchy_type_is_entrenched_regency
}
}

View file

@ -0,0 +1,23 @@
character_realm_neighbors_target_trigger = {
any_character_to_title_neighboring_county = {
holder = {
OR = {
this = $TARGET_CHARACTER$
target_is_liege_or_above = $TARGET_CHARACTER$
}
}
}
}
should_notify_player_about_neighboring_rulers_wars_trigger = {
NOR = {
target_is_liege_or_above = $TARGET_CHARACTER$ # We have separate toasts for this.
target_is_vassal_or_below = $TARGET_CHARACTER$ # We are probably already aware of our vassal's wars (and likely involved in them in some fashion).
}
character_realm_neighbors_target_trigger = { TARGET_CHARACTER = $TARGET_CHARACTER$ }
OR = {
$TARGET_CHARACTER$ = { is_independent_ruler = yes } # Independent rulers are always relevant.
liege = $TARGET_CHARACTER$.liege # Rulers are also relevant if we have the same direct liege (We might be able to DoW them, or at least want to stay informed as to relative power level).
top_liege = $TARGET_CHARACTER$.liege # Alternatively, if their direct liege is our top liege, we can still DoW them (If I am a Duke under a King under an Emperor, I might still want to DoW one of the Emperor's other King or Duke vassals.)
}
}

View file

@ -0,0 +1,119 @@

is_house_head = { # For unevaluated triggers
trigger_if = {
limit = {
exists = this
}
save_temporary_scope_as = house_check
exists = house
house = {
house_head = scope:house_check
}
}
}
is_dynast = {
save_temporary_scope_as = dynast_check
custom_description = {
text = is_dynast
subject = scope:dynast_check
exists = dynasty
dynasty = {
dynast = scope:dynast_check
}
}
}
can_start_new_legacy_track_trigger = {
exists = dynasty
dynasty = {
OR = {
NOT = { has_dynasty_perk = blood_legacy_1 }
has_dynasty_perk = blood_legacy_5
}
OR = {
NOT = { has_dynasty_perk = warfare_legacy_1 }
has_dynasty_perk = warfare_legacy_5
}
OR = {
NOT = { has_dynasty_perk = law_legacy_1 }
has_dynasty_perk = law_legacy_5
}
OR = {
NOT = { has_dynasty_perk = guile_legacy_1 }
has_dynasty_perk = guile_legacy_5
}
OR = {
NOT = { has_dynasty_perk = erudition_legacy_1 }
has_dynasty_perk = erudition_legacy_5
}
OR = {
NOT = { has_dynasty_perk = glory_legacy_1 }
has_dynasty_perk = glory_legacy_5
}
OR = {
NOT = { has_dynasty_perk = kin_legacy_1 }
has_dynasty_perk = kin_legacy_5
}
OR = {
NOT = { has_fp1_dlc_trigger = yes }
NOT = { has_dynasty_perk = fp1_adventure_legacy_1 }
has_dynasty_perk = fp1_adventure_legacy_5
}
OR = {
NOT = { has_fp1_dlc_trigger = yes }
NOT = { has_dynasty_perk = fp1_pillage_legacy_1 }
has_dynasty_perk = fp1_pillage_legacy_5
}
OR = {
NOT = { has_dlc_feature = hybridize_culture }
NOT = { has_dynasty_perk = ep1_culture_legacy_1 }
has_dynasty_perk = ep1_culture_legacy_5
}
OR = {
NOT = { has_dlc_feature = the_fate_of_iberia }
NOT = { has_dynasty_perk = fp2_urbanism_legacy_1 }
has_dynasty_perk = fp2_urbanism_legacy_5
}
OR = {
NOT = { has_dlc_feature = the_fate_of_iberia }
NOT = { has_dynasty_perk = fp2_coterie_legacy_1 }
has_dynasty_perk = fp2_coterie_legacy_5
}
OR = {
NOT = { has_dlc_feature = legacy_of_persia }
NOT = { has_dynasty_perk = fp3_khvarenah_legacy_1 }
has_dynasty_perk = fp3_khvarenah_legacy_5
}
OR = {
NOT = { has_dlc_feature = tours_and_tournaments }
NOT = { has_dynasty_perk = ep2_activities_legacy_1 }
has_dynasty_perk = ep2_activities_legacy_5
}
OR = {
NOT = { has_dlc_feature = legends_of_the_dead }
NOT = { has_dynasty_perk = ce1_heroic_legacy_1 }
has_dynasty_perk = ce1_heroic_legacy_5
}
OR = {
NOT = { has_dlc_feature = legends_of_the_dead }
NOT = { has_dynasty_perk = ce1_legitimacy_legacy_1 }
has_dynasty_perk = ce1_legitimacy_legacy_5
}
OR = {
NOT = { has_dlc_feature = roads_to_power }
NOT = { has_dynasty_perk = ep3_administrative_legacy_1 }
has_dynasty_perk = ep3_administrative_legacy_5
}
}
}
dynasty_head_prefers_activities_trigger = {
has_trait = diligent
OR = {
has_trait = gregarious
has_trait = lifestyle_reveler
}
}

View file

@ -0,0 +1,99 @@
can_make_expensive_purchase_trigger = {
OR = {
# Players can make their own decisions.
is_ai = no
# Some people are just really bad with money.
has_trait = profligate
## If a purchase is unwise but would be magnanimous, save this scope first to flag it as valid in the event.
### If you're in a chain, don't forget to clear the scope up afterwards with clear_saved_scope, otherwise it might affect other usages of the trigger further down the chain.
AND = {
has_trait = improvident
exists = scope:generous_purchase
}
# And if you've got the cash to spare, who cares?
short_term_gold >= $PRICE$
}
}
county_has_any_special_mine_building_trigger = {
OR = {
# Rammelsberg Mines
has_building_or_higher = rammelsberg_mines_01
# Kutna_hora Mines
has_building_or_higher = kutna_hora_mines_01
# Kremnica Mines
has_building_or_higher = kremnica_mines_01
# Falun Mines
has_building_or_higher = falun_mines_01
# Schwaz Mines
has_building_or_higher = schwaz_mines_01
# Argentiera Mines
has_building_or_higher = argentiera_mines_01
# Kollur Mines
has_building_or_higher = kollur_mines_01
# Siderokausia Mines
has_building_or_higher = siderokausia_mines_01
# Mali Mines
has_building_or_higher = mali_mines_01
# Konasamudram Mines
has_building_or_higher = konasamudram_mines_01
# Dean Mines
has_building_or_higher = dean_mines_01
# Zawar Mines
has_building_or_higher = zawar_mines_01
# Takkeda Mines
has_building_or_higher = takkeda_mines_01
# Khetri Mines
has_building_or_higher = khetri_mines_01
# Taghaza Mines
has_building_or_higher = taghaza_mines_01
# Ijil Mines
has_building_or_higher = ijil_mines_01
# Turda Mines
has_building_or_higher = turda_mines_01
# Phocaea Mines
has_building_or_higher = phocaea_mines_01
# Pansjhir Mines
has_building_or_higher = pansjhir_mines_01
# Trepca Mines
has_building_or_higher = trepca_mines_01
# Rudnik Mines
has_building_or_higher = rudnik_mines_01
# Cevennes Mines
has_building_or_higher = cevennes_mines_01
# Allaq Mines
has_building_or_higher = allaq_mines_01
# Verespatak Mines
has_building_or_higher = verespatak_mines_01
# Nishapur Mines
has_building_or_higher = nishapur_mines_01
# Srebrenica Mines
has_building_or_higher = srebrenica_mines_01
# Ratnapura Mines
has_building_or_higher = ratnapura_mines_01
}
}
location_has_multi_story_buildings_trigger = {
$LOCATION$ = {
# Filter out ocean-going people.
## Yes, this will error otherwise.
is_sea_province = no
# We just want to make sure we're not dealing with a tribe, who likely won't have too many really tall buildings.
NOT = { has_holding_type = tribal_holding }
# And that the place isn't a total backwater, which would also stop it having too many tall buildings.
county = { development_level >= 10 }
}
}
location_has_fast_traffic_trigger = {
$LOCATION$ = {
# Filter out ocean-going people.
## This one just might hypothetically error, so we check just in case.
is_sea_province = no
# We just want to make sure we're not dealing with a tribe, who would probably have carts but likely don't have to worry about them speeding much.
NOT = { has_holding_type = tribal_holding }
# And that the place isn't a total backwater, which would also keep the flow down.
county = { development_level >= 20 }
}
}

View file

@ -0,0 +1,453 @@

###TRIGGER LIST
#Takes RANK and OPERATOR
#OPERATOR can be "equals", "greater" or "less"
has_education_rank_trigger = {
save_temporary_scope_value_as = {
name = operator
value = flag:$OPERATOR$
}
OR = {
AND = {
scope:operator = flag:equals
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = $RANK$
}
has_trait_rank = {
trait = education_martial
rank = $RANK$
}
has_trait_rank = {
trait = education_stewardship
rank = $RANK$
}
has_trait_rank = {
trait = education_intrigue
rank = $RANK$
}
has_trait_rank = {
trait = education_learning
rank = $RANK$
}
}
}
AND = {
scope:operator = flag:greater
OR = {
has_trait_rank = {
trait = education_diplomacy
rank > $RANK$
}
has_trait_rank = {
trait = education_martial
rank > $RANK$
}
has_trait_rank = {
trait = education_stewardship
rank > $RANK$
}
has_trait_rank = {
trait = education_intrigue
rank > $RANK$
}
has_trait_rank = {
trait = education_learning
rank > $RANK$
}
}
}
#AND = {
# scope:operator = flag:less
# OR = {
# has_trait_rank = {
# trait = education_diplomacy
# rank < $RANK$
# }
# has_trait_rank = {
# trait = education_martial
# rank < $RANK$
# }
# has_trait_rank = {
# trait = education_stewardship
# rank < $RANK$
# }
# has_trait_rank = {
# trait = education_intrigue
# rank < $RANK$
# }
# has_trait_rank = {
# trait = education_learning
# rank < $RANK$
# }
# }
#}
}
}
has_education_rank_1_trigger = {
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = 1
}
has_trait_rank = {
trait = education_martial
rank = 1
}
has_trait_rank = {
trait = education_stewardship
rank = 1
}
has_trait_rank = {
trait = education_intrigue
rank = 1
}
has_trait_rank = {
trait = education_learning
rank = 1
}
}
}
has_education_rank_2_trigger = {
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = 2
}
has_trait_rank = {
trait = education_martial
rank = 2
}
has_trait_rank = {
trait = education_stewardship
rank = 2
}
has_trait_rank = {
trait = education_intrigue
rank = 2
}
has_trait_rank = {
trait = education_learning
rank = 2
}
}
}
has_education_rank_3_trigger = {
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = 3
}
has_trait_rank = {
trait = education_martial
rank = 3
}
has_trait_rank = {
trait = education_stewardship
rank = 3
}
has_trait_rank = {
trait = education_intrigue
rank = 3
}
has_trait_rank = {
trait = education_learning
rank = 3
}
}
}
has_education_rank_4_trigger = {
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = 4
}
has_trait_rank = {
trait = education_martial
rank = 4
}
has_trait_rank = {
trait = education_stewardship
rank = 4
}
has_trait_rank = {
trait = education_intrigue
rank = 4
}
has_trait_rank = {
trait = education_learning
rank = 4
}
}
}
has_education_rank_5_trigger = {
OR = {
has_trait_rank = {
trait = education_diplomacy
rank = 5
}
has_trait_rank = {
trait = education_martial
rank = 5
}
has_trait_rank = {
trait = education_stewardship
rank = 5
}
has_trait_rank = {
trait = education_intrigue
rank = 5
}
has_trait_rank = {
trait = education_learning
rank = 5
}
}
}
has_education_focus_trigger = {
OR = {
has_focus = education_diplomacy
has_focus = education_martial
has_focus = education_stewardship
has_focus = education_intrigue
has_focus = education_learning
}
}
#Takes RANK and FOCUS
education_points_and_focus_equals_education_rank = {
save_temporary_scope_value_as = {
name = education_rank
value = $RANK$
}
OR = {
AND = {
has_focus = education_$FOCUS$
OR = {
AND = {
var:education_$FOCUS$_variable <= education_level_1
scope:education_rank = 1
}
AND = {
var:education_$FOCUS$_variable <= education_level_2
scope:education_rank = 2
}
AND = {
var:education_$FOCUS$_variable <= education_level_3
scope:education_rank = 3
}
AND = {
var:education_$FOCUS$_variable > education_level_3
scope:education_rank = 4
}
}
}
}
}
#Takes RANK
education_points_equals_education_rank = {
OR = {
education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = diplomacy }
education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = martial }
education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = stewardship }
education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = intrigue }
education_points_and_focus_equals_education_rank = { RANK = $RANK$ FOCUS = learning }
}
}
#Affinity/disaffinity
#For children
has_diplomacy_education_affinity_childhood_trait_trigger = {
OR = {
has_trait = charming
has_trait = curious
}
}
has_martial_education_affinity_childhood_trait_trigger = {
OR = {
has_trait = rowdy
has_trait = bossy
}
}
has_stewardship_education_affinity_childhood_trait_trigger = {
OR = {
has_trait = bossy
has_trait = pensive
}
}
has_intrigue_education_affinity_childhood_trait_trigger = {
OR = {
has_trait = charming
has_trait = rowdy
}
}
has_learning_education_affinity_childhood_trait_trigger = {
OR = {
has_trait = pensive
has_trait = curious
}
}
has_diplomacy_education_disaffinity_childhood_trait_trigger = {
has_trait = bossy
}
has_martial_education_disaffinity_childhood_trait_trigger = {
has_trait = curious
}
has_stewardship_education_disaffinity_childhood_trait_trigger = {
has_trait = charming
}
has_intrigue_education_disaffinity_childhood_trait_trigger = {
has_trait = pensive
}
has_learning_education_disaffinity_childhood_trait_trigger = {
has_trait = rowdy
}
#For adults
had_diplomacy_education_affinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
OR = {
var:childhood_trait_type = flag:charming
var:childhood_trait_type = flag:curious
}
}
had_martial_education_affinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
OR = {
var:childhood_trait_type = flag:rowdy
var:childhood_trait_type = flag:bossy
}
}
had_stewardship_education_affinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
OR = {
var:childhood_trait_type = flag:bossy
var:childhood_trait_type = flag:pensive
}
}
had_intrigue_education_affinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
OR = {
var:childhood_trait_type = flag:charming
var:childhood_trait_type = flag:rowdy
}
}
had_learning_education_affinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
OR = {
var:childhood_trait_type = flag:pensive
var:childhood_trait_type = flag:curious
}
}
had_diplomacy_education_disaffinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
var:childhood_trait_type = flag:bossy
}
had_martial_education_disaffinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
var:childhood_trait_type = flag:curious
}
had_stewardship_education_disaffinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
var:childhood_trait_type = flag:charming
}
had_intrigue_education_disaffinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
var:childhood_trait_type = flag:pensive
}
had_learning_education_disaffinity_childhood_trait_trigger = {
has_variable = childhood_trait_type
var:childhood_trait_type = flag:rowdy
}
has_university_building_trigger = {
OR = {
has_building_or_higher = generic_university
has_building_or_higher = al_azhar_university
has_building_or_higher = sankore_university
has_building_or_higher = siena_university
has_building_or_higher = nalanda_university
has_building_or_higher = house_of_wisdom_01
has_building_or_higher = al_qarawiyyin_university_01
has_building_or_higher = somapura_university_01
has_building_or_higher = cluny_abbey_01
}
}
characters_have_same_education_group_trigger = {
# First, we make sure that both characters have an education finalised.
$CHARACTER_1$ = {
OR = {
has_trait = education_diplomacy
has_trait = education_martial
has_trait = education_stewardship
has_trait = education_intrigue
has_trait = education_learning
}
}
$CHARACTER_2$ = {
OR = {
has_trait = education_diplomacy
has_trait = education_martial
has_trait = education_stewardship
has_trait = education_intrigue
has_trait = education_learning
}
}
# Now check for the actual traits.
$CHARACTER_1$ = {
# Diplomacy.
trigger_if = {
limit = { has_trait = education_diplomacy }
$CHARACTER_2$ = { has_trait = education_diplomacy}
}
# Martial.
trigger_if = {
limit = { has_trait = education_martial }
$CHARACTER_2$ = { has_trait = education_martial }
}
# Stewardship.
trigger_if = {
limit = { has_trait = education_stewardship }
$CHARACTER_2$ = { has_trait = education_stewardship }
}
# Intrigue.
trigger_if = {
limit = { has_trait = education_intrigue }
$CHARACTER_2$ = { has_trait = education_intrigue }
}
# Learning.
trigger_if = {
limit = { has_trait = education_learning }
$CHARACTER_2$ = { has_trait = education_learning }
}
}
}

View file

@ -0,0 +1,339 @@
# Example:
#
# example_trigger = {
# is_country_type = default
# free_leader_slots > 0
# }
#
#
# In a script file:
#
# trigger = {
# example_trigger = yes
# }
#
has_unelectable_trait_trigger = {
OR = {
has_trait = disinherited
has_trait = gallivanter
is_eunuch_trigger = yes
has_trait = crusader_king #Avoid realm merging after Crusade.
has_trait = devoted
has_trait = order_member
AND = {
has_trait = bastard #If landed, he might still be electable on the grounds of being an Elector.
is_ruler = no
}
}
}
has_unelectable_government_trigger = {
OR = {
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
government_has_flag = government_is_mercenary
government_has_flag = government_is_holy_order
}
}
this_is_martial_society_trigger = {
NOR = {
faith = { has_doctrine = tenet_pacifism }
faith = { has_doctrine = tenet_dharmic_pacifism }
}
OR = {
government_has_flag = government_is_clan
government_has_flag = government_is_tribal
government_has_flag = government_is_mercenary
government_has_flag = government_is_holy_order
faith = {
OR = {
has_doctrine_parameter = great_holy_wars_active
has_doctrine_parameter = great_holy_wars_active_if_reformed
has_doctrine_parameter = cheaper_holy_wars_active
}
}
}
}
this_is_diplomatic_society_trigger = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_special_republic
government_has_flag = government_is_theocracy
}
OR = {
faith = { has_doctrine = tenet_communal_identity }
faith = { has_doctrine = tenet_alexandrian_catechism }
faith = { has_doctrine = tenet_legalism }
}
}
this_is_spiritual_society_trigger = {
faith = {
NOR = {
has_doctrine = tenet_false_conversion_sanction
has_doctrine = tenet_hedonistic
has_doctrine = tenet_carnal_exaltation
has_doctrine = tenet_exaltation_of_pain
has_doctrine = tenet_pursuit_of_power
}
OR = {
has_doctrine = tenet_inner_journey
has_doctrine = tenet_asceticism
has_doctrine = tenet_literalism
has_doctrine = tenet_esotericism
has_doctrine = tenet_astrology
has_doctrine = tenet_monasticism
}
}
}
ere_elective_politician_titles_trigger = { #Used in Byzantine Elective to determine AI behavior.
OR = {
has_council_position = councillor_chancellor
has_council_position = councillor_marshal
has_council_position = councillor_steward
has_council_position = councillor_spymaster
has_council_position = councillor_court_chaplain
}
}
parent_for_elective_succession_trigger = { #This trigger is used to prevent grandchildren from being selectable when their parent is still available as a candidate.
NOT = { this = scope:holder } #Not the current ruler.
dynasty = scope:holder.dynasty
is_child_of = scope:holder
OR = {
is_female = no
scope:title = {
NOT = { has_title_law = male_only_law }
}
}
OR = {
is_female = yes
scope:title = {
NOT = { has_title_law = female_only_law }
}
}
OR = { #Candidate should not be a landless Courtier that is about to inherit a Theocracy or Republic
AND = {
is_ruler = yes
is_playable_character = yes
has_unelectable_government_trigger = no
}
NOT = {
any_heir_title = {
exists = holder
holder = {
has_unelectable_government_trigger = yes
}
}
}
}
OR = { #If the title controls the faith, candidates must be of the same faith.
scope:holder = {
NAND = {
exists = faith.religious_head
this = faith.religious_head
}
}
faith = scope:holder.faith
}
has_unelectable_trait_trigger = no
has_unelectable_government_trigger = no
}
feudal_elective_potential_landed_candidate_trigger = {
save_temporary_scope_as = potential_candidate
has_same_government = scope:holder
#Either the candidate is in the realm, or the title is independent, or the realm of the title does NOT have protected inheritance.
OR = {
any_liege_or_above = {
this = scope:holder
}
scope:holder = { is_independent_ruler = yes }
scope:holder = {
exists = liege
NOT = {
any_liege_or_above = {
has_realm_law_flag = titles_cannot_leave_realm_on_succession
NOR = {
this = scope:potential_candidate
target_is_vassal_or_below = scope:potential_candidate
}
}
}
}
}
OR = { #If the title controls the faith, candidates must be of the same faith.
scope:holder = {
NAND = {
exists = faith.religious_head
this = faith.religious_head
}
}
this.faith = scope:holder.faith
}
has_unelectable_trait_trigger = no
has_unelectable_government_trigger = no
}
feudal_elective_potential_landless_claimant_candidate_trigger = {
save_temporary_scope_as = potential_candidate
#Either the candidate is in the realm, or is landless, or the title is independent, or the realm of the title does NOT have protected inheritance.
OR = {
any_liege_or_above = {
this = scope:holder
}
is_ruler = no
scope:holder = { is_independent_ruler = yes }
scope:holder = {
exists = liege
NOT = {
any_liege_or_above = {
has_realm_law_flag = titles_cannot_leave_realm_on_succession
NOR = {
this = scope:potential_candidate
target_is_vassal_or_below = scope:potential_candidate
}
}
}
}
}
NOT = { #Landless characters should not be heirs to Theocracies/Republics.
any_heir_title = {
exists = holder
holder = {
has_unelectable_government_trigger = yes
}
}
}
OR = { #If the title controls the faith, candidates must be of the same faith.
scope:holder = {
NAND = {
exists = faith.religious_head
this = scope:holder.faith.religious_head
}
}
faith = scope:holder.faith
}
has_unelectable_trait_trigger = no
has_unelectable_government_trigger = no
}
feudal_elective_potential_landless_dynastic_candidate_trigger = {
save_temporary_scope_as = potential_candidate
#Either the candidate is in the realm, or is landless, or the title is independent, or the realm of the title does NOT have protected inheritance.
OR = {
any_liege_or_above = {
this = scope:holder
}
is_ruler = no
scope:holder = { is_independent_ruler = yes }
scope:holder = {
exists = liege
NOT = {
any_liege_or_above = {
has_realm_law_flag = titles_cannot_leave_realm_on_succession
NOR = {
this = scope:potential_candidate
target_is_vassal_or_below = scope:potential_candidate
}
}
}
}
}
NOT = { #Landless characters should not be heirs to Theocracies/Republics.
any_heir_title = {
exists = holder
holder = {
has_unelectable_government_trigger = yes
}
}
}
OR = { #If the title controls the faith, candidates must be of the same faith.
scope:holder = {
NAND = {
exists = faith.religious_head
this = scope:holder.faith.religious_head
}
}
faith = scope:holder.faith
}
#Grandkid block
trigger_if = {
limit = {
NOR = {
#Check to see that you're not the product of incest
AND = {
exists = mother
exists = father
mother = {
relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = prev.father }
}
}
#Let's make the incredibly bold assumption that if incest is completely allowed we'll just default to check the child instead of parents
scope:holder.faith = {
has_doctrine_parameter = consanguinity_unrestricted_incest
}
}
}
# We don't want grandkids to show as candidates if their parent is eligable and still alive
NOR = {
AND = {
exists = mother
mother = {
is_alive = yes
parent_for_elective_succession_trigger = yes
}
}
AND = {
exists = father
father = {
is_alive = yes
parent_for_elective_succession_trigger = yes
}
}
}
}
#if incest is allowed, check if you're the child of the holder since you can be both their kid and grandkid at the same time...
trigger_else_if = {
limit = {
OR = {
AND = {
exists = mother
mother = {
is_alive = yes
}
}
AND = {
exists = father
father = {
is_alive = yes
}
}
}
}
parent_for_elective_succession_trigger = yes
}
trigger_else = {
#Your parents are dead and you're eligible for title inheritance. Congrats.
}
has_unelectable_trait_trigger = no
has_unelectable_government_trigger = no
}
byzantine_elective_deformed_candidate_trigger = {
OR = {
has_trait = disfigured
has_trait = blind
is_eunuch_trigger = yes
has_trait = dwarf
has_trait = clubfooted
has_trait = inbred
}
}

View file

@ -0,0 +1,159 @@

### TRIGGER LIST ###
# General Triggers:
# -
#
# Popular Faction Triggers:
# -
#
############################
# General Faction Triggers #
############################
immune_to_factions_trigger = {
OR = {
# Genghis Khan is immune to factions
has_character_flag = is_temujin
# Seljuk leader is immune to factions too
has_character_flag = is_seljuk
}
}
character_has_faction_disabling_modifier_trigger = {
NOR = {
has_character_modifier = yearly_close_watch_modifier
#Add any subsequent character modifiers above this line.
}
}
common_character_validity_trigger = {
NOR = { #No prince-bishop can ever join
government_has_flag = government_is_theocracy
trigger_if = {
limit = { exists = cp:councillor_court_chaplain }
this = cp:councillor_court_chaplain
}
}
OR = {
$FACTION_TARGET$ = liege
any_character_active_contract = {
task_contract_target = $FACTION_TARGET$
}
}
highest_held_title_tier > tier_barony
#Not blocked through events
custom_description = {
text = character_blocked_from_joining
NOT = {
has_character_flag = joining_faction_block
}
}
NOT = { has_relation_blood_brother = $FACTION_TARGET$ }
}
common_can_character_join_trigger = {
common_character_validity_trigger = {
FACTION_TARGET = $FACTION_TARGET$
}
is_adult = yes
NOT = { has_truce = $FACTION_TARGET$ }
$FACTION_TARGET$ = {
NOT = { has_strong_hook = root }
NOT = { is_allied_to = root }
}
OR = {
is_ai = no
NOR = {
has_relation_lover = $FACTION_TARGET$
has_relation_friend = $FACTION_TARGET$
}
}
$FACTION_TARGET$.highest_held_title_tier > tier_county
custom_description = {
text = character_has_faction_disabling_modifier
character_has_faction_disabling_modifier_trigger = yes
}
}
common_can_character_create_trigger = {
NOT = { has_truce = $FACTION_TARGET$ }
common_character_validity_trigger = {
FACTION_TARGET = $FACTION_TARGET$
}
####
# BLOCKERS
####
# General Faction immunity
custom_description = {
text = character_is_immune_to_factions
subject = $FACTION_TARGET$
NOT = { $FACTION_TARGET$ = { immune_to_factions_trigger = yes } }
}
}
base_faction_trigger = {
NOT = { has_truce = scope:target }
can_join_or_create_faction_against = {
who = scope:target
faction = $FACTION_TYPE$
}
scope:target = { NOT = { has_strong_hook = root } }
trigger_if = {
limit = {
exists = scope:recipient
}
scope:recipient = {
NOT = { is_at_war_with = scope:actor }
NOT = { has_trait = incapable }
}
}
}
############################
# Popular Faction Triggers #
############################
character_can_join_popular_faction_trigger = {
OR = {
NOT = { faith = $FACTION$.faction_target.faith }
NOT = { culture = $FACTION$.faction_target.culture }
}
}
county_can_join_popular_faction_trigger = {
OR = {
NOT = { faith = $FACTION$.faction_target.faith }
NOT = { culture = $FACTION$.faction_target.culture }
}
}
has_active_diarch_for_factions_trigger = {
exists = $TARGET$.diarch
NOT = { $TARGET$.faith = $TARGET$.diarch.faith }
}
#factions with only landless adventurers cannot exist
has_valid_faction_members_trigger = {
trigger_if = {
limit = {
is_landless_adventurer = yes
}
scope:faction = {
OR = {
any_faction_member = {
is_landless_adventurer = no
is_forced_into_faction = no
}
any_faction_county_member = {
count >= 1
}
}
}
}
}

View file

@ -0,0 +1,336 @@

###TRIGGER LIST
# is_close_family_of_root_trigger
# is_sibling_child_of_root_trigger
# is_parent_sibling_of_root_trigger
# is_cousin_of_root_trigger
# is_sibling_in_law_of_root_trigger
# is_mother_of_compare_character_trigger
# is_father_of_compare_character_trigger
# is_sibling_of_compare_character_trigger
# is_child_of_compare_character_trigger
# is_close_family_of_compare_character_trigger
# is_allowed_to_legitimize_children_trigger
is_close_family_of_root_trigger = {
OR = {
any_parent = { this = root }
any_sibling = { this = root }
any_child = { this = root }
}
}
is_close_family_or_spouse_of_root_trigger = {
OR = {
any_parent = { this = root }
any_sibling = { this = root }
any_child = { this = root }
any_spouse = { this = root }
}
}
is_sibling_child_of_root_trigger = {
any_parent = {
even_if_dead = yes
any_sibling = {
this = root
}
}
}
is_parent_sibling_of_root_trigger = {
any_sibling = {
even_if_dead = yes
any_child = {
this = root
}
}
}
is_cousin_of_root_trigger = {
any_parent = {
even_if_dead = yes
any_sibling = {
even_if_dead = yes
any_child = {
this = root
}
}
}
}
is_sibling_in_law_of_root_trigger = {
NOT = {
any_sibling = {
this = root
}
}
any_spouse = {
any_sibling = {
this = root
}
}
}
is_cousin_in_law_of_root_trigger = {
any_spouse = {
is_cousin_of = root
NOT = { this = root }
}
}
is_auntuncle_in_law_of_root_trigger = {
any_spouse = {
is_uncle_or_aunt_of = root
NOT = { this = root }
}
}
is_grandmotherfather_in_law_of_root_trigger = {
any_spouse = {
is_grandparent_of = root
NOT = { this = root }
}
}
is_great_grandmotherfather_in_law_of_root_trigger = {
any_spouse = {
is_great_grandparent_of = root
NOT = { this = root }
}
}
is_granddaughterson_in_law_of_root_trigger = {
any_spouse = {
is_grandchild_of = root
NOT = { this = root }
}
}
is_great_granddaughterson_in_law_of_root_trigger = {
any_spouse = {
is_great_grandchild_of = root
NOT = { this = root }
}
}
is_nibling_in_law_of_root_trigger = {
any_spouse = {
is_nibling_of = root
NOT = { this = root }
}
}
is_any_family_relation_or_spouse_of_root_trigger = {
OR = {
any_parent = { this = root }
any_sibling = { this = root }
any_child = { this = root }
any_spouse = { this = root }
any_parent = {
even_if_dead = yes
any_sibling = {
this = root
}
}
any_sibling = {
even_if_dead = yes
any_child = {
this = root
}
}
AND = {
NOT = {
any_sibling = {
this = root
}
}
any_parent = {
even_if_dead = yes
any_child = {
this = root
}
}
}
}
}
is_mother_of_compare_character_trigger = {
this = scope:compare_character.mother
}
is_father_of_compare_character_trigger = {
this = scope:compare_character.father
}
is_sibling_of_compare_character_trigger = {
scope:compare_character = {
any_sibling = {
this = prev
}
}
}
is_child_of_compare_character_trigger = {
scope:compare_character = {
any_child = {
this = prev
}
}
}
is_close_family_of_compare_character_trigger = {
OR = {
this = scope:compare_character.mother
this = scope:compare_character.father
any_sibling = {
this = scope:compare_character
}
father = scope:compare_character
mother = scope:compare_character
}
}
is_allowed_to_legitimize_children_trigger = {
is_lowborn = no
is_concubine = no
is_ruler = yes
custom_description = {
text = faith_allows_legitimization_of_bastards
faith = {
has_doctrine_parameter = bastards_legitimize
}
}
}
###############################################
# Triggers that take an argument and NOT root
##############################################
is_close_family_trigger = {
OR = {
any_parent = { this = $CHARACTER$ }
any_sibling = { this = $CHARACTER$ }
any_child = { this = $CHARACTER$ }
}
}
is_close_family_or_spouse_trigger = {
OR = {
any_parent = { this = $CHARACTER$ }
any_sibling = { this = $CHARACTER$ }
any_child = { this = $CHARACTER$ }
any_spouse = { this = $CHARACTER$ }
}
}
is_any_family_relation_or_spouse_trigger = {
save_temporary_scope_as = root_character
OR = {
any_parent = { this = $CHARACTER$ }
any_sibling = { this = $CHARACTER$ }
any_child = { this = $CHARACTER$ }
any_spouse = { this = $CHARACTER$ }
any_parent = {
even_if_dead = yes
any_sibling = {
this = $CHARACTER$
}
}
any_parent = {
even_if_dead = yes
any_sibling = {
even_if_dead = yes
any_child = {
this = $CHARACTER$
}
}
}
any_sibling = {
even_if_dead = yes
any_child = {
this = $CHARACTER$
}
}
AND = {
NOT = {
any_sibling = {
this = $CHARACTER$
}
}
any_parent = {
even_if_dead = yes
any_child = {
this = $CHARACTER$
}
}
}
#child/parent/sibling/nephew/grandchild/grandparent/uncle/aunt/niece/nephew is married to the other
any_spouse = {
OR = {
is_close_family_of = $CHARACTER$
is_nibling_of = $CHARACTER$
is_uncle_or_aunt_of = $CHARACTER$
}
}
$CHARACTER$ = {
any_spouse = {
OR = {
is_close_family_of = scope:root_character
is_nibling_of = scope:root_character
is_uncle_or_aunt_of = scope:root_character
}
}
}
#child/parent/sibling is married to other's child/parent/sibling
any_close_family_member = {
OR = {
is_parent_of = scope:root_character
is_child_of = scope:root_character
is_sibling_of = scope:root_character
}
any_spouse = {
OR = {
is_parent_of = $CHARACTER$
is_child_of = $CHARACTER$
is_sibling_of = $CHARACTER$
}
}
}
}
}
house_head_would_approve_legitimization_trigger = {
$LEGITIMIZER$ = {
save_temporary_scope_as = the_legitimizer
}
$BASTARD$ = {
save_temporary_scope_as = the_bastard
}
trigger_if = {
limit = {
exists = scope:legitimizer.house
}
scope:legitimizer.house.house_head = {
save_temporary_scope_as = the_house_head
}
house_head_legitimize_approval_rating > 0
}
}
is_allowed_to_legitimize_child_trigger = {
is_allowed_to_legitimize_children_trigger = yes
OR = {
this = house.house_head
house_head_would_approve_legitimization_trigger = {
LEGITIMIZER = $LEGITIMIZER$
BASTARD = $BASTARD$
}
}
}

View file

@ -0,0 +1,66 @@

###TRIGGER LIST
# has_strong_religious_conviction_trigger
#Check whether any special conditions are true.
#Make sure conditions for new special Main Events are added to this!
has_special_main_event_potential = {
scope:activity = {
has_variable = potential_friend
}
}
is_murder_feast = {
scope:activity = {
has_activity_option = {
category = special_type
option = feast_type_murder
}
}
}
feast_default_participant_including_player_trigger = {
is_ai = yes
NOT = { this = root }
is_alive = yes
is_imprisoned = no
}
feast_default_participant_trigger = {
is_ai = yes
NOT = { this = root }
is_alive = yes
is_imprisoned = no
}
feast_default_adult_participant_trigger = {
is_ai = yes
NOT = { this = root }
is_adult = yes
is_alive = yes
is_imprisoned = no
}
has_hosted_feast_opinion_targeting_character = {
OR = {
has_opinion_modifier = {
modifier = feast_hosted_successful_feast
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = feast_hosted_successful_feast_with_music
target = $CHARACTER$
}
}
}
use_goblet_in_tavern_trigger = {
OR = {
location.culture ?= { has_graphical_india_culture_group_trigger = yes }
location.culture ?= { has_graphical_mena_culture_group_trigger = yes }
location.culture ?= { has_building_gfx = iranian_building_gfx }
location.culture ?= { has_graphical_african_culture_group_trigger = yes }
location.culture ?= { has_graphical_steppe_culture_group_trigger = yes }
}
}

View file

@ -0,0 +1,56 @@

# James _insisted_ I make this file. So here we are.
##################################################
# VEGETABLE TRIGGERS
province_has_vegetable_carrot_trigger = {
OR = {
geographical_region = world_india
geographical_region = world_middle_east
geographical_region = world_europe
geographical_region = world_steppe_west
geographical_region = world_asia_minor
}
}
province_has_vegetable_parsnip_trigger = {
NOT = { geographical_region = world_africa }
}
province_has_vegetable_turnip_trigger = {
NOT = { geographical_region = world_africa }
}
province_has_vegetable_yams_trigger = {
OR = {
# African yams
geographical_region = world_africa
# Chinese yams
geographical_region = world_tibet
geographical_region = world_burma
geographical_region = world_steppe_east
geographical_region = world_steppe_tarim
}
}
province_has_vegetable_kokoro_trigger = {
geographical_region = world_africa
}
province_has_vegetable_ginger_trigger = {
OR = {
geographical_region = world_india
geographical_region = world_burma
}
}
province_has_vegetable_taro_trigger = {
OR = {
geographical_region = world_india
geographical_region = world_burma
geographical_region = world_tibet
geographical_region = world_steppe_east
geographical_region = world_steppe_tarim
}
}

View file

@ -0,0 +1,42 @@

################################################################
### Triggers related to funerals and general body-related things
body_is_available = {
is_alive = no
time_since_death = {
years <= 5 # Usually it takes a body less time than this to decompose, but we can plausibly say the body is being preserved in some way
}
NOT = { has_dead_character_variable = body_has_been_disposed }
}
# NOTE: Keep this trigger in sync with `funeral_add_funeral_targets_to_list` effect
has_available_funeral_target = {
OR = {
primary_title ?= { # Previous holders of your primary title
any_past_holder = {
body_is_available = yes
}
}
any_close_or_extended_family_member = {
even_if_dead = yes
body_is_available = yes
}
any_spouse = {
even_if_dead = yes
body_is_available = yes
}
any_memory = {
OR = {
has_memory_type = friend_died
has_memory_type = lover_died
has_memory_type = soulmate_died
}
trigger_if = {
limit = { exists = memory_participant:dead_relation }
memory_participant:dead_relation = { body_is_available = yes }
}
trigger_else = { always = no }
}
}
}

View file

@ -0,0 +1,281 @@
hungarian_migration_valid_ai_mogyer_ruler_trigger = {
culture = culture:mogyer
is_ai = yes
government_has_flag = government_is_tribal
is_at_war = no
highest_held_title_tier <= tier_kingdom
OR = {
is_independent_ruler = yes
NOT = {
liege = { culture = culture:mogyer }
}
}
}
hungarian_migration_valid_pannonian_target_trigger = {
NOR = {
culture = culture:mogyer
any_liege_or_above = { culture = culture:mogyer }
}
is_ai = yes
any_realm_county = {
count >= $COUNT$
title_province = { geographical_region = custom_hungary }
}
}
exclave_independence_trigger = {
is_independent_ruler = yes
NOT = { has_title = title:k_papal_state }
exists = root.capital_province
any_sub_realm_title = {
tier = tier_county
NOT = {
is_connected_to = {
target = root.capital_province.county
}
}
}
trigger_if = {
limit = {
exists = primary_heir
}
primary_heir = {
NOR = {
is_independent_ruler = yes # Disallow this when the heir is independent, lest we risk breaking up realms that should be connected
is_ai = no # Players always inherit everything
}
}
}
}
# Sometimes we disable these events for specific characters.
harm_game_rule_enablement_trigger = {
# Disable entirely if harm_safe.
trigger_if = {
limit = { has_game_rule = harm_safe }
always = no
}
# harm_target_player_only
trigger_else_if = {
limit = { has_game_rule = harm_target_player_only }
is_ai = no
}
# harm_target_ai_only
trigger_else_if = {
limit = { has_game_rule = harm_target_ai_only }
is_ai = yes
}
# harm_target_all
trigger_else = { always = yes }
# Never just kill the player if it'd utterly game-over them.
trigger_if = {
limit = { is_ai = no }
# Either because they have no heir.
exists = player_heir
# Or because they have an heir they can't survive with.
player_heir.dynasty ?= dynasty
}
# Immortals do not receive harm events, as they would be inevitably killed by them over a long enough period of time.
NOT = { has_trait = immortal }
}
# Who do we care about when recording variable logs for harm events?
harm_game_rule_valid_for_logging_trigger = {
OR = {
AND = {
highest_held_title_tier >= tier_duchy
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_theocracy
}
}
any_close_family_member = {
highest_held_title_tier >= tier_duchy
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_theocracy
}
}
}
}
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = {
trigger_if = {
limit = { has_game_rule = title_creation_imperial_power_projection_targeting_ai_only }
is_ai = yes
}
trigger_else_if = {
limit = { has_game_rule = title_creation_imperial_power_projection_targeting_player_only }
is_ai = no
}
trigger_else = { always = yes }
}
rule_title_creation_imperial_power_projection_title_creation_trigger = {
trigger_if = {
limit = {
has_game_rule = title_creation_imperial_power_projection_any_power_advantage
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes
highest_held_title_tier <= tier_kingdom
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_advantage
any_neighboring_top_liege_realm_owner = {
count = all
trigger_if = {
limit = { highest_held_title_tier >= tier_empire }
save_temporary_scope_as = char_temp
OR = {
any_close_family_member = { is_spouse_of = root }
root = { has_strong_hook = scope:char_temp }
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
}
trigger_else = { always = yes }
}
}
}
trigger_else_if = {
limit = {
has_game_rule = title_creation_imperial_power_projection_hard_power_only
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes
highest_held_title_tier <= tier_kingdom
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only
any_neighboring_top_liege_realm_owner = {
count = all
trigger_if = {
limit = { highest_held_title_tier >= tier_empire }
save_temporary_scope_as = char_temp
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
trigger_else = { always = yes }
}
}
}
trigger_else_if = {
limit = {
has_game_rule = title_creation_imperial_power_projection_soft_power_only
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes
highest_held_title_tier <= tier_kingdom
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.soft_power_only
any_neighboring_top_liege_realm_owner = {
count = all
trigger_if = {
limit = { highest_held_title_tier >= tier_empire }
save_temporary_scope_as = char_temp
OR = {
any_close_family_member = { is_spouse_of = root }
root = { has_strong_hook = scope:char_temp }
}
}
trigger_else = { always = yes }
}
}
}
trigger_else_if = {
limit = {
has_game_rule = title_creation_imperial_power_projection_hard_power_only_strict
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes
highest_held_title_tier <= tier_kingdom
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only_strict.neighbours
any_neighboring_top_liege_realm_owner = {
count = all
trigger_if = {
limit = { highest_held_title_tier >= tier_empire }
save_temporary_scope_as = char_temp
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
trigger_else = { always = yes }
}
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.hard_power_only_strict.de_jure_sharers
any_sub_realm_county = {
count = all
empire = {
OR = {
is_title_created = no
holder = {
save_temporary_scope_as = char_temp
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
}
}
}
}
}
trigger_else_if = {
limit = {
has_game_rule = title_creation_imperial_power_projection_any_power_strict
rule_title_creation_imperial_power_projection_title_creation_targeting_trigger = yes
highest_held_title_tier <= tier_kingdom
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_strict.neighbours
any_neighboring_top_liege_realm_owner = {
count = all
trigger_if = {
limit = { highest_held_title_tier >= tier_empire }
save_temporary_scope_as = char_temp
OR = {
any_close_family_member = { is_spouse_of = root }
root = { has_strong_hook = scope:char_temp }
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
}
trigger_else = { always = yes }
}
}
custom_tooltip = {
text = rule_title_creation_imperial_power_projection_title_creation_trigger.tt.any_power_strict.de_jure_sharers
any_sub_realm_county = {
count = all
empire = {
OR = {
is_title_created = no
holder = {
save_temporary_scope_as = char_temp
OR = {
any_close_family_member = { is_spouse_of = root }
root = { has_strong_hook = scope:char_temp }
root.current_military_strength >= scope:char_temp.fifty_percent_more_of_current_military_strength
}
}
}
}
}
}
}
trigger_else = { always = yes }
}
game_rule_rig_norman_conquest_for_hereward_trigger = {
OR = {
has_game_rule = historicity_norman_conquest_determined_william
# We also rig it for William if we have a player Hereward and no other input.
AND = {
has_game_rule = historicity_norman_conquest_default_random
character:90028 ?= { is_ai = no }
NOT = {
any_player = {
NOT = { this = character:90028 }
any_character_war = {
OR = {
using_cb = norman_conquest_cb
using_cb = norwegian_invasion_cb
}
}
}
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,259 @@
###########################
# These triggers are designed for use in generic event content:
# They are very restrictive, and designed to, as much as possible, not break immersion.
# Use them where you can, but be aware that they will make event triggers very strict
###########################
###### LOVER TRIGGERS #####
######
# are_characters_sensible_and_appropriate_open_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else }
# This is the most restrictive form of lover trigger,
# use it when you need a couple of innocent lovers
######
# are_characters_sensible_and_appropriate_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else }
# Is the pairing both sensible from an attraction standpoint,
# and appropriate from a social standpoint?
######
# are_characters_sensible_lovers_trigger = { INSTIGATING_LOVER = scope:something TARGET_OF_LOVE = scope:something_else }
# Is the pairing sensible from an attraction standpoint?
# Does not restrict based on genetic bad looks,
# this is about the _lover_ status, not attraction-based sex
# Would two characters fancy each other somewhat?
are_characters_sensible_lovers_trigger = {
$INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character }
$TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love }
scope:instigating_character = {
NOT = { this = scope:target_of_love }
is_physically_able_adult = yes
might_cheat_on_every_partner_trigger = yes
can_set_relation_lover_trigger = { CHARACTER = scope:target_of_love }
is_attracted_to_gender_of = scope:target_of_love
NOR = {
has_trait = chaste
has_trait = celibate
has_sexuality = asexual
has_trait = beardless_eunuch
has_trait = leper
has_trait = great_pox
has_trait = bubonic_plague
has_trait = smallpox
has_trait = measles
has_trait = ergotism
has_trait = dysentery
has_trait = consumption
has_trait = typhus
has_trait = pneumonic
}
# These three only need to be checked on one char
age <= scope:target_of_love.age_plus_10
age >= scope:target_of_love.age_minus_10
trait_compatibility = {
target = scope:target_of_love
value >= low_positive_trait_compatibility
}
}
scope:target_of_love = {
NOT = { this = scope:instigating_character }
might_cheat_on_every_partner_trigger = yes
can_set_relation_lover_trigger = { CHARACTER = scope:instigating_character }
is_attracted_to_gender_of = scope:instigating_character
NOR = {
has_trait = chaste
has_trait = celibate
has_sexuality = asexual
has_trait = beardless_eunuch
has_trait = leper
has_trait = great_pox
has_trait = bubonic_plague
has_trait = smallpox
has_trait = measles
has_trait = ergotism
has_trait = dysentery
has_trait = consumption
has_trait = typhus
has_trait = pneumonic
}
}
accepts_incest_with_each_other_trigger = {
CHARACTER_1 = scope:instigating_character
CHARACTER_2 = scope:target_of_love
}
}
# Various social blockers - what would you, interpreting society, think of having a lover
are_characters_sensible_and_appropriate_lovers_trigger = {
$INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character }
$TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love }
are_characters_sensible_lovers_trigger = {
INSTIGATING_LOVER = scope:instigating_character
TARGET_OF_LOVE = scope:target_of_love
}
scope:instigating_character = {
OR = {
has_trait = lustful
any_relation = {
type = lover
count < 1
}
}
trigger_if = {
limit = {
is_clergy = yes
}
faith = {
has_doctrine_parameter = clergy_can_marry
}
}
trigger_if = {
limit = {
is_courtier = yes
is_close_or_extended_family_of = liege
has_no_particular_noble_roots_trigger = no
}
OR = {
scope:target_of_love = { has_no_particular_noble_roots_trigger = no }
is_deviant_trigger = yes
has_trait = lustful
trait_compatibility = {
target = scope:target_of_love
value >= high_positive_trait_compatibility
}
}
}
trigger_if = {
limit = {
OR = {
faith = {
has_doctrine_parameter = homosexuality_shunned
}
liege.faith ?= {
has_doctrine_parameter = homosexuality_shunned
}
faith = {
has_doctrine_parameter = homosexuality_illegal
}
liege.faith ?= {
has_doctrine_parameter = homosexuality_illegal
}
}
}
NOR = {
AND = {
is_female = yes
scope:target_of_love = { is_female = yes }
}
AND = {
is_male = yes
scope:target_of_love = { is_male = yes }
}
}
}
}
scope:target_of_love = {
OR = {
has_trait = lustful
any_relation = {
type = lover
count < 1
}
}
trigger_if = {
limit = {
is_clergy = yes
}
faith = {
has_doctrine_parameter = clergy_can_marry
}
}
trigger_if = {
limit = {
is_courtier = yes
is_close_or_extended_family_of = liege
has_no_particular_noble_roots_trigger = no
}
OR = {
scope:instigating_character = { has_no_particular_noble_roots_trigger = no }
is_deviant_trigger = yes
has_trait = lustful
trait_compatibility = {
target = scope:instigating_character
value >= high_positive_trait_compatibility
}
}
}
trigger_if = {
limit = {
OR = {
faith = {
has_doctrine_parameter = homosexuality_shunned
}
liege.faith ?= {
has_doctrine_parameter = homosexuality_shunned
}
faith = {
has_doctrine_parameter = homosexuality_illegal
}
liege.faith ?= {
has_doctrine_parameter = homosexuality_illegal
}
}
}
NOR = {
AND = {
is_female = yes
scope:target_of_love = { is_female = yes }
}
AND = {
is_male = yes
scope:target_of_love = { is_male = yes }
}
}
}
}
}
# Would the characters make sense as lovers within the context of their social situation
are_characters_sensible_and_appropriate_open_lovers_trigger = {
$INSTIGATING_LOVER$ = { save_temporary_scope_as = instigating_character }
$TARGET_OF_LOVE$ = { save_temporary_scope_as = target_of_love }
scope:instigating_character = {
trigger_if = {
limit = {
NOT = {
is_consort_of = scope:target_of_love
}
}
is_married = no
is_concubine = no
}
}
scope:target_of_love = {
trigger_if = {
limit = {
NOT = {
is_consort_of = scope:instigating_character
}
}
is_married = no
is_concubine = no
}
}
are_characters_sensible_and_appropriate_lovers_trigger = {
INSTIGATING_LOVER = scope:instigating_character
TARGET_OF_LOVE = scope:target_of_love
}
}

View file

@ -0,0 +1,508 @@

##################################################
# Debug Triggers
# Do we want to gather global variable tallies for the Persian struggle?
## Toggled off for release, toggle back on to check how often we change phases & which catalysts are firing.
gather_debug_variables_for_persian_struggle_trigger = { always = no }
##################################################
# General Triggers
## Miscellaneous assorted triggers related to bits of neutral struggle content.
# Characters of some note within the struggle.
is_important_struggle_character = {
highest_held_title_tier = tier_duchy
}
# Characters who are very important within the struggle (generally enough that they matter for catalysts).
is_vip_struggle_character = {
OR = {
highest_held_title_tier >= tier_kingdom
AND = {
exists = faith.religious_head
this = faith.religious_head
}
this = culture.culture_head
}
}
is_important_or_vip_struggle_character = {
OR = {
is_important_struggle_character = yes
is_vip_struggle_character = yes
}
}
is_semi_important_ruler_struggle_character = {
OR = {
highest_held_title_tier >= tier_county
is_important_or_vip_struggle_character = yes
}
}
is_secondary_character_involvement_involved_trigger = {
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = involved
this = scope:struggle_temp
}
}
}
is_secondary_character_involvement_interloper_trigger = {
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = interloper
this = scope:struggle_temp
}
}
}
is_secondary_character_involvement_either_trigger = {
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = { this = scope:struggle_temp }
}
}
is_secondary_character_involvement_neither_trigger = {
save_temporary_scope_as = struggle_temp
$CHAR$ = {
NOT = {
any_character_struggle = { this = scope:struggle_temp }
}
}
}
is_diff_faith_or_culture_trigger = {
NAND = {
culture = $CHAR$.culture
faith = $CHAR$.faith
}
$CHAR$ = { any_character_struggle = { involvement = $STATUS$ } }
# Removed the check for what struggle it is
}
is_same_faith_or_culture_trigger = {
OR = {
culture = $CHAR$.culture
faith = $CHAR$.faith
}
$CHAR$ = { any_character_struggle = { involvement = $STATUS$ } }
# Removed the check for what struggle it is
}
is_same_culture_trigger = {
culture = $CHAR$.culture
$CHAR$ = { any_character_struggle = { involvement = $STATUS$ } }
# Removed the check for what struggle it is
}
is_same_faith_trigger = {
culture = $CHAR$.culture
$CHAR$ = { any_character_struggle = { involvement = $STATUS$ } }
# Removed the check for what struggle it is
}
##################################################
# Catalyst Phase Triggers
## Should a catalyst be activating in this phase?
### Remember, that means it should activate in the phase _before_ the one that has it as a valid transitionary catalyst.
##################################################
# Catalyst Triggers
## Some common rump triggers used in catalysts activation, plus preliminaries for catalysts triggered in multiple locations.
catalyst_gave_independence_to_powerful_diff_faith_culture_vassal_preliminary_trigger = {
$CHAR1$ = {
NAND = {
culture = $CHAR2$.culture
faith = $CHAR2$.faith
}
}
$CHAR2$ = { is_powerful_vassal_of = $CHAR1$ }
}
catalyst_granted_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = {
$CHAR$ = {
any_in_list = {
list = changed_obligations
vassal_contract_type = {
OR = {
this = vassal_contract:religious_rights
this = vassal_contract:jizya_special_rights
}
}
obligation_level_score >= 1
}
is_powerful_vassal = yes
}
}
catalyst_revoked_powerful_diff_faith_vassal_religious_protection_preliminary_trigger = {
$CHAR$ = {
any_in_list = {
list = changed_obligations
vassal_contract_type = {
OR = {
this = vassal_contract:religious_rights
this = vassal_contract:jizya_special_rights
}
}
obligation_level_score >= 1
}
is_powerful_vassal = yes
}
}
catalyst_hybridise_or_diverge_regional_cultures_preliminary_trigger = {
phase_has_catalyst = catalyst_hybridise_or_diverge_regional_cultures
save_temporary_scope_as = struggle_temp
OR = {
AND = {
exists = scope:parent_culture_2
scope:struggle_temp = {
is_culture_involved_in_struggle = scope:parent_culture_1
is_culture_involved_in_struggle = scope:parent_culture_2
}
}
is_culture_involved_in_struggle = scope:parent_culture_1
}
}
catalyst_very_important_child_change_culture_or_faith_preliminary_trigger = {
any_character_struggle = {
phase_has_catalyst = catalyst_very_important_child_change_culture_or_faith
}
is_adult = no
any_parent = {
any_character_struggle ={
involvement = involved
}
is_vip_struggle_character = yes
}
}
activate_struggle_catalyst_secondary_character_involvement_involved_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = involved
this = scope:struggle_temp
}
}
}
activate_struggle_catalyst_secondary_character_involvement_interloper_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = interloper
this = scope:struggle_temp
}
}
}
activate_struggle_catalyst_secondary_character_involvement_either_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = { this = scope:struggle_temp }
}
}
activate_struggle_catalyst_secondary_character_involvement_neither_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
NOT = {
any_character_struggle = { this = scope:struggle_temp }
}
}
}
activate_struggle_catalyst_secondary_character_involvement_interloper_or_uninvolved_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
OR = {
any_character_struggle = {
involvement = interloper
this = scope:struggle_temp
}
NOT = {
any_character_struggle = { this = scope:struggle_temp }
}
}
}
}
activate_struggle_catalyst_warfare_check_attacker_involvement_trigger = {
phase_has_catalyst = $CATALYST$
save_temporary_scope_as = struggle_temp
$VAR_SCOPE$ = {
trigger_if = {
limit = { scope:attacker = scope:loser }
has_variable = struggle_involvement_attacker
has_variable = struggle_scope_attacker
var:struggle_involvement_attacker = flag:$INVOLVEMENT$
var:struggle_scope_attacker = scope:struggle_temp
}
trigger_else = {
has_variable = struggle_involvement_defender
has_variable = struggle_scope_defender
var:struggle_involvement_defender = flag:$INVOLVEMENT$
var:struggle_scope_defender = scope:struggle_temp
}
}
}
##################################################
# Parameter Triggers
## If a parameter is triggered in multiple places, we use a scripted trigger to keep things unified.
is_struggle_parameter_active_interfaith_marriages_available_between_involved_characters_trigger = {
scope:actor = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = interfaith_marriages_available_between_involved_characters
save_temporary_scope_as = struggle_temp
scope:recipient = {
any_character_struggle = {
involvement = involved
this = scope:struggle_temp
}
}
}
}
}
is_struggle_parameter_active_cheaper_to_convert_to_struggle_culture_trigger = {
capital_county = {
any_county_struggle = { has_struggle_phase_parameter = cheaper_to_convert_to_struggle_culture }
}
}
is_struggle_parameter_active_secondary_character_involvement_involved_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = involved
this = scope:struggle_temp
}
}
}
is_struggle_parameter_active_secondary_character_involvement_interloper_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = {
involvement = interloper
this = scope:struggle_temp
}
}
}
is_struggle_parameter_active_secondary_character_involvement_either_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
any_character_struggle = { this = scope:struggle_temp }
}
}
is_struggle_parameter_active_secondary_character_involvement_neither_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
$CHAR$ = {
NOT = {
any_character_struggle = { this = scope:struggle_temp }
}
}
}
is_struggle_parameter_active_secondary_county_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
$COUNTY$ = {
any_county_struggle = { this = scope:struggle_temp }
}
}
is_struggle_parameter_active_variable_cb_target_secondary_county_trigger = {
has_struggle_phase_parameter = $PARAMETER$
save_temporary_scope_as = struggle_temp
any_in_list = {
list = target_titles
count >= 1
tier = tier_county
any_county_struggle = { this = scope:struggle_temp }
}
}
##################################################
# Casus Belli Triggers
## Struggle triggers related to wars & similar.
# Is the scoped war using a CB we consider important enough to be a catalyst-worthy CB within the struggle?
is_large_conquest_war_for_struggle_trigger = {
$WAR$ = {
OR = {
# Large claim wars.
AND = {
using_cb = claim_cb
any_in_list = {
list = target_titles
tier >= tier_kingdom
}
}
using_cb = duchy_conquest_cb
using_cb = individual_duchy_de_jure_cb
using_cb = imperial_reconquest_cb
using_cb = invasion_war
using_cb = clan_invasion_war
using_cb = mongol_invasion_war
using_cb = mongol_realm_invasion_war
using_cb = mpo_gok_onslaught_cb
using_cb = major_religious_war
using_cb = undirected_great_holy_war
using_cb = directed_great_holy_war
using_cb = tribal_subjugation_cb
}
}
}
# Can conquest holy wars be accessed in the current phase of the struggle?
are_holy_wars_disabled_in_struggle_phase_trigger = {
exists = scope:target
trigger_if = {
scope:target.tier = tier_county
scope:target = {
any_county_struggle = {
NOT = { has_struggle_phase_parameter = holy_wars_in_region_cannot_be_declared }
}
}
}
trigger_else = { # For Duchy and Kingdom Holy War
scope:target = {
any_in_de_facto_hierarchy = { # We only consider county within the realm of the target's holder
tier = tier_county
any_county_struggle = {
NOT = { has_struggle_phase_parameter = holy_wars_in_region_cannot_be_declared }
}
}
}
}
}
# Can the struggle conquest CB be used?
## Currently, we're generous with this. Rather than tying it to a parameter, you just need to be involved in a struggle.
## This should sync neatly with the various struggle_conquest_cb_is_XYZ_phase_triggers, but due to parameter requirements, can't easily be made to do so automagically.
can_use_struggle_cbs_trigger = {
OR = {
any_character_struggle = { involvement = involved }
# Execption if taking hostility ending
AND = {
exists = scope:attacker.house
scope:attacker.house = {
OR ={
has_house_modifier = fp2_struggle_hostility_house_combined_modifier
has_house_modifier = fp2_struggle_hostility_house_faith_modifier
has_house_modifier = fp2_struggle_hostility_house_culture_modifier
}
}
}
}
}
# These triggers govern the relative costs for the struggle conquest CB.
## These should sync neatly with can_use_struggle_cbs_trigger, but due to parameter requirements, can't easily be made to do so automagically.
## Cheap.
struggle_conquest_cb_is_warlike_phase_trigger = {
$CHAR1$ = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
is_struggle_phase = struggle_iberia_phase_hostility
is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ }
}
}
}
## Average.
struggle_conquest_cb_is_average_phase_trigger = {
$CHAR1$ = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
is_struggle_phase = struggle_iberia_phase_opportunity
is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ }
}
}
}
## Pricey.
struggle_conquest_cb_is_peaceful_phase_trigger = {
$CHAR1$ = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
OR = {
is_struggle_phase = struggle_iberia_phase_compromise
is_struggle_phase = struggle_iberia_phase_conciliation
}
is_secondary_character_involvement_either_trigger = { CHAR = $CHAR2$ }
}
}
}
# Work out whether we need to vassalise someone vs. taking some of their stuff.
struggle_conquest_cb_target_is_ocm_trigger = {
any_in_list = {
list = target_titles
# Should only ever be one title, but just in case...
count = all
holder = {
any_held_title = {
count = 1
tier = tier_county
}
NOT = {
any_vassal = { highest_held_title_tier >= tier_county }
}
}
}
}
struggle_blocks_invasion_conquest_cb_trigger = {
trigger_if = {
limit = {
scope:attacker = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared
}
}
exists = scope:defender
}
scope:defender = {
NOR = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared
}
any_character_struggle = {
involvement = interloper
has_struggle_phase_parameter = invasion_conquest_war_cannot_be_declared
}
}
}
}
trigger_else = { always = yes }
}

View file

@ -0,0 +1,70 @@

should_apply_tribal_development_penalty_trigger = {
government_has_flag = government_is_tribal
NOR = {
any_liege_or_above = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
}
any_vassal_or_below = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
}
any_neighboring_top_liege_realm_owner = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
tier_difference = {
target = prev
value < -1
}
}
scope:county ?= {
holder ?= {
any_neighboring_realm_same_rank_owner = {
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
}
}
}
}
}
faith_qualifies_for_west_african_pagan_feudalisation_trigger = {
faith = {
# Unreformed West African Pagans are our targets.
OR = {
religion = religion:akom_religion
religion = religion:west_african_religion
religion = religion:west_african_bori_religion
religion = religion:west_african_orisha_religion
religion = religion:west_african_roog_religion
}
custom_tooltip = {
text = faith_qualifies_for_west_african_pagan_feudalisation_trigger.tt
has_doctrine_parameter = unreformed
}
}
}
should_use_temple_character_background_trigger = {
trigger_if = {
limit = { is_landed = yes }
government_has_flag = government_is_theocracy
}
trigger_else = {
OR = {
has_trait = order_member
has_council_position = councillor_court_chaplain
government_has_flag = government_is_theocracy
is_clergy = yes
}
}
}

View file

@ -0,0 +1,134 @@

suitable_theocrat_sponsor_trigger = {
faith = scope:the_faith
is_capable_adult_ai = yes
is_imprisoned = no
}
suitable_faith_for_undirected_ghw_trigger = {
OR = {
has_doctrine_parameter = great_holy_wars_active
AND = {
has_doctrine_parameter = great_holy_wars_active_if_reformed
NOT = { has_doctrine_parameter = unreformed }
}
has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti
}
has_doctrine = doctrine_spiritual_head
NOR = {
has_doctrine_parameter = unreformed
AND = {
has_doctrine = tenet_dharmic_pacifism
NOT = { has_doctrine = divine_destiny_doctrine }
}
has_doctrine = tenet_pacifism
}
fervor >= 75
save_temporary_scope_value_as = {
name = faith_strength
value = faith_military_strength
}
save_temporary_scope_as = faith
any_kingdom = {
valid_ghw_target_trigger = { FAITH = scope:faith }
}
}
suitable_faith_for_directed_ghw_trigger = {
OR = {
has_doctrine = tenet_armed_pilgrimages #Catholics
has_doctrine = tenet_struggle_submission #Islam (though, the default Faiths have Temporal Heads, so still do not qualify)
has_doctrine = tenet_warmonger #Germanic (though, starting as Unreformed, it still doesn't qualify by default)
has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti
}
has_doctrine = doctrine_temporal_head
NOR = {
has_doctrine_parameter = unreformed
AND = {
has_doctrine = tenet_dharmic_pacifism
NOT = { has_doctrine = divine_destiny_doctrine }
}
has_doctrine = tenet_pacifism
}
fervor >= 75
}
suitable_faith_for_any_ghw_trigger = {
OR = {
has_doctrine = tenet_armed_pilgrimages #Catholics
has_doctrine = tenet_struggle_submission #Islam (though, the default Faiths have Temporal Heads, so still do not qualify)
has_doctrine = tenet_warmonger #Germanic (though, starting as Unreformed, it still doesn't qualify by default)
has_doctrine = divine_destiny_doctrine #SPECIAL: Has become the Chakravarti
}
OR = {
has_doctrine = doctrine_temporal_head
has_doctrine = doctrine_spiritual_head
}
NOR = {
has_doctrine_parameter = unreformed
AND = {
has_doctrine = tenet_dharmic_pacifism
NOT = { has_doctrine = divine_destiny_doctrine }
}
has_doctrine = tenet_pacifism
}
fervor >= 65
}
valid_ghw_target_trigger = {
exists = capital_vassal.capital_vassal
any_in_de_jure_hierarchy = {
continue = { tier > tier_county }
tier = tier_county
count >= 5
$FAITH$ = {
is_hostile_enough_for_holy_war_trigger = { FAITH = prev.holder.top_liege.faith }
}
}
NOT = {
any_in_de_jure_hierarchy = {
continue = { tier > tier_county }
tier = tier_county
$FAITH$ = {
is_hostile_enough_for_holy_war_trigger = { FAITH = prev.holder.top_liege.faith }
prev.holder.top_liege.current_military_strength > { value = scope:faith_strength }
}
}
}
}
#The Pope is getting annoyed that player hasn't joined or contributed to the Crusade yet.
ghw_pope_annoyed_at_lack_of_participation_trigger = {
faith = scope:the_faith
NOR = {
this = scope:the_faith.great_holy_war.ghw_war_declarer
has_character_flag = ghw_unpledging_cooldown
#Has not already unpledged and been castigated for it once.
has_character_flag = ghw_unpledged_once
#Has not already pledged troops or money.
has_character_flag = ghw_pledged_gold
scope:the_faith.great_holy_war = { has_pledged_attacker = prev }
#Do not pledge against your own liege, or when your top liege belongs to the faith being targeted.
any_liege_or_above = {
this = scope:the_faith.great_holy_war.ghw_target_character
}
}
OR = { #Either be independent, or all lieges above you MUST be of the same Faith declaring the war to avoid messy situations of vassals and lieges fighting against each other.
is_independent_ruler = yes
NOT = {
any_liege_or_above = {
NOT = { faith = scope:the_faith }
}
}
}
}
ghw_pope_annoyed_at_lack_of_participation_tier_trigger = { #Either King/Emperor, or Independent Dukes.
OR = {
highest_held_title_tier > 3
AND = {
is_independent_ruler = yes
highest_held_title_tier >= tier_duchy
is_landless_adventurer = no
}
}
}

View file

@ -0,0 +1,89 @@
##################################################
# Chapter Bonus Triggers
has_sp4_dlc_trigger = {
has_dlc_feature = crowns_of_the_world
}
##################################################
# Creator content Triggers
has_afr_dlc_trigger = {
has_dlc_feature = north_african_attire
}
has_pol_dlc_trigger = {
has_dlc_feature = west_slavic_attire
}
has_cp3_dlc_trigger = {
has_dlc_feature = medieval_monuments
}
has_cp4_dlc_trigger = {
has_dlc_feature = arctic_attire
}
##################################################
# Booster Pack Triggers
has_bp1_dlc_trigger = {
has_dlc_feature = friends_and_foes
}
has_bp2_dlc_trigger = {
has_dlc_feature = wards_and_wardens
}
has_bp3_dlc_trigger = {
has_dlc_feature = wandering_nobles
}
##################################################
# Flavour Pack Triggers
has_fp1_dlc_trigger = {
# Does the host have the appropriate DLC?
has_dlc_feature = the_northern_lords
}
has_fp2_dlc_trigger = {
# Does the host have the appropriate DLC?
has_dlc_feature = the_fate_of_iberia
}
has_fp3_dlc_trigger = {
# Does the host have the appropriate DLC?
has_dlc_feature = legacy_of_persia
}
has_ce1_dlc_trigger = {
# Does the host have the appropriate DLC?
has_dlc_feature = legends_of_the_dead
}
has_mpo_dlc_trigger = {
# Does the host have the appropriate DLC?
has_dlc_feature = khans_of_the_steppe
}
##################################################
# Expansion Pack Triggers
has_ep1_dlc_trigger = {
has_dlc_feature = royal_court
}
has_ep1_court_positions_dlc_trigger = {
has_dlc_feature = royal_court
}
has_ep2_dlc_trigger = {
has_dlc_feature = tours_and_tournaments
}
has_ep3_dlc_trigger = {
has_dlc_feature = roads_to_power
}
has_playable_adventurer_dlc_trigger = {
has_dlc_feature = roads_to_power
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,619 @@
should_use_tribal_realm_palace_graphics_trigger = {
government_has_flag = government_is_tribal
culture = {
has_graphical_india_culture_group_trigger = no
has_graphical_mena_culture_group_trigger = no
has_graphical_steppe_culture_group_trigger = no
has_graphical_african_culture_group_trigger = no
}
}
has_graphical_mena_culture_group_trigger = {
has_building_gfx = mena_building_gfx
}
has_graphical_india_culture_group_trigger = {
has_building_gfx = indian_building_gfx
}
has_graphical_mediterranean_culture_group_trigger = {
OR = {
has_building_gfx = mediterranean_building_gfx
has_building_gfx = byzantine_building_gfx
}
}
has_graphical_western_culture_group_trigger = {
has_building_gfx = western_building_gfx
}
has_graphical_norse_culture_group_trigger = {
has_building_gfx = norse_building_gfx
}
has_graphical_african_culture_group_trigger = {
has_building_gfx = african_building_gfx
}
has_graphical_steppe_culture_group_trigger = {
has_building_gfx = steppe_building_gfx
}
has_graphical_iberian_culture_group_trigger = {
has_building_gfx = iberian_building_gfx
}
has_graphical_iranian_culture_group_trigger = {
has_building_gfx = iranian_building_gfx
}
graphical_wilderness_desert_trigger = {
OR = {
terrain = desert
terrain = desert_mountains
terrain = oasis
AND = {
terrain = hills
OR = {
geographical_region = world_africa
geographical_region = world_middle_east_arabia
}
}
}
}
graphical_wilderness_forest_pine_trigger = {
OR = {
terrain = taiga
AND = {
terrain = forest
OR = {
geographical_region = world_europe_north
geographical_region = world_steppe
}
}
}
}
graphical_wilderness_forest_trigger = {
OR = {
terrain = forest
terrain = farmlands
}
}
graphical_wilderness_mountains_trigger = {
terrain = mountains
}
graphical_wilderness_steppe_trigger = {
OR = {
terrain = steppe
AND = {
terrain = hills
OR = {
geographical_region = world_steppe
geographical_region = world_middle_east_persia
geographical_region = world_middle_east_jerusalem
}
}
}
}
graphical_drylands_trigger = {
terrain = drylands
}
graphical_wilderness_wetlands_trigger = {
OR = {
terrain = wetlands
terrain = floodplains
}
}
graphical_wilderness_jungle_trigger = {
OR = {
terrain = jungle
AND = {
terrain = hills
geographical_region = graphical_india
NOT = { geographical_region = world_tibet }
}
}
}
graphical_plains_trigger = {
terrain = plains
}
graphical_wilderness_ocean_trigger = {
is_sea_province = yes
}
graphical_hills_trigger = {
terrain = hills
}
### Scripted illustrations
# This doesn't really evaluate anything, it just saves the scope out for later things to use
title_illustration_save_province_temporary = {
trigger_if = {
limit = { tier = tier_barony }
title_province = {
save_temporary_scope_as = province
}
}
trigger_else_if = {
limit = {
tier > tier_county
NOT = {
any_in_de_jure_hierarchy = { tier = tier_county }
}
}
}
trigger_else = {
title_capital_county.title_province = {
save_temporary_scope_as = province
}
}
always = yes
}
#has_indian_culture_trigger = {
has_graphical_india_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
geographical_region = graphical_india
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
geographical_region = graphical_india
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
geographical_region = graphical_india
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
geographical_region = graphical_india
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
#has_mediterranean_culture_trigger = {
has_graphical_mediterranean_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
geographical_region = graphical_mediterranean
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
geographical_region = graphical_mediterranean
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
geographical_region = graphical_mediterranean
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
geographical_region = graphical_mediterranean
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
#has_mena_culture_trigger = {
has_graphical_mena_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
OR = {
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
AND = {
prev = {
government_has_flag = government_is_clan
}
OR = {
geographical_region = world_steppe_west
geographical_region = world_siberia
}
}
}
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
OR = {
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
AND = {
province_owner = {
government_has_flag = government_is_clan
}
OR = {
geographical_region = world_steppe_west
geographical_region = world_siberia
}
}
}
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
OR = {
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
AND = {
province_owner = {
government_has_flag = government_is_clan
}
OR = {
geographical_region = world_steppe_west
geographical_region = world_siberia
}
}
}
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
OR = {
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
AND = {
province_owner = {
government_has_flag = government_is_clan
}
OR = {
geographical_region = world_steppe_west
geographical_region = world_siberia
}
}
}
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
has_graphical_scandinavia_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
geographical_region = world_europe_north
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
geographical_region = world_europe_north
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
geographical_region = world_europe_north
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
geographical_region = world_europe_north
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
#has_western_culture_trigger = {
has_graphical_western_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
NOR = {
geographical_region = graphical_india
geographical_region = graphical_mediterranean
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
NOR = {
geographical_region = graphical_india
geographical_region = graphical_mediterranean
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
NOR = {
geographical_region = graphical_india
geographical_region = graphical_mediterranean
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
NOR = {
geographical_region = graphical_india
geographical_region = graphical_mediterranean
geographical_region = graphical_mena
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
#Has graphical region Iberia trigger
has_graphical_iberia_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
geographical_region = world_europe_west_iberia
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
geographical_region = world_europe_west_iberia
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
geographical_region = world_europe_west_iberia
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
geographical_region = world_europe_west_iberia
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
#Has graphical region Iran trigger
has_graphical_iran_region_trigger = {
trigger_if = {
limit = {
exists = capital_province
}
capital_province = {
OR = {
geographical_region = world_middle_east_persia
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
NOT = { exists = capital_province }
}
trigger_if = {
limit = { exists = host.capital_province }
host.capital_province = {
OR = {
geographical_region = world_middle_east_persia
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
exists = liege.capital_province
}
liege.capital_province = {
OR = {
geographical_region = world_middle_east_persia
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else_if = {
limit = {
exists = location.province_owner.capital_province
}
location.province_owner.capital_province = {
OR = {
geographical_region = world_middle_east_persia
geographical_region = world_steppe_tarim
geographical_region = world_steppe_central
geographical_region = world_steppe_east
}
}
}
trigger_else = { always = yes }
}
trigger_else = { always = yes }
}
steppe_building_gfx_use_mena_trigger = {
AND = {
culture = { has_building_gfx = steppe_building_gfx }
OR = {
#western steppe should only be mena if you are clan
NOR = {
geographical_region = world_steppe_west
geographical_region = world_europe
geographical_region = world_asia_minor
geographical_region = world_india
geographical_region = world_burma
geographical_region = world_tibet
}
AND = {
faith.religion = religion:islam_religion
OR = {
geographical_region = world_steppe_west
geographical_region = world_asia_minor
}
}
}
}
}
steppe_building_gfx_use_indian_trigger = {
AND = {
culture = { has_building_gfx = steppe_building_gfx }
OR = {
#western steppe should only be mena if you are clan
geographical_region = world_india
geographical_region = world_burma
geographical_region = world_tibet
}
}
}
steppe_building_gfx_use_mediterranean_trigger = {
AND = {
culture = { has_building_gfx = steppe_building_gfx }
OR = {
geographical_region = world_europe_south_east
geographical_region = world_europe_south_italy
geographical_region = world_europe_west_iberia
geographical_region = world_asia_minor
}
}
}
steppe_building_gfx_use_iranian_trigger = {
AND = {
OR = {
geographical_region = world_steppe_east
geographical_region = world_steppe_central
geographical_region = world_middle_east_persia
}
culture = { has_building_gfx = steppe_building_gfx }
}
}
steppe_building_gfx_use_western_trigger = {
AND = {
OR = {
geographical_region = world_europe_north
geographical_region = world_europe_west
}
culture = { has_building_gfx = steppe_building_gfx }
}
}

View file

@ -120,7 +120,7 @@ diarch_revocation_has_claim_check_trigger = {
}
title_revocation_is_admin_governor_trigger = {
has_government = administrative_government
government_has_flag = government_is_administrative
is_independent_ruler = yes
save_temporary_scope_as = liege_temp
$VASSAL$ = {
@ -166,9 +166,9 @@ vassal_revocation_is_tyrannical_trigger = {
NOR = {
exists = scope:administrative_revocation
AND = {
has_government = administrative_government
government_has_flag = government_is_administrative
$VASSAL$ = {
has_government = administrative_government
government_has_flag = government_is_administrative
}
}
has_revoke_title_reason = $VASSAL$

View file

@ -0,0 +1,112 @@
journey_diplomacy_skill_monument_trigger = {
OR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_religious
NOR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_economic
has_building_with_flag = travel_point_of_interest_martial_minor
}
}
}
journey_martial_skill_monument_trigger = {
OR = {
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_martial_minor
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_learning
NOR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_economic
has_building_with_flag = travel_point_of_interest_martial_minor
}
}
}
journey_learning_skill_monument_trigger = {
OR = {
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
NOR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_economic
has_building_with_flag = travel_point_of_interest_martial_minor
}
}
}
journey_stewardship_skill_monument_trigger = {
OR = {
has_building_with_flag = travel_point_of_interest_economic
NOR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_economic
has_building_with_flag = travel_point_of_interest_martial_minor
}
}
}
journey_intrigue_skill_monument_trigger = {
OR = {
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_martial_minor
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_economic
NOR = {
has_building_with_flag = travel_point_of_interest_wonder
has_building_with_flag = travel_point_of_interest_diplomatic
has_building_with_flag = travel_point_of_interest_natural_feature
has_building_with_flag = travel_point_of_interest_martial
has_building_with_flag = travel_point_of_interest_religious
has_building_with_flag = travel_point_of_interest_learning
has_building_with_flag = travel_point_of_interest_economic
has_building_with_flag = travel_point_of_interest_martial_minor
}
}
}
inspired_journey_trigger = {
scope:host = {
NAND = {
has_variable_list = extra_journey_target
is_target_in_variable_list = {
name = extra_journey_target
target = root
}
}
}
}
inspired_journey_value_trigger = {
has_variable_list = extra_journey_target
is_target_in_variable_list = {
name = extra_journey_target
target = scope:province
}
}

View file

@ -0,0 +1,935 @@
##################################################
# Landless Adventurer Camp Scripted Triggers
##################################################
##################################################
# Interaction Triggers
maa_regiments_valid_for_cheap_reinforcement_trigger = {
maa_current_troops_count < maa_max_troops_count
NOR = {
is_unit_type = heavy_cavalry
is_unit_type = camel_cavalry
maa_regiments_cost_more_to_reinforce_per_soldier_trigger = yes
}
}
maa_regiments_cost_more_to_reinforce_per_soldier_trigger = {
regiment_owner = { government_has_flag = government_is_landless_adventurer }
OR = {
is_unit_type = elephant_cavalry
is_unit_type = siege_weapon
}
}
maa_regiments_valid_to_refill_trigger = {
maa_current_troops_count < maa_max_troops_count
trigger_if = {
limit = {
scope:actor = { government_has_flag = government_is_landless_adventurer }
is_unit_type = elephant_cavalry
}
scope:actor.domicile ?= { has_domicile_parameter = camp_reinforce_elephant_regiments_anywhere }
}
}
any_laamp_portion_at_sea_trigger = {
OR = {
current_travel_plan ?= {
is_travel_with_domicile = yes
current_location = {
OR = {
is_sea_province = yes
is_river_province = yes
}
}
}
any_army = {
location = {
OR = {
is_sea_province = yes
is_river_province = yes
}
}
}
}
}
character_is_valid_for_harrying_of_the_north_trigger = {
title:k_england.holder ?= { owns_story_of_type = story_cycle_harrying_of_the_north }
trigger_if = {
limit = { is_ruler = yes }
OR = {
this = title:k_england.holder
any_liege_or_above = { this = title:k_england.holder }
}
}
trigger_else = {
domicile ?= {
domicile_location = {
county ?= {
holder = {
OR = {
this = title:k_england.holder
any_liege_or_above = { this = title:k_england.holder }
}
}
}
}
}
}
OR = {
character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = yes
character_is_valid_norman_for_harrying_of_the_north_trigger = yes
}
}
character_is_valid_anglo_saxon_for_harrying_of_the_north_trigger = {
culture = {
OR = {
this = culture:anglo_saxon
any_parent_culture_or_above = { this = culture:anglo_saxon }
}
NOR = {
this = culture:norman
any_parent_culture_or_above = { this = culture:norman }
}
}
}
character_is_valid_norman_for_harrying_of_the_north_trigger = {
culture = {
OR = {
this = culture:norman
any_parent_culture_or_above = { this = culture:norman }
}
NOR = {
this = culture:anglo_saxon
any_parent_culture_or_above = { this = culture:anglo_saxon }
}
}
}
disable_interaction_for_hereward_trigger = {
trigger_if = {
limit = { scope:recipient = character:90028 }
custom_tooltip = {
text = owns_a_story_trigger
scope:actor = {
NOR = {
owns_story_of_type = story_cycle_harrying_of_the_north
any_liege_or_above = { owns_story_of_type = story_cycle_harrying_of_the_north }
}
}
}
}
}
disable_interaction_for_hasan_trigger = {
trigger_if = {
limit = { scope:recipient = character:41702 }
custom_tooltip = {
text = owns_a_story_trigger
scope:recipient = { owns_story_of_type = story_hasan }
}
}
}
laamp_request_likely_marriable_woman_trigger = {
is_female = yes
is_adult = yes
can_marry_trigger = yes
}
laamp_request_likely_marriable_man_trigger = {
is_male = yes
is_adult = yes
can_marry_trigger = yes
}
##################################################
# Transition Triggers
is_valid_for_laampdom = {
custom_tooltip = {
text = adventurer_not_nf_head_trigger_tt
NOT = {
any_held_title = { is_noble_family_title = yes }
}
}
save_temporary_scope_as = potential_laamp_temp
is_landless_ruler = no # Admin gov vassals should not become laamps
trigger_if = {
limit = { is_ai = yes }
trigger_if = {
limit = {
NOT = { exists = scope:allow_imprisoned_landless }
}
is_imprisoned = no # Must be free
}
is_adult = yes # Old enough to venture forth
age < 60 # Young enough to venture forth
health >= fine_health # Healthy enough to venture forth
OR = {
highest_skill_value >= decent_skill_rating
prowess >= decent_skill_rating
}
# Can't be completely unwilling to go outside.
OR = {
ai_boldness >= low_negative_ai_value
ai_energy >= low_negative_ai_value
}
NOR = {
has_trait = content # Too chill to adventure
has_trait = craven # Too scared to adventure
has_trait = lazy # Too lazy to adventure
}
# Block admin members of noble families
NOT = {
house ?= {
any_house_member = {
any_held_title = { is_noble_family_title = yes }
}
}
}
}
}
ep3_laamp_interesting_enough_to_be_a_laamp_trigger = {
OR = {
has_trait_rank = { # Prettier
trait = beauty_good
character > $COMPARISON$
}
has_trait_rank = { # Cleverer
trait = intellect_good
character > $COMPARISON$
}
has_trait_rank = { # Dencher
trait = physique_good
character > $COMPARISON$
}
AND = { # Strong people are just more interesting
has_trait = strong
NOT = {
$COMPARISON$ = { has_trait = strong }
}
}
sum_of_all_skills_value > $COMPARISON$.sum_of_all_skills_value # Skillful people are interesting
prowess >= high_skill_rating # Good fighters are interesting
prestige_level > $COMPARISON$.prestige_level # Famous people are interesting
piety_level > $COMPARISON$.piety_level # Religious people are interesting
AND = { # People with nicknames are just more interesting
has_any_nickname = yes
$COMPARISON$ = { has_any_nickname = no }
}
has_character_modifier = bp2_tool_of_fate_modifier # Destiny's child is interesting
has_trait = reincarnation # Reincarnies are interesting
has_trait = immortal
is_twin_of = $COMPARISON$ # Twins are interesting
}
}
playable_relative_trigger = {
is_playable_character = yes
is_ai = yes
house = root.house
}
ep3_laamp_interesting_sibling_trigger = {
is_ai = yes # Not already played
is_landed = no # Landless enough to venture forth
NOT = {
any_consort = {
is_ruler = yes
}
}
is_playable_character = no # Not already playable
is_valid_for_laampdom = yes # Age, health, personality
ep3_laamp_interesting_enough_to_be_a_laamp_trigger = { COMPARISON = $COMPARISON$ }
}
ep3_purchase_land_valid_county_trigger = {
holder.top_liege = scope:recipient
NOR = {
scope:recipient.capital_county ?= this
scope:recipient.primary_title ?= this
}
}
ep3_negotiate_settlement_valid_county_trigger = {
OR = {
holder = scope:actor
trigger_if = {
limit = {
scope:actor = { government_has_flag = government_is_administrative }
}
holder = { target_is_liege_or_above = scope:actor }
}
}
NOR = {
holder.capital_county ?= this
holder.primary_title ?= this
}
}
ep3_adventurer_invasion_allowed_for_character_trigger = {
has_ep3_dlc_trigger = yes
government_has_flag = government_is_landless_adventurer
is_landed = no
}
ep3_adventurer_invasion_allowed_for_character_display_regardless_trigger = {
has_ep3_dlc_trigger = yes
is_at_war = no
}
ep3_adventurer_landless_allowed_against_character_trigger = {
is_landed = yes
# Players vs. AI filtering.
OR = {
# Can always target the AI.
is_ai = yes
# Cannot target a player unless they completely control at least two duchies.
any_sub_realm_duchy = {
count >= 2
save_temporary_scope_as = player_controlled_duchy
# Custom description to suppress errors.
custom_description = {
text = SUPPRESS
scope:defender = { completely_controls = scope:player_controlled_duchy }
}
}
}
# Scope:defender cannot be liege of attacker.
scope:defender = {
NOT = { this = scope:attacker.liege }
}
}
ep3_adventurer_invasion_sponsorship_applies_trigger = {
var:adventurer_invasion_supporter ?= { ep3_adventurer_sponsorship_valid_trigger = yes }
var:adventurer_invasion_target ?= scope:defender
}
ep3_adventurer_landless_should_invalidate_trigger = {
OR = {
NOT = {
any_in_list = {
list = target_titles
any_in_de_jure_hierarchy = {
tier = tier_county
holder = {
target_is_same_character_or_above = scope:defender
}
}
}
}
scope:attacker = { is_landed = yes }
}
}
ep3_adventurer_sponsorship_valid_trigger = {
scope:attacker.var:adventurer_invasion_supporter ?= {
var:adventurer_invasion_target ?= scope:defender
NOR = {
this = scope:defender
top_liege = scope:defender.top_liege
is_allied_to = scope:defender
is_spouse_of = scope:defender
AND = {
is_close_family_of = scope:defender
opinion = {
target = scope:defender
value >= -25
}
}
has_relation_friend = scope:defender
has_relation_lover = scope:defender
any_character_war = {
primary_attacker = scope:attacker.var:adventurer_invasion_supporter
primary_defender = scope:defender
}
}
in_diplomatic_range = scope:defender
}
}
##################################################
# Contract Triggers
# Can this employer ever offer this contract?
## This is basically an is_valid_showing_failures_only, so we deliberately break out into lots of unnecessarily small sections for nicer tooltipping.
valid_laamp_basic_trigger = {
custom_description = {
text = adventurer_not_famous_or_patron_trigger_tt
object = $EMPLOYER$
value = $EMPLOYER$.highest_held_title_tier
OR = {
$EMPLOYER$.highest_held_title_tier <= tier_county
AND = {
$EMPLOYER$.highest_held_title_tier <= tier_duchy
$EMPLOYER$ = { government_has_flag = government_is_nomadic }
}
$EMPLOYER$.highest_held_title_tier <= $LAAMP$.prestige_level
$EMPLOYER$ = { is_contact_of = $LAAMP$ }
}
}
$EMPLOYER$ = {
# Players shouldn't get tangled up in contracts, ever.
is_ai = yes
# Plus some standard stuff.
is_alive = yes
is_adult = yes
NOT = { government_has_flag = government_is_herder }
}
$EMPLOYER$ = { is_incapable = no }
# Laamps shouldn't offer contracts in their local area, ever.
$EMPLOYER$ = {
OR = {
employer = $LAAMP$
NOT = { government_has_flag = government_is_landless_adventurer }
}
}
# Don't offer to work with those who've wronged us.
## No one we're at war with.
$EMPLOYER$ = {
NOT = { is_at_war_with = $LAAMP$ }
}
## Rivals are cheap to avoid.
$EMPLOYER$ = {
NOT = { has_relation_rival = $LAAMP$ }
}
## Expulsion
$EMPLOYER$ = {
custom_tooltip = {
text = adventurer_expelled_trigger_tt
NOR = {
reverse_has_opinion_modifier = {
target = $LAAMP$
modifier = demanded_eviction_opinion
}
any_liege_or_above = {
reverse_has_opinion_modifier = {
target = $LAAMP$
modifier = demanded_eviction_opinion
}
}
}
}
}
$LAAMP$ = { government_has_flag = government_is_landless_adventurer }
$LAAMP$ = {
trigger_if = {
limit = { is_at_war = no }
is_commanding_army = no
}
}
# If we're looking at the player, make sure there's no uhh... weird legacies between us.
$LAAMP$ = {
trigger_if = {
limit = { is_ai = no }
NOR = {
has_any_major_negative_opinion_against_character_trigger = { CHARACTER = $EMPLOYER$ }
$EMPLOYER$ = {
has_any_major_negative_opinion_against_character_trigger = { CHARACTER = $LAAMP$ }
}
}
}
}
}
# triggers that prevent you from only accepting the contract
valid_laamp_basic_accept_only_trigger = {
is_imprisoned = no
}
# Should this employer be putting this out for tender?
## Naturally, if they're being becrimed, we don't care about this.
employer_has_treasury_to_offer_job_trigger = {
trigger_if = {
limit = { is_ai = no }
scope:employer.gold >= 50
}
}
# Does it make sense that this employer offers this contract to start with?
## So we don't penalise you if their circumstances change beyond your control, but _also_ so that there aren't local job listings going up in Middlesex for someone currently pilgrimaging in Jerusalem.
valid_laamp_sensible_start_trigger = {
scope:employer = {
is_travelling = no
is_in_army = no
is_imprisoned = no
}
trigger_if = {
limit = {
any_character_task_contract = {
count >= 1
task_contract_employer = scope:employer
}
}
always = no
}
}
# Prevent inappropriate characters, like the Byzantine Emperor or the Sunni Caliph, from giving contracts that'd seem beneath them.
## This isn't a comment on whether they _would_ (or even did) put out such things, more just trying to preserve verisimilitude.
rule_out_dramatic_laamp_employers_trigger = {
scope:employer = {
NOR = {
faith.religious_head ?= this
highest_held_title_tier >= tier_empire
}
}
}
# We do not spawn contracts in the Sahara without the right CulTrad.
lock_contracts_from_spawning_in_sahara_trigger = {
OR = {
NOT = {
location = { geographical_region = custom_sahara_proper }
}
culture = { has_cultural_tradition = tradition_saharan_nomads }
}
}
# How far do we have to travel (or to where) before we start spawning more contracts to play with?
player_adventurer_sufficient_distance_for_contract_spawn_trigger = {
is_ai = no
save_temporary_scope_as = char_temp
OR = {
# Either we've moved to a neighbouring kingdom that we've not been to recently.
AND = {
location.kingdom = { save_temporary_scope_as = kingdom_temp }
NOT = {
is_target_in_variable_list = {
name = laamp_recently_visited_kingdoms
target = scope:kingdom_temp
}
}
}
# Or we've travelled some distance.
trigger_if = {
limit = { exists = scope:char_temp.current_travel_plan }
"location.squared_distance(scope:char_temp.current_travel_plan.departure_location)" >= squared_distance_medium
}
}
}
# Would this employer have some trait that means they don't want to see/don't trust strangers?
laamp_task_contract_employer_not_antisocial_trigger = {
scope:employer = {
NOR = {
has_trait = shy
has_trait = paranoid
has_trait = cynical
}
}
}
# Would this employer have someone executed or hurt without (what passes for in-period as) a fair trial?
laamp_task_contract_employer_would_resort_to_violence_trigger = {
scope:employer = {
NOT = { has_trait = compassionate }
}
}
# Would this employer happily tell a lie or manipulate someone if they at least had a good reason?
laamp_task_contract_employer_would_resort_to_deceit_trigger = {
scope:employer = {
NOT = { has_trait = honest }
}
}
# Would this employer go grubbing for money they're owed?
laamp_task_contract_employer_would_chase_money_trigger = {
scope:employer = {
NOR = {
has_trait = generous
has_trait = improvident
# Compassionates avoid this unless they're also greedy.
AND = {
has_trait = compassionate
NOT = { has_trait = greedy }
}
}
}
}
# Check to see if it's appropriate to apply a county modifier — basically, don't let barons putting out contracts apply modifiers to players.
contract_employer_can_apply_county_modifier_trigger = {
OR = {
highest_held_title_tier >= tier_county
liege = { is_ai = yes }
}
}
# Could this potential rival be removed without unexpectedly affecting a player?
laamp_base_0011_valid_potential_rival_trigger = {
# Exempt players.
NOT = {
this = { is_ai = no }
}
}
# Search for counties that could be affected by the modifiers we apply at the conclusion of the contract.
laamp_base_1001_valid_neighbouring_county_trigger = {
holder = root.task_contract_employer
county_control < full_county_control
}
laamp_base_2001_valid_mayor_trigger = {
highest_held_title_tier = tier_barony
government_has_flag = government_is_special_republic
NOT = { is_close_or_extended_family_of = scope:employer }
}
laamp_base_3001_valid_neighbours_trigger = {
NOR = {
# Don't collect intelligence on people we trust.
has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $EMPLOYER$ }
is_allied_to = $EMPLOYER$
# Or on people we're currently at war with — it's a little late for court whispers.
is_at_war_with = $EMPLOYER$
}
is_adult = yes
is_incapable = no
is_imprisoned = no
}
# used in task contracts triggered from council tasks to check if employer and their liege or councillor are valid to issue a contract for you
# COUNCILLOR_TYPE = councillor type name
# COUNCIL_TASK_TYPE = council task type name
council_task_contract_valid_employer_trigger = {
trigger_if = {
limit = {
NOT = { exists = scope:laamp }
}
save_temporary_scope_as = laamp
}
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer
LAAMP = scope:laamp
}
custom_tooltip = {
text = councillor_leaving_court_message_title
scope:employer = {
OR = {
AND = {
cp:$COUNCILLOR_TYPE$ ?= {
is_performing_council_task = $COUNCIL_TASK_TYPE$
}
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer.cp:$COUNCILLOR_TYPE$
LAAMP = scope:laamp
}
}
AND = {
is_performing_council_task = $COUNCIL_TASK_TYPE$
valid_laamp_basic_trigger = {
EMPLOYER = scope:employer.liege
LAAMP = scope:laamp
}
}
}
}
}
}
##################################################
# Travel Triggers
is_laamp_exiled_from_province_trigger = {
$PROVINCE$.county.holder = {
is_laamp_exiled_from_holder_or_liege_trigger = { LAAMP = $LAAMP$ }
}
}
is_laamp_exiled_from_holder_or_liege_trigger = {
OR = {
AND = {
save_temporary_scope_as = char_temp
$LAAMP$ = {
has_opinion_modifier = {
target = scope:char_temp
modifier = demanded_eviction_opinion
}
}
}
AND = {
any_liege_or_above = {
save_temporary_scope_as = char_temp
$LAAMP$ = {
has_opinion_modifier = {
target = scope:char_temp
modifier = demanded_eviction_opinion
}
}
}
}
}
}
##################################################
# Event Triggers
# Do we want this character to occur in events around camp more frequently?
is_valid_active_event_recurrer_trigger = {
is_ai = yes
is_courtier_of = $LIEGE$
is_healthy = yes
OR = {
has_any_court_position = yes
is_close_or_extended_family_of = $LIEGE$
is_consort_of = $LIEGE$
has_important_relationship_with_character_trigger = { CHARACTER = $LIEGE$ }
}
}
valid_laamp_contract_foe_trigger = {
# Make sure they're at home if possible.
NOR = {
is_travelling = yes
is_commanding_army = yes
is_imprisoned = no
}
# Good sensible restrictions on mutual relationships.
OR = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:employer_ref }
# Ensure a bit of mild dislike.
reverse_opinion = {
target = scope:employer_ref
value <= -25
}
opinion = {
target = scope:employer_ref
value <= -25
}
}
NOR = {
# Filter out anything that might look odd.
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:employer_ref }
# Plus don't include anything connected to a player.
save_temporary_scope_as = char_temp
any_player = {
OR = {
this = scope:char_temp
is_close_or_extended_family_of = scope:char_temp
is_consort_of = scope:char_temp
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp }
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp }
}
}
}
# And check their location is valid.
location = {
# Which means making sure that they're not located too far away from our contractor.
"squared_distance(root.task_contract_taker.location)" <= squared_distance_large
# And that they're not located in the exact same province, else travel logic'll break.
NOT = { this = scope:employer_ref.location }
}
}
has_any_landed_title_trigger = {
any_held_title = {
NOR = {
is_noble_family_title = yes
is_landless_type_title = yes
has_variable = adventurer_creation_reason
}
}
}
# Toggle on tally logging for laamp events, so we can see how often they're firing for a single run test.
enable_debug_laamp_event_logging_toggle_trigger = { always = no }
# Can the AI create a new laamp without threatening performance?
## Beware of expanding this past the soft-cap figure of around ~200: code estimations were made with this number in mind, so the more we let slip the net, the more they'll start to degrade performance.
### YOU HAVE BEEN WARNED.
ai_can_valid_to_create_laamp_trigger = {
save_temporary_scope_as = char_temp
OR = {
# General checking.
NOT = { has_global_variable_list = laamps_tally }
global_variable_list_size = {
name = laamps_tally
value < max_desired_laamps_value
}
# Player-relevant.
any_player = {
OR = {
is_close_or_extended_family_of = scope:char_temp
is_consort_of = scope:char_temp
has_important_relationship_with_character_trigger = { CHARACTER = scope:char_temp }
is_allied_in_war = scope:char_temp
is_allied_to = scope:char_temp
is_at_war_with = scope:char_temp
}
}
# Encourage legitimists.
AND = {
any_claim = { tier >= tier_kingdom }
global_variable_list_size = {
name = laamps_tally
value < {
value = max_desired_laamps_value
multiply = 1.25
}
}
}
}
}
##################################################
# Decisions Triggers
# We want to refer to this in two places, is_shown and is_valid, within its decision so that we can explain where it's come from.
can_access_reject_inheritance_decision_trigger = {
OR = {
has_trait = content
has_perk = carefree_perk
is_landless_adventurer = yes
}
}
# Would this character lose opinion with you if you declared "screw that" to your family's titular duties?
would_judge_new_gallivanters_trigger = {
NOR = {
# Traits that innately get it.
has_trait = gallivanter
has_trait = content
# Traits that probably get it if the situation merits it.
calc_true_if = {
amount >= 2
has_trait = compassionate
has_trait = lazy
has_trait = humble
has_trait = eccentric
}
}
is_adult = yes
}
butcher_animals_decision_available_dogs_trigger = {
OR = {
custom_tooltip = {
text = butcher_animals_decision.tt.dog.you
has_character_modifier = dog_story_modifier
}
custom_tooltip = {
text = butcher_animals_decision.tt.dog.courtier
any_courtier = { has_character_modifier = dog_story_modifier }
}
domicile = { has_domicile_building = baggage_train_kennel }
}
# Only show the cooldown flag if we already have it, so make our tooltips neater.
trigger_if = {
limit = { has_character_flag = recently_ate_dogs }
custom_tooltip = {
text = butcher_animals_decision.tt.recently_ate_dogs
NOT = { has_character_flag = recently_ate_dogs }
}
}
}
butcher_animals_decision_available_cats_trigger = {
OR = {
custom_tooltip = {
text = butcher_animals_decision.tt.cat.you
has_character_modifier = cat_story_modifier
}
custom_tooltip = {
text = butcher_animals_decision.tt.cat.courtier
any_courtier = { has_character_modifier = cat_story_modifier }
}
}
# Only show the cooldown flag if we already have it, so make our tooltips neater.
trigger_if = {
limit = { has_character_flag = recently_ate_cats }
custom_tooltip = {
text = butcher_animals_decision.tt.recently_ate_cats
NOT = { has_character_flag = recently_ate_cats }
}
}
}
butcher_animals_decision_available_horses_trigger = {
OR = {
custom_tooltip = {
text = butcher_animals_decision.tt.horse.you
has_character_modifier = horse_story_modifier
}
domicile = { has_domicile_building = baggage_train_ample_steeds }
}
# Only show the cooldown flag if we already have it, so make our tooltips neater.
trigger_if = {
limit = { has_character_flag = recently_ate_horses }
custom_tooltip = {
text = butcher_animals_decision.tt.recently_ate_horses
NOT = { has_character_flag = recently_ate_horses }
}
}
}
butcher_animals_decision_available_elephants_trigger = {
domicile = { has_domicile_building = proving_grounds_elephantry_reserve }
# Only show the cooldown flag if we already have it, so make our tooltips neater.
trigger_if = {
limit = { has_character_flag = recently_ate_elephants }
custom_tooltip = {
text = butcher_animals_decision.tt.recently_ate_elephants
NOT = { has_character_flag = recently_ate_elephants }
}
}
}
laamp_youth_cultural_tradition_trigger = {
has_global_variable_list = laamps_tally
global_variable_list_size = {
name = laamps_tally
value < {
value = max_desired_laamps_value
add = 10
}
}
culture = {
OR = {
has_cultural_parameter = much_more_likely_to_be_laamps
has_cultural_parameter = more_likely_to_be_laamps
}
}
any_close_or_extended_family_member = {
is_ruler = yes
}
is_lowborn = no
is_ruler = no
is_ai = yes
OR = {
AND = {
exists = liege
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = liege }
}
AND = {
is_male = yes
faith_dominant_gender_male_or_equal = yes
}
AND = {
is_female = yes
faith_dominant_gender_female_or_equal = yes
}
}
trigger_if = {
limit = {
exists = liege
}
liege = {
is_landless_adventurer = no
is_ai = yes
}
}
NOT = {
any_heir_title = {
count >= 1
}
}
}

View file

@ -66,6 +66,7 @@ realm_law_use_crown_authority = {
realm_law_use_tribal_authority = no
realm_law_use_camp_purpose = no
realm_law_use_imperial_bureaucracy = no
realm_law_use_nomadic_authority = no
}
realm_law_use_tribal_authority = {
@ -77,7 +78,11 @@ realm_law_use_camp_purpose = {
}
realm_law_use_imperial_bureaucracy = {
has_government = administrative_government
government_has_flag = government_is_administrative
}
realm_law_use_nomadic_authority = {
government_has_flag = government_is_nomadic
}
can_have_confederate_partition_succession_law_trigger = {
@ -158,9 +163,7 @@ can_have_high_partition_succession_law_trigger = {
}
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
}
government_has_flag = government_is_feudal
}
}
@ -183,14 +186,34 @@ can_have_single_heir_succession_law_trigger = {
has_innovation = innovation_primogeniture
}
# Non-tribals only
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it
limit = {
has_ep3_dlc_trigger = yes
}
custom_tooltip = {
text = must_be_feudal_clan_or_admin
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_administrative
}
}
}
NOT = { has_government = administrative_government }
trigger_else = {
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
}
}
trigger_if = {
limit = {
government_has_flag = government_is_administrative
}
is_independent_ruler = yes
}
}
can_keep_single_heir_youngest_succession_law_trigger = {
@ -211,14 +234,34 @@ can_have_single_heir_youngest_succession_law_trigger = {
has_innovation = innovation_primogeniture
}
# Non-tribals only
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
trigger_if = { # We split the tooltip into two, to make sure we don't show admin unless you actually have it
limit = {
has_ep3_dlc_trigger = yes
}
custom_tooltip = {
text = must_be_feudal_clan_or_admin
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
government_has_flag = government_is_administrative
}
}
}
NOT = { has_government = administrative_government }
trigger_else = {
custom_description = {
text = succession_laws_must_have_organised_government_tooltip
OR = {
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
}
}
trigger_if = {
limit = {
government_has_flag = government_is_administrative
}
is_independent_ruler = yes
}
}
can_keep_single_heir_dynasty_house_trigger = {
@ -261,7 +304,7 @@ can_have_single_heir_dynasty_house_trigger = {
government_has_flag = government_is_clan
}
}
NOT = { has_government = administrative_government }
NOT = { government_has_flag = government_is_administrative }
}
can_have_bishop_theocratic_succession_law_trigger = {
@ -290,28 +333,26 @@ can_have_mercenary_succession_law_trigger = {
}
can_have_city_succession_law_trigger = {
government_has_flag = government_is_republic
government_has_flag = government_is_special_republic
}
can_have_herder_succession_law_trigger = {
government_has_flag = government_is_herder
}
title_can_reduce_partition_law_trigger = {
OR = {
AND = {
holder ?= {
OR = {
has_realm_law = single_heir_succession_law
holder = {
can_have_high_partition_succession_law_trigger = yes
}
can_have_high_partition_succession_law_trigger = yes
}
AND = {
OR = {
has_realm_law = high_partition_succession_law
holder = {
can_have_high_partition_succession_law_trigger = yes
}
can_have_high_partition_succession_law_trigger = yes
}
AND = {
OR = {
has_realm_law = partition_succession_law
holder = {
can_have_confederate_partition_succession_law_trigger = yes
}
can_have_confederate_partition_succession_law_trigger = yes
}
}
}
@ -330,7 +371,7 @@ can_pass_law_ca3_trigger = {
can_have_acclamation_succession_law_trigger = {
has_ep3_dlc_trigger = yes
has_government = administrative_government
government_has_flag = government_is_administrative
is_independent_ruler = yes
}
@ -342,7 +383,7 @@ can_keep_acclamation_succession_law_trigger = {
}
OR = {
can_have_acclamation_succession_law_trigger = yes
has_title = title:e_britannia
has_title = title:e_byzantium
}
}
}
@ -350,3 +391,23 @@ can_keep_acclamation_succession_law_trigger = {
can_change_acclamation_succession_law_trigger = {
has_ep3_dlc_trigger = yes
}
can_have_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
government_has_flag = government_is_administrative
is_independent_ruler = no
}
can_keep_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
trigger_if = {
limit = {
has_realm_law = appointment_succession_law
}
can_have_appointment_succession_law_trigger = yes
}
}
can_change_appointment_succession_law_trigger = {
has_ep3_dlc_trigger = yes
}

View file

@ -0,0 +1,129 @@

### Legal trigger list
opposes_succession_law_change_trigger = {
is_imprisoned = no
opinion = {
target = liege
value < 0
}
custom_description = {
text = law_change_approval_is_cowed
has_dread_level_towards = {
target = liege
level < 2
}
}
}
can_change_succession_laws_realm_flag_trigger = {
trigger_if = {
limit = { realm_law_use_tribal_authority = yes }
custom_description = {
text = "has_tribal_law_allowing_succession_law_change"
has_realm_law_flag = can_change_succession_laws
}
}
trigger_else_if = {
limit = { realm_law_use_imperial_bureaucracy = yes }
custom_description = {
text = has_imperial_bureaucracy_law_allowing_succession_law_change
has_realm_law_flag = can_change_succession_laws
}
}
trigger_else = {
custom_description = {
text = "has_crown_law_allowing_succession_law_change"
has_realm_law_flag = can_change_succession_laws
}
}
}
can_change_succession_law_trigger = {
can_change_succession_laws_realm_flag_trigger = yes
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_single_heir_dynasty_house_succession_law_trigger = {
trigger_if = {
limit = {
culture = { has_cultural_pillar = heritage_west_slavic }
NOT = {
has_realm_law_flag = can_change_succession_laws
}
}
culture = {
has_innovation = innovation_table_of_princes
}
}
can_change_succession_laws_realm_flag_trigger = yes
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_to_equal_succession_law_trigger = {
trigger_if = {
limit = {
NOT = { has_realm_law_flag = can_change_succession_laws }
}
OR = {
culture = { has_cultural_parameter = gender_equal_inheritance }
faith = { has_doctrine = doctrine_gender_equal }
}
}
can_change_succession_laws_realm_flag_trigger = yes
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_change_partition_succession_law_trigger = {
custom_description = {
text = "has_law_allowing_partition_succession_law_change"
OR = {
has_realm_law_flag = can_change_partition_succession_laws
has_realm_law_flag = can_change_succession_laws
}
}
custom_description = {
text = "no_powerful_vassal_with_negative_opinion"
NOT = {
any_vassal = {
is_powerful_vassal = yes
opposes_succession_law_change_trigger = yes
}
}
}
}
can_designate_heir_trigger = {
custom_description = {
text = "has_law_allowing_designate_heir"
has_realm_law_flag = can_designate_heirs
}
}
can_change_title_law_trigger = {
is_at_war = no
}

View file

@ -0,0 +1,87 @@

# Triggers used in events and actions caused by Lifestyle Perks
# extortion_powerful_vassal_trigger: Is this powerful vassal available for extortion?
# extortion_county_trigger: Is this County available for extortion?
# extortion_theocratic_vassal_trigger: Is this Theocratic Vassal available for extortion?
extortion_powerful_vassal_trigger = {
is_available_ai_adult = yes
NOR = {
has_variable = was_recently_extorted
has_opinion_modifier = {
target = root
modifier = extorted_me_opinion
}
}
}
extortion_county_trigger = {
tier = tier_county
NOT = { this = root.capital_county }
county_control >= medium_county_control
NOR = {
has_county_modifier = county_extorted_modifier
has_variable = was_recently_extorted
}
}
extortion_theocratic_vassal_trigger = {
is_available_ai_adult = yes
government_has_flag = government_is_theocracy
NOR = {
has_variable = was_recently_extorted
has_opinion_modifier = {
target = root
modifier = extorted_me_opinion
}
}
}
extortion_vassal_at_large_trigger = {
is_available_ai_adult = yes
NOR = {
has_variable = was_recently_extorted
has_opinion_modifier = {
target = root
modifier = extorted_me_opinion
}
}
}
extortion_courtier_representative_trigger = {
is_available_ai_adult = yes
NOR = {
is_close_family_of = root
has_variable = was_recently_extorted
has_opinion_modifier = {
target = root
modifier = extorted_me_opinion
}
}
}
# We use a trigger so this can be enabled elsewhere easily.
can_challenge_rival_to_single_combat_trigger = {
# Enabling perks.
OR = {
has_perk = stalwart_leader_perk
culture = { has_cultural_parameter = can_duel_rivals }
government_has_flag = government_is_nomadic
}
}
rival_single_combat_shown_and_not_invalid_trigger = {
# Scope:actor must be able to fight personally.
scope:actor = { can_start_single_combat_trigger = yes }
# Scope:actor cannot challenge someone they have a ceasefire against.
scope:actor = {
NOT = { has_truce = scope:recipient }
}
# Scope:actor *definitely* cannot challenge someone they're at war with.
scope:actor = {
NOT = { is_at_war_with = scope:recipient }
}
}

View file

@ -0,0 +1,413 @@
# can_start_new_lifestyle_tree_trigger
# lifestyle_friend_trigger
can_start_new_lifestyle_tree_trigger = {
OR = {
NOR = {
has_perk = benevolent_intent_perk
has_perk = firm_hand_perk
}
has_perk = august_perk
has_focus_diplomacy = no
}
OR = {
NOR = {
has_perk = befriend_perk
has_perk = familial_familiar_perk
}
has_perk = family_man_perk
has_focus_diplomacy = no
}
OR = {
NOT = { has_perk = thoughtful_perk }
has_perk = diplomat_perk
has_focus_diplomacy = no
}
OR = {
NOR = {
has_perk = dark_insights_perk
has_perk = dreadful_perk
}
has_perk = torturer_perk
has_focus_intrigue = no
}
OR = {
NOT = { has_perk = truth_is_relative_perk }
has_perk = schemer_perk
has_focus_intrigue = no
}
OR = {
NOR = {
has_perk = like_weed_in_a_garden_perk
has_perk = enticing_opportunity_perk
}
has_perk = seducer_perk
has_focus_intrigue = no
}
OR = {
NOT = { has_perk = anatomical_studies_perk }
has_perk = whole_of_body_perk
has_focus_learning = no
}
OR = {
NOR = {
has_perk = pedagogy_perk
has_perk = scientific_perk
}
has_perk = scholar_perk
has_focus_learning = no
}
OR = {
NOT = { has_perk = faithful_perk }
has_perk = theologian_perk
has_focus_learning = no
}
OR = {
NOT = { has_perk = stalwart_leader_perk }
has_perk = gallant_perk
has_focus_martial = no
}
OR = {
NOT = { has_perk = serve_the_crown_perk }
has_perk = overseer_perk
has_focus_martial = no
}
OR = {
NOT = { has_perk = bellum_justum_perk }
has_perk = strategist_perk
has_focus_martial = no
}
OR = {
NOR = {
has_perk = tax_man_perk
has_perk = cutting_corners_perk
}
has_perk = architect_perk
has_focus_stewardship = no
}
OR = {
NOT = { has_perk = meritocracy_perk }
has_perk = administrator_perk
has_focus_stewardship = no
}
OR = {
NOT = { has_perk = golden_obligations_perk }
has_perk = avaricious_perk
has_focus_stewardship = no
}
OR = {
NOT = { has_perk = mustering_the_troops_perk }
has_perk = surveyor_perk
has_focus_wanderer = no
}
OR = {
NOT = { has_perk = well_prepared_perk }
has_perk = wayfarer_perk
has_focus_wanderer = no
}
OR = {
NOR = {
has_perk = power_at_home_perk
has_perk = mercenary_contacts_perk
}
has_perk = voyager_perk
has_focus_wanderer = no
}
}
has_completed_current_lifestyle_trigger = {
OR = {
AND = {
OR = {
has_focus = diplomacy_foreign_affairs_focus
has_focus = diplomacy_majesty_focus
has_focus = diplomacy_family_focus
}
has_perk = august_perk
has_perk = family_man_perk
has_perk = diplomat_perk
}
AND = {
OR = {
has_focus = intrigue_skulduggery_focus
has_focus = intrigue_temptation_focus
has_focus = intrigue_intimidation_focus
}
has_perk = torturer_perk
has_perk = schemer_perk
has_perk = seducer_perk
}
AND = {
OR = {
has_focus = learning_medicine_focus
has_focus = learning_scholarship_focus
has_focus = learning_theology_focus
}
has_perk = whole_of_body_perk
has_perk = scholar_perk
has_perk = theologian_perk
}
AND = {
OR = {
has_focus = martial_strategy_focus
has_focus = martial_authority_focus
has_focus = martial_chivalry_focus
}
has_perk = gallant_perk
has_perk = overseer_perk
has_perk = strategist_perk
}
AND = {
OR = {
has_focus = stewardship_wealth_focus
has_focus = stewardship_domain_focus
has_focus = stewardship_duty_focus
}
has_perk = architect_perk
has_perk = administrator_perk
has_perk = avaricious_perk
}
}
}
has_completed_one_tree_in_current_lifestyle_trigger = {
OR = {
AND = {
OR = {
has_focus = diplomacy_foreign_affairs_focus
has_focus = diplomacy_majesty_focus
has_focus = diplomacy_family_focus
}
OR = {
has_perk = august_perk
has_perk = family_man_perk
has_perk = diplomat_perk
}
}
AND = {
OR = {
has_focus = intrigue_skulduggery_focus
has_focus = intrigue_temptation_focus
has_focus = intrigue_intimidation_focus
}
OR = {
has_perk = torturer_perk
has_perk = schemer_perk
has_perk = seducer_perk
}
}
AND = {
OR = {
has_focus = learning_medicine_focus
has_focus = learning_scholarship_focus
has_focus = learning_theology_focus
}
OR = {
has_perk = whole_of_body_perk
has_perk = scholar_perk
has_perk = theologian_perk
}
}
AND = {
OR = {
has_focus = martial_strategy_focus
has_focus = martial_authority_focus
has_focus = martial_chivalry_focus
}
OR = {
has_perk = gallant_perk
has_perk = overseer_perk
has_perk = strategist_perk
}
}
AND = {
OR = {
has_focus = stewardship_wealth_focus
has_focus = stewardship_domain_focus
has_focus = stewardship_duty_focus
}
OR = {
has_perk = architect_perk
has_perk = administrator_perk
has_perk = avaricious_perk
}
}
}
}
##############################
# LIFESTYLE FRIEND TRIGGERS
##############################
#Trigger to check if a friend is a lifestyle friend
lifestyle_friend_trigger = {
trigger_if = {
limit = { $CHARACTER$ = { is_ai = yes } }
OR = {
has_focus = $FOCUS$
is_ruler = no
}
}
#If a player, check the friend points
trigger_else = {
$FOCUS$_friend_points > 0
}
}
#Is the character available as a potential lifestyle friend for CHARACTER
potential_lifestyle_friend_availability_trigger = {
lifestyle_friend_trigger = { CHARACTER = $CHARACTER$ FOCUS = $FOCUS$ }
basic_is_available_ai = yes
NOR = {
has_relation_friend = $CHARACTER$
has_relation_rival = $CHARACTER$
is_at_war_with = $CHARACTER$
}
is_adult = yes
opinion = {
target = $CHARACTER$
value >= low_negative_opinion
}
save_temporary_scope_value_as = {
name = trigger_focus
value = flag:$FOCUS$
}
trigger_if = {
limit = { scope:trigger_focus = flag:intrigue_temptation_focus }
NOT = {
dislikes_partner_cheating_trigger = { PARTNER = $CHARACTER$ }
}
}
}
has_focus_martial = {
OR = {
has_focus = martial_chivalry_focus
has_focus = martial_authority_focus
has_focus = martial_strategy_focus
has_focus = martial_adventurer_focus
}
}
has_focus_learning = {
OR = {
has_focus = learning_theology_focus
has_focus = learning_scholarship_focus
has_focus = learning_medicine_focus
has_focus = learning_adventurer_focus
}
}
has_focus_intrigue = {
OR = {
has_focus = intrigue_intimidation_focus
has_focus = intrigue_temptation_focus
has_focus = intrigue_skulduggery_focus
has_focus = intrigue_adventurer_focus
}
}
has_focus_diplomacy = {
OR = {
has_focus = diplomacy_family_focus
has_focus = diplomacy_majesty_focus
has_focus = diplomacy_foreign_affairs_focus
has_focus = diplomacy_adventurer_focus
}
}
has_focus_stewardship = {
OR = {
has_focus = stewardship_domain_focus
has_focus = stewardship_wealth_focus
has_focus = stewardship_duty_focus
has_focus = stewardship_adventurer_focus
}
}
has_focus_wanderer = {
OR = {
has_focus = wanderer_internal_affairs_focus
has_focus = wanderer_journey_focus
has_focus = wanderer_destination_focus
}
}
#######################
# misc
#######################
has_focus_or_focus_trait_trigger = {
save_temporary_scope_value_as = {
name = trigger_focus
value = flag:$FOCUS$
}
OR = {
has_focus = $FOCUS$
trigger_if = {
limit = { scope:trigger_focus = flag:diplomacy_foreign_affairs_focus }
has_trait = diplomat
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:diplomacy_majesty_focus }
has_trait = august
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:diplomacy_family_focus }
has_trait = family_first
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:martial_strategy_focus }
has_trait = strategist
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:martial_authority_focus }
has_trait = overseer
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:martial_chivalry_focus }
has_trait = gallant
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:stewardship_wealth_focus }
has_trait = avaricious
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:stewardship_domain_focus }
has_trait = architect
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:stewardship_duty_focus }
has_trait = administrator
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:intrigue_skulduggery_focus }
has_trait = schemer
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:intrigue_temptation_focus }
has_trait = seducer
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:intrigue_intimidation_focus }
has_trait = torturer
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:learning_medicine_focus }
has_trait = whole_of_body
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:learning_scholarship_focus }
has_trait = scholar
}
trigger_else_if = {
limit = { scope:trigger_focus = flag:learning_theology_focus }
has_trait = theologian
}
trigger_else = {
always = no
}
}
}

View file

@ -0,0 +1,226 @@
###Accuse the Krstjani of Heresy
accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = {
faith = faith:bosnian_church
realm_size >= 8
primary_title.tier >= tier_duchy
}
###Launch the Hungarian Migration
launch_hungarian_migration_ducal_processing_trigger = {
#We're currently processing dukes.
highest_held_title_tier = tier_duchy
#Doesn't hold a valid duchy-tier title in Pannonia.
NOT = {
any_held_title = {
title_capital_county.title_province = { geographical_region = custom_hungary }
tier = tier_duchy
}
}
}
launch_hungarian_migration_count_processing_trigger = {
#Doesn't hold a valid county-tier title in Pannonia.
NOT = {
any_held_title = {
tier = tier_county
title_province = { geographical_region = custom_hungary }
}
}
}
launch_hungarian_migration_sub_vassal_liege_pairing_trigger = {
tier = tier_county
#Liege should be a suitable duke within Pannonia.
holder = scope:receiving_vassal.liege
#Double-check that the duke can afford to give a title away.
scope:receiving_vassal.liege = {
any_held_title = {
count >= 2
tier = tier_county
title_province = { geographical_region = custom_hungary }
}
}
}
launch_hungarian_migration_direct_vassal_requirements_trigger = {
tier = tier_county
holder = $INVADER$
}
launch_hungarian_migration_county_is_within_custom_hungary_trigger = {
tier = tier_county
title_province = { geographical_region = custom_hungary }
}
launch_hungarian_migration_misplaced_count_suitable_liege_trigger = {
launch_hungarian_migration_county_is_within_custom_hungary_trigger = yes
duchy = {
exists = holder
holder = {
NOT = { this = $INVADER$ }
liege = $INVADER$
}
}
}
##################################################
# Danelaw Triggers
## Colonial Sides
### The decision requires one lowland British party & one colonial Norse party.
negotiate_the_danelaw_british_side_trigger = {
OR = {
culture = { has_cultural_pillar = heritage_west_germanic }
culture = { has_cultural_pillar = heritage_brythonic }
}
NOT = { religion = religion:germanic_religion }
}
negotiate_the_danelaw_norse_side_trigger = {
OR = {
culture = { has_cultural_pillar = heritage_north_germanic }
culture = culture:norman
religion = religion:germanic_religion
}
}
## Standard Filters
### Does this character meet the basic eligibility requirements?
negotiate_the_danelaw_basic_filter_trigger = {
# Standard filter checks.
is_playable_character = yes
exists = dynasty
OR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_feudal
government_has_flag = government_is_clan
}
# Must be one of the two valid sides.
OR = {
negotiate_the_danelaw_british_side_trigger = yes
negotiate_the_danelaw_norse_side_trigger = yes
}
}
negotiate_the_danelaw_additional_filter_trigger = {
# Independent only, please.
is_independent_ruler = yes
# Kings & Emperors are too high a rank to make concessions.
highest_held_title_tier <= tier_duchy
# Plus, a capital inside title:k_england. Not strictly necessary, but removes *so* many edge-cases.
capital_county.kingdom = title:k_england
}
negotiate_the_danelaw_standard_filter_trigger = {
negotiate_the_danelaw_basic_filter_trigger = yes
negotiate_the_danelaw_additional_filter_trigger = yes
}
## Valid Opponent
### Assuming that we have a character who can take the decision (which has stricter requirements), do they have an opponent to negotiate with?
negotiate_the_danelaw_valid_danelaw_opponent_trigger = {
# Standard filter checks.
negotiate_the_danelaw_standard_filter_trigger = yes
# Ensure they match the opposing side.
trigger_if = {
limit = {
root = { negotiate_the_danelaw_british_side_trigger = yes }
}
negotiate_the_danelaw_norse_side_trigger = yes
}
trigger_if = {
limit = {
root = { negotiate_the_danelaw_norse_side_trigger = yes }
}
negotiate_the_danelaw_british_side_trigger = yes
}
# Holds a certain amount of de jure counties within k_england.
save_temporary_scope_as = valid_opponent
title:k_england = {
any_in_de_jure_hierarchy = {
count >= 10
tier = tier_county
holder = {
OR = {
this = scope:valid_opponent
any_liege_or_above = { this = scope:valid_opponent }
}
}
}
}
}
##################################################
# Favour the Countryside Basques Triggers
favour_the_countryside_basques_counts_as_basque_trigger = {
culture = {
OR = {
this = culture:basque
any_parent_culture = { this = culture:basque }
}
}
}
## We keep these isolated so that we can maintain easy parity between the decision rationales & the event desc rationales.
favour_the_countryside_basques_rationale_negative_piety_level_trigger = {
piety_level < low_piety_level
}
favour_the_countryside_basques_rationale_sinful_traits_trigger = {
num_sinful_traits >= 2
}
favour_the_countryside_basques_rationale_virtuous_basque_pagan_traits_trigger = {
num_virtuous_traits = {
value >= favour_the_countryside_basques_decision_basque_pagan_virtues_tally_value
faith = faith:basque_pagan
}
}
favour_the_countryside_basques_rationale_excommunicated_trigger = {
has_trait = excommunicated
}
favour_the_countryside_basques_rationale_naked_cynicism_trigger = {
trigger_if = {
limit = { is_ai = no }
has_trait = cynical
}
}
favour_the_countryside_basques_rationale_hof_rivalry_trigger = {
AND = {
exists = faith.religious_head
has_relation_rival = faith.religious_head
}
}
##################################################
# Rebuke Roman Revanchism Triggers
rebuke_roman_revanchism_counties_controlled_trigger = {
holder = {
OR = {
this = root
top_liege = root
}
}
}
rebuke_roman_revanchism_counties_controlled_by_ere_trigger = {
exists = title:e_byzantium.holder
holder = {
OR = {
this = title:e_byzantium.holder
top_liege = title:e_byzantium.holder
}
}
}
rebuke_roman_revanchism_sicily_controls_unlisted_empire_trigger = {
highest_held_title_tier >= tier_empire
primary_title = {
NOR = {
this = title:e_italy
this = title:e_maghreb
}
}
}

View file

@ -0,0 +1,612 @@
####MARRIAGE TRIGGER LIST###
#GENERAL MARRIAGE TRIGGERS
#can_marry_common_trigger
#can_marry_trigger
#could_marry_character_trigger
#can_marry_character_trigger
#marriage_between_characters_unlocks_alliance_of_min_tier_trigger
#can_become_concubine
#MARRIAGE INTERACTION TRIGGERS
#############################
# GENERAL MARRIAGE TRIGGERS #
#############################
# Is allowed to marry (current marriage/concubine status ignored)
can_marry_common_trigger = {
is_alive = yes
NOT = { has_trait_with_flag = can_not_marry }
trigger_if = {
limit = {
exists = primary_title
}
NOR = {
# Block Mercenaries from marrying or showing up in marriage interactions
primary_title = {
is_mercenary_company = yes
}
is_leading_faction_type = peasant_faction
is_leading_faction_type = populist_faction
government_has_flag = government_is_herder
}
}
# Clergy cannot marry if their faith disallows it
trigger_if = {
limit = {
is_clergy = yes
}
faith = {
has_doctrine_parameter = clergy_can_marry
}
}
trigger_if = {
limit = {
exists = liege.involved_activity.var:tournament_marriage_prize
this = liege.involved_activity.var:tournament_marriage_prize
}
exists = scope:contest_winner
}
}
#Can marry right now
can_marry_trigger = {
can_marry_common_trigger = yes
allowed_more_spouses = yes
#To account for a person marrying their concubines please use can_marry_character_trigger
}
allowed_to_marry_same_sex_trigger = {
has_game_rule = accepted_same_sex_marriage
faith = {
NOR = {
has_doctrine_parameter = homosexuality_shunned
has_doctrine_parameter = homosexuality_illegal
}
}
}
can_have_children_with = {
sex_opposite_of = $CHARACTER$ # Only opposite sex since for now
}
allowed_to_marry_character_gender_trigger = {
OR = {
AND = {
allowed_to_marry_same_sex_trigger = yes
sex_same_as = $CHARACTER$
}
sex_opposite_of = $CHARACTER$
}
}
#two characters could potentially marry (does NOT check that they're unmarried)
could_marry_character_trigger = {
save_temporary_scope_as = can_marry_check
can_marry_common_trigger = yes
$CHARACTER$ = { can_marry_common_trigger = yes }
#Opposite genders if you don't have accepted same-sex marriage game rule enabled and your faith supports it
trigger_if = {
limit = {
$CHARACTER$ = { allowed_to_marry_same_sex_trigger = no }
}
sex_opposite_of = $CHARACTER$
}
#Have you recently divorced this character?
NOT = {
has_opinion_modifier = {
modifier = divorced_me_opinion
target = $CHARACTER$
}
}
#Faith hostility & consanguinity
trigger_if = {
limit = { NOT = { is_courtier_of = $CHARACTER$ } } #If you're someone's courtier, your liege can marry you anyway
faith = {
faith_allows_marriage_consanguinity_trigger = {
CHARACTER_1 = scope:can_marry_check
CHARACTER_2 = $CHARACTER$
}
#faith_hostility_level = {
# target = $CHARACTER$.faith
# value < faith_hostility_prevents_marriage_level
#}
}
}
trigger_if = {
limit = { $CHARACTER$ = { NOT = { is_courtier_of = scope:can_marry_check } } } #If you're someone's courtier, your liege can marry you anyway
$CHARACTER$.faith = {
faith_allows_marriage_consanguinity_trigger = {
CHARACTER_1 = scope:can_marry_check
CHARACTER_2 = $CHARACTER$
}
#faith_hostility_level = {
# target = scope:can_marry_check.faith
# value < faith_hostility_prevents_marriage_level
#}
}
}
trigger_if = {
limit = {
any_close_or_extended_family_member = {
any_spouse = { this = $CHARACTER$ }
}
}
faith = { has_doctrine = doctrine_consanguinity_unrestricted }
$CHARACTER$ = {
faith = { has_doctrine = doctrine_consanguinity_unrestricted }
NOT = {
any_spouse = {
is_close_or_extended_family_of = scope:can_marry_check
NOT = {
faith = { has_doctrine = doctrine_consanguinity_unrestricted }
}
}
}
}
}
# Cannot marry self
NOT = {
scope:can_marry_check = { is_spouse_of = $CHARACTER$ }
}
}
# Same trigger as above with the exception of the recent divorce trigger
can_take_as_concubine_character_trigger = {
save_temporary_scope_as = can_marry_check
can_marry_common_trigger = yes
$CHARACTER$ = { can_marry_common_trigger = yes }
#Opposite genders if you don't have accepted same-sex marriage game rule enabled and your faith supports it
trigger_if = {
limit = {
$CHARACTER$ = { allowed_to_marry_same_sex_trigger = no }
}
sex_opposite_of = $CHARACTER$
}
#Faith hostility & consanguinity
trigger_if = {
limit = { NOT = { is_courtier_of = $CHARACTER$ } } #If you're someone's courtier, your liege can marry you anyway
faith = {
faith_allows_marriage_consanguinity_trigger = {
CHARACTER_1 = scope:can_marry_check
CHARACTER_2 = $CHARACTER$
}
#faith_hostility_level = {
# target = $CHARACTER$.faith
# value < faith_hostility_prevents_marriage_level
#}
}
}
trigger_if = {
limit = { $CHARACTER$ = { NOT = { is_courtier_of = scope:can_marry_check } } } #If you're someone's courtier, your liege can marry you anyway
$CHARACTER$.faith = {
faith_allows_marriage_consanguinity_trigger = {
CHARACTER_1 = scope:can_marry_check
CHARACTER_2 = $CHARACTER$
}
#faith_hostility_level = {
# target = scope:can_marry_check.faith
# value < faith_hostility_prevents_marriage_level
#}
}
}
NOT = {
scope:can_marry_check = { is_spouse_of = $CHARACTER$ }
}
}
#Two characters are able to marry right now
can_marry_character_trigger = {
save_temporary_scope_as = can_marry_char_check
OR = {
AND = {
is_betrothed = yes
betrothed = $CHARACTER$
}
AND = {
can_marry_trigger = yes
$CHARACTER$ = { can_marry_trigger = yes }
}
}
trigger_if = {
limit = {
$CHARACTER$ = { is_concubine = yes }
}
$CHARACTER$ = { is_concubine_of = scope:can_marry_char_check }
}
trigger_if = {
limit = {
is_concubine = yes
}
is_concubine_of = $CHARACTER$
$CHARACTER$ = { could_marry_character_trigger = { CHARACTER = scope:can_marry_char_check } } #Gender, recent divorce, allowed to marry, no illegal incest etc.} If they're your concubine you're rules are the ones looked at
}
trigger_else = {
could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc.
}
}
#A marriage between MY_CHARACTER and THEIR_CHARACTER would give alliance/would unlock renegotiate alliance for current scope where current scope's ally would be at least TIER
marriage_between_characters_unlocks_alliance_of_min_tier_trigger = {
save_temporary_scope_as = alliance_unlocker
$MY_CHARACTER$ = {
OR = {
this = scope:alliance_unlocker
is_close_family_of = scope:alliance_unlocker
}
}
#todo shouldn't this use yields_alliance trigger
$THEIR_CHARACTER$ = {
OR = {
AND = {
is_ruler = yes
highest_held_title_tier >= $TIER$
}
any_close_family_member = {
is_ruler = yes
highest_held_title_tier >= $TIER$
}
}
}
}
can_become_concubine_of_character_trigger = {
is_hostage = no
trigger_if = {
limit = {
NOT = { is_imprisoned_by = $CHARACTER$ }
}
is_married = no
is_betrothed = no
is_concubine = no
number_of_concubines = 0
}
trigger_if = {
limit = {
is_imprisoned_by = $CHARACTER$
is_married = yes
}
NOT = { is_spouse_of = $CHARACTER$ }
}
NOR = {
is_concubine_of = $CHARACTER$
has_character_flag = has_been_offered_as_concubine
}
is_ruler = no
is_playable_character = no
is_adult = yes
could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc.
}
# Same as above, switching out could_marry_character_trigger for can_take_as_concubine_character_trigger, in order to better inform the player that they cannot take their ex-spouse as a concubine
can_become_concubine_of_character_valid_trigger = {
trigger_if = {
limit = {
NOT = { is_imprisoned_by = $CHARACTER$ }
}
is_married = no
is_betrothed = no
is_concubine = no
number_of_concubines = 0
}
trigger_if = {
limit = {
is_imprisoned_by = $CHARACTER$
is_married = yes
}
NOT = { is_spouse_of = $CHARACTER$ }
}
NOR = {
is_concubine_of = $CHARACTER$
has_character_flag = has_been_offered_as_concubine
}
is_ruler = no
is_playable_character = no
is_adult = yes
can_take_as_concubine_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, allowed to marry, no illegal incest etc.
}
can_be_offered_as_concubine_to_character_trigger = {
trigger_if = {
limit = {
NOT = { is_imprisoned_by = $GIVER$ }
}
is_married = no
is_betrothed = no
OR = {
is_concubine = no
is_concubine_of = $GIVER$
}
number_of_concubines = 0
}
trigger_if = {
limit = {
is_imprisoned_by = $GIVER$
is_married = yes
}
NOR = {
is_spouse_of = $CHARACTER$
is_spouse_of = $GIVER$
}
}
NOR = {
is_concubine_of = $CHARACTER$
has_character_flag = has_been_offered_as_concubine
}
is_ruler = no
is_playable_character = no
is_adult = yes
NOT = {
is_theocratic_lessee = yes
}
could_marry_character_trigger = { CHARACTER = $CHARACTER$ } #Gender, recent divorce, allowed to marry, no illegal incest etc.
}
ready_to_marry_betrothed_trigger = {
trigger_if = {
limit = { exists = betrothed }
is_adult = yes
betrothed = { is_adult = yes }
}
trigger_else = {
always = no
}
}
#################################
# MARRIAGE INTERACTION TRIGGERS #
#################################
marriage_interaction_can_be_picked_trigger = {
can_marry_trigger = yes
is_imprisoned = no
is_hostage = no
}
marriage_interaction_valid_target_trigger = {
# Clergy cannot marry if their faith doesn't allow it
trigger_if = {
limit = {
scope:secondary_actor = {
is_clergy = yes
NOT = {
faith = {
has_doctrine_parameter = clergy_can_marry
}
}
}
}
custom_description = {
text = character_is_clergy_and_cannot_marry
subject = scope:secondary_actor
object = scope:secondary_recipient
scope:secondary_actor = {
is_clergy = no
}
}
}
trigger_else_if = {
limit = {
scope:secondary_recipient = {
is_clergy = yes
NOT = {
faith = {
has_doctrine_parameter = clergy_can_marry
}
}
}
}
custom_description = {
text = character_is_clergy_and_cannot_marry
subject = scope:secondary_recipient
object = scope:secondary_actor
scope:secondary_recipient = {
is_clergy = no
}
}
}
#Marriage
trigger_else_if = {
limit = {
scope:secondary_actor = { is_adult = yes }
scope:secondary_recipient = { is_adult = yes }
}
scope:secondary_actor = {
custom_description = {
text = "can_marry_check_secondary_actor"
subject = scope:secondary_actor
object = scope:secondary_recipient
can_marry_character_trigger = { CHARACTER = scope:secondary_recipient } #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc.
}
}
}
#Betrothal
trigger_else = {
scope:secondary_actor = {
custom_description = {
text = "can_betroth_check_secondary_actor"
subject = scope:secondary_actor
object = scope:secondary_recipient
can_marry_character_trigger = { CHARACTER = scope:secondary_recipient } #Checks marriage status, betrothed, gender, consanguinity, faith hostility etc.
}
}
}
# If the actor is ai they will not pick a character already considered for concubinage
trigger_if = {
limit = {
scope:actor = { is_ai = yes }
}
NOR = {
scope:secondary_actor = { has_character_flag = has_been_offered_as_concubine }
scope:secondary_recipient = { has_character_flag = has_been_offered_as_concubine }
}
}
}
marriage_interaction_auto_accept_trigger = {
trigger_if = {
limit = {
exists = scope:secondary_actor.betrothed
scope:secondary_actor = {
has_been_promised_grand_wedding = yes
}
}
always = no
}
trigger_else_if = {
limit = {
exists = scope:secondary_actor.betrothed
}
custom_description = {
text = is_betrothed_auto_accept
subject = scope:secondary_actor
object = scope:secondary_recipient
scope:secondary_actor.betrothed = scope:secondary_recipient
}
}
trigger_else_if = {
limit = {
scope:hook = yes
}
#Strong hook = 100% accept (unless marrying 1st or 2nd player heir or the ruler and asking for matrilineal/partrilineal resulting in no dynasty children for them)
custom_description = {
text = "spending_hook"
subject = scope:actor
object = scope:recipient
scope:actor = { has_strong_hook = scope:recipient }
scope:recipient = {
NAND = {
#Secondary recipient can't be recipient or 1st/2nd heir...
OR = {
this = scope:secondary_recipient
player_heir_position = {
target = scope:secondary_recipient
value <= 2
}
}
#...if the marriage (matrilineal/patrilineal) does not match their gender
OR = {
scope:secondary_recipient = {
is_female = yes
NOT = { always = scope:matrilineal }
}
scope:secondary_recipient = {
is_male = yes
always = scope:matrilineal
}
}
}
}
}
}
trigger_else = {
always = no
}
}
make_concubine_is_shown_trigger = {
scope:actor = {
allowed_concubines = yes
is_adult = yes
}
scope:recipient = {
OR = {
is_courtier_of = scope:actor
is_imprisoned_by = scope:actor
}
can_become_concubine_of_character_valid_trigger = { CHARACTER = scope:actor }
}
}
make_concubine_is_valid_trigger = {
custom_description = {
text = take_concubine_allowed_more
object = scope:recipient
scope:actor = {
allowed_more_concubines = yes
}
}
scope:recipient = {
custom_tooltip = {
text = take_concubine_ex_spouse
NOT = {
has_opinion_modifier = {
modifier = divorced_me_opinion
target = scope:actor
}
}
}
is_busy_in_events_localised = yes
OR = {
AND = {
is_imprisoned_by = scope:actor
is_married = yes
}
is_married = no
}
is_hostage = no
}
}
marriage_interaction_non_loyal_diarchs_refuse_secondary_marriage_trigger = {
trigger_if = {
limit = {
scope:$TARGET$ ?= {
is_diarch = yes
# We're only concerned about landed rulers, those who might be married out of their own court.
is_ruler = no
}
}
custom_tooltip = {
text = arrange_marriage_interaction.tt.non_loyal_regents_refuse_to_be_married_off.$TARGET$
scope:$TARGET$ = { diarch_loyalty >= diarch_loyalty_visibly_loyal_threshold }
}
}
}
wants_very_young_wife = {
is_female = no
is_adult = no
}
wants_young_wife = {
is_female = no
is_adult = yes
age < 30
NOT = {
any_child = {
count >= 2
is_alive = yes
NOT = { has_trait = bastard }
}
}
}
will_not_be_very_young_wife = {
is_female = yes
is_very_young_character = no
}
will_not_be_young_wife = {
is_female = yes
is_young_character = no
}
will_not_be_fertile_wife = {
is_female = yes
is_aging_character = yes
}
is_ruler_or_close_family = {
OR = {
is_ruler = yes
any_close_family_member = {
even_if_dead = yes
is_ruler = yes
}
}
}

View file

@ -0,0 +1,30 @@
#Triggers handling questions of military and warfare
#Checks whether scope character has greater military strength than the ratio specified
military_strength_greater_than_ratio_trigger = {
save_temporary_scope_value_as = {
name = ratio
value = {
value = max_military_strength
divide = $TARGET$.max_military_strength
}
}
scope:ratio > $RATIO$
}
valid_for_maa_trigger = {
OR = {
AND = {
is_landless_adventurer = yes
has_perk = planned_cultivation_perk
location.county.culture ?= { has_cultural_parameter = $PARAMETER$ }
}
culture = { has_cultural_parameter = $PARAMETER$ }
}
}
valid_for_nomadic_riders_trigger = {
government_has_flag = government_is_nomadic
}

View file

@ -0,0 +1,338 @@
##################################################
# Positive Opinion Triggers
has_good_opinion_of_character_trigger = {
opinion = {
value >= 25
target = $CHARACTER$
}
}
has_good_opinion_of_root_trigger = {
opinion = {
value >= 25
target = root
}
}
##################################################
# Negative Opinion Triggers
has_bad_opinion_of_character_trigger = {
opinion = {
value <= -25
target = $CHARACTER$
}
}
has_bad_opinion_of_root_trigger = {
opinion = {
value <= -25
target = root
}
}
has_moderate_bad_opinion_of_character_trigger = {
opinion = {
value <= -50
target = $CHARACTER$
}
}
has_moderate_bad_opinion_of_root_trigger = {
opinion = {
value <= -50
target = root
}
}
has_really_bad_opinion_of_character_trigger = {
opinion = {
value <= -75
target = $CHARACTER$
}
}
has_really_bad_opinion_of_root_trigger = {
opinion = {
value <= -75
target = root
}
}
# Do I have any prior quarrel with this character?
has_any_major_negative_opinion_against_character_trigger = {
OR = {
has_any_war_opinion_against_character_trigger = { CHARACTER = $CHARACTER$ }
has_any_major_revenge_opinion_against_character_trigger = { CHARACTER = $CHARACTER$ }
}
}
# Has this character declared war on me close enough that I remember it?
has_any_war_opinion_against_character_trigger = {
OR = {
has_opinion_modifier = {
modifier = declared_war
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = declared_war_on_son_daughter
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = vassal_lost_faction_revolt_war
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = vassal_wp_faction_revolt_war
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = peasant_revolt_opinion
target = $CHARACTER$
}
}
}
# Did this character do something awful to me or my family?
has_any_major_revenge_opinion_against_character_trigger = {
OR = {
has_opinion_modifier = {
modifier = imprisoned_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = banished_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = demanded_taking_vows
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = killed_my_child
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = treachery_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = treasonous_revoke_refusal
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = treasonous_imprison_refusal
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = treasonous_disobeyed_diarch
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = abductor_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_murder_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = botched_my_treatment_crime_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = botched_treatment_of_kin_crime_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = failed_to_treat_me_crime_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = failed_to_treat_kin_crime_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = theft_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = embezzled_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_arrest_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_imprisonment_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = rebellious_vassal_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = plotting_against_liege_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = spying_on_liege_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = abducted_me_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_abduction_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = elopement_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_elopement_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = murdered_close_family_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_murder_close_family_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_murder_me_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = murdered_close_relation_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = murdered_someone_close_to_me_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = hurt_someone_close_to_me_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = murdered_my_vassal_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_close_family
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_close_family_crime
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_dynasty_member
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_close_relation_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_family_sun_trial_modifier
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = executed_my_countryman_modifier
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = tortured_family_member
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = tortured_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = blinded_family_member
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = blinded_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = castrated_family_member
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = castrated_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = attempted_to_steal_artifact_from_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = stole_artifact_from_me
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = slept_with_spouse_discovered_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = slept_with_spouse_exposed_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = unfaithful_spouse_discovered_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = unfaithful_spouse_exposed_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = refused_to_renounce_lover_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = betrayed_our_promise
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = loved_one_dungeon_death
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = reason_child_died
target = $CHARACTER$
}
}
}
# Did this character do something irksome to me or my family?
has_any_petty_revenge_opinion_against_character_trigger = {
OR = {
has_opinion_modifier = {
modifier = insulted_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = smeared_opinion
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = mocked_me_in_time_of_need
target = $CHARACTER$
}
has_opinion_modifier = {
modifier = abandoned_me_opinion
target = $CHARACTER$
}
}
}

View file

@ -0,0 +1,192 @@
##########################################################################################################################
#
# These triggers all check for character flags which can be applied by the effects in '00_personality_trait_effects.txt'
# Used to determine if those effects successfully ran, and if they are still valid.
personality_has_any_trait_flag_trigger = {
OR = {
scope:has_opposing_trait = flag:arrogant
scope:has_opposing_trait = flag:humble
scope:has_opposing_trait = flag:lustful
scope:has_opposing_trait = flag:chaste
scope:has_opposing_trait = flag:gregarious
scope:has_opposing_trait = flag:shy
scope:has_opposing_trait = flag:generous
scope:has_opposing_trait = flag:greedy
scope:has_opposing_trait = flag:ambitious
scope:has_opposing_trait = flag:content
scope:has_opposing_trait = flag:impatient
scope:has_opposing_trait = flag:patient
scope:has_opposing_trait = flag:temperate
scope:has_opposing_trait = flag:gluttonous
scope:has_opposing_trait = flag:diligent
scope:has_opposing_trait = flag:lazy
scope:has_opposing_trait = flag:wrathful
scope:has_opposing_trait = flag:calm
scope:has_opposing_trait = flag:deceitful
scope:has_opposing_trait = flag:honest
scope:has_opposing_trait = flag:craven
scope:has_opposing_trait = flag:brave
scope:has_opposing_trait = flag:arbitrary
scope:has_opposing_trait = flag:just
scope:has_opposing_trait = flag:cynical
scope:has_opposing_trait = flag:zealous
scope:has_opposing_trait = flag:paranoid
scope:has_opposing_trait = flag:trusting
scope:has_opposing_trait = flag:compassionate
scope:has_opposing_trait = flag:callous
scope:has_opposing_trait = flag:sadistic
scope:has_opposing_trait = flag:forgiving
scope:has_opposing_trait = flag:vengeful
scope:has_opposing_trait = flag:stubborn
scope:has_opposing_trait = flag:fickle
}
}
#Checks if we can safely run the
personality_can_trait_shift = {
OR = {
AND = {
scope:has_opposing_trait = flag:arrogant
has_trait = arrogant
}
AND = {
scope:has_opposing_trait = flag:humble
has_trait = humble
}
AND = {
scope:has_opposing_trait = flag:lustful
has_trait = lustful
}
AND = {
scope:has_opposing_trait = flag:chaste
has_trait = chaste
}
AND = {
scope:has_opposing_trait = flag:gregarious
has_trait = gregarious
}
AND = {
scope:has_opposing_trait = flag:shy
has_trait = shy
}
AND = {
scope:has_opposing_trait = flag:generous
has_trait = generous
}
AND = {
scope:has_opposing_trait = flag:greedy
has_trait = greedy
}
AND = {
scope:has_opposing_trait = flag:ambitious
has_trait = ambitious
}
AND = {
scope:has_opposing_trait = flag:content
has_trait = content
}
AND = {
scope:has_opposing_trait = flag:impatient
has_trait = impatient
}
AND = {
scope:has_opposing_trait = flag:patient
has_trait = patient
}
AND = {
scope:has_opposing_trait = flag:temperate
has_trait = temperate
}
AND = {
scope:has_opposing_trait = flag:gluttonous
has_trait = gluttonous
}
AND = {
scope:has_opposing_trait = flag:diligent
has_trait = diligent
}
AND = {
scope:has_opposing_trait = flag:lazy
has_trait = lazy
}
AND = {
scope:has_opposing_trait = flag:wrathful
has_trait = wrathful
}
AND = {
scope:has_opposing_trait = flag:calm
has_trait = calm
}
AND = {
scope:has_opposing_trait = flag:deceitful
has_trait = deceitful
}
AND = {
scope:has_opposing_trait = flag:honest
has_trait = honest
}
AND = {
scope:has_opposing_trait = flag:craven
has_trait = craven
}
AND = {
scope:has_opposing_trait = flag:brave
has_trait = brave
}
AND = {
scope:has_opposing_trait = flag:arbitrary
has_trait = arbitrary
}
AND = {
scope:has_opposing_trait = flag:just
has_trait = just
}
AND = {
scope:has_opposing_trait = flag:cynical
has_trait = cynical
}
AND = {
scope:has_opposing_trait = flag:zealous
has_trait = zealous
}
AND = {
scope:has_opposing_trait = flag:paranoid
has_trait = paranoid
}
AND = {
scope:has_opposing_trait = flag:trusting
has_trait = trusting
}
AND = {
scope:has_opposing_trait = flag:compassionate
has_trait = compassionate
}
AND = {
scope:has_opposing_trait = flag:callous
has_trait = callous
}
AND = {
scope:has_opposing_trait = flag:sadistic
has_trait = sadistic
}
AND = {
scope:has_opposing_trait = flag:forgiving
has_trait = forgiving
}
AND = {
scope:has_opposing_trait = flag:vengeful
has_trait = vengeful
}
AND = {
scope:has_opposing_trait = flag:stubborn
has_trait = stubborn
}
AND = {
scope:has_opposing_trait = flag:fickle
has_trait = fickle
}
}
}

View file

@ -0,0 +1,245 @@

###PERSONALITY TRIGGER LIST
# has_personality_malicious_trigger - someone who is deceitful/uncaring/selfish/doesn't mind hurting others
# has_personality_benevolent_trigger - a kind soul who is likely to be helpful
# has_personality_dominant_trigger - someone with high confidence who is in control (or wants to be)
# has_personality_submissive_trigger - someone with low confidence or who is fine with obeying others
# has_personality_extroverted_trigger - someone who likes to interact with others
# has_personality_introverted_trigger - someone who is shy/chaste/scared
# has_personality_emotional_trigger - someone whose actions are easily swayed by their emotions
# has_personality_levelheaded_trigger - someone who is always in control or is indifferent
# has_personality_annoying_trigger - someone who gossips, meddles, disturbs etc.
# probably_intelligent_trigger
# probably_unintelligent_trigger
#############################
#SUPPORTING TRAITS TRIGGERS
############################
has_trait_malicious_trigger = {
OR = {
has_trait = deceitful
has_trait = arbitrary
has_trait = callous
has_trait = sadistic
has_trait = vengeful
has_trait = rowdy
}
}
has_trait_benevolent_trigger = {
OR = {
has_trait = generous
has_trait = just
has_trait = compassionate
has_trait = forgiving
}
}
has_trait_dominant_trigger = {
OR = {
has_trait = arrogant
has_trait = brave
has_trait = ambitious
has_trait = stubborn
has_trait = bossy
has_trait = rowdy
}
}
has_trait_submissive_trigger = {
OR = {
has_trait = craven
has_trait = humble
has_trait = content
has_trait = fickle
}
}
has_trait_extroverted_trigger = {
OR = {
has_diplomacy_lifestyle_trait_trigger = yes
has_trait = seducer
has_trait = lustful
has_trait = gregarious
has_trait = curious
has_trait = charming
}
}
has_trait_introverted_trigger = {
OR = {
has_trait = celibate
has_trait = chaste
has_trait = craven
has_trait = shy
has_trait = pensive
}
}
has_trait_emotional_trigger = {
OR = {
has_trait = wrathful
has_trait = impatient
has_trait = paranoid
has_trait = compassionate
has_trait = vengeful
has_trait = drunkard
has_trait = depressed
has_trait = lunatic
has_trait = possessed
}
}
has_trait_levelheaded_trigger = {
OR = {
has_trait = temperate
has_trait = calm
has_trait = patient
has_trait = callous
has_trait = pensive
}
}
has_trait_schemy_trigger = {
OR = {
has_trait = deceitful
has_trait = callous
has_trait = ambitious
has_trait = vengeful
has_trait = disloyal
}
}
#########################
#PERSONALITY TRIGGERS
##########################
has_personality_malicious_trigger = {
has_trait_malicious_trigger = yes
has_trait_benevolent_trigger = no
}
has_personality_benevolent_trigger = {
has_trait_benevolent_trigger = yes
has_trait_malicious_trigger = no
}
has_personality_dominant_trigger = {
has_trait_dominant_trigger = yes
has_trait_submissive_trigger = no
}
has_personality_submissive_trigger = {
has_trait_submissive_trigger = yes
has_trait_dominant_trigger = no
}
has_personality_extroverted_trigger = {
has_trait_extroverted_trigger = yes
has_trait_introverted_trigger = no
}
has_personality_introverted_trigger = {
has_trait_introverted_trigger = yes
has_trait_extroverted_trigger = no
}
has_personality_emotional_trigger = {
has_trait_emotional_trigger = yes
has_trait_levelheaded_trigger = no
}
has_personality_levelheaded_trigger = {
has_trait_levelheaded_trigger = yes
has_trait_emotional_trigger = no
}
has_personality_annoying_trigger = {
OR = {
has_trait = gluttonous
has_trait = lazy
has_trait = arrogant
has_trait = drunkard
has_trait = stubborn
has_trait = paranoid
has_trait = lunatic
has_trait = possessed
has_trait = curious
has_trait = rowdy
}
}
#Intelligence estimations
probably_intelligent_trigger = {
OR = {
has_trait_rank = {
trait = intellect_good
rank > 0
}
has_trait = shrewd
}
}
probably_unintelligent_trigger = {
OR = {
has_trait_rank = {
trait = intellect_bad
rank > 0
}
has_trait = dull
has_trait = inbred
}
}
# Other personality checks
untrustworthy_trigger = {
OR = {
has_trait = deceitful
has_trait = arbitrary
has_trait = disloyal
}
}
loves_food_trigger = {
NOR = {
has_trait = inappetetic
has_trait = temperate
}
OR = {
has_trait = comfort_eater
has_trait = gluttonous
has_court_position = food_taster_court_position
}
}
probably_superstitious = {
OR = {
learning <= mediocre_skill_rating
has_trait = intellect_bad
has_trait = dull
has_trait = eccentric
has_trait = paranoid
has_trait = lifestyle_herbalist
is_witch_trigger = yes
has_character_modifier = bp1_superstition_modifier
}
}
probably_anti_superstitious = {
probably_superstitious = no
OR = {
learning >= high_skill_rating
has_trait = intellect_good
has_trait = shrewd
has_trait = cynical
has_trait = zealous
has_trait = theologian
}
}

View file

@ -0,0 +1,116 @@

#Triggers revolving around pets
has_cat_or_dog_trigger = {
OR = {
has_cat_trigger = yes
has_dog_trigger = yes
}
}
has_named_cat_or_dog_trigger = {
OR = {
has_named_cat_trigger = yes
has_named_dog_trigger = yes
}
}
has_cat_trigger = {
any_owned_story = {
story_type = story_cycle_pet_cat
}
}
has_named_cat_trigger = {
any_owned_story = {
story_type = story_cycle_pet_cat
}
exists = var:story_cycle_cat_name
}
has_dog_trigger = {
any_owned_story = {
story_type = story_cycle_pet_dog
}
}
has_eagle_trigger = {
any_owned_story = {
story_type = story_cycle_pet_eagle
}
}
has_available_eagle_trigger = {
any_owned_story = {
story_type = story_cycle_pet_eagle
}
NOR = {
has_character_flag = eagle_is_missing
has_character_flag = eagle_is_dying
}
}
eagle_is_old_trigger = {
has_eagle_trigger = yes
exists = var:eagle_age_variable
var:eagle_age_variable >= 15
}
has_named_eagle_trigger = {
any_owned_story = {
story_type = story_cycle_pet_eagle
}
exists = var:story_cycle_eagle_name
}
has_named_dog_trigger = {
any_owned_story = {
story_type = story_cycle_pet_dog
}
exists = var:story_cycle_dog_name
}
has_alive_pet_trigger = {
OR = {
has_named_cat_trigger = yes
has_named_dog_trigger = yes
has_named_eagle_trigger = yes
has_character_modifier = exotic_pet_wolf
has_character_modifier = exotic_pet_bear
has_character_modifier = exotic_pet_lion
has_character_modifier = exotic_pet_tiger
}
}
has_exotic_pet_trigger = {
OR = {
has_character_modifier = exotic_pet_wolf
has_character_modifier = exotic_pet_bear
has_character_modifier = exotic_pet_lion
has_character_modifier = exotic_pet_tiger
}
}
has_eagle_personality_trait_trigger = {
OR = {
has_character_modifier = brave_eagle_story_modifier
has_character_modifier = curious_eagle_story_modifier
has_character_modifier = loyal_eagle_story_modifier
has_character_modifier = calm_eagle_story_modifier
has_character_modifier = wise_eagle_story_modifier
has_character_modifier = cunning_eagle_story_modifier
}
}
has_secondary_eagle_personality_trait_trigger = {
has_variable = eagle_personality_trait_2
}
can_laamp_sell_eagle_trigger = {
location = { has_holding_type = nomad_holding }
has_available_eagle_trigger = yes
NOT = { scope:laamp_artifact_peddler = { has_eagle_trigger = yes } }
NOT = { has_character_flag = cant_sell_eagle } # Cooldown or somewhat healthy eagle
NOT = { exists = scope:1020_second_artifact_to_sell } # Should only have one artifact to sell
short_term_gold <= minor_gold_laamps_value # Out of desperation
}

View file

@ -0,0 +1,41 @@

##TRIGGER LIST
# has_conventionally_attractive_trigger
# has_conventionally_ugly_trigger
# has_permanent_physical_injury - checks if you have some permanent injury
#
has_conventionally_attractive_trigger = {
OR = {
has_trait = beauty_good
AND = {
has_trait = strong
NOT = { has_trait = beauty_bad }
}
}
}
has_conventionally_ugly_trigger = {
OR = {
has_trait = beauty_bad
has_trait = hunchbacked
has_trait = one_legged
has_trait = scarred
has_trait = one_eyed
has_trait = scaly
has_trait = great_pox
has_trait = dwarf
has_trait = albino
}
}
has_permanent_physical_injury = {
OR = {
has_trait = one_legged
has_trait = one_eyed
has_trait = scarred
has_trait = maimed
is_eunuch_trigger = yes
has_trait = blind
}
}

View file

@ -0,0 +1,115 @@

is_on_a_pilgrimage_trigger = {
exists = involved_activity
involved_activity = { has_activity_type = activity_pilgrimage }
#No more pilgrimage events if you're on your way home :colbert:
exists = capital_province
NOT = {
current_travel_plan = {
next_destination_province = root.capital_province
}
}
}
is_on_a_hajj_trigger = {
exists = involved_activity
involved_activity = {
has_activity_option = {
category = special_type
option = pilgrimage_type_hajj
}
}
involved_activity.activity_location.barony = title:b_makka
#No more Hajj events if you're on your way home :colbert:
exists = capital_province
NOT = {
current_travel_plan = {
next_destination_province = root.capital_province
}
}
}
short_pilgrimage_trigger = {
root.involved_activity ?= {
exists = var:pilgrimage_distance
var:pilgrimage_distance = flag:short_pilgrimage_var
}
}
medium_pilgrimage_trigger = {
root.involved_activity ?= {
exists = var:pilgrimage_distance
var:pilgrimage_distance = flag:medium_pilgrimage_var
}
}
long_pilgrimage_trigger = {
root.involved_activity ?= {
exists = var:pilgrimage_distance
var:pilgrimage_distance = flag:long_pilgrimage_var
}
}
very_long_pilgrimage_trigger = {
root.involved_activity ?= {
exists = var:pilgrimage_distance
var:pilgrimage_distance = flag:very_long_pilgrimage_var
}
}
has_pious_pilgrimage_type_trigger = {
involved_activity ?= {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_pious
}
}
}
has_worldly_pilgrimage_type_trigger = {
involved_activity ?= {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_worldly
}
}
}
has_hajj_pilgrimage_type_trigger = {
involved_activity ?= {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_hajj
}
}
}
#Assumes activity-scope
activity_has_pious_pilgrimage_type_trigger = {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_pious
}
}
#Assumes activity-scope
activity_has_worldly_pilgrimage_type_trigger = {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_worldly
}
}
#Assumes activity-scope
activity_has_hajj_pilgrimage_type_trigger = {
has_activity_type = activity_pilgrimage
has_activity_option = {
category = special_type
option = pilgrimage_type_hajj
}
}

View file

@ -0,0 +1,16 @@

playdate_default_participant_trigger = {
is_ai = yes
NOT = { this = root }
is_alive = yes
is_imprisoned = no
is_incapable = no
}
playdate_potential_guest_check_trigger = {
NOT = { this = scope:activity.activity_host }
is_available_for_child_activity_trigger = yes
NOT = { is_in_list = potential_guests }
}

View file

@ -0,0 +1,3 @@
has_province_owner = {
exists = province_owner
}

File diff suppressed because it is too large Load diff

View file

@ -175,7 +175,10 @@ can_be_combatant_based_on_gender_trigger = {
has_trait = shieldmaiden
}
# Event-based special exceptions
has_character_modifier = ignores_gender_army_rules
OR = {
has_character_modifier = ignores_gender_army_rules
has_character_modifier = mpo_destined_leader_modifier
}
AND = {
$ARMY_OWNER$ = { culture = { has_cultural_parameter = high_prowess_ignores_knight_restrictions } }
NOT = { $ARMY_OWNER$ = { culture = { has_cultural_parameter = minimum_prowess_for_knights } } }
@ -1255,6 +1258,12 @@ valid_demand_conversion_conditions_trigger = {
}
}
}
scope:actor = {
NAND = {
has_trait = nomadic_philosophy
has_trait = zealous
}
}
custom_description = {
text = "is_head_of_religion"
@ -1376,6 +1385,25 @@ is_reincarnation_trigger = {
# Used in faith scope, COUNT is number of faiths to at least have and CHARACTER is who must own them
num_realm_holy_sites_faithful_holders = {
$CHARACTER$ = { save_temporary_scope_as = root_scope }
trigger_if = {
limit = {
exists = $CHARACTER$.confederation
}
custom_description = {
text = direct_realm_holy_sites_held_by_faithful_confederation
subject = $CHARACTER$
object = this
value = 1
any_holy_site = {
county = {
save_temporary_scope_as = current_holy_site
is_holy_site_controlled_by = $CHARACTER$
holder.faith = $CHARACTER$.faith
}
}
}
}
custom_description = {
text = number_realm_holy_sites_held_by_faithful
subject = $CHARACTER$
@ -1384,7 +1412,17 @@ num_realm_holy_sites_faithful_holders = {
any_holy_site = {
count >= $COUNT$
county = {
is_holy_site_controlled_by = $CHARACTER$
save_temporary_scope_as = current_holy_site
OR = {
is_holy_site_controlled_by = $CHARACTER$
$CHARACTER$.confederation ?= {
any_confederation_member = {
scope:current_holy_site = {
is_holy_site_controlled_by = prev
}
}
}
}
holder.faith = $CHARACTER$.faith
}
}
@ -1410,15 +1448,19 @@ can_create_temporal_head_of_faith_title_trigger = {
}
can_create_spiritual_head_of_faith_title_trigger = {
num_realm_holy_sites_faithful_holders = {
COUNT = holy_sites_to_create_spiritual_head_of_faith
CHARACTER = ROOT
}
root = { piety_level >= medium_piety_level }
trigger_if = {
limit = { has_doctrine = special_doctrine_not_allowed_to_hof }
NOT = { has_doctrine = special_doctrine_not_allowed_to_hof }
}
num_realm_holy_sites_faithful_holders = {
COUNT = holy_sites_to_create_spiritual_head_of_faith
CHARACTER = ROOT
}
root = { piety_level >= medium_piety_level }
trigger_if = {
limit = { has_doctrine = special_doctrine_not_allowed_to_hof }
NOT = { has_doctrine = special_doctrine_not_allowed_to_hof }
}
NAND = {
exists = religious_head
has_doctrine_parameter = maintains_head_of_faith_on_creation
}
}
# this = Person trying to create the title
@ -1705,6 +1747,7 @@ has_tolerant_faith_or_culture_trigger = {
OR = {
faith = { has_doctrine = doctrine_pluralism_pluralistic }
culture = { has_cultural_parameter = less_likely_to_force_conversion }
has_trait = nomadic_philosophy
}
}
@ -1829,8 +1872,21 @@ has_holy_building = {
has_building_or_higher = holy_site_great_mosque_of_djenne_01
has_building_or_higher = holy_site_great_mosque_of_samarra_01
has_building_or_higher = holy_site_prophetic_mosque_01
has_building_or_higher = brihadeeswarar_temple_01
has_building_or_higher = shwedagon_pagoda_01
has_building_or_higher = ananda_temple_01
has_building_or_higher = the_friday_mosque_01
has_building_or_higher = dome_of_the_rock_01
has_building_or_higher = temple_in_jerusalem_01
has_building_or_higher = cluny_abbey_01
has_building_or_higher = damascus_mosque_01
has_building_or_higher = jokhang_01
has_building_or_higher = beta_giyorgis_01
has_building_or_higher = holy_wisdom_01
has_building_or_higher = duomo_florence_01
has_building_or_higher = konark_temple_01
has_building_or_higher = wawel_cathedral_01
has_building_or_higher = vatapi_caves_01
}
}

View file

@ -0,0 +1,18 @@
is_murder_activity_trigger = {
OR = {
AND = {
has_activity_type = activity_wedding
has_activity_option = {
category = special_type
option = wedding_type_bloody
}
}
AND = {
has_activity_type = activity_feast
has_activity_option = {
category = special_type
option = feast_type_murder
}
}
}
}

View file

@ -0,0 +1,88 @@
roaming_activity_intro_base_trigger = {
terrain = $TERRAIN$
roaming_activity_winter_trigger = no
roaming_activity_monsoon_trigger = no
}
roaming_activity_intro_base_two_trigger = {
OR = {
terrain = $TERRAIN$
terrain = $TERRAIN_2$
}
roaming_activity_winter_trigger = no
roaming_activity_monsoon_trigger = no
}
roaming_activity_intro_base_three_trigger = {
OR = {
terrain = $TERRAIN$
terrain = $TERRAIN_2$
terrain = $TERRAIN_3$
}
roaming_activity_winter_trigger = no
roaming_activity_monsoon_trigger = no
}
roaming_activity_intro_winter_trigger = {
terrain = $TERRAIN$
roaming_activity_winter_trigger = yes
}
roaming_activity_intro_winter_two_trigger = {
OR = {
terrain = $TERRAIN$
terrain = $TERRAIN_2$
}
roaming_activity_winter_trigger = yes
}
roaming_activity_winter_trigger = {
has_winter_trigger = yes
NOR = {
terrain = desert
terrain = desert_mountains
terrain = drylands
terrain = oasis
terrain = floodplains
}
}
roaming_activity_intro_monsoon_trigger = {
terrain = $TERRAIN$
roaming_activity_monsoon_trigger = yes
}
roaming_activity_intro_monsoon_two_trigger = {
OR = {
terrain = $TERRAIN$
terrain = $TERRAIN_2$
}
roaming_activity_monsoon_trigger = yes
}
roaming_activity_monsoon_trigger = {
tropical_seasons_region_trigger = yes
middle_of_year_season_trigger = yes
NOR = {
terrain = taiga
terrain = steppe
}
}
roaming_activity_special_guest_trigger = {
NOT = { this = scope:host }
court_owner ?= scope:host
is_healthy = yes
is_available = yes
age >= 12
is_ai = yes
OR = {
is_close_family_of = scope:host
is_spouse_of = scope:host
has_relation_friend = scope:host
has_relation_best_friend = scope:host
has_relation_lover = scope:host
is_knight_of = scope:host
}
}

View file

@ -0,0 +1,768 @@

###TRIGGER LIST
###SEDUCE SCHEME##
# use_seduce_secrecy_trigger
###SEXUAL ORITENTATION###
# attracted_to_same_gender_trigger_trigger
# attracted_to_opposite_gender_trigger_trigger
# attracted_to_all_genders_trigger
# matching_gender_and_sexuality_trigger
###INCEST###
# accepts_incest_with_trigger
# accepts_incest_with_each_other_trigger
# likely_to_commit_incest_trigger
# likely_to_commit_incest_with_trigger
###ATTRACTION###
# possibly_interested_in_root_trigger
# possible_mutual_interest_trigger
# object_of_importance_exist_trigger
### CHEATING ####
# might_cheat_on_partner_trigger - If scope would at all be willing to cheat, baseline that must be passed
# might_cheat_on_every_partner_trigger - checks might_cheat_on_partner_trigger on every partner
# dislikes_partner_cheating_trigger
### PREGNANCY & STDs ###
# possible_pregnancy_after_sex_with_character_trigger - requries root and other character
###SEDUCE SCHEME TRIGGERS###
use_seduce_secrecy_trigger = {
#TODO_CD_EP3_ERCC; this is breaking in a confusing way, with the secrecy no longer showing in the scheme start widget. Original version preserved below, not sure why it doesn't work.
$TARGET$ = {
NOR = {
is_consort_of = $OWNER$
is_courtier_of = $OWNER$
}
}
#$TARGET$ = {
#NOR = {
#is_consort_of = $OWNER$
#is_courtier_of = $OWNER$
#is_ruler = yes
#}
#exists = liege
#OR = {
#is_consort_of = $TARGET$.liege
#is_close_family_of = $TARGET$.liege
#house = $TARGET$.house
#}
#}
}
court_allow_owner_opt_out_trigger = {
NAND = {
is_ai = yes
scope:target = { is_ai = no }
}
}
###SEXUAL ORIENTATION TRIGGERS###
has_sexual_orientation_trigger = {
OR = {
has_sexuality = heterosexual
has_sexuality = bisexual
has_sexuality = homosexual
has_sexuality = asexual
}
}
attracted_to_same_gender_trigger = {
OR = {
has_sexuality = bisexual
has_sexuality = homosexual
}
}
attracted_to_opposite_gender_trigger = {
OR = {
has_sexuality = bisexual
has_sexuality = heterosexual
}
}
attracted_to_all_genders_trigger = {
has_sexuality = bisexual
}
#Needs CHARACTER_1 and CHARACTER_2
matching_gender_and_sexuality_trigger = {
$CHARACTER_1$ = { is_attracted_to_gender_of = $CHARACTER_2$ }
$CHARACTER_2$ = { is_attracted_to_gender_of = $CHARACTER_1$ }
}
###ATTRACTION###
possibly_interested_in_root_trigger = {
OR = {
AND = { #Is not related to Root, or has an indicator that they would be interested anyways
NOR = {
any_sibling = {
this = root
}
any_parent = {
this = root
}
any_child = {
this = root
}
}
OR = {
has_relation_crush = root
has_relation_lover = root
has_relation_potential_lover = root
AND = {
is_attracted_to_men = yes
root = { is_male = yes }
}
AND = {
is_attracted_to_women = yes
root = { is_female = yes }
}
}
}
AND = {
OR = {
any_sibling = {
this = root
}
any_parent = {
this = root
}
any_child = {
this = root
}
}
OR = {
has_relation_crush = root
has_relation_lover = root
has_relation_potential_lover = root
}
}
}
}
possibly_interested_in_character_trigger = {
OR = {
AND = { #Is not related to Root, or has an indicator that they would be interested anyways
NOR = {
any_sibling = {
this = $CHARACTER$
}
any_parent = {
this = $CHARACTER$
}
any_child = {
this = $CHARACTER$
}
}
OR = {
has_relation_crush = $CHARACTER$
has_relation_lover = $CHARACTER$
has_relation_potential_lover = $CHARACTER$
AND = {
is_attracted_to_men = yes
$CHARACTER$ = { is_male = yes }
}
AND = {
is_attracted_to_women = yes
$CHARACTER$ = { is_female = yes }
}
}
}
AND = {
OR = {
any_sibling = {
this = $CHARACTER$
}
any_parent = {
this = $CHARACTER$
}
any_child = {
this = $CHARACTER$
}
}
OR = {
has_relation_crush = $CHARACTER$
has_relation_lover = $CHARACTER$
has_relation_potential_lover = $CHARACTER$
}
}
}
}
possible_mutual_interest_trigger = {
NOT ={ $CHARACTER_1$ = $CHARACTER_2$ } #Cannot be an event target for yourself
$CHARACTER_1$ = {
OR = { #Not related etc.
AND = {
NOT = {
any_sibling = {
this = $CHARACTER_2$
}
}
NOT = {
any_parent = {
this = $CHARACTER_2$
}
}
NOT = {
any_child = {
this = $CHARACTER_2$
}
}
}
has_relation_crush = $CHARACTER_2$
has_relation_lover = $CHARACTER_2$
has_opinion_modifier = {
modifier = love_opinion
target = $CHARACTER_2$
}
}
}
$CHARACTER_2$ = {
OR = {
AND = { #Not related etc.
NOT = {
any_sibling = {
this = $CHARACTER_1$
}
}
NOT = {
any_parent = {
this = $CHARACTER_1$
}
}
NOT = {
any_child = {
this = $CHARACTER_1$
}
}
}
has_relation_crush = $CHARACTER_1$
has_relation_lover = $CHARACTER_1$
has_opinion_modifier = {
modifier = love_opinion
target = $CHARACTER_1$
}
}
}
$CHARACTER_1$ = {
OR = {
AND = {
is_attracted_to_men = yes
$CHARACTER_2$ = { is_male = yes }
}
AND = {
is_attracted_to_women = yes
$CHARACTER_2$ = { is_female = yes }
}
}
}
$CHARACTER_2$ = {
OR = {
AND = {
is_attracted_to_men = yes
$CHARACTER_1$ = { is_male = yes }
}
AND = {
is_attracted_to_women = yes
$CHARACTER_1$ = { is_female = yes }
}
}
}
}
#To check if either of two lovers have a object of importance saved
#Use LOVER to slot in the non-scope character!
object_of_importance_exist_trigger = {
save_temporary_scope_as = original_scope
OR = {
AND = {
has_variable_list = lover_object_of_importance
variable_list_size = {
name = lover_object_of_importance
value = 2
}
is_target_in_variable_list = {
name = lover_object_of_importance
target = $LOVER$
}
}
AND = {
has_variable_list = lover_object_of_importance_2
variable_list_size = {
name = lover_object_of_importance_2
value = 2
}
is_target_in_variable_list = {
name = lover_object_of_importance_2
target = $LOVER$
}
}
$LOVER$ = {
has_variable_list = lover_object_of_importance
variable_list_size = {
name = lover_object_of_importance
value = 2
}
is_target_in_variable_list = {
name = lover_object_of_importance
target = scope:original_scope
}
}
$LOVER$ = {
has_variable_list = lover_object_of_importance_2
variable_list_size = {
name = lover_object_of_importance_2
value = 2
}
is_target_in_variable_list = {
name = lover_object_of_importance_2
target = scope:original_scope
}
}
}
}
might_cheat_on_partner_trigger = {
NOT = { has_trait = celibate }
is_eunuch_trigger = no
trigger_if = {
limit = { is_ai = no }
# Players always have the option to cheat - we check this here so that we don't constantly need to OR it when using might_cheat_on_every_partner_trigger.
always = yes
}
trigger_if = {
limit = {
$PARTNER$ = {
government_has_flag = government_is_nomadic
}
}
NOT = {
$PARTNER$ = {
domicile ?= {
has_domicile_parameter = nomad_yurt_spouse_will_not_cheat
}
}
}
}
trigger_else_if = {
limit = {
# If $PARTNER$ isn't actually my partner, it's not cheating!
OR = {
has_relation_lover = $PARTNER$
is_consort_of = $PARTNER$ # Includes both spouses and concubines
}
# Additionally, in faiths with the Polyamory doctrine, extramarital relationships aren't considered to be cheating on partners.
NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } }
}
NOT = { has_trait = loyal } # Loyal people never cheat
# Soulmates never cheat, unless they're Lustful/Seducer and have low Honor
trigger_if = {
limit = { has_relation_soulmate = $PARTNER$ }
ai_honor <= medium_negative_ai_value
calc_true_if = {
amount >= 2
has_trait = lustful
has_trait = seducer
has_focus = intrigue_temptation_focus
}
}
# Non-soulmates have slightly more complex criteria
trigger_else = {
OR = {
# Having one of these things that makes characters always willing to cheat:
OR = {
has_trait = lustful
has_trait = seducer
has_focus = intrigue_temptation_focus
# Dishonorable and callous enough to not care about current partners (regardless of opinion).
AND = {
ai_compassion <= high_negative_ai_value
ai_honor <= high_negative_ai_value
}
# Needs aren't getting met.
AND = {
is_deviant_trigger = yes
$PARTNER$ = { is_deviant_trigger = no }
}
# Rakish character that's about to have a mental breakdown.
AND = {
has_trait = rakish
stress_level >= 2
}
}
# Calc for honour.
## Characters with really lacking honour might cheat even at decently opinion positive levels.
trigger_if = {
limit = { ai_honor <= high_negative_ai_value }
# Consorts (spouses, concubines).
trigger_if = {
limit = { is_consort_of = $PARTNER$ }
opinion = {
target = $PARTNER$
value <= medium_positive_opinion
}
}
# Lovers.
trigger_else = {
opinion = {
target = $PARTNER$
value <= high_positive_opinion
}
}
}
## Characters with at least some honour require much less happy relationships.
trigger_else_if = {
limit = { ai_honor <= medium_positive_ai_value }
# Consorts (spouses, concubines).
trigger_if = {
limit = { is_consort_of = $PARTNER$ }
# Consorts (spouses, concubines)
opinion = {
target = $PARTNER$
value <= neutral_opinion
}
}
# Lovers.
trigger_else = {
opinion = {
target = $PARTNER$
value <= low_positive_opinion # 80 for lovers
}
}
}
## Finally, characters might also cheat if they just dislike their partner enough, regardless of honor.
trigger_else = {
opinion = {
target = $PARTNER$
value <= high_negative_opinion
}
}
}
}
}
# Having an extramarital relationship with someone else would not count as cheating on this person.
trigger_else = { always = yes }
}
might_cheat_on_every_partner_trigger = {
save_temporary_scope_as = potential_cheater
is_eunuch_trigger = no
NOT = { has_trait = celibate }
any_spouse = {
count = all
save_temporary_scope_as = partner2
scope:potential_cheater = { might_cheat_on_partner_trigger = { PARTNER = scope:partner2 } }
}
any_relation = {
type = lover
count = all
save_temporary_scope_as = partner3
scope:potential_cheater = { might_cheat_on_partner_trigger = { PARTNER = scope:partner3 } }
}
}
dislikes_partner_cheating_trigger = {
trigger_if = {
limit = {
OR = {
has_relation_lover = $PARTNER$
is_consort_of = $PARTNER$
}
}
$PARTNER$ = { save_temporary_scope_as = cheating_trigger_partner }
save_temporary_scope_as = cheating_trigger_root
OR = {
AND = {
has_relation_soulmate = $PARTNER$ # Soulmates are exclusive
NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } }
}
AND = { # Feels slighted
is_consort_of = $PARTNER$
trait_is_shunned_or_criminal_in_faith_trigger = {
TRAIT = adulterer
FAITH = scope:cheating_trigger_root.faith
GENDER_CHARACTER = scope:cheating_trigger_partner
}
OR = {
ai_honor >= 0
ai_zeal >= 0
has_trait = arrogant
ai_vengefulness <= 0
}
}
opinion = { # Loves partner
target = $PARTNER$
value >= high_positive_opinion
}
}
NAND = { # Sexually liberal characters don't mind, unless you're exclusive
sexually_liberal_trigger = yes
NOT = { has_relation_soulmate = $PARTNER$ }
}
}
trigger_else = { always = no } # Partner isn't my partner, so I don't care
}
#Would a soulmate expect you to be exclusively with them?
soulmate_relation_is_exclusive_trigger = {
NOT = { faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active } }
}
sexually_liberal_trigger = {
OR = {
is_deviant_trigger = yes
has_trait = lustful
has_trait = seducer
faith = { trait_is_virtue = lustful }
AND = {
exists = scope:activity
has_activity_intent = lechery_intent
}
}
NOR = {
has_trait = chaste
has_trait = celibate
}
}
has_lustful_adjacent_trait_trigger = {
OR = {
is_deviant_trigger = yes
has_trait = lustful
has_trait = seducer
has_trait = rakish
faith = { trait_is_virtue = lustful }
AND = {
exists = scope:activity
has_activity_intent = lechery_intent
}
}
NOR = {
has_trait = chaste
has_trait = celibate
}
}
#Can this character ever have an affair? Counts both inability and whether sex outside marriage is counted as religiously problematic for them.
eligible_for_affairs_trigger = {
NOR = {
has_trait = celibate
#Technically (and, historically, frequently) eunuchs can still have affairs, they just aren't able to impregnate.
OR = {
faith = { has_doctrine_parameter = no_unfaithfulness_penalty_active }
trait_is_shunned_or_criminal_in_faith_trigger = {
TRAIT = adulterer
FAITH = root.faith
GENDER_CHARACTER = root
}
trait_is_shunned_or_criminal_in_faith_trigger = {
TRAIT = fornicator
FAITH = root.faith
GENDER_CHARACTER = root
}
}
}
}
freely_accepts_sodomy_with_trigger = { #Will ignore sodomy consequences (because there are none or they have done this before)
OR = {
NOT = { relation_with_character_is_sodomy_in_my_or_lieges_faith_trigger = { CHARACTER = $CHARACTER$ } }
has_trait = deviant
has_trait = sodomite
any_secret = { secret_type = secret_homosexual }
}
}
# 100% fine with incest with CHARACTER. Important: There are also other factors to attraction! This isn't 100% acceptance of romantic/sexual relationship.
accepts_incest_with_trigger = {
OR = {
NOT = { is_close_or_extended_family_of = $CHARACTER$ } #Actually no incest here!
is_incestuous_trigger = yes
has_relation_potential_lover = $CHARACTER$
has_relation_lover = $CHARACTER$
}
save_temporary_scope_as = incest_evaluation
NOT = { #under 20 trigger is a HARD limit
guaranteed_under_20_incest_rejection_trigger = {
TARGET = scope:incest_evaluation
SEDUCER = $CHARACTER$
}
}
}
accepts_incest_with_each_other_trigger = {
$CHARACTER_2$ = {
accepts_incest_with_trigger = {
CHARACTER = $CHARACTER_1$
}
}
$CHARACTER_1$ = {
accepts_incest_with_trigger = {
CHARACTER = $CHARACTER_2$
}
}
}
#Is likely to be okay with incest broadly
likely_to_commit_incest_trigger = {
OR = {
AND = {
sexually_liberal_trigger = yes
OR = {
# Doesn't care much about social taboo
has_trait = callous
has_trait = cynical
has_trait = eccentric
# Lack of contact with other members of their attracted sex
has_trait = reclusive
has_trait = shy
# They think they can get away with it
has_trait = deceitful
}
}
# A bit of a weirdo
is_deviant_trigger = yes
# I've incested before, I will incest again!
is_incestuous_trigger = yes
# Trauma
stress_level >= 2
}
save_temporary_scope_as = incest_evaluation
NOT = { #under 20 trigger is a HARD limit
guaranteed_under_20_incest_rejection_trigger = {
TARGET = scope:incest_evaluation
SEDUCER = $CHARACTER$
}
}
}
likely_to_commit_incest_with_trigger = {
OR = {
NOT = { # Not incest
$CHARACTER_1$ = {
relation_with_character_is_incestuous_in_my_faith_trigger = { CHARACTER = $CHARACTER_2$ }
}
}
$CHARACTER_1$ = {
OR = {
AND = {
sexually_liberal_trigger = yes
OR = {
# Doesn't care much about social taboo
has_trait = callous
has_trait = cynical
has_trait = eccentric
# Lack of contact with other members of their attracted sex
has_trait = reclusive
has_trait = shy
# They think they can get away with it
has_trait = deceitful
}
# Only if the other character is also likely to accept in this case
$CHARACTER_2$ = {
sexually_liberal_trigger = yes
OR = {
# Doesn't care much about social taboo
has_trait = callous
has_trait = cynical
has_trait = eccentric
# Lack of contact with other members of their attracted sex
has_trait = reclusive
has_trait = shy
# Deceitful trigger not present here because CHARACTER_1 is assumed to be the instigator, CHARACTER_2 doesn't necessarily actively want this, so getting away with it wouldn't motivate them into doing it
is_incestuous_trigger = yes
is_deviant_trigger = yes
}
}
}
# A bit of a weirdo
is_deviant_trigger = yes
# I've incested before, I will incest again!
is_incestuous_trigger = yes
# Shared trauma
AND = {
any_relation = {
type = rival
has_relation_rival = $CHARACTER_2$
}
stress_level >= 1
}
}
save_temporary_scope_as = incest_evaluation
NOT = { #under 20 trigger is a HARD limit
guaranteed_under_20_incest_rejection_trigger = {
TARGET = scope:incest_evaluation
SEDUCER = $CHARACTER_1$
}
}
}
}
}
guaranteed_under_20_incest_rejection_trigger = {
$TARGET$ = {
NOT = { is_consort_of = $SEDUCER$ }
is_close_or_extended_family_of = $SEDUCER$
age < 20
age < $SEDUCER$.age
is_ai = yes #Players are allowed to choose
}
}
### PREGNANCY & STDs ###
possible_pregnancy_after_sex_with_character_trigger = {
trigger_if = {
limit = {
is_male = yes
$CHARACTER$ = { is_female = yes }
}
is_visibly_fertile = yes
fertility >= 0.1
$CHARACTER$ ={
is_visibly_fertile = yes
fertility >= 0.1
is_pregnant = no
}
}
trigger_if = {
limit = {
is_female = yes
$CHARACTER$ = { is_male = yes }
}
is_visibly_fertile = yes
fertility >= 0.1
is_pregnant = no
$CHARACTER$ = {
is_visibly_fertile = yes
fertility >= 0.1
}
}
}

View file

@ -0,0 +1,52 @@
#Scripted triggers relating to the Befriend Scheme
#####################################################################
# TRIGGER LIST
#####################################################################
# !!! Remember to add all new triggers with a short description here !!!
#befriend_target_is_close_to_owner_trigger <-Indicates someone is close to you already
######################################################################
# TRIGGERS
######################################################################
befriend_target_is_close_to_owner_trigger = {
OR = {
is_close_or_extended_family_of = scope:target
is_consort_of = scope:target
is_employer_of = scope:target
}
}
befriend_owner_is_close_to_target_trigger = {
OR = {
is_close_or_extended_family_of = scope:owner
is_consort_of = scope:owner
court_owner = scope:owner
}
}
befriend_scope_is_close_to_target_trigger = {
OR = {
is_close_or_extended_family_of = scope:target
is_consort_of = scope:target
has_relation_friend = scope:target
AND = {
OR = {
court_owner = scope:target
AND = {
exists = liege
liege = scope:target
}
any_vassal = {
this = scope:target
}
}
reverse_opinion = {
target = scope:target
value > 30
}
}
}
}

View file

@ -0,0 +1,931 @@

diplomacy_scheme_trigger = {
OR = {
scheme_type = befriend
scheme_type = sway
scheme_type = courting
}
}
intrigue_scheme_trigger = {
OR = {
scheme_type = murder
scheme_type = abduct
scheme_type = fabricate_hook
scheme_type = steal_back_artifact
}
}
# Should be synced with the schemes listed in can_start_hostile_scheme_against_trigger.
hostile_scheme_trigger = {
OR = {
scheme_type = murder
scheme_type = abduct
scheme_type = claim_throne
scheme_type = fabricate_hook
scheme_type = steal_back_artifact
}
}
friendly_scheme_trigger = {
OR = {
scheme_type = seduce
scheme_type = befriend
scheme_type = sway
scheme_type = courting
}
}
# Should be synced with the schemes listed in hostile_scheme_trigger.
can_start_hostile_scheme_against_trigger = {
OR = {
can_start_scheme = {
type = murder
target_character = $TARGET$
}
can_start_scheme = {
type = abduct
target_character = $TARGET$
}
can_start_scheme = {
type = claim_throne
target_character = $TARGET$
}
can_start_scheme = {
type = fabricate_hook
target_character = $TARGET$
}
can_start_scheme = {
type = steal_back_artifact
target_character = $TARGET$
}
}
}
agent_valid_to_be_discovered_by_spymaster = {
trigger_if = {
limit = {
exists = scope:target.court_owner.cp:councillor_spymaster
}
NOT = {
this = scope:target.court_owner.cp:councillor_spymaster
}
}
NOT = {
has_character_flag = free_to_scheme
}
trigger_if = {
limit = {
exists = scope:target.court_owner
}
NOR = {
reverse_has_opinion_modifier = {
target = scope:target.court_owner
modifier = scheming_against_me
}
reverse_has_opinion_modifier = {
target = scope:target.court_owner
modifier = schemed_against_me
}
}
}
}
personal_scheme_should_not_evaluate_tier_differences_trigger = {
# Your spouse doesn't care if you're a different rank than them.
scope:owner = {
NOT = { is_consort_of = scope:target }
}
# And laamps are never bothered either way.
scope:owner = { is_landless_adventurer = no }
scope:target = { is_landless_adventurer = no }
}
personal_scheme_success_compare_target_liege_tier_trigger = {
is_landed_or_landless_administrative = no
exists = liege
OR = {
is_spouse_of = liege
is_close_family_of = liege
dynasty = liege.dynasty
}
}
is_good_familial_murder_target_trigger = {
root = {
can_start_scheme = {
target_character = prev
type = murder
}
OR = {
AND = { # Psychopaths ignore opinion...
ai_greed >= very_high_positive_ai_value
ai_compassion <= very_high_negative_ai_value
has_trait = sadistic # Make sadistic people able to murder their own children
}
AND = { # Very greedy and non-compassionate characters almost ignore opinion...
ai_greed >= very_high_positive_ai_value
ai_compassion <= high_negative_ai_value
opinion = {
target = prev
value <= medium_positive_opinion
}
}
AND = { # Significantly greedy and non-compassionate characters can murder even at positive opinion
ai_greed >= high_positive_ai_value
ai_compassion < 0
opinion = {
target = prev
value <= low_positive_opinion
}
}
AND = { # Somewhat greedy characters can murder people they just barely dislike...
ai_greed >= medium_positive_ai_value
opinion = {
target = prev
value <= low_negative_opinion
}
}
AND = { # Otherwise, their opinion must be rather poor...
opinion = {
target = prev
value <= medium_negative_opinion
}
}
}
}
NOR = {
has_opinion_modifier = {
modifier = received_title_county
target = root
}
has_opinion_modifier = {
modifier = received_title_duchy
target = root
}
has_opinion_modifier = {
modifier = received_title_kingdom
target = root
}
has_opinion_modifier = {
modifier = received_title_empire
target = root
}
}
#is a valid murder target if scheme owner is in line of succession to any of target's titles or at least 3rd in line of succession to any titles the target is 1st to inherit
OR = {
any_held_title = {
tier >= root.highest_held_title_tier
place_in_line_of_succession = {
target = root
value <= {
value = 2
if = {
limit = { root.highest_held_title_tier > tier_barony }
add = 1
}
}
}
}
any_heir_title = {
NOT = { holder = root }
tier >= root.highest_held_title_tier
place_in_line_of_succession = {
target = root
value <= {
value = 2
if = {
limit = { root.highest_held_title_tier > tier_barony }
add = 1
}
}
}
}
}
}
# This trigger is a bit contrived in some way to ensure absolutely everyone gets evaluated without any early-outing
# It should always return true
# We use "count = all" and trigger_ifs to ensure that all have to be evaluated, and that all return
build_murder_targets_trigger = {
any_relation = { # Rivals are good targets for murder schemes
type = rival
count = all
trigger_if = {
limit = {
root = {
ai_honor <= low_positive_ai_value
can_start_scheme = {
target_character = prev
type = murder
}
}
}
add_to_temporary_list = murder_targets
}
}
any_relation = { # Same with nemeses
type = nemesis
count = all
trigger_if = {
limit = {
root = {
ai_honor <= medium_positive_ai_value
can_start_scheme = {
target_character = prev
type = murder
}
}
}
add_to_temporary_list = murder_targets
}
}
trigger_if = { # Greedy people have no qualms murdering their way up the succession...
limit = {
ai_greed >= low_positive_ai_value
exists = dynasty
}
dynasty = {
any_dynasty_member = {
count = all
trigger_if = {
limit = {
is_good_familial_murder_target_trigger = yes
}
add_to_temporary_list = murder_targets
}
}
}
any_close_or_extended_family_member = {
count = all
trigger_if = {
limit = {
NOT = { is_in_list = murder_targets }
is_good_familial_murder_target_trigger = yes
}
add_to_temporary_list = murder_targets
}
}
}
trigger_if = { # Greedy people want to murder their liege's high aptitude tax collector...
limit = {
ai_greed >= low_positive_ai_value
is_independent_ruler = no
exists = liege
liege = {
any_tax_collector = {
any_tax_collector_vassal = {
this = root
}
check_tax_collector_aptitude = {
CHARACTER = this
VALUE >= 4
}
add_to_temporary_list = murder_targets
}
}
}
}
trigger_if = { # Some Clan members want to murder Extolled people out of pure spite and malice
limit = {
ai_greed >= 0
ai_vengefulness >= 0
ai_compassion <= medium_negative_ai_value
house.house_head ?= {
is_ruler = yes
government_has_flag = government_is_clan
}
ai_wants_low_unity = yes
}
house = {
any_house_member = {
has_trait = extolled
add_to_temporary_list = murder_targets
}
}
}
any_consort = { # Unfaithful spouses
trigger_if = {
limit = {
root = {
ai_compassion <= 0
can_start_scheme = {
target_character = prev
type = murder
}
}
exposed_cheating_on_spouse_trigger = { SPOUSE = root }
add_to_temporary_list = murder_targets
}
}
}
trigger_if = { # Certain vassals will plot against their liege under certain conditions
limit = {
highest_held_title_tier > tier_barony
exists = liege
liege = {
tyranny >= medium_tyranny
}
opinion = {
target = liege
value <= high_negative_opinion
}
ai_rationality >= medium_positive_ai_value
}
liege = {
add_to_temporary_list = murder_targets
}
}
trigger_if = { # Murdering troublesome claimants is something you want to do...
limit = {
is_playable_character = yes
primary_title.tier >= tier_duchy
any_targeting_faction = {
faction_is_type = claimant_faction
special_character = {
add_to_temporary_list = murder_targets
}
}
}
}
trigger_if = { # Paranoid characters want to murder claimants to their titles
limit = {
has_trait = paranoid
ai_compassion <= low_negative_ai_value
ai_rationality <= 0
is_playable_character = yes
primary_title.tier >= tier_duchy
any_held_title = {
any_claimant = {
add_to_temporary_list = murder_targets
}
}
}
}
any_spouse = { # Murder infertile spouses if you've yet to have an heir (and you're heartless...)
trigger_if = {
limit = {
root = {
is_playable_character = yes
ai_compassion <= 0
ai_honor <= 0
fertility > 0.1
NOT = {
any_child = {
is_heir_of = root
}
}
can_start_scheme = {
target_character = prev
type = murder
}
}
is_ai = yes
fertility < 0.1
add_to_temporary_list = murder_targets
}
}
}
}
scheme_is_still_valid_trigger = {
scope:target = {
OR = {
exists = location
in_diplomatic_range = scope:owner
}
}
}
can_use_befriend_scheme_trigger = {
OR = {
has_perk = befriend_perk
AND = {
exists = dynasty
dynasty = {
has_dynasty_perk = fp1_adventure_legacy_5
}
target_is_vassal_or_below = $TARGET$
}
culture = { has_cultural_parameter = automatic_befriend_access }
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = struggle_unlocks_befriend_schemes_for_everyone
}
AND = {
government_has_flag = government_is_clan
is_in_same_clan_as_trigger = { CHARACTER = $TARGET$ }
house = { has_house_unity_stage = harmonious }
}
government_has_flag = government_is_nomadic
}
}
# Need to separate travel triggers from rest
can_seduce_scheme_trigger = {
$OWNER$ = {
is_adult = yes
is_imprisoned = no
OR = {
is_ai = no #Players may override their character's sexuality for the purposes of cynical seductions.
is_attracted_to_gender_of = $TARGET$
}
is_below_ai_lover_soft_cap_trigger = yes
NOR = {
has_trait = celibate
has_character_flag = is_party_baron
has_relation_lover = $TARGET$
guaranteed_under_20_incest_rejection_trigger = {
TARGET = $TARGET$
SEDUCER = $OWNER$
}
AND = {
has_character_modifier = rejected_from_marriage_bed_modifier
is_spouse_of = $TARGET$
}
}
}
$TARGET$ = {
is_adult = yes
is_imprisoned = no
is_attracted_to_gender_of = $OWNER$
NOR = {
has_character_flag = block_seduce_attempts
has_trait = intellect_bad_3
has_trait = incapable
has_trait = celibate
has_opinion_modifier = {
modifier = seduce_permanent_blocker_opinion
target = $OWNER$
}
has_opinion_modifier = {
modifier = seduce_regular_cooldown_opinion
target = $OWNER$
}
}
OR = {
exists = location
in_diplomatic_range = $OWNER$
}
trigger_if = {
limit = {
$OWNER$ = { is_ai = yes }
}
is_below_ai_lover_soft_cap_trigger = yes
trigger_if = { # Block AI from seducing lowborn nobodies in the players court
limit = {
liege ?= { is_ai = no }
NOR = {
is_courtier_of = $OWNER$
is_foreign_court_or_pool_guest_of = $OWNER$
}
}
OR = {
is_lowborn = no
is_playable_character = yes
}
}
trigger_if = { #So players don't get spammed by AI seduction
limit = { is_ai = no }
NOT = {
any_targeting_scheme = { scheme_type = seduce }
}
}
}
}
}
##################################################
# Scheme Ending Triggers
# Is this a scheme to kill someone who could be conceivably saved by something unexpected?
is_savable_murder_scheme_trigger = {
OR = {
scheme_type = murder
scheme_type = laamp_base_3011_contract_scheme
}
}
# Could & would this lover of $TARGET$
available_lover_to_sacrifice_in_murder_trigger = {
is_ruler = no
is_available_ai_adult = yes
# Filter out lovers that don't actually like you at all.
NOT = { has_trait = disloyal }
OR = {
has_trait = loyal
opinion = {
target = $TARGET$
# And frankly this is being generous.
value >= 1
}
}
}
##################################################
# Murder Intercept Triggers
# Would this character slack off from their task of guarding scope:target?
bodyguard_will_actually_do_job_trigger = {
# Basically functional.
is_ruler = no
is_physically_able_ai_adult = yes
# Can't hate their charge.
save_temporary_scope_as = char_temp
NOR = {
# Require that they don't hate their liege.
has_relation_rival = scope:target
opinion = {
target = scope:target
value <= high_negative_opinion
}
# Can't be directly involved with the scheme either.
scope:scheme = {
any_scheme_agent_character = { this = scope:char_temp }
}
scope:owner = scope:char_temp
}
}
foodtaster_will_actually_do_job_trigger = {
# Basically functional.
is_ruler = no
is_physically_able_ai_adult = yes
# Can't be directly involved with the scheme.
## We're a bit pickier here, since food tasters can't just slack off from their duties like bodyguards or cupbearers arguably can.
### You eat the food or you don't, so if you don't, you really must've planned ahead to look like you did.
save_temporary_scope_as = char_temp
NOR = {
scope:scheme = {
any_scheme_agent_character = { this = scope:char_temp }
}
scope:owner = scope:char_temp
}
}
cupbearer_will_actually_do_job_trigger = {
# Basically functional.
is_physically_able_ai_adult = yes
# Can't hate their charge.
save_temporary_scope_as = char_temp
NOR = {
# Require that they don't hate their liege.
has_relation_rival = scope:target
opinion = {
target = scope:target
value <= high_negative_opinion
}
# Can't be directly involved with the scheme either.
scope:scheme = {
any_scheme_agent_character = { this = scope:char_temp }
}
scope:owner = scope:char_temp
}
}
##################################################
# Scheme Animation Triggers
should_use_amorous_scheme_animation_trigger = {
OR = {
scheme_type = seduce
scheme_type = elope
scheme_type = courting
}
}
##################################################
# Agent Invite Triggers
would_agent_accept_petty_bribes_against_target_trigger = {
exists = scope:scheme
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_character
}
NOT = {
scope:recipient = { is_parent_of = scope:scheme.scheme_target_character }
}
}
trigger_if = {
limit = {
exists = scope:scheme.scheme_target_title
}
NOT = {
scope:recipient = { is_parent_of = scope:scheme.scheme_target_title.holder }
}
}
}
would_actor_consider_dramatic_enticement_trigger = {
scope:actor = {
OR = {
is_ai = no
has_trait = humble
has_trait = content
has_trait = profligate
AND = {
has_trait = vengeful
has_relation_rival = scope:recipient
}
AND = {
has_trait = impatient
NOR = {
has_trait = arrogant
has_trait = ambitious
}
}
}
}
}
actor_has_valid_de_jure_enticement_county_trigger = {
holder = scope:actor
tier = tier_county
NOT = { this = scope:actor.capital_county }
}
actor_has_valid_claimed_enticement_county_trigger = {
holder = scope:actor
tier = tier_county
NOT = { this = scope:actor.capital_county }
}
##################################################
# Can Add Agent to Scheme Triggers
is_valid_agent_standard_trigger = {
# The usual standard restrictions.
is_adult = yes
is_imprisoned = no
# Can't be an existing agent in any scheme.
save_temporary_scope_as = char_temp
scope:owner = {
NOT = {
any_scheme = {
any_scheme_agent_character = { this = scope:char_temp }
}
}
}
}
char_can_fit_into_scheme_trigger = {
save_temporary_scope_as = char_temp
$SCHEME$ = {
any_scheme_agent_slot = {
is_filled = no
save_temporary_scope_as = slot_temp
}
scope:char_temp = { is_valid_as_agent_in_slot = scope:slot_temp }
}
}
##################################################
# Scheme APA Triggers
scheme_apa_apply_modifier_plus_secrecy_trigger = {
#TODO_CD_EP3_ERCC; ask for scheme secrecy trigger.
scheme_apa_apply_modifier_trigger = { MODIFIER = $MODIFIER$ }
}
scheme_apa_apply_modifier_trigger = {
NOR = {
has_variable = scheme_pulse_action_on_cooldown
has_scheme_modifier = $MODIFIER$
}
}
scheme_apa_apply_positive_progress_trigger = {
NOT = { has_variable = scheme_pulse_action_on_cooldown }
# How many days in before we want to allow progress gains?
scheme_duration_days >= 365
}
scheme_apa_apply_negative_progress_trigger = {
NOT = { has_variable = scheme_pulse_action_on_cooldown }
save_temporary_scope_as = scheme
scheme_progress > scheme_progress_33
}
##################################################
# Agent Availability Triggers
can_have_agent_hitman_trigger = { always = yes }
can_have_agent_assassin_trigger = { always = yes }
can_have_agent_lookout_trigger = { always = yes }
can_have_agent_infiltrator_trigger = { always = yes }
can_have_agent_footpad_trigger = { always = yes }
can_have_agent_alibi_trigger = { always = yes }
can_have_agent_thug_trigger = { always = yes }
can_have_agent_comrade_in_arms_trigger = { always = yes }
can_have_agent_socialite_trigger = { always = yes }
can_have_agent_musician_trigger = { always = yes }
can_have_agent_tumbler_trigger = { always = yes }
can_have_agent_poet_trigger = { always = yes }
can_have_agent_gabbler_trigger = { always = yes }
can_have_agent_shill_trigger = { always = yes }
can_have_agent_diplomat_trigger = { always = yes }
can_have_agent_justiciar_trigger = { always = yes }
can_have_agent_justiciar_speed_trigger = { always = yes }
can_have_agent_scribe_trigger = { always = yes }
can_have_agent_cleric_trigger = { always = yes }
can_have_agent_theologian_trigger = { always = yes }
can_have_agent_herald_trigger = { always = yes }
can_have_agent_wolf_hunter_trigger = { always = yes }
can_have_agent_thief_trigger = { always = yes }
can_have_agent_tutor_trigger = { always = yes }
can_have_agent_poisoner_trigger = {
domicile ?= { has_domicile_parameter = camp_unlocks_poisoner_scheme_agents }
}
can_have_agent_muscle_trigger = { always = yes }
can_have_agent_drillmaster_trigger = { always = yes }
can_have_agent_tracker_trigger = { always = yes }
can_have_agent_physic_trigger = { always = yes }
can_have_agent_smith_trigger = { always = yes }
can_have_agent_ambusher_trigger = { always = yes }
can_have_agent_bodyguard_trigger = { always = yes }
can_have_agent_scout_trigger = { always = yes }
can_have_agent_outrider_trigger = { always = yes }
can_have_agent_bookkeeper_trigger = { always = yes }
can_have_agent_bailiff_trigger = { always = yes }
can_have_agent_draughtsman_trigger = { always = yes }
can_have_agent_planner_trigger = { always = yes }
can_have_agent_supplier_trigger = { always = yes }
can_have_agent_outcast_trigger = { always = yes }
can_have_agent_wrangler_trigger = { always = yes }
can_have_agent_decoy_trigger = { always = yes }
can_have_agent_eunuch_trigger = { always = yes }
can_have_agent_wrangler_speed_trigger = { always = yes }
can_have_agent_theologian_success_trigger = { always = yes }
can_have_agent_cleric_success_trigger = { always = yes }
can_have_agent_lookout_success_trigger = { always = yes }
can_have_agent_lookout_speed_trigger = { always = yes }
##################################################
# Countermeasure Triggers
# Does a specific countermeasure apply to you?
countermeasure_parametre_applies_againt_char_trigger = {
$SCHEME_TARGET$.host ?= {
has_scheme_countermeasure_parameter = $PARAMETER$
# Don't apply countermeasures vs. ourselves.
NOT = { this = $SCHEME_OWNER$ }
# And if the countermeasure only affects the host, then restrict it.
trigger_if = {
limit = { has_scheme_countermeasure_parameter = countermeasure_only_affects_court_holder }
this = $SCHEME_TARGET$
}
}
}
# Can a character adopt defensive measures against hostile schemes?
can_set_own_countermeasures_trigger = {
custom_tooltip = {
OR = {
# You can only set them for your home court.
host = prev
# And then we use this in here so we can valid
## ... valid what, Ewan? _What can we valid_? You never finished your sentence and now we will never know.
is_ruler = no
}
text = can_set_own_countermeasures_trigger.tt
}
}
# Used in scripted modifiers to determine if the AI should be deploying countermeasures that reduce secrecy or generally affect success chance.
should_ai_take_preemptive_countermeasures_trigger = {
# Don't do this if we've already deployed countermeasures.
NOT = { has_scheme_countermeasure_parameter = has_any_countermeasure_active }
any_targeting_scheme = {
# Make sure we'd need to do this at all.
has_variable = apply_countermeasures
# And we don't want to face schemes that're already at a later stage.
is_scheme_exposed = no
# Buuuut also give them their grace period to get started.
has_variable = secrecy_grace_period
var:secrecy_grace_period <= 0
}
}
##################################################
# Countermeasure Access Triggers
# This trigger means that a character will only ever have access to the best version of a given countermeasure.
## Please note that some tiers may be inaccessible: they're set up so they can be hooked in to stuff, but we haven't assigned them all out straight away.
## Use them if you want them but don't feel obligated, basically.
scheme_countermeasure_access_select_best_tier_trigger = {
save_temporary_scope_value_as = {
name = checked_tier
value = $TIER$
}
trigger_if = {
limit = { scheme_countermeasure_access_t4_$COUNTERMEASURE$_trigger = yes }
scope:checked_tier = 4
}
trigger_else_if = {
limit = { scheme_countermeasure_access_t3_$COUNTERMEASURE$_trigger = yes }
scope:checked_tier = 3
}
trigger_else_if = {
limit = { scheme_countermeasure_access_t2_$COUNTERMEASURE$_trigger = yes }
scope:checked_tier = 2
}
trigger_else = { scope:checked_tier = 1 }
}
# Can this character access the higher tiers of the Bounties for Whispers countermeasure?
scheme_countermeasure_access_t2_bounties_for_whispers_trigger = {
OR = {
has_trait_with_flag = trait_unlocks_t2_countermeasures
culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures }
}
}
scheme_countermeasure_access_t3_bounties_for_whispers_trigger = {
always = no
}
scheme_countermeasure_access_t4_bounties_for_whispers_trigger = {
OR = {
culture = { has_cultural_parameter = cultrad_unlocks_t4_bounties_for_whispers }
faith = { has_doctrine_parameter = tenet_unlocks_t4_bounties_for_whispers }
}
}
# Can this character access the higher tiers of the Arbitrary Arrests countermeasure?
scheme_countermeasure_access_t2_arbitrary_arrests_trigger = {
OR = {
has_trait_with_flag = trait_unlocks_t2_countermeasures
has_trait_with_flag = trait_unlocks_t2_arbitrary_arrests
culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures }
}
}
scheme_countermeasure_access_t3_arbitrary_arrests_trigger = {
culture = { has_cultural_parameter = cultrad_unlocks_t3_arbitrary_arrests }
}
scheme_countermeasure_access_t4_arbitrary_arrests_trigger = {
always = no
}
# Can this character access the higher tiers of the Strengthen Sentries countermeasure?
scheme_countermeasure_access_t2_strengthen_sentries_trigger = {
OR = {
has_trait_with_flag = trait_unlocks_t2_countermeasures
culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures }
}
}
scheme_countermeasure_access_t3_strengthen_sentries_trigger = {
culture = { has_cultural_parameter = cultrad_unlocks_t3_strengthen_sentries }
}
scheme_countermeasure_access_t4_strengthen_sentries_trigger = {
always = no
}
# Can this character access the higher tiers of the Redouble Guards countermeasure?
scheme_countermeasure_access_t2_redouble_guards_trigger = {
OR = {
has_trait_with_flag = trait_unlocks_t2_countermeasures
culture = {
OR = {
has_cultural_parameter = cultrad_unlocks_t2_countermeasures
has_cultural_parameter = cultrad_unlocks_t2_redouble_guards
}
}
}
}
scheme_countermeasure_access_t3_redouble_guards_trigger = {
culture = { has_cultural_parameter = cultrad_unlocks_t3_redouble_guards }
}
scheme_countermeasure_access_t4_redouble_guards_trigger = {
always = no
}
# Can this character access the higher tiers of the Withdraw from View countermeasure?
scheme_countermeasure_access_t2_withdraw_from_view_trigger = {
OR = {
OR = {
has_trait_with_flag = trait_unlocks_t2_countermeasures
culture = { has_cultural_parameter = cultrad_unlocks_t2_countermeasures }
}
has_trait_with_flag = trait_unlocks_t2_withdraw_from_view
}
}
scheme_countermeasure_access_t3_withdraw_from_view_trigger = {
OR = {
has_trait_with_flag = trait_unlocks_t3_withdraw_from_view
faith = { has_doctrine_parameter = tenet_unlocks_t3_withdraw_from_view }
}
}
scheme_countermeasure_access_t4_withdraw_from_view_trigger = {
has_trait_with_flag = trait_unlocks_t4_withdraw_from_view
}
scheme_generic_ai_blocker_trigger = {
any_scheme = {
OR = {
scheme_type = befriend
scheme_type = sway
scheme_type = seduce
scheme_type = courting
scheme_type = elope
scheme_type = learn_language
scheme_type = teach_governor
}
}
}

View file

@ -0,0 +1,134 @@
#Controls the can_raid rule.
can_raid_trigger = {
OR = {
# Government logic.
government_has_flag = government_can_raid_rule
## Admin - Frontier themes
vassal_contract_has_flag = admin_theme_can_raid
## Clan - Ghazi
vassal_contract_has_flag = vassal_contract_allow_raiding
# Faith Logic.
faith = { has_doctrine_parameter = faith_can_raid }
# Dynasty logic.
dynasty ?= {
OR = {
can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = yes
can_raid_dynasty_modifiers_that_enable_raiding_overland_list_trigger = yes
}
}
# House logic.
house ?= {
OR = {
can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = yes
can_raid_house_modifiers_that_enable_raiding_overland_list_trigger = yes
}
}
# Cultural logic.
## With restrictions.
AND = {
can_raid_cultural_parameter_requirements_for_non_tribals_trigger = yes
culture = {
OR = {
has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal
has_cultural_parameter = culture_can_raid_over_land_even_if_feudal
}
}
}
## Without restrictions.
culture = {
OR = {
has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal_no_restrictions
has_cultural_parameter = culture_can_raid_over_land_even_if_feudal_no_restrictions
}
}
# Trait logics.
## With restrictions.
AND = {
can_raid_trait_flag_standard_requirements_trigger = yes
has_trait_with_flag = trait_enable_raiding_per_standard_restrictions
}
## Without restrictions.
has_trait_with_flag = trait_enable_raiding_without_restrictions
}
# Some faiths prohibit this.
OR = {
NOR = {
faith = { has_doctrine_parameter = holy_wars_forbidden }
government_has_flag = government_is_landless_adventurer
}
# But not for Nomads
government_has_flag = government_is_nomadic
}
}
# Here so that you can plug in whatever dynasty modifiers you want without overwriting the whole scripted rule trigger.
can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = {
OR = {
# Yes, I realise the OR is redundant till someone else puts something in here. Shoosh.
has_dynasty_modifier = fp1_legacy_of_piracy_modifier
}
}
can_raid_dynasty_modifiers_that_enable_raiding_overland_list_trigger = {
OR = {
# Yes, I realise the OR is redundant till someone else puts something in here. Shoosh.
# Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it.
always = no
}
}
# Here so that you can plug in whatever house modifiers you want without overwriting the whole scripted rule trigger.
can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = {
OR = {
# Yes, I realise the OR is redundant till someone else puts something in here. Shoosh.
# Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it.
always = no
}
}
can_raid_house_modifiers_that_enable_raiding_overland_list_trigger = {
OR = {
# Yes, I realise the OR is redundant till someone else puts something in here. Shoosh.
# Always = no because we have no vanilla use-case atm — the assumption is that modders'll overwrite it.
always = no
}
}
# Here so that you can tweak the rules on how non-tribals raid via CulTrad without overriding the whole scripted rule trigger.
can_raid_cultural_parameter_requirements_for_non_tribals_trigger = {
OR = {
highest_held_title_tier <= tier_duchy
realm_size <= minor_realm_size
}
}
# Here so that you can tweak the rules on which innovations allow raiding without overriding the whole scripted rule trigger.
can_ran_raid_overseas_cultural_innovations_trigger = {
OR = {
has_innovation = innovation_longboats
has_innovation = innovation_african_canoes
}
}
# Here so that you can tweak the rules on characters with a trait that lets them raid under certain circumstances raid without overriding the whole scripted rule trigger.
can_raid_trait_flag_standard_requirements_trigger = {
# We don't use this in vanilla, so we don't have any actual requirements atm.
always = yes
}
can_raid_across_water_trigger = {
OR = {
# Culture logic.
culture = {
OR = {
can_ran_raid_overseas_cultural_innovations_trigger = yes
has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal
has_cultural_parameter = culture_can_raid_at_sea_even_if_feudal_no_restrictions
}
}
# Dynasty logic.
dynasty ?= { can_raid_dynasty_modifiers_that_enable_raiding_overseas_list_trigger = yes }
# House logic.
house ?= { can_raid_house_modifiers_that_enable_raiding_overseas_list_trigger = yes }
#Is Hereward.
has_trait = the_wake
}
}

View file

@ -292,7 +292,7 @@ can_be_granted_titles_by = { #This is set up with trigger-ifs to allow for nice
limit = {
is_ruler = no #Rulers can always get additional titles
is_theocratic_lessee = no #Theocratic lessees use other gender checks
NOT = { $RULER$ = { has_government = administrative_government } }
NOT = { $RULER$ = { government_has_flag = government_is_administrative } }
NOT = {
$RULER$.faith = {
has_dominant_ruling_gender = scope:title_grantee
@ -318,7 +318,7 @@ can_be_granted_titles_by = { #This is set up with trigger-ifs to allow for nice
is_ruler = no #Rulers can always get additional titles
is_theocratic_lessee = no #Theocratic lessees use other gender checks
$RULER$ = {
has_government = administrative_government
government_has_flag = government_is_administrative
NOT = { has_realm_law = equal_law }
}
}
@ -373,8 +373,9 @@ activate_disease_data_tracking_trigger = {
vassal_contract_can_be_modified_trigger = {
custom_description = {
text = vassal_contract_can_be_modified
vassal_contract_has_modifiable_obligations = yes
vassal_contract_is_blocked_from_modification = no
is_vassal_of = liege # To ensure we are actually a vassal and not a tributary
subject_contract_has_modifiable_obligations = yes
subject_contract_is_blocked_from_modification = no
}
}

View file

@ -0,0 +1,595 @@

#Triggers revolving around secrets
#has_secret_unknown_by_root_trigger
#Being_blackmailed_by_root_trigger
#is_blackmailable_secret_trigger
#secret_is_always_interesting_trigger
has_secret_unknown_by_root_trigger = {
any_secret = {
NOT = {
is_known_by = root
}
}
}
being_blackmailed_by_root_trigger = {
root = {
OR = {
has_hook_of_type = {
target = prev
type = weak_blackmail_hook
}
has_hook_of_type = {
target = prev
type = strong_blackmail_hook
}
}
}
}
is_blackmailable_secret_trigger = { #Should not include is known
$PARTICIPANT$ = { save_temporary_scope_as = is_blackmailable_secret_participant }
$BLACKMAILER$ = { save_temporary_scope_as = is_blackmailable_secret_blackmailer }
is_shunned_or_criminal_for = scope:is_blackmailable_secret_participant
can_be_exposed_by = scope:is_blackmailable_secret_blackmailer
#Can we actually add a hook of the correct type
trigger_if = {
limit = { is_shunned_for = scope:is_blackmailable_secret_participant }
custom_description = {
text = "already_has_a_superior_hook"
subject = scope:is_blackmailable_secret_blackmailer
object = scope:is_blackmailable_secret_participant
scope:is_blackmailable_secret_blackmailer = {
can_add_hook = {
type = weak_blackmail_hook
target = scope:is_blackmailable_secret_participant
}
}
}
}
trigger_if = {
limit = { is_criminal_for = scope:is_blackmailable_secret_participant }
custom_description = {
text = "already_has_a_superior_hook"
subject = scope:is_blackmailable_secret_blackmailer
object = scope:is_blackmailable_secret_participant
scope:is_blackmailable_secret_blackmailer = {
can_add_hook = {
type = strong_blackmail_hook
target = scope:is_blackmailable_secret_participant
}
}
}
}
#If an AI promised not to reveal a secret they have to be very dishonest to do it
trigger_if = {
limit = { exists = var:promised_not_to_reveal}
custom_description = {
text = "promised_not_to_reveal_secret"
var:promised_not_to_reveal = scope:is_blackmailable_secret_blackmailer
scope:is_blackmailable_secret_blackmailer = {
is_ai = yes
ai_honor <= medium_negative_ai_value
}
}
}
#Some things you can't blackmail others about
custom_description = {
text = "cant_blackmail_another_witch"
subject = scope:is_blackmailable_secret_blackmailer
NAND = {
secret_type = secret_witch
scope:is_blackmailable_secret_blackmailer = { is_witch_trigger = yes }
}
}
# Can't blackmail a crypto-religionist of the same faith
trigger_if = {
limit = { secret_type = secret_crypto_religionist }
custom_description = {
text = cannot_blackmail_crypto_religionist_of_same_faith
scope:is_blackmailable_secret_blackmailer = {
NOR = {
exists = secret_faith
secret_faith ?= scope:is_blackmailable_secret_participant.secret_faith
}
}
}
}
trigger_if = {
limit = { secret_type = secret_lover }
custom_description = {
text = cannot_blackmail_own_lover_secret
NOT = { secret_target = scope:is_blackmailable_secret_blackmailer }
}
}
trigger_if = {
limit = {
secret_type = secret_unmarried_illegitimate_child
}
custom_description = {
text = cannot_blackmail_over_own_bastard
secret_target = {
NOR = {
mother = scope:is_blackmailable_secret_blackmailer
real_father = scope:is_blackmailable_secret_blackmailer
}
}
}
}
trigger_if = {
limit = {
secret_type = secret_disputed_heritage
}
custom_description = {
text = cannot_blackmail_over_own_bastard
NOT = {
secret_target = {
OR = {
mother = scope:is_blackmailable_secret_blackmailer
real_father = scope:is_blackmailable_secret_blackmailer
}
}
}
}
}
}
secret_is_always_interesting_trigger = { #Even if they can't be used for blackmail
OR = {
secret_type = secret_lover
secret_type = secret_murder
secret_type = secret_murder_attempt
secret_type = secret_disputed_heritage
secret_type = secret_unmarried_illegitimate_child
secret_type = secret_crypto_religionist
}
}
#Checks whether a secret would incriminate its secret target if known
#Parameters:
# TARGET
secret_is_incriminating_trigger = {
OR = {
exists = secret_target
any_secret_participant = {
count >= 1
}
}
OR = {
AND = {
secret_type = secret_lover
secret_target = $TARGET$
}
AND = {
secret_type = secret_disputed_heritage
OR = {
secret_target = $TARGET$
secret_target.mother = $TARGET$
any_secret_participant = {
this = $TARGET$
}
}
}
AND = {
secret_type = secret_unmarried_illegitimate_child
OR = {
secret_target = $TARGET$
secret_target.mother = $TARGET$
any_secret_participant = {
this = $TARGET$
}
}
}
}
}
###Expose secret triggers###
block_exposed_secret_general_notifications = { #Because you're already getting your own, special event
OR = {
#Is one of the involved parties
this = scope:secret_exposer
this = scope:exposed_secret_character
this = scope:exposed_secret_owner
AND = {
exists = scope:exposed_secret_target
this = scope:exposed_secret_target
}
#For lover secret: No events for spouses or lovers, they get infidelity_confrontation.1000 instead
trigger_if = {
limit = { scope:secret = { secret_type = secret_lover } }
OR = {
is_spouse_of = scope:exposed_secret_owner
has_relation_lover = scope:exposed_secret_owner
is_spouse_of = scope:exposed_secret_target
has_relation_lover = scope:exposed_secret_target
}
}
#For bastard secrets: No events for child mother and real father
trigger_else_if = {
limit = {
scope:secret = {
OR = {
secret_type = secret_disputed_heritage
secret_type = secret_unmarried_illegitimate_child
}
}
}
OR = {
scope:exposed_secret_target.mother = scope:show_me #mother
scope:exposed_secret_target.real_father = scope:show_me #real father
}
}
trigger_else = { } #Just to avoid errors
}
}
show_me_exposed_secret_event_trigger = {
expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target
block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character
#Is someone who cares
OR = {
is_spouse_of_even_if_dead = scope:exposed_secret_character
is_close_family_of = scope:exposed_secret_character
AND = {
exists = scope:exposed_secret_character.player_heir
scope:exposed_secret_character = { player_heir = scope:show_me }
}
AND = {
scope:exposed_secret_character = { exists = liege }
scope:exposed_secret_character = { liege = scope:show_me }
}
AND = { #For bastards, fathers also care
$SECRET$ = { secret_type = secret_disputed_heritage }
exists = scope:father
this = scope:father
}
}
}
show_me_exposed_secret_feed_message_trigger = {
expose_secret_scope_saving_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } #Saves show_me, exposed_secret_character, exposed_secret_owner & exposed_secret_target
block_exposed_secret_general_notifications = no #Isn't the owner/target/exposer or other involved character
NOT = { show_me_exposed_secret_event_trigger = { SECRET = $SECRET$ CHARACTER = $CHARACTER$ } } #I.e. hasn't already been notified
}
expose_secret_scope_saving_trigger = { #Because we save the same scopes in two triggers that need to be the same
save_temporary_scope_as = show_me
$CHARACTER$ = {
save_temporary_scope_as = exposed_secret_character #Most of the time this is owner, but for secrets with targets/other involved parties it can also be them
}
$SECRET$ = {
secret_owner = { save_temporary_scope_as = exposed_secret_owner }
trigger_if = {
limit = { exists = secret_target }
secret_target = { save_temporary_scope_as = exposed_secret_target }
}
}
}
###Triggers for give_random_likely_secret_effect
give_random_likely_secret_murder_attempt_victim_trigger = {
is_ai = yes
save_temporary_scope_as = victim
scope:murderer = {
NOT = {
any_secret = {
secret_type = secret_murder_attempt
secret_target = scope:victim
}
}
}
}
give_random_likely_secret_lover_trigger = {
is_adult = yes
is_ai = yes
NOT = { any_relation = { type = lover this = scope:lover_1 } }
NOT = { is_spouse_of = scope:lover_1 }
NOT = { has_trait = celibate }
opinion = {
target = scope:lover_1
value >= 20
}
reverse_opinion = {
target = scope:lover_1
value >= 20
}
save_temporary_scope_as = lover_2
possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 }
}
give_random_likely_secret_incestous_lover_trigger = {
is_adult = yes
is_ai = yes
NOT = { any_relation = { type = lover this = scope:lover_1 } }
NOT = { is_spouse_of = scope:lover_1 }
OR = {
save_temporary_scope_as = lover_2
possible_mutual_interest_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 }
AND = {
matching_gender_and_sexuality_trigger = { CHARACTER_1 = scope:lover_1 CHARACTER_2 = scope:lover_2 }
opinion = {
target = scope:lover_1
value >= 40
}
reverse_opinion = {
target = scope:lover_1
value >= 40
}
}
}
}
#Simple Check if a given Secret Type is blackmailable
# NOTE THAT THIS CAN ONLY EVER CORRECTLY EVALUATE SECRETS THAT THE TARGET DOES NOT ALREADY HAVE
# ALSO NOTE THAT IT WILL ONLY EVER RETURN TRUE FOR SECRETS THAT ARE NOT RELIANT ON HAVING A VALID TARGET
secret_type_is_blackmailable_simple_trigger = {
# TYPE
# TARGET
save_temporary_scope_value_as = {
name = type_flag
value = flag:$TYPE$
}
trigger_if = {
limit = {
scope:type_flag = flag:secret_deviant
}
secret_deviant_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_deviant_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_deviant_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_homosexual
}
secret_homosexual_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_homosexual_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_homosexual_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_cannibal
}
secret_cannibal_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_cannibal_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_cannibal_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_non_believer
}
secret_non_believer_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_non_believer_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_non_believer_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_incest
}
secret_incest_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_incest_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_incest_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_witch
}
secret_witch_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_witch_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_witch_is_criminal_trigger = {
OWNER = $TARGET$
}
}
NOT = {
$BLACKMAILER$ = { is_witch_trigger = yes }
}
}
trigger_else_if = {
limit = {
scope:type_flag = flag:secret_crypto_religionist
}
secret_crypto_religionist_is_valid_trigger = {
OWNER = $TARGET$
}
OR = {
secret_crypto_religionist_is_shunned_trigger = {
OWNER = $TARGET$
}
secret_crypto_religionist_is_criminal_trigger = {
OWNER = $TARGET$
}
}
}
trigger_else = { #Murder stuff, Bastard secrets, etc.
always = no
}
}
random_blackmailable_secret_can_be_added_simple_trigger = {
$TARGET$ = { save_temporary_scope_as = target }
OR = {
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_deviant
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_deviant
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_homosexual
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_homosexual
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_cannibal
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_cannibal
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_non_believer
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_non_believer
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_incest
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_incest
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_witch
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_witch
}
}
}
}
AND = {
secret_type_is_blackmailable_simple_trigger = {
TYPE = secret_crypto_religionist
TARGET = scope:target
BLACKMAILER = $BLACKMAILER$
}
scope:target = {
NOT = {
any_secret = {
secret_type = secret_crypto_religionist
}
}
}
}
}
}
# If during the council task find secret's the spymaster can fabricate a hook on the target
spymaster_task_courtier_valid_for_hook_fabrication_trigger = {
is_available_ai_adult = yes
save_temporary_scope_as = target_check
NOR = {
this = scope:councillor
root = {
has_hook = scope:target_check
}
root = {
any_scheme = {
scheme_target_character = scope:target_character
scheme_is_character_agent = scope:target_check
}
}
any_secret = { # Should prioritise actually finding Secrets
is_known_by = root
}
}
}

View file

@ -5,6 +5,7 @@
# SECRET DEVIANT
secret_deviant_is_valid_trigger = {
$OWNER$ = {
is_adult = yes
NOT = {
has_trait = deviant
}
@ -33,6 +34,7 @@ secret_deviant_is_criminal_trigger = {
# SECRET HOMOSEXUAL
secret_homosexual_is_valid_trigger = {
$OWNER$ = {
is_adult = yes
NOT = {
has_trait = sodomite
}
@ -323,6 +325,7 @@ secret_non_believer_is_criminal_trigger = {
# SECRET INCEST
secret_incest_is_valid_trigger = {
$OWNER$ = {
is_adult = yes
NOT = {
has_trait = incestuous
}
@ -424,8 +427,8 @@ secret_coup_plotter_is_valid_trigger = {
# Can't coup yourself
NOT = { $OWNER$ = $TARGET$ }
# Both of y'all must still be admin
$OWNER$ = { has_government = administrative_government }
$TARGET$ = { has_government = administrative_government }
$OWNER$ = { government_has_flag = government_is_administrative }
$TARGET$ = { government_has_flag = government_is_administrative }
}
secret_coup_plotter_is_criminal_trigger = {

View file

@ -0,0 +1,18 @@

###TRIGGER LIST
# has_adult_friendly_unlanded_sibling_trigger
has_adult_friendly_unlanded_sibling_trigger = {
any_sibling = {
is_landed_or_landless_administrative = no
is_adult = yes
opinion = {
target = root
value > 30
}
}
}

View file

@ -0,0 +1,79 @@

##################################################
# GENERIC TRIGGERS
# Note: this is a very stripped down trigger set. It's expected that it'll be parsed through something that parses out more typically unsuitable candidates (e.g., prisoners under most circumstances).
can_start_single_combat_trigger = {
# Check for the usual stuff.
can_start_single_combat_eligibility_checks_trigger = yes
# And filter out those who can never be in single combat.
can_start_single_combat_banned_checks_trigger = no
}
can_start_single_combat_eligibility_checks_trigger = {
# Remove children and the cripplingly-old.
is_adult = yes
custom_description = {
text = banned_from_combat_old_and_frail
NOT = {
AND = {
age >= 70
prowess < 10
}
}
}
# Filter out traits.
NOR = {
has_trait = pregnant
has_trait = incapable
has_trait = blind
}
# Check other scripted triggers
has_contagious_deadly_disease_trigger = no
}
can_start_single_combat_banned_checks_trigger = {
# Currently, we just *always* filter anyone who's already in a bout.
exists = var:engaged_in_single_combat
}
# Does the character have a trait with a notably beneficial special combat move?
has_relevant_special_single_combat_trait_trigger = {
OR = {
has_trait = lifestyle_blademaster
has_trait = lifestyle_hunter
has_trait = berserker
has_trait = shieldmaiden
has_trait = varangian
has_trait = deviant
has_trait = viking
}
}
##################################################
# MOVE TRIGGERS
single_combat_location_has_crocodilians_trigger = {
scope:sc_defender.location = {
# First, we look at supra regions.
OR = {
geographical_region = world_africa_west
geographical_region = world_africa_east
geographical_region = world_middle_east_persia
geographical_region = world_burma
geographical_region = world_india
}
# Then, if any of those apply, drill down.
OR = {
# Either coastal.
is_coastal = yes
is_riverside_province = yes
# Or has a suitable terrain.
terrain = oasis
terrain = jungle
terrain = wetlands
terrain = floodplains
terrain = farmlands
}
}
}

View file

@ -0,0 +1,11 @@

respected_liege_0002_bad_traits_trigger = {
OR = {
has_trait = arbitrary
has_trait = shy
has_trait = greedy
has_trait = sadistic
has_trait = callous
}
}

View file

@ -0,0 +1,321 @@

# This trigger is used when offering the player a choice between two stress outlets for a stress threshold event.
# The stress threshold event will add character flags from this list, based on a character's personality and relevance to the event, until two have been selected.
has_two_stress_threshold_options = {
calc_true_if = {
amount >= 2
has_character_flag = stress_threshold_option_drunkard
has_character_flag = stress_threshold_option_hashishiyah
has_character_flag = stress_threshold_option_rakish
has_character_flag = stress_threshold_option_reclusive
has_character_flag = stress_threshold_option_irritable
has_character_flag = stress_threshold_option_flagellant
has_character_flag = stress_threshold_option_profligate
has_character_flag = stress_threshold_option_improvident
has_character_flag = stress_threshold_option_contrite
has_character_flag = stress_threshold_option_comfort_eater
has_character_flag = stress_threshold_option_inappetetic
has_character_flag = stress_threshold_option_journaller
has_character_flag = stress_threshold_option_confider
has_character_flag = stress_threshold_option_athletic
has_character_flag = stress_threshold_option_conversion
has_character_flag = stress_threshold_option_depression
}
}
# Check if the player already has two stress coping traits ( we don't want to give any more than that! )
has_two_stress_coping_traits_trigger = {
calc_true_if = {
amount >= 2
has_trait = drunkard
has_trait = hashishiyah
has_trait = rakish
has_trait = reclusive
has_trait = irritable
has_trait = flagellant
has_trait = profligate
has_trait = improvident
has_trait = contrite
has_trait = comfort_eater
has_trait = inappetetic
has_trait = journaller
has_trait = confider
has_trait = athletic
}
}
has_a_stress_coping_trait_trigger = {
OR = {
has_trait = drunkard
has_trait = hashishiyah
has_trait = rakish
has_trait = reclusive
has_trait = irritable
has_trait = flagellant
has_trait = profligate
has_trait = improvident
has_trait = contrite
has_trait = comfort_eater
has_trait = inappetetic
has_trait = journaller
has_trait = confider
has_trait = athletic
}
}
has_a_bad_stress_coping_trait_trigger = {
OR = {
has_trait = drunkard
has_trait = hashishiyah
has_trait = rakish
has_trait = irritable
has_trait = flagellant
has_trait = profligate
has_trait = contrite
has_trait = comfort_eater
has_trait = inappetetic
}
}
can_be_drunkard = {
is_adult = yes
NOR = { # Cannot be Temperate or already have a Substance Abuse trait.
has_trait = drunkard
has_trait = hashishiyah
has_trait = temperate
}
faith = { # Cannot be Muslim ( some Muslims did actually drink, but ideally we want Muslims to be Hashishiyahs instead of Drunkards because it is more thematic).
NOT = {
religion_tag = islam_religion
}
}
}
can_be_hashishiyah = {
is_adult = yes
NOR = { # Cannot be Temperate or already have a Substance Abuse trait.
has_trait = drunkard
has_trait = hashishiyah
has_trait = temperate
}
OR = {
# Muslims always have access to Hashish...
faith = {
religion_tag = islam_religion
}
# Otherwise you must not be located in Europe (where Hashish was relatively unknown until modern times.)
AND = {
OR = {
AND = {
exists = capital_province
capital_province = {
save_temporary_scope_as = my_home_province
}
}
AND = {
exists = liege
exists = liege.capital_province
liege = {
capital_province = {
save_temporary_scope_as = my_home_province
}
}
}
}
scope:my_home_province = {
NOT = {
geographical_region = world_europe
}
}
}
}
}
can_be_rakish = { # Must have a fitting personality or lifestyle
is_adult = yes
NOR = {
has_trait = rakish
has_sexuality = asexual
has_trait = celibate
has_trait = chaste
}
OR = {
has_trait = lustful
has_trait = arrogant
has_trait = deceitful
has_trait = gallant
has_trait = seducer
}
}
can_be_reclusive = { # Must have a fitting personality or lifestyle
NOT = { has_trait = reclusive }
OR = {
has_trait = shy
has_trait = lazy
has_trait = paranoid
has_trait = craven
has_trait = cynical
has_trait = just # Does this make sense here?
}
}
can_be_irritable = { # Must have a fitting personality or lifestyle
NOT = { has_trait = irritable }
OR = {
has_trait = wrathful
has_trait = impatient
has_trait = arrogant
has_trait = stubborn
has_trait = vengeful
has_trait = callous
}
}
can_be_flagellant = { # Must have a fitting personality or lifestyle
NOT = { has_trait = flagellant }
OR = {
has_trait = zealous
has_trait = chaste
has_trait = temperate
has_trait = humble
has_trait = lifestyle_mystic
}
}
can_be_profligate = { # Must have a fitting personality or lifestyle
NOT = { has_trait = profligate }
OR = {
has_trait = greedy
has_trait = ambitious
has_trait = arbitrary
has_trait = gregarious
has_trait = cynical
}
}
can_be_improvident = { # Must have a fitting personality or lifestyle
NOT = { has_trait = improvident }
OR = {
has_trait = generous
has_trait = forgiving
has_trait = compassionate
has_trait = just
has_trait = content
}
}
can_be_contrite = {
NOT = { has_trait = contrite }
OR = { # Must have a fitting personality or lifestyle
has_trait = deceitful
has_trait = schemer
has_trait = honest
has_trait = trusting
has_trait = humble
}
OR = { # Must have something to feel guilty about / confess to.
num_sinful_traits >= 1
any_secret = {
exists = this
can_be_exposed_by = root
}
}
}
can_be_comfort_eater = { # Must have a fitting personality.
NOR = {
has_trait = comfort_eater
has_trait = inappetetic
has_trait = temperate
}
OR = {
has_trait = gluttonous
has_trait = fickle
has_trait = arbitrary
has_trait = impatient
has_trait = calm
}
}
can_be_inappetetic = { # Must have a fitting personality.
NOR = {
has_trait = comfort_eater
has_trait = inappetetic
has_trait = gluttonous
}
OR = {
has_trait = temperate
has_trait = content
has_trait = arbitrary
has_trait = patient
has_trait = diligent
}
}
can_be_journaller = { # Must be a learned character with the scholarship lifestyle.
NOT = { has_trait = journaller }
learning >= high_skill_rating
OR = {
has_trait = scholar
has_trait = theologian
}
}
can_be_confider = { # Must have a close friend they can confide in (and be willing to confide in!)
NOR = {
has_trait = confider
has_trait = shy
has_trait = arrogant
has_trait = paranoid
}
any_relation = {
type = friend
is_available_ai_adult = yes
}
}
can_be_athletic = { # Must be willing and interested in getting out and exercising.
has_traits_that_negate_athletic_trigger = no #Are we already athletic or does any of our traits contradict athletic?
OR = {
has_trait = brave
has_trait = diligent
}
}
can_do_lustful_stress_conversion = {
is_ai = no # AI picks this way too often and makes the map predominantly Paulician/Orthodox/Karite
is_adult = yes
# So you don't end up with Sapmi or African pagans or Indian kings going "Yeah let's worship Jesus now!" and everyone else goes "Who is Jesus?"
religion = { is_in_family = rf_abrahamic }
# So the Caliph doesn't just convert after a bad day
NOT = { this = faith.religious_head }
}
can_inflict_torture = {
OR = {
has_trait = sadistic
has_trait = vengeful
has_trait = torturer
has_trait = lifestyle_hunter
has_trait = lifestyle_blademaster
}
}
can_be_eccentric = {
NOR = {
has_trait = fickle
has_trait = stubborn
has_trait = eccentric
}
}
has_witnessed_stress_coping_trait = {
NOT = { has_trait = $TRAIT$ }
var:witnessed_trait ?= flag:$TRAIT$
}

View file

@ -34,13 +34,14 @@ historical_succession_access_single_heir_succession_law_trigger = {
target = flag:flag_reformed_carolingian_empire
}
}
has_title = title:e_hindustan
#Add any subsequent exceptions here.
}
NOT = { has_government = administrative_government }
NOT = { government_has_flag = government_is_administrative }
}
historical_succession_access_single_heir_succession_law_youngest_trigger = {
NOT = { has_government = administrative_government }
NOT = { government_has_flag = government_is_administrative }
OR = {
#has_title = title:e_byzantium
#Add any subsequent exceptions here.
@ -48,7 +49,7 @@ historical_succession_access_single_heir_succession_law_youngest_trigger = {
}
historical_succession_access_single_heir_dynasty_house_trigger = {
NOT = { has_government = administrative_government }
NOT = { government_has_flag = government_is_administrative }
AND = {
has_title = title:d_bohemia
culture = { has_innovation = innovation_table_of_princes }

View file

@ -0,0 +1,268 @@

#This should list _ALL_ laamp_contracts_criminal_group-contracts
can_create_criminal_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_0041
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_1041
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_5031
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_5051
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_2041
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_3011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_3031
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_3041
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_4041
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_diplomacy_group-contracts
can_create_diplomacy_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_0001
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_0011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_0021
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_0031
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_cultural_minority_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_religious_minority_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_boost_legitimacy_contract
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_hireling_group-contracts. Martial are also stashed here.
can_create_hireling_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_1011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_2001
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_help_train_commanders_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_rid_councillor_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_gain_wanderer_contract
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_justicar_group-contracts
can_create_justicar_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_6001
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_6011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_6021
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_6031
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_learning_group-contracts
can_create_learning_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_4001
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_4011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_4021
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_4031
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_4100
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_help_faith_conversion_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_fight_faith_conversion_contract
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_intrigue_group-contracts
can_create_intrigue_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_3001
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_prison_break_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_help_find_secrets_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_help_fabricate_claim_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_help_increase_control_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_find_secret_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_eliminate_heir_contract
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_stewardship_group-contracts
can_create_stewardship_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_base_2011
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_2021
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_base_2031
employer = $EMPLOYER$
}
}
}
}
#This should list _ALL_ laamp_contracts_transport_group-contracts
can_create_transport_contract_trigger = {
$LAAMP$ = {
OR = {
can_create_task_contract = {
type_name = laamp_construction_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_treasure_hunting_contract
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_vip
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_artifact
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_gold
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_ward
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_explorer
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_animal
employer = $EMPLOYER$
}
can_create_task_contract = {
type_name = laamp_transport_explorer
employer = $EMPLOYER$
}
}
}
}

View file

@ -0,0 +1,87 @@

#########################
# Triggers for Province Terrain
#########################
is_wooded_trigger = {
OR = {
terrain = forest
terrain = jungle
terrain = taiga
}
}
is_mountainous_trigger = {
OR = {
terrain = mountains
terrain = desert_mountains
}
}
is_mountainous_or_hilly_trigger = {
OR = {
terrain = mountains
terrain = desert_mountains
terrain = hills
}
}
is_drylands_trigger = {
OR = {
terrain = drylands
terrain = steppe
}
}
is_desert_trigger = {
OR = {
terrain = desert
terrain = desert_mountains
terrain = oasis
}
}
is_drylands_or_desert_trigger = {
OR = {
terrain = drylands
terrain = steppe
terrain = desert
terrain = desert_mountains
terrain = oasis
}
}
is_wetland_trigger = {
OR = {
terrain = wetlands
terrain = floodplains
terrain = oasis
}
}
is_flatlands_trigger = {
OR = {
terrain = steppe
terrain = plains
terrain = farmlands
}
}
is_likely_to_contain_trees_trigger = {
OR = {
is_wooded_trigger = yes
is_wetland_trigger = yes
is_flatlands_trigger = yes
terrain = hills
}
}
holds_county_with_water_trigger = {
any_held_county = {
any_county_province = {
NOR = {
terrain = desert
terrain = desert_mountains
}
}
}
}

View file

@ -0,0 +1,159 @@

#########################
# Triggers for Titles
#########################
# has_mythical_founder_trigger - Does the title have a mythical or semi-mythical founder?
has_mythical_founder_trigger = {
OR = {
AND = { # Charles Martell (?)
OR = {
this = title:k_france
this = title:e_france
}
current_date > 1000.1.1
}
OR = { # Alexander
this = title:k_thessalonika
this = title:k_hellas
this = title:k_egypt
AND = {
OR = {
this = title:k_persia
this = title:e_persia
}
NOR = {
root.faith.religion = religion:islam_religion
root.faith.religion = religion:zoroastrianism_religion
}
}
this = title:k_anatolia
}
this = title:k_poland # Lech
this = title:k_bohemia # Czech
OR = { # Rus
this = title:k_white_rus
this = title:k_ruthenia
this = title:e_russia
}
OR = { # Arthur
this = title:k_england
this = title:e_britannia
}
AND = {
OR = { # Belisarius
this = title:k_italy
this = title:k_romagna
this = title:k_sardinia
this = title:k_naples
this = title:e_italy
}
root.faith = faith:orthodox
}
OR = { # Romulus
this = title:k_italy
this = title:k_romagna
this = title:k_sardinia
this = title:e_italy
this = title:e_roman_empire
}
OR = { # Ardashir
this = title:k_persia
this = title:e_persia
}
AND = { # Pharaohs
this = title:k_egypt
NOT = { root.faith.religion = religion:islam_religion }
}
AND = { # Visigothic Kings
OR = {
this = title:k_castille
this = title:k_aragon
this = title:k_navarra
this = title:k_andalusia
this = title:k_portugal
this = title:e_spain
}
NOT = { root.faith.religion = religion:islam_religion }
}
AND = { # Abd al-Rahman
OR = {
this = title:k_castille
this = title:k_aragon
this = title:k_navarra
this = title:k_andalusia
this = title:k_portugal
this = title:e_spain
}
root.faith.religion = religion:islam_religion
}
AND = { # Zenobia
OR = {
this = title:k_syria
this = title:k_mesopotamia
}
NOT = { root.faith.religion = religion:islam_religion }
}
}
}
has_too_many_held_duchies_trigger = {
highest_held_title_tier >= tier_kingdom
any_held_title = {
count >= 3
title_counts_towards_too_many_duchies_trigger = yes
}
}
title_counts_towards_too_many_duchies_trigger = {
tier = tier_duchy
is_titular = no
}
# this = title
# VASSAL = Vassal to check tier against
# LIEGE = Liege of vassal
title_lost_from_realm_on_foreign_ruler_succession_trigger = {
tier > $VASSAL$.highest_held_title_tier
exists = holder # Ignoring titles that will be created by confederate partition, cause that be magic and unlikely to make a warning anyway
holder = {
NOR = {
this = $LIEGE$
target_is_liege_or_above = $LIEGE$
government_has_flag = government_is_administrative # Ignoring because admin counts do not take it with them, but immediately resign it when they inherit a governorship
}
}
}
# Would this character ever be travelling outside of their palace walls at random for the purposes of events?
## We don't care about personality, only whether it'd be immersion breaking in principle to run into this person at random/to have an event trigger where you are randomly wandering.
character_title_allows_off_screen_wandering_trigger = {
NOR = {
# No administrative or clan emperors.
AND = {
highest_held_title_tier >= tier_empire
OR = {
government_has_flag = government_is_administrative
government_has_flag = government_is_clan
}
}
# No administrative kings.
AND = {
highest_held_title_tier = tier_kingdom
government_has_flag = government_is_administrative
}
# No religious heads.
faith.religious_head ?= this
}
}
county_held_or_vassal_to_target_trigger = {
holder ?= {
OR = {
this = $TARGET$
target_is_liege_or_above = $TARGET$
}
}
}

View file

@ -0,0 +1,256 @@
is_location_valid_for_travel_event_on_land = {
location = {
exists = county #This will exclude sea provinces, impassable provinces, river provinces, etc
}
}
is_guard_type_character_trigger = {
OR = {
has_court_position = bodyguard_court_position
has_court_position = akolouthos_court_position
is_knight_of = root
has_council_position = councillor_marshal
save_temporary_scope_as = guard_check
AND = {
root.current_travel_plan = {
scope:guard_check = { is_travel_entourage_character = yes }
}
is_available_travelling_adult = yes
is_healthy = yes
prowess > low_skill_rating
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root }
}
}
}
is_character_not_specialized_in_terrain = { #Used in character scope
save_temporary_scope_as = character_in_terrain
is_location_valid_for_travel_event_on_land = yes
location = { #Is it reasonable for us to get lost, etc in this type of terrain?
switch = {
trigger = terrain
jungle = {
scope:character_in_terrain = {
NOT = { has_trait = jungle_stalker }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = jungle_stalker }
}
}
}
desert = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
drylands = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
desert_mountains = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
oasis = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
mountains = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
wetlands = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
hills = {
scope:character_in_terrain = {
NOT = { has_trait = desert_warrior }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = desert_warrior }
}
}
}
farmlands = {
scope:character_in_terrain = {
NOT = { has_trait = open_terrain_expert }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = open_terrain_expert }
}
}
}
plains = {
scope:character_in_terrain = {
NOT = { has_trait = open_terrain_expert }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = open_terrain_expert }
}
}
}
steppe = {
scope:character_in_terrain = {
NOT = { has_trait = open_terrain_expert }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = open_terrain_expert }
}
}
}
forest = {
scope:character_in_terrain = {
NOT = { has_trait = forest_fighter }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = forest_fighter }
}
}
}
taiga = {
scope:character_in_terrain = {
NOT = { has_trait = forest_fighter }
current_travel_plan.travel_leader ?= {
NOT = { has_trait = forest_fighter }
}
}
}
}
}
}
has_sea_danger_type = {
is_sea_province = yes
OR = {
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = sea
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = coastal_sea
}
}
}
has_terrain_danger_type = {
OR = {
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = hills
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = forest
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = mountains
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = desert_mountains
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = wetlands
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = floodplains
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = drylands
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = desert
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = jungle
}
travel_danger_type = {
travel_plan = $TRAVEL$
terrain = steppe
}
}
}
is_nomadic_location_trigger = {
geographical_region = world_steppe
culture = {
OR = {
has_cultural_pillar = heritage_mongolic
has_cultural_pillar = heritage_turkic
has_cultural_pillar = heritage_ugro_permian
}
}
}
is_snowy_rural_scandinavia_location_trigger = {
location = {
OR = {
has_holding = no
has_holding_type = tribal_holding
}
geographical_region = world_europe_north
}
location_has_winter_trigger = yes
}
### EP2 BACKGROUND TRIGGERS
# Checks that a character is traveling to or from an activity and is not currently participating in an activity
is_travelling_not_at_activity = {
is_travelling = yes
trigger_if = {
limit = { exists = involved_activity }
has_activity_state = travel
}
}
# Checks that a character is traveling, but currently at an activity and not actually moving around the map
is_travelling_at_activity = {
is_travelling = yes
trigger_if = {
limit = { exists = involved_activity }
NOT = { has_activity_state = travel }
}
}
#update this if a new travel point of interest is added to the game, although currently it's only used in 1 laamp task contract
has_any_travel_poi_trigger = {
OR = {
has_travel_point_of_interest = poi_capitals
has_travel_point_of_interest = poi_special_buildings_martial
has_travel_point_of_interest = poi_special_buildings_learning
has_travel_point_of_interest = poi_special_buildings_religious
has_travel_point_of_interest = poi_special_buildings_diplomatic
has_travel_point_of_interest = poi_grand_city
has_travel_point_of_interest = poi_special_buildings_wonder
has_travel_point_of_interest = poi_special_buildings_economic
has_travel_point_of_interest = poi_mausoleum_at_halicarnassus
has_travel_point_of_interest = poi_lighthouse_of_alexandria
has_travel_point_of_interest = poi_natural_feature
}
}

View file

@ -0,0 +1,16 @@
should_show_tutorial_alert = {
OR= {
can_start_tutorial_lesson = $LESSON$
is_tutorial_lesson_active = $LESSON$
}
}
valid_raid_target_trigger = {
NOR = {
has_raid_immunity_against = root
is_allied_to = root
has_truce = root
target_is_vassal_or_below = root
top_liege = root.top_liege
}
}

View file

@ -19,6 +19,7 @@ has_same_vassal_stance_as_trigger = {
zealot = { scope:vassal_temp = { has_vassal_stance = zealot } }
minority = { scope:vassal_temp = { has_vassal_stance = minority } }
barons_and_minor_landholders = { scope:vassal_temp = { has_vassal_stance = barons_and_minor_landholders } }
belligerent = { scope:vassal_temp = { has_vassal_stance = belligerent } }
}
}
}
@ -38,7 +39,7 @@ vassal_follows_directive_valid_trigger = {
scope:directive_vassal = {
trigger_if = {
limit = {
scope:directive_liege = { has_government = administrative_government }
scope:directive_liege = { government_has_flag = government_is_administrative }
}
is_vassal_of = scope:directive_liege
}
@ -62,7 +63,7 @@ vassal_follows_directive_trigger = {
}
custom_tooltip = {
text = has_admin_gov
has_government = administrative_government
government_has_flag = government_is_administrative
}
}
opinion = {

View file

@ -107,7 +107,7 @@ joiner_not_already_in_another_war_with_any_target_war_participants_trigger = {
subject = $JOINER$
NOT = {
any_war_enemy = {
OR = {
OR = {
AND = {
scope:target = { primary_defender = $WARRIOR$ }
is_defender_in_war = scope:target
@ -170,8 +170,18 @@ can_potentially_call_ally_trigger = {
$JOINER$ = {
trigger_if = {
limit = {
# Diarchs can join against other vassals.
NOT = { this ?= $WARRIOR$.diarch }
NOT = {
# Diarchs can join against other vassals.
this ?= $WARRIOR$.diarch
# Confederation members can join the confederation leader's defensive wars
AND = {
is_confederation_member = yes
$WARRIOR$ = {
is_member_of_confederation = $JOINER$.confederation
}
}
}
}
NOT = {
target_is_liege_or_above = $WARRIOR$
@ -180,12 +190,31 @@ can_potentially_call_ally_trigger = {
}
}
# Can never call your liege to your own wars (they protect you only from foreign invaders, by being the war target instead of you)
# Can never call your liege to your own wars (they protect you only from foreign invaders, by being the war target instead of you) -- Unless you have the Nomadic Contract Right
custom_description = {
text = cannot_call_liege_to_war
$JOINER$ = {
NOT = {
target_is_vassal_or_below = $WARRIOR$
trigger_if = {
limit = {
target_is_vassal_or_below = $WARRIOR$
$WARRIOR$ = {
vassal_contract_has_flag = vassal_contract_liege_forced_war_override
}
}
always = yes
}
trigger_else_if = {
limit = {
$JOINER$ = {
NOT = {
target_is_vassal_or_below = $WARRIOR$
}
}
}
always = yes
}
trigger_else = {
always = no
}
}
}
@ -199,8 +228,8 @@ war_declarer_needs_hook_on_liege = {
liege = scope:recipient.liege
NOT = { liege = scope:recipient }
NAND = {
has_government = administrative_government
liege = { has_government = administrative_government }
government_has_flag = government_is_administrative
liege = { government_has_flag = government_is_administrative }
}
liege = { has_realm_law_flag = vassal_internal_wars_banned }
NOT = {
@ -214,8 +243,8 @@ war_declarer_needs_hook_on_liege = {
is_independent_ruler = no
NOT = { liege = scope:recipient }
NAND = {
has_government = administrative_government
liege = { has_government = administrative_government }
government_has_flag = government_is_administrative
liege = { government_has_flag = government_is_administrative }
}
liege = { has_realm_law_flag = vassal_all_wars_banned }
NOT = {
@ -244,6 +273,7 @@ can_use_conquest_cbs_trigger = {
OR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_clan
government_has_flag = government_is_nomadic
faith = { has_doctrine_parameter = conquest_cb_enabled }
culture = { has_cultural_parameter = can_use_conquest_cbs }
}
@ -268,7 +298,7 @@ can_be_knight_trigger = {
is_hostage = no
trigger_if = { # Admin governors cannot be knights
limit = {
$ARMY_OWNER$ = { has_government = administrative_government }
$ARMY_OWNER$ = { government_has_flag = government_is_administrative }
is_courtier = no
}
primary_title ?= {
@ -463,6 +493,7 @@ using_conquest_cb_trigger = {
using_cb = ducal_conquest_cb
using_cb = ireland_laudabiliter_conquest_cb
using_cb = mongol_invasion_war
using_cb = mpo_gok_onslaught_cb
}
}
@ -839,30 +870,91 @@ religious_war_vassals_constraints = {
}
}
herders_and_tributary_constraints = {
trigger_if = {
limit = { exists = scope:defender }
scope:defender = {
save_temporary_scope_as = recipient # done for is_a_herder_defender_tt
NOR = {
custom_tooltip = {
text = is_a_herder_defender_tt # herders can't fight
government_has_flag = government_is_herder
}
is_tributary_of_suzerain_or_above = scope:attacker # can't fight your tributaries or your tributaries' tributaries
}
# You cannot attack your Confederation buddies tributaries
trigger_if = {
limit = {
suzerain != this
scope:attacker = { is_confederation_member = yes }
suzerain = { is_confederation_member = yes }
}
NOT = { scope:attacker.confederation = suzerain.confederation }
}
}
scope:attacker = { # Tributaries cannot attack their Suzerain or Suzerain's Confederation buddies
NOR = {
is_tributary_of_suzerain_or_above = scope:defender # can't attack your own suzerain
trigger_if = {
limit = {
suzerain != this
scope:defender = { is_confederation_member = yes }
suzerain = { is_confederation_member = yes }
}
# if you have a suzerain who's part of a confederation, you may not attack any of its members
scope:defender.confederation = suzerain.confederation
}
}
}
}
}
feudal_clan_tribal_conquest_constraints = {
OR = {
AND = {
tier = tier_county
any_county_province = {
has_holding_type = tribal_holding
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
AND = {
tier > tier_county
any_in_de_jure_hierarchy = {
tier = tier_county
any_county_province = {
has_holding_type = tribal_holding
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
}
}
scope:attacker = {
NOT = { government_has_flag = government_is_tribal }
NOR = {
government_has_flag = government_is_tribal
government_has_flag = government_is_nomadic
}
gold < 200
any_sub_realm_county = {
any_county_province = {
has_holding_type = tribal_holding
OR = {
AND = {
government_has_flag = government_is_administrative
gold < 700
this != top_liege
}
any_sub_realm_county = {
title_province = {
OR = {
has_holding_type = tribal_holding
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
}
}

View file

@ -0,0 +1,465 @@

##################################################
# Winter Triggers
county_has_winter_trigger = {
title_province = {
has_winter_trigger = yes
}
}
character_capital_has_winter_trigger = {
capital_county = { county_has_winter_trigger = yes }
}
culture_uses_frequent_winter_transportation_trigger = {
culture = {
OR = {
has_cultural_pillar = heritage_balto_finnic
has_cultural_pillar = heritage_north_germanic
# We exclude Normans as being pretty distant from this part of their heritage.
has_cultural_parameter = winter_trait_bonuses
}
}
}
location_has_harsh_winter_trigger = {
location = { has_province_modifier = winter_harsh_modifier }
}
location_has_normal_or_worse_winter_trigger = {
location = {
OR = {
has_province_modifier = winter_normal_modifier
has_province_modifier = winter_harsh_modifier
}
}
}
location_has_winter_trigger = {
location = {
has_winter_trigger = yes
}
}
has_winter_trigger = {
OR = {
has_province_modifier = winter_mild_modifier
has_province_modifier = winter_normal_modifier
has_province_modifier = winter_harsh_modifier
root = { has_zud_season_in_county_trigger = { COUNTY = root.location.county } }
}
}
has_winter_combat_trigger = {
OR = {
has_province_modifier = winter_mild_modifier
has_province_modifier = winter_normal_modifier
has_province_modifier = winter_harsh_modifier
}
}
##################################################
# Seasonal Triggers
middle_of_year_season_trigger = {
current_month >= 4
current_month <= 9
}
end_of_year_season_trigger = {
OR = {
current_month >= 10
current_month <= 3
}
}
temperate_seasons_trigger = {
$LOCATION$ = {
OR = {
geographical_region = world_europe
geographical_region = world_asia_minor
geographical_region = world_middle_east
geographical_region = world_india_rajastan
geographical_region = world_india_bengal
geographical_region = world_africa_north
geographical_region = world_steppe
geographical_region = world_tibet
}
}
}
tropical_seasons_trigger = {
$LOCATION$ = {
tropical_seasons_region_trigger = yes
}
}
tropical_seasons_region_trigger = {
OR = {
geographical_region = world_africa_west
geographical_region = world_africa_east
geographical_region = world_india_deccan
geographical_region = world_burma
}
}
is_nice_season_to_be_outside_trigger = {
OR = {
# Temperate zones like to be out in summer.
AND = {
temperate_seasons_trigger = { LOCATION = $LOCATION$ }
middle_of_year_season_trigger = yes
}
# Tropical zones like to be out in winter.
AND = {
tropical_seasons_trigger = { LOCATION = $LOCATION$ }
end_of_year_season_trigger = yes
}
}
}
is_nice_season_to_be_inside_trigger = {
OR = {
# Temperate zones like to be inside in winter.
AND = {
temperate_seasons_trigger = { LOCATION = $LOCATION$ }
end_of_year_season_trigger = yes
}
# Tropical zones like to be inside in summer.
AND = {
tropical_seasons_trigger = { LOCATION = $LOCATION$ }
middle_of_year_season_trigger = yes
}
}
}
#Season scripted trigger tied into custom loc, can be used for backgrounds and VFX
#Format like current_season_winter = yes
current_season_trigger = {
current_season_$SEASON$ = yes
}
current_season_winter = {
#southern region with rainy/dry seasons
trigger_if = {
limit = {
location = {
geographical_region = seasonal_region_deccan
}
}
OR = {
current_month >= 11
current_month < 3
}
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_rajasthan
}
}
OR = {
current_month >= 12
current_month < 4
}
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_bengal
}
}
OR = {
current_month >= 11
current_month < 2
}
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_burma
}
}
OR = {
current_month >= 11
current_month < 3
}
}
trigger_else = {
#Generic Northern Hemisphere
OR = {
current_month >= 12
current_month < 3
}
#Not present/has different name in these regions
location = {
NOR = {
geographical_region = seasonal_region_east_africa
geographical_region = seasonal_region_west_africa
}
}
}
}
current_season_autumn = {
#southern region with rainy/dry seasons
trigger_if = {
limit = {
location = {
geographical_region = seasonal_region_rajasthan
}
}
current_month >= 10
current_month < 12
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_bengal
}
}
current_month >= 8
current_month < 11
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_east_africa
}
}
current_month >= 9
current_month < 11
}
trigger_else = {
#Generic Northern Hemisphere
current_month >= 9
current_month < 12
#Not present/has different name in these regions
location = {
NOR = {
geographical_region = seasonal_region_west_africa
geographical_region = seasonal_region_deccan
geographical_region = seasonal_region_burma
}
}
}
}
current_season_summer = {
#southern region with rainy/dry seasons
trigger_if = {
limit = {
location = {
geographical_region = seasonal_region_deccan
}
}
current_month >= 3
current_month < 6
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_rajasthan
}
}
current_month >= 4
current_month < 7
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_bengal
}
}
current_month >= 4
current_month < 6
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_burma
}
}
current_month >= 3
current_month < 5
}
trigger_else = {
#Generic Northern Hemisphere
current_month >= 6
current_month < 9
#Not present/has different name in these regions
location = {
NOR = {
geographical_region = seasonal_region_west_africa
geographical_region = seasonal_region_east_africa
}
}
}
}
current_season_spring = {
#southern region with rainy/dry seasons
trigger_if = {
limit = {
location = {
geographical_region = seasonal_region_bengal
}
}
current_month >= 2
current_month < 4
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_east_africa
}
}
current_month >= 3
current_month < 6
}
trigger_else = {
#Generic Northern Hemisphere
current_month >= 3
current_month < 6
#Not present/has different name in these regions
location = {
NOR = {
geographical_region = seasonal_region_west_africa
geographical_region = seasonal_region_rajasthan
geographical_region = seasonal_region_deccan
geographical_region = seasonal_region_burma
}
}
}
}
current_season_dry_season = {
#southern region with rainy/dry seasons
location = {
OR = {
geographical_region = seasonal_region_west_africa
geographical_region = seasonal_region_east_africa
}
}
trigger_if = {
limit = {
location = { geographical_region = seasonal_region_west_africa }
}
OR = {
current_month >= 11
current_month < 5
}
}
trigger_else = {
location = {
geographical_region = seasonal_region_east_africa
}
OR = {
current_month >= 12
current_month < 3
}
}
}
current_season_rainy_season = {
#Jasons triggers here
location = {
OR = {
geographical_region = seasonal_region_deccan
geographical_region = seasonal_region_rajasthan
geographical_region = seasonal_region_bengal
geographical_region = seasonal_region_burma
geographical_region = seasonal_region_west_africa
geographical_region = seasonal_region_east_africa
}
}
#southern region with rainy/dry seasons
trigger_if = {
limit = {
location = {
geographical_region = seasonal_region_deccan
}
}
current_month >= 6
current_month < 11
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_rajasthan
}
}
current_month >= 7
current_month < 10
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_bengal
}
}
current_month >= 6
current_month < 8
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_burma
}
}
current_month >= 5
current_month < 11
}
trigger_else_if = {
limit = {
location = {
geographical_region = seasonal_region_west_africa
}
}
current_month >= 5
current_month < 11
}
trigger_else = {
location = {
geographical_region = seasonal_region_east_africa
}
current_month >= 6
current_month < 9
}
}
current_season_hot_season = {
OR = {
AND = {
location = {
OR = {
geographical_region = seasonal_region_east_africa
geographical_region = seasonal_region_west_africa
}
}
current_season_rainy_season = yes
}
current_season_summer = yes
}
}
current_season_cold_season = {
OR = {
current_season_winter = yes
current_season_dry_season = yes
}
}
current_season_wet = {
OR = {
current_season_spring = yes
current_season_rainy_season = yes
}
}
current_season_dry = {
OR = {
current_season_summer = yes
current_season_dry_season = yes
}
}

View file

@ -0,0 +1,24 @@
use_convert_to_witchcraft_secrecy_trigger = {
$OWNER$ = {
any_secret = { secret_type = secret_witch }
save_temporary_scope_as = witchract_secrecy_check
trait_is_shunned_or_criminal_in_my_or_lieges_faith_trigger = { TRAIT = witch GENDER_CHARACTER = scope:witchract_secrecy_check }
}
}
knows_about_character_being_witch_trigger = {
OR = {
$CHARACTER$ = { has_trait = witch }
any_known_secret = {
secret_owner = $CHARACTER$
secret_type = secret_witch
}
}
}
potential_witch_friend_trigger = {
faith = $CHARACTER$.faith
knows_about_character_being_witch_trigger = { CHARACTER = $CHARACTER$ }
save_temporary_scope_as = trigger_witch_friend
$CHARACTER$ = { knows_about_character_being_witch_trigger = { CHARACTER = scope:trigger_witch_friend } }
}

View file

@ -0,0 +1,41 @@

has_weak_hook_on_trigger = {
OR = {
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = weak_blackmail_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = favor_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = obligation_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = indebted_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = threat_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = manipulation_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = house_head_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = trial_by_combat_hook
}
has_hook_of_type = {
target = $TARGET_CHARACTER$
type = sumptuary_crime_hook
}
}
}

View file

@ -0,0 +1,26 @@
has_existing_farming_building_trigger = {
trigger_if = {
limit = { building_farm_estates_requirement_terrain = yes }
OR = {
has_building = farm_estates_01
has_building = farm_estates_02
has_building = farm_estates_03
has_building = farm_estates_04
has_building = farm_estates_05
has_building = farm_estates_06
has_building = farm_estates_07
}
}
trigger_if = {
limit = { building_farm_estates_requirement_terrain = yes }
OR = {
has_building = pastures_01
has_building = pastures_02
has_building = pastures_03
has_building = pastures_04
has_building = pastures_05
has_building = pastures_06
has_building = pastures_07
}
}
}

View file

@ -0,0 +1,360 @@

##################################################
# General Triggers
eligible_for_fp1_dynasty_legacies_trigger = {
has_fp1_dlc_trigger = yes
OR = {
# Technically, we could hardscript this to North Germanics/Normans/Estonians, but eh.
culture = { has_innovation = innovation_longboats }
# Converts should also get a chance to get in on the fun.
religion = religion:germanic_religion
}
}
fp1_can_raise_stele_trigger = {
OR = {
culture = { has_cultural_parameter = has_access_to_runestones }
has_character_modifier = embraced_local_traditions_modifier
}
culture = {
NOT = { has_cultural_era_or_later = culture_era_high_medieval }
}
}
fp1_can_raise_stele_title_scope_trigger = {
culture = {
has_cultural_pillar = heritage_north_germanic
NOT = { has_cultural_era_or_later = culture_era_high_medieval }
}
}
fp1_county_has_stele_trigger = {
OR = {
has_county_modifier = fp1_stele_ancestors_strong
has_county_modifier = fp1_stele_ancestors_weak
has_county_modifier = fp1_stele_conquest_strong
has_county_modifier = fp1_stele_conquest_weak
has_county_modifier = fp1_stele_promotion_strong
has_county_modifier = fp1_stele_promotion_weak
}
}
fp1_eligible_for_yearly_events_trigger = {
has_fp1_dlc_trigger = yes
OR = {
culture = { has_cultural_pillar = heritage_north_germanic }
religion = religion:germanic_religion
}
}
##################################################
# Cultural & Regional Triggers
fp1_is_norse = {
OR = {
culture = { has_cultural_pillar = heritage_north_germanic }
culture = culture:norman
}
}
fp1_is_norse_tribal = {
fp1_is_norse = yes
government_has_flag = government_is_tribal
}
fp1_is_coastal_norse_tribal = {
# Standard checks.
fp1_is_norse_tribal = yes
# Do you have a relevant coastal county somewhere?
any_sub_realm_county = { is_coastal_county = yes }
}
fp1_is_in_scandinavia = {
capital_county.title_province = { geographical_region = world_europe_north }
}
fp1_is_in_scandinavian_colonies = {
capital_county.title_province = {
OR = {
geographical_region = world_europe_west_britannia
geographical_region = dlc_fp1_region_colonial_eastern_europe
}
}
}
fp1_is_in_scandinavia_or_colonies = {
OR = {
fp1_is_in_scandinavia = yes
fp1_is_in_scandinavian_colonies = yes
}
}
fp1_remove_stele_new_holder_trigger = {
# Is there a rogue stone around?
$TITLE$ = { exists = var:stele_commissioner }
# And would the new holder want to tear down the stele?
$NEW_HOLDER$ = {
OR = {
AND = {
exists = dynasty
# E.g., because they're a different family and won't maintain it.
NOT = { dynasty = $PREVIOUS_HOLDER$.dynasty }
}
# Or because they're a subject of the runestone, which means it's memorialising their defeat.
## ... Unless they're a ghost. Damned proctors, I guess.
AND = {
exists = $TITLE$.var:stele_container
exists = $TITLE$.var:stele_scope_type
# Remember not to compare a character with a title.
$TITLE$.var:stele_scope_type = flag:character
this = $TITLE$.var:stele_container
}
}
}
}
is_vaguely_danish_bhakti_trigger = {
OR = {
has_culture = culture:danish
culture = { has_name_list = name_list_danish }
# We deliberately use the de jure rather than the geographical area to make this at least a *little* more fluid.
AND = {
is_playable_character = yes
capital_county.kingdom = title:k_denmark
}
}
}
##################################################
# Varangian Adventure Triggers
fp1_va_eligible_for_scandinavian_troops_trigger = {
# We only give these to North Germanics. I realise we check this elsewhere, but it makes it a bit easier to hijack the CB for other cultures via modding without weirdness.
culture = {
OR = {
has_cultural_pillar = heritage_north_germanic
this = culture:estonian
any_parent_culture_or_above = {
this = culture:estonian #Estonian
}
}
}
# Who hold at least one county in the initial de jure of the mainland Norse kingdoms.
any_sub_realm_county = {
OR = {
title_province = { geographical_region = dlc_fp1_region_core_mainland_scandinavia }
title:k_esthonia = {
is_de_jure_liege_or_above_target = prev
}
}
culture = scope:attacker.culture
faith = scope:attacker.faith
}
}
##################################################
# Illustration Triggers
fp1_should_use_norse_graphics_trigger = {
culture = { has_building_gfx = norse_building_gfx }
}
fp1_should_use_extra_tribal_graphics_trigger = {
should_use_tribal_realm_palace_graphics_trigger = yes
}
##################################################
# Shieldmaiden Triggers
suitable_shieldmaiden_gaoler_trigger = {
#Must be a shieldmaiden.
has_trait = shieldmaiden
NOR = {
#Filter out prisoners that the shieldmaiden would want to see freed.
has_friendly_relationship_trigger = { CHARACTER = root }
#And require that they don't hate their liege.
has_relation_rival = scope:imprisoner
#Make sure they don't really like root, in which case they'd let the escape slide.
opinion = {
target = root
value >= high_positive_opinion
}
#Aaaaand the inverse for actually really hating their host, in which case they don't care about escapees.
opinion = {
target = scope:imprisoner
value <= high_negative_opinion
}
}
}
##################################################
# Interaction Triggers
basic_can_have_trial_by_combat_trigger = {
# This is referenced elsewhere, so we keep it separate in order to allow justification for TbCs outside of interactions.
culture = { has_cultural_parameter = has_access_to_trials_by_combat }
}
can_have_trial_by_combat_trigger = {
# First, evaluate culture to trim down our potentials list.
scope:actor = { basic_can_have_trial_by_combat_trigger = yes }
scope:recipient = { basic_can_have_trial_by_combat_trigger = yes }
}
eligible_knight_to_champion_trial_by_combat_trigger = {
is_available_ai = yes
can_start_single_combat_trigger = yes
}
trial_by_combat_shown_and_not_invalid_trigger = {
# Scope:actor must be able to fight personally.
scope:actor = { can_start_single_combat_trigger = yes }
# Scope:actor cannot challenge someone they have a ceasefire against.
scope:actor = {
NOT = { has_truce = scope:recipient }
}
# Scope:actor *definitely* cannot challenge someone they're at war with.
scope:actor = {
NOT = { is_at_war_with = scope:recipient }
}
}
trial_by_combat_is_valid_trigger = {
# Calc some stuff that might invalidate elsewhere before the bout is sorted.
trial_by_combat_shown_and_not_invalid_trigger = yes
# Must have an imprisonment reason on the character.
scope:actor = { has_imprisonment_reason = scope:recipient }
# Scope:recipient must be able to fight or else have at least *one* designatable champion.
scope:recipient = {
trigger_if = {
limit = {
OR = {
can_start_single_combat_eligibility_checks_trigger = no
NOT = {
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:recipient }
}
}
}
custom_description = {
text = "fp1_tbc_no_available_champions"
OR = {
any_knight = { eligible_knight_to_champion_trial_by_combat_trigger = yes }
# Can use champion court position too if available
AND = {
employs_court_position = champion_court_position
any_court_position_holder = {
type = champion_court_position
eligible_knight_to_champion_trial_by_combat_trigger = yes #trigger checks for prowess, and while its not mandatory that the champ has a high value, we don't want to trap them into having to use their prowess 3 champ to defend their life
}
}
}
}
}
}
# Scope:recipient must not be banned from single combat.
scope:recipient = {
custom_description = {
text = "fp1_tbc_recipient_banned_from_combat"
can_start_single_combat_banned_checks_trigger = no
}
}
# Neither of the characters can be imprisoned.
scope:actor = { is_imprisoned = no }
scope:recipient = { is_imprisoned = no }
}
##################################################
# Religious Triggers
gruesome_sacrifices_grand_blot_can_continue_trigger = {
# Standard checks. Using a more lenient trigger here because we don't want to cancel the blot if you're in events or go on a hunt
#is_available_at_peace_adult_lenient = yes
scope:activity ?= {
has_activity_type = activity_gruesome_festival
}
}
fp1_valid_norse_faith_for_jomsvikings_trigger = {
religion = religion:germanic_religion
has_doctrine_parameter = unreformed
}
fp1_jomsvikings_have_not_existed_trigger = {
# They've already been destroyed in 1066.
game_start_date < 1000.1.1
NOR = {
# And otherwise can't currently be created.
exists = global_var:jomsvikings_title
# Nor should they have been made via decision or event.
is_target_in_global_variable_list = {
name = unavailable_unique_decisions
target = flag:flag_forged_jomvikings
}
}
}
fp1_valid_county_for_jomsvikings_trigger = {
tier = tier_county
is_coastal_county = yes
custom_description = {
text = forge_the_jomsvikings_decision.tt.is_in_correct_region
title_province = { geographical_region = dlc_fp1_region_non_scandinavian_southern_baltic }
}
any_county_province = {
custom_description = {
text = forge_the_jomsvikings_decision.tt.empty_castle_or_city
OR = {
has_holding = no
has_holding_type = castle_holding
has_holding_type = city_holding
}
}
}
}
##################################################
# Achievement Triggers
fp1_achievement_culture_norse_trigger = {
OR = {
culture = { has_cultural_pillar = heritage_north_germanic }
culture = culture:norman
}
}
fp1_achievement_culture_norse_or_rus_trigger = {
OR = {
fp1_achievement_culture_norse_trigger = yes
culture = culture:russian
}
}
fp1_achievement_religious_norse_trigger = {
religion = religion:germanic_religion
}
fp1_achievement_culture_plus_religion_norse_trigger = {
fp1_achievement_culture_norse_trigger = yes
fp1_achievement_religious_norse_trigger = yes
}
###################################################
# Jomsviking Triggers
fp1_ruler_eligible_for_jomsviking_coup = {
# We never want to coup realms with players who might be affected, so just flat-out ban them.
NOR = {
is_ai = no
any_vassal_or_below = { is_ai = no }
any_liege_or_above = { is_ai = no }
}
# And anyone that's close family to/married to a player.
NOR = {
any_spouse = { is_ai = no }
any_close_or_extended_family_member = { is_ai = no }
}
# Veto anyone following the unreformed Norse pagan faith.
NOT = { faith = faith:norse_pagan }
# For simplicity, exclude wars.
is_at_war = no
}

View file

@ -0,0 +1,400 @@
#################################################
# TRIGGER LIST #
#################################################
# ep1_is_valid_character_for_inspiration_trigger - Is the character valid to be used within the inspiration system? Character movement may break if these conditions are not true.
ep1_is_valid_character_for_inspiration_trigger = {
is_adult = yes
is_imprisoned = no
NOT = { exists = inspiration }
trigger_if = {
limit = {
OR = {
is_pool_guest = yes
is_in_pool_at = location
}
}
# For simplicity, inspired characters travel solo for now.
any_traveling_family_member = {
count = 1
}
}
}
ep1_spare_courtier_trigger = { #Used for picking out courtiers in your own court.
is_available_healthy_ai_adult = yes
is_councillor = no
NOR = {
is_close_or_extended_family_of = root
is_spouse_of = root
}
}
# Court type trait 1 is unlocked by court_grandeur_level 5
ep1_courtier_valid_for_court_trait_1_trigger = {
scope:cgv_value >= cgv_level_threshold_court_type_trait_1
NOT = { has_trait = $TYPE$_court }
is_adult = yes
}
# Court type trait 2 is unlocked by court_grandeur_level 8
ep1_courtier_valid_for_court_trait_2_trigger = {
scope:cgv_value >= cgv_level_threshold_court_type_trait_2
NOT = { has_trait = $TYPE$_court_2 }
has_trait = $TYPE$_court_1
is_adult = yes
}
##############
# INSPIRATION/ARTIFACT TRIGGERS
##############
ep1_can_sponsor_inspiration_basic = {
scope:inspiration_owner = {
is_imprisoned = no
}
}
ep1_is_sponsor_valid_inspiration_basic = {
trigger_if = {
limit = {
exists = scope:inspiration_sponsor
}
scope:inspiration_owner = {
is_courtier_of = scope:inspiration_sponsor
is_imprisoned = no
}
}
}
ep1_character_had_or_has_inspiration_type_trigger = {
OR = {
AND = {
exists = var:created_artifact_type
var:created_artifact_type = flag:$TYPE$
}
AND = {
exists = inspiration
inspiration = { has_inspiration_type = $TYPE$_inspiration }
}
}
}
ep1_no_artifact_decorations_trigger = {
OR = {
scope:wealth < 40
AND = {
exists = scope:inspiration_owner
scope:inspiration_owner = { has_trait = humble }
}
}
}
ep1_simple_artifact_decorations_trigger = {
scope:wealth >= 5
scope:wealth < 70
}
ep1_advanced_artifact_decorations_trigger = {
scope:wealth >= 40
scope:wealth < 90
}
ep1_extravagant_artifact_decorations_trigger = {
scope:wealth >= 70
}
ep1_artifact_durability_lower_equal_percent_trigger = {
$PERCENT$ > {
value = 0
add = artifact_durability
divide = artifact_max_durability
}
}
ep1_artifact_durability_higher_equal_percent_trigger = {
$PERCENT$ < {
value = 0
add = artifact_durability
divide = artifact_max_durability
}
}
ep1_character_has_court_artifact_trigger = {
any_character_artifact = {
ep1_artifact_is_court_artifact_trigger = yes
}
}
ep1_artifact_is_court_artifact_trigger = {
OR = {
artifact_slot_type = wall_big
artifact_slot_type = wall_small
artifact_slot_type = sculpture
artifact_slot_type = book
artifact_slot_type = throne
artifact_slot_type = pedestal
}
}
##############
# COURT POSITION TRIGGERS
##############
#Used to see if the scoped character has ANY court position that CHARACTER can hold
character_can_be_employed_in_a_court_position_trigger = {
OR = {
AND = {
can_employ_court_position_type = court_physician_court_position
$CHARACTER$ = { can_be_employed_as = court_physician_court_position }
}
AND = {
can_employ_court_position_type = master_of_horse_court_position
$CHARACTER$ = { can_be_employed_as = master_of_horse_court_position }
}
AND = {
can_employ_court_position_type = master_of_hunt_court_position
$CHARACTER$ = { can_be_employed_as = master_of_hunt_court_position }
}
AND = {
can_employ_court_position_type = keeper_of_swans_court_position
$CHARACTER$ = { can_be_employed_as = keeper_of_swans_court_position }
}
AND = {
can_employ_court_position_type = travel_leader_court_position
$CHARACTER$ = { can_be_employed_as = travel_leader_court_position }
}
AND = {
can_employ_court_position_type = court_jester_court_position
$CHARACTER$ = { can_be_employed_as = court_jester_court_position }
}
AND = {
can_employ_court_position_type = high_almoner_court_position
$CHARACTER$ = { can_be_employed_as = high_almoner_court_position }
}
AND = {
can_employ_court_position_type = seneschal_court_position
$CHARACTER$ = { can_be_employed_as = seneschal_court_position }
}
AND = {
can_employ_court_position_type = court_tutor_court_position
$CHARACTER$ = { can_be_employed_as = court_tutor_court_position }
}
AND = {
can_employ_court_position_type = cupbearer_court_position
$CHARACTER$ = { can_be_employed_as = cupbearer_court_position }
}
AND = {
can_employ_court_position_type = chief_eunuch_court_position
$CHARACTER$ = { can_be_employed_as = chief_eunuch_court_position }
}
AND = {
can_employ_court_position_type = antiquarian_court_position
$CHARACTER$ = { can_be_employed_as = antiquarian_court_position }
}
AND = {
can_employ_court_position_type = royal_architect_court_position
$CHARACTER$ = { can_be_employed_as = royal_architect_court_position }
}
AND = {
can_employ_court_position_type = lady_in_waiting_court_position
$CHARACTER$ = { can_be_employed_as = lady_in_waiting_court_position }
}
AND = {
can_employ_court_position_type = court_poet_court_position
$CHARACTER$ = { can_be_employed_as = court_poet_court_position }
}
AND = {
can_employ_court_position_type = court_musician_court_position
$CHARACTER$ = { can_be_employed_as = court_musician_court_position }
}
AND = {
can_employ_court_position_type = bodyguard_court_position
$CHARACTER$ = { can_be_employed_as = bodyguard_court_position }
}
AND = {
can_employ_court_position_type = champion_court_position
$CHARACTER$ = { can_be_employed_as = champion_court_position }
}
AND = {
can_employ_court_position_type = food_taster_court_position
$CHARACTER$ = { can_be_employed_as = food_taster_court_position }
}
AND = {
can_employ_court_position_type = executioner_court_position
$CHARACTER$ = { can_be_employed_as = executioner_court_position }
}
AND = {
can_employ_court_position_type = garuda_court_position
$CHARACTER$ = { can_be_employed_as = garuda_court_position }
}
AND = {
can_employ_court_position_type = wet_nurse_court_position
$CHARACTER$ = { can_be_employed_as = wet_nurse_court_position }
}
AND = {
can_employ_court_position_type = akolouthos_court_position
$CHARACTER$ = { can_be_employed_as = akolouthos_court_position }
}
}
}
#Used to check if the scoped character can hold any court position
can_be_employed_in_any_court_position_trigger = {
OR = {
can_be_employed_as = court_physician_court_position
can_be_employed_as = master_of_horse_court_position
can_be_employed_as = master_of_hunt_court_position
can_be_employed_as = keeper_of_swans_court_position
can_be_employed_as = court_jester_court_position
can_be_employed_as = high_almoner_court_position
can_be_employed_as = seneschal_court_position
can_be_employed_as = court_tutor_court_position
can_be_employed_as = cupbearer_court_position
can_be_employed_as = chief_eunuch_court_position
can_be_employed_as = antiquarian_court_position
can_be_employed_as = royal_architect_court_position
can_be_employed_as = lady_in_waiting_court_position
can_be_employed_as = court_poet_court_position
can_be_employed_as = court_musician_court_position
can_be_employed_as = bodyguard_court_position
can_be_employed_as = champion_court_position
can_be_employed_as = food_taster_court_position
can_be_employed_as = executioner_court_position
can_be_employed_as = garuda_court_position
can_be_employed_as = travel_leader_court_position
can_be_employed_as = wet_nurse_court_position
can_be_employed_as = akolouthos_court_position
}
}
##### Hold court
hold_court_8010_county_trigger = {
any_title_to_title_neighboring_county = {
holder.top_liege = {
NOR = {
THIS = ROOT
is_allied_to = ROOT
is_at_war_with = ROOT
is_close_or_extended_family_of = ROOT
max_military_strength < hold_court_8010_75_strength_value # 75% of ROOT's soldiers
}
}
}
}
target_of_powerful_faction_trigger = {
exists = yes
OR = {
faction_is_type = liberty_faction
faction_is_type = claimant_faction
}
OR = {
faction_power >= faction_power_threshold
faction_is_at_war = yes
}
trigger_if = {
limit = { exists = special_character }
NOT = { special_character = faction_target.liege }
}
}
province_has_no_holding_trigger = { # province has no holding
has_ongoing_construction = no
NOR = {
has_holding_type = castle_holding
has_holding_type = tribal_holding
has_holding_type = city_holding
has_holding_type = church_holding
has_holding_type = herder_holding
has_holding_type = nomad_holding
}
}
county_has_all_holding_types = { # county has all three holding types
any_county_province = { has_holding_type = castle_holding }
any_county_province = { has_holding_type = city_holding }
any_county_province = { has_holding_type = church_holding }
}
county_has_empty_province_trigger = {
tier = tier_county
any_county_province = { province_has_no_holding_trigger = yes }
}
county_has_no_city_trigger = { # No city in a county
NOT = {
any_county_province = { has_holding_type = city_holding }
}
}
county_has_no_church_trigger = { # No church in a county
NOT = {
any_county_province = { has_holding_type = church_holding }
}
}
##############
# DECISION TRIGGERS
##############
order_mass_eviction_decision_evictable_courtier_trigger = {
NOR = {
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
any_close_family_member = {
host = root
is_of_major_or_minor_interest_trigger = { CHARACTER = root }
}
}
}
# For technical reasons, this trigger can't be the same as ep1_decision_0111_list_builder_guts_trigger, but maintains (almost) technical parity with it.
exoticise_a_grand_hall_decision_list_builder_guts_trigger = {
# Is the title presently active?
exists = holder
# Can the two communicate?
holder = {
# Filter out anyone who has the right rank but lacks a mechanical royal court.
has_royal_court = yes
has_dlc_feature = royal_court
# Can the two communicate?
in_diplomatic_range = root
}
}
##############
# CHARACTER INTERACTIONS TRIGGERS
##############
indebt_guest_interaction_basic_checks_trigger = {
$ACTOR$ = {
# Gotta have a royal court.
has_royal_court = yes
has_dlc_feature = royal_court
# Gotta have maxed servants to help.
amenity_level = {
type = court_servants
value >= max_amenity_level
}
}
}
##############
# BANNER TRIGGERS
##############
artifact_house_not_owns_or_claims_trigger = {
exists = scope:familial_banner
NOR = {
this = scope:familial_banner.artifact_owner.house
has_house_artifact_claim = scope:familial_banner
}
trigger_if = {
limit = { exists = scope:familial_banner.var:banner_dynasty }
house_head.dynasty = scope:familial_banner.var:banner_dynasty
}
}

View file

@ -0,0 +1,315 @@
##### FAMILY FEUD #####
# Story has variable with specified flag
house_feud_story_flag_trigger = {
story_type = story_cycle_house_feud
exists = var:$VARIABLE$
var:$VARIABLE$ = flag:$FLAG$
}
# Feud story targets a specified House
existing_feud_against_target_trigger = {
OR = {
house.house_head ?= {
any_owned_story = {
story_type = story_cycle_house_feud
var:house_feud_house ?= $TARGET$.house
}
}
exists = scope:return_feud_as_true_for_debug
}
}
# General checks house head can start a feud
house_head_can_start_feud_trigger = {
# Must be House Head
is_house_head = yes
# Stop unlanded AI going crazy with feuds
is_playable_character = yes
NOR = {
# House must not have started a feud recently
exists = house.var:house_feud_cooldown
# Only one Feud can be started per House Head
has_character_flag = had_house_feud_story
# Cannot already be Feuding
any_owned_story = { story_type = story_cycle_house_feud }
}
# Has not recently ended a Feud
house_feud_house_any_end_modifier_trigger = no
# House must be sufficiently large to support a Feud
house = {
any_house_member = {
count >= 5
is_alive = yes
is_adult = yes
}
}
# Save scopes for checking against
save_temporary_scope_as = house_head_temp
}
house_head_can_start_feud_against_trigger = {
# General checks that house head can start a feud
house_head_can_start_feud_trigger = yes
# Victim House Head must exist
exists = $TARGET$.house.house_head
# Ensure target is 'equal'
trigger_if = {
limit = {
is_landed = yes
$TARGET$.house.house_head = { is_landed = yes }
}
tier_difference = {
target = $TARGET$.house.house_head
value >= -1
}
tier_difference = {
target = $TARGET$.house.house_head
value <= 1
}
}
trigger_else = {
NOR = {
highest_held_title_tier > tier_duchy
$TARGET$.house.house_head.highest_held_title_tier > tier_duchy
}
}
NOR = {
# Is not part of same family as target House Head
is_close_family_of = $TARGET$.house.house_head
# Is not friendly with target House Head
has_any_good_relationship_with_character_trigger = { CHARACTER = $TARGET$.house.house_head }
# Target House must be different
house = $TARGET$.house
}
# Avoid starting Feuds between Vassals and Lieges, as they are not 'equals'
trigger_if = {
limit = { exists = $TARGET$.house.house_head.liege }
NOR = {
# Is not liege of target House Head
this = $TARGET$.house.house_head.liege
# Does not share house with target's liege
this.house = $TARGET$.house.house_head.liege.house
}
}
# Must be near target House Head
in_diplomatic_range = $TARGET$.house.house_head
# Save scopes for checking against
save_temporary_scope_as = house_head_temp
$TARGET$.house.house_head = { save_temporary_scope_as = target_house_head_temp }
}
# Feud target house has living members
house_feud_target_house_alive_trigger = {
any_owned_story = {
story_type = story_cycle_house_feud
exists = var:house_feud_house
var:house_feud_house.house_head = { is_alive = yes }
}
}
# House Head, and House is valid to be a Feud target
house_feud_valid_feud_target_trigger = {
exists = house
this = this.house.house_head
is_playable_character = yes
NOR = {
house = root.house
is_close_family_of = root
has_any_good_relationship_with_character_trigger = { CHARACTER = root }
}
save_temporary_scope_as = house_head_temp
# House must not be too small (too easy to wipe out)
house = {
any_house_member = {
count >= 3
is_adult = yes
can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:house_head_temp }
}
}
# Must be interactable
in_diplomatic_range = root
}
# Valid to be a target of a murder scheme
house_feud_scheme_target_trigger = {
is_available_adult = yes
save_temporary_scope_as = house_feud_scheme_target_temp
NOR = {
this = this.house.house_head
root = {
is_scheming_against = { target = scope:house_feud_scheme_target_temp }
}
is_in_list = house_feud_scheme_targets
}
root = {
can_start_scheme = {
type = murder
target_character = scope:house_feud_scheme_target_temp
}
}
}
# Valid member of own house
house_feud_member_trigger = {
is_available_adult = yes
house = root.house
in_diplomatic_range = root
NOT = {
has_any_bad_relationship_with_character_trigger = { CHARACTER = root }
}
}
# House has no ongoing Fued modifiers or rewards
house_feud_house_any_end_modifier_trigger = {
OR = {
exists = var:house_feud_swapped_house
house = {
OR = {
has_house_modifier = house_feud_terrible_modifier
has_house_modifier = house_feud_bad_modifier
has_house_modifier = house_feud_even_modifier
has_house_modifier = house_feud_good_modifier
has_house_modifier = house_feud_excellent_modifier
}
}
}
}
# House has no remaining members
house_feud_wiped_out_trigger = {
trigger_if = {
limit = { exists = var:house_feud_first_rival.house }
var:house_feud_first_rival.house = {
NOT = { exists = house_head }
NOT = {
any_house_member = { is_alive = yes }
}
}
}
}
##################################################
# Sycophant Triggers
bp1_yearly_8100_sycophant_trigger = {
is_available_ai_adult = yes
liege = $LIEGE$
reverse_opinion = {
target = $LIEGE$
value >= 25
}
NOT = { is_vassal_of = $LIEGE$ }
trigger_if = {
limit = { exists = $LIEGE$.cp:councillor_spouse }
NOT = { this = $LIEGE$.cp:councillor_spouse }
}
trigger_if = {
limit = {
$LIEGE$.faith = { has_doctrine = doctrine_clerical_succession_spiritual_fixed_appointment }
exists = $LIEGE$.cp:councillor_court_chaplain
}
NOT = { this = $LIEGE$.cp:councillor_court_chaplain }
}
OR = {
has_relation_lover = $LIEGE$
has_relation_friend = $LIEGE$
can_set_relation_friend_trigger = { CHARACTER = $LIEGE$ }
any_secret = {
secret_type = secret_lover
secret_target = $LIEGE$
}
}
NOT = { is_close_or_extended_family_of = $LIEGE$ }
}
house_feud_ai_scheme_trigger = {
is_adult = yes
is_ai = yes
ai_honor < medium_positive_ai_value
any_scheme = { count < 1 }
OR = {
house_feud_ai_murder_join_trigger = yes
house_feud_ai_murder_start_trigger = yes
house_feud_ai_seduce_start_trigger = yes
}
}
house_feud_ai_murder_join_trigger = {
house = {
any_house_member = {
any_scheme = {
scheme_type = murder
exists = scheme_target_character.house
scheme_target_character.house = scope:story.var:house_feud_house
save_temporary_scope_as = murder_scheme_temp
}
}
}
trigger_if = {
limit = { exists = scope:murder_scheme_temp }
char_can_fit_into_scheme_trigger = { SCHEME = scope:murder_scheme_temp }
NOR = {
is_scheming_against = { target = scope:murder_scheme_temp.scheme_target_character }
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:murder_scheme_temp.scheme_target_character }
}
}
trigger_else = { always = no }
}
house_feud_ai_murder_start_trigger = {
scope:story.var:house_feud_house = {
any_house_member = { save_temporary_scope_as = murder_victim_temp }
}
trigger_if = {
limit = { exists = scope:murder_victim_temp }
NOT = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:murder_victim_temp }
}
can_start_scheme = {
type = murder
target_character = scope:murder_victim_temp
}
}
trigger_else = { always = no }
}
house_feud_ai_seduce_start_trigger = {
NOR = {
has_trait = celibate
has_trait = chaste
}
scope:story.var:house_feud_house = {
any_house_member = {
is_married = yes
save_temporary_scope_as = seduce_victim_temp
any_spouse = {
trigger_if = {
limit = {
exists = house
NOT = { house = scope:seduce_victim_temp.house }
}
}
NOT = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:seduce_victim_temp }
}
save_temporary_scope_as = seduce_spouse_temp
}
}
}
trigger_if = {
limit = {
exists = scope:seduce_victim_temp
exists = scope:seduce_spouse_temp
}
NOR = {
has_any_good_relationship_with_character_trigger = { CHARACTER = scope:seduce_victim_temp }
has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:seduce_spouse_temp }
}
can_start_scheme = {
type = seduce
target_character = scope:seduce_spouse_temp
}
}
trigger_else = { always = no }
}

View file

@ -0,0 +1,81 @@
# Scripted Triggers for BP2 related things
# Trigger to find a random appropriate educator for a child
is_relevant_to_child = {
is_available_ai_adult = yes
#location = $CHILD$.location
}
has_level_1_education_trait_trigger = {
OR = {
has_trait = education_diplomacy_1
has_trait = education_martial_1
has_trait = education_stewardship_1
has_trait = education_intrigue_1
has_trait = education_learning_1
}
}
has_level_2_education_trait_trigger = {
OR = {
has_trait = education_diplomacy_2
has_trait = education_martial_2
has_trait = education_stewardship_2
has_trait = education_intrigue_2
has_trait = education_learning_2
}
}
has_level_3_education_trait_trigger = {
OR = {
has_trait = education_diplomacy_3
has_trait = education_martial_3
has_trait = education_stewardship_3
has_trait = education_intrigue_3
has_trait = education_learning_3
}
}
has_level_4_education_trait_trigger = {
OR = {
has_trait = education_diplomacy_4
has_trait = education_martial_4
has_trait = education_stewardship_4
has_trait = education_intrigue_4
has_trait = education_learning_4
}
}
style_changing_reformer_trigger = {
OR = {
root.top_liege ?= { has_character_flag = $FLAG$ }
AND = {
has_variable = years_as_varangian
has_character_flag = $FLAG$
is_landed = no
}
}
}
hostage_oath_of_friendship_trigger = {
AND = {
OR = {
has_relation_friend = scope:recipient
has_relation_best_friend = scope:recipient
}
OR = {
scope:actor = {
any_memory = {
has_memory_type = hostage_oath_of_friendship
has_memory_participant = scope:recipient
}
}
scope:recipient = {
any_memory = {
has_memory_type = hostage_oath_of_friendship
has_memory_participant = scope:actor
}
}
}
}
}

View file

@ -0,0 +1,744 @@

##################################################
# General Triggers
fp2_should_use_iberian_graphics_trigger = {
culture = { has_building_gfx = iberian_building_gfx }
}
fp2_character_any_involvement_iberian_struggle_trigger = {
has_fp2_dlc_trigger = yes
OR = {
fp2_character_involved_in_struggle_trigger = yes
fp2_character_interloper_in_struggle_trigger = yes
}
}
fp2_character_involved_in_struggle_trigger = {
has_fp2_dlc_trigger = yes
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
}
}
fp2_character_interloper_in_struggle_trigger = {
has_fp2_dlc_trigger = yes
any_character_struggle = {
involvement = interloper
is_struggle_type = iberian_struggle
}
}
fp2_character_uninvolved_in_struggle_trigger = {
has_fp2_dlc_trigger = yes
exists = struggle:iberian_struggle
fp2_character_interloper_in_struggle_trigger = no
fp2_character_involved_in_struggle_trigger = no
}
eligible_for_fp2_dynasty_legacies_trigger = {
has_fp2_dlc_trigger = yes
dynasty = {
OR = {
dynast = {
OR = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
}
culture = {
has_cultural_pillar = heritage_iberian
}
AND = {
exists = capital_province
capital_province = {
geographical_region = world_europe_west_iberia
}
}
}
}
}
}
}
is_toledo_ownership_valid_trigger = {
title:c_toledo.holder = {
OR = {
this = root
liege = root
top_liege = root
}
faith = {
portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church }
}
}
}
##################################################
# Cultural & Regional Triggers
culture_valid_for_ritualised_best_friends_trigger = {
culture = { has_cultural_parameter = strong_hooks_and_stress_effects_best_friends }
}
valid_ritualised_best_friendship_two_way_trigger = {
$ACTOR_FRIEND$ = {
# Check that they have the appropriate cultural parameter...
culture_valid_for_ritualised_best_friends_trigger = yes
# ... and that they've still got a best friend...
any_relation = {
type = best_friend
this = $RECIPIENT_FRIEND$
# ... who also still has the cultural parameter.
culture_valid_for_ritualised_best_friends_trigger = yes
}
}
}
valid_ritualised_best_friendship_one_way_trigger = {
$ACTOR_FRIEND$ = {
# Check that they have the appropriate cultural parameter...
culture_valid_for_ritualised_best_friends_trigger = yes
# ... and that they've got a best friend...
any_relation = {
type = best_friend
count >= 1
# ... who also still has the cultural parameter.
culture_valid_for_ritualised_best_friends_trigger = yes
}
}
}
##################################################
# Illustration Triggers
##################################################
# Interaction Triggers
has_any_best_friend_synergy_bonus_modifier_trigger = {
OR = {
has_character_modifier = fp2_single_synergy_diplomacy_modifier
has_character_modifier = fp2_single_synergy_martial_modifier
has_character_modifier = fp2_single_synergy_stewardship_modifier
has_character_modifier = fp2_single_synergy_intrigue_modifier
has_character_modifier = fp2_single_synergy_learning_modifier
has_character_modifier = fp2_double_synergy_diplomacy_diplomacy_modifier
has_character_modifier = fp2_double_synergy_diplomacy_martial_modifier
has_character_modifier = fp2_double_synergy_diplomacy_stewardship_modifier
has_character_modifier = fp2_double_synergy_diplomacy_intrigue_modifier
has_character_modifier = fp2_double_synergy_diplomacy_learning_modifier
has_character_modifier = fp2_double_synergy_martial_diplomacy_modifier
has_character_modifier = fp2_double_synergy_martial_martial_modifier
has_character_modifier = fp2_double_synergy_martial_stewardship_modifier
has_character_modifier = fp2_double_synergy_martial_intrigue_modifier
has_character_modifier = fp2_double_synergy_martial_learning_modifier
has_character_modifier = fp2_double_synergy_stewardship_diplomacy_modifier
has_character_modifier = fp2_double_synergy_stewardship_martial_modifier
has_character_modifier = fp2_double_synergy_stewardship_stewardship_modifier
has_character_modifier = fp2_double_synergy_stewardship_intrigue_modifier
has_character_modifier = fp2_double_synergy_stewardship_learning_modifier
has_character_modifier = fp2_double_synergy_intrigue_diplomacy_modifier
has_character_modifier = fp2_double_synergy_intrigue_martial_modifier
has_character_modifier = fp2_double_synergy_intrigue_stewardship_modifier
has_character_modifier = fp2_double_synergy_intrigue_intrigue_modifier
has_character_modifier = fp2_double_synergy_intrigue_learning_modifier
has_character_modifier = fp2_double_synergy_learning_diplomacy_modifier
has_character_modifier = fp2_double_synergy_learning_martial_modifier
has_character_modifier = fp2_double_synergy_learning_stewardship_modifier
has_character_modifier = fp2_double_synergy_learning_intrigue_modifier
has_character_modifier = fp2_double_synergy_learning_learning_modifier
}
}
purchase_truce_interaction_recipient_can_de_jure_war_actor_trigger = {
scope:recipient = {
OR = {
has_cb_on = {
target = scope:actor
cb = de_jure_cb
}
has_cb_on = {
target = scope:actor
cb = individual_county_de_jure_cb
}
has_cb_on = {
target = scope:actor
cb = individual_duchy_de_jure_cb
}
}
}
}
fp2_struggle_contract_assistance_war_winning_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
attacker_war_score >= offer_assistance_interaction_already_winning_value
}
trigger_else = { defender_war_score >= offer_assistance_interaction_already_winning_value }
}
fp2_struggle_contract_assistance_war_losing_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
defender_war_score >= offer_assistance_interaction_already_losing_value
}
trigger_else = { attacker_war_score >= offer_assistance_interaction_already_losing_value }
}
fp2_struggle_contract_assistance_war_outnumbering_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
war_attacker_total_strength_halved_value > war_defender_total_strength_value
}
trigger_else = { war_defender_total_strength_halved_value > war_attacker_total_strength_value }
}
fp2_struggle_contract_assistance_war_outnumbered_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
war_defender_total_strength_halved_value > war_attacker_total_strength_value
}
trigger_else = { war_attacker_total_strength_halved_value > war_defender_total_strength_value }
}
fp2_struggle_contract_assistance_war_outnumbered_minor_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
war_defender_total_strength_value > war_attacker_total_strength_value
}
trigger_else = { war_attacker_total_strength_value > war_defender_total_strength_value }
}
fp2_struggle_contract_assistance_war_insufficient_trigger = {
trigger_if = {
limit = {
scope:recipient = { is_attacker_in_war = prev }
}
scope:actor.max_military_strength < war_defender_total_strength_tenth_value
}
trigger_else = { scope:actor.max_military_strength < war_attacker_total_strength_tenth_value }
}
##################################################
# Religious Triggers
##################################################
# Achievement Triggers
##################################################
# Decision Triggers
##### Struggle Ending #####
### Common
# Checks a de jure kingdom of Hispania is completely controlled
fp2_struggle_ending_hold_de_jure_kingdom_trigger = {
title:e_spain ?= {
any_in_de_jure_hierarchy = {
tier = tier_kingdom
any_in_de_jure_hierarchy = {
tier = tier_county
}
holder = root
root = {
completely_controls = prev
}
}
}
}
# Checks less than half of Iberia owned
fp2_struggle_ending_percent_iberia_trigger = {
any_county_in_region = {
region = world_europe_west_iberia
percent < fp2_struggle_compromise_owned_percent_decimal_value
holder.top_liege = root
}
}
# Checks no more than half of Iberia is owned by another
fp2_struggle_ending_other_percent_iberia_trigger = {
struggle:iberian_struggle = {
NOT = {
any_involved_ruler = {
exists = primary_title # Max figured out that is_independent_ruler causes errors if you are unlanded
NOT = { this = root }
is_independent_ruler = yes
primary_title = { is_mercenary_company = no }
any_county_in_region = {
region = world_europe_west_iberia
percent > fp2_struggle_compromise_involved_percent_decimal_value
holder.top_liege = prev
}
}
}
}
}
# Checks duchy is held by an independent ruler who owns at least half of it
fp2_struggle_ending_compromise_independent_duchy_trigger = {
tier = tier_duchy
# Is created
exists = holder
OR = {
# Is not the heartland of an existing kingdom
NOT = { title_capital_county = de_jure_liege.title_capital_county }
# Capital duke doesn't control kingdom, edge case
AND = {
exists = de_jure_liege.holder
NOT = { holder = de_jure_liege.holder }
}
}
# Is ruled by an independent duke
holder = {
is_independent_ruler = yes
save_temporary_scope_as = duchy_holder
primary_title = {
is_mercenary_company = no
OR = {
tier = tier_duchy
tier = tier_kingdom
}
}
}
OR = {
this = holder.primary_title
holder.primary_title.tier = tier_kingdom
}
# Duke rules at least half the de jure duchy
any_direct_de_jure_vassal_title = {
percent >= 0.5
holder.top_liege = scope:duchy_holder
}
}
# Checks duchy should be split from de jure kingdom
fp2_struggle_ending_compromise_split_duchy_trigger = {
tier = tier_duchy
# Has not been tampered with already
NOT = { is_in_list = duchy_kingdom }
# Is not created
NOT = { exists = holder }
# Is not heartland of an existing kingdom
NOT = { title_capital_county = de_jure_liege.title_capital_county }
save_temporary_scope_as = duchy
# Less than half is owned by de jure kingdom, if created
trigger_if = {
limit = { exists = scope:duchy.de_jure_liege.holder }
any_direct_de_jure_vassal_title = {
percent < 0.5
holder.top_liege = scope:duchy.de_jure_liege.holder.top_liege
}
}
trigger_else = { always = no }
}
# Checks titular duchy should be made into de jure kingdom
fp2_struggle_ending_compromise_titular_trigger = {
# Has not been tampered with already
NOT = { is_in_list = duchy_kingdom }
# Is created
exists = holder
# Is ruled by an independent duke
holder = {
is_independent_ruler = yes
primary_title = {
is_mercenary_company = no
tier = tier_duchy
}
}
# Titular duke holds at least half of any de jure duchy of Hispania
title:e_spain = {
any_in_de_jure_hierarchy = {
tier = tier_duchy
any_direct_de_jure_vassal_title = {
percent >= 0.5
holder.top_liege = scope:special_duchy.holder
}
}
}
}
# Should title be created by ststus quo decision?
fp2_struggle_ending_compromise_create_title_trigger = {
NOR = {
this = title:e_spain
exists = holder
is_in_list = assigned_title
# Only if no other same rank rulers in title (e.g. multiple kings under empire)
any_direct_de_jure_vassal_title = {
exists = holder
NOT = { holder = scope:new_owner_temp }
}
}
}
# Checks two cultures were Involved in the struggle that ended in Conciliation
fp2_struggle_conciliation_special_cultural_rules_trigger = {
has_global_variable = fp2_struggle_conciliation_ending
any_in_global_list = {
variable = fp2_struggle_ending_culture_list
this = $C1$.culture
}
any_in_global_list = {
variable = fp2_struggle_ending_culture_list
this = $C2$.culture
}
}
# Checks two faiths were Involved in the struggle that ended in Conciliation
are_holy_wars_disabled_by_struggle_conciliation_trigger = {
has_global_variable = fp2_struggle_conciliation_ending
any_in_global_list = {
variable = fp2_struggle_ending_faith_list
this = scope:attacker.faith
}
any_in_global_list = {
variable = fp2_struggle_ending_faith_list
this = scope:defender.faith
}
}
# Checks if characters were both involved in struggle
fp2_struggle_conciliation_recipient_actor_involved_trigger = {
has_global_variable = fp2_struggle_conciliation_ending
AND = {
scope:actor.capital_province = { geographical_region = world_europe_west_iberia }
scope:recipient.capital_province = { geographical_region = world_europe_west_iberia }
# Offer comes from an Involved culture/faith character
OR = {
any_in_global_list = {
variable = fp2_struggle_ending_faith_list
this = scope:actor.faith
}
any_in_global_list = {
variable = fp2_struggle_ending_culture_list
this = scope:actor.culture
}
}
# Recipient is from an Involved culture/faith
OR = {
any_in_global_list = {
variable = fp2_struggle_ending_faith_list
this = scope:recipient.faith
}
any_in_global_list = {
variable = fp2_struggle_ending_culture_list
this = scope:recipient.culture
}
}
}
}
# Checks if character was involved in struggle
fp2_struggle_conciliation_scope_uninvolved_trigger = {
has_global_variable = fp2_struggle_conciliation_ending
OR = {
NOR = {
any_in_global_list = {
variable = fp2_struggle_ending_faith_list
this = $SCOPE$.faith
}
any_in_global_list = {
variable = fp2_struggle_ending_culture_list
this = $SCOPE$.culture
}
}
NOT = {
$SCOPE$.capital_province = { geographical_region = world_europe_west_iberia }
}
}
}
fp2_struggle_compromise_transfer_duchy_trigger = {
tier = tier_duchy
save_temporary_scope_as = transfer_duchy
# Duchy is completely controlled by its capital's holder's top_liege
exists = title_capital_county.holder.top_liege
title_capital_county.holder.top_liege = { completely_controls = scope:transfer_duchy }
# De jure liege does not control duchy
trigger_if = {
limit = { exists = kingdom.holder }
NOT = { kingdom = scope:transfer_duchy.title_capital_county.holder.top_liege.capital_county.kingdom }
}
# Is controlled by a kingdom tier
trigger_else = { title_capital_county.holder.top_liege.primary_title.tier >= tier_kingdom }
# Duchy is connected de_jure to holders kingdom
any_de_jure_county = {
any_title_to_title_neighboring_and_across_water_county = {
exists = kingdom.holder
kingdom.holder = scope:transfer_duchy.title_capital_county.holder.top_liege
}
}
}
fp2_struggle_council_toledo_attendee_trigger = {
OR = {
has_trait = education_learning_3
has_trait = education_learning_4
has_trait = education_learning_5
}
}
fp2_struggle_council_toledo_decision_trigger = {
is_toledo_ownership_valid_trigger = yes
is_at_war = no
}
fp2_struggle_secure_iberian_foothold_iberian_kingdom_trigger = {
tier = tier_kingdom
de_jure_liege = title:e_spain
root = { completely_controls = prev }
save_temporary_scope_as = iberian_kingdom_temp
}
fp2_struggle_secure_iberian_foothold_faith_trigger = {
fp2_struggle_secure_iberian_foothold_faith_percent_value >= fp2_struggle_secure_iberian_foothold_faith_target_percent_value
}
fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = {
any_de_jure_county = {
any_title_to_title_neighboring_and_across_water_county = {
NOT = { empire = title:e_spain }
kingdom.holder = root
}
}
}
fp2_struggle_iberian_reclamation_should_vassalize_trigger = {
any_character_struggle = { is_struggle_type = iberian_struggle }
any_held_title = { tier < scope:attacker.primary_title.tier }
any_realm_county = {
count = all
duchy = { is_in_list = target_titles }
any_county_struggle = { is_struggle_type = iberian_struggle }
}
}
fp2_struggle_any_realm_county_in_hispania_trigger = {
any_realm_county = { target_is_de_jure_liege_or_above = title:e_spain }
}
fp2_iberian_reclamation_vassalize_iberian_trigger = {
tier = tier_county
holder = {
any_character_struggle = {
involvement = involved
is_struggle_type = iberian_struggle
}
liege = scope:defender
NOT = { this = scope:defender }
capital_county = {
any_county_struggle = { is_struggle_type = iberian_struggle }
}
}
}
fp2_iberian_reclamation_involved_county_trigger = {
any_realm_county = {
any_county_struggle = { is_struggle_type = iberian_struggle }
}
}
fp2_iberian_reclamation_vassalize_vassal_trigger = {
primary_title.tier >= tier_county
primary_title.tier < scope:attacker.primary_title.tier
any_character_struggle = { is_struggle_type = iberian_struggle }
capital_county = {
duchy = { is_in_list = target_titles }
}
any_sub_realm_county = {
count = all
duchy = { is_in_list = target_titles }
any_county_struggle = { is_struggle_type = iberian_struggle }
}
}
fp2_struggle_enforce_truce_war_leader_trigger = {
custom_tooltip = {
text = fp2_enforce_truce_war_with_not_involved_tt
any_character_struggle = {
involvement = involved
}
}
custom_tooltip = {
text = fp2_enforce_truce_tier_difference_tt
tier_difference = {
target = scope:actor
value <= 0
}
}
NOR = {
this = scope:recipient
this = scope:actor
}
custom_tooltip = {
text = fp2_enforce_truce_liege_or_independent_tt
OR = {
scope:recipient = { is_independent_ruler = yes }
scope:recipient.top_liege = scope:actor.top_liege
is_independent_ruler = yes
top_liege = scope:actor.top_liege
}
}
}
fp2_bargain_fealty_war_outnumbered_trigger = {
war_attacker_total_strength_halved_value > scope:recipient.max_military_strength
}
fp2_bargain_fealty_war_losing_trigger = {
attacker_war_score >= fp2_bargain_fealty_interaction_already_losing_value
}
# We use a hard trigger so that this can be easily adjusted without overwriting the rest of the fp2_interactions file by modders.
struggle_can_access_unlocks_bargain_fealty_interaction_trigger = {
# Just uhh, use an OR if you add something else.
is_struggle_type = iberian_struggle
}
##################################################
# Multi-File Event Triggers
fp2_lyonese_monk_0002_papal_hof_trigger = {
religion = religion:christianity_religion
exists = faith.religious_head
faith.religious_head_title = title:k_papal_state
}
fp2_lyonese_monk_0002_valid_character_configuration_trigger = {
OR = {
has_trait = scholar
has_trait = theologian
has_trait = lifestyle_mystic
AND = {
is_ai = no
learning >= very_high_skill_rating
has_lifestyle = learning_lifestyle
}
}
}
fp2_lyonese_monk_0002_valid_court_trigger = {
# Must have the Pope as a HoF.
fp2_lyonese_monk_0002_papal_hof_trigger = yes
# Filter out anyone not able to be at home when the monk comes a'knockin'.
is_physically_able = yes
# Must be into bookish discussions.
## Narratively, this is what attracts them to your court.
## Mechanically, this is how players can opt in for the chain so it's not completely random.
fp2_lyonese_monk_0002_valid_character_configuration_trigger = yes
# Remove non-playables.
NOR = {
government_has_flag = government_is_theocracy
government_has_flag = government_is_special_republic
}
# Plus, for various reasons, we don't want Lyon _itself_.
NOT = {
any_held_title = { this = title:c_lyon }
}
}
fp2_lyonese_monk_0000_valid_for_events_trigger = {
fp2_lyonese_monk_0000_out_of_realm_trigger = no
fp2_lyonese_monk_0000_out_of_freedom_trigger = no
fp2_lyonese_monk_0000_out_of_popes_trigger = no
fp2_lyonese_monk_0000_out_of_faith_trigger = no
}
fp2_lyonese_monk_0000_out_of_realm_trigger = {
scope:acolyte = {
OR = {
is_alive = no
is_imprisoned = yes
AND = {
is_landed_or_landless_administrative = no
NOT = {
host = scope:acolyte_host
# Make an exception if you're in prison, since that should give a different event.
scope:acolyte_host = { is_imprisoned = no }
}
}
AND = {
is_landed_or_landless_administrative = yes
NOT = {
any_liege_or_above = { this = scope:acolyte_host }
}
}
}
}
}
fp2_lyonese_monk_0000_out_of_freedom_trigger = { is_imprisoned = yes }
fp2_lyonese_monk_0000_out_of_popes_trigger = {
NOT = { exists = scope:story.var:base_faith.religious_head }
}
fp2_lyonese_monk_0000_out_of_faith_trigger = {
OR = {
NOT = { scope:acolyte.faith.religious_head = scope:story.var:base_faith.religious_head }
NOT = { scope:acolyte_host.faith.religious_head = scope:story.var:base_faith.religious_head }
}
}
fp2_does_this_player_care_about_the_fate_of_iberia = {
NOT = { this = root }
OR = {
location = {
OR = { # Is in region
geographical_region = world_europe_west
geographical_region = world_africa_north
geographical_region = world_europe_south_italy
}
}
struggle:iberian_struggle = { is_culture_involved_in_struggle = prev.culture }
}
}
fp2_eligible_for_yearly_events_trigger = {
has_fp2_dlc_trigger = yes
OR = {
any_character_struggle = {
involvement = involved
}
culture = {
has_cultural_pillar = heritage_iberian
}
AND = {
exists = capital_province
capital_province = {
geographical_region = world_europe_west_iberia
}
}
}
}
fp2_purchase_truce_interaction_soft_requirements_trigger = {
OR = {
always = no
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_truce_purchasing_interaction
}
has_perk = defensive_negotiations_perk
culture = { has_cultural_parameter = unlocks_purchase_truce }
}
}

View file

@ -0,0 +1,9 @@
# Triggers related to knights and accolades
ep2_can_be_accolade_successor_base_trigger = {
is_acclaimed = no
is_accolade_successor = no
highest_held_title_tier <= tier_barony
is_alive = yes
is_adult = yes
}

View file

@ -0,0 +1,79 @@

##################################################
# Triggers related to the tour activity
ep2_phase_general_location_checks = {
# Don't localize all the other stuff if you have no province owner anyway
trigger_if = {
limit = { has_province_owner = yes }
province_owner = {
exists = liege
liege = scope:host
NOT = { this = scope:host }
highest_held_title_tier >= tier_county
exists = capital_province
capital_province = root
is_available = yes
age >= 12
}
}
trigger_else = {
has_province_owner = yes
}
}
ep2_tour_phase_invalidation_check = {
scope:activity = {
# TODO_CD_EP2, make their heir visitable if they weren't landed before inheriting. Should be doable in an on_action by checking if the heir is currently in the vassals to visit list, and if not, add them to it.
NOT = {
any_activity_phase_location_past = {
province_owner = scope:province.province_owner
}
}
}
scope:province = {
NOT = { province_owner = scope:host }
province_owner = {
exists = liege
liege = scope:host
location = scope:province
highest_held_title_tier >= tier_county
#Checks mostly matching is_available:
is_in_army = no
is_travelling = no
is_imprisoned = no
has_contagious_deadly_disease_trigger = no
NOT = { has_trait = incapable }
# Variable set within the adventure inspiration events
NOT = { has_variable = gone_adventuring }
#We don't invalidate if it stopped being the capital province.
is_at_war = no
}
}
}
travel_lifestyle_track_greater_equal_trigger = {
has_trait = lifestyle_traveler
has_trait_xp = {
trait = lifestyle_traveler
track = $TRACK$
value >= $GREATER_EQUAL$
}
}
travel_lifestyle_track_less_trigger = {
has_trait = lifestyle_traveler
has_trait_xp = {
trait = lifestyle_traveler
track = $TRACK$
value < $LESS_THAN$
}
}
is_being_visited_on_tour_strict = {
has_character_flag = being_visited_on_tour
# Extra sanity check to verify that our liege is actually still on a tour
liege ?= {
involved_activity ?= { has_activity_type = activity_tour }
}
}

Some files were not shown because too many files have changed in this diff Show more