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

Scripted effect

concubine_offer_on_accept_effect

concubine_offer_on_accept_effect = yes

game/common/scripted_effects/00_marriage_interaction_effects.txt, line 585 (302 lines). No parameters.

concubine_offer_on_accept_effect is a scripted effect in Crusader Kings III, written at line 585 of its file. It takes no parameters: concubine_offer_on_accept_effect = yes. The game's script calls it in 1 place, among them Offer Concubine (interaction). Its body carries 5 texts 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 to the previous one since this one involves one extra person (the one you give a concubine to)

What it does

  • If

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

    Then

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

      • If

        Then

        • this.concubinist = { … }
      • If

        • betrothed != scope:recipient

        Then

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

      • is_concubine_of = scope:actor

      Then

      • scope:actor:
        • remove_concubine = scope:secondary_recipient
  • If

    • scope:secondary_recipient:
      • One of these

        • Any consort:
        • or

          exists = betrothed

    Then

    • scope:actor:
      • If

        • scope:secondary_recipient:
          • is_consort_of = scope:spouse

        Then

        • … is … consort and therefore cannot become … concubine

        Otherwise

        • … is betrothed to … and therefore cannot become … concubine
    • scope:recipient:
      • If

        • scope:secondary_recipient:
          • is_consort_of = scope:spouse

        Then

        • … is … consort and therefore cannot become … concubine

        Otherwise

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

    Otherwise

    • scope:actor › scope:recipient:
      • make_concubine = scope:secondary_recipient
      • If

        • scope:secondary_recipient:
          • 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:recipient
            • or

              has_relation_soulmate = scope:recipient
          • If

            • is_female = yes

            Then

            • age < define:NChildbirth|MAX_FEMALE_REPRODUCTION_AGE

        Then

        Else if

        • scope:secondary_recipient:
          • 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:recipient
            • or

              has_relation_best_friend = scope:recipient
          • 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)
concubine_offer_on_accept_effect = {
	if = {
		limit = {
			scope:recipient = {
				has_opinion_modifier = {
					target = scope:actor
					modifier = offer_concubine_opinion
				}
			}
			scope:actor = { is_ai = no }
		}
		custom_tooltip = ALREADY_OFFERED_CONCUBINE_WARNING
	}

	scope:secondary_recipient = {
		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 = { 
						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_offered_as_concubine_title
							right_icon = scope:actor
							left_icon = scope:secondary_recipient
							show_as_tooltip = { scope:recipient = { make_concubine = scope:secondary_recipient } }
						}
					}

					# 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:recipient = { sex_same_as = scope:secondary_recipient }
								}
							}
						}
						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:recipient } }
				}
				every_spouse = {
					add_opinion = {
						target = scope:actor
						modifier = forced_spouse_concubine_marriage_opinion
					}
					divorce = scope:secondary_recipient # no additional opinion hit, no scripted effect
					save_scope_value_as = { # For tooltips in the coming event
						name = was_spouse
						value = yes
					}
					trigger_event = marriage_interaction.0043
				}
			}
					
			# 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:recipient } }
				}
				this.concubinist = {
					if = {
						limit = {
							this != scope:actor
						}
						add_opinion = {
							target = scope:actor
							modifier = stole_concubine_opinion
						}
						remove_concubine = scope:secondary_recipient # no additional opinion hit, no scripted effect
						save_scope_value_as = { # For tooltips in the coming event
							name = was_concubine
							value = yes
						}
						trigger_event = marriage_interaction.0043
					}
					else = {
						remove_concubine = scope:secondary_recipient # no additional opinion hit, no scripted effect
					}
				}

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

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

Where it is used

Every place in common/, events/ and history/ that calls concubine_offer_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?