###################################### # Heresy system - scripted triggers # ###################################### # Per-heresy gating, geography helpers, and component eligibility checks. # Resurgence model: each historical heresy can fire more than once per game. # first outbreak: pam_heresy_X_first_fired global var is unset # resurgence: first_fired set, plus pam_heresy_X_cooldown timed flag absent # A 50-year cooldown is set after every outbreak via timed global variable. # --- Component eligibility (faith scope) --- # The second and third heresy components are blocked below this # The first still fires, but we dampen the pulse with pam_heresy_pulse_no_event_value pam_heresy_main_rite_substantial_trigger = { main_rite.rite_counties >= pam_heresy_main_rite_county_threshold_value } # Component 2 gate: main rite must be substantial (size floor) AND hold at least 60% of faith counties (dominance share). pam_heresy_c2_main_rite_dominant_trigger = { pam_heresy_main_rite_substantial_trigger = yes main_rite.rite_counties >= pam_heresy_c2_main_rite_share_required_value } # NEOW: post-Event Orthodox heresies use the existing monthly low-fervor # Component 3 pulse. They share the same candidate rules, but each has its # own 50-year global cooldown. Old pre-Event heresies stay disabled. pam_heresy_c3_eligible_trigger = { OR = { pam_heresy_theoadamist_eligible_trigger = yes pam_heresy_marblist_eligible_trigger = yes pam_heresy_elysian_eligible_trigger = yes pam_heresy_illuminated_eligible_trigger = yes pam_heresy_neo_fraticelli_eligible_trigger = yes pam_heresy_catholic_tribunal_eligible_trigger = yes pam_heresy_cadaverist_eligible_trigger = yes pam_heresy_penitente_eligible_trigger = yes } } # All three may emerge from Eastern Orthodox faiths. Marblism may originate # under either AI or player rulers; the other two use eligible AI founders. pam_heresy_theoadamist_eligible_trigger = { religion = religion:eastern_orthodox_religion this != faith:theoadamist_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_theoadamist_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes } } pam_heresy_marblist_eligible_trigger = { religion = religion:eastern_orthodox_religion this != faith:marblist num_county_followers > 0 NOT = { exists = global_var:pam_heresy_marblist_cooldown } # No geographic requirement: any landed adult ruler of the source faith, # including the player, can host the preacher Konstantinos. any_faith_ruler = { pam_heresy_marblist_epicenter_trigger = yes } } pam_heresy_elysian_eligible_trigger = { religion = religion:eastern_orthodox_religion this != faith:elysian num_county_followers > 0 NOT = { exists = global_var:pam_heresy_elysian_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes } } # Character scope: eligible AI adult landed count (or higher) whose position # does not require being preserved as a clerical-region or HoF incumbent. pam_heresy_neow_epicenter_trigger = { is_ai = yes is_landed = yes highest_held_title_tier >= tier_county exists = capital_county is_adult = yes NOT = { has_trait = heresiarch } NOT = { has_character_flag = recently_converted_by_heresy } NOT = { recently_converted_faith_trigger = yes } NOT = { any_held_title = { has_clerical_region = yes } } NOT = { any_held_title = { is_head_of_faith = yes } } } # Character scope: Marblist founder may be anywhere in the source faith, # including a player-controlled realm (the player is offered a choice, not # forcibly converted). pam_heresy_marblist_epicenter_trigger = { is_landed = yes is_adult = yes exists = capital_county } # Compatibility alias for other event or scripted files using the old name. pam_heresy_theoadamist_epicenter_trigger = { pam_heresy_neow_epicenter_trigger = yes } #pam_heresy_c3_eligible_trigger = { # religion = religion:christianity_religion # pam_heresy_main_rite_substantial_trigger = yes # OR = { # pam_heresy_lollard_eligible_trigger = yes # pam_heresy_hussite_eligible_trigger = yes # pam_heresy_joachimite_eligible_trigger = yes # pam_heresy_cathar_eligible_trigger = yes # pam_heresy_waldensian_eligible_trigger = yes # pam_heresy_bogomilist_eligible_trigger = yes # pam_heresy_paulician_eligible_trigger = yes # pam_heresy_iconoclast_eligible_trigger = yes # pam_heresy_adoptionist_eligible_trigger = yes # pam_heresy_messalian_eligible_trigger = yes # } #} # --- Per-heresy "is this heresy still available?" --- # Each heresy can fire if past its earliest_date, the parent faith of the outbreak # (root) is not the heresy faith itself, optional time windows pass, and the # 50-year resurgence cooldown has elapsed since the last outbreak (if any). #pam_heresy_lollard_eligible_trigger = { # current_date >= 1340.1.1 # this != faith:lollard # pam_heresy_lollard_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_lollard_cooldown } #} #pam_heresy_hussite_eligible_trigger = { # current_date >= 1360.1.1 # this != faith:hussite # pam_heresy_hussite_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_hussite_cooldown } #} #pam_heresy_joachimite_eligible_trigger = { # current_date >= 1200.1.1 # this != faith:joachimite # pam_heresy_joachimite_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_joachimite_cooldown } #} #pam_heresy_cathar_eligible_trigger = { # current_date >= 1140.1.1 # this != faith:cathar # pam_heresy_cathar_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_cathar_cooldown } #} #pam_heresy_waldensian_eligible_trigger = { # current_date >= 1160.1.1 # this != faith:waldensian # pam_heresy_waldensian_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_waldensian_cooldown } #} #pam_heresy_bogomilist_eligible_trigger = { # current_date >= 950.1.1 # this != faith:bogomilist # pam_heresy_bogomilist_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_bogomilist_cooldown } #} # Always-anonymous repeating outbreaks. No first-historical figure - founder is always a generic resurgence preacher. #pam_heresy_paulician_eligible_trigger = { # current_date >= 870.1.1 # this != faith:paulician # pam_heresy_paulician_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_paulician_cooldown } #} #pam_heresy_iconoclast_eligible_trigger = { # current_date >= 900.1.1 # this != faith:iconoclast # pam_heresy_iconoclast_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_iconoclast_cooldown } #} # Adoptionism: Felix of Urgell died ~818, the Spanish argument fades after the first millennium - hard time-gate to before 1000. #pam_heresy_adoptionist_eligible_trigger = { # current_date >= 870.1.1 # current_date <= 999.12.31 # this != faith:adoptionist # NOT = { exists = global_var:pam_heresy_adoptionist_cooldown } #} #pam_heresy_messalian_eligible_trigger = { # current_date >= 870.1.1 # this != faith:messalian # pam_heresy_messalian_strict_window_ok_trigger = yes # NOT = { exists = global_var:pam_heresy_messalian_cooldown } #} # --- Strict-rule per-heresy historical windows --- # Only enforced when game rule = strict_regional_heresy. # The "strict" window is the historical lifetime of the named founder; outside that, strict mode rejects the outbreak entirely. # Always-anonymous heresies have no strict window (they're resurgence-flavoured by default). #pam_heresy_lollard_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1430.1.1 # } #} #pam_heresy_hussite_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1450.1.1 # } #} # Joachimite: strict mode cuts off after Fra Dolcino's burning, as later Fraticelli are too institutional #pam_heresy_joachimite_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1310.1.1 # } #} #pam_heresy_cathar_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1230.1.1 # } #} #pam_heresy_waldensian_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1250.1.1 # } #} #pam_heresy_bogomilist_strict_window_ok_trigger = { # OR = { # NOT = { has_game_rule = strict_regional_heresy } # current_date <= 1100.1.1 # } #} # Always-anonymous: strict mode just lets them through (no historical figure to anchor). pam_heresy_paulician_strict_window_ok_trigger = { always = yes } pam_heresy_iconoclast_strict_window_ok_trigger = { always = yes } pam_heresy_messalian_strict_window_ok_trigger = { always = yes } # --- Resurgence detection (faith scope on the parent faith) --- # Always-anonymous heresies skip this and set scope:is_resurgence in the router #pam_heresy_lollard_is_resurgence_trigger = { # exists = global_var:pam_heresy_lollard_first_fired #} #pam_heresy_hussite_is_resurgence_trigger = { # exists = global_var:pam_heresy_hussite_first_fired #} #pam_heresy_joachimite_is_resurgence_trigger = { # exists = global_var:pam_heresy_joachimite_first_fired #} #pam_heresy_cathar_is_resurgence_trigger = { # exists = global_var:pam_heresy_cathar_first_fired #} #pam_heresy_waldensian_is_resurgence_trigger = { # exists = global_var:pam_heresy_waldensian_first_fired #} #pam_heresy_bogomilist_is_resurgence_trigger = { # exists = global_var:pam_heresy_bogomilist_first_fired #} # --- Pre-declaration vs already-declared (faith scope on the heresy faith) --- pam_heresy_faith_is_pre_declaration_trigger = { has_variable = block_conversion_till_decision_taken } # True when the recipient is already on the heresy's rite. # Used to gate "embrace" / reframe "reject" options and description text so the # event does not address one of the heresy's own followers as an outside observer. pam_heresy_player_is_heresy_insider_trigger = { trigger_if = { limit = { exists = scope:new_rite } rite = scope:new_rite } trigger_else_if = { limit = { exists = scope:heresy_faith } faith = scope:heresy_faith } trigger_else = { always = no } } # --- Geography helpers (province scope) --- # Callers in county scope must wrap with title_province = { ... }. #pam_heresy_lollard_region_trigger = { # OR = { # geographical_region = world_europe_west_britannia # geographical_region = world_europe_west_germania # } #} #pam_heresy_hussite_region_trigger = { # # Bohemia / Moravia sit inside world_europe_west_germania. # geographical_region = world_europe_west_germania #} #pam_heresy_joachimite_region_trigger = { # # Calabria, the Italian peninsula, Provence, and southern France # OR = { # geographical_region = world_europe_south_italy # geographical_region = world_europe_west_francia # } #} #pam_heresy_cathar_region_trigger = { # OR = { # geographical_region = world_europe_west_francia # geographical_region = world_europe_south_italy # } #} #pam_heresy_waldensian_region_trigger = { # OR = { # geographical_region = world_europe_west_francia # geographical_region = world_europe_south_italy # } #} #pam_heresy_bogomilist_region_trigger = { # geographical_region = world_europe_south_east #} #pam_heresy_paulician_region_trigger = { # geographical_region = world_asia_minor #} #pam_heresy_iconoclast_region_trigger = { # OR = { # geographical_region = world_asia_minor # geographical_region = world_europe_south_east # } #} #pam_heresy_adoptionist_region_trigger = { # geographical_region = world_europe_west_iberia #} #pam_heresy_messalian_region_trigger = { # geographical_region = world_middle_east #} # --- Component 2 founder eligibility (character scope) --- # Mirrors is_eligible_rite_growth_founder_trigger but is permissive about existing heresiarch / herald carriers # C2 is the "charismatic schismatic" path and those traits are an asset here. # Archbishop-only candidates (no held county on the source rite) are accepted via the clerical_region branch. is_eligible_pam_heresy_c2_founder_trigger = { is_available_ai_adult = yes rite = scope:source_rite learning >= medium_skill_rating NOR = { recently_converted_faith_trigger = yes has_character_flag = recently_converted_by_heresy has_character_flag = recently_converted_by_rite_growth faith.religious_head ?= this scope:source_rite.head_of_rite ?= this highest_held_title_tier >= tier_empire government_has_flag = government_is_nomadic government_has_flag = government_is_herder } OR = { AND = { is_landed = yes highest_held_title_tier >= tier_duchy any_held_title = { tier = tier_county rite = scope:source_rite } } any_held_title = { has_clerical_region = yes } } } # Test convenience trigger for narrative branching (e.g. event text). pam_heresy_c2_founder_is_archbishop_trigger = { scope:founder = { any_held_title = { has_clerical_region = yes } } } # --- Epicenter ruler eligibility (character scope) --- # A duke+ same-faith landed AI ruler. # Capital-in-region check is applied separately by the picker (with title_province wrapping). is_eligible_heresy_epicenter_ruler_trigger = { is_landed = yes is_ai = yes highest_held_title_tier >= tier_duchy NOR = { this = faith.religious_head has_trait = heresiarch has_trait = herald recently_converted_faith_trigger = yes } } # --- Component 3 game-rule gates --- pam_heresy_relaxed_rule_trigger = { has_game_rule = relaxed_regional_heresy } pam_heresy_strict_rule_trigger = { has_game_rule = strict_regional_heresy } pam_heresy_default_rule_trigger = { OR = { has_game_rule = default_regional_heresy # Defensive: if no rule explicitly matches, treat as default. AND = { NOT = { has_game_rule = strict_regional_heresy } NOT = { has_game_rule = relaxed_regional_heresy } } } } # Province scope, branching on scope:heresy_faith #pam_heresy_capital_in_heresy_region_trigger = { # OR = { # AND = { # scope:heresy_faith = faith:lollard # pam_heresy_lollard_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:hussite # pam_heresy_hussite_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:joachimite # pam_heresy_joachimite_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:cathar # pam_heresy_cathar_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:waldensian # pam_heresy_waldensian_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:bogomilist # pam_heresy_bogomilist_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:paulician # pam_heresy_paulician_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:iconoclast # pam_heresy_iconoclast_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:adoptionist # pam_heresy_adoptionist_region_trigger = yes # } # AND = { # scope:heresy_faith = faith:messalian # pam_heresy_messalian_region_trigger = yes # } # } #} # --- NEOW Catholic historical heresies --- # These triggers run in PROVINCE scope (the CK3 geographical_region system). # Check a ruler's capital_province or a county's title_province explicitly; # never check a province region directly on a county TITLE. pam_heresy_illuminated_region_trigger = { geographical_region = neow_catholic_heresy_illuminated } pam_heresy_neo_fraticelli_region_trigger = { geographical_region = neow_catholic_heresy_neo_fraticelli } pam_heresy_catholic_tribunal_region_trigger = { geographical_region = neow_catholic_heresy_catholic_tribunal } pam_heresy_cadaverist_region_trigger = { geographical_region = neow_catholic_heresy_cadaverist } pam_heresy_penitente_region_trigger = { geographical_region = neow_catholic_heresy_penitente } # Faith scope: the outbreak must have at least one eligible AI founder with a # capital province inside the faith's permitted geographic area. pam_heresy_illuminated_eligible_trigger = { religion = religion:catholic_religion this != faith:illuminated_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_illuminated_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes capital_province = { pam_heresy_illuminated_region_trigger = yes } } } pam_heresy_neo_fraticelli_eligible_trigger = { religion = religion:catholic_religion this != faith:neo_fraticelli_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_neo_fraticelli_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes capital_province = { pam_heresy_neo_fraticelli_region_trigger = yes } } } pam_heresy_catholic_tribunal_eligible_trigger = { religion = religion:catholic_religion this != faith:catholic_tribunal_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_catholic_tribunal_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes capital_province = { pam_heresy_catholic_tribunal_region_trigger = yes } } } pam_heresy_cadaverist_eligible_trigger = { religion = religion:catholic_religion this != faith:cadaverist_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_cadaverist_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes capital_province = { pam_heresy_cadaverist_region_trigger = yes } } } pam_heresy_penitente_eligible_trigger = { religion = religion:catholic_religion this != faith:penitente_faith num_county_followers > 0 NOT = { exists = global_var:pam_heresy_penitente_cooldown } any_faith_ruler = { pam_heresy_neow_epicenter_trigger = yes capital_province = { pam_heresy_penitente_region_trigger = yes } } } # Province scope: check all possible Catholic destinations against the selected # heresy faith; preserve the previously unrestricted Orthodox outbreak rules. pam_heresy_neow_permitted_province_trigger = { OR = { AND = { scope:heresy_faith = faith:illuminated_faith pam_heresy_illuminated_region_trigger = yes } AND = { scope:heresy_faith = faith:neo_fraticelli_faith pam_heresy_neo_fraticelli_region_trigger = yes } AND = { scope:heresy_faith = faith:catholic_tribunal_faith pam_heresy_catholic_tribunal_region_trigger = yes } AND = { scope:heresy_faith = faith:cadaverist_faith pam_heresy_cadaverist_region_trigger = yes } AND = { scope:heresy_faith = faith:penitente_faith pam_heresy_penitente_region_trigger = yes } NOT = { OR = { scope:heresy_faith = faith:illuminated_faith scope:heresy_faith = faith:neo_fraticelli_faith scope:heresy_faith = faith:catholic_tribunal_faith scope:heresy_faith = faith:cadaverist_faith scope:heresy_faith = faith:penitente_faith } } } } # County TITLE scope: safe for held county titles, capital_county, # every_neighboring_county and every_county_in_clerical_region. pam_heresy_neow_permitted_county_trigger = { title_province = { pam_heresy_neow_permitted_province_trigger = yes } }