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

Swear Oath of True Friendship

No costThe AI weighs it (the answer is partly random)

Suggest that the recipient and you become Best Friends

What you need

You

To send it

  • You're already the best of friends!
  • If

    • None of these

      • You: Has the target as best friend

    Then

    • You already have a best friend!
  • If

    • None of these

      • The character you target: Has you as best friend

    Then

    • … already has a best friend!
  • Also needed: available (an adult, not in an army, not imprisoned, not incapable) · none of the traits Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux · not busy in an Activity · not planning another Activity

To see it in the menu

The character you target

  • Also needed: available (an adult, not in an army, not imprisoned, not incapable) · none of the traits Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux · not busy in an Activity · not planning another Activity

Swear Oath of True Friendship is a friendly character interaction in Crusader Kings III. You need: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, You are currently busy … and 2 more. The character you target needs: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, Busy participating in an Activity and 1 more. The AI weighs it (the answer is partly random). Reasons the AI weighs include Shy is nervous about becoming Best Friends (-5), Arbitrary is wary of becoming Best Friends (-30), Gregarious approves of becoming Best Friends (+10) and 9 more. Patch 1.20.1.2, from game/common/character_interactions/03_fp2_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Swear Oath of True Friendship in CK3?
You: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, You are currently busy …, You are already planning another Activity and You're already the best of friends!. The character you target: Is available (an adult, not in an army, not imprisoned, not incapable), Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, Busy participating in an Activity and You are already planning another Activity. (patch 1.20.1.2)
How do I get the AI to accept Swear Oath of True Friendship?
The AI weighs it (the answer is partly random). Its reasons: … Opinion of …, Shy is nervous about becoming Best Friends -5, Arbitrary is wary of becoming Best Friends -30, Gregarious approves of becoming Best Friends +10, Just approves of becoming Best Friends +30, Rank Difference +75, Rank Difference +50, Rank Difference +25, Rank Difference -100, Rank Difference -75, Rank Difference -50, The recipient has the Foreign Affairs Focus +25 and … Culture does not understand the true meaning of friendship -75.

Will they accept?

The AI adds these up and accepts above zero; near zero the answer is partly random (ai_maybe). Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base0
… Opinion of …varies
Their personality (AI values: sociability (scripted), honor (scripted))varies
Shy is nervous about becoming Best Friends
when
-5
Arbitrary is wary of becoming Best Friends
when
-30
Gregarious approves of becoming Best Friends
when
+10
Just approves of becoming Best Friends
when
+30
Rank Difference
when
  • tier_difference = { target = scope:recipient value >= 4 }
+75
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 3 }
+50
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 2 }
+25
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -2 }
-100
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -3 }
-75
Rank Difference
when
  • tier_difference = { target = scope:recipient value <= -4 }
-50
The recipient has the Foreign Affairs Focus
when
  • The character you target:
    • has_focus = diplomacy_foreign_affairs_focus
+25
… Culture does not understand the true meaning of friendship
when
-75
Acceptance (ai_accept) (11 lines of game script)
base = 0
fp2_ritual_best_friendship_interactions_ai_accept_modifier = yes
modifier = {
	add = -75
	NOT = {
		culture = {
			has_cultural_parameter = may_propose_best_friendship
		}
	}
	desc = PROPOSE_BEST_FRIEND_OPINION_LACKING_CULTURAL_PARAMETER
}

As written in game/common/character_interactions/03_fp2_interactions.txt.

What happens

If they accept

  • Gains a Best Friend
  • The target gains the opinion “Friendly” (+50) of them
  • If

    • NOT = { has_hook_of_type = { target = scope:recipient type = ritual_best_friend_hook } }
    • can_add_hook = { target = scope:recipient type = ritual_best_friend_hook }

    Then

  • The character you target:
    • Gains a Best Friend
    • You gains the opinion “Friendly” (+50) of them
    • If

      • NOT = { has_hook_of_type = { target = scope:actor type = ritual_best_friend_hook } }
      • can_add_hook = { target = scope:actor type = ritual_best_friend_hook }

      Then

  • 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 = { … }

If they refuse

  • Gains 40 Stress
  • The character you target › You: Opinion: Hurt (-50)
  • 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) (12 lines of game script)
is_available = culture ?= {
	has_cultural_parameter = may_propose_best_friendship
}
trigger_if = {
	limit = {
		is_ai = yes
	}
	is_imprisoned = no
}
is_shown = scope:actor = {
	has_relation_friend = scope:recipient
}

As written in game/common/character_interactions/03_fp2_interactions.txt.

Can be sent when (is_valid…) (44 lines of game script)
scope:actor = {
	is_available_adult = yes
}
scope:recipient = {
	is_available_adult = yes
}
custom_tooltip = {
	text = propose_best_friendship_interaction.tt.already_best_friends
	scope:actor = {
		NOT = {
			has_relation_best_friend = scope:recipient
		}
	}
}
trigger_if = {
	limit = {
		NOT = {
			scope:actor = {
				has_relation_best_friend = scope:recipient
			}
		}
	}
	custom_tooltip = {
		text = propose_best_friendship_interaction.tt.actor_has_best_friend
		scope:actor = {
			num_of_relation_best_friend = 0
		}
	}
}
trigger_if = {
	limit = {
		NOT = {
			scope:recipient = {
				has_relation_best_friend = scope:actor
			}
		}
	}
	custom_tooltip = {
		text = propose_best_friendship_interaction.tt.recipient_has_best_friend
		scope:recipient = {
			num_of_relation_best_friend = 0
		}
	}
}

As written in game/common/character_interactions/03_fp2_interactions.txt.

Effects (on_send, on_accept, on_decline) (130 lines of game script)
on_accept = scope:actor = {
	send_interface_toast = {
		type = event_toast_effect_good
		title = propose_best_friendship_interaction.accept.actor.tt
		left_icon = scope:recipient
		show_as_tooltip = {
			set_relation_best_friend = scope:recipient
		}
		reverse_add_opinion = {
			target = scope:recipient
			modifier = friendliness_opinion
			opinion = 50
		}
		if = {
			limit = {
				NOT = {
					has_hook_of_type = {
						target = scope:recipient
						type = ritual_best_friend_hook
					}
				}
				can_add_hook = {
					target = scope:recipient
					type = ritual_best_friend_hook
				}
			}
			add_hook = {
				type = ritual_best_friend_hook
				target = scope:recipient
			}
		}
	}
}
scope:recipient = {
	send_interface_toast = {
		type = event_toast_effect_neutral
		title = propose_best_friendship_interaction.accept.recipient.tt
		left_icon = scope:actor
		show_as_tooltip = {
			set_relation_best_friend = scope:actor
		}
		reverse_add_opinion = {
			target = scope:actor
			modifier = friendliness_opinion
			opinion = 50
		}
		if = {
			limit = {
				NOT = {
					has_hook_of_type = {
						target = scope:actor
						type = ritual_best_friend_hook
					}
				}
				can_add_hook = {
					target = scope:actor
					type = ritual_best_friend_hook
				}
			}
			add_hook = {
				type = ritual_best_friend_hook
				target = scope:actor
			}
		}
	}
}
hidden_effect = {
	scope:actor = {
		if = {
			limit = {
				NOT = {
					has_relation_best_friend = scope:recipient
				}
			}
			set_relation_best_friend = {
				reason = best_friend_sworn
				copy_reason = friend
				target = scope:recipient
			}
		}
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:actor
	TARGET = scope:recipient
	VALUE = minor_unity_gain
	DESC = clan_unity_oath_of_true_friendship.desc
	REVERSE_NON_HOUSE_TARGET = no
}
on_decline = scope:actor = {
	send_interface_toast = {
		type = event_toast_effect_bad
		title = propose_best_friendship_interaction.decline.actor.tt
		left_icon = scope:recipient
		add_stress = medium_stress_gain
	}
}
scope:recipient = {
	send_interface_toast = {
		type = event_toast_effect_neutral
		title = propose_best_friendship_interaction.decline.recipient.tt
		left_icon = scope:actor
		scope:actor = {
			add_opinion = {
				target = scope:recipient
				modifier = hurt_opinion
				opinion = -50
			}
		}
	}
}
hidden_effect = {
	scope:recipient = {
		if = {
			limit = {
				NOT = {
					has_relation_potential_rival = scope:actor
				}
			}
			set_relation_potential_rival = scope:actor
		}
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:actor
	TARGET = scope:recipient
	VALUE = minor_unity_loss
	DESC = clan_unity_declined_true_friendship.desc
	REVERSE_NON_HOUSE_TARGET = no
}

As written in game/common/character_interactions/03_fp2_interactions.txt.

Category
Friendly actions
Cooldown
5 years
Again on the same character
after 10 years
In the menu
main list
ID
propose_best_friendship_interaction

Source: game/common/character_interactions/03_fp2_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.

Spotted a mistake on this page?