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

Offer Concubine

No costThe AI weighs it

Offer a Concubine to the recipient

What you need

You

To send it

To see it in the menu

  • If played by the AI:
    • allowed_concubines = yes
    • Does not have the Trait: Greedy
    • Ai greed at most 75
    • Is an Adult
    • Is at not War
    • Is not incapable

The character you target

  • Their government is not unplayable
  • allowed_concubines = yes
  • Is an Adult

Which character you can pick

Offer Concubine is a diplomatic character interaction in Crusader Kings III. The AI weighs it. Reasons the AI weighs include The character you send is Noble (+50), Your Candidate is Lowborn with no positive Congenital Traits (-50), The recipient's Faith does not accept Same-Sex Relations (-1,000) and 18 more. Patch 1.20.1.2, from game/common/character_interactions/00_marriage_interactions.txt.

for a guide, post or blog
Quick answers (1)
How do I get the AI to accept Offer Concubine?
The AI weighs it. Its reasons: Positive Congenital Traits, The character you send is Noble +50, Negative Congenital Traits, Your Candidate is Lowborn with no positive Congenital Traits -50, … Opinion of …, … Opinion of …, Age Considerations, The recipient's Faith does not accept Same-Sex Relations -1,000, The recipient has no Heir, and the union will have no Fertility -200, The recipient is attracted to the other character +50, You … their Liege +40, Rank Difference +20, Rank Difference +30, Rank Difference +40, Rank Difference +50, Rank Difference +60, Rank Difference -20, Rank Difference -30, Rank Difference -40, Rank Difference -50, Rank Difference -60, Intimidated by you, Terrified of you, Intimidated by you, Terrified of you, The character you send has a sexually transmitted disease -250, The character you send has a contagious disease -250, The character you send is infertile -5,000, Weak Hook used +500, Strong Hook used +1,000 and Wants to increase House Unity.

Will they accept?

The AI adds these up and accepts above zero. Reasons in italics are the script's, with no label in the game.

ReasonAmount
Base+50
Positive Congenital Traits
when
  • The other character:
    • Num of good genetic traits more than 0
    • If

      • is_female = yes

      Then

      • Not all of these

varies
The character you send is Noble
when
  • The other character:
    • Not: Is Lowborn
    • If

      • is_female = yes

      Then

      • Not all of these

+50
Negative Congenital Traits
when
  • The other character:
    • Num of bad genetic traits more than 0
    • If

      • is_female = yes

      Then

      • Not all of these

varies
Your Candidate is Lowborn with no positive Congenital Traits
when
  • The other character:
    • Is Lowborn
    • num_of_good_genetic_traits = 0
    • If

      • is_female = yes

      Then

      • Not all of these

-50
… Opinion of …varies
… Opinion of …varies
Age Considerations
when
  • step = 1
  • offset = -29
  • The other character:
    • Not all of these

    • is_female = yes
age
The recipient's Faith does not accept Same-Sex Relations
when
  • The character you target:
    • Not all of these

      • Game rule set to “Accepted”
      • Their rite: The rite has Same-sex relationships are fully accepted
    • sex_same_as = scope:secondary_recipient
-1,000
The recipient has no Heir, and the union will have no Fertility
when
  • The character you target:
    • Game rule set to “Accepted”
    • Their rite: The rite has Same-sex relationships are fully accepted
    • sex_same_as = scope:secondary_recipient
    • If

      • None of these

        • Any consort:
          • sex_opposite_of = scope:recipient
          • Fertility more than 0.1

      Then

      • Any child: Is your player heir

      Otherwise

      • Never
-200
The recipient is attracted to the other character
when
  • The character you target:
    • is_attracted_to_gender_of = scope:secondary_recipient
+50
You … their Liege
when
  • Is landed
  • The character you target:
    • Is landed
    • Is a vassal (or below) of you
+40
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 1 }
+20
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 2 }
+30
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 3 }
+40
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 4 }
+50
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 5 }
+60
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -1 }
-20
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -2 }
-30
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -3 }
-40
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -4 }
-50
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -5 }
-60
Intimidated by you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 1 }
intimidated_reason_value
Terrified of you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 2 }
cowed_reason_value
Intimidated by you
when
  • The character you target:
    • Is not a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 1 }
intimidated_external_reason_value
Terrified of you
when
  • The character you target:
    • Is not a vassal (or below) of you
    • has_dread_level_towards = { target = scope:puppet_or_actor level = 2 }
cowed_external_reason_value
The character you send has a sexually transmitted disease
when
-250
The character you send has a contagious disease
when
  • The other character: Has one of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux, Holy Fire
-250
The character you send is infertile
when
  • The other character: Fertility at most 0
-5,000
Weak Hook used
when
+500
Strong Hook used
when
+1,000
Wants to increase House Unity
when
varies
Acceptance (ai_accept) (297 lines of game script)
base = 50
modifier = {
	add = {
		value = 50
		multiply = scope:secondary_recipient.num_of_good_genetic_traits
	}
	scope:secondary_recipient = {
		num_of_good_genetic_traits > 0
		trigger_if = {
			limit = {
				is_female = yes
			}
			is_aging_character = no
		}
	}
	desc = AI_POSITIVE_TRAIT_REASON
}
modifier = {
	add = {
		value = 50
	}
	scope:secondary_recipient = {
		is_lowborn = no
		trigger_if = {
			limit = {
				is_female = yes
			}
			is_aging_character = no
		}
	}
	desc = AI_DYNASTY_PRESTIGE_REASON_NOBLE
}
modifier = {
	add = {
		value = -50
		multiply = scope:secondary_recipient.num_of_bad_genetic_traits
	}
	scope:secondary_recipient = {
		num_of_bad_genetic_traits > 0
		trigger_if = {
			limit = {
				is_female = yes
			}
			is_aging_character = no
		}
	}
	desc = AI_NEGATIVE_TRAIT_REASON
}
modifier = {
	add = {
		value = -50
	}
	scope:secondary_recipient = {
		is_lowborn = yes
		num_of_good_genetic_traits = 0
		trigger_if = {
			limit = {
				is_female = yes
			}
			is_aging_character = no
		}
	}
	desc = AI_DYNASTY_PRESTIGE_REASON_LOWBORN_NO_POSITIVE_TRAIT
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:puppet_or_actor
	multiplier = 1.0
	desc = AI_OPINION_REASON
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:secondary_recipient
	multiplier = 0.25
	desc = AI_OPINION_REASON
}
compare_modifier = {
	trigger = {
		scope:secondary_recipient = {
			is_young_character = no
			is_female = yes
		}
	}
	target = scope:secondary_recipient
	value = age
	multiplier = -5.0
	step = 1
	offset = -29
	desc = MARRY_AGE
}
modifier = {
	add = -1000
	scope:recipient = {
		allowed_to_marry_same_sex_trigger = no
		sex_same_as = scope:secondary_recipient
	}
	desc = SAME_SEX_MARRIAGE_FAITH_REASON_RECIPIENT
}
modifier = {
	add = -200
	scope:recipient = {
		allowed_to_marry_same_sex_trigger = yes
		sex_same_as = scope:secondary_recipient
		trigger_if = {
			limit = {
				NOT = {
					any_consort = {
						can_have_children_with = {
							CHARACTER = scope:recipient
						}
						fertility > 0.1
					}
				}
			}
			any_child = {
				is_player_heir_of = root
			}
		}
		trigger_else = {
			always = no
		}
	}
	desc = AI_NO_FERTILITY_REASON
}
modifier = {
	add = 50
	scope:recipient = {
		is_attracted_to_gender_of = scope:secondary_recipient
	}
	desc = AI_ATTRACTION_REASON
}
modifier = {
	add = 40
	scope:puppet_or_actor = {
		is_landed = yes
	}
	scope:recipient = {
		is_landed = yes
		target_is_liege_or_above = scope:puppet_or_actor
	}
	desc = LIEGE_REASON
}
modifier = {
	add = 20
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = 1
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = 30
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = 2
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = 40
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = 3
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = 50
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = 4
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = 60
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = 5
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = -20
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = -1
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = -30
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = -2
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = -40
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = -3
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = -50
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = -4
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = -60
	scope:puppet_or_actor = {
		tier_difference = {
			target = scope:recipient
			value = -5
		}
	}
	desc = AI_RANK_DIFF
}
modifier = {
	add = intimidated_reason_value
	scope:recipient = {
		target_is_liege_or_above = scope:puppet_or_actor
		has_dread_level_towards = {
			target = scope:puppet_or_actor
			level = 1
		}
	}
	desc = INTIMIDATED_REASON
}
modifier = {
	add = cowed_reason_value
	scope:recipient = {
		target_is_liege_or_above = scope:puppet_or_actor
		has_dread_level_towards = {
			target = scope:puppet_or_actor
			level = 2
		}
	}
	desc = COWED_REASON
}
modifier = {
	add = intimidated_external_reason_value
	scope:recipient = {
		NOT = {
			target_is_liege_or_above = scope:puppet_or_actor
		}
		has_dread_level_towards = {
			target = scope:puppet_or_actor
			level = 1
		}
	}
	desc = INTIMIDATED_REASON
}
modifier = {
	add = cowed_external_reason_value
	scope:recipient = {
		NOT = {
			target_is_liege_or_above = scope:puppet_or_actor
		}
		has_dread_level_towards = {
			target = scope:puppet_or_actor
			level = 2
		}
	}
	desc = COWED_REASON
}
modifier = {
	add = -250
	scope:secondary_recipient = {
		has_std_trigger = yes
	}
	desc = 
# … (cut here; the rest is in the file)

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

What happens

If they accept

  • If

    • The character you target: Has the opinion “Received Concubine” of you
    • You: Is played by a person

    Then

    • You have already offered a Concubine to …, sending another one will override the existing Opinion modifier!
  • The other character:
    • Event marriage_interaction.0040
    • If imprisoned:
      • release_from_prison = yes
      • Opinion: Forced Me to Serve as a Concubine
      • Every close family member:
        • If

          a check the game hides

          Then

          • Opinion: Forced My Relative to Serve as a Concubine
          • If

            • One of these

              • None of these

              • or

                None of these

                • Their rite: The rite has the tenet Polyamory
              • or

                All of these

                • allowed_to_marry_same_sex_trigger = { }
                • The character you target:
                  • sex_same_as = scope:secondary_recipient

            Then

            • Opinion: Forced My Relative into a Blasphemous Union
      • If

        • Is married
        • No spouse:

        Then

      • If

        Then

        • this.concubinist = { … }
      • If

        • betrothed != scope:recipient

        Then

      • If number of concubines more than 0 › Every concubine › The other character:
        • remove_concubine = prev
    • If

      • Is your concubine

      Then

      • You:
        • remove_concubine = scope:secondary_recipient
  • If

    • The other character:
      • One of these

        • Any consort:
        • or

          exists = betrothed

    Then

    • You:
      • If

        • The other character: Is the spouse’s consort

        Then

        • … is … consort and therefore cannot become … concubine

        Otherwise

        • … is betrothed to … and therefore cannot become … concubine
    • The character you target:
      • If

        • The other character: Is the spouse’s consort

        Then

        • … is … consort and therefore cannot become … concubine

        Otherwise

        • … is betrothed to … and therefore cannot become … concubine

    Otherwise

    • You › The character you target:
      • make_concubine = scope:secondary_recipient
      • If

        • The other character:
          • One of these

            • Has the Trait: Handsome
            • or

              Has the Trait: Beautiful
            • or

              Num of good genetic traits more than 1
            • or

              Has the target as lover
            • or

              Has the target as soulmate
          • If

            • is_female = yes

            Then

            • age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE

        Then

        Else if

        • The other character:
          • One of these

            • Not: Is Lowborn
            • or

              Has the Trait: Comely
            • or

              Num of good genetic traits more than 0
            • or

              Has the target as friend
            • or

              Has the target as best friend
          • If

            • is_female = yes

            Then

            • age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE

        Then

        Otherwise

  • 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: … (more in the script below)
  • … (more in the script below)

If they refuse

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

Options when sending

  • Use a Hook

Events it fires: marriage_interaction.0040, marriage_interaction.0043

• 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) (21 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	allowed_concubines = yes
	NOR = {
		has_trait = greedy
		ai_greed > very_high_positive_ai_value
	}
	is_adult = yes
	is_at_war = no
	is_incapable = no
}
is_shown = scope:puppet_or_actor != scope:recipient
scope:recipient = {
	NOT = {
		government_has_flag = government_is_herder
	}
	allowed_concubines = yes
	is_adult = yes
}

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

Can be sent when (is_valid…) (48 lines of game script)
custom_description = {
	text = take_concubine_available_character_opp
	object = scope:recipient
	scope:puppet_or_actor = {
		OR = {
			any_courtier = {
				can_be_offered_as_concubine_to_character_trigger = {
					GIVER = scope:puppet_or_actor
					CHARACTER = scope:recipient
				}
			}
			any_prisoner = {
				can_be_offered_as_concubine_to_character_trigger = {
					GIVER = scope:puppet_or_actor
					CHARACTER = scope:recipient
				}
			}
		}
	}
}
custom_description = {
	text = take_concubine_allowed_more
	object = scope:recipient
	scope:recipient = {
		allowed_more_concubines = yes
	}
}
trigger_if = {
	limit = {
		scope:puppet_or_actor = {
			is_landless_adventurer = yes
		}
	}
	ep3_laamp_diplo_range_trigger = {
		TARGET = scope:recipient
		LAAMP = scope:puppet_or_actor
	}
}
custom_description = {
	text = character_unavailable_to_be_offered_as_concubine
	object = scope:secondary_recipient
	scope:secondary_recipient = {
		can_be_offered_as_concubine_to_character_trigger = {
			GIVER = scope:puppet_or_actor
			CHARACTER = scope:recipient
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (30 lines of game script)
on_send = scope:secondary_recipient = {
	add_character_flag = {
		flag = has_been_offered_as_concubine
		days = 5
	}
}
on_accept = concubine_offer_on_accept_effect = yes
add_clan_unity_interaction_effect = {
	CHARACTER = scope:puppet_or_actor
	TARGET = scope:recipient
	VALUE = minor_unity_gain
	DESC = clan_unity_concubinage_offer.desc
	REVERSE_NON_HOUSE_TARGET = no
}
on_decline = scope:puppet_or_actor = {
	send_interface_toast = {
		type = event_toast_effect_bad
		title = msg_concubine_offer_rejected_title
		right_icon = scope:recipient
		left_icon = scope:secondary_recipient
		custom_tooltip = msg_concubine_offer_rejected
	}
}
add_clan_unity_interaction_effect = {
	CHARACTER = scope:puppet_or_actor
	TARGET = scope:recipient
	VALUE = medium_unity_loss
	DESC = clan_unity_concubinage_offer_decline.desc
	REVERSE_NON_HOUSE_TARGET = no
}

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

Category
Diplomatic actions
In the menu
under More…
ID
offer_concubine

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