CK3 DatabaseCrusader Kings III · 1.20.1.2 “Crozier” · unofficial
Silk & Silverout Tue, Nov 17What's free, what needs the DLC, price →

Interaction · Friendly actions

Grant Pardon

variesInfluencevariesTreasuryAccepted automatically

You consider the recipient to be a Criminal (…), allowing you to Imprison them at any time without gaining Tyranny. If you would prefer that they remain free, you can choose to pardon them. This will remove any and all reasons you have to Imprison them and increase their Opinion of you.

What you need

You

To send it

  • In some cases (on a condition the game doesn't show) › You:
    • influence >= pardon_interaction_influence_cost_value
  • In some cases (on a condition the game doesn't show) › You:
    • treasury >= pardon_interaction_treasury_cost_value

To see it in the menu

  • If played by the AI:
  • One of these

    • has_imprisonment_reason = scope:recipient
    • or

      All of these

      • Holds Ministry of Justice
      • The character you target › Any liege or above:
        • has_imprisonment_reason = scope:recipient

The character you target

  • One of these

    • You:
      • Holds Ministry of Justice
      • top_liege ?= scope:recipient.top_liege
    • or

      Is a vassal (or below) of you

Grant Pardon is a friendly character interaction in Crusader Kings III. Accepted automatically. It costs Influence (varies), Treasury (varies). Patch 1.20.1.2, from game/common/character_interactions/00_vassal_interactions.txt.

for a guide, post or blog
Quick answers (2)
Will the AI accept Grant Pardon?
Yes: it is accepted automatically.
How much does Grant Pardon cost?
Influence (varies), Treasury (varies) (patch 1.20.1.2).

Will they accept?

The other character has no choice: the game accepts it automatically.

What happens

Effects

  • In some cases (on a condition the game doesn't show) › You:
    • If pardon interaction influence cost more than 0:
      • change_influence = { … }
    • If pardon interaction treasury cost more than 0:
      • remove_treasury = { … }
  • If

    Then

    • You:
    • The character you target:
      • If

        • One of these

          • The target’s liege:
            • One of these

              • has_banish_reason = scope:recipient
              • or

                has_execute_reason = scope:recipient
              • or

                has_revoke_title_reason = scope:recipient
          • or

            Is family of you

        Then

      • The target’s liege:
        • If

          • has_imprisonment_reason = scope:recipient

          Then

          • consume_imprisonment_reasons = scope:recipient
        • If

          • has_banish_reason = scope:recipient

          Then

          • consume_banish_reasons = scope:recipient
        • If

          • has_execute_reason = scope:recipient

          Then

          • consume_execute_reasons = scope:recipient
        • If

          • has_revoke_title_reason = scope:recipient

          Then

          • consume_revoke_title_reason = scope:recipient

    Otherwise

    • The character you target › You:
      • If

        • has_imprisonment_reason = scope:recipient

        Then

        • consume_imprisonment_reasons = scope:recipient
      • If

        • has_banish_reason = scope:recipient

        Then

        • consume_banish_reasons = scope:recipient
      • If

        • has_execute_reason = scope:recipient

        Then

        • consume_execute_reasons = scope:recipient
      • If

        • has_revoke_title_reason = scope:recipient

        Then

        • consume_revoke_title_reason = scope:recipient
  • Stress and fulfillment impact: by trait: Forgiving -20
  • If

    Then

  • The character you target:
    • If

      Then

      • Opinion: Loyal Servant
      • You:
        • If

          • can_add_hook = { target = scope:recipient type = loyalty_hook }

          Then

      Otherwise

      • Opinion: Grateful (+15)
  • If

    • You: Government is Clan
    • The character you target: Government is Clan
    • Your house is the target’s
    • If

      • You are not the target

      Then

      • You are not the target

    Then

    • Your house:
      • add_unity_value = { … }

    Else if

    • No
    • You: Government is Clan
    • Your house: Has you as house head
    • One of these

      • All of these

        • exists = scope:recipient.house
        • Your house is not the target’s
      • or

        The character you target: Is Lowborn

    Then

    • Your house:
      • add_unity_value = { … }

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

Who can use it and sees it (is_available, is_shown) (33 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	OR = {
		ai_vengefulness <= 0
		culture ?= {
			has_cultural_parameter = pardoning_gives_loyalty
		}
	}
}
is_shown = scope:puppet_or_actor ?= {
	OR = {
		has_imprisonment_reason = scope:recipient
		AND = {
			has_title = title:e_minister_of_justice
			scope:recipient = {
				any_liege_or_above = {
					has_imprisonment_reason = scope:recipient
				}
			}
		}
	}
}
scope:recipient = {
	OR = {
		scope:puppet_or_actor ?= {
			has_title = title:e_minister_of_justice
			top_liege ?= scope:recipient.top_liege
		}
		target_is_liege_or_above = scope:puppet_or_actor
	}
}

As written in game/common/character_interactions/00_vassal_interactions.txt.

Can be sent when (is_valid…) (16 lines of game script)
trigger_if = {
	limit = {
		scope:is_puppet_action ?= yes
	}
	scope:puppet_or_actor = {
		influence >= pardon_interaction_influence_cost_value
	}
}
trigger_if = {
	limit = {
		scope:is_puppet_action ?= yes
	}
	scope:puppet_or_actor = {
		treasury >= pardon_interaction_treasury_cost_value
	}
}

As written in game/common/character_interactions/00_vassal_interactions.txt.

Effects (on_send, on_accept, on_decline) (222 lines of game script)
on_accept = if = {
	limit = {
		scope:is_puppet_action ?= yes
	}
	scope:puppet_or_actor = {
		if = {
			limit = {
				pardon_interaction_influence_cost_value > 0
			}
			change_influence = {
				value = {
					add = pardon_interaction_influence_cost_value
					max = influence
					multiply = -1
				}
			}
		}
		if = {
			limit = {
				pardon_interaction_treasury_cost_value > 0
			}
			remove_treasury = {
				value = {
					add = pardon_interaction_treasury_cost_value
				}
			}
		}
	}
}
if = {
	limit = {
		scope:puppet_or_actor = {
			has_title = title:e_minister_of_justice
		}
	}
	scope:puppet_or_actor = {
		add_merit_if_relevant_effect = {
			MERIT = minor_merit_value
		}
		if = {
			limit = {
				government_has_flag = government_has_influence
			}
			change_influence = {
				value = minor_influence_gain
				multiply = scope:recipient.highest_held_title_tier
			}
		}
	}
	scope:recipient = {
		send_interface_toast = {
			type = event_toast_effect_neutral
			title = pardon_interaction_toast_title
			desc = pardon_interaction_toast_minister
			right_icon = scope:puppet_or_actor
			if = {
				limit = {
					OR = {
						scope:recipient.liege = {
							has_extra_criminal_reason_against_trigger = {
								CRIMINAL = scope:recipient
							}
						}
						is_close_or_extended_family_of = scope:puppet_or_actor
					}
				}
				scope:puppet_or_actor = {
					change_strife_opinion = massive_strife_gain
					situation:dynastic_cycle = {
						trigger_situation_catalyst = {
							catalyst = catalyst_minister_pardoned_dangerous_criminal
							character = scope:puppet_or_actor
						}
					}
				}
			}
			consume_all_criminal_reasons_effect = {
				LIEGE = scope:recipient.liege
				CRIMINAL = scope:recipient
			}
		}
	}
	hidden_effect = {
		scope:recipient.liege = {
			send_interface_toast = {
				type = event_toast_effect_neutral
				title = pardon_interaction_toast_title
				desc = pardon_interaction_toast_minister_liege
				right_icon = scope:puppet_or_actor
				left_icon = scope:recipient
				show_as_tooltip = {
					if = {
						limit = {
							OR = {
								has_extra_criminal_reason_against_trigger = {
									CRIMINAL = scope:recipient
								}
								scope:recipient = {
									is_close_or_extended_family_of = scope:puppet_or_actor
								}
							}
						}
						scope:puppet_or_actor = {
							change_strife_opinion = massive_strife_gain
							situation:dynastic_cycle = {
								trigger_situation_catalyst = {
									catalyst = catalyst_minister_pardoned_dangerous_criminal
									character = scope:puppet_or_actor
								}
							}
						}
					}
					consume_all_criminal_reasons_effect = {
						LIEGE = scope:recipient.liege
						CRIMINAL = scope:recipient
					}
				}
			}
		}
	}
}
else = {
	scope:recipient = {
		send_interface_toast = {
			type = event_toast_effect_neutral
			title = pardon_interaction_toast_title
			desc = pardon_interaction_toast
			right_icon = scope:puppet_or_actor
			consume_all_criminal_reasons_effect = {
				LIEGE = scope:puppet_or_actor
				CRIMINAL = scope:recipient
			}
		}
	}
}
scope:puppet_or_actor = {
	stress_and_fulfillment_impact = {
		forgiving = medium_stress_loss
	}
}
scope:puppet_or_actor = {
	if = {
		limit = {
			culture = {
				has_cultural_parameter = pardoning_gives_prestige
			}
		}
		add_prestige = minor_prestige_gain
	}
	hidden_effect = {
		if = {
			limit = {
				fp3_struggle_involves_one_supporter_and_one_detractor = {
					FIRST = scope:puppet_or_actor
					SECOND = scope:recipient
				}
				scope:recipient = {
					any_character_struggle = {
						involvement = involved
						phase_has_catalyst = catalyst_grants_pardon_supporter_detractor
						is_secondary_character_involvement_involved_trigger = {
							CHAR = scope:puppet_or_actor
						}
					}
				}
			}
			every_character_struggle = {
				involvement = involved
				activate_struggle_catalyst = {
					catalyst = catalyst_grants_pardon_supporter_detractor
					character = scope:recipient
				}
				log_debug_variable_for_persian_struggle_effect = {
					VAR = concession_catalyst_grants_pardon_supporter_detractor
				}
			}
		}
	}
}
scope:recipient = {
	if = {
		limit = {
			scope:puppet_or_actor = {
				culture = {
					has_cultural_parameter = pardoning_gives_loyalty
				}
			}
		}
		add_opinion = {
			modifier = loyal_servant
			target = scope:puppet_or_actor
		}
		scope:puppet_or_actor = {
			if = {
				limit = {
					can_add_hook = {
						target = scope:recipient
						type = loyalty_hook
					}
				}
				add_hook = {
					type = loyalty_hook
					target = scope:recipient
				}
			}
		}
	}
	else = {
		add_opinion = {
			target = scope:puppet_or_actor
			modifier = grateful_opinion
			opinion = 15
		}
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:puppet_or_actor
	TARGET = scope:recipient
	VALUE = minor_unity_gain
	DESC = clan_unity_forgiveness.desc
	REVERSE_NON_HOUSE_TARGET = no
}

As written in game/common/character_interactions/00_vassal_interactions.txt.

Category
Friendly actions
Cost: Influence
varies
Cost: Treasury
varies
In the menu
under More…
ID
pardon_interaction

Source: game/common/character_interactions/00_vassal_interactions.txt and the English localisation, Crusader Kings III 1.20.1.2. “You” is the character who sends it (scope:actor, or a puppet acting for you); “the character you target” is the recipient. “…” marks words the game fills in at play time (a name, a title).

Spotted a mistake on this page?