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 Titles

No costAccepted automatically

Grant one or more of your personally held Titles to the recipient

What you need

You

To send it

  • Held title (more than 1):
  • If

    • You:
      • Highest held Title is at least Kingdom Rank
      • has_diarchy_active_parameter = primeminister_requires_duchy
      • diarch = scope:recipient

    Then

To see it in the menu

  • Your government does not have the cannot be vassal or liege flag
  • If

    • You: you has administrative government mechanic

    Then

    • The character you target: Their government does not have the administrative mechanic
  • If

    Then

    • The character you target: Their government is not unplayable

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
    • or

      All of these

Which title you can pick

Grant Titles is a vassal character interaction in Crusader Kings III. You need: Held title (more than 1). The character you target needs: Is not at war with you, Already under negotiation to become someone's Ward, Already under negotiation to become someone's Guardian and 1 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 Titles in CK3?
You: Held title (more than 1). The character you target: Is not at war with you, Already under negotiation to become someone's Ward, Already under negotiation to become someone's Guardian and Does not have the Trait: Gallivanter. (patch 1.20.1.2)
Will the AI accept Grant Titles?
Yes: it is accepted automatically.

Will they accept?

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

What happens

Effects

  • If

    Then

  • If

    • The character you target:
      • is_acclaimed = yes
    • The target: Title tier more than Barony

    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

  • The character you target:
    • If

      • Does not have you as friend

      Then

      • If

        • Not all of these

          • Their culture is the same as that of puppet or actor
          • Their faith is the same as that of puppet or actor
        • You › Any character struggle:
          • involvement = involved
        • Any character struggle:
          • involvement = involved
          • has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_to_leads_to_friendship

        Then

        • If

          • Has the target char as potential friend
          • Does not have the target char as friend
          • Does not have the target char as best friend
          • Does not have the target char as rival
          • Does not have the target char as nemesis

          Then

          • If a check the game hides passes: the same again (1 line)
            Else if a check the game hides passes: the same again (1 line)
            Else if a check the game hides passes: the same again (1 line)

            Otherwise

          • If

            • has_activity_intent = befriend_attendee_intent
            • intent_target ?= scope:target_char
            • intent_target.involved_activity ?= this.involved_activity

            Then

            • complete_activity_intent = yes

          Otherwise

          • If

            • Does not have the target char as potential friend
            • can_set_relation_friend_trigger = { CHARACTER = scope:target_char }
            • If

              • Is played by the AI
              • The target char: Is played by the AI

              Then

              • The target char: Opinion of prev at least -25

              Otherwise

              • always = yes

            Then

            • set_relation_potential_friend = scope:target_char
          • If

            • scope:friend_opinion != 0

            Then

            • If

              • The target char: Is played by the AI

              Then

              • The target char gains the opinion “Friendly” of them
            • Opinion: Friendly
  • If

    • One of these

      • Any in list:
        • Title tier exactly County
        • Their culture is the same as that of recipient
        • Their culture is not the same as that of puppet or actor
        • NOT = { recent_history = { type = granted years = 10 } }
      • or

        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

    • Any in list: … (more in the script below)
    • … (more in the script below)
  • … (more in the script below)

When it is accepted automatically

Events it fires: vassal.2910, bp1_yearly.8070, char_interaction.0110

• 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) (40 lines of game script)
is_shown = scope:puppet_or_actor != scope:recipient
scope:puppet_or_actor ?= {
	NOT = {
		government_has_flag = cannot_be_vassal_or_liege
	}
}
scope:recipient = {
	OR = {
		target_is_liege_or_above = scope:puppet_or_actor
		is_pool_guest_of = scope:puppet_or_actor
		AND = {
			scope:puppet_or_actor.faith.religious_head ?= scope:recipient
			top_liege ?= this
		}
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			government_has_mechanic = administrative
		}
	}
	scope:recipient = {
		NOT = {
			government_has_mechanic = administrative
		}
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			government_has_flag = government_is_nomadic
		}
	}
	scope:recipient = {
		NOT = {
			government_has_flag = government_is_herder
		}
	}
}

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

Can be sent when (is_valid…) (105 lines of game script)
scope:recipient = {
	custom_tooltip = {
		text = can_be_granted_titles_interaction_tt
		OR = {
			can_be_granted_titles_by = {
				RULER = scope:puppet_or_actor
			}
			can_be_granted_theocratic_titles_by = {
				RULER = scope:puppet_or_actor
			}
			AND = {
				is_diarch_of_target = scope:puppet_or_actor
				scope:puppet_or_actor = {
					has_diarchy_active_parameter = diarchy_is_co_rulership
				}
			}
		}
	}
	NOT = {
		is_at_war_with = scope:puppet_or_actor
	}
	OR = {
		NOT = {
			has_trait = devoted
		}
		scope:puppet_or_actor = {
			government_has_flag = government_is_theocracy
		}
	}
	bp2_valid_for_standard_interactions_trigger = yes
	trigger_if = {
		limit = {
			is_ruler = no
		}
		is_imprisoned = no
	}
	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
				}
			}
		}
	}
	NOT = {
		has_trait = gallivanter
	}
	tgp_japan_grant_titles_restriction_trigger = {
		GRANTER = scope:puppet_or_actor
		GRANTEE = scope:recipient
	}
}
custom_description = {
	text = is_not_theocratic_court_chaplain
	subject = scope:recipient
	NAND = {
		scope:puppet_or_actor.rite = {
			rite_has_doctrine = doctrine_theocracy_temporal
		}
		scope:puppet_or_actor = {
			NOT = {
				government_has_flag = government_is_theocracy
			}
		}
		scope:recipient = {
			rite = {
				rite_has_doctrine = doctrine_theocracy_temporal
			}
			has_council_position = councillor_court_chaplain
		}
		scope:puppet_or_actor.faith.religious_head != scope:recipient
	}
}
scope:puppet_or_actor = {
	any_held_title = {
		count > 1
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			highest_held_title_tier >= tier_kingdom
			has_diarchy_active_parameter = primeminister_requires_duchy
			diarch = scope:recipient
		}
	}
	custom_tooltip = {
		text = primeminister_requires_duchy.tt.blocked_grant
		any_in_list = {
			list = target_titles
			tier >= tier_duchy
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (253 lines of game script)
on_accept = if = {
	limit = {
		scope:puppet_or_actor = {
			government_has_flag = government_is_nomadic
			vassal_limit_available <= 0
			is_independent_ruler = yes
			scope:recipient = {
				NOT = {
					is_vassal_of = scope:puppet_or_actor
				}
			}
		}
	}
	custom_tooltip = grant_title_nomad_and_at_vassal_limit
}
scope:recipient = {
	add_character_flag = {
		flag = domicile_culture_and_faith_check
		days = 1
	}
}
if = {
	limit = {
		scope:recipient = {
			is_acclaimed = yes
			liege = {
				this = scope:puppet_or_actor
			}
		}
		scope:target = {
			tier > tier_barony
		}
	}
	custom_tooltip = grant_title_landing_acclaimed_knight_warning
}
grant_title_holy_order_patronage_warning_effect = yes
scope:recipient = {
	if = {
		limit = {
			top_liege = this
			save_temporary_scope_as = recipient_is_independent
		}
	}
	if = {
		limit = {
			NOT = {
				has_relation_friend = scope:puppet_or_actor
			}
		}
		if = {
			limit = {
				is_diff_faith_or_culture_trigger = {
					CHAR = scope:puppet_or_actor
					STATUS = involved
				}
				any_character_struggle = {
					involvement = involved
					has_struggle_phase_parameter = struggle_grant_titles_diff_faith_culture_to_leads_to_friendship
				}
			}
			progress_towards_friend_effect = {
				REASON = friend_granted_title
				CHARACTER = scope:puppet_or_actor
				OPINION = 0
			}
		}
	}
}
if = {
	limit = {
		OR = {
			any_in_list = {
				list = target_titles
				tier = tier_county
				culture = scope:recipient.culture
				NOR = {
					culture = scope:puppet_or_actor.culture
					recent_history = {
						type = granted
						years = 10
					}
				}
			}
			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 = grants_to_lowborns_bonuses
		}
		scope:recipient = {
			is_lowborn = yes
		}
	}
	every_in_list = {
		list = target_titles
		limit = {
			tier = tier_county
		}
		change_county_control = 30
	}
	scope:recipient = {
		add_trait = peasant_leader
	}
}
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
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_county
				}
				add = minor_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_hegemony
				}
				add = scope:puppet_or_actor.dynasty.monumental_dynasty_prestige_gain
			}
			every_in_list = {
				list = target_titles
				limit = {
					tier = tier_empire
				}
				add = scope:puppet_or_actor.dynasty.massive_dynasty_prestige_gain
			}
			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
				limit = {
					tier = tier_county
				}
				add = scope:puppet_or_actor.dynasty.minor_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_barony
				}
				hidde
# … (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_titles_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?