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

Interaction · Vassal actions

Grant Appointment

No costAccepted automatically

Appoint the recipient as Governor of a Province

What you need

You

To send it

To see it in the menu

  • you has administrative government mechanic
  • Highest held Title is at least County Rank
  • If

    • You: Is played by the AI

    Then

    • The character you target:
      • None of these

        • Any parent: Is played by a person

The character you target

To send it

To see it in the menu

  • One of these

    • Is a vassal (or below) of you
    • or

      is_pool_guest_of = scope:puppet_or_actor

Which title you can pick

  • The target:
    • is_leased_out = no
    • The character you target:
      • If

        Then

        • Governors cannot be granted additional Titles of their highest held Tier (…)
        • Title is not a part of the De Jure structure or a De Jure neighbor of … Province
      • If

        • Is a landless ruler
        • Any held title: The … is a Noble Family Title
        • scope:target.tier < min_appointment_tier

        Then

        • primary_title.tier <= scope:target.tier
      • If

        • Highest held Title is exactly County Rank
        • Main administrative tier more than 2
        • Is landed
        • scope:target.tier = tier_county

        Then

      • … is the Ceremonial Monarch
    • … cannot give away … primary Governorship
    • If the … is a Noble Family Title: … cannot give away … Noble Family Title
    • If

      a check the game hides

      Then

    • If

      • list_size:target_titles > 0

      Then

    • If

      • scope:target = title:k_fashion

      Then

      • NOT = { scope:target = title:k_fashion }

Grant Appointment is a vassal character interaction in Crusader Kings III. The character you target needs: Is an Adult, Is not at war with you, Already under negotiation to become someone's Ward and 4 more. Accepted automatically. Patch 1.20.1.2, from game/common/character_interactions/00_grant_titles_interaction.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Grant Appointment in CK3?
The character you target: Is an Adult, Is not at war with you, Already under negotiation to become someone's Ward, Already under negotiation to become someone's Guardian, they has administrative government mechanic, Is not a member of the Clergy and Does not have the Trait: Gallivanter. (patch 1.20.1.2)
Will the AI accept Grant Appointment?
Yes: it is accepted automatically.

Will they accept?

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

What happens

Effects

  • If

    • The character you target:
      • is_acclaimed = yes

    Then

  • If

    • You › Any patroned holy order:
      • leader.capital_county ?= { … }
    • The character you target:
      • One of these

        • Highest held Title is at least Duchy Rank
        • or

          All of these

          • Any in list: Title tier at least Duchy
          • One of these

            • The ho capital temp’s holder: Is the target or the target’s liege
            • or

              Any in list: Is the ho capital temp
            • or

              All of these

              • scope:ho_capital_temp.holder.highest_held_title_tier = tier_county
              • Any in list:
                • Title tier at least Duchy
                • Any de jure county: Is the ho capital temp

    Then

  • If

    • None of these

      • The character you target: Highest held Title is more than County Rank
      • Any in list: Title tier more than County
    • You › Any patroned holy order:
      • leader.capital_county ?= { save_temporary_scope_as = ho_capital_temp is_in_list = target_titles }

    Then

  • If

    • Any in list:
      • Title tier at least Duchy
      • title_capital_county = { culture != scope:puppet_or_actor.culture culture = scope:recipient.culture }
      • NOT = { recent_history = { type = granted years = 10 } }

    Then

    • The target’s culture:
      • change_cultural_acceptance = { target = scope:puppet_or_actor.culture value = grant_title_cultural_acceptance_impact desc = cultural_acceptance_gain_granted_title }
  • If

    Then

    • You:
      • add_prestige = { … }
  • If

    Then

    • Your dynasty:
      • add_dynasty_prestige = { … }
  • Every in list:
    • If

      a check the game hides

      Then

      • If

        • You: Was promised title is scope:recipient

        Then

        • If

          • scope:landed_title = scope:recipient.var:promised_title

          Then

    • If

      Then

  • The character you target › If a faction member:
    • add_joined_faction_discontent = grant_title_opinion_sum_discontent_calc
  • If

    • Any in list: Title tier at least Empire

    Then

  • If

    • Any in list: Title tier exactly Kingdom

    Then

  • If

    • Any in list: Title tier exactly Duchy

    Then

    • … gains … Opinion of … for 50 years (Received Duchy)
  • If

    • Any in list:
      • Title tier exactly County
      • You:
        • min_appointment_tier = tier_county

    Then

  • If

    • If

      • You: Is played by a person

      Then

      • You › Any vassal:
        • vassal_stance = courtly
    • The character you target: Is Lowborn
    • Any in list: Title tier at least County

    Then

  • If

    • The character you target: Is a faction member

    Then

    • … (more in the script below)
  • … (more in the script below)

When it is accepted automatically

Events it fires: vassal.2910, bp1_yearly.8070, pam_interactions_events.0040, char_interaction.0111

• 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) (25 lines of game script)
is_shown = scope:puppet_or_actor != scope:recipient
scope:recipient = {
	OR = {
		target_is_liege_or_above = scope:puppet_or_actor
		is_pool_guest_of = scope:puppet_or_actor
	}
}
scope:puppet_or_actor ?= {
	government_has_mechanic = administrative
	highest_held_title_tier >= tier_county
}
trigger_if = {
	limit = {
		scope:actor = {
			is_ai = yes
		}
	}
	scope:recipient = {
		NOT = {
			any_parent = {
				is_ai = no
			}
		}
	}
}

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

Can be sent when (is_valid…) (179 lines of game script)
scope:puppet_or_actor = {
	custom_tooltip = {
		text = grant_governorship_interaction_no_title_tt
		any_held_title = {
			tier >= tier_county
			is_noble_family_title = no
			is_landless_type_title = no
			NOR = {
				this = scope:puppet_or_actor.capital_county
				this = scope:puppet_or_actor.primary_title
			}
		}
	}
}
scope:recipient = {
	is_adult = yes
	NOT = {
		is_at_war_with = scope:puppet_or_actor
	}
	bp2_valid_for_standard_interactions_trigger = yes
	trigger_if = {
		limit = {
			is_ruler = no
		}
		is_imprisoned = no
	}
	government_has_mechanic = administrative
	trigger_if = {
		limit = {
			scope:puppet_or_actor = {
				OR = {
					has_realm_law = male_only_law
					has_realm_law = male_preference_law
				}
			}
			is_landed = no
		}
		custom_tooltip = {
			text = recipient_cannot_be_appointed_gender_laws_tt
			is_female = no
		}
	}
	trigger_if = {
		limit = {
			scope:puppet_or_actor = {
				OR = {
					has_realm_law = female_only_law
					has_realm_law = female_preference_law
				}
			}
			is_landed = no
		}
		custom_tooltip = {
			text = recipient_cannot_be_appointed_gender_laws_tt
			is_female = yes
		}
	}
	custom_description = {
		text = grant_title_stealing_acclaimed_knight
		subject = scope:recipient
		NOR = {
			AND = {
				is_acclaimed = yes
				liege ?= {
					is_ai = no
					this != scope:puppet_or_actor
				}
			}
			AND = {
				is_acclaimed = yes
				scope:actor = {
					is_ai = yes
				}
			}
		}
	}
	is_clergy = no
	NOT = {
		has_trait = gallivanter
	}
	tgp_japan_grant_titles_restriction_trigger = {
		GRANTER = scope:puppet_or_actor
		GRANTEE = scope:recipient
	}
	custom_tooltip = {
		text = recipient_is_a_minister_desc
		tgp_is_any_minister = no
	}
}
scope:recipient = {
	custom_tooltip = {
		text = promote_candidate_interaction_existing_holder_tt
		this != scope:target.holder
	}
	trigger_if = {
		limit = {
			is_governor = yes
			scope:target = {
				is_noble_family_title = no
			}
		}
		custom_tooltip = {
			text = only_one_province_of_highest_rank_tt
			NAND = {
				highest_held_title_tier = scope:target.tier
				scope:target.tier >= tier_duchy
				scope:target = {
					any_de_jure_county = {
						count < 1
						OR = {
							holder = scope:recipient
							holder = {
								is_vassal_or_below_of = scope:recipient
							}
						}
					}
				}
			}
		}
		custom_tooltip = {
			text = admin_must_be_de_jure_or_neighboring
			any_held_title = {
				OR = {
					is_de_jure_liege_or_above_target = scope:target
					target_is_de_jure_liege_or_above = scope:target
					AND = {
						NOT = {
							tier = tier_barony
						}
						any_title_to_title_neighboring_county = {
							this = scope:target
						}
						scope:target = {
							tier = tier_county
							duchy = {
								OR = {
									NOT = {
										exists = holder
									}
									holder = {
										NOR = {
											is_vassal_or_below_of = scope:puppet_or_actor
											this = scope:puppet_or_actor
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	trigger_if = {
		limit = {
			is_landless_ruler = yes
			any_held_title = {
				is_noble_family_title = yes
			}
			scope:target.tier < min_appointment_tier
		}
		primary_title.tier <= scope:target.tier
	}
	trigger_if = {
		limit = {
			highest_held_title_tier = tier_county
			main_administrative_tier > tier_county
			is_landed = yes
			scope:target.tier = tier_county
		}
		custom_tooltip = {
			text = admin_count_grant_only_counties
			any_held_title = {
				duchy = scope:target.duchy
			}
		}
	}
	tgp_is_ceremonial_liege_trigger = no
}

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

Effects (on_send, on_accept, on_decline) (244 lines of game script)
on_accept = if = {
	limit = {
		scope:recipient = {
			is_acclaimed = yes
			liege = {
				this = scope:puppet_or_actor
			}
		}
	}
	custom_tooltip = grant_title_landing_acclaimed_knight_warning
}
grant_title_holy_order_patronage_warning_effect = yes
if = {
	limit = {
		any_in_list = {
			list = target_titles
			tier >= tier_duchy
			title_capital_county = {
				culture != scope:puppet_or_actor.culture
				culture = scope:recipient.culture
			}
			NOT = {
				recent_history = {
					type = granted
					years = 10
				}
			}
		}
	}
	scope:recipient.culture = {
		change_cultural_acceptance = {
			target = scope:puppet_or_actor.culture
			value = grant_title_cultural_acceptance_impact
			desc = cultural_acceptance_gain_granted_title
		}
	}
}
if = {
	limit = {
		any_in_list = {
			list = target_titles
			tier >= tier_county
		}
		scope:puppet_or_actor.culture = {
			has_cultural_parameter = landing_house_members_give_prestige
		}
		exists = scope:puppet_or_actor.house
		exists = scope:recipient.house
		scope:puppet_or_actor.house = scope:recipient.house
	}
	scope:puppet_or_actor = {
		add_prestige = {
			value = 0
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_hegemony
				}
				add = monumental_prestige_gain
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_empire
				}
				add = massive_prestige_gain
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_kingdom
				}
				add = major_prestige_gain
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_duchy
				}
				add = medium_prestige_gain
			}
		}
	}
}
if = {
	limit = {
		any_in_list = {
			list = target_titles
			tier >= tier_county
		}
		scope:puppet_or_actor.culture = {
			has_cultural_parameter = landing_house_members_gives_renown
		}
		exists = scope:puppet_or_actor.house
		exists = scope:recipient.house
		scope:puppet_or_actor.house = scope:recipient.house
	}
	scope:puppet_or_actor.dynasty = {
		add_dynasty_prestige = {
			value = 0
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_kingdom
				}
				add = scope:puppet_or_actor.dynasty.major_dynasty_prestige_gain
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_duchy
				}
				add = scope:puppet_or_actor.dynasty.medium_dynasty_prestige_gain
			}
		}
	}
}
every_in_list = {
	list = target_titles
	save_temporary_scope_as = this_title
	if = {
		limit = {
			exists = scope:landed_title
		}
		scope:recipient = {
			if = {
				limit = {
					scope:this_title.tier = tier_county
				}
				hidden_effect = {
					add_opinion = {
						target = scope:puppet_or_actor
						modifier = received_title_county
					}
				}
				scope:this_title = {
					add_to_temporary_list = titles_to_grant
				}
			}
			else_if = {
				limit = {
					scope:this_title.tier = tier_duchy
				}
				hidden_effect = {
					add_opinion = {
						target = scope:puppet_or_actor
						modifier = received_title_duchy
					}
					if = {
						limit = {
							is_lowborn = yes
						}
						scope:puppet_or_actor = {
							every_vassal = {
								vassal_stance = courtly
								add_opinion = {
									target = scope:puppet_or_actor
									modifier = courtly_lowborn_grant_opinion
									opinion = -10
								}
							}
						}
					}
				}
				scope:this_title = {
					add_to_temporary_list = titles_to_grant
				}
			}
			else_if = {
				limit = {
					scope:this_title.tier = tier_kingdom
				}
				hidden_effect = {
					add_opinion = {
						target = scope:puppet_or_actor
						modifier = received_title_kingdom
					}
					if = {
						limit = {
							is_lowborn = yes
						}
						scope:puppet_or_actor = {
							every_vassal = {
								vassal_stance = courtly
								add_opinion = {
									target = scope:puppet_or_actor
									modifier = courtly_lowborn_grant_opinion
									opinion = -30
								}
							}
						}
					}
				}
				scope:this_title = {
					add_to_temporary_list = titles_to_grant
				}
			}
			else_if = {
				limit = {
					scope:this_title.tier >= tier_empire
				}
				hidden_effect = {
					add_opinion = {
						target = scope:puppet_or_actor
						modifier = received_title_empire
					}
					if = {
						limit = {
							is_lowborn = yes
						}
						scope:puppet_or_actor = {
							every_vassal = {
								vassal_stance = courtly
								add_opinion = {
									target = scope:puppet_or_actor
									modifier = courtly_lowborn_grant_opinion
									opinion = -30
								}
							}
						}
					}
				}
				scope:this_title = {
					add_to_temporary_list = titles_to_grant
				}
			}
		}
		if = {
			limit = {
				scope:puppet_or_actor = {
					exists = var:was_promised_title
					var:was_promised_title = scope:recipient
				}
			}
			if = {
				limit = {
					scope:recipient = {
						exists = var:promised_title
					}
					scope:landed_title = scope:recipient.var:promised_title
				}
				scope:puppet_or_actor = {
					trigger_event = {
# … (cut here; the rest is in the file)

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

Category
Vassal actions
In the menu
main list
ID
grant_governorship_interaction

Source: game/common/character_interactions/00_grant_titles_interaction.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.

Spotted a mistake on this page?