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

Scripted effect

demand_concubine_interaction_on_accept_effect

demand_concubine_interaction_on_accept_effect = yes

game/common/scripted_effects/00_marriage_interaction_effects.txt, line 889 (222 lines). No parameters.

demand_concubine_interaction_on_accept_effect is a scripted effect in Crusader Kings III, written at line 889 of its file. It takes no parameters: demand_concubine_interaction_on_accept_effect = yes. The game's script calls it in 1 place, among them Demand Concubine (interaction). Its body carries 1 text of the game's own for the player. Patch 1.20.1.2, from game/common/scripted_effects/00_marriage_interaction_effects.txt.

The comment above it in the file

This effect has some small differences AGAIN to the previous one since this one has some roles reversed

What it does

  • If

    • scope:actor:
      • has_opinion_modifier = { target = scope:recipient modifier = offer_concubine_opinion }
    • scope:recipient: Is played by a person

    Then

    • You have already offered a Concubine to …, sending another one will override the existing Opinion modifier!
  • scope:secondary_actor:
    • 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

          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

      • NOT = { betrothed = scope:actor }

      Then

      • break_betrothal = betrothed
    • If number of concubines more than 0 › Every concubine › scope:secondary_actor:
      • remove_concubine = prev
    • If

      • is_concubine_of = scope:recipient

      Then

      • scope:recipient:
        • remove_concubine = scope:secondary_actor
  • scope:actor › scope:actor:
    • make_concubine = scope:secondary_actor
    • If

      • scope:secondary_actor:
        • One of these

          • Has the Trait: Handsome
          • or

            Has the Trait: Beautiful
          • or

            Num of good genetic traits more than 1
          • or

            has_relation_lover = scope:actor
          • or

            has_relation_soulmate = scope:actor
        • If

          • is_female = yes

          Then

          • age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE

      Then

      Else if

      • scope:secondary_actor:
        • One of these

          • Not: Is Lowborn
          • or

            Has the Trait: Comely
          • or

            Num of good genetic traits more than 0
          • or

            has_relation_friend = scope:actor
          • or

            has_relation_best_friend = scope:actor
        • If

          • is_female = yes

          Then

          • age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE

      Then

      Otherwise

• the game's own tooltip text · ◦ our reading of the script line · code the script where neither exists

“They” is whatever it runs on (the scope it is called in). The scripted triggers and effects it calls link to their own pages; $PARAMETERS$ stay as written: each call fills them in.

The script as written (120 lines of game script)
demand_concubine_interaction_on_accept_effect = {
	if = {
		limit = {
			scope:actor = {
				has_opinion_modifier = {
					target = scope:recipient
					modifier = offer_concubine_opinion
				}
			}
			scope:recipient = { is_ai = no }
		}
		custom_tooltip = ALREADY_OFFERED_CONCUBINE_WARNING
	}

	scope:secondary_actor = {
		save_scope_as = concubine_victim
		trigger_event = marriage_interaction.0040
		if = {
			# Victim is angry for being forced into concubinage.
			limit = {
				is_imprisoned = yes
			}
			add_character_flag = {
				flag = block_release_from_prison_event
				days = 3
			}
			release_from_prison = yes
			add_opinion = {
				target = scope:actor
				modifier = forced_me_concubine_marriage_opinion
			}
		}
		
		# Family members of victim are also angry that you've forced them into concubinage.
		every_close_family_member = {
			if = {
				limit = { 
					NOT = { this = scope:actor } # Don't hate yourself.
				}
				add_opinion = {
					target = scope:actor
					modifier = forced_family_concubine_marriage_opinion
				}
				hidden_effect = {
					send_interface_message = {
						type = msg_family_became_concubine
						title = msg_close_family_member_taken_as_concubine_title
						right_icon = scope:actor
						left_icon = scope:secondary_actor
						show_as_tooltip = { scope:actor = { make_concubine = scope:secondary_actor } }
					}
				}

				# Family members are even *more* angry if they don't believe in concubines/polyamory (different from polygamy). Also if they don't accept same-sex relationships
				if = {
					limit = { 
						OR = {
							NOT = { rite = { rite_has_doctrine = doctrine_concubines } }
							NOT = { rite = { rite_has_tenet = tenet_polyamory } }
							AND = {
								allowed_to_marry_same_sex_trigger = no
								scope:actor = { sex_same_as = scope:secondary_actor }
							}
						}
					}
					add_opinion = {
						target = scope:actor
						modifier = relative_in_blasphemous_union_opinion
					}
				}
			}
		}
				
		# Spouses, if any exist, are also furious.
		if = {
			limit = {
				is_married = yes
				#A check to make sure you haven't somehow married them during the consideration time
				NOT = { any_spouse = { this = scope:actor } }
			}
			every_spouse = {
				if = {
					limit = {
						NOT = {
							this = scope:actor
						}
					}
					add_opinion = {
						target = scope:actor
						modifier = forced_spouse_concubine_marriage_opinion
					}
				}
				divorce = scope:secondary_actor # no additional opinion hit, no scripted effect
				save_scope_value_as = { # For tooltips in the coming event
					name = was_spouse
					value = yes
				}
			}
		}
				
		# Stealing concubines pisses the former concubinist off.
		if = {
			limit = {
				is_concubine = yes
				#A check to make sure you haven't somehow gotten them as concubine during the consideration time
				NOT = { any_consort = { this = scope:actor } }
			}
			this.concubinist = {
				if = {
					limit = {
						NOT = {
							this = scope:actor
						}
					}
					add_opinion = {
						target = scope:actor
						modifier = stole_concubine_opinion
					}
				}
				remove_concubine = scope:secondary_actor # no additional opinion hit, no scripted effect

As written in game/common/scripted_effects/00_marriage_interaction_effects.txt.

The first 120 of its 222 lines; the rest is in game/common/scripted_effects/00_marriage_interaction_effects.txt from line 889.

Where it is used

Every place in common/, events/ and history/ that calls demand_concubine_interaction_on_accept_effect.

Character interactions (1)

Source: game/common/scripted_effects/00_marriage_interaction_effects.txt and every file of common/, events/ and history/ that calls it, Crusader Kings III 1.20.1.2.

Spotted a mistake on this page?