Attempt 1 at holy orders head of faith

This commit is contained in:
edwardtheelbowhigh 2026-05-19 13:49:18 +01:00
parent ff646e671b
commit c7bd60cc44
16 changed files with 2996 additions and 4 deletions

View file

@ -0,0 +1,513 @@
create_holy_order_decision = {
picture = {
reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds"
}
decision_group_type = major
ai_goal = yes
is_shown = {
is_landed = yes
NOT = {
faith = {
any_faith_holy_order = {
holy_order_patron = root
save_temporary_scope_as = order
}
}
}
#trigger_if = {
# limit = { faith = { has_doctrine_parameter = no_holy_orders_til_hof } }
# exists = faith.religious_head
#}
# Jomsvikings should use their special decision if appropriate.
trigger_if = {
limit = { has_fp1_dlc_trigger = yes }
faith = {
NOT = { fp1_valid_norse_faith_for_jomsvikings_trigger = yes }
}
}
trigger_if = {
limit = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = holy_order_can_be_created_by_dukes
}
highest_held_title_tier >= tier_duchy
}
NOT = {
any_sub_realm_barony = {
is_under_holy_order_lease = yes
}
}
}
OR = {
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = holy_order_can_be_created_by_dukes
}
highest_held_title_tier >= tier_duchy
}
highest_held_title_tier >= tier_kingdom
any_held_county = {
any_in_de_jure_hierarchy = {
barony_is_valid_for_holy_order_lease_trigger = { CHARACTER = root }
}
}
}
}
widget = {
controller = create_holy_order
barony_valid = {
trigger_if = {
limit = { exists = this }
barony_is_valid_for_holy_order_lease_trigger = { CHARACTER = scope:ruler }
}
trigger_else = {
custom_description = {
text = "has_holy_order_barony_selected"
always = no
}
}
}
}
is_valid_showing_failures_only = {
is_available_adult = yes
is_at_war = no
}
is_valid = {
trigger_if = {
limit = {
faith = {
has_doctrine = doctrine_holy_order_head
NOT = {
exists = religious_head
}
}
}
can_create_head_of_faith_title_trigger = {
FAITH = this.faith
}
}
trigger_if = {
limit = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = holy_order_can_be_created_by_dukes
}
}
highest_held_title_tier >= tier_duchy
}
trigger_else = {
custom_description = {
text = "is_king_or_emperor"
highest_held_title_tier >= tier_kingdom
}
}
custom_description = {
text = "has_two_castle_county"
any_held_county = {
any_in_de_jure_hierarchy = {
barony_is_valid_for_holy_order_lease_trigger = { CHARACTER = root }
}
}
}
trigger_if = {
limit = {
exists = faith.religious_head
NOT = { root = root.faith.religious_head }
}
faith.religious_head = {
opinion = {
target = root
value >= {
value = 0
if = {
limit = { is_ai = no }
add = high_positive_opinion
}
}
}
}
}
trigger_if = {
limit = {
is_ai = yes
}
piety_level >= 1
}
trigger_else = {
piety_level >= 3
}
}
cost = {
gold = {
value = holy_order_gold_cost
}
piety = {
value = holy_order_piety_cost
}
}
effect = {
custom_tooltip = create_holy_order_decision_effect_message
if = { # If you have no valid barony this will throw errors when you open the decision - we add this check to avoid that
limit = {
exists = scope:barony
}
hidden_effect = {
if = {
limit = { NOT = { scope:barony.holder = root } }
create_title_and_vassal_change = {
type = leased_out
save_scope_as = change
add_claim_on_loss = no
}
scope:barony = {
change_title_holder_include_vassals = {
holder = root
change = scope:change
}
}
resolve_title_and_vassal_change = scope:change
}
}
create_character = {
template = holy_order_leader_character
location = scope:barony.title_province
save_scope_as = leader
}
create_holy_order_neutral_effect = {
LEADER = scope:leader
CAPITAL = scope:barony
NEW_HO_SCOPE = new_holy_order
FOUNDER = root
}
#if a ho_hof faith creates a ho and they don't have a hof yet, make it their hof
if = {
limit = {
faith = {
has_doctrine = doctrine_holy_order_head
NOT = {
exists = religious_head
}
}
}
faith = {
set_religious_head_title = scope:new_holy_order.title
create_head_of_faith_title_effect = yes
#TODO add events to inform faithful
}
}
}
create_holy_order_effect = yes
}
ai_potential = {
OR = {
highest_held_title_tier >= tier_kingdom
AND = {
highest_held_title_tier >= tier_duchy
faith = {
has_doctrine = doctrine_holy_order_head
NOT = {
exists = religious_head
}
}
}
}
is_playable_character = yes
OR = {
any_held_title = {
tier = tier_barony
barony_is_valid_for_holy_order_lease_trigger = { CHARACTER = root }
}
any_vassal = {
primary_title.tier = tier_barony
any_held_title = {
barony_is_valid_for_holy_order_lease_trigger = { CHARACTER = root }
}
}
}
}
ai_will_do = {
base = 200
modifier = {
add = {
faith = {
# Don't create more than 5 holy orders for a faith
every_faith_holy_order = {
subtract = 40
}
}
}
}
}
}
borrow_from_holy_order_decision = { #by Linnéa Thimrén
picture = {
reference = "gfx/interface/illustrations/decisions/decision_spend_money.dds"
}
desc = borrow_from_holy_order_decision_desc
selection_tooltip = borrow_from_holy_order_decision_tooltip
ai_check_interval = 72
cost = {
piety = 50
}
cooldown = { days = 5475 }
is_shown = {
is_playable_character = yes
highest_held_title_tier > tier_barony
faith = {
any_faith_holy_order = { #Your faith must have a Holy Order
always = yes
}
}
NOR = {
exists = var:loan_amount_owed
exists = var:loan_holder
}
}
is_valid_showing_failures_only = {
is_available = yes
custom_description = {
text = borrow_from_holy_order_gold_condition
faith = {
any_faith_holy_order = {
leader = {
gold >= holy_order_gold_value
}
}
}
}
}
effect = {
hidden_effect = {
set_variable = {
name = amount_to_loan
value = holy_order_gold_value
days = 1
}
add_character_flag = {
flag = borrow_from_holy_order
days = 3560
}
faith = {
random_faith_holy_order = {
limit = {
leader = { gold >= holy_order_gold_value }
}
leader = {
save_scope_as = recipient
}
save_scope_as = order
}
}
trigger_event = holy_order.0200
}
custom_tooltip = borrow_from_holy_order_decision_effect_tooltip
}
ai_potential = {
always = yes
}
ai_will_do = {
base = 50
ai_value_modifier = {
ai_zeal = -0.5
}
ai_value_modifier = {
ai_greed = 0.5
}
}
}
cancel_holy_order_lease_decision = {
picture = {
reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds"
}
desc = {
first_valid = {
triggered_desc = {
trigger = {
faith = {
faith_hostility_level = {
target = scope:barony.lessee_title.holder.faith
value >= faith_hostile_level
}
}
}
desc = cancel_holy_order_lease_hostile_decision_desc
}
desc = cancel_holy_order_lease_decision_desc
}
}
ai_check_interval = 36
is_shown = {
is_landless_adventurer = no
is_playable_character = yes
any_sub_realm_barony = {
barony_is_valid_for_holy_order_lease_cancellation_trigger = yes
county.holder = root
}
}
widget = {
controller = revoke_holy_order_lease
barony_valid = {
trigger_if = {
limit = { exists = this }
barony_is_valid_for_holy_order_lease_cancellation_trigger = yes
}
trigger_else = {
custom_description = {
text = "has_holy_order_barony_selected"
always = no
}
}
}
}
is_valid_showing_failures_only = {
is_available_adult = yes
is_at_war = no
}
cost = {
piety = {
value = 0
if = {
limit = {
exists = scope:barony
scope:barony.lessee.faith = root.faith
}
add = cancel_holy_order_piety_cost
}
}
}
effect = {
revoke_holy_order_lease_effect = {
CHARACTER = root
TARGET = scope:barony.lessee
BARONY = scope:barony
}
hidden_effect = {
#Message is sent through the on_holy_order_destroyed on_action instead!
#send_interface_toast = {
# type = holy_order_founded_message
# desc = i_created_holy_order_message
# left_icon = scope:leader
# right_icon = scope:new_holy_order.title
#}
#save_scope_as = holy_order_creator
#every_ruler = {
# limit = {
# faith = scope:holy_order_creator.faith
# NOT = { this = scope:holy_order_creator }
# }
# send_interface_message = {
# type = holy_order_founded_message
# desc = someone_created_holy_order_message
# left_icon = scope:holy_order_creator
# right_icon = scope:new_holy_order.title
# }
#}
#every_neighboring_top_liege_realm_owner = {
# limit = {
# NOT = { faith = scope:holy_order_creator.faith }
# }
# send_interface_message = {
# type = enemy_holy_order_founded_message
# desc = other_faith_neighbor_created_holy_order_message
# left_icon = scope:holy_order_creator
# right_icon = scope:new_holy_order.title
# }
#}
}
}
ai_potential = {
OR = {
faith:principlist.religious_head_title = { title_held_years > 0 }
AND = {
is_landed = yes
highest_held_title_tier >= tier_county
any_sub_realm_barony = {
county.holder = { is_ai = yes }
is_under_holy_order_lease = yes
}
}
AND = {
is_playable_character = yes
highest_held_title_tier >= tier_county
any_sub_realm_barony = {
county.holder = { is_ai = yes }
is_under_holy_order_lease = yes
}
}
}
}
ai_will_do = {
base = 0
# revoke titles leased to holy orders of the wrong faith
modifier = {
add = 100
exists = scope:barony.lessee
NOT = {
scope:barony.lessee.faith = root.faith
}
}
# Revoke if cynical
modifier = {
add = 100
ai_zeal <= -50
exists = scope:barony.lessee
NOT = {
any_patroned_holy_order = {
leader = {
this = scope:barony.lessee
}
}
}
#but don't revoke your HoF!
NOT = {
root.faith.religious_head = scope:barony.lessee
}
}
}
}

View file

@ -86,4 +86,214 @@
ai_will_do = {
base = 100
}
}
}
subjugate_hof_decision = {
picture = {
reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds"
}
desc = subjugate_hof_decision_desc
selection_tooltip = subjugate_hof_decision_tooltip
decision_group_type = major
is_shown = {
#always = no
faith = {
exists = religious_head
}
#let's not assimilate people if the HoF doesn't have our own faith
faith = faith.religious_head.faith
any_religion_global = {
any_faith = {
NOT = {
this = root.faith
}
NOT = {
has_locked_hof = yes
}
NOT = {
has_doctrine = unreformed_faith_doctrine
}
OR = {
AND = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
root.faith = {
faith_hostility_level = {
target = prev
value <= faith_astray_level
}
}
#this decision is mostly disabled for now, since we want more control
#but it's enabled to revert emancipations
always = no
}
AND = {
has_variable = former_foreign_hof
var:former_foreign_hof = root.faith
}
}
any_holy_site = {
#count >= holy_sites_to_create_spiritual_head_of_faith
count >= 3
holder.top_liege = root
holder.faith = root.faith
}
OR = {
AND = {
has_doctrine = doctrine_spiritual_head
root.faith = {
has_doctrine = doctrine_spiritual_head
}
}
AND = {
has_doctrine = doctrine_temporal_head
root.faith = {
has_doctrine = doctrine_temporal_head
}
}
AND = {
has_doctrine = doctrine_holy_order_head
root.faith = {
has_doctrine = doctrine_holy_order_head
}
}
#headless faiths can't be subjugated
#has_doctrine = doctrine_no_head
}
OR = {
NOT = {
exists = religious_head
}
NOT = {
religious_head.faith = root.faith
}
}
#don't assimilate dead faiths
num_county_followers > 0
}
}
}
is_valid = {
piety_level >= 3
is_independent_ruler = yes
faith = faith.religious_head.faith
#custom_description = your_faith_holds_at_least_3_holy_sites
}
is_valid_showing_failures_only = {
}
effect = {
faith = {
save_scope_as = dominant_faith
}
every_religion_global = {
random_faith = {
limit = {
NOT = {
this = root.faith
}
NOT = {
has_doctrine = unreformed_faith_doctrine
}
NOT = {
has_locked_hof = yes
}
OR = {
AND = {
faith_hostility_level = {
target = root.faith
value <= faith_astray_level
}
root.faith = {
faith_hostility_level = {
target = prev
value <= faith_astray_level
}
}
#this decision is mostly disabled for now, since we want more control
#but it's enabled to revert emancipations
always = no
}
AND = {
has_variable = former_foreign_hof
var:former_foreign_hof = root.faith
}
}
any_holy_site = {
#count >= holy_sites_to_create_spiritual_head_of_faith
count >= 3
holder.top_liege = root
holder.faith = root.faith
}
OR = {
AND = {
has_doctrine = doctrine_spiritual_head
root.faith = {
has_doctrine = doctrine_spiritual_head
}
}
AND = {
has_doctrine = doctrine_temporal_head
root.faith = {
has_doctrine = doctrine_temporal_head
}
}
AND = {
has_doctrine = doctrine_holy_order_head
root.faith = {
has_doctrine = doctrine_holy_order_head
}
}
has_doctrine = doctrine_no_head
}
OR = {
NOT = {
exists = religious_head
}
NOT = {
religious_head.faith = root.faith
}
}
#don't assimilate dead faith
num_county_followers > 0
}
save_scope_as = subjugated_faith
set_variable = faith_that_was_subjugated
}
}
scope:subjugated_faith = {
religious_head_title ?= {
root.faith.religious_head = {
destroy_title = scope:subjugated_faith.religious_head_title
}
}
set_religious_head_title = root.faith.religious_head_title
}
}
cost = {
piety = massive_piety_value
#TODO cost should scale with religious differences - it should be hard to join with a faith from another religion, for example
}
ai_check_interval = 36
ai_potential = {
always = yes
}
ai_will_do = {
base = 100
}
}

View file

@ -0,0 +1,536 @@
# BLOOD LEGACIES
blood_legacy_1 = { # Noble Veins
legacy = blood_legacy_track
character_modifier = {
name = blood_legacy_1_modifier
positive_random_genetic_chance = 0.30
positive_inactive_inheritance_chance = 0.30
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
blood_legacy_2 = { # Convergent Blood
legacy = blood_legacy_track
character_modifier = {
genetic_trait_strengthen_chance = 0.3
}
}
blood_legacy_3 = { # Resilient Bloodline
legacy = blood_legacy_track
character_modifier = {
name = blood_legacy_3_modifier
negative_random_genetic_chance = -0.30
negative_inactive_inheritance_chance = -0.30
}
}
blood_legacy_4 = { # Architected Ancestry
legacy = blood_legacy_track
effect = {
# Effect is applied in the on action 'on_birth_child'
custom_description_no_bullet = {
text = blood_legacy_4_effect
}
}
traits = {
beauty_good_1 = 100
intellect_good_1 = 100
physique_good_1 = 100
fecund = 50
albino = 50
giant = 10
dwarf = 1
scaly = 1
}
}
blood_legacy_5 = { # Octogenarians
legacy = blood_legacy_track
character_modifier = {
life_expectancy = 5
}
}
# WARFARE LEGACIES
warfare_legacy_1 = { # House of Warriors
legacy = warfare_legacy_track
character_modifier = {
name = warfare_legacy_1_name
prowess = 2
knight_effectiveness_mult = 0.15
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
warfare_legacy_2 = { # Generational Belligerence
legacy = warfare_legacy_track
character_modifier = {
pursue_efficiency = 0.15
retreat_losses = -0.15
}
effect = {
custom_description_no_bullet = {
text = warfare_legacy_2_effect
}
}
}
warfare_legacy_3 = { # Squire Traditions
legacy = warfare_legacy_track
effect = {
custom_description_no_bullet = {
text = warfare_legacy_3_effect
}
}
character_modifier = {
monthly_martial_lifestyle_xp_gain_mult = 0.1
}
}
warfare_legacy_4 = { # Inherited Tactics
legacy = warfare_legacy_track
character_modifier = {
counter_efficiency = 0.15
advantage = 5
}
}
warfare_legacy_5 = { # Private Army
legacy = warfare_legacy_track
character_modifier = {
men_at_arms_cap = 1
}
effect = {
custom_description_no_bullet = {
text = warfare_legacy_5_unlock_effect
}
custom_description_no_bullet = {
text = warfare_legacy_5_effect
}
}
}
# LAW LEGACIES
law_legacy_1 = { # Mostly Fair
legacy = law_legacy_track
character_modifier = {
county_opinion_add = 5
}
effect = {
custom_description_no_bullet = {
text = law_legacy_1_effect
}
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
law_legacy_2 = { # Faithful Magistrates
legacy = law_legacy_track
character_modifier = {
name = law_legacy_2_name
monthly_county_control_growth_add = 0.2
title_creation_cost_mult = -0.2
}
}
law_legacy_3 = { # Power and Prosperity
legacy = law_legacy_track
character_modifier = {
monthly_stewardship_lifestyle_xp_gain_mult = 0.1
build_gold_cost = -0.05
holding_build_gold_cost = -0.05
}
}
law_legacy_4 = { # Delegated Authority
legacy = law_legacy_track
character_modifier = {
name = law_legacy_4_name
powerful_vassal_opinion = 5
happy_powerful_vassal_tax_contribution_mult = 0.1
happy_powerful_vassal_levy_contribution_mult = 0.1
}
}
law_legacy_5 = { # Home Estates
legacy = law_legacy_track
character_modifier = {
name = law_legacy_5_name
domain_limit = 1
controlled_province_advantage = 5
}
}
# GUILE LEGACIES
guile_legacy_1 = { # Ominous Reputation
legacy = guile_legacy_track
character_modifier = {
dread_gain_mult = 0.2
dread_baseline_add = 15
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
guile_legacy_2 = { # Long Reach
legacy = guile_legacy_track
effect = {
custom_description_no_bullet = {
text = guile_legacy_2_effect
}
}
character_modifier = {
name = guile_legacy_2_name
owned_hostile_scheme_success_chance_add = 10
}
}
guile_legacy_3 = { # Natural Schemers
legacy = guile_legacy_track
character_modifier = {
monthly_intrigue_lifestyle_xp_gain_mult = 0.1
owned_scheme_secrecy_add = 15
}
}
guile_legacy_4 = { # Venial
legacy = guile_legacy_track
character_modifier = {
monthly_tyranny = -0.05
intimidated_vassal_tax_contribution_mult = 0.1
cowed_vassal_tax_contribution_mult = 0.2
}
}
guile_legacy_5 = { # Family Connections
legacy = guile_legacy_track
effect = {
custom_description_no_bullet = {
text = guile_legacy_5_effect
}
}
}
# ERUDITION LEGACIES
erudition_legacy_1 = { # Vibrant Court
legacy = erudition_legacy_track
effect = {
custom_description_no_bullet = {
text = erudition_legacy_1_effect
}
}
character_modifier = {
courtier_and_guest_opinion = 10
court_grandeur_baseline_add = 5
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
erudition_legacy_2 = { # Ordained Rulership
legacy = erudition_legacy_track
character_modifier = {
name = erudition_legacy_2_modifier_name
monthly_piety_gain_mult = 0.1
}
doctrine_character_modifier = {
name = erudition_legacy_2_modifier_name
doctrine = doctrine_theocracy_lay_clergy
zealot_opinion = 5
}
doctrine_character_modifier = {
name = erudition_legacy_2_modifier_name
doctrine = doctrine_theocracy_temporal
clergy_opinion = 5
}
}
erudition_legacy_3 = { # Treasured Knowledge
legacy = erudition_legacy_track
character_modifier = {
monthly_learning_lifestyle_xp_gain_mult = 0.1
development_growth_factor = 0.2
county_fertility_decline_mult = -0.1
}
}
erudition_legacy_4 = { # True Believers
legacy = erudition_legacy_track
effect = {
custom_description_no_bullet = {
text = erudition_legacy_4_effect
}
}
character_modifier = {
faith_creation_piety_cost_mult = -0.2
}
doctrine_character_modifier = {
name = erudition_legacy_4_modifier_name
doctrine = doctrine_no_head
domain_tax_same_faith_mult = 0.05
}
doctrine_character_modifier = {
name = erudition_legacy_4_modifier_name
doctrine = doctrine_spiritual_head
religious_head_opinion = 15
}
doctrine_character_modifier = {
name = erudition_legacy_4_modifier_name
doctrine = doctrine_temporal_head
tolerance_advantage_mod = 5
}
}
erudition_legacy_5 = { # Bureaucrats
legacy = erudition_legacy_track
effect = {
custom_description_no_bullet = {
text = erudition_legacy_5_effect
}
}
# character_modifier = {
#
# }
}
# GLORY LEGACIES
glory_legacy_1 = { # Desirable Match
legacy = glory_legacy_track
character_modifier = {
ai_amenity_target_baseline = 0.2
glory_hound_opinion = 5
}
effect = {
custom_description_no_bullet = {
text = glory_legacy_1_perk_effect
}
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
glory_legacy_2 = { # Renowned Name
legacy = glory_legacy_track
character_modifier = {
name = glory_legacy_2_name
accolades = 1
monthly_prestige_gain_mult = 0.1
mercenary_hire_cost_mult = -0.1
knight_limit = 1
monthly_court_grandeur_change_mult = 1
}
}
glory_legacy_3 = { # Earning Respect
legacy = glory_legacy_track
character_modifier = {
monthly_diplomacy_lifestyle_xp_gain_mult = 0.1
personal_scheme_phase_duration_add = medium_scheme_phase_duration_bonus_value
}
}
glory_legacy_4 = { # Assertive Rulers
legacy = glory_legacy_track
effect = {
custom_description_no_bullet = {
text = glory_legacy_4_perk_effect
}
}
character_modifier = {
short_reign_duration_mult = -0.2
vassal_limit = 10
court_grandeur_baseline_add = 5
}
}
glory_legacy_5 = { # Righteousness
legacy = glory_legacy_track
character_modifier = {
name = glory_legacy_5_name
general_opinion = 10
max_sway_schemes_add = 1
}
}
# KIN LEGACIES
kin_legacy_1 = { # Bounteous Loins
legacy = kin_legacy_track
character_modifier = {
fertility = 0.1
attraction_opinion = 5
}
ai_chance = {
value = 11
if = {
limit = {
can_start_new_legacy_track_trigger = no
}
multiply = 0
}
}
}
kin_legacy_2 = { # Studious Youth
legacy = kin_legacy_track
character_modifier = {
child_opinion = 10
}
effect = {
custom_description_no_bullet = {
text = kin_legacy_2_legacy_effect
}
}
}
kin_legacy_3 = { # Constant Care
legacy = kin_legacy_track
effect = {
custom_description_no_bullet = {
text = kin_legacy_3_legacy_effect
}
}
character_modifier = {
spouse_opinion = 10
negate_health_penalty_add = 0.5
}
}
kin_legacy_4 = { # Close Bonds
legacy = kin_legacy_track
effect = {
custom_description_no_bullet = {
text = kin_legacy_4_legacy_effect
}
custom_description_no_bullet = {
text = kin_accolade_effect
}
}
character_modifier = {
dynasty_opinion = 5
close_relative_opinion = 10
}
}
kin_legacy_5 = { # Graceful Aging
legacy = kin_legacy_track
effect = {
custom_description_no_bullet = {
text = kin_legacy_5_legacy_effect
}
}
character_modifier = {
no_prowess_loss_from_age = yes
}
}

View file

@ -608,6 +608,60 @@ on_character_faith_change = {
# Code on-action: once a month for each faith
# Root is the faith
on_faith_monthly = {
effect = {
if = {
limit = {
has_doctrine = doctrine_holy_order_head
}
every_faith_holy_order = {
limit = {
title = { is_head_of_faith = yes }
NOT = { exists = leader }
}
title = { save_scope_as = hof_holy_order }
scope:hof_holy_order.holder.faith = {
random_holy_site = {
limit = {
county.holder = {
realm_size > 1
faith = root
}
}
save_scope_as = leased_barony
}
}
create_character = {
template = ate_holy_order_faith_leader_character
location = scope:leased_barony.title_province
culture = scope:leased_barony.county.holder.culture
faith = root
gender_female_chance = {
if = {
limit = {
root = { has_doctrine_parameter = clergy_must_be_male }
}
add = 0
}
else_if = {
limit = {
root = { has_doctrine_parameter = clergy_must_be_female }
}
add = 100
}
else = {
add = 50
}
}
save_scope_as = leader
}
scope:leader = {
get_title = scope:hof_holy_order
get_title = scope:leased_barony
}
}
}
}
on_actions = {
faith_holy_order_land_acquisition_pulse
delay = { days = { 5 10 }}

View file

@ -2249,7 +2249,10 @@ yearly_playable_pulse = {
highest_held_title_tier >= tier_empire
has_trait = excommunicated
faith = {
has_doctrine = doctrine_spiritual_head
OR = {
has_doctrine = doctrine_spiritual_head
has_doctrine = doctrine_holy_order_head
}
has_doctrine = doctrine_imperial_anointment
}
custom_tooltip = {
@ -2282,7 +2285,10 @@ yearly_playable_pulse = {
interaction = coronation_anointment_request
}
faith = {
has_doctrine = doctrine_spiritual_head
OR = {
has_doctrine = doctrine_spiritual_head
has_doctrine = doctrine_holy_order_head
}
has_doctrine = doctrine_imperial_anointment
}
}

View file

@ -963,6 +963,22 @@ doctrine_spiritual_head = {
}
}
doctrine_holy_order_head = {
visible = no
piety_cost = {
value = faith_doctrine_cost_high
if = {
limit = { has_doctrine = doctrine_holy_order_head }
multiply = faith_unchanged_doctrine_cost_mult
}
}
parameters = {
holy_order_head_of_faith = yes
spiritual_head_of_faith_claims = yes
spiritual_head_of_faith_gold = yes
}
}
doctrine_temporal_head = {
icon = "doctrine_temporal_head"

View file

@ -2286,7 +2286,10 @@
}
# We also only want people with existing spiritual HoFs.
exists = religious_head
has_doctrine_parameter = spiritual_head_of_faith
OR = {
doctrine:doctrine_spiritual_head = { is_in_list = selected_doctrines }
doctrine:doctrine_holy_order_head = { is_in_list = selected_doctrines }
}
}
can_pick = {

View file

@ -0,0 +1,393 @@
abduct = {
# Basic Setup
skill = intrigue
desc = "abduct_desc_general"
success_desc = "ABDUCT_SUCCESS_DESC"
discovery_desc = "ABDUCT_DISCOVERY_DESC"
icon = icon_scheme_abduct
illustration = "gfx/interface/illustrations/event_scenes/corridor.dds"
category = hostile
target_type = character
is_secret = yes
maximum_breaches = 5
cooldown = { years = 10 }
# Parameters
speed_per_skill_point = t2_spsp_owner_value
speed_per_target_skill_point = t2_spsp_target_value
base_progress_goal = t2_base_phase_length_value
maximum_secrecy = 85
base_maximum_success = t2_base_max_success_value
phases_per_agent_charge = 1
success_chance_growth_per_skill_point = t2_scgpsp_value
# Core Triggers
allow = {
OR = {
has_perk = kidnapper_perk # Scheme unlocked by the Kidnapper Perk
domicile ?= { has_domicile_parameter = camp_unlocks_abduct_scheme }
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_abduct_for_all
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:target
}
}
}
}
is_adult = yes
is_playable_character = yes
is_imprisoned = no
}
valid = {
is_playable_character = yes
is_ruler = yes
is_incapable = no
custom_description = { #If they're your kid you need special traits to do it
text = abduct_own_children_block
object = scope:target
trigger_if = {
limit = {
is_parent_of = scope:target
}
has_trait_with_flag = can_murder_own_children
}
}
scope:target = {
is_imprisoned = no
is_hostage = no
exists = location
in_diplomatic_range = scope:owner
}
# Special AI exceptions
NOT = {
scope:owner = {
is_ai = yes
has_opinion_modifier = {
target = scope:target
modifier = repentant_opinion
}
}
}
}
# Agents
agent_leave_threshold = -25
agent_join_chance = {
base = 0
ai_agent_join_chance_basic_suite_modifier = yes
ai_agent_join_chance_hostile_grievous_modifier = yes
}
agent_groups_owner_perspective = { courtiers guests scripted_relations }
agent_groups_target_character_perspective = { courtiers vassals }
valid_agent = { is_valid_agent_standard_trigger = yes }
odds_prediction = {
add = hostile_scheme_base_odds_prediction_target_is_char_value
add = odds_skill_contribution_intrigue_value
add = agent_groups_owner_perspective_value
add = agent_groups_target_character_perspective_value
add = odds_abduct_scheme_misc_value
min = 0
}
# Base Chances
base_success_chance = {
base = 0
scheme_type_skill_success_chance_modifier = { SKILL = INTRIGUE }
hostile_scheme_base_chance_modifier = yes
# Countermeasures.
apply_calculated_scheme_success_chance_adjustments_modifier = yes
# You found their escape tunnel
modifier = {
add = 100
desc = "SCHEME_DISCOVERED_ESCAPE_TUNNEL"
scope:owner = {
exists = var:discovered_escape_tunnel_of
var:discovered_escape_tunnel_of = scope:target
}
}
# Spiritual Head of Faith
modifier = {
add = -50
desc = "SCHEME_VS_SPIRITUAL_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_spiritual_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Holy Order Head of Faith
modifier = {
add = -60
desc = "SCHEME_VS_HOLY_ORDER_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_holy_order_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Sponsored Inspiration
modifier = {
add = -25
desc = target_has_sponsored_inspiration
scope:target = {
exists = inspiration
inspiration = { exists = inspiration_sponsor }
}
}
# Family Feud
house_feud_hostile_scheme_success_modifier = yes
# Various penalties
first_valid = {
modifier = { # Foreign Rulers are very hard to kidnap
add = -75
desc = "sway_foreign_target"
scope:target = {
is_ruler = yes
NOT = {
scope:target.top_liege = scope:owner.top_liege
}
}
}
modifier = { # Foreign subjects less so
add = -40
desc = "sway_foreign_target"
scope:target = {
is_foreign_court_or_pool_guest = no
NOT = {
scope:target.top_liege = scope:owner.top_liege
}
}
}
modifier = { # Rulers are harder to kidnap
add = -50
desc = "FABRICATE_HOOK_RULER_TARGET"
scope:target = {
is_ruler = yes
scope:target.top_liege = scope:owner.top_liege
}
}
}
# At War
first_valid = {
modifier = {
add = -500
desc = "SCHEME_AT_WAR"
scope:target = {
is_at_war_with = scope:owner
}
}
modifier = {
add = -350
scope:target = {
is_playable_character = no
this != top_liege
any_liege_or_above = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
modifier = {
add = -250
scope:target = {
is_playable_character = yes
this != top_liege
any_liege_or_above = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
}
# Diarchs are better at schemes within their liege's realm
diarch_scheming_within_realm_bonus_modifier = yes
# You have a secret tunnel yourself
modifier = {
add = 25
desc = "SCHEME_SECRET_DOMICILE_TUNNEL"
scope:owner = {
exists = var:ep3_secret_tunnels_var
}
}
# Tailor
modifier = {
add = 10
scope:owner = {
has_character_modifier = tournament_tailor_mixup_scheme_modifier
exists = var:tailor_mixup_house
exists = scope:target.house
var:tailor_mixup_house = scope:target.house
}
desc = "tournament_tailor_mixup_scheme_modifier_value"
}
}
base_secrecy = {
add = secrecy_base_value
add = countermeasure_apply_secrecy_maluses_value
}
# On Actions
on_start = {
set_variable = {
name = apply_countermeasures
value = flag:calculating
}
add_scheme_starting_opportunities_intrigue_effect = yes
# Fallback agents — a balanced config if you start the scheme from script.
if = {
limit = {
scheme_owner = {
NOT = { has_variable = agents_added }
}
}
add_agent_slot = agent_thug
add_agent_slot = agent_thug
add_agent_slot = agent_muscle
add_agent_slot = agent_footpad
add_agent_slot = agent_lookout
}
}
on_phase_completed = {
suppress_scheme_follow_up_event_till_input_given_effect = yes
abduct_scheme_prep_effect = yes
cap_schemes_and_fire_reminders_effect = yes
}
on_hud_click = { abduct_scheme_prep_effect = yes }
on_semiyearly = {
if = {
limit = {
scheme_owner = { is_ai = yes }
}
abduct_scheme_prep_effect = yes
}
}
on_monthly = {
hostile_scheme_monthly_discovery_chance_effect = yes
if = {
limit = {
NOT = { exists = scope:discovery_event_happening }
}
scheme_owner = {
trigger_event = {
on_action = abduct_ongoing
days = { 1 30 }
}
}
}
}
on_invalidated = {
scheme_target_character = {
save_scope_as = target
}
scheme_owner = {
save_scope_as = owner
}
if = {
limit = {
scope:target = { is_alive = no }
}
scope:owner = {
send_interface_toast = {
title = abduct_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_died
}
}
}
}
else_if = {
limit = {
scope:target = {
is_imprisoned = yes
imprisoner = scope:owner
}
scope:owner = {
NOT = { has_character_flag = is_in_event_abduct_outcome_0001 } #You probably abducted them
}
}
scope:owner = {
send_interface_message = {
title = abduct_scheme_invalidated_title
type = abduct_invalidated_i_imprisoned_message
desc = abduct_scheme_i_imprisoned_them_message
left_icon = scope:target
}
}
}
else_if = {
limit = {
scope:target = {
is_imprisoned = yes
NOT = { imprisoner = scope:owner }
}
}
scope:target.imprisoner = {
save_scope_as = other_imprisoner
}
scope:owner = {
send_interface_toast = {
title = abduct_scheme_invalidated_title
left_icon = scope:target
right_icon = scope:other_imprisoner
custom_description_no_bullet = {
subject = scope:other_imprisoner
object = scope:target
text = scheme_target_imprisoned_by_other
}
}
}
}
else_if = {
limit = {
scope:target = {
NOT = { in_diplomatic_range = scope:owner }
}
}
scope:owner = {
send_interface_toast = {
title = abduct_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_not_in_diplomatic_range
}
}
}
}
}
}

View file

@ -0,0 +1,305 @@
overthrow_regent = {
# Basic Setup
skill = intrigue
desc = "overthrow_regent_desc_general"
success_desc = "OVERTHROW_REGENT_SUCCESS_DESC"
discovery_desc = "OVERTHROW_REGENT_DISCOVERY_DESC"
icon = icon_scheme_claim_throne
illustration = "gfx/interface/illustrations/event_scenes/corridor.dds"
category = hostile
target_type = character
is_secret = yes
maximum_breaches = 5
cooldown = { years = 5 }
# Parameters
speed_per_skill_point = t3_spsp_owner_value
speed_per_target_skill_point = t3_spsp_target_value
base_progress_goal = t3_base_phase_length_value
maximum_secrecy = 85
base_maximum_success = t2_base_max_success_value
phases_per_agent_charge = 1
success_chance_growth_per_skill_point = t3_scgpsp_value
# Core Triggers
allow = {
exists = liege
liege ?= diarch
NOT = { this = liege.diarch }
}
valid = {
is_incapable = no
scope:target = {
is_diarch = yes
is_imprisoned = no
exists = location
in_diplomatic_range = scope:owner
}
# You can't scheme to become diarch if you'd immediately invalidate out of it.
scope:owner = { is_diarch_valid_trigger = yes }
# You can't overthrow non-regencies. At least not this way.
scope:owner.liege ?= { has_diarchy_parameter = diarchy_is_regency }
}
# Agents
agent_leave_threshold = -25
agent_join_chance = {
base = 0
ai_agent_join_chance_basic_suite_modifier = yes
ai_agent_join_chance_hostile_grievous_modifier = yes
}
valid_agent = { is_valid_agent_standard_trigger = yes }
agent_groups_owner_perspective = { courtiers guests scripted_relations }
agent_groups_target_character_perspective = { courtiers vassals }
odds_prediction = {
add = hostile_scheme_base_odds_prediction_target_is_char_value
add = odds_skill_contribution_intrigue_value
add = agent_groups_owner_perspective_value
add = agent_groups_target_character_perspective_value
add = odds_diarch_scheme_misc_value
min = 0
}
# Base Chances
base_success_chance = {
base = 0
scheme_type_skill_success_chance_modifier = { SKILL = INTRIGUE }
hostile_scheme_base_chance_modifier = yes
# Countermeasures.
apply_calculated_scheme_success_chance_adjustments_modifier = yes
# Spiritual Head of Faith
modifier = {
add = -50
desc = "SCHEME_VS_SPIRITUAL_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_spiritual_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Holy Order Head of Faith
modifier = {
add = -55
desc = "SCHEME_VS_HOLY_ORDER_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_holy_order_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Scope:target's strife.
modifier = {
add = {
value = scope:target.strife_opinion
multiply = 0.25
min = 5
max = 40
}
scope:target = { strife_opinion >= 1 }
}
# Family Feud
house_feud_hostile_scheme_success_modifier = yes
# At War
first_valid = {
modifier = {
add = -200
desc = "SCHEME_AT_WAR"
scope:target = {
is_at_war_with = scope:owner
}
}
modifier = {
add = -150
scope:target = {
is_playable_character = no
exists = liege
liege = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
modifier = {
add = -100
scope:target = {
is_playable_character = yes
exists = liege
liege = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
}
}
base_secrecy = {
add = secrecy_base_value
add = countermeasure_apply_secrecy_maluses_value
}
# On Actions
on_start = {
set_variable = {
name = apply_countermeasures
value = flag:calculating
}
add_scheme_starting_opportunities_intrigue_effect = yes
# Fallback agents — a balanced config if you start the scheme from script.
if = {
limit = {
scheme_owner = {
NOT = { has_variable = agents_added }
}
}
add_agent_slot = agent_thug
add_agent_slot = agent_ambusher
add_agent_slot = agent_muscle
add_agent_slot = agent_footpad
add_agent_slot = agent_lookout
}
}
on_phase_completed = {
suppress_scheme_follow_up_event_till_input_given_effect = yes
overthrow_regent_scheme_prep_effect = yes
cap_schemes_and_fire_reminders_effect = yes
}
on_hud_click = { overthrow_regent_scheme_prep_effect = yes }
on_monthly = {
hostile_scheme_monthly_discovery_chance_effect = yes
if = {
limit = {
NOT = { exists = scope:discovery_event_happening }
}
scheme_owner = {
trigger_event = {
on_action = abduct_ongoing
days = { 1 30 }
}
}
}
}
on_semiyearly = {
if = {
limit = {
scheme_owner = { is_ai = yes }
}
overthrow_regent_scheme_prep_effect = yes
}
}
on_invalidated = {
scheme_target_character = { save_scope_as = target }
scheme_owner = { save_scope_as = owner }
# Scope:target is dead.
if = {
limit = {
scope:target = { is_alive = no }
}
scope:owner = {
send_interface_toast = {
title = overthrow_regent_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_died
}
}
}
}
# Scope:target has been preemptively
else_if = {
limit = {
scope:target = {
is_imprisoned = yes
imprisoner = scope:owner
}
scope:owner = {
NOT = { has_character_flag = is_in_event_diarchy_0501 }
}
}
scope:owner = {
send_interface_message = {
title = overthrow_regent_scheme_invalidated_title
type = abduct_invalidated_i_imprisoned_message
desc = overthrow_regent_scheme_i_imprisoned_them_message
left_icon = scope:target
}
}
}
else_if = {
limit = {
scope:target = {
is_imprisoned = yes
NOT = { imprisoner = scope:owner }
}
}
scope:target.imprisoner = { save_scope_as = other_imprisoner }
scope:owner = {
send_interface_toast = {
title = overthrow_regent_scheme_invalidated_title
left_icon = scope:target
right_icon = scope:other_imprisoner
custom_description_no_bullet = {
subject = scope:other_imprisoner
object = scope:target
text = scheme_target_imprisoned_by_other
}
}
}
}
else_if = {
limit = {
scope:target = {
NOT = { in_diplomatic_range = scope:owner }
}
}
scope:owner = {
send_interface_toast = {
title = overthrow_regent_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_not_in_diplomatic_range
}
}
}
}
else_if = {
limit = {
scope:owner = { is_diarch_valid_trigger = no }
}
scope:owner = {
send_interface_toast = {
title = overthrow_regent_scheme_cannot_become_regent
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = i_could_not_take_their_place
}
}
}
}
}
}

View file

@ -0,0 +1,494 @@
fabricate_hook = {
# Basic Setup
skill = intrigue
desc = fabricate_hook_desc_general
success_desc = "FABRICATE_HOOK_SUCCESS_DESC"
discovery_desc = "FABRICATE_HOOK_DISCOVERY_DESC"
icon = icon_scheme_fabricate_hook
illustration = "gfx/interface/illustrations/event_scenes/corridor.dds"
category = hostile
target_type = character
is_secret = yes
maximum_breaches = 5
cooldown = { years = 2 }
# Parameters
speed_per_skill_point = t2_spsp_owner_value
speed_per_target_skill_point = t2_spsp_target_value
spymaster_speed_per_skill_point = t2_spsp_owner_spy_value
target_spymaster_speed_per_skill_point = t2_spsp_target_spy_value
tier_speed = 1
base_progress_goal = t2_base_phase_length_value
maximum_secrecy = 95
base_maximum_success = t2_base_max_success_value
phases_per_agent_charge = 1
success_chance_growth_per_skill_point = t2_scgpsp_value
# Core Triggers
allow = {
OR = {
has_perk = truth_is_relative_perk # Scheme unlocked by Perk
AND = {
scope:owner = {
has_trait = vengeful
has_relation_rival = scope:target
}
}
AND = {
any_character_struggle = {
involvement = involved
has_struggle_phase_parameter = unlocks_fabricate_hooks_for_all
is_secondary_character_involvement_either_trigger = {
CHAR = scope:target
}
}
}
AND = {
government_has_flag = government_is_clan
is_in_same_clan_as_trigger = { CHARACTER = scope:target }
house = {
has_house_unity_parameter = unity_unlock_fabricate_hooks
}
}
}
is_adult = yes
is_playable_character = yes
is_imprisoned = no
}
valid = {
is_incapable = no
trigger_if = {
limit = { exists = scope:target.court_owner }
custom_description = {
text = was_discovered_fabricating_hooks_already
NOT = {
scope:target.court_owner = {
has_opinion_modifier = {
target = scope:owner
modifier = fabricated_hook_against_court_opinion
}
}
}
}
}
trigger_else = {
custom_description = {
text = can_not_fabricate_hooks_on_wanderers
always = no
}
}
scope:target = {
is_adult = yes
is_imprisoned = no
NOT = { has_trait = incapable }
#exists = location
in_diplomatic_range = scope:owner
}
#Temporary fix to communicate to players that the scheme is unavailabe.
#A character should always have a location but some characters are lost in the pool ATM
#This custom description should be removed once the pool is fixed, and the line from the previous block should be uncommented.
custom_description = {
text = in_diplomatic_range
scope:target = {
exists = location
}
}
custom_description = {
text = already_has_hook_on_ruler_target
NOT = { scope:owner = { has_hook = scope:target } }
object = scope:target
}
custom_description = {
text = already_has_strong_hook_on_target
NOT = { scope:owner = { has_strong_hook = scope:target } }
object = scope:target
}
custom_description = {
text = already_knows_secret_about_ruler_target
NOT = {
scope:target = {
is_ruler = yes
any_secret = {
is_known_by = scope:owner
is_blackmailable_secret_trigger = { BLACKMAILER = scope:owner PARTICIPANT = scope:target }
}
}
}
}
custom_description = {
text = already_knows_criminal_secret_about_target
NOT = {
scope:target = {
any_secret = {
is_criminal_for = scope:target
is_known_by = scope:owner
is_blackmailable_secret_trigger = { BLACKMAILER = scope:owner PARTICIPANT = scope:target }
}
}
}
}
# Special AI exceptions
NOT = {
scope:owner = {
is_ai = yes
has_opinion_modifier = {
target = scope:target
modifier = repentant_opinion
}
}
}
}
# Agents
agent_leave_threshold = -25
agent_join_chance = {
base = 0
ai_agent_join_chance_basic_suite_modifier = yes
ai_agent_join_chance_hostile_taboo_modifier = yes
}
valid_agent = { is_valid_agent_standard_trigger = yes }
agent_groups_owner_perspective = { courtiers guests scripted_relations }
agent_groups_target_character_perspective = { courtiers vassals }
odds_prediction = {
add = hostile_scheme_base_odds_prediction_target_is_char_value
add = odds_skill_contribution_intrigue_value
add = agent_groups_owner_perspective_value
add = agent_groups_target_character_perspective_value
add = odds_fabricate_hook_scheme_misc_value
min = 0
}
# Base Chances
base_success_chance = {
base = 0
scheme_type_skill_success_chance_modifier = { SKILL = INTRIGUE }
hostile_scheme_base_chance_modifier = yes
# Countermeasures.
apply_indirect_scheme_success_chance_adjustments_modifier = yes
modifier = {
add = 20
desc = FABRICATE_HOOK_DECEITFUL
scope:owner = {
has_trait = deceitful
}
}
modifier = {
add = -20
desc = FABRICATE_HOOK_HONEST
scope:owner = {
has_trait = honest
}
}
modifier = {
add = 10
desc = FABRICATE_HOOK_TARGET_TRUSTING
scope:target = {
has_trait = trusting
}
}
modifier = {
add = 10
desc = FABRICATE_HOOK_TARGET_INTELLECT_BAD_1
scope:target = {
has_trait = intellect_bad_1
}
}
modifier = {
add = 20
desc = FABRICATE_HOOK_TARGET_INTELLECT_BAD_2
scope:target = {
has_trait = intellect_bad_2
}
}
modifier = {
add = 30
desc = FABRICATE_HOOK_TARGET_INTELLECT_BAD_3
scope:target = {
has_trait = intellect_bad_3
}
}
modifier = {
add = -10
desc = FABRICATE_HOOK_TARGET_INTELLECT_GOOD_1
scope:target = {
has_trait = intellect_good_1
}
}
modifier = {
add = -20
desc = FABRICATE_HOOK_TARGET_INTELLECT_GOOD_2
scope:target = {
has_trait = intellect_good_2
}
}
modifier = {
add = -30
desc = FABRICATE_HOOK_TARGET_INTELLECT_GOOD_3
scope:target = {
has_trait = intellect_good_3
}
}
modifier = {
add = -20
desc = FABRICATE_HOOK_TARGET_SCHEMER
scope:target = {
has_trait = schemer
}
}
modifier = {
add = -20
desc = FABRICATE_HOOK_TARGET_PARANOID
scope:target = {
has_trait = paranoid
}
}
modifier = {
add = -10
desc = FABRICATE_HOOK_TARGET_FICKLE
scope:target = {
has_trait = fickle
}
}
modifier = {
add = 10
desc = FABRICATE_HOOK_TARGET_ARROGANT
scope:target = {
has_trait = arrogant
}
}
modifier = {
add = 20
desc = FABRICATE_HOOK_TARGET_GREEDY
scope:target = {
has_trait = greedy
}
}
modifier = {
add = 10
desc = FABRICATE_HOOK_TARGET_CRAVEN
scope:target = {
has_trait = craven
}
}
# Diarchs are better at schemes within their liege's realm
diarch_scheming_within_realm_bonus_modifier = yes
compare_modifier = {
value = scope:owner.cp:councillor_spymaster.intrigue
multiplier = 2
desc = FABRICATE_HOOK_SPYMASTER_INTRIGUE
trigger = {
exists = scope:owner.cp:councillor_spymaster
NOT = { scope:owner.cp:councillor_spymaster = scope:target }
}
}
modifier = {
add = -50
desc = FABRICATE_HOOK_TARGETING_SPYMASTER
scope:target = {
has_council_position = councillor_spymaster
}
}
# Holy Order Head of Faith
modifier = {
add = -45
desc = "SCHEME_VS_HOLY_ORDER_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_holy_order_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Spiritual Head of Faith
modifier = {
add = -50
desc = "SCHEME_VS_SPIRITUAL_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_spiritual_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
}
base_secrecy = {
add = secrecy_base_value
add = countermeasure_apply_secrecy_maluses_value
}
# On Actions
on_start = {
set_variable = {
name = apply_countermeasures
value = flag:indirect
}
add_scheme_starting_opportunities_intrigue_effect = yes
# Fallback agents — a balanced config if you start the scheme from script.
if = {
limit = {
scheme_owner = {
NOT = { has_variable = agents_added }
}
}
add_agent_slot = agent_outcast
add_agent_slot = agent_diplomat
add_agent_slot = agent_thief
add_agent_slot = agent_infiltrator
add_agent_slot = agent_lookout
}
}
on_phase_completed = {
suppress_scheme_follow_up_event_till_input_given_effect = yes
fabricate_hook_scheme_prep_effect = yes
cap_schemes_and_fire_reminders_effect = yes
}
on_hud_click = { fabricate_hook_scheme_prep_effect = yes }
on_monthly = {
hostile_scheme_monthly_discovery_chance_effect = yes
if = {
limit = {
NOT = { exists = scope:discovery_event_happening }
}
scheme_owner = {
trigger_event = {
on_action = fabricate_hook_ongoing
days = { 1 30 }
}
}
}
}
on_semiyearly = {
if = {
limit = {
scheme_owner = { is_ai = yes }
}
fabricate_hook_scheme_prep_effect = yes
}
}
on_invalidated = {
scheme_target_character = {
save_scope_as = target
}
scheme_owner = {
save_scope_as = owner
}
if = {
limit = {
scope:target = { is_alive = no }
}
scope:owner = {
send_interface_toast = {
title = fabricate_hook_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_died
}
}
}
}
else_if = {
limit = {
scope:target = {
is_imprisoned = yes
}
}
scope:target.imprisoner = { save_scope_as = other_imprisoner }
scope:owner = {
send_interface_toast = {
title = fabricate_hook_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
subject = scope:other_imprisoner
object = scope:target
text = scheme_target_imprisoned_by_other
}
}
}
}
else_if = {
limit = {
scope:target = {
has_trait = incapable
}
}
scope:owner = {
send_interface_toast = {
title = fabricate_hook_scheme_invalidated_title
left_icon = scope:target
custom_tooltip = scheme_target_is_incapable
}
}
}
else_if = {
limit = {
scope:owner = {
has_hook = scope:target
}
}
scope:owner = {
send_interface_toast = {
title = fabricate_hook_scheme_invalidated_title
left_icon = scope:target
custom_tooltip = fabricate_hook_has_gained_hook
}
}
}
else_if = {
limit = {
scope:target = {
NOT = { in_diplomatic_range = scope:owner }
}
}
scope:owner = {
send_interface_toast = {
title = fabricate_hook_scheme_invalidated_title
left_icon = scope:target
custom_description_no_bullet = {
object = scope:target
text = scheme_target_not_in_diplomatic_range
}
}
}
}
}
}

View file

@ -0,0 +1,437 @@
murder = {
# Basic Setup
skill = intrigue
desc = murder_desc_general
success_desc = "MURDER_SUCCESS_DESC"
discovery_desc = "MURDER_DISCOVERY_DESC"
icon = icon_scheme_murder
illustration = "gfx/interface/illustrations/event_scenes/corridor.dds"
category = hostile
target_type = character
is_secret = yes
maximum_breaches = 5
cooldown = { years = 10 }
# Parameters
speed_per_skill_point = t2_spsp_owner_value
speed_per_target_skill_point = t2_spsp_target_value
base_progress_goal = t2_base_phase_length_value
maximum_secrecy = 95
base_maximum_success = t2_base_max_success_value
phases_per_agent_charge = 1
success_chance_growth_per_skill_point = t2_scgpsp_value
# Core Triggers
allow = {
age >= 14
is_imprisoned = no
}
valid = {
is_incapable = no
trigger_if = {
limit = {
is_parent_of = scope:target
NOT = {
has_trait_with_flag = can_murder_own_children
}
}
NOT = { is_parent_of = scope:target }
}
custom_description = {
object = scope:target
text = "I_have_imprisoned_target"
scope:target = {
NOT = { imprisoner = scope:owner }
}
}
custom_description = {
object = scope:target
text = i_have_been_caught_trying_to_murder_target
scope:target = {
NOT = {
has_opinion_modifier = {
target = prev
modifier = murder_personal_grudge_opinion
}
}
}
}
scope:target = {
OR = {
exists = location
in_diplomatic_range = scope:owner
}
}
# Special AI exceptions
NOT = {
scope:owner = {
is_ai = yes
has_opinion_modifier = {
target = scope:target
modifier = repentant_opinion
}
}
}
}
# Agents
agent_leave_threshold = -25
agent_join_chance = {
base = 0
ai_agent_join_chance_basic_suite_modifier = yes
ai_agent_join_chance_hostile_grievous_modifier = yes
}
agent_groups_owner_perspective = { courtiers guests scripted_relations }
agent_groups_target_character_perspective = { courtiers vassals }
valid_agent = { is_valid_agent_standard_trigger = yes }
odds_prediction = {
add = hostile_scheme_base_odds_prediction_target_is_char_value
add = odds_skill_contribution_intrigue_value
add = agent_groups_owner_perspective_value
add = agent_groups_target_character_perspective_value
add = odds_variables_contribution_murder
add = odds_murder_scheme_misc_value
min = 0
}
# Base Chances
base_success_chance = {
base = 0
scheme_type_skill_success_chance_modifier = { SKILL = INTRIGUE }
hostile_scheme_base_chance_modifier = yes
# Countermeasures.
apply_calculated_scheme_success_chance_adjustments_modifier = yes
# Your dark arts advisor is helping you out
modifier = {
add = 15
desc = "ACHMACH_MURDER_BONUS"
scope:owner = {
has_variable = achmach_murder_help_var
any_councillor = {
has_variable = achmach_murder_help_councillor_var
}
}
}
# As Temüjin, you swore to murder Jamukha
modifier = {
add = 50
desc = "TEMUJIN_JAMUKHA_MURDER_BONUS"
scope:owner = {
exists = var:temujin_jamukha_murder_var
var:temujin_jamukha_murder_var = scope:target
}
}
# Imaginary friend told you to kill them
modifier = {
add = 50
desc = "IMAGINARY_FRIEND_MURDER_BONUS"
scope:owner = {
exists = var:imaginary_friend_murder_target
var:imaginary_friend_murder_target = scope:target
}
}
# They crowned you king/queen of fools
modifier = {
add = 20
desc = "MURDER_FOOL_NEMESIS_BONUS"
scope:owner = {
exists = var:festival_nemesis_fool_var
var:festival_nemesis_fool_var = scope:target
}
}
# You found their escape tunnel
modifier = {
add = 100
desc = "SCHEME_DISCOVERED_ESCAPE_TUNNEL"
scope:owner = {
exists = var:discovered_escape_tunnel_of
var:discovered_escape_tunnel_of = scope:target
}
}
# You heard them explain their plan to your camp followers
modifier = {
add = 50
desc = "SCHEME_ET_TU_BRUTE"
scope:owner = {
exists = var:et_tu_brute_var
var:et_tu_brute_var = scope:target
}
}
# You know where their chamber is
modifier = {
add = 50
desc = "SCHEME_WNIGHT_VICTIM_CHAMBER"
scope:owner = {
exists = var:wnight_chandelier_murder_var
var:wnight_chandelier_murder_var = scope:target
}
}
modifier = {
add = 10
scope:owner = { has_trait = lifestyle_herbalist }
desc = MURDER_HERBALIST_BONUS
}
modifier = {
add = -50
scope:target = {
has_opinion_modifier = {
target = scope:owner
modifier = attempted_murder_me_crime
}
}
desc = HAS_ATTEMPTED_TO_MURDER_TARGET_BEFORE
}
# Spiritual Head of Faith
modifier = {
add = -50
desc = "SCHEME_VS_SPIRITUAL_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_spiritual_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Holy Order Head of Faith
modifier = {
add = -60
desc = "SCHEME_VS_HOLY_ORDER_HOF"
scope:target = {
faith = scope:owner.faith
faith = {
has_doctrine = doctrine_holy_order_head
}
faith = {
exists = religious_head
religious_head = {
this = scope:target
}
}
}
}
# Sponsored Inspiration
modifier = {
add = -25
desc = target_has_sponsored_inspiration
scope:target = {
exists = inspiration
inspiration = { exists = inspiration_sponsor }
}
}
# Family Feud
house_feud_hostile_scheme_success_modifier = yes
# At War
first_valid = {
modifier = {
add = -50
desc = "SCHEME_AT_WAR"
scope:target = {
is_at_war_with = scope:owner
}
}
modifier = {
add = -25
scope:target = {
is_playable_character = no
exists = liege
liege = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
modifier = {
add = -25
scope:target = {
is_playable_character = yes
exists = liege
liege = {
is_at_war_with = scope:owner
}
}
desc = "SCHEME_AT_WAR_WITH_LIEGE"
}
}
# Diarchs are better at schemes within their liege's realm
diarch_scheming_within_realm_bonus_modifier = yes
# Tailor
modifier = {
add = 10
scope:owner = {
has_character_modifier = tournament_tailor_mixup_scheme_modifier
exists = var:tailor_mixup_house
exists = scope:target.house
var:tailor_mixup_house = scope:target.house
}
desc = "tournament_tailor_mixup_scheme_modifier_value"
}
modifier = {
add = 10
desc = feast_learnt_habits_modifier.tt
scope:owner = {
any_scheme = {
scheme_type = murder
scheme_target_character = scope:target
has_scheme_modifier = feast_learnt_habits_modifier
}
}
}
# Caliph protection
modifier = {
add = -200
scope:target = {
has_character_modifier = fp3_struggle_caliph_super_suspicious_modifier
}
desc = has_fp3_struggle_caliph_super_suspicious_modifier
}
# Events
modifier = {
add = -50
scope:target = {
has_character_modifier = cant_poison_soup_modifier
}
desc = cant_poison_soup_modifier_value
}
}
base_secrecy = {
add = secrecy_base_value
add = countermeasure_apply_secrecy_maluses_value
add = secrecy_charting_realm_increase_value
}
# On Actions
on_start = {
set_variable = {
name = apply_countermeasures
value = flag:calculating
}
add_scheme_starting_opportunities_intrigue_effect = yes
# Fallback agents — a balanced config if you start the scheme from script.
if = {
limit = {
scheme_owner = {
NOT = { has_variable = agents_added }
}
}
add_agent_slot = agent_assassin
add_agent_slot = agent_assassin
add_agent_slot = agent_thug
add_agent_slot = agent_infiltrator
add_agent_slot = agent_alibi
}
else = {
scheme_owner = { remove_variable = agents_added }
}
scheme_owner = {
if = {
limit = {
domicile ?= { has_domicile_parameter = camp_unlocks_poisoner_scheme_agents }
}
root = { add_agent_slot = agent_poisoner }
}
}
}
on_phase_completed = {
suppress_scheme_follow_up_event_till_input_given_effect = yes
murder_scheme_prep_effect = yes
cap_schemes_and_fire_reminders_effect = yes
}
on_hud_click = { murder_scheme_prep_effect = yes }
on_semiyearly = {
if = {
limit = {
scheme_owner = { is_ai = yes }
}
murder_scheme_prep_effect = yes
}
}
on_monthly = {
hostile_scheme_monthly_discovery_chance_effect = yes
if = {
limit = {
NOT = { exists = scope:discovery_event_happening }
}
scheme_owner = {
trigger_event = {
on_action = murder_ongoing
}
}
}
}
on_invalidated = {
scheme_target_character = {
save_scope_as = target
}
scheme_owner = {
save_scope_as = owner
}
if = { # If the target is part of the imaginary friend story cycle, fire this invalidation event, otherwise fire one of the normal ones
limit = {
scope:target = {
is_alive = no
NOT = { killer = scope:owner }
}
scope:owner = { var:imaginary_friend_murder_target ?= scope:target }
}
scope:owner = {
trigger_event = bp2_yearly.2023
}
}
else = {
if = { #Did the character die in another way?
limit = {
scope:target = {
is_alive = no
NOT = { killer = scope:owner }
}
}
scope:owner = {
trigger_event = murder_outcome.2000
}
}
if = { #Did the character move outside of diplomatic range
limit = {
scope:target = {
NOT = { in_diplomatic_range = scope:owner }
}
}
scope:owner = {
trigger_event = murder_outcome.2500
}
}
}
}
}

View file

@ -3,4 +3,11 @@
faith = faith:orleaniste
religion = religion:catholic_religion
}
}
doctrine_is_spiritual_type = {
OR = {
has_doctrine = doctrine_spiritual_head
has_doctrine = doctrine_holy_order_head
}
}

View file

@ -0,0 +1,13 @@
l_english:
# l_spanish:
# l_german:
# l_french:
# l_russian:
# l_simp_chinese:
# l_korean:
doctrine_holy_order_head_name:0 "Holy Order"
doctrine_holy_order_head_desc:0 "When the physical world comes under attack it is those blessed by the spiritual that should come to its defence. It only makes sense that those who lead the defence of the faith should lead the faith itself."
doctrine_parameter_holy_order_head_of_faith:0 "The [head_of_faith|E] [title|El] is an [unlanded|El] [holy_order|E] which can be hired by the faithful or have titles [leased|El] to them."
doctrine_parameter_no_holy_orders_til_hof:0 "[Concept('holy_order','Holy Orders')|E] cannot be established unless the [head_of_faith|E] exists."
at_least_one_open_barony_in_domain:0 "At least one barony in your domain must be empty to host a Holy Order"

View file

@ -24,6 +24,11 @@ game_concept_neow_charlemagne_desc: "Novelists believe mankind was first united
game_concept_neow_indifference: "Indifférence"
game_concept_neow_indifference_desc: ""A terrible yet beautiful goddess, uninterested in the matters of man, with those seeking to understand her falling into madness. However, she is always by our side, giving us satisfaction, healing our wounds with the passage of time, and embracing us in our final hour. She is Cold, but not Cruel."\n\n#tooltip_subheading - Renaud de Templemont#!"
# Holy Order Stuff
game_concept_holy_order_head_of_faith: "Holy Order Head of Faith"
game_concept_head_of_faith_holy_order: "Holy Order"
game_concept_holy_order_head_of_faith_desc: "A [GetFaithDoctrine('doctrine_holy_order_head').GetBaseName] [head_of_faith|E] is [theocratic|E] and can not be [landed|E].\n\nThey lead a [holy_order|E] that any member of their faith can utilize when warring against infidels.\n\n$game_concept_head_of_faith_holy_order$ $game_concept_heads_of_faith$ usually have access to interactions such as being able to grant [claims|E] or [gold|E].\n\nShould the [doctrines|E] of the [faith|E] allow for [great_holy_wars|E] then they will be [great_holy_war_undirected|E] #weak (e.g. Crusades)#!."
#europeanist stuff
game_concept_neow_the_belle_epoque: "The Belle Époque"
game_concept_neow_the_belle_epoque_desc: "Europeanists call the waning days of the Old World the "Belle Époque", or the Beautiful Era of history. They hold that, under the wise guidance of the Emperors of Europa, the entire continent was more stable than it had ever been. A period of prosperity and culture, its end marked the beginning of the greatest dark age mankind has ever seen.\n\nHowever, not all are convinced the Belle Époque truly existed - for if it was so great, why did it fall?"