N3OW/events/war_events/combat_events.txt
2026-05-28 09:09:00 -04:00

2376 lines
60 KiB
Text

# Events fired upon resolution of a combat.
#
# Event List:
# 0001-0005: 'The Undefeated' - a commander has won 100 battles without losing a single one! By Sean Hughes
# 1001-1003: 'Prisoners of War' - one or more characters were imprisoned at the end of a battle (notifications sent to concerned parties). By Sean Hughes
#
#
namespace = combat_event
#####################
# The Undefeatable #
# by Sean Hughes #
# 0001-0005 #
#####################
#Event for Winning Side: Keeps track of total number of victories the side's commander has (if they have never lost a battle). At 100 victories, they earn the nickname 'the Undefeatable'.
combat_event.0001 = {
hidden = yes
scope = combat_side
trigger = {
side_commander ?= { is_alive = yes }
side_commander = { is_ai = no } # Too expensive performance-wise to track for all commanders in the game. Substantial savings on cycles to only track for players.
OR = {
side_commander = {
# Event will only occur if this character has never lost a battle.
OR = {
NOT = { has_variable = combat_event_0001_tracker }
trigger_if = {
limit = {
has_variable = combat_event_0001_tracker
}
var:combat_event_0001_tracker > 0
}
}
}
AND = {
# However, as a special case we will fire this event if we defeat 'the Undefeatable'...
exists = enemy_side.side_commander
enemy_side.side_commander = {
has_character_flag = combat_event_undefeatable_flag
}
# ...But only if we haven't already defeated 'the Undefeatable' before!
side_commander = {
NOT = { has_character_flag = combat_event_triumphant_flag }
}
}
}
}
immediate = {
if = {
#If we have defeated 'the Undefeatable', execute a special use case (skipping the rest of this event's effects).
limit = {
exists = enemy_side.side_commander
enemy_side.side_commander = {
has_character_flag = combat_event_undefeatable_flag
}
}
# Save the enemy commander's scope for localization.
enemy_side.side_commander = {
save_scope_as = enemy_commander
}
# Gain special recognition for defeating 'the Undefeatable.'
side_commander = {
# Save this scope for localization.
save_scope_as = friendly_commander
# So we don't get this outcome more than once per character.
add_character_flag = combat_event_triumphant_flag
# Trigger the event.
trigger_event = {
id = combat_event.0004
days = 1
}
}
}
else = {
# In almost all situations, add to our victory tracker. Once we reach 100, fire the special Undefeatable event.
side_commander = {
if = {
limit = {
is_alive = yes # Can be killed in combat
}
# If the victory tracking variable does not yet exist, create it.
if = {
limit = {
NOT = {
has_variable = combat_event_0001_tracker
}
}
set_variable = {
name = combat_event_0001_tracker
value = 1
}
}
# Otherwise, increment it.
else = {
change_variable = {
name = combat_event_0001_tracker
add = 1
}
}
#If the commander has accumulateed 100 victories, fire the event which gives them the nickname 'the Undefeatable'.
if = {
limit = {
var:combat_event_0001_tracker = 100
}
# If there is an enemy commander, save their scope for portraits/localization in the following event.
if = {
limit = {
exists = root.enemy_side.side_commander
}
root.enemy_side.side_commander = {
save_scope_as = enemy_commander
}
}
# Fire the event which gives the victorious commander the nickname 'the Undefeatable'.
trigger_event = {
id = combat_event.0003
days = 1
}
}
}
}
}
}
}
# Event for Losing Side: Disqualifies the side's commander from ever earning the nickname 'the Undefeatable'.
combat_event.0002 = {
hidden = yes
scope = combat_side
trigger = {
side_commander ?= {
is_alive = yes
}
}
immediate = {
side_commander = {
#If we ever lose a battle, we are disqualified from achieving 'the Undefeatable' nickname.
set_variable = {
name = combat_event_0001_tracker
value = 0
}
}
}
}
#Once a commander wins 100 battles with 0 defeats, they get a special 'the Undefeatable' nickname.
combat_event.0003 = {
type = character_event
title = combat_event.0003.t
desc = {
desc = combat_event.0003.desc.opening
first_valid = {
triggered_desc = {
trigger = {
exists = scope:enemy_commander
}
desc = combat_event.0003.desc.commander
}
desc = combat_event.0003.desc.no_commander
}
first_valid = {
triggered_desc = {
trigger = {
NOR = {
has_trait = shy
has_trait = humble
has_trait = craven
has_trait = content
has_trait = paranoid
has_trait = cautious_leader
}
}
desc = combat_event.0003.desc.alt_ending
}
desc = combat_event.0003.desc.ending
}
}
theme = battle
left_portrait = {
character = root
animation = war_over_win
}
right_portrait = {
character = scope:enemy_commander
animation = war_over_loss
}
immediate = {
add_character_flag = combat_event_undefeatable_flag
set_signature_weapon_effect = yes
}
#Option A: Accept the title "the Undefeatable", gain prestige.
option = {
name = combat_event.0003.a
give_nickname = nick_the_undefeated # We don't use 'set_nick_effect' here because this is important enough we want it to override event 'good' nicknames. Plus it's an opt-in.
add_prestige = massive_prestige_gain
add_martial_skill = 3
#AI will always pick this unless Humble.
stress_impact = {
humble = medium_stress_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = humble
add = -100
}
}
}
#Option B: Reject the title "the Undefeatable", gain piety.
option = {
name = {
trigger = { has_trait = zealous }
text = combat_event.0003.b.zealous
}
name = {
trigger = { NOT = { has_trait = zealous }}
text = combat_event.0003.b
}
if = {
limit = {
has_trait = zealous
}
add_piety = massive_piety_gain
}
else = {
add_prestige = medium_prestige_gain
add_piety = medium_piety_gain
}
add_martial_skill = 3
#AI will only pick this if Humble.
stress_impact = {
arrogant = medium_stress_gain
}
ai_chance = {
base = 0
modifier = {
has_trait = humble
add = 100
}
}
}
}
#If 'the Undefeatable' is ever defeated, the commander who defeated them gets a special title.
combat_event.0004 = {
type = character_event
title = combat_event.0004.t
desc = combat_event.0004.desc
theme = battle
left_portrait = {
character = root
animation = war_over_win
}
right_portrait = {
character = scope:enemy_commander
animation = war_over_loss
}
immediate = {
set_signature_weapon_effect = yes
}
#Option A: Accept the title "the Triumphant", gain prestige.
option = {
name = combat_event.0004.a
give_nickname = nick_the_triumphant
add_prestige = massive_prestige_gain
add_martial_skill = 3
#AI will always pick this unless Humble
stress_impact = {
humble = medium_stress_gain
}
ai_chance = {
base = 100
modifier = {
has_trait = humble
add = -100
}
}
}
#Option B: Reject the title "the Triumphant", gain piety.
option = {
name = {
trigger = { has_trait = zealous }
text = combat_event.0004.b.zealous
}
name = {
trigger = { NOT = { has_trait = zealous }}
text = combat_event.0004.b
}
if = {
limit = {
has_trait = zealous
}
add_piety = massive_piety_gain
}
else = {
add_prestige = medium_prestige_gain
add_piety = medium_piety_gain
}
add_martial_skill = 3
#AI will never pick this unless Humble
stress_impact = {
arrogant = medium_stress_gain
}
ai_chance = {
base = 0
modifier = {
has_trait = humble
add = 100
}
}
}
after = {
#Inform 'the Undefeatable' that they have, in fact, been defeated.
scope:enemy_commander = {
remove_character_flag = combat_event_undefeatable_flag
trigger_event = {
id = combat_event.0005
days = 1
}
show_as_tooltip = {
add_prestige_level = -1
}
}
}
}
#'The Undefeatable' is informed that they have, in fact, been defeated.
combat_event.0005 = {
type = character_event
title = combat_event.0005.t
desc = combat_event.0005.desc
theme = battle
left_portrait = {
character = scope:friendly_commander
animation = war_over_win
}
immediate = {
if = {
limit = {
scope:friendly_commander = {
has_nickname = nick_the_triumphant
}
}
show_as_tooltip = {
scope:friendly_commander = {
give_nickname = nick_the_triumphant
}
}
}
}
#Option A: Accept that they have defeated you.
option = {
name = combat_event.0005.a
add_prestige_level = -1
stress_impact = {
vengeful = medium_stress_gain
arrogant = medium_stress_gain
wrathful = minor_stress_gain
}
ai_chance = {
base = 50
ai_value_modifier = {
ai_vengefulness = -5
}
}
}
#Option B: Declare them your rival!
option = {
name = combat_event.0005.b
add_prestige_level = -1
if = {
limit = {
NOT = { has_relation_rival = scope:friendly_commander }
}
scope:friendly_commander = {
send_interface_toast = {
title = combat_event.0005.message
set_relation_rival = {
target = root
reason = rival_undefeated_defeated
}
}
}
}
stress_impact = {
forgiving = medium_stress_gain
humble = medium_stress_gain
calm = minor_stress_gain
}
ai_chance = {
base = 5000
ai_value_modifier = {
ai_vengefulness = 5
}
}
}
}
#####################
# Battle Aftermath #
# by Sean Hughes #
# 1001-1014 #
#####################
# Used for determining both who should be notifiied about captured/slain combatants.
scripted_trigger combat_event_1001_character_is_relevant_to_target_trigger = {
OR = {
# Character is of major or minor interest.
is_of_major_interest_trigger = {CHARACTER = $TARGET$ }
is_of_minor_interest_trigger = {CHARACTER = $TARGET$ }
# Courtiers normally aren't very interesting, but if one got captured in battle there has to be a reason why they were there in the first place!
is_courtier_of = $TARGET$
is_knight_of = $TARGET$
}
}
# Used for checking if a captured combatant is worth war-score.
scripted_trigger combat_event_1001_character_is_important_combatant = {
OR = {
this = scope:primary_combat_winner
this = scope:primary_combat_loser
is_heir_of = scope:primary_combat_winner
is_heir_of = scope:primary_combat_loser
}
}
# Used to transfer equipped battle gear to slayer/capturer
scripted_effect combat_transfer_equipped_artifact_effect = {
if = {
limit = {
any_equipped_character_artifact = { artifact_slot_type = $TYPE$ }
}
save_scope_as = artifact_knight
random_equipped_character_artifact = {
limit = { artifact_slot_type = $TYPE$ }
if = {
limit = { artifact_durability >= define:NInventory|ARTIFACT_LOW_DURABILITY }
save_scope_as = knight_artifact
if = {
limit = { exists = artifact_owner.house }
artifact_owner.house = { save_scope_as = artifact_house }
}
set_owner = {
target = $OWNER$
history = {
type = taken_in_battle
actor = scope:artifact_knight
recipient = $OWNER$
location = scope:artifact_knight.location
}
}
if = {
limit = {
exists = scope:artifact_house
NOT = {
any_artifact_house_claimant = {
this = scope:artifact_house
}
}
}
scope:artifact_house = { add_house_artifact_claim = prev }
}
scope:artifact_knight = {
if = {
limit = {
NOT = {
has_personal_artifact_claim = prev
}
}
add_personal_artifact_claim = prev
}
}
#debug_log = "ART_TRAN"
}
else = {
destroy_artifact = this
#debug_log = "ART_DEST"
}
}
}
}
# Used to check if a knight has fought in a battle recently.
scripted_effect petition_knight_battle_history_effect = {
if = {
limit = {
is_alive = yes
age >= 35
is_landed = no
employer.highest_held_title_tier >= tier_kingdom # No need to set variables for knights of dukes/counts
}
if = {
limit = { has_variable = hc_8170_fought_battle_for }
remove_variable = hc_8170_fought_battle_for
}
if = {
limit = { has_variable = hc_8170_fought_battle_where }
remove_variable = hc_8170_fought_battle_where
}
if = {
limit = { has_variable = hc_8170_fought_battle_against }
remove_variable = hc_8170_fought_battle_against
}
set_variable = {
name = hc_8170_fought_battle_for
value = employer
years = 15
}
set_variable = {
name = hc_8170_fought_battle_where
value = location
years = 15
}
save_scope_as = knight_scope
if = { # For winner side knights
limit = {
scope:winning_side = {
any_side_knight = { THIS = scope:knight_scope } # this knight
}
}
set_variable = {
name = hc_8170_fought_battle_against
value = scope:winning_side.enemy_side.side_primary_participant
years = 15
}
}
else = { # For loser side knights
set_variable = {
name = hc_8170_fought_battle_against
value = scope:winning_side.side_primary_participant
years = 15
}
}
}
}
# Combat Side event which handles the combatant imprisonment and death logic.
# Also determines which characters need to be notified about these occurances, and triggers notification events for them (combat_event.1002-1004 and 1012-1014).
combat_event.1001 = {
scope = combat_side
hidden = yes
trigger = {
# Prisoners of war can only be taken during an actual war.
# Non-war battles (such as from engaging Hostile forces) do not take prisoners, since PoWs cannot be released on war end if there is no war!
side_primary_participant = {
is_at_war_with = root.enemy_side.side_primary_participant
}
#Cannot happen in the tutorial
NOT = { has_global_variable = lesson_chain_war_tutorial_started }
}
immediate = {
# Save necessary scopes for later usage.
save_scope_as = winning_side
side_primary_participant = {
random_character_war = {
limit = {
OR = {
is_attacker = root.enemy_side.side_primary_participant
is_defender = root.enemy_side.side_primary_participant
}
}
save_scope_as = combat_war
if = {
limit = {
is_attacker = root.side_primary_participant
}
primary_attacker = {
save_scope_as = primary_combat_winner
}
primary_defender = {
save_scope_as = primary_combat_loser
}
}
else = {
primary_defender = {
save_scope_as = primary_combat_winner
}
primary_attacker = {
save_scope_as = primary_combat_loser
}
}
}
save_scope_as = combat_winner
}
enemy_side.side_primary_participant = {
save_scope_as = combat_loser
}
combat.location = {
save_scope_as = combat_location
}
# If there is a Commander on the losing side, check if they should be imprisoned.
if = {
limit = {
exists = enemy_side.side_commander
}
enemy_side.side_commander = {
random_list = {
# No Effect
90 = {
# Reduced risk for characters with the Stalwart Leader perk.
modifier = {
add = 100
has_perk = stalwart_leader_perk
is_ai = no
}
modifier = {
add = 30
has_perk = stalwart_leader_perk
is_ai = yes
}
#Acclaimed knights being captured has weird results, we are giving them essentially a pass
modifier = {
add = 500
is_acclaimed = yes
}
#Reduced risk for character with Bodyguard(s) that are fighting by their side
modifier = {
add = 50
employs_court_position = bodyguard_court_position
any_court_position_holder = {
type = bodyguard_court_position
save_temporary_scope_as = bodyguard
root.enemy_side = {
any_side_knight = { this = scope:bodyguard }
}
}
}
#Reduced risk for character with Garuda that are fighting by their side
modifier = {
add = 50
employs_court_position = garuda_court_position
any_court_position_holder = {
type = garuda_court_position
save_temporary_scope_as = garuda
root.enemy_side = {
any_side_knight = { this = scope:garuda }
}
}
}
# Being stackwiped greatly increases the chance of capture.
modifier = {
scope:wipe = yes
factor = 0.20
}
}
# Captured in battle.
10 = {
trigger = {
is_alive = yes
}
modifier = {
factor = { # Prowess directly reduces chance of capture.
value = 30 # Value at which 'immunity' happens.
subtract = prowess
divide = 30
min = 0.1 # Everyone makes mistakes.
}
}
# Craven characters are more likey to flee earlier and elude capture.
modifier = {
factor = 0.5
has_trait = craven
}
modifier = {
factor = 2
has_trait = brave
}
# Certain injuries increase the chances of being caught.
modifier = {
factor = 3
OR = {
has_trait = one_legged
has_trait = maimed
}
}
# State Ransoms: characters are more likely to surrender if their liege will pay their ransom.
modifier = {
factor = 2
liege.culture = { has_cultural_parameter = knights_die_less_but_are_captured_more }
NOT = { top_liege = this }
}
add_to_list = prisoners_of_war
# Log a battle event so that the imprisonment shows up in the battle summary screen.
save_temporary_scope_as = this_combatant
root = {
battle_event = {
key = "combatant_captured_in_battle"
left_portrait = scope:combat_winner
right_portrait = scope:this_combatant
type = imprison
}
}
}
# Commanders cannot be slain in the retreat phase, since we don't want to punish players for retreating from combat after they get wounded.
}
}
}
# Set history variables for petition events
every_side_knight = { petition_knight_battle_history_effect = yes }
# For each Knight on the losing side, check if they should be imprisoned/slain.
enemy_side = {
every_side_knight = {
random_list = {
85 = { # Nothing Happens
trigger = {
is_alive = yes
}
modifier = {
add = 50
has_perk = stalwart_leader_perk
is_ai = no
}
modifier = {
add = 15
has_perk = stalwart_leader_perk
is_ai = yes
}
#Reduced risk for character with bodyguards that are fighting by their side
modifier = {
add = 25
employs_court_position = bodyguard_court_position
any_court_position_holder = {
type = bodyguard_court_position
save_temporary_scope_as = bodyguard
root.enemy_side = {
any_side_knight = { this = scope:bodyguard }
}
}
}
#Reduced risk for character with Garuda that are fighting by their side
modifier = {
add = 25
employs_court_position = garuda_court_position
any_court_position_holder = {
type = garuda_court_position
save_temporary_scope_as = garuda
root.enemy_side = {
any_side_knight = { this = scope:garuda }
}
}
}
# Being stackwiped greatly increases the chance of capture and/or death.
modifier = {
scope:wipe = yes
factor = 0.20
}
}
10 = { # Imprisonment
trigger = {
is_alive = yes
}
modifier = {
factor = { # Prowess directly reduces chance of capture
value = 30 # Value at which 'immunity' happens
subtract = prowess
divide = 30
min = 0.1 # Everyone makes mistakes.
}
}
modifier = {
factor = 2
has_trait = brave
}
modifier = {
factor = 0.5
has_trait = craven
}
modifier = {
factor = 2
OR = {
has_trait = one_legged
has_trait = disfigured
has_trait = one_eyed
has_trait = maimed
}
}
# State Ransoms: characters are more likely to surrender if their liege will pay their ransom.
modifier = {
factor = 2
liege.culture = { has_cultural_parameter = knights_die_less_but_are_captured_more }
}
# House Blocs
modifier = {
factor = 1.25
scope:combat_winner.confederation ?= { has_cohesion_level_parameter = any_member_extra_capture_chance }
}
#Acclaimed knights being captured has weird results, we are giving them essentially a pass
modifier = {
factor = 0.1
is_acclaimed = yes
}
# Transfer equipped armor and weapon to winner if durability not too low
combat_transfer_equipped_artifact_effect = { TYPE = primary_armament OWNER = scope:combat_winner }
combat_transfer_equipped_artifact_effect = { TYPE = armor OWNER = scope:combat_winner }
add_to_list = prisoners_of_war
# Log a battle event so that the imprisonment shows up in the battle summary screen.
save_temporary_scope_as = this_combatant
root = {
battle_event = {
key = "combatant_captured_in_battle"
left_portrait = scope:combat_winner
right_portrait = scope:this_combatant
type = imprison
target_right = yes
}
}
}
5 = { # Death
trigger = {
is_alive = yes # Don't kill knights who are already dead! They will be accounted for later.
}
# Modifiers influencing chance to occur.
modifier = {
factor = { # Prowess directly reduces chance of capture
value = 40 # Value at which 'immunity' happens
subtract = prowess
divide = 40
min = 0.1 # Everyone makes mistakes.
}
}
# Craven characters are more likely to flee before they can be slain.
modifier = {
factor = 0.5
has_trait = craven
}
modifier = {
factor = 2
has_trait = brave
}
# Increased chance of dying the more wounded a character is.
modifier = {
factor = 2
OR = {
has_trait = one_legged
has_trait = disfigured
has_trait = one_eyed
has_trait = maimed
}
}
modifier = {
factor = 1.5
has_trait_rank = {
trait = wounded
rank = 1
}
}
modifier = {
factor = 2
has_trait_rank = {
trait = wounded
rank = 2
}
}
modifier = {
factor = 3
has_trait_rank = {
trait = wounded
rank = 3
}
}
save_died_in_battle_variables_effect = {
ENEMY = scope:combat_winner
LEADER = scope:combat_loser
LOCATION = scope:combat_location
}
# State Ransoms: characters are more likely to surrender if their liege will pay their ransom, which makes them less likely to die.
modifier = {
factor = 0.5
liege.culture = { has_cultural_parameter = knights_die_less_but_are_captured_more }
}
modifier = {
factor = 0.5
is_acclaimed = yes
}
# For messaging purposes.
add_to_list = slain_combatants
# Log a battle event so that the imprisonment shows up in the battle summary screen.
save_temporary_scope_as = this_combatant
# Get a random valid knight to be the killer.
scope:winning_side = {
random_side_knight = {
limit = {
this.prowess >= scope:this_combatant.prowess_for_combat_event_opponent
}
weight = {
base = 1
compare_modifier = {
value = this.prowess
}
modifier = {
factor = 10
this.prowess > scope:this_combatant.prowess
}
}
save_scope_as = enemy_knight
}
}
# Log the battle event and then kill the knight
if = {
limit = {
exists = scope:enemy_knight
}
# Transfer equipped armor and weapon to killer if durability not too low
combat_transfer_equipped_artifact_effect = { TYPE = primary_armament OWNER = scope:enemy_knight }
combat_transfer_equipped_artifact_effect = { TYPE = armor OWNER = scope:enemy_knight }
root = {
battle_event = {
key = "combatant_killed_in_battle"
left_portrait = scope:enemy_knight
right_portrait = scope:this_combatant
type = death
target_right = yes
}
}
death = {
death_reason = death_battle
killer = scope:enemy_knight
}
}
else = {
root = {
battle_event = {
key = "combatant_killed_in_battle_no_killer"
left_portrait = scope:combat_winner
right_portrait = scope:this_combatant
type = death
target_right = yes
}
}
death = {
death_reason = death_battle
}
}
clear_saved_scope = enemy_knight
}
0 = {
# If the knight is already dead, don't do anything (yet).
}
}
petition_knight_battle_history_effect = yes # Set history variables for petition events
}
# Add the enemy knights which were killed before the end of the battle to the casualties list.
every_in_list = {
variable = slain_side_knights
add_to_list = slain_combatants
}
clear_variable_list = slain_side_knights
}
# Also record who already died on the winning side, so the victor knows their own casualty count.
scope:winning_side = {
every_in_list = {
variable = slain_side_knights
add_to_list = victorious_slain_combatants
}
clear_variable_list = slain_side_knights
}
# Handle effects & messaging for any slain combatants.
if = {
limit = {
OR = {
any_in_list = {
list = slain_combatants
exists = this
}
any_in_list = {
list = victorious_slain_combatants
exists = this
}
}
}
# If anyone was slain after the battle, send a message to both the winner and loser of the combat to inform them of this.
scope:combat_winner = {
trigger_event = combat_event.1012
}
scope:combat_loser = {
trigger_event = combat_event.1013
}
# Send a message to all other players who may be concerned about the fate of the slain combatants.
every_player = {
limit = {
NOR = {
this = scope:combat_winner
this = scope:combat_loser
}
save_temporary_scope_as = notification_target
OR = {
any_in_list = {
list = slain_combatants
combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = scope:notification_target }
}
any_in_list = {
list = victorious_slain_combatants
combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = scope:notification_target }
}
}
}
trigger_event = combat_event.1014
}
}
# Handle effects & messaging for any captured combatants (must be done after slain combatants for order-of-operations reasons!).
if = {
limit = {
any_in_list = {
list = prisoners_of_war
exists = this
}
}
# If anyone was captured after the battle, send a message to both the winner and loser of the combat to inform them of this.
scope:combat_winner = {
trigger_event = combat_event.1002
}
scope:combat_loser = {
trigger_event = combat_event.1003
}
# Send a message to all other players who may be concerned about the fate of the captured prisoners.
every_player = {
limit = {
NOR = {
this = scope:combat_winner
this = scope:combat_loser
}
save_temporary_scope_as = notification_target
any_in_list = {
list = prisoners_of_war
combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = scope:notification_target }
}
}
trigger_event = combat_event.1004
}
}
every_side_participant = {
random = { # chance of inspiring a knight to become eligible for thug accolade
chance = 2
modifier = {
factor = accolade_progress # scales with accolade progress
}
modifier = { # must have an eligible knight
NOT = {
root = {
any_side_knight = {
can_unlock_accolade_attribute_trigger = {
ATTRIBUTE = thug
}
any_killed_character = {
OR = {
is_in_list = slain_combatants
is_in_list = victorious_slain_combatants
}
}
}
}
}
factor = 0
}
save_scope_as = accolade_liege
set_variable = {
name = accolade_progress
value = 0
}
root = {
random_side_knight = {
limit = {
can_unlock_accolade_attribute_trigger = {
ATTRIBUTE = thug
}
any_killed_character = {
OR = {
is_in_list = slain_combatants
is_in_list = victorious_slain_combatants
}
}
}
weight = {
base = 1
modifier = {
add = 50
is_acclaimed = yes
}
}
save_scope_as = accolade_knight
}
}
send_interface_message = {
type = msg_accolade_eligibility
title = accolade_thug_unlock.t
left_icon = scope:accolade_knight
right_icon = scope:accolade_liege
custom_tooltip = accolade_thug_unlock.tt
scope:accolade_knight = {
set_variable = {
name = thug_attribute_unlock
value = yes
}
}
}
}
}
}
}
#####################
# Prisoners of War
# Prisoner notification event for combat winner.
combat_event.1002 = {
type = character_event
hidden = yes
immediate = {
# Initialize the variable we will use to keep track of how many relevant prisoners there are.
set_variable = {
name = num_other_relevant_captured_combatants
value = 0
}
# Re-order the combatant list based on who we care about the most.
ordered_in_list = {
list = prisoners_of_war
max = 99
check_range_bounds = no
order_by = {
value = captured_combatant_weights_for_root_participant
}
# Add the prisoners to a new list tailored to be more relevant to this character.
add_to_list = relevant_prisoners_of_war
root = {
change_variable = {
name = num_other_relevant_captured_combatants
add = 1
}
}
# Since we will send custom imprisonment events, block the default ones.
hidden_effect = {
if = {
limit = { is_alive = yes }
add_character_flag = {
flag = block_imprisonment_event
days = 1
}
}
}
# The first two prisoners on this list (i.e., the most important people to us) should be have their individual scopes saved for use in portraits & localization.
if = {
limit = {
NOT = { exists = scope:primary_prisoner }
}
save_scope_as = primary_prisoner
}
else_if = {
limit = {
NOT = { exists = scope:secondary_prisoner }
}
save_scope_as = secondary_prisoner
}
}
# Decrement the number of relevant captured combatants, to exclude the primary prisoner from the count (for localization).
change_variable = {
name = num_other_relevant_captured_combatants
add = -1
}
# Send a message telling us about the prisoners we have captured.
send_interface_message = {
type = event_captured_combatants_good
title = combat_event.1002.pow_message.t
desc = {
first_valid = {
# Only one relevant prisoner.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 0
}
desc = combat_event.1002.pow_message.desc.single
}
# Exactly two relevant prisoners.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 1
}
desc = combat_event.1002.pow_message.desc.double
}
# Three or more relevant prisoners.
desc = combat_event.1002.pow_message.desc.multiple
}
desc = combat_event.1002.pow_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_prisoner
# Imprison all prisoners of war
every_in_list = {
list = relevant_prisoners_of_war
limit = { is_alive = yes }
save_temporary_scope_as = this_prisoner
scope:combat_winner = {
if = {
limit = { scope:this_prisoner = { is_imprisoned = no } }
imprison = {
target = scope:this_prisoner
type = house_arrest
}
}
}
hidden_effect = {
#######################
# If necessary, send toasts about the captured prisoner to the war leaders.
# Check if this prisoner is important enough (worth war score) that it is worth sending a toast about them in the first place.
if = {
limit = {
exists = scope:primary_combat_winner
exists = scope:primary_combat_loser
combat_event_1001_character_is_important_combatant = yes
}
save_scope_as = valuable_prisoner
# The imprisoner must be informed that they captured an important hostage.
scope:combat_winner = {
trigger_event = combat_event.1005
}
# The losing primary participant must be informed that they will/have lost warscore because a hostage was captured.
if = {
limit = {
# But not if they themselves are the prisoner! (they will get an event already upon being imprisoned).
scope:valuable_prisoner != scope:primary_combat_loser
}
scope:primary_combat_loser = {
trigger_event = combat_event.1006
}
}
# If the combat winner is different from the winning war leader, we also need to send a message to the war leader.
if = {
limit = {
scope:combat_winner != scope:primary_combat_winner
}
scope:primary_combat_winner = {
trigger_event = combat_event.1007
}
}
}
}
}
if = {
limit = {
scope:combat_winner = { is_in_army = yes }
any_in_list = {
list = relevant_prisoners_of_war
is_alive = yes
is_imprisoned_by = scope:combat_winner
has_relation_rival = scope:combat_winner
}
}
every_in_list = {
list = relevant_prisoners_of_war
limit = {
is_alive = yes
is_imprisoned_by = scope:combat_winner
has_relation_rival = scope:combat_winner
}
add_to_list = captured_rivals
}
scope:combat_winner = { trigger_event = bp1_yearly.8060 }
}
}
remove_variable = num_other_relevant_captured_combatants
}
}
# Prisoner notification event for combat loser.
combat_event.1003 = {
type = character_event
hidden = yes
immediate = {
# Initialize the variable we will use to keep track of how many relevant prisoners there are.
set_variable = {
name = num_other_relevant_captured_combatants
value = 0
}
# Re-order the combatant list based on who we care about the most.
ordered_in_list = {
list = prisoners_of_war
max = 99
check_range_bounds = no
limit = {
this != root
}
order_by = {
value = captured_combatant_weights_for_root_participant
}
# Add the prisoners to a new list tailored to be more relevant to this character.
add_to_list = relevant_prisoners_of_war
root = {
change_variable = {
name = num_other_relevant_captured_combatants
add = 1
}
}
# The first two prisoners on this list (i.e., the most important people to us) should be have their individual scopes saved for use in portraits & localization.
if = {
limit = {
NOT = { exists = scope:primary_prisoner }
}
save_scope_as = primary_prisoner
}
else_if = {
limit = {
NOT = { exists = scope:secondary_prisoner }
}
save_scope_as = secondary_prisoner
}
}
# Decrement the number of relevant captured combatants, to exclude the primary prisoner from the count (for localization).
change_variable = {
name = num_other_relevant_captured_combatants
add = -1
}
# Send a message telling us about the prisoners our enemy captured.
send_interface_message = {
type = event_captured_combatants_bad
title = combat_event.1003.pow_message.t
desc = {
first_valid = {
# Only one relevant prisoner.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 0
}
desc = combat_event.1003.pow_message.desc.single
}
# Exactly two relevant prisoners.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 1
}
desc = combat_event.1003.pow_message.desc.double
}
# Three or more relevant prisoners.
desc = combat_event.1003.pow_message.desc.multiple
}
desc = combat_event.1003.pow_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_prisoner
right_icon = scope:combat_winner
# Imprison all prisoners of war
every_in_list = {
list = relevant_prisoners_of_war
limit = { is_alive = yes }
save_temporary_scope_as = this_prisoner
show_as_tooltip = {
scope:combat_winner = {
imprison = {
target = scope:this_prisoner
type = house_arrest
}
}
}
}
}
remove_variable = num_other_relevant_captured_combatants
}
}
# Prisoner notification event for other relevant characters (sends a personalized notification to a player about characters of interest who were captured in battle.)
combat_event.1004 = {
type = character_event
hidden = yes
immediate = {
# Initialize the variable we will use to keep track of how many relevant prisoners there are.
set_variable = {
name = num_other_relevant_captured_combatants
value = 0
}
# Transform the list of all prisoners of war into a list of prisoners that we specifically care about.
ordered_in_list = {
list = prisoners_of_war
max = 99
check_range_bounds = no
limit = {
this != root # Do not send a message about ourselves.
combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = root }
}
order_by = {
value = captured_combatant_weights_for_root_nonparticipant
}
# Add the prisoners to a new list tailored to be more relevant to this character.
add_to_list = relevant_prisoners_of_war
root = {
change_variable = {
name = num_other_relevant_captured_combatants
add = 1
}
}
# The first two prisoners on this list (i.e., the most important people to us) should be have their individual scopes saved for use in portraits & localization.
if = {
limit = {
NOT = { exists = scope:primary_prisoner }
}
save_scope_as = primary_prisoner
}
else_if = {
limit = {
NOT = { exists = scope:secondary_prisoner }
}
save_scope_as = secondary_prisoner
}
}
# Decrement the number of relevant captured combatants, to exclude the primary prisoner from the count (for localization).
change_variable = {
name = num_other_relevant_captured_combatants
add = -1
}
# Send a message to the player informing them of the captured combatants.
send_interface_message = {
type = event_captured_combatants_neutral
title = combat_event.1004.pow_message.t
desc = {
first_valid = {
# Only one relevant prisoner.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 0
}
desc = combat_event.1003.pow_message.desc.single
}
# Exactly two relevant prisoners.
triggered_desc = {
trigger = {
var:num_other_relevant_captured_combatants = 1
}
desc = combat_event.1003.pow_message.desc.double
}
# Three or more relevant prisoners.
desc = combat_event.1003.pow_message.desc.multiple
}
desc = combat_event.1004.pow_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_prisoner
right_icon = scope:combat_winner
show_as_tooltip = {
every_in_list = {
list = relevant_prisoners_of_war
limit = { is_alive = yes }
save_temporary_scope_as = this_prisoner
scope:combat_winner = {
imprison = {
target = scope:this_prisoner
type = house_arrest
}
}
}
}
}
remove_variable = num_other_relevant_captured_combatants
}
}
# Sents a toast about a captured hostage to the winning commander.
combat_event.1005 = {
type = character_event
hidden = yes
immediate = {
if = {
limit = {
scope:valuable_prisoner = scope:primary_combat_loser
}
send_interface_toast = {
type = msg_character_captured_by_me
title = combat_event.1005.pow_toast.t
desc = combat_event.1005.pow_toast.desc.primary
left_icon = scope:combat_winner
right_icon = scope:valuable_prisoner
}
}
else = {
send_interface_toast = {
type = msg_character_captured_by_me
title = combat_event.1005.pow_toast.t
desc = combat_event.1005.pow_toast.desc
left_icon = scope:combat_winner
right_icon = scope:valuable_prisoner
}
}
}
}
# Sents a toast about a captured hostage to the losing primary participant.
combat_event.1006 = {
type = character_event
hidden = yes
immediate = {
send_interface_toast = {
type = msg_character_captured_by_other_side
title = combat_event.1006.pow_toast.t
desc = combat_event.1006.pow_toast.desc
left_icon = scope:combat_winner
right_icon = scope:valuable_prisoner
}
}
}
# Sents a toast about a captured hostage to the winning primary participant.
combat_event.1007 = {
type = character_event
hidden = yes
immediate = {
if = {
limit = {
scope:valuable_prisoner = scope:primary_combat_loser
}
send_interface_toast = {
type = msg_character_captured_by_me
title = combat_event.1007.pow_toast_primary.t
desc = combat_event.1007.pow_toast.desc.primary
left_icon = scope:combat_winner
right_icon = scope:valuable_prisoner
}
}
else = {
send_interface_toast = {
type = msg_character_captured_by_me
title = combat_event.1007.pow_toast.t
desc = combat_event.1007.pow_toast.desc
left_icon = scope:combat_winner
right_icon = scope:valuable_prisoner
}
}
}
}
scripted_effect generate_relevant_slain_combatants_list_effect = {
# Initialize the variable we will use to keep track of how many relevant casualties there are.
set_variable = {
name = num_other_relevant_slain_combatants
value = 0
}
# Re-order the combatant list based on who we care about the most.
ordered_in_list = {
list = $LIST_OF_SLAIN_COMBATANTS$
max = 99
check_range_bounds = no
limit = { # We only care about people on the enemy side who matter to us, not generic knights.
this != root # Do not send a message about ourselves.
trigger_if = {
limit = {
$LIST_ALL_CHARACTERS$ = no
}
# Must be relevant to root in some way.
OR = {
AND = {
exists = scope:combat_war
root = { is_attacker_in_war = scope:combat_war }
this = scope:combat_war.primary_defender
}
AND = {
exists = scope:combat_war
root = { is_defender_in_war = scope:combat_war }
this = scope:combat_war.primary_attacker
}
combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = root }
}
}
}
order_by = {
value = 0
if = {
limit = {
OR = {
AND = {
exists = scope:combat_war
root = { is_attacker_in_war = scope:combat_war }
this = scope:combat_war.primary_defender
}
AND = {
exists = scope:combat_war
root = { is_defender_in_war = scope:combat_war }
this = scope:combat_war.primary_attacker
}
}
}
add = 1000
}
add = slain_combatant_weights_for_root_participant
}
# Add the casualties to a new list tailored to be more relevant to this character.
add_to_list = relevant_slain_combatants
root = {
change_variable = {
name = num_other_relevant_slain_combatants
add = 1
}
}
# The first two casualties on this list (i.e., the most important people to us) should be have their individual scopes saved for use in portraits & localization.
if = {
limit = {
NOT = { exists = scope:primary_deceased }
}
save_scope_as = primary_deceased
# Decrement the number of relevant slain combatants, to exclude the primary deceased from the count (for localization).
root = {
change_variable = {
name = num_other_relevant_slain_combatants
add = -1
}
}
}
else_if = {
limit = {
NOT = { exists = scope:secondary_deceased }
}
save_scope_as = secondary_deceased
}
}
}
scripted_effect clear_relevant_slain_combatants_list_effect = {
every_in_list = {
list = relevant_slain_combatants
remove_from_list = relevant_slain_combatants
}
remove_variable = num_other_relevant_slain_combatants
clear_saved_scope = primary_deceased
clear_saved_scope = secondary_deceased
}
#####################
# Slain Combatants
# Casualty notification event for combat winner.
combat_event.1012 = {
type = character_event
hidden = yes
immediate = {
# Generate a list of relevant slain characters on the enemy's side.
generate_relevant_slain_combatants_list_effect = {
LIST_OF_SLAIN_COMBATANTS = slain_combatants
LIST_ALL_CHARACTERS = no
}
if = {
limit = {
any_in_list = {
list = relevant_slain_combatants
}
}
# Send a message telling us about the casualties we inflicted after the battle
send_interface_message = {
type = event_slain_combatants_good
title = combat_event.1012.slain_message.t
desc = {
first_valid = {
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 0 }
desc = combat_event.1012.slain_message.desc.single
}
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 1 }
desc = combat_event.1012.slain_message.desc.double
}
desc = combat_event.1012.slain_message.desc.multiple
}
desc = combat_event.1012.slain_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_deceased
# Show all slain combatants.
every_in_list = {
list = relevant_slain_combatants
show_as_tooltip = {
death = {
death_reason = death_battle
}
}
}
}
}
clear_relevant_slain_combatants_list_effect = yes
# Repeat the above, but for casualties on our own side.
generate_relevant_slain_combatants_list_effect = {
LIST_OF_SLAIN_COMBATANTS = victorious_slain_combatants
LIST_ALL_CHARACTERS = yes
}
if = {
limit = {
any_in_list = {
list = relevant_slain_combatants
}
}
# Send a message telling us about the casualties we inflicted after the battle
send_interface_message = {
type = event_slain_combatants_bad
title = combat_event.1013.slain_message.t
desc = {
first_valid = {
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 0 }
desc = combat_event.1013.slain_message.desc.single
}
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 1 }
desc = combat_event.1013.slain_message.desc.double
}
desc = combat_event.1013.slain_message.desc.multiple
}
desc = combat_event.1013.slain_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_deceased
# Show all slain combatants.
every_in_list = {
list = relevant_slain_combatants
show_as_tooltip = {
death = {
death_reason = death_battle
}
}
}
}
}
clear_relevant_slain_combatants_list_effect = yes
}
}
# Casualty notification event for combat loser.
combat_event.1013 = {
type = character_event
hidden = yes
immediate = {
# Generate a list of relevant slain characters on the enemy's side.
generate_relevant_slain_combatants_list_effect = {
LIST_OF_SLAIN_COMBATANTS = victorious_slain_combatants
LIST_ALL_CHARACTERS = no
}
if = {
limit = {
any_in_list = {
list = relevant_slain_combatants
}
}
# Send a message telling us about the casualties we inflicted after the battle
send_interface_message = {
type = event_slain_combatants_good
title = combat_event.1012.slain_message.t
desc = {
first_valid = {
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 0 }
desc = combat_event.1012.slain_message.desc.single
}
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 1 }
desc = combat_event.1012.slain_message.desc.double
}
desc = combat_event.1012.slain_message.desc.multiple
}
desc = combat_event.1012.slain_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_deceased
# Show all slain combatants.
every_in_list = {
list = relevant_slain_combatants
show_as_tooltip = {
death = {
death_reason = death_battle
}
}
}
}
}
clear_relevant_slain_combatants_list_effect = yes
# Repeat the above, but for casualties on our own side.
generate_relevant_slain_combatants_list_effect = {
LIST_OF_SLAIN_COMBATANTS = slain_combatants
LIST_ALL_CHARACTERS = yes
}
if = {
limit = {
any_in_list = {
list = relevant_slain_combatants
}
}
# Send a message telling us about the casualties we inflicted after the battle
send_interface_message = {
type = event_slain_combatants_bad
title = combat_event.1013.slain_message.t
desc = {
first_valid = {
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 0 }
desc = combat_event.1013.slain_message.desc.single
}
triggered_desc = {
trigger = { var:num_other_relevant_slain_combatants = 1 }
desc = combat_event.1013.slain_message.desc.double
}
desc = combat_event.1013.slain_message.desc.multiple
}
desc = combat_event.1013.slain_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_deceased
# Show all slain combatants.
every_in_list = {
list = relevant_slain_combatants
show_as_tooltip = {
death = {
death_reason = death_battle
}
}
}
}
}
clear_relevant_slain_combatants_list_effect = yes
}
}
# Casualty notification event for other relevant characters (sends a personalized notification to a player about characters of interest who were captured in battle.)
combat_event.1014 = {
type = character_event
hidden = yes
immediate = {
every_in_list = {
list = slain_combatants
add_to_list = all_slain_combatants
}
every_in_list = {
list = victorious_slain_combatants
add_to_list = all_slain_combatants
}
# Generate a list of all relevant slain combatants on both sides.
generate_relevant_slain_combatants_list_effect = {
LIST_OF_SLAIN_COMBATANTS = all_slain_combatants
LIST_ALL_CHARACTERS = no
}
if = {
limit = {
any_in_list = {
list = relevant_slain_combatants
}
}
# Send a message to the player informing them of the slain combatants.
send_interface_message = {
type = event_slain_combatants_neutral
title = combat_event.1014.slain_message.t
desc = {
first_valid = {
triggered_desc = {
trigger = {
var:num_other_relevant_slain_combatants = 0
}
desc = combat_event.1013.slain_message.desc.single
}
triggered_desc = {
trigger = {
var:num_other_relevant_slain_combatants = 1
}
desc = combat_event.1013.slain_message.desc.double
}
desc = combat_event.1013.slain_message.desc.multiple
}
desc = combat_event.1013.slain_message.desc.end
}
tooltip = event_message_effect
left_icon = scope:primary_deceased
# Show all slain combatants.
show_as_tooltip = {
every_in_list = {
list = relevant_slain_combatants
death = {
death_reason = death_battle
}
}
}
}
}
clear_relevant_slain_combatants_list_effect = yes
}
}
# Become known as a Gajapati if you have the prerequisites
combat_event.2001 = {
hidden = yes
scope = combat_side
trigger = {
has_maa_of_type = war_elephant
side_commander ?= {
is_alive = yes
culture = {
has_cultural_parameter = elephant_bonuses_for_rank_4_education
}
OR = {
has_trait = education_diplomacy_4
has_trait = education_stewardship_4
has_trait = education_martial_4
has_trait = education_learning_4
has_trait = education_diplomacy_5
has_trait = education_stewardship_5
has_trait = education_martial_5
has_trait = education_learning_5
}
NOT = {
has_nickname = nick_gajapati
}
}
}
immediate = {
random = {
chance = 15
side_commander = { set_nickname_effect = { NICKNAME = nick_gajapati } }
}
}
}
#####################
# Accolade Glory Changes
# Battle Won: glory goes up.
combat_event.2101 = {
hidden = yes
scope = combat_side
trigger = {
OR = {
any_side_knight = {
is_acclaimed = yes
}
any_side_commander = {
is_acclaimed = yes
}
}
}
immediate = {
every_side_knight = {
limit = {
is_acclaimed = yes
}
accolade = { add_glory = minor_glory_gain }
}
every_side_commander = {
limit = {
is_acclaimed = yes
}
accolade = { add_glory = minor_glory_gain }
}
}
}
# Battle Lost: glory goes down [sad trombone noises].
combat_event.2111 = {
hidden = yes
scope = combat_side
trigger = {
OR = {
any_side_knight = {
is_acclaimed = yes
}
any_side_commander = {
is_acclaimed = yes
}
}
}
immediate = {
every_side_knight = {
limit = {
is_acclaimed = yes
}
accolade = { add_glory = minimal_glory_loss }
}
every_side_commander = {
limit = {
is_acclaimed = yes
}
accolade = { add_glory = minimal_glory_loss }
}
}
}
#
######################
## Hereward the Wake
#
## You beat a Norman! Gain XP.
#combat_event.2200 = {
# hidden = yes
# scope = combat_side
#
# trigger = {
# exists = side_commander
# exists = enemy_side.side_commander
# enemy_side.side_commander = {
# has_culture = culture:norman
# }
# side_commander = {
# has_trait = the_wake
# }
# }
#
# immediate = {
# if = { #Hereward should always have the trait, but just in case
# limit = {
# side_commander = {
# has_trait = the_wake
# }
# }
# side_commander = {
# add_trait_xp = {
# trait = the_wake
# value = { 10 15 }
# }
# }
# }
# }
#}
##############
# Battle PoI #
##############
combat_event.3000 = {
hidden = yes
scope = combat_side
trigger = {
# Check to ensure all needed scopes are valid
exists = combat.location
exists = side_primary_participant
exists = enemy_side.side_primary_participant
combat.location = { # Check if the region has gotten one the last 25 years already
switch = {
trigger = geographical_region
graphical_western = { battle_poi_region_trigger = { REGION = graphical_western } }
graphical_mena = { battle_poi_region_trigger = { REGION = graphical_mena } }
graphical_india = { battle_poi_region_trigger = { REGION = graphical_india } }
graphical_mediterranean = { battle_poi_region_trigger = { REGION = graphical_mediterranean } }
graphical_steppe = { battle_poi_region_trigger = { REGION = graphical_steppe } }
}
NOR = { # Check that it doesn't already have any of the key data variables on the province, or a historical battle
has_travel_point_of_interest = poi_battles_historical
has_variable = battle_poi_winner
has_variable = battle_poi_loser
has_variable = battle_poi_date_day
has_variable = battle_poi_date_month
has_variable = battle_poi_date_year
}
}
# Check if this battle was important enough
calc_true_if = {
amount >= 3
any_in_list = {
list = slain_combatants
OR = {
this = root.enemy_side.side_primary_participant
is_heir_of = root.enemy_side.side_primary_participant
is_consort_of = root.enemy_side.side_primary_participant
}
}
any_in_list = {
list = prisoners_of_war
OR = {
this = root.enemy_side.side_primary_participant
is_heir_of = root.enemy_side.side_primary_participant
is_consort_of = root.enemy_side.side_primary_participant
}
}
troops_ratio <= 0.5
num_enemies_killed >= battle_poi_number_value # Scaling the later it gets, starts with 3000 before 1000 and then multiplies by 2 in 1000, 3 in 1100, etc
AND = {
percent_enemies_killed >= 65
combat = {
num_total_troops >= {
add = battle_poi_number_value
multiply = 2
}
}
}
combat = {
num_total_troops >= {
add = battle_poi_number_value
multiply = 3
}
}
combat = { warscore_value >= 15 }
side_primary_participant = { is_ai = no }
enemy_side.side_primary_participant = { is_ai = no }
}
}
immediate = {
combat.location = {
save_scope_as = combat_location
switch = { ### Setting a cooldown for the region, so we don't get too many
trigger = geographical_region
graphical_western = { battle_poi_region_cooldown_effect = { REGION = graphical_western } }
graphical_mena = { battle_poi_region_cooldown_effect = { REGION = graphical_mena } }
graphical_india = { battle_poi_region_cooldown_effect = { REGION = graphical_india } }
graphical_mediterranean = { battle_poi_region_cooldown_effect = { REGION = graphical_mediterranean } }
graphical_steppe = { battle_poi_region_cooldown_effect = { REGION = graphical_steppe } }
}
### Key data
add_to_global_variable_list = { # Add to list so it can be found by the PoI
name = battle_poi_list
target = this
}
set_variable = { # Winning Commander
name = battle_poi_winner
value = root.side_primary_participant
}
root.side_primary_participant = {
if = {
limit = {
has_dynasty = no
}
make_unprunable = yes
}
}
set_variable = { # Losing Commander
name = battle_poi_loser
value = root.enemy_side.side_primary_participant
}
root.enemy_side.side_primary_participant = {
if = {
limit = {
has_dynasty = no
}
make_unprunable = yes
}
}
set_variable = { # Day
name = battle_poi_date_day
value = current_day
}
set_variable = { # Month
name = battle_poi_date_month
value = current_month
}
set_variable = { # Year
name = battle_poi_date_year
value = current_year
}
random_list = { # Set a randomized variable, so we don't need the same desc every time
10 = { battle_poi_randomizer_effect = { NAME = 1 } }
10 = { battle_poi_randomizer_effect = { NAME = 2 } }
10 = { battle_poi_randomizer_effect = { NAME = 3 } }
}
### Extra (optional) data
if = { # Attacker
limit = {
root = { is_combat_side_attacker = yes }
}
set_variable = { name = battle_poi_attacker }
}
else = { # Defender
set_variable = { name = battle_poi_defender }
}
set_variable = { # Slain enemies (Percentage)
name = battle_poi_slain
value = root.percent_enemies_killed
}
if = { # Slay the opposing Commander
limit = {
any_in_list = {
list = slain_combatants
this = root.enemy_side.side_primary_participant
}
}
set_variable = { name = battle_poi_enemy_commander_slain }
}
if = { # Imprison the opposing Commander
limit = {
any_in_list = {
list = prisoners_of_war
this = root.enemy_side.side_primary_participant
}
}
set_variable = { name = battle_poi_enemy_commander_imprisoned }
}
root = {
random_side_knight = { # Check for particularly brave knight
limit = {
OR = {
prowess >= 20
has_trait = brave
has_trait = lifestyle_blademaster
has_trait = varangian
has_trait = berserker
}
}
scope:combat_location = {
set_variable = {
name = battle_poi_brave_knight
value = prev
}
}
}
side_primary_participant.commanding_army = { # Find a Unit Type that was in the battle
random_army_maa_regiment = {
limit = {
NOR = {
is_unit_type = siege_weapon
is_unit_type = skirmishers
}
}
switch = {
trigger = is_unit_type
archers = { battle_poi_maa_regiment_effect = { NAME = archers } }
light_cavalry = { battle_poi_maa_regiment_effect = { NAME = light_cavalry } }
archer_cavalry = { battle_poi_maa_regiment_effect = { NAME = light_cavalry } }
pikemen = { battle_poi_maa_regiment_effect = { NAME = pikemen } }
heavy_infantry = { battle_poi_maa_regiment_effect = { NAME = heavy_infantry } }
heavy_cavalry = { battle_poi_maa_regiment_effect = { NAME = heavy_cavalry } }
elephant_cavalry = { battle_poi_maa_regiment_effect = { NAME = heavy_cavalry } }
}
}
}
}
}
}
}