Interaction · Vassal actions
Grant Vassal
Make one of your Vassals become a Vassal of the recipient instead Granted Vassals have to be of a lower Rank than the recipient
What you need
You
To send it
None of these
- You: Is at war with the target
If
a check the game hides
Then
None of these
- The character you send: Is at war with the target
scope:recipient.primary_title.tier > scope:secondary_actor.primary_title.tier
If
- You: Is played by the AI
Then
If
None of these
- The target’s primary title › Any in de jure hierarchy:
holder = scope:secondary_actor
- The target’s primary title › Any in de jure hierarchy:
Then
scope:recipient.vassal_count < scope:recipient.vassal_limit
Not all of these
- You:
- Is played by the AI
- you has administrative government mechanic
- The character you target: Their government does not have the administrative mechanic
- The character you send: they has administrative government mechanic
- You:
- Sōryō Vassals cannot be transferred to Ritsuryō Vassals by a Ritsuryō Liege
- House Heads of Leading Houses of Blocs cannot be transferred as Vassals
To see it in the menu
- The target is not you
One of these
All of these
exists = scope:recipient.liegescope:recipient.liege ?= scope:puppet_or_actor
or
All of these
exists = scope:puppet_or_actor.liegeroot.liege ?= scope:recipient
or
All of these
root.faith.religious_head ?= scope:recipient- The character you target: Is an Independent Ruler
scope:recipient.highest_held_title_tier > tier_barony
The character you target
- Is landed
- Does not have the Trait: Gallivanter
Which character you can pick
Grant Vassal is a vassal character interaction in Crusader Kings III. You need: Sōryō Vassals cannot be transferred to Ritsuryō Vassals by a Ritsuryō Liege and House Heads of Leading Houses of Blocs cannot be transferred as Vassals. The character you target needs: Is landed and Does not have the Trait: Gallivanter. Accepted automatically in some cases. Patch 1.20.1.2, from game/common/character_interactions/00_vassal_interactions.txt.
Quick answers (1)
- What are the requirements for Grant Vassal in CK3?
- You: Sōryō Vassals cannot be transferred to Ritsuryō Vassals by a Ritsuryō Liege and House Heads of Leading Houses of Blocs cannot be transferred as Vassals. The character you target: Is landed and Does not have the Trait: Gallivanter. (patch 1.20.1.2)
Will they accept?
Accepted automatically when:
- The character you target: They will always accept more power
What happens
If they accept
If
- You: Is a vassal of the target
Then
add_truce_both_ways = { character = scope:secondary_actor days = 3650 name = TRUCE_GRANT_INDEPENDENCE }
- The character you send:
change_liege = { liege = scope:recipient change = scope:change }
- The character you target: Opinion: Granted Me a Vassal
If
Then
- Your house:
add_unity_value = { … }
- Your house:
If
- You: Is played by a person
Then
- The character you send:
- Every held title:
- Where: Title tier at least County · Title tier exactly scope:secondary actor.primary title.tier
- You:
If
- The title transfered: Title tier at least Kingdom
Then
- Every in list:
- Only some of them (the filter is in the script below)
Otherwise
- Opinion: Spurned My Unpressed Claim (-30)
- Every in list:
- Every in list:
Else if
One of these
- The title transfered: Title tier at least Duchy
or
exists = scope:secondary_actor
Then
- Every in list:
- Where:
NOT = { has_strong_implicit_claim_on = scope:title_transfered }- Any claim:
pressed = yes
- Opinion: Spurned My Pressed Claim (-40)
- Where:
- Every in list:
- Where:
NOT = { has_strong_implicit_claim_on = scope:title_transfered }- Any claim:
pressed = no
- Opinion: Spurned My Unpressed Claim (-20)
- Where:
- Every in list:
- Every in list: … (more in the script below)
- … (more in the script below)
- … (more in the script below)
- … (more in the script below)
If they refuse
- Event char_interaction.0211
If
Then
- The target’s house:
add_unity_value = { … }
- The target’s house:
Events it fires: pam_interactions_events.0040, char_interaction.0211
• 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) (18 lines of game script)
is_shown = scope:recipient != scope:puppet_or_actor
OR = {
AND = {
exists = scope:recipient.liege
scope:recipient.liege ?= scope:puppet_or_actor
}
AND = {
exists = scope:puppet_or_actor.liege
scope:puppet_or_actor.liege ?= scope:recipient
}
AND = {
scope:puppet_or_actor.faith.religious_head ?= scope:recipient
scope:recipient = {
top_liege = this
}
}
}
scope:recipient.highest_held_title_tier > tier_baronyAs written in game/common/character_interactions/00_vassal_interactions.txt.
Can be sent when (is_valid…) (107 lines of game script)
scope:recipient = {
is_landed = yes
NOT = {
has_trait = gallivanter
}
}
NOT = {
scope:puppet_or_actor = {
is_at_war_with = scope:recipient
}
}
trigger_if = {
limit = {
exists = scope:secondary_actor
}
NOT = {
scope:secondary_actor = {
is_at_war_with = scope:recipient
}
}
scope:recipient.primary_title.tier > scope:secondary_actor.primary_title.tier
}
trigger_if = {
limit = {
scope:puppet_or_actor = {
is_ai = yes
}
exists = scope:secondary_actor
}
trigger_if = {
limit = {
NOT = {
scope:recipient.primary_title = {
any_in_de_jure_hierarchy = {
holder = scope:secondary_actor
}
}
}
}
scope:recipient.vassal_count < scope:recipient.vassal_limit
}
scope:secondary_actor = {
NOT = {
has_character_flag = ai_should_not_transfer
}
}
}
trigger_if = {
limit = {
scope:recipient.highest_held_title_tier <= tier_county
}
scope:recipient = {
highest_held_title_tier > tier_county
}
}
trigger_else = {
scope:puppet_or_actor = {
custom_description = {
text = basic_valid_vassal_to_tranfer
object = scope:recipient
any_vassal = {
NOT = {
highest_held_title_tier = tier_barony
}
scope:recipient.highest_held_title_tier > highest_held_title_tier
}
}
}
}
NAND = {
scope:puppet_or_actor ?= {
is_ai = yes
government_has_mechanic = administrative
}
scope:recipient ?= {
NOT = {
government_has_mechanic = administrative
}
}
scope:secondary_actor ?= {
government_has_mechanic = administrative
}
}
custom_tooltip = {
text = ritsuryo_to_soryo_invalid_to_transfer
NAND = {
scope:puppet_or_actor ?= {
has_government = japan_administrative_government
}
scope:recipient ?= {
has_government = japan_administrative_government
}
scope:secondary_actor ?= {
has_government = japan_feudal_government
}
}
}
custom_tooltip = {
text = cannot_transfer_bloc_leader_as_vassal_tt
NOT = {
scope:secondary_actor ?= {
exists = house.house_confederation.leading_house
house.house_confederation.leading_house ?= house
is_house_head = yes
}
}
}As written in game/common/character_interactions/00_vassal_interactions.txt.
Effects (on_send, on_accept, on_decline) (215 lines of game script)
on_accept = if = {
limit = {
scope:puppet_or_actor = {
any_patroned_holy_order = {
leader.capital_county.holder ?= {
target_is_same_character_or_above = scope:secondary_actor
}
}
}
scope:recipient = {
highest_held_title_tier >= tier_duchy
}
}
scope:puppet_or_actor = {
custom_tooltip = holy_order_control_loss_warning_tt
}
}
scope:puppet_or_actor = {
send_interface_toast = {
type = event_toast_effect_good
title = grant_vassal_interaction_notification
right_icon = scope:recipient
left_icon = scope:secondary_actor
if = {
limit = {
scope:puppet_or_actor = {
is_vassal_of = scope:recipient
}
}
add_truce_both_ways = {
character = scope:secondary_actor
days = 3650
name = TRUCE_GRANT_INDEPENDENCE
}
}
create_title_and_vassal_change = {
type = granted
save_scope_as = change
add_claim_on_loss = no
}
scope:secondary_actor = {
change_liege = {
liege = scope:recipient
change = scope:change
}
}
resolve_title_and_vassal_change = scope:change
scope:recipient = {
add_opinion = {
target = scope:puppet_or_actor
modifier = granted_vassal
}
}
}
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:puppet_or_actor
TARGET = scope:recipient
VALUE = miniscule_unity_gain
DESC = clan_unity_grant_vassal.desc
REVERSE_NON_HOUSE_TARGET = yes
}
hidden_effect = {
if = {
limit = {
fp3_struggle_involves_one_supporter_and_one_detractor = {
FIRST = scope:puppet_or_actor
SECOND = scope:recipient
}
scope:puppet_or_actor = {
any_character_struggle = {
involvement = involved
phase_has_catalyst = catalyst_grants_vassal_to_de_jure_liege_supporter_detractor
is_secondary_character_involvement_involved_trigger = {
CHAR = scope:recipient
}
}
}
scope:recipient.primary_title = {
any_this_title_or_de_jure_above = {
holder = scope:secondary_actor
}
}
}
scope:puppet_or_actor = {
every_character_struggle = {
involvement = involved
activate_struggle_catalyst = {
catalyst = catalyst_grants_vassal_to_de_jure_liege_supporter_detractor
character = scope:puppet_or_actor
}
log_debug_variable_for_persian_struggle_effect = {
VAR = concession_catalyst_grants_vassal_to_de_jure_liege_supporter_detractor
}
}
}
}
if = {
limit = {
scope:recipient = {
government_has_flag = government_is_nomadic
}
}
while = {
limit = {
scope:secondary_actor ?= {
any_held_title = {
vassal_grant_de_jure_shift_trigger = yes
}
}
}
scope:secondary_actor ?= {
random_held_title = {
limit = {
vassal_grant_de_jure_shift_trigger = yes
}
set_de_jure_liege_title = scope:recipient.primary_title
}
}
}
}
}
if = {
limit = {
scope:puppet_or_actor = {
is_ai = no
}
}
scope:secondary_actor = {
if = {
limit = {
any_held_title = {
any_claimant = {
this = scope:recipient
}
}
}
ordered_held_title = {
order_by = tier
limit = {
any_claimant = {
this = scope:recipient
}
}
save_scope_as = highest_claim
}
scope:recipient = {
claimant_jealousy_immunity_effect = yes
}
}
every_held_title = {
limit = {
tier >= tier_county
tier = scope:secondary_actor.primary_title.tier
}
save_scope_as = title_transfered
scope:puppet_or_actor = {
title_granting_controversy_effect = {
TITLE = scope:title_transfered
INTERACTION = grant_vassal_interaction
}
}
}
every_in_list = {
list = strong_claimants
limit = {
NOT = {
this = scope:recipient
}
}
save_scope_as = claimer
scope:secondary_actor = {
ordered_held_title = {
limit = {
any_claimant = {
this = scope:claimer
}
}
save_scope_as = highest_denied_claim
}
}
claimant_rivalry_mercy_effect = yes
}
}
if = {
limit = {
NOT = {
scope:secondary_actor = {
any_held_title = {
any_this_title_or_de_jure_above = {
holder ?= scope:recipient
}
}
}
}
}
scope:secondary_actor = {
add_opinion = {
modifier = subordinated_to_non_de_jure_liege_opinion
target = scope:puppet_or_actor
opinion = -30
}
}
}
}
on_decline = scope:puppet_or_actor = {
trigger_event = char_interaction.0211
}
add_clan_unity_interaction_effect = {
CHARACTER = scope:recipient
TARGET = scope:puppet_or_actor
VALUE = miniscule_unity_loss
DESC = clan_unity_grant_vassal_decline.desc
REVERSE_NON_HOUSE_TARGET = no
}As written in game/common/character_interactions/00_vassal_interactions.txt.
- Category
- Vassal actions
- In the menu
- under More…
- ID
grant_vassal_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.