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

Interaction · Hostile actions

Challenge to Duel

150PrestigeThe AI weighs it (the answer is partly random)

Challenge a non-Bureaucratic Character of Martial gender to a Duel, inflicting Stress if you win

What you need

You

To send it

  • You:
    • Is an Adult
    • Does not have the Trait: Pregnant
    • Does not have the Trait: Incapable
    • Does not have the Trait: Blind
    • Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux
    • NOT = { has_truce = scope:recipient }
    • Is not at war with the target
  • If

    Then

    • None of these

      • You: you has administrative government mechanic
      • The character you target: they has administrative government mechanic
      • The character you target:
        • is_liege_or_above_of = scope:actor
      • All of these

        • The character you target:
          • If

            a check the game hides

            Then

            • Their house: Has the house check as house head
        • exists = scope:actor.house
        • scope:recipient.house ?= scope:actor.house
  • Also needed: not imprisoned

To see it in the menu

The character you target

  • Is an Adult
  • Does not have the Trait: Pregnant
  • Does not have the Trait: Incapable
  • Does not have the Trait: Blind
  • Also needed: none of the traits Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux · not imprisoned

Challenge to Duel is a hostile character interaction in Crusader Kings III. You need: Is not imprisoned. The character you target needs: Is an Adult, Does not have the Trait: Pregnant, Does not have the Trait: Incapable and 3 more. The AI weighs it (the answer is partly random). Reasons the AI weighs include Rank Difference (+15), Rank Difference (+10), Rank Difference (+5) and 4 more. It costs 150 Prestige. Patch 1.20.1.2, from game/common/character_interactions/00_perk_interactions.txt.

for a guide, post or blog
Quick answers (3)
What are the requirements for Challenge to Duel in CK3?
You: Is not imprisoned. The character you target: Is an Adult, Does not have the Trait: Pregnant, Does not have the Trait: Incapable, Does not have the Trait: Blind, Has none of the traits: Consumption, Typhus, Bubonic Plague, Smallpox, Measles, Bloody Flux and Is not imprisoned. (patch 1.20.1.2)
How do I get the AI to accept Challenge to Duel?
The AI weighs it (the answer is partly random). Its reasons: Relative Prowess, Relative Prowess, Rank Difference +15, Rank Difference +10, Rank Difference +5, Rank Difference -10, Rank Difference -20, Rank Difference -30, They is your Nemesis +50 and Wants to decrease House Unity.
How much does Challenge to Duel cost?
150 Prestige (patch 1.20.1.2).

Will they accept?

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
Relative Prowess
when
  • root.prowess < scope:recipient.prowess
varies
Relative Prowess
when
  • scope:recipient.prowess < scope:actor.prowess
varies
Their personality (AI values: boldness (scripted), vengefulness (scripted), honor (scripted))varies
Rank Difference
when
  • tier_difference = { target = scope:recipient value >= 4 }
+15
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 3 }
+10
Rank Difference
when
  • tier_difference = { target = scope:recipient value = 2 }
+5
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -2 }
-10
Rank Difference
when
  • tier_difference = { target = scope:recipient value = -3 }
-20
Rank Difference
when
  • tier_difference = { target = scope:recipient value <= -4 }
-30
They is your Nemesis
when
  • The character you target: Has you as nemesis
+50
Wants to decrease House Unity
when
varies
Acceptance (ai_accept) (137 lines of game script)
base = 0
modifier = {
	desc = CTSC_RELATIVE_PROWESS
	scope:actor.prowess < scope:recipient.prowess
	add = {
		value = scope:recipient.prowess
		subtract = scope:actor.prowess
		multiply = 2
	}
}
modifier = {
	desc = CTSC_RELATIVE_PROWESS
	scope:recipient.prowess < scope:actor.prowess
	add = {
		value = scope:actor.prowess
		subtract = scope:recipient.prowess
		multiply = -2
	}
}
ai_value_modifier = {
	who = scope:recipient
	ai_boldness = {
		if = {
			limit = {
				scope:recipient = {
					ai_boldness > 0
					ai_rationality < 0
				}
			}
			value = 2
		}
		else_if = {
			limit = {
				scope:recipient = {
					NOT = {
						ai_boldness = 0
					}
				}
			}
			value = 1
		}
	}
	ai_vengefulness = {
		if = {
			limit = {
				scope:recipient = {
					NOT = {
						ai_vengefulness = 0
					}
				}
			}
			value = 0.75
		}
	}
	ai_honor = {
		if = {
			limit = {
				scope:recipient = {
					ai_honor > 0
				}
			}
			value = 0.5
		}
	}
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value >= 4
		}
	}
	add = 15
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value = 3
		}
	}
	add = 10
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value = 2
		}
	}
	add = 5
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value = -2
		}
	}
	add = -10
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value = -3
		}
	}
	add = -20
}
modifier = {
	desc = AI_REFUSAL_RANK_DIFFERENCE
	scope:actor = {
		tier_difference = {
			target = scope:recipient
			value <= -4
		}
	}
	add = -30
}
modifier = {
	desc = offer_vassalization_interaction_aibehavior_nemesis_tt
	trigger = {
		scope:recipient = {
			has_relation_nemesis = scope:actor
		}
	}
	add = 50
}
evaluate_action_decreasing_house_unity = {
	VALUE = 100
}

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

What happens

If they accept

  • A non-lethal Single Combat will commence immediately
  • The victor loses Stress
  • The loser gains Stress
  • If

    a check the game hides

    Then

    • clear_saved_scope = sc_finished
  • If

    • The sc attacker is not the sc defender

    Then

    • The sc attacker:
      • If

        • Does not have “temporary signature weapon” (a variable the game's script sets)
        • Any equipped character artifact:
          • artifact_slot_type = primary_armament
          • One of these

            • artifact_type = axe
            • or

              artifact_type = hammer
            • or

              artifact_type = spear
            • or

              artifact_type = mace
            • or

              artifact_type = dagger
            • or

              artifact_type = sword

        Then

        • One random equipped character artifact:
          • Where:
            • artifact_slot_type = primary_armament
            • One of these

              • artifact_type = axe
              • or

                artifact_type = hammer
              • or

                artifact_type = spear
              • or

                artifact_type = mace
              • or

                artifact_type = dagger
              • or

                artifact_type = sword
          • clear_saved_scope = equipped_signature_weapon
    • The sc defender:
      • If

        • Does not have “temporary signature weapon” (a variable the game's script sets)
        • Any equipped character artifact:
          • artifact_slot_type = primary_armament
          • One of these

            • artifact_type = axe
            • or

              artifact_type = hammer
            • or

              artifact_type = spear
            • or

              artifact_type = mace
            • or

              artifact_type = dagger
            • or

              artifact_type = sword

        Then

        • One random equipped character artifact:
          • Where:
            • artifact_slot_type = primary_armament
            • One of these

              • artifact_type = axe
              • or

                artifact_type = hammer
              • or

                artifact_type = spear
              • or

                artifact_type = mace
              • or

                artifact_type = dagger
              • or

                artifact_type = sword
          • clear_saved_scope = equipped_signature_weapon
    • The sc defender: Event single_combat.0001

    Otherwise

    • error_log = debug_log.single_combat_setup.attacker_and_defender_same_person
  • If

    • You › Your house:
      • One of these

        • House unity is harmonious
        • or

          House unity is friendly

    Then

    • 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 = { … }
    • This is due to your active House Unity Level

If they refuse

Events it fires: single_combat.0001

• 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) (54 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	any_relation = {
		type = rival
	}
	can_challenge_rival_to_single_combat_trigger = yes
	NOT = {
		has_trait = craven
	}
	is_imprisoned = no
	can_start_single_combat_trigger = yes
}
is_shown = scope:actor = {
	can_challenge_rival_to_single_combat_trigger = yes
}
OR = {
	scope:actor = {
		has_relation_rival = scope:recipient
	}
	AND = {
		scope:actor = {
			has_perk = stalwart_leader_perk
			government_has_flag = government_is_nomadic
		}
		scope:recipient = {
			government_has_flag = government_is_nomadic
			NOT = {
				is_close_family_of = scope:actor
			}
			can_be_combatant_based_on_gender_trigger = {
				ARMY_OWNER = scope:actor
			}
		}
	}
	AND = {
		scope:actor = {
			has_perk = stalwart_leader_perk
			culture ?= {
				has_cultural_parameter = stalwart_leader_non_admin_duels
			}
		}
		scope:recipient = {
			culture ?= {
				has_cultural_parameter = stalwart_leader_non_admin_duels
			}
			can_be_combatant_based_on_gender_trigger = {
				ARMY_OWNER = scope:actor
			}
		}
	}
}
scope:actor != scope:recipient

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

Can be sent when (is_valid…) (52 lines of game script)
rival_single_combat_shown_and_not_invalid_trigger = yes
scope:recipient = {
	can_start_single_combat_trigger = yes
}
scope:recipient = {
	custom_description = {
		text = fp1_tbc_recipient_banned_from_combat
		can_start_single_combat_banned_checks_trigger = no
	}
}
scope:actor = {
	is_imprisoned = no
}
scope:recipient = {
	is_imprisoned = no
}
trigger_if = {
	limit = {
		scope:actor.culture = {
			has_cultural_parameter = stalwart_leader_non_admin_duels
		}
		scope:recipient.culture = {
			has_cultural_parameter = stalwart_leader_non_admin_duels
		}
	}
	NOR = {
		scope:actor = {
			government_has_mechanic = administrative
		}
		scope:recipient = {
			government_has_mechanic = administrative
		}
		scope:recipient = {
			is_liege_or_above_of = scope:actor
		}
		AND = {
			scope:recipient = {
				is_house_head = yes
			}
			exists = scope:actor.house
			scope:recipient.house ?= scope:actor.house
		}
	}
}
scope:actor = {
	custom_description = {
		text = character_interactions_hostile_actions_disabled_delay
		NOT = {
			has_character_flag = flag_hostile_actions_disabled_delay
		}
	}
}

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

Effects (on_send, on_accept, on_decline) (70 lines of game script)
on_send = scope:actor = {
	add_character_flag = {
		flag = flag_hostile_actions_disabled_delay
		days = 10
	}
}
on_accept = scope:actor = {
	custom_tooltip = challenge_to_single_combat_interaction.enter_non_lethal_bout.tt
	custom_tooltip = challenge_to_single_combat_interaction.victor_gets.tt
	custom_tooltip = challenge_to_single_combat_interaction.loser_gets.tt
}
configure_start_single_combat_effect = {
	SC_INITIATOR = scope:actor
	SC_ATTACKER = scope:actor
	SC_DEFENDER = scope:recipient
	FATALITY = no
	FIXED = no
	LOCALE = terrain_scope
	OUTPUT_EVENT = perk_interaction.0101
	INVALIDATION_EVENT = perk_interaction.0102
}
if = {
	limit = {
		scope:actor = {
			exists = scope:actor.house
			house = {
				OR = {
					has_house_unity_stage = harmonious
					has_house_unity_stage = friendly
				}
			}
		}
	}
	add_clan_unity_interaction_effect = {
		CHARACTER = scope:actor
		TARGET = scope:recipient
		VALUE = medium_unity_loss
		DESC = clan_unity_challenge_to_combat.desc
		REVERSE_NON_HOUSE_TARGET = no
	}
	custom_description_no_bullet = {
		text = active_unity_level_description_tt
	}
}
on_decline = scope:actor = {
	send_interface_toast = {
		type = event_toast_effect_bad
		title = challenge_to_single_combat_interaction.challenge_rejected.t
		left_icon = scope:recipient
		right_icon = scope:actor
		scope:recipient = {
			add_prestige = medium_prestige_loss
		}
		show_as_tooltip = {
			add_prestige = medium_prestige_value
		}
	}
	hidden_effect = {
		add_prestige_no_experience = medium_prestige_value
	}
	hidden_effect = {
		remove_interaction_cooldown = challenge_to_single_combat_interaction
	}
	if = {
		limit = {
			has_character_flag = flag_hostile_actions_disabled_delay
		}
		remove_character_flag = flag_hostile_actions_disabled_delay
	}
}

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

Category
Hostile actions
Cost: Prestige
150
Cooldown
5 years
Again on the same character
after 10 years
In the menu
main list
ID
challenge_to_single_combat_interaction

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