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

Interaction · Friendly actions

Ward's Martial Drill

No costKhans of the SteppeThe AI weighs it (the answer is partly random)

Pass a Commander Trait on to your Ward

What you need

You

To send it

  • Is an Adult
  • Number of commander traits at least 1
  • Also needed: not imprisoned · available (not imprisoned, not incapable)

To see it in the menu

  • If played by the AI: Relation (at least 1):

The character you target

To send it

  • Is at least 10 years old
  • Number of commander traits at most 1
  • Also needed: available (not imprisoned, not incapable)

To see it in the menu

  • Is played by the AI
  • Is a child
  • One of these

    • You: Has the target as ward
    • or

      is_hostage_of = scope:actor

Ward's Martial Drill is a friendly character interaction in Crusader Kings III. You need: Is an Adult, Number of commander traits at least 1, Is not imprisoned and 1 more. The character you target needs: Is at least 10 years old, Number of commander traits at most 1 and Is available (not imprisoned, not incapable). The AI weighs it (the answer is partly random). Reasons the AI weighs include You have Groomed to Rule (+20), Personal Champion (+10), The recipient has compatible Childhood Trait (+15) and 2 more. It needs Khans of the Steppe. Patch 1.20.1.2, from game/common/character_interactions/09_mpo_interactions.txt.

for a guide, post or blog
Quick answers (2)
What are the requirements for Ward's Martial Drill in CK3?
You: Is an Adult, Number of commander traits at least 1, Is not imprisoned and Is available (not imprisoned, not incapable). The character you target: Is at least 10 years old, Number of commander traits at most 1 and Is available (not imprisoned, not incapable). (patch 1.20.1.2)
How do I get the AI to accept Ward's Martial Drill?
The AI weighs it (the answer is partly random). Its reasons: … Opinion of …, You have Groomed to Rule +20, We have Traits in common, We have opposite Traits, Has Martial Skill, Has Prowess Skill, Personal Champion +10, The recipient has compatible Childhood Trait +15, The recipient has incompatible Childhood Trait -15, Intimidated by you, Terrified of you and The recipient already has Commander Traits -50.

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
… Opinion of …varies
You have Groomed to Rule
when
+20
We have Traits in common
when
  • number_of_personality_traits_in_common = { target = scope:recipient value >= 1 }
varies
We have opposite Traits
when
  • The character you target:
    • number_of_opposing_personality_traits = { target = scope:actor value >= 1 }
varies
Has Martial Skillyour martial × 0.5
Has Prowess Skillyour prowess × 0.5
Personal Champion+10
The recipient has compatible Childhood Trait+15
The recipient has incompatible Childhood Trait-15
Intimidated by you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:actor level = 1 }
intimidated_halved_reason_value
Terrified of you
when
  • The character you target:
    • Is a vassal (or below) of you
    • has_dread_level_towards = { target = scope:actor level = 2 }
cowed_halved_reason_value
The recipient already has Commander Traits
when
  • The character you target: Number of commander traits at least 1
-50
Acceptance (ai_accept) (319 lines of game script)
base = 0
opinion_modifier = {
	who = scope:recipient
	opinion_target = scope:actor
	multiplier = 0.5
	desc = AI_OPINION_REASON
}
modifier = {
	desc = influence_children_groomed_to_rule_perk_tt
	trigger = {
		scope:actor = {
			has_perk = groomed_to_rule_perk
		}
	}
	add = groomed_to_rule_value
}
modifier = {
	add = {
		value = 5
		if = {
			limit = {
				number_of_personality_traits_in_common = {
					target = scope:recipient
					value = 2
				}
			}
			multiply = 2
		}
		else_if = {
			limit = {
				number_of_personality_traits_in_common = {
					target = scope:recipient
					value = 3
				}
			}
			multiply = 3
		}
	}
	number_of_personality_traits_in_common = {
		target = scope:recipient
		value >= 1
	}
	desc = we_are_alike_tt
}
modifier = {
	add = {
		value = -5
		if = {
			limit = {
				scope:recipient = {
					number_of_opposing_personality_traits = {
						target = scope:actor
						value = 2
					}
				}
			}
			multiply = 2
		}
		else_if = {
			limit = {
				scope:recipient = {
					number_of_opposing_personality_traits = {
						target = scope:actor
						value = 3
					}
				}
			}
			multiply = 3
		}
	}
	scope:recipient = {
		number_of_opposing_personality_traits = {
			target = scope:actor
			value >= 1
		}
	}
	desc = we_are_NOT_alike_tt
}
modifier = {
	add = {
		value = scope:actor.martial
		multiply = 0.5
	}
	desc = HAS_MARTIAL_SKILL_REASON
}
modifier = {
	add = {
		value = scope:actor.prowess
		multiply = 0.5
	}
	desc = HAS_PROWESS_SKILL_REASON
}
modifier = {
	exists = scope:actor.court_position:champion_court_position
	add = 10
	desc = HAS_CHAMPION_REASON
}
modifier = {
	add = 15
	switch = {
		trigger = yes
		scope:logistician = {
			scope:recipient = {
				OR = {
					has_trait = curious
					has_trait = pensive
				}
			}
		}
		scope:military_engineer = {
			scope:recipient = {
				OR = {
					has_trait = curious
					has_trait = pensive
				}
			}
		}
		scope:aggressive_attacker = {
			scope:recipient = {
				OR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:unyielding_defender = {
			scope:recipient = {
				OR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:forder = {
			scope:recipient = {
				OR = {
					has_trait = rowdy
					has_trait = curious
				}
			}
		}
		scope:flexible_leader = {
			scope:recipient = {
				OR = {
					has_trait = charming
					has_trait = curious
				}
			}
		}
		scope:desert_warrior = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
		scope:jungle_stalker = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
		scope:reaver = {
			scope:recipient = {
				OR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:reckless = {
			scope:recipient = {
				OR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:holy_warrior = {
			scope:recipient = {
				has_trait = pensive
			}
		}
		scope:open_terrain_expert = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
		scope:rough_terrain_expert = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
		scope:forest_fighter = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
		scope:cautious_leader = {
			scope:recipient = {
				has_trait = pensive
			}
		}
		scope:organizer = {
			scope:recipient = {
				OR = {
					has_trait = bossy
					has_trait = charming
				}
			}
		}
		scope:winter_soldier = {
			scope:recipient = {
				has_trait = rowdy
			}
		}
	}
	desc = has_compatible_personality_tt
}
modifier = {
	add = -15
	switch = {
		trigger = yes
		scope:logistician = {
			scope:recipient = {
				NOR = {
					has_trait = curious
					has_trait = pensive
				}
			}
		}
		scope:military_engineer = {
			scope:recipient = {
				NOR = {
					has_trait = curious
					has_trait = pensive
				}
			}
		}
		scope:aggressive_attacker = {
			scope:recipient = {
				NOR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:unyielding_defender = {
			scope:recipient = {
				NOR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:forder = {
			scope:recipient = {
				NOR = {
					has_trait = rowdy
					has_trait = curious
				}
			}
		}
		scope:flexible_leader = {
			scope:recipient = {
				NOR = {
					has_trait = charming
					has_trait = curious
				}
			}
		}
		scope:desert_warrior = {
			scope:recipient = {
				NOT = {
					has_trait = rowdy
				}
			}
		}
		scope:jungle_stalker = {
			scope:recipient = {
				NOT = {
					has_trait = rowdy
				}
			}
		}
		scope:reaver = {
			scope:recipient = {
				NOR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:reckless = {
			scope:recipient = {
				NOR = {
					has_trait = bossy
					has_trait = rowdy
				}
			}
		}
		scope:holy_warrior = {
			scope:recipient = {
				NOT = {
					has_trait = pensive
				}
			}
		}
		scope:open_terrain_expert = {
			scope:recipient = {
				NOT = {
					has_trait = rowdy
				}
			}
		}
		scope:rough_terrain_expert = {
			scope:recipient = {
				NOT = {
					has_trait = rowdy
				}
	
# … (cut here; the rest is in the file)

As written in game/common/character_interactions/09_mpo_interactions.txt.

What happens

If they accept

  • Event mpo_interactions_events.0101
  • Gains 20 Stress
  • Opinion: Pleased (+20)
  • The character you target:
    • If

      a check the game hides

      Then

      • Gains the Trait scope:target trait
    • Opinion: Admiration (+20)

If they refuse

Options when sending

  • Logistician
  • Military Engineer
  • Aggressive Attacker
  • Defender
  • Forder
  • Flexible Leader
  • Desert Warrior
  • Jungle Stalker
  • Pillager
  • Reckless
  • Faithful Blade
  • Open Terrain Expert
  • Rough Terrain Expert
  • Forest Fighter
  • Cautious Leader
  • Organizer
  • Winter Soldier

Events it fires: mpo_interactions_events.0101, mpo_interactions_events.0102

• 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) (20 lines of game script)
is_available = trigger_if = {
	limit = {
		is_ai = yes
	}
	any_relation = {
		type = ward
		count >= 1
	}
}
is_shown = has_mpo_dlc_trigger = yes
scope:recipient = {
	is_ai = yes
	is_adult = no
	OR = {
		scope:actor = {
			has_relation_ward = scope:recipient
		}
		is_hostage_of = scope:actor
	}
}

As written in game/common/character_interactions/09_mpo_interactions.txt.

Can be sent when (is_valid…) (144 lines of game script)
scope:recipient = {
	age >= 10
	number_of_commander_traits <= 1
	trigger_if = {
		limit = {
			scope:actor = {
				number_of_commander_traits > 0
			}
		}
		custom_description = {
			text = influence_child_commander_interaction_all_same_traits
			switch = {
				trigger = yes
				scope:logistician = {
					scope:recipient = {
						NOT = {
							has_trait = logistician
						}
					}
				}
				scope:military_engineer = {
					scope:recipient = {
						NOT = {
							has_trait = military_engineer
						}
					}
				}
				scope:aggressive_attacker = {
					scope:recipient = {
						NOT = {
							has_trait = aggressive_attacker
						}
					}
				}
				scope:unyielding_defender = {
					scope:recipient = {
						NOT = {
							has_trait = unyielding_defender
						}
					}
				}
				scope:forder = {
					scope:recipient = {
						NOT = {
							has_trait = forder
						}
					}
				}
				scope:flexible_leader = {
					scope:recipient = {
						NOT = {
							has_trait = flexible_leader
						}
					}
				}
				scope:desert_warrior = {
					scope:recipient = {
						NOT = {
							has_trait = desert_warrior
						}
					}
				}
				scope:jungle_stalker = {
					scope:recipient = {
						NOT = {
							has_trait = jungle_stalker
						}
					}
				}
				scope:reaver = {
					scope:recipient = {
						NOT = {
							has_trait = reaver
						}
					}
				}
				scope:reckless = {
					scope:recipient = {
						NOT = {
							has_trait = reckless
						}
					}
				}
				scope:holy_warrior = {
					scope:recipient = {
						NOT = {
							has_trait = holy_warrior
						}
					}
				}
				scope:open_terrain_expert = {
					scope:recipient = {
						NOT = {
							has_trait = open_terrain_expert
						}
					}
				}
				scope:rough_terrain_expert = {
					scope:recipient = {
						NOT = {
							has_trait = rough_terrain_expert
						}
					}
				}
				scope:forest_fighter = {
					scope:recipient = {
						NOT = {
							has_trait = forest_fighter
						}
					}
				}
				scope:cautious_leader = {
					scope:recipient = {
						NOT = {
							has_trait = cautious_leader
						}
					}
				}
				scope:organizer = {
					scope:recipient = {
						NOT = {
							has_trait = organizer
						}
					}
				}
				scope:winter_soldier = {
					scope:recipient = {
						NOT = {
							has_trait = winter_soldier
						}
					}
				}
			}
		}
	}
	is_physically_able = yes
}
scope:actor = {
	is_adult = yes
	number_of_commander_traits >= 1
	is_imprisoned = no
	is_physically_able = yes
}

As written in game/common/character_interactions/09_mpo_interactions.txt.

Effects (on_send, on_accept, on_decline) (232 lines of game script)
on_send = switch = {
	trigger = yes
	scope:logistician = {
		trait:logistician = {
			save_scope_as = target_trait
		}
	}
	scope:military_engineer = {
		trait:military_engineer = {
			save_scope_as = target_trait
		}
	}
	scope:aggressive_attacker = {
		trait:aggressive_attacker = {
			save_scope_as = target_trait
		}
	}
	scope:unyielding_defender = {
		trait:unyielding_defender = {
			save_scope_as = target_trait
		}
	}
	scope:forder = {
		trait:forder = {
			save_scope_as = target_trait
		}
	}
	scope:flexible_leader = {
		trait:flexible_leader = {
			save_scope_as = target_trait
		}
	}
	scope:desert_warrior = {
		trait:desert_warrior = {
			save_scope_as = target_trait
		}
	}
	scope:jungle_stalker = {
		trait:jungle_stalker = {
			save_scope_as = target_trait
		}
	}
	scope:reaver = {
		trait:reaver = {
			save_scope_as = target_trait
		}
	}
	scope:reckless = {
		trait:reckless = {
			save_scope_as = target_trait
		}
	}
	scope:holy_warrior = {
		trait:holy_warrior = {
			save_scope_as = target_trait
		}
	}
	scope:open_terrain_expert = {
		trait:open_terrain_expert = {
			save_scope_as = target_trait
		}
	}
	scope:rough_terrain_expert = {
		trait:rough_terrain_expert = {
			save_scope_as = target_trait
		}
	}
	scope:forest_fighter = {
		trait:forest_fighter = {
			save_scope_as = target_trait
		}
	}
	scope:cautious_leader = {
		trait:cautious_leader = {
			save_scope_as = target_trait
		}
	}
	scope:organizer = {
		trait:organizer = {
			save_scope_as = target_trait
		}
	}
	scope:winter_soldier = {
		trait:winter_soldier = {
			save_scope_as = target_trait
		}
	}
	fallback = {
		scope:actor = {
			random_character_trait = {
				limit = {
					has_trait_category = commander
				}
				save_scope_as = target_trait
			}
		}
	}
}
on_accept = scope:actor = {
	trigger_event = mpo_interactions_events.0101
	show_as_tooltip = {
		add_stress = minor_stress_gain
		add_opinion = {
			target = scope:recipient
			modifier = pleased_opinion
			opinion = 20
		}
	}
}
scope:recipient = {
	show_as_tooltip = {
		switch = {
			trigger = yes
			scope:logistician = {
				trait:logistician = {
					save_scope_as = target_trait
				}
			}
			scope:military_engineer = {
				trait:military_engineer = {
					save_scope_as = target_trait
				}
			}
			scope:aggressive_attacker = {
				trait:aggressive_attacker = {
					save_scope_as = target_trait
				}
			}
			scope:unyielding_defender = {
				trait:unyielding_defender = {
					save_scope_as = target_trait
				}
			}
			scope:forder = {
				trait:forder = {
					save_scope_as = target_trait
				}
			}
			scope:flexible_leader = {
				trait:flexible_leader = {
					save_scope_as = target_trait
				}
			}
			scope:desert_warrior = {
				trait:desert_warrior = {
					save_scope_as = target_trait
				}
			}
			scope:jungle_stalker = {
				trait:jungle_stalker = {
					save_scope_as = target_trait
				}
			}
			scope:reaver = {
				trait:reaver = {
					save_scope_as = target_trait
				}
			}
			scope:reckless = {
				trait:reckless = {
					save_scope_as = target_trait
				}
			}
			scope:holy_warrior = {
				trait:holy_warrior = {
					save_scope_as = target_trait
				}
			}
			scope:open_terrain_expert = {
				trait:open_terrain_expert = {
					save_scope_as = target_trait
				}
			}
			scope:rough_terrain_expert = {
				trait:rough_terrain_expert = {
					save_scope_as = target_trait
				}
			}
			scope:forest_fighter = {
				trait:forest_fighter = {
					save_scope_as = target_trait
				}
			}
			scope:cautious_leader = {
				trait:cautious_leader = {
					save_scope_as = target_trait
				}
			}
			scope:organizer = {
				trait:organizer = {
					save_scope_as = target_trait
				}
			}
			scope:winter_soldier = {
				trait:winter_soldier = {
					save_scope_as = target_trait
				}
			}
		}
		if = {
			limit = {
				exists = scope:target_trait
			}
			add_trait = scope:target_trait
		}
		add_opinion = {
			target = scope:actor
			modifier = admiration_opinion
			opinion = 20
		}
	}
}
on_decline = scope:actor = {
	trigger_event = mpo_interactions_events.0102
	show_as_tooltip = {
		add_stress = medium_stress_gain
		add_opinion = {
			target = scope:recipient
			modifier = disappointed_opinion
			opinion = -20
		}
	}
}
scope:recipient = {
	show_as_tooltip = {
		add_opinion = {
			target = scope:actor
			modifier = confused_opinion
			opinion = -20
		}
	}
}

As written in game/common/character_interactions/09_mpo_interactions.txt.

Category
Friendly actions
Again on the same character
after 3 years
DLC
Khans of the Steppe
In the menu
main list
ID
influence_child_commander_interaction

Source: game/common/character_interactions/09_mpo_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?