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

Interaction · Diplomatic actions

Join My Side

150PrestigeLegacy of PersiaAccepted automatically in some cases; otherwise the AI weighs it

Convince the recipient to join your ranks

What you need

You

To send it

  • 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

To send it

  • If has the Trait: Supporter of Caliphal Authority:
    • NOT = { is_allied_to = title:d_sunni.holder }
    • None of these

      • title:d_sunni.holder:
        • has_strong_hook = prev
    • … recently announced … public support for the …
  • If has the Trait: Detractor of the Caliphate:
    • … recently announced … public independence from the …
    • … was recently forced to become a Detractor of the Caliphate by the actions of the …
  • Is at not War
  • … recently changed their position at someone else's request
  • … recently refused to change their position and don't want to be bothered about it anymore
  • … Head of Faith is not the …

To see it in the menu

  • Any character struggle:
    • is_struggle_type = persian_struggle

Join My Side is a diplomatic 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 1 more. The character you target needs: Is at not War. Accepted automatically in some cases; otherwise the AI weighs it. Reasons the AI weighs include The recipient is a Detractor of the Caliphate (-25), The recipient is a Supporter of Caliphal Authority (-25), The recipient is Zealous (+25) and 5 more. It costs 150 Prestige. It needs Legacy of Persia. Patch 1.20.1.2, from game/common/character_interactions/00_fp3_interactions.txt.

for a guide, post or blog
Quick answers (3)
What are the requirements for Join My Side 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 … and You are already planning another Activity. The character you target: Is at not War. (patch 1.20.1.2)
How do I get the AI to accept Join My Side?
Accepted automatically in some cases; otherwise the AI weighs it. Its reasons: The recipient is a Detractor of the Caliphate -25, The recipient is a Supporter of Caliphal Authority -25, The recipient is Zealous +25, The recipient is Cynical +25, The recipient is Fickle +25, Loyal Trait +15, Disloyal Trait +15, The recipient is Stubborn +25, Your Diplomacy and Their Diplomacy.
How much does Join My Side cost?
150 Prestige (patch 1.20.1.2).

Will they accept?

Accepted automatically when:

  • They use their Hook on …

Otherwise 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
The recipient is a Detractor of the Caliphate
when
-25
The recipient is a Supporter of Caliphal Authority
when
-25
Their opinion of youvaries
Their opinion of title:d sunni.holdervaries
The recipient is Zealous
when
+25
The recipient is Cynical
when
+25
The recipient is Fickle
when
+25
Loyal Trait
when
+15
Disloyal Trait
when
+15
The recipient is Stubborn
when
+25
Your Diplomacyyour diplomacy × 5
Their Diplomacytheir diplomacy × -3
Acceptance (ai_accept) (109 lines of game script)
base = 0
modifier = {
	add = -25
	scope:actor = {
		has_trait = fp3_struggle_supporter
	}
	scope:recipient = {
		has_trait = fp3_struggle_detractor
	}
	desc = INTERACTION_DETRACTOR
}
modifier = {
	add = -25
	scope:actor = {
		has_trait = fp3_struggle_detractor
	}
	scope:recipient = {
		has_trait = fp3_struggle_supporter
	}
	desc = INTERACTION_SUPPORTER
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = {
		value = 1
		if = {
			limit = {
				scope:actor = title:d_sunni.holder
			}
			multiply = 0
		}
	}
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = title:d_sunni.holder
	multiplier = {
		value = 0.5
		if = {
			limit = {
				scope:actor = title:d_sunni.holder
			}
			add = 0.5
		}
	}
}
modifier = {
	add = 25
	desc = ASK_FOR_CONVERSION_RECIPIENT_IS_ZEALOUS
	scope:actor = {
		has_trait = fp3_struggle_supporter
	}
	scope:recipient = {
		has_trait = zealous
	}
}
modifier = {
	add = 25
	desc = ASK_FOR_CONVERSION_RECIPIENT_IS_CYNICAL
	scope:actor = {
		has_trait = fp3_struggle_detractor
	}
	scope:recipient = {
		has_trait = cynical
	}
}
modifier = {
	add = 25
	desc = ASK_FOR_CONVERSION_RECIPIENT_IS_FICKLE
	scope:recipient = {
		has_trait = fickle
	}
}
modifier = {
	add = 15
	desc = HAS_LOYAL_TRAIT
	scope:recipient = {
		has_trait = disloyal
	}
}
modifier = {
	add = 15
	desc = HAS_DISLOYAL_TRAIT
	scope:recipient = {
		has_trait = loyal
	}
}
modifier = {
	add = 25
	desc = ASK_FOR_CONVERSION_RECIPIENT_IS_STUBBORN
	scope:recipient = {
		has_trait = stubborn
	}
}
modifier = {
	add = {
		value = scope:actor.diplomacy
		multiply = 5
	}
	desc = INTERACTION_DIPLOMACY_ACTOR
}
modifier = {
	add = {
		value = scope:recipient.diplomacy
		multiply = -3
	}
	desc = INTERACTION_DIPLOMACY_RECIPIENT
}

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

What happens

If they accept

If they refuse

  • 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

    Then

    • If

      • The target char: Highest held Title is more than Barony Rank
      • One of these

        • Highest held Title is at most Barony Rank
        • or

          highest_held_title_tier <= { value = scope:target_char.highest_held_title_tier subtract = 3 }
      • None of these

        • Is family of the target char
        • Is the target char’s consort
        • Any heir title:
          • tier >= { value = scope:target_char.highest_held_title_tier subtract = 2 }

      Then

      • If

        • Does not have the target char as grudge

        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

        Otherwise

        • Opinion: Grudge Exacerbated (-20)

      Else if

      • Has the target char as potential rival
      • Is an Adult
      • The target char: Is an Adult
      • 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

      Otherwise

      • If

        • 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
        • Does not have the target char as potential rival

        Then

        • set_relation_potential_rival = scope:target_char
      • If

        • NOT = { scope:rival_opinion = 0 }

        Then

        • If

          • The target char: Is played by the AI

          Then

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

    Otherwise

    • If

      • The target char: Highest held Title is more than Barony Rank
      • One of these

        • Highest held Title is at most Barony Rank
        • or

          highest_held_title_tier <= { value = scope:target_char.highest_held_title_tier subtract = 3 }
      • None of these

        • Is family of the target char
        • Is the target char’s consort
        • Any heir title:
          • tier >= { value = scope:target_char.highest_held_title_tier subtract = 2 }

      Then

      • If

        • Does not have the target char as grudge

        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

        Otherwise

        • Opinion: Grudge Exacerbated (-20)

      Else if

      • Has the target char as potential rival
      • Is an Adult
      • The target char: Is an Adult
      • 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
      • … (more in the script below)
    • … (more in the script below)

Options when sending

  • Use a Hook

• 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) (52 lines of game script)
is_available = any_character_struggle = {
	is_struggle_type = persian_struggle
}
trigger_if = {
	limit = {
		is_ai = yes
	}
	OR = {
		has_trait = fp3_struggle_detractor
		has_trait = fp3_struggle_supporter
	}
	primary_title.tier >= tier_duchy
}
is_shown = has_fp3_dlc_trigger = yes
exists = title:d_sunni.holder
scope:recipient != scope:actor
scope:actor = {
	OR = {
		AND = {
			has_trait = fp3_struggle_detractor
			scope:recipient = {
				has_trait = fp3_struggle_supporter
			}
		}
		AND = {
			has_trait = fp3_struggle_supporter
			scope:recipient = {
				has_trait = fp3_struggle_detractor
			}
		}
		AND = {
			OR = {
				has_trait = fp3_struggle_detractor
				has_trait = fp3_struggle_supporter
			}
			scope:recipient = {
				NOR = {
					has_trait = fp3_struggle_detractor
					has_trait = fp3_struggle_supporter
				}
			}
		}
	}
}
scope:recipient = {
	any_character_struggle = {
		is_struggle_type = persian_struggle
	}
	NOT = {
		this = title:d_sunni.holder
	}
}

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

Can be sent when (is_valid…) (73 lines of game script)
scope:recipient = {
	trigger_if = {
		limit = {
			has_trait = fp3_struggle_supporter
		}
		NOT = {
			is_allied_to = title:d_sunni.holder
		}
		NOT = {
			title:d_sunni.holder = {
				has_strong_hook = prev
			}
		}
		custom_tooltip = {
			text = fp3_change_allegiance.tt.recently_voluntarily_became_supporter
			OR = {
				NOT = {
					has_variable = last_explicit_friday_prayer_caliph
				}
				NOT = {
					var:last_explicit_friday_prayer_caliph = title:d_sunni.holder
				}
			}
		}
	}
	trigger_if = {
		limit = {
			has_trait = fp3_struggle_detractor
		}
		custom_tooltip = {
			text = fp3_change_allegiance.tt.recently_voluntarily_became_detractor
			OR = {
				NOT = {
					has_variable = last_explicit_friday_prayer_caliph
				}
				NOT = {
					var:last_explicit_friday_prayer_caliph = title:d_sunni.holder
				}
			}
		}
		custom_tooltip = {
			text = fp3_change_allegiance.tt.recently_forced_to_detractor
			OR = {
				NOT = {
					has_variable = last_explicit_defied_caliph
				}
				NOT = {
					var:last_explicit_defied_caliph = title:d_sunni.holder
				}
			}
		}
	}
	is_at_war = no
	custom_tooltip = {
		text = fp3_change_allegiance.tt.recently_changed_mind
		NOT = {
			has_character_flag = fp3_change_allegiance_recipient_cooldown
		}
	}
	custom_tooltip = {
		text = fp3_change_allegiance.tt.recently_refused
		NOT = {
			has_character_flag = fp3_change_allegiance_refused_cooldown
		}
	}
	custom_tooltip = {
		text = fp3_change_allegiance.tt.hof_is_d_sunni
		faith.religious_head ?= title:d_sunni.holder
	}
}
scope:actor = {
	is_available_adult = yes
}

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

Effects (on_send, on_accept, on_decline) (141 lines of game script)
on_accept = if = {
	limit = {
		always = scope:hook
	}
	scope:actor = {
		use_hook = scope:recipient
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:actor
	TARGET = scope:recipient
	VALUE = medium_unity_gain
	DESC = clan_unity_changed_alignment.desc
	REVERSE_NON_HOUSE_TARGET = no
}
scope:actor = {
	send_interface_toast = {
		type = event_toast_effect_good
		title = recipient_joined_your_side_title
		left_icon = scope:recipient
		scope:recipient = {
			if = {
				limit = {
					scope:actor = {
						has_trait = fp3_struggle_detractor
					}
				}
				if = {
					limit = {
						has_trait = fp3_struggle_supporter
					}
					remove_trait = fp3_struggle_supporter
				}
				add_trait_force_tooltip = fp3_struggle_detractor
				hidden_effect = {
					if = {
						limit = {
							scope:actor = {
								any_character_struggle = {
									involvement = involved
									phase_has_catalyst = catalyst_turn_supporter_into_detractor
								}
							}
						}
						every_character_struggle = {
							involvement = involved
							activate_struggle_catalyst = {
								catalyst = catalyst_turn_supporter_into_detractor
								character = scope:actor
							}
							log_debug_variable_for_persian_struggle_effect = {
								VAR = unrest_catalyst_turn_supporter_into_detractor
							}
						}
					}
				}
			}
			else = {
				if = {
					limit = {
						has_trait = fp3_struggle_detractor
					}
					remove_trait = fp3_struggle_detractor
				}
				add_trait_force_tooltip = fp3_struggle_supporter
				hidden_effect = {
					if = {
						limit = {
							scope:actor = {
								any_character_struggle = {
									involvement = involved
									phase_has_catalyst = catalyst_turn_detractor_into_supporter
								}
							}
						}
						every_character_struggle = {
							involvement = involved
							activate_struggle_catalyst = {
								catalyst = catalyst_turn_detractor_into_supporter
								character = scope:actor
							}
							log_debug_variable_for_persian_struggle_effect = {
								VAR = stabil_catalyst_turn_detractor_into_supporter
							}
						}
					}
				}
			}
		}
	}
}
scope:recipient = {
	set_variable = {
		name = fp3_change_allegiance_recipient_cooldown
		years = 20
	}
}
on_decline = add_clan_unity_interaction_effect = {
	CHARACTER = scope:actor
	TARGET = scope:recipient
	VALUE = medium_unity_loss
	DESC = clan_unity_refused_alignment.desc
	REVERSE_NON_HOUSE_TARGET = no
}
scope:actor = {
	if = {
		limit = {
			scope:actor = {
				has_trait = fp3_struggle_detractor
			}
		}
		send_interface_toast = {
			type = event_toast_effect_bad
			title = recipient_refused_to_join_your_side_title
			left_icon = scope:recipient
			progress_towards_rival_effect = {
				REASON = rival_rejected_switching_to_struggle_detractor
				CHARACTER = scope:recipient
				OPINION = default_rival_opinion
			}
		}
	}
	else = {
		send_interface_toast = {
			type = event_toast_effect_bad
			title = recipient_refused_to_join_your_side_title
			left_icon = scope:recipient
			progress_towards_rival_effect = {
				REASON = rival_rejected_switching_to_struggle_supporter
				CHARACTER = scope:recipient
				OPINION = default_rival_opinion
			}
		}
	}
}
scope:recipient = {
	set_variable = {
		name = fp3_change_allegiance_refused_cooldown
		years = 20
	}
}

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

Category
Diplomatic actions
Cost: Prestige
150
DLC
Legacy of Persia
In the menu
main list
ID
fp3_change_allegiance

Source: game/common/character_interactions/00_fp3_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?