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

Demand Concubine

No costThe AI weighs it

Demand a Concubine from your Tributary (or Subject if Nomadic) the recipient

What you need

You

To send it

  • allowed_more_concubines = yes
  • … does not have any valid Concubines
  • Also needed: available (an adult, not imprisoned, not incapable)

To see it in the menu

  • allowed_concubines = yes
  • If played by the AI:
    • Any tributary:
    • One of these

  • Your government does not have the government has merit flag
  • Your government does not have the government is mandala flag

The character you target

  • One of these

    • If

      Then

      • Is a vassal of you
    • or

      Is a tributary of you

Which character you can pick

Demand Concubine is a vassal character interaction in Crusader Kings III. You need: Is available (an adult, not imprisoned, not incapable). The AI weighs it. Reasons the AI weighs include The recipient is Obedient to you (+1,000), Intimidated by you (+25), Terrified of you (+50) and 8 more. Patch 1.20.1.2, from game/common/character_interactions/00_tributary_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Demand Concubine in CK3?
You: Is available (an adult, not imprisoned, not incapable). (patch 1.20.1.2)
How do I get the AI to accept Demand Concubine?
The AI weighs it. Its reasons: The recipient is Obedient to you +1,000, Intimidated by you +25, Terrified of you +50, … Opinion of …, The character you send is a Councillor or holds a Court Position -25, The character you send is a Knight -15, The character you send has an Inspiration -50, The character you send is my Family Member -25, The character you send is my Friend -50, The character you send is my Spouse -50, The character you send is my Child -50 and The character you send is my Rival +1,000.

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
Base0
The recipient is Obedient to you
when
  • The character you target: Is obedient to you
+1,000
Intimidated by you
when
  • The character you target:
    • has_dread_level_towards = { target = scope:actor level = 1 }
+25
Terrified of you
when
  • The character you target:
    • has_dread_level_towards = { target = scope:actor level = 2 }
+50
… Opinion of …varies
The character you send is a Councillor or holds a Court Position
when
  • The character you send:
    • One of these

-25
The character you send is a Knight
when
  • The character you send:
    • is_knight = yes
-15
The character you send has an Inspiration-50
The character you send is my Family Member
when
  • The character you send: Is family of the target
-25
The character you send is my Friend
when
  • The character you send: Has the target as friend
-50
The character you send is my Spouse
when
  • The character you send: Is the target’s consort
-50
The character you send is my Child
when
  • The character you send: Is a child of the target
-50
The character you send is my Rival
when
  • The character you send: Has the target as rival
+1,000
Acceptance (ai_accept) (91 lines of game script)
base = 0
modifier = {
	add = 1000
	scope:recipient = {
		is_obedient_to = scope:actor
	}
	desc = AI_OBEDIENT_REASON
}
modifier = {
	add = 25
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 1
		}
	}
	desc = INTIMIDATED_REASON
}
modifier = {
	add = 50
	scope:recipient = {
		has_dread_level_towards = {
			target = scope:actor
			level = 2
		}
	}
	desc = COWED_REASON
}
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = 1.0
	desc = AI_OPINION_REASON
}
modifier = {
	add = -25
	scope:secondary_actor = {
		OR = {
			is_councillor = yes
			has_any_court_position = yes
		}
	}
	desc = AI_EMPLOYED_COURTIER_REASON
}
modifier = {
	add = -15
	scope:secondary_actor = {
		is_knight = yes
	}
	desc = AI_IS_KNIGHT_REASON
}
modifier = {
	add = -50
	exists = scope:secondary_actor.inspiration
	desc = AI_INSPIRED_REASON
}
modifier = {
	add = -25
	scope:secondary_actor = {
		is_close_or_extended_family_of = scope:recipient
	}
	desc = AI_FAMILY_REASON
}
modifier = {
	add = -50
	scope:secondary_actor = {
		has_relation_friend = scope:recipient
	}
	desc = AI_FRIEND_REASON
}
modifier = {
	add = -50
	scope:secondary_actor = {
		is_consort_of = scope:recipient
	}
	desc = AI_SPOUSE_REASON
}
modifier = {
	add = -50
	scope:secondary_actor = {
		is_child_of = scope:recipient
	}
	desc = AI_CHILD_REASON
}
modifier = {
	add = 1000
	scope:secondary_actor = {
		has_relation_rival = scope:recipient
	}
	desc = AI_RIVAL_REASON
}

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

What happens

If they accept

  • The character you target:
    • If

      • The character you send:
        • Is not the target’s consort
        • Is not family of the target

      Then

      • Opinion: Upset (-15)

      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
        • 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
      • Opinion: Upset (-50)
      • clear_saved_scope = secondary_actor
  • If

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

    Then

    • You have already offered a Concubine to …, sending another one will override the existing Opinion modifier!
  • The character you send:
    • 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 = { }
              • You:
                • sex_same_as = scope:secondary_actor

          Then

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

      • Is married
      • No spouse:

      Then

      • Every spouse:
        • If

          a check the game hides

          Then

        • divorce = scope:secondary_actor
    • If

      Then

      • this.concubinist = { … }
    • If

      • Is not betrothed to you

      Then

      • break_betrothal = betrothed
    • If number of concubines more than 0 › Every concubine › The character you send:
      • remove_concubine = prev
    • If

      • Is the target’s concubine

      Then

      • The character you target:
        • remove_concubine = scope:secondary_actor
  • You: … (more in the script below)

If they refuse

  • … refused to hand over … to …
  • Opinion: Upset (-15)

Events it fires: marriage_interaction.0040

• 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) (31 lines of game script)
is_available = allowed_concubines = yes
trigger_if = {
	limit = {
		is_ai = yes
	}
	any_tributary = { }
	OR = {
		ai_honor <= 0
		has_trait = lustful
	}
}
is_shown = scope:actor != scope:recipient
scope:actor = {
	NOR = {
		government_has_flag = government_has_merit
		government_has_flag = government_is_mandala
	}
}
scope:recipient = {
	OR = {
		trigger_if = {
			limit = {
				scope:actor = {
					government_has_flag = government_is_nomadic
				}
			}
			is_vassal_of = scope:actor
		}
		is_tributary_of = scope:actor
	}
}

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

Can be sent when (is_valid…) (20 lines of game script)
scope:actor = {
	allowed_more_concubines = yes
	is_physically_able_adult = yes
}
custom_tooltip = {
	text = must_have_valid_concubine_tt
	scope:recipient = {
		any_courtier = {
			is_physically_able_adult = yes
			is_ruler = no
			could_marry_character_trigger = {
				CHARACTER = scope:actor
			}
			NOT = {
				has_character_flag = has_been_offered_as_concubine
			}
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (56 lines of game script)
on_send = scope:secondary_actor = {
	add_character_flag = {
		flag = has_been_offered_as_concubine
		days = 5
	}
}
on_accept = scope:recipient = {
	if = {
		limit = {
			scope:secondary_actor = {
				NOR = {
					is_consort_of = scope:recipient
					is_close_or_extended_family_of = scope:recipient
				}
			}
		}
		add_opinion = {
			target = scope:actor
			modifier = upset_opinion
			opinion = -15
		}
	}
	else = {
		scope:secondary_actor = {
			save_scope_as = relationship_reason_involved_character
		}
		progress_towards_rival_effect = {
			REASON = rival_demanded_concubine
			CHARACTER = scope:actor
			OPINION = 0
		}
		add_opinion = {
			target = scope:actor
			modifier = upset_opinion
			opinion = -50
		}
		clear_saved_scope = secondary_actor
	}
}
demand_concubine_interaction_on_accept_effect = yes
on_decline = scope:actor = {
	send_interface_toast = {
		type = event_toast_effect_bad
		title = msg_concubine_demand_rejected_title
		right_icon = scope:recipient
		left_icon = scope:secondary_actor
		custom_tooltip = msg_courtier_demand_rejected
	}
}
scope:actor = {
	add_opinion = {
		target = scope:recipient
		modifier = upset_opinion
		opinion = -15
	}
}

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

Category
Vassal actions
Again on the same character
after 3 years
In the menu
under More…
ID
demand_concubine_interaction

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