N3OW/common/scripted_triggers/pam_heresy_triggers.txt
2026-10-31 17:52:49 +00:00

447 lines
14 KiB
Text

######################################
# 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
}
}
# 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
# }
# }
#}