From c7bd60cc44aa8e348558e4430100d5e88193e5c4 Mon Sep 17 00:00:00 2001 From: edwardtheelbowhigh <73761109+edwardtheelbowhigh@users.noreply.github.com> Date: Tue, 19 May 2026 13:49:18 +0100 Subject: [PATCH] Attempt 1 at holy orders head of faith --- common/decisions/00_holy_order_decisions.txt | 513 +++++++++++++++++ common/decisions/religious_decisions_NEOW.txt | 212 ++++++- common/dynasty_perks/00_dynasty_perks.txt | 536 ++++++++++++++++++ common/on_action/religion_on_actions.txt | 54 ++ common/on_action/yearly_on_actions.txt | 10 +- .../religion/doctrine_types/20_doctrines.txt | 16 + .../doctrine_types/30_core_tenets.txt | 5 +- common/schemes/scheme_types/abduct_scheme.txt | 393 +++++++++++++ .../schemes/scheme_types/diarch_schemes.txt | 305 ++++++++++ .../scheme_types/fabricate_hook_scheme.txt | 494 ++++++++++++++++ common/schemes/scheme_types/murder_scheme.txt | 437 ++++++++++++++ .../NEOW_religion_triggers.txt | 7 + .../N3OW_holy_order_events.txt | 0 .../religion_events/faith_creation_events.txt | 0 ...N3OW_head_of_faith_doctrines_l_english.txt | 13 + .../zz_NEOW_game_concepts_l_english.yml | 5 + 16 files changed, 2996 insertions(+), 4 deletions(-) create mode 100644 common/decisions/00_holy_order_decisions.txt create mode 100644 common/dynasty_perks/00_dynasty_perks.txt create mode 100644 common/schemes/scheme_types/abduct_scheme.txt create mode 100644 common/schemes/scheme_types/diarch_schemes.txt create mode 100644 common/schemes/scheme_types/fabricate_hook_scheme.txt create mode 100644 common/schemes/scheme_types/murder_scheme.txt create mode 100644 events/religion_events/N3OW_holy_order_events.txt create mode 100644 events/religion_events/faith_creation_events.txt create mode 100644 localization/english/replace/N3OW_head_of_faith_doctrines_l_english.txt diff --git a/common/decisions/00_holy_order_decisions.txt b/common/decisions/00_holy_order_decisions.txt new file mode 100644 index 00000000..4733a955 --- /dev/null +++ b/common/decisions/00_holy_order_decisions.txt @@ -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 + } + } + } +} diff --git a/common/decisions/religious_decisions_NEOW.txt b/common/decisions/religious_decisions_NEOW.txt index 0b00e975..ee794abf 100644 --- a/common/decisions/religious_decisions_NEOW.txt +++ b/common/decisions/religious_decisions_NEOW.txt @@ -86,4 +86,214 @@ ai_will_do = { base = 100 } -} \ No newline at end of file +} +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 + } +} \ No newline at end of file diff --git a/common/dynasty_perks/00_dynasty_perks.txt b/common/dynasty_perks/00_dynasty_perks.txt new file mode 100644 index 00000000..200eec64 --- /dev/null +++ b/common/dynasty_perks/00_dynasty_perks.txt @@ -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 + } +} diff --git a/common/on_action/religion_on_actions.txt b/common/on_action/religion_on_actions.txt index 2ceade6b..569b03d7 100644 --- a/common/on_action/religion_on_actions.txt +++ b/common/on_action/religion_on_actions.txt @@ -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 }} diff --git a/common/on_action/yearly_on_actions.txt b/common/on_action/yearly_on_actions.txt index 3544dff8..79c00f7a 100644 --- a/common/on_action/yearly_on_actions.txt +++ b/common/on_action/yearly_on_actions.txt @@ -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 } } diff --git a/common/religion/doctrine_types/20_doctrines.txt b/common/religion/doctrine_types/20_doctrines.txt index 888013fd..6fb93e12 100644 --- a/common/religion/doctrine_types/20_doctrines.txt +++ b/common/religion/doctrine_types/20_doctrines.txt @@ -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" diff --git a/common/religion/doctrine_types/30_core_tenets.txt b/common/religion/doctrine_types/30_core_tenets.txt index f84a9b91..3c46020a 100644 --- a/common/religion/doctrine_types/30_core_tenets.txt +++ b/common/religion/doctrine_types/30_core_tenets.txt @@ -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 = { diff --git a/common/schemes/scheme_types/abduct_scheme.txt b/common/schemes/scheme_types/abduct_scheme.txt new file mode 100644 index 00000000..fa48629e --- /dev/null +++ b/common/schemes/scheme_types/abduct_scheme.txt @@ -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 + } + } + } + } + } +} diff --git a/common/schemes/scheme_types/diarch_schemes.txt b/common/schemes/scheme_types/diarch_schemes.txt new file mode 100644 index 00000000..79c2031e --- /dev/null +++ b/common/schemes/scheme_types/diarch_schemes.txt @@ -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 + } + } + } + } + } +} diff --git a/common/schemes/scheme_types/fabricate_hook_scheme.txt b/common/schemes/scheme_types/fabricate_hook_scheme.txt new file mode 100644 index 00000000..9396a588 --- /dev/null +++ b/common/schemes/scheme_types/fabricate_hook_scheme.txt @@ -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 + } + } + } + } + } +} diff --git a/common/schemes/scheme_types/murder_scheme.txt b/common/schemes/scheme_types/murder_scheme.txt new file mode 100644 index 00000000..1b07d8a3 --- /dev/null +++ b/common/schemes/scheme_types/murder_scheme.txt @@ -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 + } + } + } + } +} diff --git a/common/scripted_triggers/NEOW_religion_triggers.txt b/common/scripted_triggers/NEOW_religion_triggers.txt index 3c6dcdd0..45ed3e42 100644 --- a/common/scripted_triggers/NEOW_religion_triggers.txt +++ b/common/scripted_triggers/NEOW_religion_triggers.txt @@ -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 + } } \ No newline at end of file diff --git a/events/religion_events/N3OW_holy_order_events.txt b/events/religion_events/N3OW_holy_order_events.txt new file mode 100644 index 00000000..e69de29b diff --git a/events/religion_events/faith_creation_events.txt b/events/religion_events/faith_creation_events.txt new file mode 100644 index 00000000..e69de29b diff --git a/localization/english/replace/N3OW_head_of_faith_doctrines_l_english.txt b/localization/english/replace/N3OW_head_of_faith_doctrines_l_english.txt new file mode 100644 index 00000000..d12e99fb --- /dev/null +++ b/localization/english/replace/N3OW_head_of_faith_doctrines_l_english.txt @@ -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" + \ No newline at end of file diff --git a/localization/english/replace/zz_NEOW_game_concepts_l_english.yml b/localization/english/replace/zz_NEOW_game_concepts_l_english.yml index 4e47b044..0f3b5f9c 100644 --- a/localization/english/replace/zz_NEOW_game_concepts_l_english.yml +++ b/localization/english/replace/zz_NEOW_game_concepts_l_english.yml @@ -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?"