N3OW/common/factions/00_nomadic_faction.txt

579 lines
12 KiB
Text
Raw Normal View History

2026-05-30 00:59:58 -04:00
nomadic_faction = {
casus_belli = nomadic_war
leaders_allowed_to_leave = no
player_can_join = no
sort_order = 3
name = FACTION_NOMAD_DYNAMIC_NAME
short_effect_desc = nomadic_faction_short_effect_desc
discontent_progress = {
base = 0
modifier = {
add = 5
desc = "BASE_COLON"
}
}
power_threshold = 0
requires_county = yes
requires_character = no
is_valid = {
always = yes
}
is_county_valid = {
# Counties can only be in a faction against the top liege in their realm (who is inherently independent).
scope:faction.faction_target = holder.top_liege
holder.top_liege = {
NOR = {
has_government = herder_government
any_owned_story = {
OR = {
story_type = story_greatest_of_khans
story_type = story_mongol_invasion
}
}
}
}
title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
can_character_join = {
joined_faction = scope:faction
}
can_county_join = {
title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
}
can_county_create = {
county_opinion < 0
# Can only join factions against our top liege (not direct liege)
scope:target = holder.top_liege
holder.top_liege = {
NOR = {
has_government = herder_government
any_owned_story = {
OR = {
story_type = story_greatest_of_khans
story_type = story_mongol_invasion
}
}
}
}
title_province = {
OR = {
has_holding_type = nomad_holding
has_holding_type = herder_holding
}
}
####
# BLOCKERS
####
# General Faction immunity
custom_description = {
text = character_is_immune_to_factions
subject = scope:target
NOT = { scope:target = { immune_to_factions_trigger = yes } }
}
}
can_character_become_leader = {
always = yes
}
county_create_score = {
base = -5
compare_modifier = { # Non-nomads get it at -15 county opinion
trigger = {
scope:target = {
NOT = { government_has_flag = government_is_nomadic }
}
}
value = county_opinion
multiplier = -2
desc = "FACTION_REASON_COUNTY_OPINION"
}
compare_modifier = { # Nomads get it at roughly -35 county opinion
trigger = {
scope:target = {
government_has_flag = government_is_nomadic
}
}
value = county_opinion
multiplier = -1
desc = "FACTION_REASON_COUNTY_OPINION"
}
# If the targeted ruler isn't nomadic... time to rumble
modifier = {
add = 20
scope:target = {
NOR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
}
}
desc = "FACTION_REASON_DISLIKE_NON_NOMADS"
}
legalism_virtue_and_sin_modifier = {
TARGET = scope:target
SCORE_PER_TRAIT = 10
}
# Realm Stability Settings
modifier = {
add = 25
has_game_rule = lesser_realm_stability
}
modifier = {
add = -25
has_game_rule = higher_realm_stability
}
modifier = {
add = -50
has_game_rule = extreme_realm_stability
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_LESSER"
add = 25
has_game_rule = lesser_realm_stability_ai_only
scope:target = {
is_ai = yes
}
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_HIGHER"
add = -25
has_game_rule = higher_realm_stability_ai_only
scope:target = {
is_ai = yes
}
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_EXTREME"
add = -50
has_game_rule = extreme_realm_stability_ai_only
scope:target = {
is_ai = yes
}
}
# Conquerors
modifier = {
add = -100
scope:target = { ai_should_get_conqueror_bonuses = yes }
}
modifier = {
add = -200
scope:target = { ai_should_get_extreme_conqueror_bonuses = yes }
}
# 10-year 'grace period' from nomadic factions forming after game start
modifier = {
years_from_game_start <= 10
factor = {
value = 0
if = {
limit = { years_from_game_start >= 5 }
add = years_from_game_start
subtract = 5
divide = 5 # In year 6 factions can begin forming, but at 20% weighting. This increases to 40% in year 7, 60% in year 8, etc., up to 100% in year 10 where things are then normal.
}
}
}
}
county_join_score = {
base = 0
compare_modifier = { # Non-nomads get it at -10 county opinion
trigger = {
scope:faction.faction_target = {
NOT = { government_has_flag = government_is_nomadic }
}
}
value = county_opinion
multiplier = -2
desc = "FACTION_REASON_COUNTY_OPINION"
}
compare_modifier = { # Nomads get it at roughly -30 county opinion
trigger = {
scope:faction.faction_target = {
government_has_flag = government_is_nomadic
}
}
value = county_opinion
multiplier = -1
desc = "FACTION_REASON_COUNTY_OPINION"
}
# If the targeted ruler isn't nomadic... time to rumble
modifier = {
add = 10
scope:faction.faction_target = {
NOR = {
government_has_flag = government_is_nomadic
government_has_flag = government_is_herder
}
}
desc = "FACTION_REASON_DISLIKE_NON_NOMADS"
}
legalism_virtue_and_sin_modifier = {
TARGET = scope:faction.faction_target
SCORE_PER_TRAIT = 10
}
# Realm Stability Settings
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_LESSER"
add = 25
has_game_rule = lesser_realm_stability
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_HIGHER"
add = -25
has_game_rule = higher_realm_stability
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_EXTREME"
add = -50
has_game_rule = extreme_realm_stability
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_LESSER"
add = 25
has_game_rule = lesser_realm_stability_ai_only
scope:faction.faction_target = {
is_ai = yes
}
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_HIGHER"
add = -25
has_game_rule = higher_realm_stability_ai_only
scope:faction.faction_target = {
is_ai = yes
}
}
modifier = {
desc = "FACTION_REASON_GAME_RULE_REALM_STABILITY_EXTREME"
add = -50
has_game_rule = extreme_realm_stability_ai_only
scope:faction.faction_target = {
is_ai = yes
}
}
# Conquerors
modifier = {
add = -100
scope:faction.faction_target = { ai_should_get_conqueror_bonuses = yes }
}
modifier = {
add = -200
scope:faction.faction_target = { ai_should_get_extreme_conqueror_bonuses = yes }
}
}
county_power = county_horde_riders_to_raise_power
ai_join_score = {
}
on_creation = {
random_faction_county_member = {
save_scope_as = founding_county
}
set_variable = {
name = faction_culture
value = scope:founding_county.culture
}
set_variable = {
name = faction_faith
value = scope:founding_county.faith
}
}
on_destroy = {
set_variable = {
name = peasant_destroying
value = yes
}
if = {
limit = { exists = special_character }
special_character = {
save_temporary_scope_as = destroyer_of_titles
if = {
limit = {
has_variable = peasant_title
exists = this.var:peasant_title.holder
}
destroy_title = this.var:peasant_title
}
if = {
limit = {
NOT = {
has_character_flag = successful_nomad_revolt_leader
}
}
every_held_title = {
limit = {
is_landless_type_title = yes
}
scope:destroyer_of_titles = { destroy_title = prev }
}
if = {
limit = { # To make sure we aren't in debt
gold > 0
}
remove_long_term_gold = gold # Zero out our wallet since the revolt is over and we're going back to being unlanded.
}
}
if = {
limit = {
is_alive = yes # To prevent dead people from being checked for variables
}
if = {
limit = {
has_variable = rebel_leader_peasants
}
remove_variable = rebel_leader_peasants
}
remove_variable = peasant_title
remove_character_flag = peasant_faction_random_peasant
remove_character_flag = peasant_faction_claimant_without_title
if = {
limit = {
has_character_flag = peasant_faction_random_peasant
NOT = { has_character_flag = peasant_revolt_do_not_kill }
}
death = {
death_reason = death_vanished
}
}
}
}
}
}
demand = {
setup_nomadic_leader_effect = yes
# Faction leader is unhappy if they reach the point of needing to issue an ultimatim.
faction_leader = {
add_opinion = {
modifier = angry_opinion
target = root.faction_target
opinion = -50
}
}
# Save scopes that will be used in the demand event.
save_scope_as = faction
special_character = {
save_scope_as = peasant_leader
}
# Check for relevant vassals that owns any land targeted by the faction.
save_temporary_scope_as = county_faction
every_faction_county_member = {
limit = {
holder = {
NOT = { this = scope:faction.faction_target }
NOT = { is_in_list = nomadic_faction_vassal_targets }
}
}
holder = {
add_to_list = nomadic_faction_vassal_targets
}
}
every_faction_county_member = {
holder = {
every_liege_or_above = {
limit = {
NOT = { this = scope:faction.faction_target }
NOT = { is_in_list = nomadic_faction_vassal_targets }
}
add_to_list = nomadic_faction_vassal_targets
}
}
}
# Check if there is a player affected by the faction. AI rulers are blocked from accepting the faction demand if so.
if = {
limit = {
any_in_list = {
list = nomadic_faction_vassal_targets
is_ai = no
}
}
scope:faction = {
set_variable = {
name = faction_targets_player
value = yes
}
}
}
# Fire the demand event. A follow up event will be sent to affected vassals.
scope:faction.faction_target = {
trigger_event = faction_demand.9998
}
}
ai_demand_chance = {
base = 100
modifier = {
add = -1000
faction_target = {
involved_activity ?= {
has_activity_type = activity_coronation
activity_host = prev
}
}
}
}
on_war_start = {
# Duchy initialization so we can concentrate the rebels in just a few important counties instead of spreading them over the entire realm.
every_faction_county_member = {
duchy = {
if = {
limit = {
NOT = {
is_in_list = areas_of_rebellion
}
}
add_to_list = areas_of_rebellion
}
}
}
# Check where in the duchy the rebellion troops should spawn, then spawn them.
every_in_list = {
list = areas_of_rebellion
save_temporary_scope_as = this_duchy
# Determine where in the duchy those troops should spawn.
ordered_in_de_jure_hierarchy = {
# Troops can only spawn in counties that belong to our faction!
limit = {
tier = tier_county
any_title_joined_faction = {
this = root
}
}
order_by = county_fertility
title_province = {
save_temporary_scope_as = local_center_of_rebellion
}
}
# Spawn the faction troops in the designated location.
root.faction_leader = {
spawn_nomadic_revolt_troops = yes
}
# Give the populist leader a commander for each stack of troops.
create_character = {
template = new_commander_character
location = scope:local_center_of_rebellion
faith = root.faction_leader.faith
culture = root.faction_leader.culture
save_scope_as = new_populist_commander
gender_female_chance = {
if = {
limit = { root.faction_leader.culture = { has_cultural_parameter = martial_custom_male_only_combatant } }
add = 0
}
else_if = {
limit = { root.faction_leader.culture = { has_cultural_parameter = martial_custom_female_only_combatant } }
add = 100
}
else = {
add = 50
}
}
}
scope:new_populist_commander = {
set_employer = root.faction_leader
add_trait = nomadic_philosophy
}
}
# Give the populist leader a small purse so they don't immediately go bankrupt with army maintenance.
every_faction_county_member = {
root.faction_leader = {
add_gold = 25
}
}
}
leader_leaves = {
# Should only trigger when the leader is captured in battle.
if = {
limit = {
special_character ?= {
is_alive = no
}
}
faction_war = {
end_war = defender
}
destroy_faction = yes
}
if = {
limit = {
NOT = { has_variable = peasant_destroying }
exists = faction_war
}
faction_war = {
end_war = defender
}
}
}
character_allow_create = no
special_character_title = "FACTIONS_WINDOW_LEADER"
inherit_membership = no
multiple_targeting = no
}