diff --git a/common/culture/cultures/NEOW_esperantist.txt b/common/culture/cultures/NEOW_esperantist.txt index e9c0d2584..d0d7a3a88 100644 --- a/common/culture/cultures/NEOW_esperantist.txt +++ b/common/culture/cultures/NEOW_esperantist.txt @@ -4,7 +4,7 @@ ethos = ethos_egalitarian heritage = heritage_esperantisto language = NEOW_language_esperanto - martial_custom = martial_custom_male_equal + martial_custom = martial_custom_equal head_determination = head_determination_domain traditions = { diff --git a/common/culture/pillars/00_language.txt b/common/culture/pillars/00_language.txt index 9df5d8a6f..86041a1c8 100644 --- a/common/culture/pillars/00_language.txt +++ b/common/culture/pillars/00_language.txt @@ -42,7 +42,7 @@ language_arabic = { } } - color = bedouin + color = { 13 117 83 } } language_aramaic = { @@ -799,7 +799,7 @@ language_latin = { } } - color = italian + color = { 153 19 40 } } language_kru = { @@ -1198,7 +1198,7 @@ language_armenian = { } } - color = armenian + color = { 176 48 19 } } language_greek = { diff --git a/common/culture/pillars/NEOW_language.txt b/common/culture/pillars/NEOW_language.txt index 6f4cf3174..5a3627ef5 100644 --- a/common/culture/pillars/NEOW_language.txt +++ b/common/culture/pillars/NEOW_language.txt @@ -97,7 +97,7 @@ NEOW_language_irish = { } } - color = irish + color = { 13 111 49 } } NEOW_language_manx = { type = language @@ -760,17 +760,30 @@ NEOW_language_esperanto = { } } parameters = { - french_group_language_param = yes - lausatian_group_language_param = yes - west_hispanic_group_language_param = yes - middle_hispanic_group_language_param = yes - east_hispanic_group_language_param = yes - gallo_italian_group_language_param = yes - italo_dalmatian_group_language_param = yes + albanian_group_language_param = yes + anglic_group_language_param = yes + arabic_group_language_param = yes daco_romanian_group_language_param = yes + east_hispanic_group_language_param = yes + east_north_germanic_group_language_param = yes + east_slavic_group_language_param = yes finnic_group_language_param = yes - latin_sprachbund_language_param = yes + french_group_language_param = yes + gallo_italian_group_language_param = yes + german_group_language_param = yes + goidelic_group_language_param = yes + greek_group_language_param = yes + hebrew_group_language_param = yes + high_german_group_language_param = yes + italo_dalmatian_group_language_param = yes + lausatian_group_language_param = yes + middle_hispanic_group_language_param = yes + south_slavic_group_language_param = yes + west_hispanic_group_language_param = yes + west_north_germanic_group_language_param = yes + west_slavic_group_language_param = yes greek_sprachbund_language_param = yes + latin_sprachbund_language_param = yes } ai_will_do = { value = 10 @@ -780,7 +793,7 @@ NEOW_language_esperanto = { } } - color = irish + color = { 17 145 89 } } NEOW_language_new_hebrew = { type = language @@ -3084,7 +3097,7 @@ NEOW_language_church_slavonic = { south_slavic_group_language_param = yes } ai_will_do = { value = 0 } - color = { 139 114 77 } + color = { 164 91 16 } } NEOW_language_coptic = { @@ -3102,7 +3115,7 @@ NEOW_language_church_romanian = { greek_sprachbund_language_param = yes } ai_will_do = { value = 0 } - color = { 137 96 155 } + color = { 24 87 159 } } NEOW_language_hebrew = { @@ -3111,7 +3124,7 @@ NEOW_language_hebrew = { parameters = { } ai_will_do = { value = 0 } - color = { 95 146 170 } + color = { 20 61 153 } } NEOW_language_koine = { @@ -3122,12 +3135,12 @@ NEOW_language_koine = { greek_sprachbund_language_param = yes } ai_will_do = { value = 0 } - color = { 145 115 180 } + color = { 97 32 151 } } NEOW_language_classical_georgian = { type = language is_shown = { always = no } ai_will_do = { value = 0 } - color = georgian + color = { 128 24 65 } } diff --git a/common/decisions/religious_decisions_NEOW.txt b/common/decisions/religious_decisions_NEOW.txt index be9244cbb..5cfb816f7 100644 --- a/common/decisions/religious_decisions_NEOW.txt +++ b/common/decisions/religious_decisions_NEOW.txt @@ -897,3 +897,98 @@ NEOW_establish_western_orthodox_rite_decision = { } ai_will_do = { base = 100 } } + +# Study the rite's liturgical tongue. Available to any playable character who lacks it. +neow_study_rite_liturgical_language_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" } + decision_group_type = religious + desc = neow_study_rite_liturgical_language_decision_desc + selection_tooltip = neow_study_rite_liturgical_language_decision_tooltip + sort_order = 145 + + ai_check_interval_by_tier = { + barony = 0 + county = 36 + duchy = 36 + kingdom = 36 + empire = 36 + hegemony = 36 + } + + # Keep mechanical requirements out of the displayed Requirements panel. + # is_available expands a broken ALREADY_PLANNING_ACTIVITY tooltip in this mod. + is_shown = { + is_playable_character = yes + is_alive = yes + is_adult = yes + is_incapable = no + is_imprisoned = no + neow_rite_liturgical_language_is_missing_trigger = yes + NOT = { any_scheme = { type = neow_study_rite_liturgical_language } } + can_start_scheme = { + type = neow_study_rite_liturgical_language + target_character = root + } + } + + is_valid = {} + cooldown = { years = 2 } + cost = {} + + effect = { + start_scheme = { + type = neow_study_rite_liturgical_language + target_character = root + } + } + + ai_potential = { is_clergy = no } + ai_will_do = { base = 10 } +} + +# A royal court may adopt the rite's sacred tongue once its ruler knows it. +neow_use_rite_liturgical_language_at_court_decision = { + picture = { reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" } + decision_group_type = religious + desc = neow_use_rite_liturgical_language_at_court_decision_desc + selection_tooltip = neow_use_rite_liturgical_language_at_court_decision_tooltip + sort_order = 146 + + ai_check_interval_by_tier = { + barony = 0 + county = 0 + duchy = 0 + kingdom = 24 + empire = 24 + hegemony = 24 + } + + is_shown = { + is_playable_character = yes + is_alive = yes + has_dlc_feature = royal_court + has_royal_court = yes + neow_rite_liturgical_language_known_not_court_trigger = yes + } + + is_valid = {} + cost = {} + + effect = { + custom_tooltip = { + text = neow_liturgical_court_language_adopt_effect_tt + } + hidden_effect = { + neow_set_rite_liturgical_court_language_effect = yes + } + } + + ai_potential = { + has_royal_court = yes + OR = { + has_trait = zealous + government_has_flag = government_is_ecclesiastical + } + } + ai_will_do = { base = 5 } +} diff --git a/common/on_action/game_start.txt b/common/on_action/game_start.txt index 970297a9b..9a09c56ee 100644 --- a/common/on_action/game_start.txt +++ b/common/on_action/game_start.txt @@ -13,6 +13,8 @@ on_game_start = { ##NEOW debug_log = "NEOW_on_game_start fired" fire_starting_events = yes + # The alignment doctrine is not defined in historic rite data. + neow_sync_all_liturgical_rite_alignments_effect = yes ### CHAD / IRONSIDE SKULL ### # Spawn the historical skull at game start in Lichfield. diff --git a/common/on_action/religion_on_actions.txt b/common/on_action/religion_on_actions.txt index 39dd12464..28b6315b7 100644 --- a/common/on_action/religion_on_actions.txt +++ b/common/on_action/religion_on_actions.txt @@ -421,6 +421,8 @@ on_rite_created = { ###################################################### pam_on_conversion_effect = yes + # Apply the shared-mainline language divergence reduction to a new branch. + rite = { neow_sync_rite_liturgical_alignment_effect = yes } remove_character_modifier = religious_reformer_modifier # The rite is brand new, so everyone already holding it (creator, realm priest, AI vassals who accepted the code-sent offer) is part of the founding wave and brings their court and domain along faith = { @@ -707,6 +709,13 @@ on_rite_edited = { } effect = { + # Recalculate all branches in case the edited rite is the mainline. + faith = { + every_faith_rite = { + neow_sync_rite_liturgical_alignment_effect = yes + } + } + # Refresh clergy whose rite doctrine has just been edited. faith = { organization ?= { @@ -1210,6 +1219,13 @@ on_faith_monthly = { great_holy_war.0030 #Monthly cleanup for Beneficiaries becoming unfit for various reasons. } effect = { + # A mainline rite cannot retain Papal Blessing granted to a subordinate rite. + main_rite ?= { + if = { + limit = { rite_has_doctrine = special_doctrine_pope_blessing } + remove_rite_doctrine = special_doctrine_pope_blessing + } + } # Religious migrants created by the County Conversion council task move somewhere safe random = { chance = 4 # Roughly once every 2 years @@ -1786,6 +1802,11 @@ update_main_rite_action = { } } set_main_rite = yes + # Promotion cancels the privilege granted to a subordinate rite. + if = { + limit = { rite_has_doctrine = special_doctrine_pope_blessing } + remove_rite_doctrine = special_doctrine_pope_blessing + } } } } diff --git a/common/on_action/yearly_on_actions.txt b/common/on_action/yearly_on_actions.txt index a84a5b854..6a504340a 100644 --- a/common/on_action/yearly_on_actions.txt +++ b/common/on_action/yearly_on_actions.txt @@ -2,6 +2,10 @@ # Root does not exist yearly_global_pulse = { effect = { + # Includes pre-patch saves and script-driven rite doctrine changes. + # The synchronizer only changes rites whose alignment is out of date. + neow_sync_all_liturgical_rite_alignments_effect = yes + # Random chance for the Black Plague to spawn bd_random_game_rule_effect = yes # Daoxue is disabled in the 867 history and nothing else enables it during play diff --git a/common/religion/doctrine_group_types/00_doctrine_group_types.txt b/common/religion/doctrine_group_types/00_doctrine_group_types.txt index 3bea39474..097cdeb06 100644 --- a/common/religion/doctrine_group_types/00_doctrine_group_types.txt +++ b/common/religion/doctrine_group_types/00_doctrine_group_types.txt @@ -486,3 +486,11 @@ liturgical_language = { divergence = category is_available_on_create = { always = yes } } + +# The alignment doctrine is applied by script to rites matching their +# mainline liturgy; it must never be chosen independently when creating rites. +neow_liturgical_language_alignment_group = { + category = special + doctrine_lock = rite + is_available_on_create = { always = no } +} diff --git a/common/religion/doctrine_types/40_doctrines_special.txt b/common/religion/doctrine_types/40_doctrines_special.txt index b1599a134..05bba145e 100644 --- a/common/religion/doctrine_types/40_doctrines_special.txt +++ b/common/religion/doctrine_types/40_doctrines_special.txt @@ -513,14 +513,21 @@ special_doctrine_byzantine_dreaming = { } } } -# Liturgical language is a rite doctrine, independent of the Eastern/Western Christian portrait classification. +# Liturgical language is a rite doctrine, independent of Eastern/Western classification. +# Matching the mainline incurs no language divergence; a different choice costs +# 5 divergence in total (2.5 + 2.5 for either doctrine, including No Language). +# Each named language includes the same-mainline alignment parameter for the +# doctrine tooltip and qualification check. CK3 computes category divergence as +# zero for matching picks, so the separate invisible -10 adjustment must remain +# as an internal implementation detail (not another selectable language). +# Shared language parameters provide an opinion preference between their followers. # The chooser must know the language, come from a related linguistic culture, or follow a rite already using it. # Doctrine can_pick uses scope:actor (never an optional actor link, which could bypass restrictions). doctrine_liturgical_language_none = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 0 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_none } @@ -530,10 +537,17 @@ doctrine_liturgical_language_latin = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 1 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_latin + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_latin = 5 + } + } + can_pick = { custom_tooltip = { @@ -578,10 +592,17 @@ doctrine_liturgical_language_koine = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 2 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_koine + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_koine = 5 + } + } + can_pick = { custom_tooltip = { text = neow_liturgical_language_koine_requirement @@ -620,10 +641,17 @@ doctrine_liturgical_language_church_slavonic = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 3 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_church_slavonic + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_church_slavonic = 5 + } + } + can_pick = { custom_tooltip = { @@ -679,10 +707,17 @@ doctrine_liturgical_language_irish = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 4 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_irish + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_irish = 5 + } + } + can_pick = { custom_tooltip = { @@ -711,10 +746,17 @@ doctrine_liturgical_language_armenian = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 5 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_armenian + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_armenian = 5 + } + } + can_pick = { custom_tooltip = { @@ -760,10 +802,17 @@ doctrine_liturgical_language_classical_georgian = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 8 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_classical_georgian + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_classical_georgian = 5 + } + } + can_pick = { custom_tooltip = { @@ -792,10 +841,17 @@ doctrine_liturgical_language_church_romanian = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 10 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_church_romanian + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_church_romanian = 5 + } + } + can_pick = { custom_tooltip = { text = neow_liturgical_language_church_romanian_requirement @@ -824,10 +880,17 @@ doctrine_liturgical_language_arabic = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 11 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_arabic + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_arabic = 5 + } + } + can_pick = { custom_tooltip = { text = neow_liturgical_language_arabic_requirement @@ -856,10 +919,17 @@ doctrine_liturgical_language_hebrew = { doctrine_group_type = liturgical_language icon = "doctrine_clerical_function" index = 12 - divergence = 0 + divergence = 2.5 parameters = { neow_liturgical_language_hebrew + neow_liturgical_language_mainline_alignment } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_hebrew = 5 + } + } + can_pick = { custom_tooltip = { text = neow_liturgical_language_hebrew_requirement @@ -884,3 +954,42 @@ doctrine_liturgical_language_hebrew = { } } } + +doctrine_liturgical_language_esperanto = { + doctrine_group_type = liturgical_language + icon = "doctrine_clerical_function" + index = 13 + divergence = 2.5 + parameters = { + neow_liturgical_language_esperanto + neow_liturgical_language_mainline_alignment + } + special_parameters = { + parameter_opinion_override = { + neow_liturgical_language_esperanto = 5 + } + } + can_pick = { + custom_tooltip = { + text = neow_liturgical_language_esperanto_requirement + scope:actor = { + OR = { + knows_language = NEOW_language_esperanto + culture = { has_cultural_pillar = NEOW_language_esperanto } + rite ?= { rite_has_doctrine = doctrine_liturgical_language_esperanto } + } + } + } + } +} + +# Internal divergence effect of neow_liturgical_language_mainline_alignment, +# which is defined on every selectable named liturgical-language doctrine. +# Never shown as another language choice; never granted to the mainline itself. +# Do not put this in the liturgical_language group (one selectable pick per rite). +special_doctrine_liturgical_language_alignment = { + doctrine_group_type = neow_liturgical_language_alignment_group + icon = "doctrine_clerical_function" + visible = no + divergence = -10 +} diff --git a/common/schemes/scheme_types/NEOW_liturgical_language_study_scheme.txt b/common/schemes/scheme_types/NEOW_liturgical_language_study_scheme.txt new file mode 100644 index 000000000..e9c2dcf31 --- /dev/null +++ b/common/schemes/scheme_types/NEOW_liturgical_language_study_scheme.txt @@ -0,0 +1,119 @@ +# Uses the standard Learn Language personal-scheme progression, odds and learning modifiers. +# A self-target is necessary because Koine and Church Slavonic are not culture pillars. +neow_study_rite_liturgical_language = { + skill = learning + category = personal + desc = neow_study_rite_liturgical_language_scheme_desc + success_desc = neow_study_rite_liturgical_language_scheme_success_desc + icon = icon_scheme_learn_language + illustration = "gfx/interface/illustrations/event_scenes/corridor.dds" + target_type = character + hide_target_name = yes + is_secret = no + is_basic = yes + cooldown = { months = 2 } + + speed_per_skill_point = t1_spsp_owner_value + spymaster_speed_per_skill_point = 0 + uses_resistance = no + base_progress_goal = 730 + base_maximum_success = 95 + minimum_success = 5 + + allow = { + is_adult = yes + is_alive = yes + is_imprisoned = no + is_incapable = no + neow_rite_liturgical_language_is_missing_trigger = yes + scope:target = { this = scope:owner } + NOT = { any_scheme = { type = neow_study_rite_liturgical_language } } + } + valid = { + is_alive = yes + is_incapable = no + is_imprisoned = no + NOT = { has_character_modifier = partially_mute_modifier } + neow_rite_liturgical_language_is_missing_trigger = yes + } + + odds_prediction = { + add = base_odds_prediction_target_is_char_value + add = odds_skill_contribution_learning_value + add = odds_learn_language_scheme_misc_value + min = 0 + } + + # Same core modifiers as learn_language (excluding target-culture checks, which + # cannot work with a self-target and a separate liturgical language pillar). + base_success_chance = { + base = 0 + modifier = { + add = { value = scope:owner.learning multiply = 3 } + desc = SCHEME_LEARNING_MODIFIER + scope:owner.learning > 0 + } + modifier = { + add = scope:owner.cp:councillor_court_chaplain.learning + desc = SCHEME_CHAPLAIN_HELP_LEARNING_MODIFIER + exists = scope:owner.cp:councillor_court_chaplain + scope:owner.cp:councillor_court_chaplain.learning > 0 + } + modifier = { + add = { + value = 5 + multiply = { value = scope:owner.num_of_known_languages subtract = 1 } + } + desc = SCHEME_KNOWN_LANGUAGES_MODIFIER + scope:owner.num_of_known_languages > 1 + } + modifier = { + add = { value = 30 subtract = scope:owner.age multiply = 2 } + desc = SCHEME_YOUTH_MODIFIER + scope:owner.age < 30 + } + modifier = { + add = 20 + desc = LEARN_LANGUAGE_COMMUNAL_IDENTITY_MODIFIER + scope:owner = { + has_personal_tenet_flag = tenet_communal_identity_language_devotion + } + } + personal_scheme_base_success_chance_modifiers = yes + } + + on_phase_completed = { + save_scope_as = scheme + scheme_target_character = { save_scope_as = target } + scheme_owner = { save_scope_as = owner } + scope:scheme = { + random = { + chance = scope:scheme.scheme_success_chance + save_scope_value_as = { name = neow_liturgical_language_study_successful value = yes } + } + } + scope:owner = { + if = { + limit = { exists = scope:neow_liturgical_language_study_successful } + neow_teach_rite_liturgical_language_effect = yes + add_piety = 100 + send_interface_toast = { + type = event_toast_effect_good + title = neow_study_rite_liturgical_language_success + custom_tooltip = neow_study_rite_liturgical_language_success_piety_tt + left_icon = scope:owner + } + } + else = { + add_piety = -50 + send_interface_toast = { + type = event_toast_effect_neutral + title = neow_study_rite_liturgical_language_failure + custom_tooltip = neow_study_rite_liturgical_language_failure_piety_tt + left_icon = scope:owner + } + } + } + end_scheme = yes + } +} diff --git a/common/scripted_effects/NEOW_religion_effects.txt b/common/scripted_effects/NEOW_religion_effects.txt index 7b5c904f6..41cbdc826 100644 --- a/common/scripted_effects/NEOW_religion_effects.txt +++ b/common/scripted_effects/NEOW_religion_effects.txt @@ -1175,68 +1175,202 @@ neow_western_orthodox_convert_catholic_ruler_effect = { christian_clergy_learn_liturgical_language_effect = { if = { limit = { is_clergy = yes } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_latin } - NOT = { knows_language = language_latin } - } - learn_language = language_latin - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_koine } - NOT = { knows_language = NEOW_language_koine } - } - learn_language = NEOW_language_koine - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } - NOT = { knows_language = NEOW_language_church_slavonic } - } - learn_language = NEOW_language_church_slavonic - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_irish } - NOT = { knows_language = NEOW_language_irish } - } - learn_language = NEOW_language_irish - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_armenian } - NOT = { knows_language = language_armenian } - } - learn_language = language_armenian - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } - NOT = { knows_language = NEOW_language_classical_georgian } - } - learn_language = NEOW_language_classical_georgian - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_romanian } - NOT = { knows_language = NEOW_language_church_romanian } - } - learn_language = NEOW_language_church_romanian - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_arabic } - NOT = { knows_language = language_arabic } - } - learn_language = language_arabic - } - if = { - limit = { - rite ?= { rite_has_doctrine = doctrine_liturgical_language_hebrew } - NOT = { knows_language = NEOW_language_hebrew } - } - learn_language = NEOW_language_hebrew - } + neow_teach_rite_liturgical_language_effect = yes + } +} + +# Character scope: teaches the language currently selected by the character's rite. +# Kept separate from the clergy on-action so a lay character may also learn it. +neow_teach_rite_liturgical_language_effect = { + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_latin } + NOT = { knows_language = language_latin } + } + learn_language = language_latin + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_koine } + NOT = { knows_language = NEOW_language_koine } + } + learn_language = NEOW_language_koine + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } + NOT = { knows_language = NEOW_language_church_slavonic } + } + learn_language = NEOW_language_church_slavonic + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_irish } + NOT = { knows_language = NEOW_language_irish } + } + learn_language = NEOW_language_irish + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_armenian } + NOT = { knows_language = language_armenian } + } + learn_language = language_armenian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } + NOT = { knows_language = NEOW_language_classical_georgian } + } + learn_language = NEOW_language_classical_georgian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_romanian } + NOT = { knows_language = NEOW_language_church_romanian } + } + learn_language = NEOW_language_church_romanian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_arabic } + NOT = { knows_language = language_arabic } + } + learn_language = language_arabic + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_hebrew } + NOT = { knows_language = NEOW_language_hebrew } + } + learn_language = NEOW_language_hebrew + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_esperanto } + NOT = { knows_language = NEOW_language_esperanto } + } + learn_language = NEOW_language_esperanto + } +} + +# Rite scope. A separate negative-divergence doctrine is required because +# the category divergence of an identical doctrine is zero, not negative. +neow_sync_rite_liturgical_alignment_effect = { + if = { + limit = { + neow_rite_matches_mainline_liturgical_language_trigger = yes + NOT = { rite_has_doctrine = special_doctrine_liturgical_language_alignment } + } + add_rite_doctrine = special_doctrine_liturgical_language_alignment + } + else_if = { + limit = { + rite_has_doctrine = special_doctrine_liturgical_language_alignment + neow_rite_matches_mainline_liturgical_language_trigger = no + } + remove_rite_doctrine = special_doctrine_liturgical_language_alignment + } +} + +# Any scope: resynchronizes historic rites and older saved games. +neow_sync_all_liturgical_rite_alignments_effect = { + every_religion_global = { + every_faith = { + # Historic and dynamically promoted mainline rites cannot retain this boon. + main_rite ?= { + if = { + limit = { rite_has_doctrine = special_doctrine_pope_blessing } + remove_rite_doctrine = special_doctrine_pope_blessing + } + } + every_faith_rite = { + neow_sync_rite_liturgical_alignment_effect = yes + } + } + } +} + +# Character scope: adopt the rite's known liturgical language for an existing royal court. +neow_set_rite_liturgical_court_language_effect = { + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_latin } + knows_language = language_latin + NOT = { has_court_language = language_latin } + } + set_court_language = language_latin + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_koine } + knows_language = NEOW_language_koine + NOT = { has_court_language = NEOW_language_koine } + } + set_court_language = NEOW_language_koine + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } + knows_language = NEOW_language_church_slavonic + NOT = { has_court_language = NEOW_language_church_slavonic } + } + set_court_language = NEOW_language_church_slavonic + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_irish } + knows_language = NEOW_language_irish + NOT = { has_court_language = NEOW_language_irish } + } + set_court_language = NEOW_language_irish + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_armenian } + knows_language = language_armenian + NOT = { has_court_language = language_armenian } + } + set_court_language = language_armenian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } + knows_language = NEOW_language_classical_georgian + NOT = { has_court_language = NEOW_language_classical_georgian } + } + set_court_language = NEOW_language_classical_georgian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_romanian } + knows_language = NEOW_language_church_romanian + NOT = { has_court_language = NEOW_language_church_romanian } + } + set_court_language = NEOW_language_church_romanian + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_arabic } + knows_language = language_arabic + NOT = { has_court_language = language_arabic } + } + set_court_language = language_arabic + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_hebrew } + knows_language = NEOW_language_hebrew + NOT = { has_court_language = NEOW_language_hebrew } + } + set_court_language = NEOW_language_hebrew + } + if = { + limit = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_esperanto } + knows_language = NEOW_language_esperanto + NOT = { has_court_language = NEOW_language_esperanto } + } + set_court_language = NEOW_language_esperanto } } diff --git a/common/scripted_triggers/pam_scripted_triggers.txt b/common/scripted_triggers/pam_scripted_triggers.txt index 92c36a67c..d70af5843 100644 --- a/common/scripted_triggers/pam_scripted_triggers.txt +++ b/common/scripted_triggers/pam_scripted_triggers.txt @@ -7440,3 +7440,154 @@ pam_arabic_as_liturgical_language_trigger = { pam_hebrew_as_liturgical_language_trigger = { rite_has_doctrine = doctrine_liturgical_language_hebrew } + +# Character scope: this character follows a rite prescribing a language they do not know. +neow_rite_liturgical_language_is_missing_trigger = { + OR = { + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_latin } + NOT = { knows_language = language_latin } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_koine } + NOT = { knows_language = NEOW_language_koine } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } + NOT = { knows_language = NEOW_language_church_slavonic } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_irish } + NOT = { knows_language = NEOW_language_irish } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_armenian } + NOT = { knows_language = language_armenian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } + NOT = { knows_language = NEOW_language_classical_georgian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_romanian } + NOT = { knows_language = NEOW_language_church_romanian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_arabic } + NOT = { knows_language = language_arabic } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_hebrew } + NOT = { knows_language = NEOW_language_hebrew } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_esperanto } + NOT = { knows_language = NEOW_language_esperanto } + } + } +} + +# Rite scope. Only a branch preserving the mainline's named liturgical language +# qualifies; "No Liturgical Language" is not a shared language. +neow_rite_matches_mainline_liturgical_language_trigger = { + NOT = { this = faith.main_rite } + rite_has_parameter = neow_liturgical_language_mainline_alignment + OR = { + AND = { + rite_has_doctrine = doctrine_liturgical_language_latin + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_latin } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_koine + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_koine } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_church_slavonic + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_irish + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_irish } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_armenian + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_armenian } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_classical_georgian + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_church_romanian + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_church_romanian } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_arabic + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_arabic } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_hebrew + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_hebrew } + } + AND = { + rite_has_doctrine = doctrine_liturgical_language_esperanto + faith.main_rite = { rite_has_doctrine = doctrine_liturgical_language_esperanto } + } + } +} + +# Character scope: the ruler knows the language prescribed by their rite and may adopt it at court. +neow_rite_liturgical_language_known_not_court_trigger = { + OR = { + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_latin } + knows_language = language_latin + NOT = { has_court_language = language_latin } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_koine } + knows_language = NEOW_language_koine + NOT = { has_court_language = NEOW_language_koine } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_slavonic } + knows_language = NEOW_language_church_slavonic + NOT = { has_court_language = NEOW_language_church_slavonic } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_irish } + knows_language = NEOW_language_irish + NOT = { has_court_language = NEOW_language_irish } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_armenian } + knows_language = language_armenian + NOT = { has_court_language = language_armenian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_classical_georgian } + knows_language = NEOW_language_classical_georgian + NOT = { has_court_language = NEOW_language_classical_georgian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_church_romanian } + knows_language = NEOW_language_church_romanian + NOT = { has_court_language = NEOW_language_church_romanian } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_arabic } + knows_language = language_arabic + NOT = { has_court_language = language_arabic } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_hebrew } + knows_language = NEOW_language_hebrew + NOT = { has_court_language = NEOW_language_hebrew } + } + AND = { + rite ?= { rite_has_doctrine = doctrine_liturgical_language_esperanto } + knows_language = NEOW_language_esperanto + NOT = { has_court_language = NEOW_language_esperanto } + } + } +} diff --git a/localization/english/replace/religion/doctrines/zz_NEOW_religion_tolerance doctrines_l_english.yml b/localization/english/replace/religion/doctrines/zz_NEOW_religion_tolerance doctrines_l_english.yml index 01582aebc..89f460c9e 100644 --- a/localization/english/replace/religion/doctrines/zz_NEOW_religion_tolerance doctrines_l_english.yml +++ b/localization/english/replace/religion/doctrines/zz_NEOW_religion_tolerance doctrines_l_english.yml @@ -405,6 +405,7 @@ liturgical_language_name:0 "Liturgical Language" doctrine_liturgical_language_none_name:0 "No Liturgical Language" doctrine_liturgical_language_none_desc:0 "No single language is prescribed for religious worship. Prayers, rites, and sacred readings may be celebrated in the tongues of the faithful." + doctrine_parameter_neow_liturgical_language_mainline_alignment:0 "#P -10#! Rite Divergence when the liturgical language matches the Faith's Mainline Rite" doctrine_liturgical_language_latin_name:0 "Latin" doctrine_liturgical_language_latin_desc:0 "The sacred offices are celebrated in Latin, preserving a common inheritance of liturgy, learning, and ecclesiastical law throughout the Western Church." doctrine_liturgical_language_koine_name:0 "Koine Greek" @@ -437,3 +438,38 @@ neow_liturgical_language_church_romanian_requirement:0 "To choose Church Romanian, you must know Church Romanian or a Romanian language, belong to a Romanian, Wallachian, or Aromanian-speaking culture, or already follow a Church Romanian rite." neow_liturgical_language_arabic_requirement:0 "To choose Arabic, you must know Arabic or a closely related language such as Maltese, belong to an Arabic- or Maltese-speaking culture, or already follow an Arabic-language rite." neow_liturgical_language_hebrew_requirement:0 "To choose Hebrew, you must know Hebrew, belong to a Hebrew- or historically Hebrew-associated culture (including Yiddish-speaking cultures), or already follow a Hebrew-language rite." + + doctrine_liturgical_language_esperanto_name:0 "Esperanto" + doctrine_liturgical_language_esperanto_desc:0 "Religious offices, prayers, and sacred readings are celebrated in Esperanto, a constructed international language intended to unite believers of different peoples." + neow_liturgical_language_esperanto_requirement:0 "To choose Esperanto, you must know Esperanto, belong to an Esperanto-speaking culture, or already follow a rite using Esperanto as its liturgical language." + + # Study a prescribed liturgical language. This is separate from the automatic clergy-language effect. + neow_study_rite_liturgical_language_decision:0 "Study Liturgical Language" + neow_study_rite_liturgical_language_decision_desc:0 "The prayers and sacred writings of my rite are preserved in a tongue I have yet to master. Through patient study, I may come to understand and recite them as they ought to be spoken." + neow_study_rite_liturgical_language_decision_tooltip:0 "Begin a personal scheme to learn your rite's liturgical language. Succeed to gain [piety|E]; fail and lose [piety|E]." + neow_study_rite_liturgical_language_not_already_studying_tt:0 "You are not already undertaking liturgical language study" + neow_study_rite_liturgical_language_chance_tt:0 "Your chance of success is determined when the scheme is completed. [learning|E] and diligence help your studies, while laziness hinders them." + neow_study_rite_liturgical_language_success:0 "Liturgical Studies Completed" + neow_study_rite_liturgical_language_failure:0 "Liturgical Studies Unsuccessful" + neow_study_rite_liturgical_language_start_scheme_tt:0 "Begin a Liturgical Language Study Scheme. Its outcome will be decided when the scheme concludes." + neow_study_rite_liturgical_language_scheme_desc:0 "Devote yourself to the prayers, sacred texts, and speech of your rite, with the hope of mastering its liturgical tongue." + neow_study_rite_liturgical_language_scheme_success_desc:0 "Learn your rite's liturgical language and gain 100 [piety|E]; failure costs 50 [piety|E]." + neow_study_rite_liturgical_language_success_piety_tt:0 "You have mastered your rite's liturgical language and gained 100 [piety|E]." + neow_study_rite_liturgical_language_failure_piety_tt:0 "Your studies have borne little fruit, and you lose 50 [piety|E]." + neow_liturgical_language_study_learning_bonus:0 "Scholarly Aptitude" + neow_liturgical_language_study_diligent_bonus:0 "Diligence" + neow_liturgical_language_study_lazy_penalty:0 "Laziness" + neow_study_rite_liturgical_language:0 "Study Liturgical Language" + neow_study_rite_liturgical_language_action:0 "Study Liturgical Language" + + + special_doctrine_liturgical_language_alignment_name:0 "Shared Liturgical Language" + special_doctrine_liturgical_language_alignment_desc:0 "This rite preserves the liturgical language of its faith's mainline rite, strengthening their common religious tradition." + neow_liturgical_language_alignment_group_name:0 "Liturgical Language Alignment" + + # Decision confirmation buttons and court-language choice. + neow_study_rite_liturgical_language_decision_confirm:0 "Begin Studies" + neow_use_rite_liturgical_language_at_court_decision:0 "Adopt Liturgical Court Language" + neow_use_rite_liturgical_language_at_court_decision_desc:0 "The sacred tongue of our rite is known to me, and it is fitting that the same language should be heard in the affairs of my court." + neow_use_rite_liturgical_language_at_court_decision_tooltip:0 "Adopt your rite's liturgical language as your [court_language|E]." + neow_use_rite_liturgical_language_at_court_decision_confirm:0 "Adopt Liturgical Language" diff --git a/localization/english/replace/zz_NEOW_religion_opinions_l_english.yml b/localization/english/replace/zz_NEOW_religion_opinions_l_english.yml index 1a243259d..e22d68d59 100644 --- a/localization/english/replace/zz_NEOW_religion_opinions_l_english.yml +++ b/localization/english/replace/zz_NEOW_religion_opinions_l_english.yml @@ -22,4 +22,28 @@ octobrist_religion_opinion:0 "$octobrist_religion_adherent$ Opinion" wicca_religion_opinion:0 "$wicca_religion_adherent$ Opinion" xenology_religion_opinion:0 "$xenology_religion_adherent$ Opinion" - yugoslavic_religion_opinion:0 "$yugoslavic_religion_adherent$ Opinion" \ No newline at end of file + yugoslavic_religion_opinion:0 "$yugoslavic_religion_adherent$ Opinion" + +# Liturgical-language opinion effects (doctrine parameter tooltip text). + doctrine_parameter_neow_liturgical_language_latin_opinion_active:0 "Characters following rites that use Latin as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_koine_opinion_active:0 "Characters following rites that use Koine Greek as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_church_slavonic_opinion_active:0 "Characters following rites that use Church Slavonic as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_irish_opinion_active:0 "Characters following rites that use Irish as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_armenian_opinion_active:0 "Characters following rites that use Classical Armenian as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_classical_georgian_opinion_active:0 "Characters following rites that use Classical Georgian as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_church_romanian_opinion_active:0 "Characters following rites that use Church Romanian as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_arabic_opinion_active:0 "Characters following rites that use Arabic as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_hebrew_opinion_active:0 "Characters following rites that use Hebrew as their liturgical language gain #P +5#! [opinion|E] of one another" + doctrine_parameter_neow_liturgical_language_esperanto_opinion_active:0 "Characters following rites that use Esperanto as their liturgical language gain #P +5#! [opinion|E] of one another" + +# Names shown in the character opinion breakdown. + neow_liturgical_language_latin_opinion_name:0 "Shared Latin Liturgical Language" + neow_liturgical_language_koine_opinion_name:0 "Shared Koine Greek Liturgical Language" + neow_liturgical_language_church_slavonic_opinion_name:0 "Shared Church Slavonic Liturgical Language" + neow_liturgical_language_irish_opinion_name:0 "Shared Irish Liturgical Language" + neow_liturgical_language_armenian_opinion_name:0 "Shared Classical Armenian Liturgical Language" + neow_liturgical_language_classical_georgian_opinion_name:0 "Shared Classical Georgian Liturgical Language" + neow_liturgical_language_church_romanian_opinion_name:0 "Shared Church Romanian Liturgical Language" + neow_liturgical_language_arabic_opinion_name:0 "Shared Arabic Liturgical Language" + neow_liturgical_language_hebrew_opinion_name:0 "Shared Hebrew Liturgical Language" + neow_liturgical_language_esperanto_opinion_name:0 "Shared Esperanto Liturgical Language" diff --git a/localization/english/replace/zz_NEOW_religious_decisions_l_english.yml b/localization/english/replace/zz_NEOW_religious_decisions_l_english.yml index f95d1b73d..98878f1fe 100644 --- a/localization/english/replace/zz_NEOW_religious_decisions_l_english.yml +++ b/localization/english/replace/zz_NEOW_religious_decisions_l_english.yml @@ -119,3 +119,28 @@ NEOW_cadaverist_enthrone_preserved_pope_decision_effect_tooltip:0 "The Roman Pope will be executed, his Papacy abolished, and the Preserved enthroned at the Vatican. The Ecclesiarch will govern the Church, and Saint Peter's Basilica will become the Vatican Ossuary." NEOW_cadaverist_enthrone_preserved_pope_decision_confirm:0 "Enthrone the Preserved" NEOW_cadaverist_restoration_fervor_gain:0 "The Preserved Enthroned" + +# Liturgical language: personal study, scheme feedback, and court-language decisions. + neow_study_rite_liturgical_language_decision:0 "Study Liturgical Language" + neow_study_rite_liturgical_language_decision_desc:0 "The prayers and sacred writings of my rite are preserved in a tongue I have yet to master. Through patient study, I may come to understand and recite them as they ought to be spoken." + neow_study_rite_liturgical_language_decision_tooltip:0 "Begin a personal scheme to learn your rite's liturgical language. Succeed to gain [piety|E]; fail and lose [piety|E]." + neow_study_rite_liturgical_language_not_already_studying_tt:0 "You are not already undertaking liturgical language study" + neow_study_rite_liturgical_language_chance_tt:0 "Your chance of success is determined when the scheme is completed. [learning|E] and diligence help your studies, while laziness hinders them." + neow_study_rite_liturgical_language_success:0 "Liturgical Studies Completed" + neow_study_rite_liturgical_language_failure:0 "Liturgical Studies Unsuccessful" + neow_study_rite_liturgical_language_start_scheme_tt:0 "Begin a Liturgical Language Study Scheme. Its outcome will be decided when the scheme concludes." + neow_study_rite_liturgical_language_scheme_desc:0 "Devote yourself to the prayers, sacred texts, and speech of your rite, with the hope of mastering its liturgical tongue." + neow_study_rite_liturgical_language_scheme_success_desc:0 "Learn your rite's liturgical language and gain 100 [piety|E]; failure costs 50 [piety|E]." + neow_study_rite_liturgical_language_success_piety_tt:0 "You have mastered your rite's liturgical language and gained 100 [piety|E]." + neow_study_rite_liturgical_language_failure_piety_tt:0 "Your studies have borne little fruit, and you lose 50 [piety|E]." + neow_liturgical_language_study_learning_bonus:0 "Scholarly Aptitude" + neow_liturgical_language_study_diligent_bonus:0 "Diligence" + neow_liturgical_language_study_lazy_penalty:0 "Laziness" + neow_study_rite_liturgical_language:0 "Study Liturgical Language" + neow_study_rite_liturgical_language_action:0 "Study Liturgical Language" + neow_study_rite_liturgical_language_decision_confirm:0 "Begin Studies" + neow_use_rite_liturgical_language_at_court_decision:0 "Adopt Liturgical Court Language" + neow_use_rite_liturgical_language_at_court_decision_desc:0 "The sacred tongue of our rite is known to me, and it is fitting that the same language should be heard in the affairs of my court." + neow_use_rite_liturgical_language_at_court_decision_tooltip:0 "Adopt your rite's liturgical language as your [court_language|E]." + neow_use_rite_liturgical_language_at_court_decision_confirm:0 "Adopt Liturgical Language" + neow_liturgical_court_language_adopt_effect_tt:0 "Your [court_language|E] becomes your rite's liturgical language."