From 29c0c04c66595f6b2431045b61391dcd1eee84b1 Mon Sep 17 00:00:00 2001 From: Fishedotjpg Date: Wed, 4 Nov 2026 21:24:03 +0000 Subject: [PATCH] Create 00_interaction_effects.txt --- .../00_interaction_effects.txt | 5687 +++++++++++++++++ 1 file changed, 5687 insertions(+) create mode 100644 common/scripted_effects/00_interaction_effects.txt diff --git a/common/scripted_effects/00_interaction_effects.txt b/common/scripted_effects/00_interaction_effects.txt new file mode 100644 index 000000000..66af458ca --- /dev/null +++ b/common/scripted_effects/00_interaction_effects.txt @@ -0,0 +1,5687 @@ + +####################################################################### +# EFFECT LIST +####################################################################### +# !!! Remember to add all new effects with a short description here !!! +####################################################################### + +notify_puppeteer_of_outcome_effect = { + if = { + limit = { + exists = scope:actor + exists = scope:puppet_or_actor + scope:is_puppet_action ?= yes + scope:actor != scope:recipient + } + scope:actor = { + send_interface_toast = { + type = $TYPE$ + title = $TITLE$ + left_icon = scope:puppet_or_actor + right_icon = scope:recipient + } + } + } +} + +blackmail_interaction_effect = { + if = { + limit = { NOT = { exists = scope:puppet_or_actor } } + scope:actor = { save_scope_as = puppet_or_actor } + } + scope:puppet_or_actor = { + if = { + limit = { exists = scope:target } + blackmail_target_with_secret_effect = { SECRET = scope:target TARGET = scope:recipient } + reverse_add_opinion = { + modifier = blackmailing_me_opinion + target = scope:recipient + } + } + if = { + limit = { has_government = administrative_government } + if = { + limit = { + scope:target = { is_criminal_for = scope:recipient } + } + change_influence = medium_influence_gain + } + else_if = { + limit = { + scope:target = { is_shunned_for = scope:recipient } + } + change_influence = minor_influence_gain + } + else = { change_influence = miniscule_influence_gain } + } + stress_and_fulfillment_impact = { + compassionate = medium_stress_impact_gain + trusting = medium_stress_impact_gain + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + scope:target = { + if = { + limit = { + exists = var:promised_not_to_reveal + var:promised_not_to_reveal = scope:puppet_or_actor + } + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + modifier = broke_promise + } + } + } + } + scope:recipient = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = scope:puppet_or_actor + has_relation_potential_rival = scope:puppet_or_actor + } + } + set_relation_potential_rival = scope:puppet_or_actor + } + } +} + +torture_blind_castrate_disfigure_opinion_effect = { + if = { + limit = { NOT = { exists = scope:puppet_or_actor } } + scope:actor = { save_scope_as = puppet_or_actor } + } + scope:recipient = { + add_opinion = { + modifier = $VERB$_me + target = scope:puppet_or_actor + } + if = { + limit = { + has_opinion_modifier = { + modifier = grateful_opinion + target = scope:puppet_or_actor + } + } + remove_opinion = { + modifier = grateful_opinion + target = scope:puppet_or_actor + } + } + + if = { + limit = { + primary_spouse ?= { is_alive = yes } + NOT = { primary_spouse = { this = scope:puppet_or_actor } } + } + primary_spouse = { add_to_list = family_of_tortured } + } + every_close_family_member = { + limit = { this != scope:puppet_or_actor } + add_to_list = family_of_tortured + } + if = { + limit = { + any_in_list = { + list = family_of_tortured + count = 1 + always = yes + } + } + every_in_list = { + list = family_of_tortured + add_opinion = { + target = scope:puppet_or_actor + modifier = $VERB$_family_member + } + } + } + else_if = { + limit = { + any_in_list = { + list = family_of_tortured + count > 1 + always = yes + } + } + every_in_list = { + list = family_of_tortured + custom = all_close_family_and_spouses + add_opinion = { + target = scope:puppet_or_actor + modifier = $VERB$_family_member + } + } + } + } +} + + +torture_interaction_actor_effect = { + if = { + limit = { NOT = { exists = scope:puppet_or_actor } } + scope:actor = { save_scope_as = puppet_or_actor } + } + scope:puppet_or_actor = { + ###SECRETS### + custom_tooltip = torture_interaction_actor_effects.secrets.tt + + + ###STRESS### + + #Stress loss if they are my rival I hate them + if = { + limit = { has_relation_rival = scope:recipient } + + if = { + limit = { + NOR = { + has_trait = sadistic + has_trait = vengeful + has_trait = compassionate + has_trait = forgiving + } + } + add_stress = medium_stress_loss + } + else = { + stress_and_fulfillment_impact = { + sadistic = major_stress_impact_loss + vengeful = massive_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + } + else_if = { # Torturing infidels is relaxing + limit = { + has_trait = zealous + scope:puppet_or_actor.faith != scope:recipient.faith + } + + if = { + limit = { + NOR = { + has_trait = sadistic + has_trait = compassionate + has_trait = forgiving + } + } + add_stress = medium_stress_loss + } + else = { + stress_and_fulfillment_impact = { + sadistic = major_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + } + else_if = { + limit = { + NOT = { + has_trait = sadistic + } + scope:recipient = { + OR = { + is_child_of = scope:puppet_or_actor + is_grandchild_of = scope:puppet_or_actor + is_great_grandchild_of = scope:puppet_or_actor + } + } + } + stress_and_fulfillment_impact = { + base = medium_stress_impact_loss + compassionate = massive_stress_impact_gain + craven = major_stress_impact_gain + just = medium_stress_impact_gain + forgiving = major_stress_impact_gain + generous = medium_stress_impact_gain + trusting = minor_stress_impact_gain + content = minor_stress_impact_gain + family_first = minor_stress_impact_gain + } + } + else = { + stress_and_fulfillment_impact = { + sadistic = medium_stress_impact_loss + compassionate = major_stress_impact_gain + craven = major_stress_impact_gain + just = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + generous = medium_stress_impact_gain + trusting = minor_stress_impact_gain + content = minor_stress_impact_gain + } + } + + ###DREAD### + if = { + limit = { + scope:recipient = { + OR = { + is_powerful_vassal_of = scope:puppet_or_actor # Is your powerful vassal + AND = { # Is an Emperor + exists = primary_title + primary_title.tier >= tier_empire + } + target_is_vassal_or_below = scope:puppet_or_actor # Your liege/s + scope:puppet_or_actor.faith.religious_head = scope:recipient # Your head of faith + } + } + } + add_dread = torture_interaction_massive_dread_gain + } + else_if = { + limit = { + scope:recipient = { + OR = { + AND = { # Is your vassal, and higher than Baron + is_vassal_of = scope:puppet_or_actor + primary_title.tier > tier_barony + } + AND = { # Is a King + exists = primary_title + primary_title.tier >= tier_kingdom + } + } + } + } + add_dread = torture_interaction_major_dread_gain + } + else_if = { + limit = { + scope:recipient = { + OR = { + scope:puppet_or_actor = { # Torturing close family of your vassals is dreadful... + any_vassal = { + is_close_family_of = scope:recipient + } + } + scope:puppet_or_actor = { # Torturing close family of your liege/s is the same... + any_liege_or_above = { + is_close_family_of = scope:recipient + } + } + AND = { # Peer Vassals + exists = primary_title + primary_title.tier > tier_barony + liege ?= scope:puppet_or_actor.liege + } + AND = { # Is a Duke + exists = primary_title + primary_title.tier >= tier_duchy + } + } + } + } + add_dread = torture_interaction_medium_dread_gain + } + else_if = { + limit = { + scope:recipient = { + OR = { + is_spouse_of = scope:puppet_or_actor # Your own spouse + is_close_or_extended_family_of = scope:puppet_or_actor # Your own family + AND = { + exists = primary_title + primary_title.tier >= tier_county # Is a Count + } + scope:puppet_or_actor = { # Torturing extended family of your vassals is dreadful... + any_vassal = { + is_extended_family_of = scope:recipient + } + } + scope:puppet_or_actor = { # Torturing extended family of your liege/s is the same... + any_liege_or_above = { + is_extended_family_of = scope:recipient + } + } + } + } + } + add_dread = torture_interaction_minor_dread_gain + } + + + ###OPINIONS### + torture_blind_castrate_disfigure_opinion_effect = { VERB = tortured } + + ###CHURCH OPINION & PIETY### + if = { + limit = { + NOR = { + rite ?= { rite_has_parameter = torturing_prisoners_grants_piety } + + # Divine Retribution cancels out faith-based penalties + has_perk = divine_retribution_perk + } + } + add_piety = medium_piety_loss + + if = { + limit = { + any_learning_councillor = { + opinion = { + target = scope:recipient + value >= neutral_opinion + } + } + } + random_learning_councillor = { + add_opinion = { + modifier = impious_opinion + opinion = -10 + target = scope:puppet_or_actor + } + } + } + } + else_if = { + limit = { + rite ?= { rite_has_parameter = torturing_prisoners_grants_piety } + } + add_piety = medium_piety_gain + } + } +} + +torturer_interaction_recipient_effect = { + scope:recipient = { + add_character_modifier = { + modifier = recently_tortured + years = 5 + } + + # Poetry does not cause lunacy. + if = { + limit = { + NOT = { scope:torture_method = flag:poetry } + } + random = { + chance = 5 + modifier = { + scope:puppet_or_actor = { has_trait = torturer } + add = 10 + } + add_trait = lunatic_1 + } + } + + if = { + limit = { + OR = { + rite ?= { rite_has_parameter = reduced_stress_from_torture } + has_personal_tenet_flag = reduced_stress_from_torture + } + } + if = { + limit = { is_playable_character = yes } # Only playable characters have spiritual fulfillment + change_spiritual_fulfillment = medium_spiritual_fulfillment_value + } + } + else_if = { + limit = { + NOR = { + has_trait = craven + has_trait = brave + } + } + add_stress = massive_stress_impact_gain + } + else = { + stress_and_fulfillment_impact = { + craven = monumental_stress_gain + brave = medium_stress_impact_gain + } + } + + if = { # Remove the flag blocking other prison interactions + limit = { has_character_flag = is_being_tortured } + remove_character_flag = is_being_tortured + } + + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:puppet_or_actor + TYPE = torture + } + } +} + +illegal_imprisonment_dread_effect = { + ###DREAD### + scope:puppet_or_actor = { + if = { + limit = { + NOT = { + has_imprisonment_reason = scope:recipient + } + } + if = { + limit = { + OR = { + is_spouse_of = scope:recipient + is_close_family_of = scope:recipient + scope:recipient = { tier_or_related_liege_tier_greater_or_equal_trigger = { TIER = tier_kingdom } } + } + } + add_dread = medium_dread_gain + } + else_if = { + limit = { + OR = { + scope:recipient = { tier_or_related_liege_tier_equal_trigger = { TIER = tier_duchy } } + scope:recipient = { tier_or_related_liege_tier_equal_trigger = { TIER = tier_county } } + } + } + add_dread = minor_dread_gain + } + } + } +} + +blind_castrate_and_disfigure_effect = { + ###STRESS## + scope:puppet_or_actor = { + if = { + limit = { has_relation_rival = scope:recipient } + + if = { + limit = { + NOR = { + has_trait = sadistic #Extra stress + has_trait = vengeful #Extra stress + has_trait = compassionate #Lessened impact + has_trait = forgiving #Lessened impact + } + } + add_stress = medium_stress_loss + } + else = { + stress_and_fulfillment_impact = { + sadistic = major_stress_impact_loss + vengeful = major_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + } + #Regular stress + else = { + stress_and_fulfillment_impact = { + sadistic = minor_stress_impact_loss + compassionate = massive_stress_impact_gain + craven = major_stress_impact_gain + just = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + generous = medium_stress_impact_gain + trusting = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + calm = minor_stress_impact_gain + content = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + } + + ###DREAD### + if = { + limit = { + OR = { + is_spouse_of = scope:recipient + is_close_family_of = scope:recipient + scope:recipient = { tier_or_related_liege_tier_greater_or_equal_trigger = { TIER = tier_kingdom } } #Kingdom & empire + } + } + add_dread = major_dread_gain + } + else_if = { + limit = { + OR = { + scope:recipient = { tier_or_related_liege_tier_equal_trigger = { TIER = tier_duchy } } + scope:recipient = { tier_or_related_liege_tier_equal_trigger = { TIER = tier_county } } + } + } + add_dread = medium_dread_gain + } + else = { + add_dread = minor_dread_gain + } + } +} + +blind_opinion_effect = { + ###OPINIONS### + scope:recipient = { + add_opinion = { + modifier = blinded_me + target = scope:actor + } + + if = { + limit = { + exists = primary_spouse + NOT = { primary_spouse = { this = scope:actor } } + } + primary_spouse = { add_to_list = family_of_blinded } + } + every_close_family_member = { + limit = { this != scope:actor } + add_to_list = family_of_blinded + } + if = { + limit = { + any_in_list = { + list = family_of_blinded + count = 1 + always = yes + } + } + every_in_list = { + list = family_of_blinded + add_opinion = { + target = scope:actor + modifier = blinded_family_member + } + } + } + else_if = { + limit = { + any_in_list = { + list = family_of_blinded + count > 1 + always = yes + } + } + every_in_list = { + list = family_of_blinded + custom = all_close_family_and_spouses + add_opinion = { + target = scope:actor + modifier = blinded_family_member + } + } + } + } +} + +blind_castrated_disfigured_recipient_support_effect = { #To be used in other effects + random = { + chance = 5 + add_trait = lunatic_1 + } + + if = { + limit = { + NOR = { + has_trait = craven + has_trait = brave + } + } + add_stress = major_stress_impact_gain + } + else = { + stress_and_fulfillment_impact = { + craven = massive_stress_gain + brave = medium_stress_impact_gain + } + } + add_character_flag = { #TO make sure that they don't get spammed about the release + flag = block_for_prison_release_notification + days = 2 + } + + release_from_prison = yes + if = { + limit = { + scope:recruit ?= yes + } + scope:actor = { + add_courtier = scope:recipient + } + } + + if = { # Remove the flag blocking other prison interactions + limit = { has_character_flag = is_being_tortured } + remove_character_flag = is_being_tortured + } +} + +blind_recipient_effect = { + scope:recipient = { + if = { + limit = { scope:actor = { is_ai = no } } + add_trait_force_tooltip = blind #This is because we want to show a blinded portrait it prison.1020 for players, then we add the trait in the immediate but we still want a tooltip + } + else = { + add_trait = blind + } + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = blind + } + add_character_modifier = { + modifier = recently_blinded + years = 1 + } + blind_castrated_disfigured_recipient_support_effect = yes + } +} + +castrate_recipient_effect = { + scope:recipient = { + if = { + limit = { + age < 12 + } + ep3_child_castration_effect = yes + } + else = { + ep3_youth_castration_effect = yes + } + blind_castrated_disfigured_recipient_support_effect = yes + } +} + +disfigure_recipient_effect = { + scope:recipient = { + if = { + limit = { scope:actor = { is_ai = no } } + #This is because we want to show a blinded portrait it prison.1030 for players, then we add the trait in the immediate but we still want a tooltip + add_trait_force_tooltip = disfigured + } + else = { + add_trait = disfigured + } + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = disfigured + } + add_character_modifier = { + modifier = recently_disfigured + years = 1 + } + blind_castrated_disfigured_recipient_support_effect = yes + } +} + +maimed_recipient_effect = { + scope:recipient = { + if = { + limit = { scope:maim_type = flag:arm } + if = { + limit = { scope:actor = { is_ai = no } } + #This is because we want to show a blinded portrait it prison.1030 for players, then we add the trait in the immediate but we still want a tooltip + apply_maimed_trait_and_modifier_effect = yes + } + else = { apply_maimed_trait_and_modifier_effect = yes } + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = maim_arm + } + } + else_if = { + limit = { scope:maim_type = flag:leg } + if = { + limit = { scope:actor = { is_ai = no } } + #This is because we want to show a blinded portrait it prison.1030 for players, then we add the trait in the immediate but we still want a tooltip + add_trait_force_tooltip = one_legged + } + else = { add_trait = one_legged } + torture_memory_effect = { + VICTIM = scope:recipient + TORTURER = scope:actor + TYPE = maim_leg + } + add_character_modifier = { + modifier = recently_maimed_modifier + years = 1 + } + } + blind_castrated_disfigured_recipient_support_effect = yes + } +} + +war_for_imprison_effect = { + $LIEGE$ = { save_temporary_scope_as = liege_temp } + $REBEL$ = { + save_temporary_scope_as = rebel_temp + save_scope_value_as = { + name = war_for_imprisonment_flavour + value = yes + } + start_war = { + casus_belli = refused_liege_demand_war + target = scope:liege_temp + } + } + # Disgruntled vassals + if = { + limit = { + scope:liege_temp = { NOT = { has_imprisonment_reason = scope:rebel_temp } } + } + scope:liege_temp = { + every_vassal = { #Vassals joining the rebel. + limit = { + vassal_would_join_rebel_faction_base_trigger = yes + OR = { + #Lovers and friends always back rebel (unless also lovers/friends of the liege) + vassal_would_join_rebel_faction_relation_trigger = yes + #Vassals that either like recipient or have high honor will rally if the liege is being tyrannical. + AND = { + # Special imprisonment checks + NOT = { + scope:liege_temp = { has_imprisonment_reason = scope:rebel_temp } + } + # If they can't join a faction against the liege they should not revolt + vassal_would_join_rebel_faction_tyranny_trigger = yes + } + #And finally, vassals that really hate their liege will join regardless (provided that they also do not hate recipient). + AND = { + OR = { + opinion = { + target = scope:rebel_temp + value >= -25 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -50 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -75 + } + } + } + OR = { + opinion = { + target = scope:liege_temp + value <= -40 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= -20 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= 0 + } + } + } + } + } + # TGP bloc members follow their leader + trigger_if = { + limit = { exists = house.house_confederation.leading_house.house_head } + house.house_confederation.leading_house.house_head = this + } + } + add_to_list = joining_vassals + } + } + } + # Bloc members join despite legality + bloc_member_join_war_effect = yes + every_in_list = { + list = joining_vassals + vassal_join_rebel_war_effect = yes + } + every_player = { + limit = { is_vassal_of = scope:liege_temp } + scope:liege_temp = { + save_scope_as = actor + save_scope_as = puppet_or_actor + } + scope:rebel_temp = { save_scope_as = recipient } + trigger_event = char_interaction.0232 + } + scope:rebel_temp = { + add_opinion = { + target = scope:liege_temp + modifier = attempted_arrest_opinion + } + } +} + +vassal_join_rebel_war_effect = { + save_temporary_scope_as = joining_vassal + scope:liege_temp = { custom_tooltip = tooltip_fellow_vassal_joins_war } #The war has not started when viewing the interaction + hidden_effect = { + scope:rebel_temp = { + every_character_war = { + limit = { + using_cb = refused_liege_demand_war + casus_belli = { + primary_attacker = scope:rebel_temp + primary_defender = scope:liege_temp + } + } + add_to_list = war_to_join + } + } + every_in_list = { + list = war_to_join + limit = { + # Bloc members are already pulled in by bloc_member_join_war_effect above + NOT = { is_participant = scope:joining_vassal } + } + hidden_effect = { set_called_to = scope:joining_vassal } + add_attacker = scope:joining_vassal + } + } + hidden_effect = { + scope:liege_temp = { + add_opinion = { + target = scope:joining_vassal + modifier = rebellious_vassal_opinion + } + } + } +} + +vassal_revocation_tyranny_effect = { #Despite its name this is referenced when _retracting_ vassals. + if = { + limit = { exists = scope:use_strife_not_tyranny } + # If you have revocation reason, we allow that. + if = { + limit = { has_revoke_title_reason = scope:recipient } + consume_revoke_title_reason = scope:recipient + } + else_if = { #Admin liege revoking from admin vassal + limit = { + government_has_mechanic = administrative + scope:recipient = { + government_has_mechanic = administrative + } + } + } + else = { change_strife_opinion = major_strife_gain } + } + else_if = { + limit = { + vassal_revocation_is_tyrannical_trigger = { VASSAL = scope:recipient } + } + # Special Legitimacy loss if you're revoking without a reason + if = { + limit = { has_legitimacy = yes } + add_legitimacy = minor_legitimacy_loss + } + add_tyranny = { + value = revoke_vassal_tyranny_gain + if = { + limit = { + scope:recipient = { + is_imprisoned = yes + NOT = { is_imprisoned_by = scope:puppet_or_actor } + } + NOT = { + scope:puppet_or_actor = { has_revoke_title_reason = scope:recipient } + } + } + multiply = 2 + } + } + } + else_if = { + limit = { + has_revoke_title_reason = scope:recipient + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_VASSAL_DESC + } + else_if = { + limit = { + rite = { + OR = { + rite_has_parameter = pluralism_righteous_revocation_tyranny_reduced + rite_has_parameter = pluralism_fundamentalist_revocation_tyranny_minimal + } + } + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_hostile_level + } + } + } + if = { + limit = { + rite = { rite_has_parameter = pluralism_fundamentalist_revocation_tyranny_minimal } + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value = faith_hostile_level + } + } + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_HOSTILE_INFIDEL_VASSAL + } + else = { + custom_tooltip = IS_ALLOWED_TO_REVOKE_EVIL_INFIDEL_VASSAL + } + every_vassal = { + limit = { + faith = scope:recipient.faith + } + custom = INFIDEL_REVOCATION_OPINION + add_opinion = { + modifier = angry_opinion + target = scope:puppet_or_actor + opinion = { + value = revoke_vassal_tyranny_gain + multiply = -1 + } + } + } + } +} + +revocation_tyranny_effect = { + save_scope_as = liege_temp_scope + if = { + limit = { exists = scope:use_strife_not_tyranny } + # If you have revocation reason, we allow that. + if = { + limit = { has_revoke_title_reason = $VASSAL$ } + consume_revoke_title_reason = $VASSAL$ + } + else = { change_strife_opinion = major_strife_gain } + } + else_if = { + limit = { + title_revocation_is_tyrannical_trigger = { VASSAL = $VASSAL$ } + } + add_tyranny = revoke_title_tyranny_gain + # Special Legitimacy loss if you're revoking without a reason + if = { + limit = { + has_legitimacy = yes + NOT = { + scope:landed_title ?= { + duchy = scope:liege_temp_scope.capital_county.duchy + } + } + } + add_legitimacy = medium_legitimacy_loss + } + + #If my culture is different from the recipients + if = { + limit = { + NOT = { culture = $VASSAL$.culture } + } + $VASSAL$.culture = { + change_cultural_acceptance = { + target = scope:liege_temp_scope.culture + value = revoke_title_culture_acceptance_impact + desc = cultural_acceptance_loss_revokation + } + } + } + } + else = { + if = { + limit = { + title_revocation_is_admin_governor_trigger = { VASSAL = $VASSAL$ } + } + custom_description = { + text = IS_ALLOWED_TO_REVOKE_ADMIN_GOVERNMENT + subject = scope:liege_temp_scope + object = $VASSAL$ + } + } + else_if = { + limit = { + exists = scope:landed_title + has_claim_on = scope:landed_title + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_TITLE_FOR_CLAIM_DESC + } + else_if = { + limit = { + has_revoke_title_reason = scope:recipient + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_TITLE_DESC + } + else_if = { + limit = { + rite = { + OR = { + rite_has_parameter = pluralism_righteous_revocation_tyranny_reduced + rite_has_parameter = pluralism_fundamentalist_revocation_tyranny_minimal + } + } + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value >= faith_hostile_level + } + } + } + if = { + limit = { + rite = { rite_has_parameter = pluralism_fundamentalist_revocation_tyranny_minimal } + faith = { + faith_hostility_level = { + target = scope:recipient.faith + value = faith_hostile_level + } + } + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_HOSTILE_INFIDEL_TITLE + } + else = { + custom_tooltip = IS_ALLOWED_TO_REVOKE_EVIL_INFIDEL_TITLE + } + every_vassal = { + limit = { + faith = scope:recipient.faith + } + custom = INFIDEL_REVOCATION_OPINION + add_opinion = { + modifier = angry_opinion + target = scope:puppet_or_actor + opinion = { + value = revoke_title_tyranny_gain + multiply = -1 + } + } + } + } + } +} + +war_for_revoke_effect = { + $LIEGE$ = { save_temporary_scope_as = liege_temp } + $REBEL$ = { + save_temporary_scope_as = rebel_temp + save_scope_value_as = { + name = war_for_revocation_flavour + value = yes + } + start_war = { + casus_belli = refused_liege_demand_war + target = scope:liege_temp + } + } + scope:liege_temp = { + # Disgruntled vassals + if = { + limit = { + NOT = { has_revoke_title_reason = scope:rebel_temp } + } + every_vassal = { #Vassals joining the rebel. + custom = vassals_joining_war_tt + limit = { + vassal_would_join_rebel_faction_base_trigger = yes + OR = { + #Lovers and friends always back rebel (unless also lovers/friends of the liege) + vassal_would_join_rebel_faction_relation_trigger = yes + #Vassals that either like recipient or have high honor will rally if the liege is being tyrannical. + AND = { + # Special retraction checks + scope:liege_temp = { + NOR = { + has_revoke_title_reason = scope:rebel_temp + AND = { + government_has_mechanic = administrative + scope:rebel_temp = { is_governor = yes } + trigger_if = { + limit = { has_legitimacy = yes } + meets_legitimacy_expectation_of = prev + } + } + trigger_if = { + limit = { exists = scope:landed_title } + has_claim_on = scope:landed_title + } + } + } + # If they can't join a faction against the liege they should not revolt + vassal_would_join_rebel_faction_tyranny_trigger = yes + } + #And finally, vassals that really hate their liege will join regardless (provided that they also do not hate recipient). + AND = { + OR = { + opinion = { + target = scope:rebel_temp + value >= -25 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -50 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -75 + } + } + } + OR = { + #default threshold + opinion = { + target = scope:liege_temp + value <= -50 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= -25 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= 0 + } + } + #If tyrannical, the default threshold will be reached if at this level + AND = { + scope:liege_temp = { + title_revocation_is_tyrannical_trigger = { VASSAL = scope:rebel_temp } + } + OR = { + opinion = { + target = scope:liege_temp + value <= -30 #revoke_title_tyranny_gain adds -20 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= -10 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= 10 + } + } + } + } + } + } + } + # TGP bloc members follow their leader + trigger_if = { + limit = { exists = house.house_confederation.leading_house.house_head } + house.house_confederation.leading_house.house_head = this + } + } + add_to_list = joining_vassals + } + } + } + # Bloc members join despite legality + bloc_member_join_war_effect = yes + every_in_list = { + list = joining_vassals + vassal_join_rebel_war_effect = yes + } + every_player = { + limit = { is_vassal_of = scope:liege_temp } + scope:rebel_temp = { save_scope_as = recipient } + scope:liege_temp = { + save_scope_as = actor + save_scope_as = puppet_or_actor + } + trigger_event = char_interaction.0232 + } + scope:rebel_temp = { + add_opinion = { + target = scope:liege_temp + modifier = attempted_arrest_opinion + } + } +} + +war_for_retraction_effect = { + $LIEGE$ = { save_temporary_scope_as = liege_temp } + $SUBVASSAL$ = { save_temporary_scope_as = subvassal_temp } + $REBEL$ = { + save_temporary_scope_as = rebel_temp + save_scope_value_as = { + name = war_for_retraction_flavour + value = yes + } + start_war = { + casus_belli = refused_liege_demand_war + target = scope:liege_temp + } + } + scope:liege_temp = { + every_vassal = { #Vassals joining the rebel. + limit = { + vassal_would_join_rebel_faction_base_trigger = yes + OR = { + #Lovers and friends always back rebel (unless also lovers/friends of the liege) + vassal_would_join_rebel_faction_relation_trigger = yes + #Vassals that either like recipient or have high honor will rally if the liege is being tyrannical (taking away de jure vassal). + AND = { + # Special revocation checks + scope:liege_temp = { + NOR = { + has_revoke_title_reason = scope:rebel_temp + AND = { + government_has_mechanic = administrative + scope:rebel_temp = { is_governor = yes } + trigger_if = { + limit = { has_legitimacy = yes } + meets_legitimacy_expectation_of = prev + } + } + } + } + scope:rebel_temp = { + any_held_title = { is_de_jure_liege_or_above_target = scope:subvassal_temp.primary_title } + } + # If they can't join a faction against the liege they should not revolt + vassal_would_join_rebel_faction_tyranny_trigger = yes + } + #And finally, vassals that really hate their liege will join regardless (provided that they also do not hate rebel). + AND = { + OR = { + opinion = { + target = scope:rebel_temp + value >= -25 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -50 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:rebel_temp + value >= -75 + } + } + } + OR = { + opinion = { + target = scope:liege_temp + value <= -40 + } + AND = { + has_game_rule = hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= -20 + } + } + AND = { + has_game_rule = very_hard_difficulty + scope:liege_temp = { is_ai = no } + opinion = { + target = scope:liege_temp + value <= 0 + } + } + } + } + } + # TGP bloc members follow their leader + trigger_if = { + limit = { exists = house.house_confederation.leading_house.house_head } + house.house_confederation.leading_house.house_head = this + } + } + add_to_list = joining_vassals + } + } + # Bloc members join despite legality + bloc_member_join_war_effect = yes + every_in_list = { + list = joining_vassals + vassal_join_rebel_war_effect = yes + } + every_player = { + limit = { is_vassal_of = scope:liege_temp } + trigger_event = char_interaction.0232 + } + scope:rebel_temp = { + add_opinion = { + target = scope:liege_temp + modifier = attempted_arrest_opinion + } + } +} + +bloc_member_join_war_effect = { + if = { + limit = { + exists = scope:rebel_temp.house.house_confederation + trigger_if = { + limit = { exists = scope:liege_temp.house.house_confederation } + NOT = { scope:rebel_temp = scope:liege_temp.house.house_confederation.leading_house.house_head } + } + } + scope:rebel_temp.top_liege = { + every_vassal = { + limit = { + highest_held_title_tier > tier_barony + house.house_confederation ?= scope:rebel_temp.house.house_confederation + NOT = { this = scope:liege_temp } + } + add_to_list = joining_vassals + } + } + } +} + +kick_from_court_interaction_warning_tooltip_effect = { + save_temporary_scope_as = kicked + if = { + limit = { is_councillor_of = scope:puppet_or_actor } + custom_tooltip = kick_from_court_councillor_warning_tt + } + if = { + limit = { + any_claim = { + useful_courtier_or_guest_claim_trigger = { RULER = scope:puppet_or_actor } + } + } + random_claim = { + limit = { + useful_courtier_or_guest_claim_trigger = { RULER = scope:puppet_or_actor } + tier = tier_kingdom + } + alternative_limit = { + useful_courtier_or_guest_claim_trigger = { RULER = scope:puppet_or_actor } + tier = tier_duchy + } + alternative_limit = { + useful_courtier_or_guest_claim_trigger = { RULER = scope:puppet_or_actor } + tier = tier_county + } + save_scope_as = kicked_claim + } + custom_tooltip = kick_from_court_claimant_warning_tt + } + if = { + limit = { is_commanding_army = yes } + custom_tooltip = kick_from_court_commander_warning_tt + } + if = { + limit = { is_knight_of = scope:puppet_or_actor } + custom_tooltip = kick_from_court_knight_warning_tt + } + if = { + limit = { + scope:kicked = { + has_any_court_position = yes + any_court_position_employer = { this = scope:puppet_or_actor } + } + } + custom_tooltip = kick_from_court_holds_court_title_warning_tt + } +} + +kick_from_court_interaction_effect = { + select_and_move_to_pool_effect = yes + + add_opinion = { + modifier = kicked_me_from_court + target = scope:actor + } + kick_from_court_interaction_warning_tooltip_effect = yes + + every_close_family_member = { + limit = { NOT = { any_in_list = { list = kicked_relatives_list this = prev } } } + add_to_list = kicked_relatives_list + } + + scope:actor = { + if = { + limit = { has_government = landless_adventurer_government } + every_courtier = { + limit = { + is_adult = yes + NOR = { + is_close_family_of = scope:recipient + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:recipient } + } + } + custom = custom.every_adult_follower + add_opinion = { + target = scope:actor + modifier = kicked_follower_from_camp_opinion + opinion = -5 + } + } + scope:recipient = { + every_relation = { + type = rival + limit = { is_courtier_of = scope:actor } + add_opinion = { + target = scope:actor + modifier = kicked_rival_from_camp_opinion + opinion = 30 + } + } + } + } + } +} + +disinherit_effect = { + save_scope_as = disinherited + #Rivalry + if = { + limit = { + NOT = { + has_relation_rival = $DISINHERITOR$ + } + OR = { + age >= 8 + AND = { + age < 8 + $DISINHERITOR$ = { + is_adult = no + } + } + } + OR = { + ai_vengefulness >= low_positive_ai_value + ai_greed >= low_positive_ai_value + } + NOR = { + has_trait = craven + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + set_relation_rival = { + target = $DISINHERITOR$ + reason = rival_disinherited + } + } + else_if = { + limit = { + NOR = { + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + progress_towards_rival_effect = { + CHARACTER = $DISINHERITOR$ + REASON = rival_disinherited + OPINION = 0 + } + } + + #Gain rivalry with primary heir if one of your other heirs + if = { + limit = { + is_heir_of = $DISINHERITOR$ + $DISINHERITOR$.primary_heir ?= { + NOR = { + this = scope:disinherited + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:disinherited } + is_allied_to = scope:disinherited + is_child_of = scope:disinherited + } + } + } + #Rivalry + if = { + limit = { + NOT = { + has_relation_rival = $DISINHERITOR$.primary_heir + } + OR = { + age >= 8 + AND = { + age < 8 + $DISINHERITOR$.primary_heir ?= { + is_adult = no + } + } + } + OR = { + ai_vengefulness >= low_positive_ai_value + ai_greed >= low_positive_ai_value + } + NOR = { + has_trait = craven + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + set_relation_rival = { + target = $DISINHERITOR$.primary_heir + reason = rival_disinherited + } + } + else_if = { + limit = { + NOR = { + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + progress_towards_rival_effect = { + CHARACTER = $DISINHERITOR$.primary_heir + REASON = rival_disinherited + OPINION = 0 + } + } + } + #Gain rivalry with new primary heir if your primary heir + else_if = { + limit = { + is_primary_heir_of = $DISINHERITOR$ + $DISINHERITOR$.primary_title = { + any_title_heir = { + $DISINHERITOR$.primary_title = { + place_in_line_of_succession = { + target = prev + value = 2 + } + } + NOR = { + this = scope:disinherited + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:disinherited } + is_allied_to = scope:disinherited + is_child_of = scope:disinherited + } + } + } + } + $DISINHERITOR$.primary_title = { + random_title_heir = { + limit = { + $DISINHERITOR$.primary_title = { + place_in_line_of_succession = { + target = prev + value = 2 + } + } + } + save_scope_as = new_primary_heir + } + } + #Rivalry + if = { + limit = { + NOT = { + has_relation_rival = scope:new_primary_heir + } + OR = { + ai_vengefulness >= low_positive_ai_value + ai_greed >= low_positive_ai_value + } + NOR = { + has_trait = craven + has_trait = forgiving + has_trait = content + has_trait = humble + } + OR = { + age >= 8 + AND = { + age < 8 + scope:new_primary_heir ?= { + is_adult = no + } + } + } + } + set_relation_rival = { + target = scope:new_primary_heir + reason = rival_disinherited + } + } + else_if = { + limit = { + NOR = { + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + progress_towards_rival_effect = { + CHARACTER = scope:new_primary_heir + REASON = rival_disinherited + OPINION = 0 + } + } + } + if = { + limit = { + is_heir_of = $DISINHERITOR$ + NOT = { + has_trait = disputed_heritage + } + $DISINHERITOR$ = { + any_vassal = { + vassal_stance = courtly + } + } + } + $DISINHERITOR$ = { + custom_tooltip = courtly_vassal_disapproves_disinheriting + hidden_effect = { + every_vassal = { + vassal_stance = courtly + add_opinion = { + target = $DISINHERITOR$ + modifier = courtly_disinherit_opinion + } + } + } + } + } + add_trait = disinherited + add_opinion = { + modifier = disinherited_opinion + target = $DISINHERITOR$ + } + house = { + every_house_member = { + limit = { + NOT = { house = $DISINHERITOR$.house } + } + custom = all_house_members + add_opinion = { + modifier = disinherited_house_member_opinion + target = $DISINHERITOR$ + } + } + } + if = { + limit = { + exists = dynasty + NOT = { $DISINHERITOR$ = dynasty.dynast } + } + $DISINHERITOR$.dynasty.dynast = { + add_opinion = { + target = $DISINHERITOR$ + modifier = fp1_usurped_my_authority_opinion + years = 20 + } + } + } + hidden_effect = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = $DISINHERITOR$ + has_relation_potential_rival = $DISINHERITOR$ + } + } + set_relation_potential_rival = $DISINHERITOR$ + } + } +} + +restore_inheritance_effect = { + remove_trait = disinherited + if = { + limit = { + has_opinion_modifier = { + modifier = disinherited_opinion + target = scope:puppet_or_actor + } + } + remove_opinion = { + modifier = disinherited_opinion + target = scope:puppet_or_actor + } + house = { + if = { + limit = { + NOT = { + any_house_member = { + this != scope:recipient + has_opinion_modifier = { + modifier = disinherited_opinion + target = scope:puppet_or_actor + } + } + } + } + every_house_member = { + custom = all_house_members + remove_opinion = { + modifier = disinherited_house_member_opinion + target = scope:puppet_or_actor + single = yes + } + } + } + } + } + else = { + if = { + limit = { + this != scope:puppet_or_actor + } + add_opinion = { + modifier = restored_inheritance_opinion + target = scope:puppet_or_actor + } + } + house = { + every_house_member = { + limit = { + this != scope:recipient + this != scope:puppet_or_actor + } + custom = all_house_members + add_opinion = { + modifier = restored_house_member_inheritance_opinion + target = scope:puppet_or_actor + } + } + } + } + #Remove nithing status, if applicable. + hidden_effect = { + if = { + limit = { has_character_modifier = nithing_fp1_modifier } + remove_character_modifier = nithing_fp1_modifier + } + } +} + +denounce_effect = { + add_trait = denounced + if = { + limit = { + NOT = { + has_relation_rival = $ACTOR$ + } + } + #Rivalry + set_relation_rival = { + target = $ACTOR$ + reason = rival_denounced + } + } + if = { + limit = { + $ACTOR$ = { + has_hook_of_type = { + target = $RECIPIENT$ + type = house_head_hook + } + } + } + $ACTOR$ = { + remove_hook = { + target = $RECIPIENT$ + type = house_head_hook + } + } + } + if = { + limit = { + has_opinion_modifier = { + target = $ACTOR$ + modifier = forgave_denounced_opinion + } + } + custom_tooltip = forgiven_changed_to_denounced + hidden_effect = { + remove_opinion = { + target = $ACTOR$ + modifier = forgave_denounced_opinion + } + add_opinion = { + modifier = denounced_opinion + target = $ACTOR$ + } + } + } + else = { + add_opinion = { + modifier = denounced_opinion + target = $ACTOR$ + } + } + if = { + limit = { + NOT = { is_close_family_of = $ACTOR$ } + } + house = { + every_house_member = { + limit = { + NOT = { house = $ACTOR$.house } + } + custom = all_house_members + add_opinion = { + modifier = denounced_house_member_opinion + target = $ACTOR$ + } + } + } + } +} + +forgive_effect = { + remove_trait = denounced + custom_tooltip = denounced_change_to_forgiven + hidden_effect = { + remove_opinion = { + target = scope:puppet_or_actor + modifier = denounced_opinion + } + add_opinion = { + modifier = forgave_denounced_opinion + target = scope:puppet_or_actor + opinion = -25 + } + } + if = { + limit = { + NOT = { is_close_family_of = scope:puppet_or_actor } + } + house = { + every_house_member = { + limit = { + house != scope:puppet_or_actor.house + } + custom = all_house_members + add_opinion = { + modifier = forgave_house_member_opinion + target = scope:puppet_or_actor + } + } + } + + } +} + +dynast_claim_title_effect = { + scope:puppet_or_actor = { + add_unpressed_claim = scope:target + stress_and_fulfillment_impact = { + content = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + } + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + modifier = claimed_my_title_opinion + opinion = -50 + } + } +} + +dynast_end_dynasty_wars_effect = { + scope:puppet_or_actor.dynasty = { + add_dynasty_prestige = medium_dynasty_prestige_loss + } + + scope:recipient = { + every_character_war = { + limit = { + primary_defender != scope:puppet_or_actor + primary_attacker = scope:recipient + primary_defender.dynasty = scope:recipient.dynasty + } + primary_defender = { + trigger_event = char_interaction.0071 + } + end_war = white_peace + } + } +} + +educate_child_interaction_effect = { + scope:ward = { + # Culture/faith conversion + university gold/tooltips + education_flags_tooltips_effect = yes + } + # Travel setup + ward_depart_effect = yes +} + +education_flags_tooltips_effect = { + #Convert culture + if = { + limit = { always = scope:convert_culture } + scope:ward = { + add_character_flag = { + flag = convert_culture + years = 10 + } + } + if = { + limit = { scope:ward.age < 11 } + custom_description = { + text = "educate_child_option_convert_culture_effect" + subject = scope:ward + object = scope:guardian.culture + } + } + else_if = { + limit = { + scope:ward.age >= 11 + scope:ward.age < 14 + } + custom_description = { + text = "educate_child_option_convert_culture_likely_effect" + subject = scope:ward + object = scope:guardian.culture + } + } + else_if = { + limit = { scope:ward.age >= 14 } + custom_description = { + text = "educate_child_option_convert_culture_unlikely_effect" + subject = scope:ward + object = scope:guardian.culture + } + } + } + #Convert faith + if = { + limit = { always = scope:convert_faith } + scope:ward = { + add_character_flag = { + flag = convert_faith + years = 10 + } + } + if = { + limit = { scope:ward.age < 11 } + custom_description = { + text = "educate_child_option_convert_faith_effect" + subject = scope:ward + object = scope:guardian.rite + } + } + else_if = { + limit = { + scope:ward.age >= 11 + scope:ward.age < 14 + } + custom_description = { + text = "educate_child_option_convert_faith_likely_effect" + subject = scope:ward + object = scope:guardian.rite + } + } + else_if = { + limit = { scope:ward.age >= 14 } + custom_description = { + text = "educate_child_option_convert_faith_unlikely_effect" + subject = scope:ward + object = scope:guardian.rite + } + } + } + + # Knowledge + if = { + limit = { + always = scope:send_to_university + OR = { + scope:recipient = { + OR = { + any_realm_province = { + is_higher_studies_location = yes + save_temporary_scope_as = university + } + any_realm_county = { + has_county_modifier = pandidakterion_university_modifier + # Save the province, not the county, because scope:university is only read by a province-scoped trigger + title_province ?= { save_temporary_scope_as = university } + } + } + } + scope:puppet_or_actor = { + this = scope:secondary_actor + any_realm_province = { + is_higher_studies_location = yes + save_temporary_scope_as = university + } + } + } + } + scope:puppet_or_actor = { + remove_short_term_gold = { + value = monumental_gold_value + if = { + limit = { house = { has_house_modifier = ep3_eparch_university_influence_modifier } } + multiply = { + value = 1 + subtract = university_cost_reduction_value + } + } + } + } + if = { + limit = { + scope:university ?= { + is_province_valid_confucian_education_trigger = yes + } + NOT = { + scope:guardian = { + has_trait = confucian_education + } + } + } + add_character_modifier = studying_confucian_education_modifier + } + add_character_modifier = studying_at_university_modifier + } + # Confucian Education trait + if = { + limit = { + scope:guardian = { + has_trait = confucian_education + } + scope:send_to_university = no + } + add_character_modifier = studying_confucian_education_modifier + custom_tooltip = studying_confucian_education_disciple + } +} + +educate_child_event_effect = { + scope:ward = { + #Set relation and move character + set_relation_guardian = scope:guardian + + if = { + limit = { + scope:guardian = { is_playable_character = yes } + scope:ward = { is_playable_character = no } + scope:guardian != scope:ward.host + } + visit_court_of = scope:guardian + } + else_if = { + limit = { + scope:guardian = { is_playable_character = no } + scope:ward = { is_playable_character = yes } + scope:ward != scope:guardian.host + } + scope:guardian = { + visit_court_of = scope:ward + } + } + else_if = { + limit = { + scope:guardian = { is_playable_character = no } + scope:ward = { is_playable_character = no } + exists = scope:guardian.host + scope:guardian.host != scope:ward.host + } + visit_court_of = scope:guardian.host + } + } + + #Opinions + guardian_add_opinion_effect = { GUARDIAN = scope:guardian WARD_LIEGE = scope:ward_liege WARD = scope:ward } +} + +call_dynasty_member_to_war_interaction_effect = { + if = { + limit = { + exists = scope:target + } + + scope:target = { + hidden_effect = { + set_called_to = scope:recipient + } + if = { + limit = { + is_attacker = scope:puppet_or_actor + } + add_attacker = scope:recipient + } + else = { + add_defender = scope:recipient + } + } + + scope:puppet_or_actor.dynasty = { + add_dynasty_prestige = medium_dynasty_prestige_loss + } + } + + if = { + limit = { always = scope:hook } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } +} + +offer_vassalization_interaction_effect = { + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + } + scope:recipient = { + change_liege = { + liege = scope:puppet_or_actor + change = scope:change + } + add_opinion = { + modifier = became_vassal + target = scope:puppet_or_actor + opinion = 10 + } + } + resolve_title_and_vassal_change = scope:change + + # Special terms for feudal contracts + scope:recipient = { + if = { + limit = { + government_has_flag = government_is_feudal + } + if = { + limit = { scope:high_obligations ?= yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 3 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 3 } + } + } + custom_tooltip = high_obligations_taxes + custom_tooltip = high_obligations_levies + } + else_if = { + limit = { scope:low_obligations ?= yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 1 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 1 } + } + } + custom_tooltip = low_obligations_taxes + custom_tooltip = low_obligations_levies + } + else_if = { + limit = { scope:religious_exemption ?= yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 2 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 1 } + vassal_contract_set_obligation_level = { type = religious_rights level = 1 } + } + } + custom_tooltip = normal_obligations_taxes + custom_tooltip = low_obligations_levies + custom_tooltip = religious_protection_tt + } + else = { + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 2 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 2 } + } + } + custom_tooltip = normal_obligations_taxes + custom_tooltip = normal_obligations_levies + } + } + else_if = { + limit = { + government_has_flag = government_is_clan + scope:religious_exemption_clan ?= yes + } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = religious_rights level = 1 } + } + } + custom_tooltip = religious_protection_tt + } + } + + # Struggle catalysts. + hidden_effect = { + fp3_struggle_apply_independent_vassalage_catalyst_effect = { + NEW_LIEGE = scope:puppet_or_actor + NEW_VASSAL = scope:recipient + } + } +} + +# Effect to start a tributary relationship from a war +# root-scope is the Suzerain +# $TRIBUTARY$ = the new tributary +# $SUZERAIN$ = their suzerain +# $WAR$ = required war scope +start_tributary_from_war_effect = { + $WAR$ ?= { save_scope_as = tributary_war } + if = { + limit = { NOT = { exists = $WAR$ } } + error_log = "Tried to call start_tributary_from_war_effect without a valid war scope!" + } + save_scope_value_as = { + name = high_obligations + value = yes + } + start_tributary_interaction_effect = { + TRIBUTARY = $TRIBUTARY$ + SUZERAIN = $SUZERAIN$ + } +} + +@starting_subject_standing_value = 10 + +# Effect to start a tributary relationship, can be called directly without a war or from start_tributary_from_war_effect +# $TRIBUTARY$ = the new tributary +# $SUZERAIN$ = their suzerain +start_tributary_interaction_effect = { + # Setup truces depending on how the tributary relationship was created + $TRIBUTARY$ = { save_scope_as = tributary_loc } + $SUZERAIN$ = { save_scope_as = suzerain_loc } + + #Mandala Tributaries + if = { + limit = { + should_be_mandala_tributary_trigger = { + SUZERAIN = $SUZERAIN$ + TRIBUTARY = $TRIBUTARY$ + } + trigger_if = { + limit = { exists = scope:tributary_war } + $SUZERAIN$ = { + AND = { + house = { has_house_head_parameter = can_make_mandala_tributaries_via_war } + is_house_head = yes + } + } + } + } + $TRIBUTARY$ = { + if = { + limit = { government_has_flag = government_is_tribal } + start_tributary = { + contract_group = tributary_mandala_tribal + suzerain = $SUZERAIN$ + } + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 3 + } + tributary_contract_set_obligation_level = { + type = mandala_government_prestige + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 3 + } + } + } + custom_tooltip = high_mandala_tribute_taxes + custom_tooltip = high_mandala_tribute_prestige + custom_tooltip = high_mandala_tribute_levies + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 0 + } + tributary_contract_set_obligation_level = { + type = mandala_government_prestige + level = 0 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 0 + } + } + } + custom_tooltip = exempt_mandala_tribute_taxes + custom_tooltip = low_mandala_tribute_prestige + custom_tooltip = exempt_mandala_tribute_levies + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_prestige + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 1 + } + } + } + custom_tooltip = normal_mandala_tribute_taxes + custom_tooltip = normal_mandala_tribute_prestige + custom_tooltip = low_mandala_tribute_levies + } + + if = { + limit = { is_tributary = yes } # suppress error logging + tributary_contract_set_obligation_level = { + type = mandala_suzerain_war_participation_guarantee + level = 1 + } + } + } + else = { + start_tributary = { + contract_group = tributary_mandala + suzerain = $SUZERAIN$ + } + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 3 + } + tributary_contract_set_obligation_level = { + type = mandala_government_piety + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 3 + } + } + } + custom_tooltip = high_mandala_tribute_taxes + custom_tooltip = high_mandala_tribute_piety + custom_tooltip = high_mandala_tribute_levies + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 0 + } + tributary_contract_set_obligation_level = { + type = mandala_government_piety + level = 0 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 0 + } + } + } + custom_tooltip = exempt_mandala_tribute_taxes + custom_tooltip = low_mandala_tribute_piety + custom_tooltip = exempt_mandala_tribute_levies + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = mandala_government_taxes + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_piety + level = 2 + } + tributary_contract_set_obligation_level = { + type = mandala_government_levies + level = 1 + } + } + } + custom_tooltip = normal_mandala_tribute_taxes + custom_tooltip = normal_mandala_tribute_piety + custom_tooltip = low_mandala_tribute_levies + } + if = { + limit = { is_tributary = yes } # suppress error logging + tributary_contract_set_obligation_level = { + type = mandala_suzerain_war_participation_guarantee + level = 1 + } + } + } + } + } + # Wanua Tributaries + else_if = { + limit = { + should_be_wanua_tributary_trigger = { + SUZERAIN = $SUZERAIN$ + TRIBUTARY = $TRIBUTARY$ + } + } + $TRIBUTARY$ = { + start_tributary = { + contract_group = tributary_wanua + suzerain = $SUZERAIN$ + } + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = barter_goods_obligations + level = barter_goods_high + } + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = prestige_transfer_normal } + } + } + custom_tooltip = high_wanua_tribute_barter_goods + custom_tooltip = high_subjugated_tribute_taxes + custom_tooltip = normal_subjugated_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = barter_goods_obligations + level = barter_goods_low + } + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = prestige_transfer_none } + } + } + custom_tooltip = low_wanua_tribute_barter_goods + custom_tooltip = low_subjugated_tribute_taxes + custom_tooltip = none_subjugated_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { + type = barter_goods_obligations + level = barter_goods_medium + } + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = prestige_transfer_normal } + } + } + custom_tooltip = medium_wanua_tribute_barter_goods + custom_tooltip = low_subjugated_tribute_taxes + custom_tooltip = normal_subjugated_tribute_prestige + } + } + } + # Nomadic Tributaries + else_if = { + limit = { + $SUZERAIN$ = { has_government = nomad_government } + } + $TRIBUTARY$ = { + if = { + limit = { + OR = { + has_government = nomad_government + has_government = herder_government + } + } + start_tributary = { + contract_group = tributary_nomadic + suzerain = $SUZERAIN$ + } + } + else = { + start_tributary = { + contract_group = tributary_settled + suzerain = $SUZERAIN$ + } + } + + # Special terms depending on which options were set + if = { # settled tributary + limit = { + NOR = { + has_government = nomad_government + has_government = herder_government + } + } + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 2 } + } + } + custom_tooltip = high_feudal_tribute_taxes + custom_tooltip = high_feudal_tribute_levies + custom_tooltip = high_nomad_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 0 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 0 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 0 } + } + } + custom_tooltip = low_feudal_tribute_taxes + custom_tooltip = low_feudal_tribute_levies + custom_tooltip = none_nomad_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 1 } + } + } + custom_tooltip = normal_feudal_tribute_taxes + custom_tooltip = normal_feudal_tribute_levies + custom_tooltip = normal_nomad_tribute_prestige + } + } + else = { # nomadic tributary + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = nomad_government_herd level = 3 } #herd_tax_high + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 2 } + } + } + custom_tooltip = high_nomad_tribute_herd + custom_tooltip = high_nomad_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = nomad_government_herd level = 1 } #herd_tax_low + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 0 } + } + } + custom_tooltip = low_nomad_tribute_herd + custom_tooltip = none_nomad_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = nomad_government_herd level = 2 } #herd_tax_normal + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 1 } + } + } + custom_tooltip = normal_nomad_tribute_herd + custom_tooltip = normal_nomad_tribute_prestige + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + tributary_contract_set_obligation_level = { type = suzerain_war_participation_guarantee level = 0 } + tributary_contract_set_obligation_level = { type = tributary_war_participation_obligation level = 0 } + custom_tooltip = no_tributary_war_obligations + custom_tooltip = no_suzerain_guarantee + } + } + } + else_if = { + limit = { + $SUZERAIN$ = { OR = { has_government = steppe_admin_government has_government = administrative_government has_government = feudal_government has_government = clan_government } } + } + $TRIBUTARY$ = { + if = { + limit = { + OR = { + has_government = nomad_government + has_government = herder_government + } + } + start_tributary = { + contract_group = tributary_steppe + suzerain = $SUZERAIN$ + } + } + else = { + start_tributary = { + contract_group = tributary_settled + suzerain = $SUZERAIN$ + } + } + + # Special terms depending on which options were set + if = { # settled tributary + limit = { + NOR = { + has_government = nomad_government + has_government = herder_government + } + } + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 2 } + } + } + custom_tooltip = high_feudal_tribute_taxes + custom_tooltip = high_feudal_tribute_levies + custom_tooltip = high_nomad_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 0 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 0 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 0 } + } + } + custom_tooltip = low_feudal_tribute_taxes + custom_tooltip = low_feudal_tribute_levies + custom_tooltip = none_nomad_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_levies level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 1 } + } + } + custom_tooltip = normal_feudal_tribute_taxes + custom_tooltip = normal_feudal_tribute_levies + custom_tooltip = normal_nomad_tribute_prestige + } + } + else = { # steppe tributary + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 2 } + } + } + custom_tooltip = high_nomad_tribute_herd + custom_tooltip = high_nomad_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 0 } + } + } + custom_tooltip = low_nomad_tribute_herd + custom_tooltip = none_nomad_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = nomad_government_prestige level = 1 } + } + } + custom_tooltip = normal_nomad_tribute_herd + custom_tooltip = normal_nomad_tribute_prestige + } + } + if = { + limit = { + is_tributary = yes # suppress error logging + government_has_flag = government_is_nomadic + NOT = { government_has_flag = government_is_herder } + } + tributary_contract_set_obligation_level = { type = suzerain_war_participation_guarantee level = 0 } + tributary_contract_set_obligation_level = { type = tributary_war_participation_obligation level = 1 } + custom_tooltip = tributary_war_obligations + custom_tooltip = no_suzerain_guarantee + } + else_if = { + limit = { + is_tributary = yes # suppress error logging + } + tributary_contract_set_obligation_level = { type = suzerain_war_participation_guarantee level = 0 } + tributary_contract_set_obligation_level = { type = tributary_war_participation_obligation level = 0 } + custom_tooltip = no_tributary_war_obligations + custom_tooltip = no_suzerain_guarantee + } + } + } + else_if = { + limit = { + $SUZERAIN$ = { + has_government = celestial_government + highest_held_title_tier >= tier_hegemony + } + } + $TRIBUTARY$ = { + start_tributary = { + contract_group = tributary_celestial + suzerain = $SUZERAIN$ + } + + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = celestial_tribute_gold level = 2 } + tributary_contract_set_obligation_level = { type = celestial_tribute_prestige level = 2 } + } + } + custom_tooltip = normal_celestial_tribute_taxes + custom_tooltip = normal_celestial_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = celestial_tribute_gold level = 0 } + tributary_contract_set_obligation_level = { type = celestial_tribute_prestige level = 0 } + } + } + custom_tooltip = no_celestial_tribute_taxes + custom_tooltip = no_celestial_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = celestial_tribute_gold level = 1 } + tributary_contract_set_obligation_level = { type = celestial_tribute_prestige level = 1 } + } + } + custom_tooltip = low_celestial_tribute_taxes + custom_tooltip = low_celestial_tribute_prestige + } + + add_subject_standing = @starting_subject_standing_value + custom_tooltip = expected_to_pay_tribute + } + } + else_if = { + limit = { + $SUZERAIN$ = { highest_held_title_tier = tier_hegemony } + } + $TRIBUTARY$ = { + start_tributary = { + contract_group = tributary_hegemonic + suzerain = $SUZERAIN$ + } + + if = { + limit = { + OR = { + scope:high_obligations ?= yes + exists = scope:tributary_war + } + } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = hegemonic_tribute_gold level = 2 } + tributary_contract_set_obligation_level = { type = hegemonic_tribute_prestige level = 2 } + } + } + custom_tooltip = normal_hegemonic_tribute_taxes + custom_tooltip = normal_hegemonic_tribute_prestige + } + else_if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = hegemonic_tribute_gold level = 0 } + tributary_contract_set_obligation_level = { type = hegemonic_tribute_prestige level = 0 } + } + } + custom_tooltip = no_hegemonic_tribute_taxes + custom_tooltip = no_hegemonic_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = hegemonic_tribute_gold level = 1 } + tributary_contract_set_obligation_level = { type = hegemonic_tribute_prestige level = 1 } + } + } + custom_tooltip = low_hegemonic_tribute_taxes + custom_tooltip = low_hegemonic_tribute_prestige + } + + add_subject_standing = @starting_subject_standing_value + custom_tooltip = expected_to_pay_tribute + } + } + else = { # subjugated tributary + $TRIBUTARY$ = { + start_tributary = { + contract_group = tributary_subjugated + suzerain = $SUZERAIN$ + } + if = { + limit = { scope:low_obligations ?= yes } + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 1 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 0 } + } + } + custom_tooltip = low_subjugated_tribute_taxes + custom_tooltip = none_subjugated_tribute_prestige + } + else = { + if = { + limit = { is_tributary = yes } # suppress error logging + hidden_effect = { + tributary_contract_set_obligation_level = { type = default_tributary_taxes level = 2 } + tributary_contract_set_obligation_level = { type = default_tributary_prestige level = 1 } + tributary_contract_set_obligation_level = { type = suzerain_war_participation_guarantee level = 1 } + tributary_contract_set_obligation_level = { type = tributary_war_participation_obligation level = 0 } + } + } + custom_tooltip = high_subjugated_tribute_taxes + custom_tooltip = normal_subjugated_tribute_prestige + } + custom_tooltip = suzerain_guarantee + custom_tooltip = no_tributary_war_obligations + } + } + setup_tributary_truces_effect = { SUZERAIN = $SUZERAIN$ TRIBUTARY = $TRIBUTARY$ } +} + +@truce_duration_war_default = 15 +@truce_duration_war_mandala = 5 +@truce_duration_negotiated_default = 5 +@truce_duration_negotiated_celestial = 25 + +setup_tributary_truces_effect = { + # Setup truces depending on how the tributary relationship was created + $TRIBUTARY$ = { save_scope_as = tributary_loc } + $SUZERAIN$ = { save_scope_as = suzerain_loc } + + if = { + limit = { exists = scope:tributary_war } # this will exist if invoked from start_tributary_from_war_effect + $TRIBUTARY$ = { + if = { + limit = { should_be_mandala_tributary_trigger = { SUZERAIN = $SUZERAIN$ TRIBUTARY = $TRIBUTARY$ } } + add_truce_one_way = { + character = $SUZERAIN$ + years = @truce_duration_war_mandala + war = scope:tributary_war + result = defeat + } + } + else = { + add_truce_one_way = { + character = $SUZERAIN$ + years = @truce_duration_war_default + war = scope:tributary_war + result = defeat + } + } + } + } + else = { + $TRIBUTARY$ = { + if = { + limit = { $SUZERAIN$ = { government_has_flag = government_is_celestial } } + add_truce_both_ways = { + character = $SUZERAIN$ + years = @truce_duration_negotiated_celestial + name = TRUCE_TRIBUTARY + } + } + else = { + add_truce_both_ways = { + character = $SUZERAIN$ + years = @truce_duration_negotiated_default + name = TRUCE_TRIBUTARY + } + } + } + } +} + +offer_fealty_interaction_effect = { + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + } + scope:puppet_or_actor = { + change_liege = { + liege = scope:recipient + change = scope:change + } + + stress_and_fulfillment_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + resolve_title_and_vassal_change = scope:change + + scope:puppet_or_actor = { + # Special terms for feudal contracts + if = { + limit = { + government_has_flag = government_is_feudal + } + if = { + limit = { scope:high_obligations = yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 3 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 3 } + } + } + custom_tooltip = high_obligations_taxes + custom_tooltip = high_obligations_levies + } + else_if = { + limit = { scope:low_obligations = yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 1 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 1 } + } + } + custom_tooltip = low_obligations_taxes + custom_tooltip = low_obligations_levies + } + else_if = { + limit = { scope:religious_taxation = yes } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 3 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 2 } + vassal_contract_set_obligation_level = { type = religious_rights level = 1 } + } + } + custom_tooltip = high_obligations_taxes + custom_tooltip = normal_obligations_levies + if = { + limit = { scope:recipient.faith = { has_doctrine_parameter = unlock_jizya_contract } } + custom_tooltip = jizya_religious_protection_tt + } + else = { custom_tooltip = religious_protection_tt } + } + else = { + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 2 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 2 } + } + } + custom_tooltip = normal_obligations_taxes + custom_tooltip = normal_obligations_levies + } + } + else_if = { + limit = { + government_has_flag = government_is_clan + scope:religious_exemption_clan = yes + } + hidden_effect = { + if = { + limit = { top_liege != this } # To avoid errors during tooltip generation (prior to the contract being generated) + vassal_contract_set_obligation_level = { type = religious_rights level = 1 } + } + } + custom_tooltip = religious_protection_tt + } + } + + # Struggle catalysts. + hidden_effect = { + fp3_struggle_apply_independent_vassalage_catalyst_effect = { + NEW_LIEGE = scope:recipient + NEW_VASSAL = scope:puppet_or_actor + } + } +} + + +call_ally_interaction_effect = { + if = { + limit = { + exists = scope:target + scope:recipient = { + NOR = { + is_at_war_with = scope:target.primary_defender + is_at_war_with = scope:target.primary_attacker + } + } + } + call_ally_interaction_event_effect = yes + + } +} + +#So that we can show a tooltip in the event about them responding +call_ally_interaction_event_effect = { + if = { + limit = { + OR = { + scope:actor = { + any_home_court_hostage = { + warden ?= { is_attacker_in_war = scope:target } + } + } + scope:target = { + any_war_attacker = { + any_warden_hostage = { home_court ?= scope:actor } + } + } + } + } + custom_tooltip = hostage_execution_warning_tt + } + scope:target = { + hidden_effect = { + set_called_to = scope:recipient + } + if = { + limit = { + is_attacker = scope:actor + } + add_attacker = scope:recipient + scope:actor = { + #Check for Mandala first + if = { + limit = { + government_has_flag = government_is_mandala + scope:recipient = { is_tributary_of = scope:actor } + } + if = { + limit = { + scope:recipient.primary_title.tier = tier_barony + } + add_piety = { + add = minor_piety_loss + multiply = 2 + } + } + else_if = { + limit = { + scope:recipient.primary_title.tier = tier_county + } + add_piety = { + add = medium_piety_loss + multiply = 2 + } + } + else_if = { + limit = { + scope:recipient.primary_title.tier = tier_duchy + } + add_piety = { + add = major_piety_loss + multiply = 2 + } + } + else_if = { + limit = { + scope:recipient.primary_title.tier = tier_kingdom + } + add_piety = { + add = massive_piety_loss + multiply = 1.5 + } + } + else_if = { + limit = { + scope:recipient.primary_title.tier = tier_empire + } + add_piety = { + add = monumental_piety_loss + multiply = 1.5 + } + } + else_if = { + limit = { + scope:recipient.primary_title.tier = tier_hegemony + } + add_piety = { + add = monumental_piety_loss + multiply = 2.5 + } + } + } + #Then do everything else + else = { + if = { + limit = { + NOT = { + has_relation_blood_brother = scope:recipient + } + } + if = { # PAM - Peace of God PT discount + limit = { + scope:actor = { + faith = scope:recipient.faith + has_personal_tenet_flag = tenet_peace_of_god_cheaper_ally_call + faith = { + faith_hostility_level = { + target = scope:target.primary_defender.faith + value >= faith_hostile_level + } + } + } + } + pam_peace_of_god_personal_tenet_cheaper_alliance_call_effect = yes + } + else = { + add_prestige = { + value = 0 + subtract = scope:recipient.tier_scaled_prestige_value + } + } + } + } + } + } + else = { + add_defender = scope:recipient + } + } +} + +pam_peace_of_god_personal_tenet_cheaper_alliance_call_effect = { + add_prestige = { + value = 0 + subtract = scope:recipient.tier_scaled_prestige_value + multiply = 0.5 + } +} + +seduce_interaction_stress_effect = { + if = { + limit = { + NOT = { + scope:recipient = { + is_consort_of = scope:puppet_or_actor + } + } + OR = { + scope:puppet_or_actor = { + is_male = yes + rite = { NOT = { rite_has_parameter = adultery_male_accepted } } + } + scope:puppet_or_actor = { + is_female = yes + rite = { NOT = { rite_has_parameter = adultery_female_accepted } } + } + } + } + scope:puppet_or_actor = { + stress_and_fulfillment_impact = { + chaste = medium_stress_impact_gain + zealous = minor_stress_impact_gain + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + } + } + } + else = { + scope:puppet_or_actor = { + stress_and_fulfillment_impact = { + chaste = medium_stress_impact_gain + } + } + } +} + +retract_vassal_interaction_effect = { + scope:puppet_or_actor = { + vassal_revocation_tyranny_effect = yes + if = { + limit = { + vassal_revocation_is_tyrannical_trigger = { VASSAL = scope:recipient } + } + stress_and_fulfillment_impact = { + generous = medium_stress_impact_gain + just = medium_stress_impact_gain + } + } + else = { + stress_and_fulfillment_impact = { + generous = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + consume_revoke_title_reason = scope:recipient + } + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = no + } + + scope:secondary_recipient = { + change_liege = { + liege = scope:puppet_or_actor + change = scope:change + } + } + + resolve_title_and_vassal_change = scope:change + + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + modifier = retracted_vassal + } + } + if = { + limit = { + always = scope:hook + scope:puppet_or_actor ?= { has_hook = scope:recipient } + } + scope:puppet_or_actor = { use_hook = scope:recipient } + } +} + +ask_for_pardon_interaction_effect = { + scope:puppet_or_actor = { + every_liege_or_above = { + if = { + limit = { has_imprisonment_reason = scope:puppet_or_actor } + send_interface_toast = { + title = ask_for_pardon_interaction_accept_toast + left_icon = scope:recipient + consume_imprisonment_reasons = scope:puppet_or_actor + } + } + if = { + limit = { has_banish_reason = scope:puppet_or_actor } + send_interface_toast = { + title = ask_for_pardon_interaction_accept_toast + left_icon = scope:recipient + consume_banish_reasons = scope:puppet_or_actor + } + } + if = { + limit = { has_execute_reason = scope:puppet_or_actor } + send_interface_toast = { + title = ask_for_pardon_interaction_accept_toast + left_icon = scope:recipient + consume_execute_reasons = scope:puppet_or_actor + } + } + if = { + limit = { has_revoke_title_reason = scope:puppet_or_actor } + send_interface_toast = { + title = ask_for_pardon_interaction_accept_toast + left_icon = scope:recipient + consume_revoke_title_reason = scope:puppet_or_actor + } + } + } + stress_and_fulfillment_impact = { + stubborn = minor_stress_impact_gain + } + } + if = { + limit = { + always = scope:hook + scope:puppet_or_actor = { # TO make sure you still have a hook on them + has_usable_hook = scope:recipient + } + } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } + scope:puppet_or_actor = { + if = { + limit = { + tgp_is_any_minister = yes + } + if = { + limit = { + scope:recipient = { + OR = { + liege = { + has_extra_criminal_reason_against_trigger = { + CRIMINAL = scope:recipient + } + } + is_close_or_extended_family_of = scope:puppet_or_actor + } + } + } + change_strife_opinion = massive_strife_gain + if = { + limit = { + NOT = { scope:hook ?= yes } + } + situation:dynastic_cycle = { + trigger_situation_catalyst = { + catalyst = catalyst_minister_pardoned_dangerous_criminal + character = scope:puppet_or_actor + } + } + } + } + else = { + if = { + limit = { + government_has_flag = government_has_influence + } + change_influence = { + value = minor_influence_gain + multiply = scope:recipient.highest_held_title_tier + } + } + } + } + } +} + +revoke_title_interaction_effect = { + if = { + limit = { + scope:recipient = { + faith = scope:puppet_or_actor.faith + government_has_flag = government_is_theocracy + } + scope:puppet_or_actor != scope:puppet_or_actor.faith.religious_head + } + scope:puppet_or_actor = { + add_piety = major_piety_loss + } + if = { + limit = { + exists = scope:puppet_or_actor.faith.religious_head + } + scope:puppet_or_actor.faith.religious_head = { + add_opinion = { + target = scope:puppet_or_actor + modifier = impious_opinion + opinion = -20 + } + } + } + } + if = { + limit = { + exists = scope:puppet_or_actor.faith.religious_head + scope:recipient = scope:puppet_or_actor.faith.religious_head + } + scope:puppet_or_actor = { + add_piety_level = -2 + } + } + if = { + limit = { + scope:landed_title.tier != tier_barony + scope:recipient = { + NOT = { government_has_flag = government_is_herder } + } + } + scope:puppet_or_actor = { + revocation_tyranny_effect = { VASSAL = scope:recipient } + title_revocation_stress_effect = { VASSAL = scope:recipient } + consume_revoke_title_reason = scope:recipient + } + scope:recipient = { + if = { + limit = { + NOT = { exists = scope:administrative_revocation } + is_landed_or_landless_administrative = no + } + add_pressed_claim = scope:landed_title + } + if = { + limit = { + is_a_faction_member = yes + } + add_joined_faction_discontent = 25 + } + } + + if = { + limit = { scope:landed_title.tier = tier_county } + scope:landed_title = { + change_county_control = { + value = -30 + if = { + limit = { + scope:recipient.culture != scope:puppet_or_actor.culture + scope:recipient.culture = this.culture + } + multiply = 1.5 + } + if = { + limit = { + scope:recipient.faith != scope:puppet_or_actor.faith + scope:recipient.faith = this.faith + } + multiply = 1.5 + } + } + } + } + + if = { + limit = { + scope:puppet_or_actor.culture = { has_cultural_parameter = penalty_for_revoking_titles_from_house_members } + exists = scope:puppet_or_actor.house + exists = scope:recipient.house + scope:puppet_or_actor.house = scope:recipient.house + } + if = { + limit = { + scope:landed_title.tier = tier_county + } + scope:puppet_or_actor = { + add_prestige = medium_prestige_loss + } + } + else_if = { + limit = { + scope:landed_title.tier = tier_duchy + } + scope:puppet_or_actor = { + add_prestige = major_prestige_loss + } + } + else_if = { #Empire + limit = { + scope:landed_title.tier = tier_kingdom + } + scope:puppet_or_actor = { + add_prestige = massive_prestige_loss + } + } + } + + if = { + limit = { + scope:puppet_or_actor.culture = { has_cultural_parameter = penalty_for_revoking_titles_from_close_family } + exists = scope:puppet_or_actor + exists = scope:recipient + scope:puppet_or_actor = { + is_close_family_of = scope:recipient + } + } + if = { + limit = { + scope:landed_title.tier = tier_county + } + scope:puppet_or_actor = { + add_prestige = medium_prestige_loss + } + } + else_if = { + limit = { + scope:landed_title.tier = tier_duchy + } + scope:puppet_or_actor = { + add_prestige = major_prestige_loss + } + } + else_if = { #Empire + limit = { + scope:landed_title.tier = tier_kingdom + } + scope:puppet_or_actor = { + add_prestige = massive_prestige_loss + } + } + } + + if = { + limit = { + scope:puppet_or_actor.culture = { has_cultural_parameter = piety_penalty_for_revoking_titles_from_house_members } + exists = scope:puppet_or_actor.house + exists = scope:recipient.house + scope:puppet_or_actor.house = scope:recipient.house + } + if = { + limit = { + scope:landed_title.tier = tier_county + } + scope:puppet_or_actor = { + add_piety = medium_piety_loss + } + } + else_if = { + limit = { + scope:landed_title.tier = tier_duchy + } + scope:puppet_or_actor = { + add_piety = major_piety_loss + } + } + else = { #Can't revoke empire titles anyway + limit = { + scope:landed_title.tier = tier_kingdom + } + scope:puppet_or_actor = { + add_piety = massive_piety_loss + } + } + } + + # If we're a clan this interaction affects unity + if = { + limit = { + scope:puppet_or_actor = { government_has_flag = government_is_clan } + scope:recipient = { government_has_flag = government_is_clan } + exists = scope:puppet_or_actor.house + exists = scope:recipient.house + scope:puppet_or_actor.house = scope:recipient.house + scope:landed_title.tier >= tier_county + } + scope:puppet_or_actor.house = { + if = { + limit = { + scope:landed_title.tier = tier_county + } + save_scope_value_as = { + name = revoke_title_unity_loss + value = minor_unity_loss + } + } + if = { + limit = { + scope:landed_title.tier = tier_duchy + } + save_scope_value_as = { + name = revoke_title_unity_loss + value = medium_unity_loss + } + } + else_if = { + limit = { + scope:landed_title.tier = tier_kingdom + } + save_scope_value_as = { + name = revoke_title_unity_loss + value = major_unity_loss + } + } + if = { + limit = { exists = scope:revoke_title_unity_loss } + add_clan_unity_interaction_effect = { + CHARACTER = scope:puppet_or_actor + TARGET = scope:recipient + VALUE = scope:revoke_title_unity_loss + DESC = clan_unity_title_revoked.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + } + } + + # EP3 - Become Adventurer - Revocation + scope:recipient = { + if = { + limit = { + has_ep3_dlc_trigger = yes + is_valid_for_laampdom = yes + } + # Plus for our memory variable. + clear_saved_scope = lost_primary_title + primary_title = { save_scope_as = lost_primary_title } + custom_tooltip = { + text = laamp_may_become_adventurer_tt + trigger_event = { + id = ep3_laamps.0041 + delayed = yes + } + } + } + } + } + else = { + if = { + limit = { + NOT = { exists = scope:revoke_title_interaction } + } + custom_tooltip = IS_ALLOWED_TO_REVOKE_TITLE_BARONY_DESC + scope:puppet_or_actor = { + if = { + limit = { + any_vassal = { + vassal_stance = barons_and_minor_landholders + } + } + custom_tooltip = barons_and_minor_landholders_disapproves_baron_revocations + hidden_effect = { + every_vassal = { + vassal_stance = barons_and_minor_landholders + add_opinion = { + target = scope:puppet_or_actor + modifier = barons_and_minor_landholders_disapproves_baron_revocations_opinion + } + } + } + } + } + } + } + + + scope:puppet_or_actor = { + if = { + limit = { + scope:hook = yes + scope:recipient = { is_alive = yes } + } + use_hook = scope:recipient + } + if = { + limit = { + scope:hook_liege ?= yes + scope:intermediary ?= { is_alive = yes } + } + use_hook = scope:intermediary + } + } + if = { + limit = { + scope:recipient = { government_has_flag = government_is_herder } + } + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + opinion = -10 # Herders don't care much + modifier = revoked_title + } + } + } + else = { + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + modifier = revoked_title + } + if = { #If they recently imprisoned you, or asked for your excommunication, they become your rival + limit = { + OR = { + has_opinion_modifier = { + target = scope:puppet_or_actor + modifier = released_from_prison + } + AND = { + exists = var:requested_my_excommunication + var:requested_my_excommunication = scope:puppet_or_actor + } + } + NOT = { + has_relation_rival = scope:puppet_or_actor + } + } + if = { + limit = { + has_relation_potential_rival = scope:puppet_or_actor + } + remove_relation_potential_rival = scope:puppet_or_actor + } + set_relation_rival = { + target = scope:puppet_or_actor + reason = rival_revoked_title_reversed + } + } + else = { + progress_towards_rival_effect = { + CHARACTER = scope:puppet_or_actor + REASON = rival_revoked_title_progress + OPINION = 0 + } + } + # HOUSE RELATION + house ?= { + if = { + limit = { NOT = { this = scope:puppet_or_actor.house } } + change_house_relation_effect = { + HOUSE = scope:puppet_or_actor.house + VALUE = house_relation_damage_medium_value + REASON = title_revocation + CHAR = scope:puppet_or_actor + TARGET_CHAR = scope:recipient + TITLE = scope:landed_title + } + } + } + } + } + + # Penalty for taking the Party Baron's last title. I mean, come on... + if = { + limit = { + scope:recipient = { + has_character_flag = is_party_baron + NOT = { + any_held_title = { + this != scope:landed_title + } + } + } + } + scope:puppet_or_actor = { + add_character_modifier = { + modifier = party_baron_ended_the_party_modifier + years = 10 + } + random_owned_story = { + type = story_party_baron + end_story = yes + } + } + } +} + +call_house_member_to_war_interaction_effect = { + if = { + limit = { + exists = scope:target + } + + scope:target = { + hidden_effect = { + set_called_to = scope:recipient + } + if = { + limit = { + is_attacker = scope:puppet_or_actor + } + add_attacker = scope:recipient + } + else = { + add_defender = scope:recipient + } + } + } + + if = { + limit = { always = scope:hook } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } +} + +sun_trial_interaction_piety_effect = { + #Imprisoner gets piety + add_piety = { + value = minor_piety_value + if = { + limit = { has_execute_reason = scope:recipient } + add = minor_piety_value + } + if = { + limit = { has_banish_reason = scope:recipient } + add = miniscule_piety_value + } + if = { + limit = { has_revoke_title_reason = scope:recipient } + add = miniscule_piety_value + } + } +} + +declaration_of_repentance_interaction_effect = { + if = { + limit = { scope:declaration_hook = yes } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } + + scope:puppet_or_actor = { + if = { + limit = { + scope:declaration_hook = no + NOT = { rite ?= { rite_has_parameter = tenet_purgatory_absolution_costs_less_prestige } } + } + #Lose a ton of prestige (e.g., Henry's Walk to Canossa) + add_prestige = massive_prestige_loss + add_prestige_level = -1 + } + else_if = { + limit = { + scope:declaration_hook = no + } + add_prestige = major_prestige_loss + } + + #Character cannot be excommunicated again for 10 years. + remove_trait = excommunicated + clear_excommunication_tracking_effect = yes + add_character_modifier = { + modifier = excommunication_recently_lifted + years = 10 + } + + stress_and_fulfillment_impact = { + cynical = minor_stress_impact_gain + } + } + scope:recipient = { + add_prestige = major_prestige_gain + add_opinion = { + modifier = repentant_opinion + target = scope:puppet_or_actor + opinion = 10 + } + } + scope:puppet_or_actor = { + if = { + limit = { + any_character_situation = { + situation_type = the_christian_church + } + situation:the_christian_church ?= { + situation_top_has_catalyst = catalyst_declaration_of_repentance + } + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + situation:the_christian_church = { trigger_situation_catalyst = catalyst_declaration_of_repentance } + } + else = { + situation:the_christian_church = { trigger_situation_catalyst = catalyst_declaration_of_repentance_minor } + } + } + } +} + +seek_indulgences_interaction_effect = { + scope:actor = { + if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_kinslayer_3 # For the post-interaction letter event + AND = { + has_trait = kinslayer_3 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_3 GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_major_criminal_trait_value + } + remove_trait_force_tooltip = kinslayer_3 + add_character_flag = { + flag = seek_indulgences_removed_kinslayer_3 + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_kinslayer_2 # For the post-interaction letter event + AND = { + has_trait = kinslayer_2 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_2 GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_medium_criminal_trait_value + } + remove_trait_force_tooltip = kinslayer_2 + add_character_flag = { + flag = seek_indulgences_removed_kinslayer_2 + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_witch # For the post-interaction letter event + AND = { + has_trait = witch + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:witch GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_medium_criminal_trait_value + } + remove_trait_force_tooltip = witch + add_character_flag = { + flag = seek_indulgences_removed_witch + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_deviant # For the post-interaction letter event + AND = { + has_trait = deviant + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:deviant GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_medium_criminal_trait_value + } + remove_trait_force_tooltip = deviant + add_character_flag = { + flag = seek_indulgences_removed_deviant + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_sodomite # For the post-interaction letter event + AND = { + has_trait = sodomite + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:sodomite GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_medium_criminal_trait_value + } + remove_trait_force_tooltip = sodomite + add_character_flag = { + flag = seek_indulgences_removed_sodomite + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_kinslayer_1 # For the post-interaction letter event + AND = { + has_trait = kinslayer_1 + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:kinslayer_1 GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_minor_criminal_trait_value + } + remove_trait_force_tooltip = kinslayer_1 + add_character_flag = { + flag = seek_indulgences_removed_kinslayer_1 + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_adulterer # For the post-interaction letter event + AND = { + has_trait = adulterer + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:adulterer GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_minor_criminal_trait_value + } + remove_trait_force_tooltip = adulterer + add_character_flag = { + flag = seek_indulgences_removed_adulterer + days = 30 + } + } + else_if = { + limit = { + OR = { + has_character_flag = seek_indulgences_removed_fornicator # For the post-interaction letter event + AND = { + has_trait = fornicator + trait_is_shunned_or_criminal_in_rite_trigger = { RITE = rite TRAIT = trait:fornicator GENDER_CHARACTER = scope:actor } + } + } + } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_minor_criminal_trait_value + } + remove_trait_force_tooltip = fornicator + add_character_flag = { + flag = seek_indulgences_removed_fornicator + days = 30 + } + } + else_if = { + limit = { has_trait = gallowsbait } + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_minor_criminal_trait_value + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = -40 + } + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + add_trait_xp = { + trait = gallowsbait + track = trickster + value = -40 + } + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = thief + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + add_trait_xp = { + trait = gallowsbait + track = thief + value = -40 + } + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + add_trait_xp = { + trait = gallowsbait + track = poacher + value = -40 + } + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= wipe_slate_min_xp_to_remove_trait_value + } + } + add_trait_xp = { + trait = gallowsbait + track = marauder + value = -40 + } + } + else = { remove_trait = gallowsbait } + } + if = { + limit = { + scope:recipient = { + pam_antipope_is_sponsored_by_trigger = { SPONSOR = scope:actor } + } + } + send_interface_message = { + title = petition_antipope_indulgences_interaction_title + right_icon = scope:recipient + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_antipope_buy_piety_value + } + add_piety = { + value = medium_piety_gain + if = { # More Piety during the Saeculum Obscurum phase + limit = { + situation:the_christian_church ?= { + has_situation_top_phase_parameter = the_christian_church_better_indulgences + } + } + add = medium_piety_gain + } + } + } + } + else = { + pay_treasury_or_gold = { + target = scope:recipient + value = seek_indulgences_buy_piety_value + } + add_piety = { + value = medium_piety_gain + if = { # More Piety during the Saeculum Obscurum phase + limit = { + situation:the_christian_church ?= { + has_situation_top_phase_parameter = the_christian_church_better_indulgences + } + } + add = medium_piety_gain + } + } + } + change_spiritual_fulfillment = major_spiritual_fulfillment_value + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + reverse_add_opinion = { + target = scope:recipient + modifier = pleased_opinion + opinion = 25 + } + } + stress_and_fulfillment_impact = { + greedy = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + } + scope:actor = { + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + + add_character_modifier = { + modifier = pam_granted_indulgences_modifier_small + years = 5 + desc = granted_indulgences_effect_tt + } + custom_tooltip = granted_indulgences_ai_personality_effect_tt + custom_tooltip = granted_indulgences_ai_war_effect_tt + custom_tooltip = granted_indulgences_ai_scheme_effect_tt + } + else = { + add_character_modifier = { + modifier = pam_granted_indulgences_modifier_small + years = 5 + desc = granted_indulgences_player_scheme_effect_tt + } + custom_tooltip = granted_indulgences_player_scheme_effect_tt + } + } + else = { + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = pam_granted_indulgences_modifier + years = 10 + desc = granted_indulgences_effect_tt + } + custom_tooltip = granted_indulgences_ai_personality_effect_tt + custom_tooltip = granted_indulgences_ai_war_effect_tt + custom_tooltip = granted_indulgences_ai_scheme_effect_tt + } + else = { + add_character_modifier = { + modifier = pam_granted_indulgences_modifier + years = 10 + desc = granted_indulgences_player_scheme_effect_tt + } + custom_tooltip = granted_indulgences_player_scheme_effect_tt + } + } + } + if = { + limit = { + scope:actor = { + any_character_situation = { + situation_type = the_christian_church + } + } + situation:the_christian_church ?= { + situation_top_has_catalyst = catalyst_seek_indulgences + } + } + if = { + limit = { + scope:actor = { + highest_held_title_tier >= tier_kingdom + } + } + situation:the_christian_church = { trigger_situation_catalyst = catalyst_seek_indulgences } + } + else = { + situation:the_christian_church = { trigger_situation_catalyst = catalyst_seek_indulgences_minor } + } + } +} + +hof_ask_for_gold_interaction_effect = { + scope:recipient = { + if = { + limit = { + has_treasury = yes + } + if = { + limit = { + scope:actor = { + government_has_flag = government_is_theocracy + } + } + # Theocrats receiving Treasury should should get it as Treasury (it's still church money) + pay_treasury_or_gold = { + target = scope:actor + value = hof_ask_for_gold_request_value + } + } + else = { + # Non-Theocrats receiving Treasury should should receive it as Gold, even if they have Treasury (ex: Admin) + pay_treasury_to_gold = { + target = scope:actor + value = hof_ask_for_gold_request_value + } + } + } + else = { + # Gold sent is always received as Gold (it is not "church money" as a concept) + pay_short_term_gold = { + target = scope:actor + gold = hof_ask_for_gold_request_value + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:actor + modifier = requested_money_opinion + opinion = -20 + } + } + if = { + limit = { + trigger_if = { + limit = { + is_ai = yes + } + OR = { + ai_honor < 0 + ai_zeal < low_negative_ai_value + } + } + intrigue > high_skill_rating + NOT = { + any_hooked_character = { + this = scope:actor + } + } + } + add_hook = { + type = favor_hook + target = scope:actor + } + custom_tooltip = ask_for_gold_hook_tt + add_piety = { + value = miniscule_piety_gain + multiply = scope:actor.highest_held_title_tier + } + } + else = { + add_piety = { + value = minor_piety_gain + multiply = scope:actor.highest_held_title_tier + } + } + } + scope:actor = { + if = { + limit = { + scope:hook = no + } + add_piety = major_piety_loss + } + if = { + limit = { always = scope:hook } + use_hook = scope:recipient + } + if = { + limit = { + any_vassal = { + vassal_stance = zealot + } + } + custom_tooltip = zealot_vassal_disapproves_asking_hof_for_gold + hidden_effect = { + every_vassal = { + vassal_stance = zealot + add_opinion = { + target = scope:actor + modifier = zealot_disapproves_of_asking_hof_for_gold_opinion + } + } + } + } + if = { + limit = { + scope:actor = { + is_landed = yes + } + situation:the_christian_church ?= { + situation_participant_group:christian_regular_main_power_rulers = { + participant_group_has_character = scope:actor + } + OR = { + situation_current_phase = reform_phase + situation_current_phase = concord_phase + } + } + } + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_modifier_small + years = 5 + desc = ask_for_gold_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_modifier_ai_behavior_tt + } + add_character_modifier = { + modifier = ask_for_gold_modifier_small + years = 5 + } + } + else = { + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_modifier + years = 10 + desc = ask_for_gold_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_modifier_ai_behavior_tt + } + else = { + add_character_modifier = { + modifier = ask_for_gold_modifier + years = 10 + } + } + } + custom_tooltip = modifier_provided_by_christian_situation_tt + } + if = { + limit = { + situation:the_christian_church ?= { + situation_participant_group:christian_regular_main_power_rulers = { + participant_group_has_character = scope:actor + } + OR = { + situation_current_phase = crusade_phase + situation_current_phase = conversion_phase + } + } + } + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_zeal_modifier_small + years = 5 + desc = ask_for_gold_zeal_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_zeal_modifier_ai_behavior_tt + } + add_character_modifier = { + modifier = ask_for_gold_zeal_modifier_small + years = 5 + } + } + else = { + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_zeal_modifier + years = 10 + desc = ask_for_gold_zeal_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_zeal_modifier_ai_behavior_tt + } + else = { + add_character_modifier = { + modifier = ask_for_gold_zeal_modifier + years = 10 + } + } + } + custom_tooltip = modifier_provided_by_christian_situation_tt + } + if = { + limit = { + situation:the_christian_church ?= { + situation_participant_group:christian_regular_main_power_rulers = { + participant_group_has_character = scope:actor + } + OR = { + situation_current_phase = fragile_unity_phase + situation_current_phase = saeculum_obscurum_phase + situation_current_phase = investiture_crisis_phase + } + } + } + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_crisis_modifier_small + years = 5 + desc = ask_for_gold_crisis_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_crisis_modifier_ai_behavior_tt + } + add_character_modifier = { + modifier = ask_for_gold_crisis_modifier_small + years = 5 + } + } + else = { + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_character_modifier = { + modifier = ask_for_gold_crisis_modifier + years = 10 + desc = ask_for_gold_crisis_modifier_ai_behavior_tt + } + custom_tooltip = ask_for_gold_crisis_modifier_ai_behavior_tt + } + else = { + add_character_modifier = { + modifier = ask_for_gold_crisis_modifier + years = 10 + } + } + } + custom_tooltip = modifier_provided_by_christian_situation_tt + } + if = { + limit = { + government_is_religious_trigger = no + any_character_situation = { + situation_type = the_christian_church + } + situation:the_christian_church ?= { + situation_top_has_catalyst = catalyst_ask_for_gold + } + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + situation:the_christian_church = { trigger_situation_catalyst = catalyst_ask_for_gold } + } + else = { + situation:the_christian_church = { trigger_situation_catalyst = catalyst_ask_for_gold_minor } + } + } + } +} + +hof_ask_for_gold_refusal_effect = { + clerical_interaction_refusal_major_effect = yes +} + +hof_ask_for_claim_interaction_effect = { + scope:secondary_recipient = { + add_opinion = { + target = scope:actor + modifier = claimed_my_title_opinion + opinion = -60 + } + } + scope:actor = { + add_piety = { + value = claim_piety_value + multiply = -1 + } + if = { + limit = { always = scope:claim_hook } + use_hook = scope:recipient + } + add_pressed_claim = scope:target + } +} + +vassal_claim_liege_title_interaction_effect = { + scope:puppet_or_actor = { + add_unpressed_claim = scope:target + } + scope:recipient = { + add_opinion = { + target = scope:puppet_or_actor + modifier = claimed_my_title_opinion + opinion = -50 + } + } +} + +convert_at_war_interaction_effect = { + scope:puppet_or_actor = { + save_scope_as = convert_at_war + every_character_war = { + limit = { + primary_defender = scope:puppet_or_actor + primary_attacker = scope:recipient + using_non_ghw_holy_war_cb_trigger = yes + } + set_variable = { + name = invalidate_defender_faith_change #This variable will invalidate the war and send proper invalidation message + value = yes + } + show_as_tooltip = { end_war = invalidated } + } + + faith = { save_scope_as = old_faith } + rite = { save_scope_as = old_rite } + + if = { + limit = { + NOT = { rite = scope:recipient.rite } + } + convert_to_rite_with_consequences_effect = { RITE = scope:recipient.rite } + trigger_event = faith_conversion.0003 + } + + stress_and_fulfillment_impact = { + zealous = medium_stress_impact_gain + } + } + scope:recipient = { + add_piety_experience = major_piety_value + } +} + +demand_conversion_vassal_ruler_interaction_effect = { + demand_conversion_interaction_effect = yes + hidden_effect = { + if = { + limit = { + exists = scope:recipient.capital_county + scope:recipient.capital_county.faith = scope:recipient.faith + } + save_scope_value_as = { + name = convert_capital + value = yes + } + } + } + if = { + limit = { + exists = scope:hook + scope:hook = yes + scope:puppet_or_actor = { has_usable_hook = scope:recipient } + } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } + #Negative opinions + scope:recipient = { + add_opinion = { + modifier = demanded_my_conversion_opinion + target = scope:puppet_or_actor + opinion = -10 + } + } +} + +demand_conversion_player_ruler_interaction_effect = { + demand_conversion_interaction_effect = yes + + if = { + limit = { + scope:demand_conversion_hook = yes + } + scope:puppet_or_actor = { + use_hook = scope:recipient + } + } +} + +title_revocation_stress_effect = { + if = { + limit = { + title_revocation_is_tyrannical_trigger = { VASSAL = $VASSAL$ } + } + stress_and_fulfillment_impact = { + generous = medium_stress_impact_gain + just = medium_stress_impact_gain + } + } + else_if = { + limit = { + NOT = { has_revoke_title_reason = $VASSAL$ } + } + stress_and_fulfillment_impact = { + generous = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } + else = { + # No stress gain if you have a reason + } +} + +revoke_holy_order_lease_effect = { + $TARGET$ = { + faith = { + random_faith_holy_order = { + limit = { + leader = $TARGET$ + } + save_scope_as = holy_order + } + } + primary_title = { + save_scope_as = holy_order_title + } + } + + if = { + limit = { + scope:holy_order = { + num_leased_titles = 1 + title = $BARONY$.lessee_title + } + } + custom_tooltip = destroy_holy_order_warning + } + + $TARGET$ = { + hidden_effect = { #Nudge towards rivalry + if = { + limit = { + NOR = { + has_relation_rival = $CHARACTER$ + has_relation_potential_rival = $CHARACTER$ + } + } + set_relation_potential_rival = $CHARACTER$ + } + } + + if = { + limit = { + NOT = { this = $CHARACTER$ } + } + add_opinion = { + target = $CHARACTER$ + modifier = revoked_order_lease_opinion + opinion = -50 + } + } + + if = { + limit = { + $TARGET$.rite.head_of_rite ?= { + NOR = { + this = $TARGET$ + this = $CHARACTER$ + this = faith.religious_head + } + } + } + $TARGET$.rite.head_of_rite ?= { + add_opinion = { + modifier = revoked_order_lease_opinion + target = $CHARACTER$ + opinion = -30 + } + } + } + + faith = { + if = { + limit = { + exists = religious_head + NOT = { religious_head = $CHARACTER$ } + } + religious_head = { + if = { + limit = { + rite = $TARGET$.rite + } + add_opinion = { + modifier = revoked_order_lease_opinion + target = $CHARACTER$ + opinion = -30 + } + } + + #military order opinion gets lost + if = { + limit = { + has_opinion_modifier = { + target = $CHARACTER$ + modifier = founded_holy_order_opinion + } + $TARGET$ = { + government_has_flag = government_is_military_holy_order + } + } + remove_opinion = { + target = $CHARACTER$ + modifier = founded_holy_order_opinion + } + } + #monastic order opinion gets lost + if = { + limit = { + has_opinion_modifier = { + target = $CHARACTER$ + modifier = founded_monastic_order_opinion + } + $TARGET$ = { + government_has_flag = government_is_monastic_holy_order + } + } + remove_opinion = { + target = $CHARACTER$ + modifier = founded_monastic_order_opinion + } + } + } + } + } + } + + $CHARACTER$ = { + send_interface_message = { + type = holy_order_lease_revoked_message + title = revoke_leased_title_interaction_notification + right_icon = $TARGET$ + + + $BARONY$ = { + save_scope_as = barony + county = { + #Scaled development loss based on level of holding + change_development_level = revoking_lease_development_cost + } + } + + # Zealous costs stress if same-faith. + if = { + limit = { $CHARACTER$.faith = $TARGET$.faith } + if = { + limit = { + has_personal_tenet_flag = leasing_to_military_order_give_spiritual_fulfillment_personal + } + change_spiritual_fulfillment = major_spiritual_fulfillment_loss + } + stress_and_fulfillment_impact = { + zealous = massive_stress_impact_gain + generous = medium_stress_impact_gain + order_member = minor_stress_impact_gain + } + + # if called from interaction or decision, use cost for better visibility + if = { + limit = { NOT = { exists = scope:cost_paid } } + add_piety = { + value = 0 + subtract = cancel_holy_order_piety_cost + } + } + # No spiritual fulfillment loss if the order's rite is heretical to the revoker + if = { + limit = { + trigger_if = { + limit = { + exists = $CHARACTER$.rite + exists = $TARGET$.rite + } + $TARGET$.rite = { + save_temporary_scope_as = revoked_order_rite + } + $CHARACTER$.rite = { + "divergence(scope:revoked_order_rite)" < faith.heresy_threshold + } + } + } + change_spiritual_fulfillment = massive_spiritual_fulfillment_loss + } + } + else_if = { + # Bit less but still some if you view the other faith as astray. + limit = { + $CHARACTER$.faith = { + faith_hostility_level = { + target = $TARGET$.faith + value <= faith_astray_level + } + } + } + change_spiritual_fulfillment = medium_spiritual_fulfillment_loss + stress_and_fulfillment_impact = { + zealous = major_stress_impact_gain + generous = medium_stress_impact_gain + } + # if called from interaction or decision, use cost for better visibility + if = { + limit = { NOT = { exists = scope:cost_paid } } + add_piety = { + value = 0 + subtract = cancel_astray_holy_order_piety_cost + } + } + } + else = { + if = { + limit = { exists = $CHARACTER$.faith.religious_head } + $CHARACTER$.faith.religious_head = { + add_opinion = { + modifier = pleased_opinion + target = $CHARACTER$ + opinion = 20 + } + } + } + + add_piety = { + value = 250 + } + $TARGET$.faith = { + save_scope_as = target_faith + } + $TARGET$ = { + custom_tooltip = { + text = lease_loss_fervor_gain_tt + scope:target_faith = { + # Fires once per revoked lease with no cooldown, so it has to stay small. + change_fervor = { + value = small_fervor_gain + desc = fervor_gain_holy_order_expelled_by_force + } + } + } + } + + # If the county has the same faith than the HO, locals are unhappy + $BARONY$ = { + if = { + limit = { title_province.county.faith = $TARGET$.faith } + title_province.county = { + add_county_modifier = { + modifier = lost_holy_order_modifier + years = 10 + } + } + } + } + } + if = { + limit = { + $BARONY$.county.holder = { + NOT = { + this = $CHARACTER$ + } + faith = $TARGET$.faith + trigger_if = { + limit = { + exists = rite + exists = $TARGET$.rite + } + $TARGET$.rite = { + save_temporary_scope_as = revoked_order_rite + } + rite = { + "divergence(scope:revoked_order_rite)" < faith.heresy_threshold + } + } + this = scope:holy_order.holy_order_patron + } + } + $BARONY$.county.holder = { + add_opinion = { + modifier = revoked_order_lease_opinion + target = $CHARACTER$ + opinion = -40 + } + } + } + } + } + # revoke_lease clears $BARONY$.lessee, so it must run after all $TARGET$ (= scope:barony.lessee) checks above. + $BARONY$ = { + revoke_lease = yes + } +} + +revoke_holy_order_duel_victor_apply_effects_effect = { + scope:sc_victor = { + add_stress = major_stress_loss + add_prestige = major_prestige_gain + } +} + +add_clan_unity_interaction_effect = { + if = { + limit = { # Check if unity is relevant + $CHARACTER$ = { government_has_flag = government_is_clan } + $TARGET$ = { government_has_flag = government_is_clan } + exists = $CHARACTER$.house + exists = $TARGET$.house + $CHARACTER$.house = $TARGET$.house + trigger_if = { + limit = { + exists = scope:actor + exists = scope:recipient + scope:actor != scope:recipient + } + NOT = { $CHARACTER$ = $TARGET$ } # As a safety, let's make sure that we are not interacting with ourselves + } + } + + apply_clan_unity_interaction_effect = { + CHARACTER = $CHARACTER$ + TARGET = $TARGET$ + DESC = $DESC$ + VALUE = $VALUE$ + VALUE_REVERSED = no + } + } + else_if = { + limit = { # Only apply reversed effect for the house head to keep the gauge in check + $REVERSE_NON_HOUSE_TARGET$ = yes + + $CHARACTER$ = { government_has_flag = government_is_clan } + $CHARACTER$.house ?= { + house_head = $CHARACTER$ + } + OR = { + AND = { + exists = $TARGET$.house + NOT = { $CHARACTER$.house = $TARGET$.house } + } + $TARGET$ = { is_lowborn = yes } + } + } + apply_clan_unity_interaction_effect = { + CHARACTER = $CHARACTER$ + TARGET = $TARGET$ + DESC = $DESC$ + VALUE = $VALUE$ + VALUE_REVERSED = yes + } + } +} + +apply_clan_unity_interaction_effect = { + # Save scopes for localisation + $CHARACTER$ = { save_scope_as = unity_character } + $TARGET$ = { save_scope_as = unity_target } + + $CHARACTER$.house = { + save_scope_as = character_house + + add_unity_value = { + value = { + value = $VALUE$ + if = { # House heads have a larger impact on unity + limit = { house_head = $CHARACTER$ } + multiply = unity_house_head_multiplier_value + } + if = { + limit = { $VALUE_REVERSED$ = yes } + multiply = -1 + } + } + character = $CHARACTER$ + desc = $DESC$ + } + } + + # Notify human players if they are not involved! + if = { + limit = { + trigger_if = { + limit = { $VALUE$ >= 0 } + $VALUE$ >= major_unity_value + } + trigger_else = { + $VALUE$ <= major_unity_value + } + } + # Notify human players if they are not involved! + notify_players_about_unity_change_effect = { + CHARACTER = $CHARACTER$ + TARGET = $TARGET$ + DESC = $DESC$ + } + } +} + +diarch_declare_recipient_criminal_effect = { + scope:actor = { + # First we process the diarch. + ## Players get a different tooltip, since they don't want to see opinion. + if = { + limit = { is_ai = no } + custom_tooltip = diarch_imprison_reason_for_player.tt + hidden_effect = { + add_opinion = { + target = scope:recipient + modifier = treasonous_disobeyed_diarch + } + } + } + ## AI use the standard opinion flow. + else = { + add_opinion = { + target = scope:recipient + modifier = treasonous_disobeyed_diarch + } + } + # Then their liege. + liege = { + # Same flow: players get a different tooltip so that they don't see opinion. + if = { + limit = { is_ai = no } + custom_tooltip = ADD_OPINION_EFFECT_I_HAVE_IMPRISONMENT_REASON_UNUSABLE + hidden_effect = { + add_opinion = { + target = scope:recipient + modifier = treasonous_disobeyed_diarch + } + } + } + # But AI just get opinion. + else = { + add_opinion = { + target = scope:recipient + modifier = treasonous_disobeyed_diarch + } + } + } + } +} + +diarch_declare_claim_war_effect = { + start_war = { + casus_belli = claim_cb + target = scope:recipient + claimant = scope:actor + target_title = scope:landed_title + } +} + +diarch_declare_vassalisation_war_effect = { + start_war = { + casus_belli = diarch_vassalisation_cb + target = scope:recipient + target_title = scope:secondary_recipient.primary_title + } +} + +make_criminal_effect = { + random_list = { + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:adulterer + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = adulterer } + } + add_trait = adulterer + } + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:kinslayer_3 + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = kinslayer_3 } + } + add_trait = kinslayer_3 + } + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:witch + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = witch } + } + add_trait = witch + } + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:cannibal + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = cannibal } + } + add_trait = cannibal + } + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:deviant + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = deviant } + } + add_trait = deviant + } + 10 = { + trigger = { + trait_is_criminal_in_rite_trigger = { + TRAIT = trait:fornicator + GENDER_CHARACTER = root + RITE = root.rite + } + NOT = { has_trait = fornicator } + } + add_trait = fornicator + } + } +} + +clear_hostile_actions_lock_flag_effect = { + if = { + limit = { has_character_flag = flag_hostile_actions_disabled_delay } + remove_character_flag = flag_hostile_actions_disabled_delay + } +} + +ep3_hof_ask_for_influence_interaction_effect = { + scope:actor = { + if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_6 + } + } + change_influence = ep3_requested_faith_support_6_value + custom_tooltip = requested_faith_support_domicile_tt + } + else_if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_5 + } + } + change_influence = ep3_requested_faith_support_5_value + custom_tooltip = requested_faith_support_domicile_tt + } + else_if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_4 + } + } + change_influence = ep3_requested_faith_support_4_value + custom_tooltip = requested_faith_support_domicile_tt + } + else_if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_3 + } + } + change_influence = ep3_requested_faith_support_3_value + custom_tooltip = requested_faith_support_domicile_tt + } + else_if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_2 + } + } + change_influence = ep3_requested_faith_support_2_value + custom_tooltip = requested_faith_support_domicile_tt + } + else_if = { + limit = { + domicile ?= { + has_domicile_parameter = influence_gain_from_hof_support_1 + } + } + change_influence = ep3_requested_faith_support_1_value + custom_tooltip = requested_faith_support_domicile_tt + } + else = { + change_influence = ep3_requested_faith_support_0_value + } + house = { + if = { + limit = { + scope:recipient = { + is_ai = no + } + } + add_house_modifier = { + modifier = ep3_requested_faith_support_modifier + years = 10 + desc = cleric_influence_behavior_tt + } + } + else = { + add_house_modifier = { + modifier = ep3_requested_faith_support_modifier_small + years = 10 + desc = cleric_influence_behavior_tt + } + } + + custom_tooltip = cleric_influence_behavior_tt + } + if = { + limit = { + scope:recipient = { + is_ai = yes + } + } + reverse_add_opinion = { + target = scope:recipient + modifier = requested_influence_opinion + opinion = -30 + } + } + } + scope:actor = { + if = { + limit = { + scope:hook = no + } + add_piety = massive_piety_loss + } + if = { + limit = { always = scope:hook } + use_hook = scope:recipient + } + if = { + limit = { + situation:the_christian_church ?= { + situation_participant_group:christian_regular_main_power_rulers = { + participant_group_has_character = scope:actor + } + situation_top_has_catalyst = catalyst_ask_for_influence + } + } + situation:the_christian_church = { trigger_situation_catalyst = catalyst_ask_for_influence } + } + if = { + limit = { + scope:actor = { + is_ai = yes + } + } + add_opinion = { + target = scope:recipient + modifier = helpful_opinion + opinion = 50 + } + } + top_liege = { + every_vassal_or_below = { + custom = custom.every_non_actor_house_vassal + limit = { + NOR = { + house ?= scope:actor.house + this = scope:recipient + } + } + add_opinion = { + target = scope:recipient + modifier = church_favoring_another_house_opinion + opinion = -25 + } + } + } + house ?= { + set_variable = { + name = cleric_support + value = scope:recipient + years = 10 + } + } + } + scope:recipient = { + if = { + limit = { exists = scope:actor.house } + custom_tooltip = clerical_influence_investment_bonus_tt + add_to_variable_list = { + name = cleric_houses_support + target = scope:actor.house + years = 10 + } + } + + if = { + limit = { + trigger_if = { + limit = { + is_ai = yes + } + OR = { + ai_honor < 0 + ai_zeal < low_negative_ai_value + } + } + intrigue > decent_skill_rating + NOT = { + any_hooked_character = { + this = scope:actor + } + } + } + add_hook = { + type = favor_hook + target = scope:actor + } + custom_tooltip = ask_for_gold_hook_tt + } + if = { + limit = { + scope:actor = { + OR = { + AND = { + is_independent_ruler = yes + highest_held_title_tier >= tier_kingdom + } + house = { is_dominant_family = yes } + } + } + } + add_character_modifier = { + modifier = strong_clerical_influence_cleric_modifier + years = 10 + } + } + else_if = { + limit = { + scope:actor.house = { + is_powerful_family = yes + } + } + add_character_modifier = { + modifier = clerical_influence_cleric_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = weak_clerical_influence_cleric_modifier + years = 10 + } + } + if = { + limit = { + is_ai = no + } + custom_tooltip = 3_family_support_warning_tt + } + } +} + +torture_memory_effect = { + $VICTIM$ = { + create_character_memory = { + type = tortured_memory + participants = { torturer = $TORTURER$ } + } + ordered_memory = { + memory_type = tortured_memory + limit = { + any_memory_participant = { this = $TORTURER$ } + } + order_by = memory_creation_date + save_scope_as = tortured_memory + set_variable = { + name = type + value = flag:$TYPE$ + } + } + } + $TORTURER$ = { + create_character_memory = { + type = torturer_memory + participants = { victim = $VICTIM$ } + } + ordered_memory = { + memory_type = torturer_memory + limit = { + any_memory_participant = { this = $VICTIM$ } + } + order_by = memory_creation_date + save_scope_as = torturer_memory + set_variable = { + name = type + value = flag:$TYPE$ + } + } + } +} + +ai_religious_request_blocker_effect = { + scope:recipient = { + if = { + limit = { # AI is requesting from a Player - we don't restrict AI-to-AI + is_ai = no + scope:puppet_or_actor = { is_ai = yes } + } + # A player Head of Faith receives this at most once every three years, whatever the asker's tier + add_character_flag = { flag = $INTERACTION$_received_cooldown years = 3 } + # Not a switch, because unlisted tiers made the blocker always pass and barred emperors + if = { + limit = { scope:puppet_or_actor = { highest_held_title_tier >= tier_kingdom } } + scope:puppet_or_actor = { add_character_flag = { flag = hof_request_cooldown years = 1 } } + } + else_if = { + limit = { scope:puppet_or_actor = { highest_held_title_tier = tier_duchy } } + scope:puppet_or_actor = { add_character_flag = { flag = hof_request_cooldown years = 2 } } + } + else = { + scope:puppet_or_actor = { add_character_flag = { flag = hof_request_cooldown years = 4 } } + } + } + } +}