Pop Faction modding

From Stellaris Wiki
Jump to navigation Jump to search

Version

Outliner top.png
Please help with verifying or updating older sections of this article. At least some were last verified for version 3.4.3.

This article is for the PC version of Stellaris only.

This page is about how to modify existing and how to create new Factions.

Factions are defined at "common/pop_faction_types/xxx.txt".

Data Structure[edit | edit source]

Property Description
election_header = <GFX entry key> Determines the header texture to be attached to the leader entry in democratic election window.

Auth democratic.png Democratic governments will use at least the current ruler and the leader of each faction as election candidates and faction leaders will use this header texture and have their faction names written on it. Leaders without any factions will use a fallback header texture that reads "Independent".

guiding_ethic = <ethic key> Determines the guiding ethic of this faction.

By default, only pops with of this ethic can join the faction.

use_guiding_ethic_as_pop_filter = <yes/no> If no, pops without the guiding ethic can join the faction.
unique = <yes/no> If yes, only one instance of this faction can exist in an Empire. Vanilla factions always have "yes".
support_multiplier = <float> Auth democratic.png Democratic election candidates from this faction have their support multiplied by this number.
resources An Economy Unit to determine the resource production of this faction. The production is mulitplied by faction support rate and faction approval.

Vanilla factions always have economy category pop_factions.

is_potential A block of Conditions to determine should an Empire have this faction.

Vanilla factions always exclude Gestalt consciousness.png Gestalt Consciousness and require 10 years have been passed since start of the game and have once encountered another species.

parameters Pre-defined parameters to be called by Faction Actions.

Vanilla always define it like this, making parameter:empire usable in Faction Actions to scope to the Empire this faction is in.

parameters = {
	empire = {
		type = country
		valid_objects = {
			is_same_value = root
		}
	}
}
can_join_pre_triggers A block of Pseudo-Conditions to determine can a Pop join this faction. Only the following yes-or-no questions are allowed. Vanilla always have is_enslaved = no and is_being_purged = no. Without the pre-triggers, the whole set of conditions will be evaluated once for each of the thousands of Pops in the galaxy, which can be performance intensive.
  • has_owner
  • is_enslaved
  • is_being_purged
  • is_being_assimilated
  • has_planet
  • is_sapient
can_join_faction A block of Conditions to determine can a Pop join this faction. (Pop scope)
attraction Determines the attraction to Pops of this faction.

Vanilla factions always have 100 base attraction, x1.25 attraction to Pops with citizenship rights, x1.25 if faction leader is the current ruler, and x0.75 if faction has no leaders. However, a Pop can only meet the requirements of up to one faction at a time while faction leader is chosen randomly and cannot be unassigned and will be randomly chosen again if current leader is fired or diseased, making this field entirely irrelevant.

leader Determines how likely a leader will be randomly chosen as the leader of this faction. Vanilla always have 100 base weight and x0 for event leaders. Supermacist factions will exclude alien leaders as well, or an alien talking about human superiority can be immersion breaking. If no leaders have a weight greater than 0, the faction will still be created but remain leaderless for the rest of the game.
demand An entry of a faction issue. Multiple allowed.
  • title = <localisation key>
  • unfulfilled_title = <localisation key>
  • desc = <localisation key>
The flavor text part of this issue. The title can change based on if it's fulfilled or not.
  • fulfilled_effect = <float>
  • unfulfilled_effect = <float>
The faction approval impact of this issue.
  • potential
  • trigger
The former block of Conditions determines should this faction have this issue, and if yes, the later block of Conditions determines is this issue fulfilled. (Faction scope, use owner to scope to the Empire)
on_create A block of Effects to be executed to the faction when this faction is created. Vanilla always have pop_faction_event = { id = factions.1 }, which calls the event to tell the player "a faction named [Faction] led by a leader [Leader] is created". (Faction scope)
on_destroy A block of Effects to be executed to the Empire when this faction is dissolved. Vanilla always remove the "Ethic Promoted" and "Ethic Supressed" static modifiers for the Empire. (Country scope)
actions A list of entries to define actions an Empire can take to this faction.
  • title = <localisation key>
  • description = <localisation key>
The flavor text part of this faction action.
  • cost = { <resource key> = <int> }
The cost of this action.
  • potential
  • valid
The former block of Conditions determines should this faction have this action listed, and if yes, the later block of Conditions determines can this action be performed. (Faction scope)
  • effect
A block of Effects to be executed when this action is taken. (Faction scope)
  • ai_weight
How likely the AI will use this action.

Faction Example[edit | edit source]

Imperialist Faction[edit | edit source]

0
imperialist = {
	election_header = "GFX_faction_header_yellow"
	guiding_ethic = ethic_militarist #only pops of this ethic can join the faction

	unique = yes
	support_multiplier = 1

	resources = {
		category = pop_factions
		produces = {
			unity = 0.5
		}
	}

	is_potential = {
		is_faction_allowed = yes
		if = {
			limit = {
				has_faction = imperialist
				any_pop_faction = {
					is_pop_faction_type = imperialist
					num_pops >= 5
				}
			}
		}
		else = {
			count_owned_pop = {
				count >= 5
				limit = {
					has_ethic = ethic_militarist
				}
			}
		}
	}

	parameters = {
		empire = {
			type = country
			valid_objects = {
				is_same_value = root
			}
		}
	}

	can_join_pre_triggers = {
		is_enslaved = no
		is_being_purged = no
	}

	can_join_faction = {
		is_shackled_robot = no
		can_think = yes
	}

	attraction = {
		base = 100

		modifier = {
			factor = 1.25
			exists = from
			from = {
				exists = leader
				leader = { leader_class = ruler }
			}
		}

		modifier = {
			factor = 0.75
			exists = from
			from = {
				NOT = { exists = leader }
			}
		}

		modifier = {
			factor = 1.25
			has_citizenship_rights = yes
		}
	}

	leader = {
		base = 100

		modifier = {
			factor = 0.0
			is_event_leader = yes
		}
	}

	demand = {
		title = "FACTION_OUTRAGED_GC"
		unfulfilled_title = "FACTION_OUTRAGED_GC"
		desc = "FACTION_OUTRAGED_GC_DESC"

		fulfilled_effect = -20
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				has_country_flag = faction_militarist_outraged_gc
			}
		}

		trigger = {
			owner = {
				has_country_flag = faction_militarist_outraged_gc
			}
		}
	}

	demand = {
		title = "IMPERIALIST_PHILOSOPHY"
		unfulfilled_title = "IMPERIALIST_NO_PHILOSOPHY"
		desc = "IMPERIALIST_PHILOSOPHY_DESC"

		unfulfilled_effect = -30
		fulfilled_effect = 0.001

		potential = {
			exists = owner
			owner = {
				any_relation = {
					has_communications = root.owner
					is_country_type = default
					NOT = { exists = overlord }
				}
			}
		}

		trigger = {
			owner = {
				OR = {
					has_policy_flag = unrestricted_wars
					has_policy_flag = liberation_wars
				}
			}
		}
	}

	demand = {
		title = "IMPERIALIST_CONQUEST"
		unfulfilled_title = "IMPERIALIST_NO_CONQUEST"
		desc = "IMPERIALIST_CONQUEST_DESC"

		fulfilled_effect = 10
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				any_relation = {
					has_communications = root.owner
					is_country_type = default
					NOT = { exists = overlord }
				}
			}
		}

		trigger = {
			owner = {
				has_country_flag = imperialist_conquest_timed_flag
			}
		}
	}

	demand = {
		title = "SUPREMACIST_FANATIC_PURIFIERS"
		unfulfilled_title = "SUPREMACIST_NOT_FANATIC_PURIFIERS"
		desc = "SUPREMACIST_FANATIC_PURIFIERS_DESC"

		fulfilled_effect = 10
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				has_valid_civic = civic_fanatic_purifiers
			}
		}

		trigger = {
			owner = {
				has_valid_civic = civic_fanatic_purifiers
			}
		}
	}

	demand = {
		title = "IMPERIALIST_RIVALS1"
		unfulfilled_title = "IMPERIALIST_FEW_RIVALS1"
		desc = "IMPERIALIST_RIVALS_DESC1"

		fulfilled_effect = 5
		unfulfilled_effect = -5

		potential = {
			exists = owner
			owner = {
				num_communications > 2
				NOT = { has_valid_civic = civic_fanatic_purifiers }
				num_rivals < 2
			}
		}

		trigger = {
			owner = {
				num_rivals > 0
			}
		}
	}

	demand = {
		title = "IMPERIALIST_RIVALS2"
		unfulfilled_title = "IMPERIALIST_FEW_RIVALS2"
		desc = "IMPERIALIST_RIVALS_DESC2"

		fulfilled_effect = 10
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				num_communications > 2
				NOT = { has_valid_civic = civic_fanatic_purifiers }
				num_rivals = 2
			}
		}

		trigger = {
			owner = {
				num_rivals > 1
			}
		}
	}

	demand = {
		title = "IMPERIALIST_RIVALS3"
		unfulfilled_title = "IMPERIALIST_FEW_RIVALS3"
		desc = "IMPERIALIST_RIVALS_DESC3"

		fulfilled_effect = 15
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				num_communications > 2
				NOT = { has_valid_civic = civic_fanatic_purifiers }
				num_rivals > 2
			}
		}

		trigger = {
			owner = {
				num_rivals > 2
			}
		}
	}

	demand = {
		title = "IMPERIALIST_OVERLORD" #Imperial Hegemony
		unfulfilled_title = "IMPERIALIST_NOT_OVERLORD"
		desc = "IMPERIALIST_OVERLORD_DESC"

		fulfilled_effect = 5
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				num_communications > 2
				NOT = { has_valid_civic = civic_fanatic_purifiers }
			}
		}

		trigger = {
			OR = {
				owner = {
					is_overlord = yes
				}
				owner = {
					has_federation = yes
					federation = {
						has_federation_type = hegemony_federation
					}
					is_federation_leader = yes
				}
			}
		}
	}

	demand = {
		title = "IMPERIALIST_UNDERLING"
		unfulfilled_title = "IMPERIALIST_NOT_UNDERLING"
		desc = "IMPERIALIST_UNDERLING_DESC"

		unfulfilled_effect = -25
		fulfilled_effect = 0.001

		potential = {
			exists = owner
			owner = {
				has_overlord_dlc = no
				is_subject = yes
			}
		}

		trigger = {
			owner = {
				is_subject = no
			}
		}
	}

	demand = {
		title = "IMPERIALIST_BULWARK"
		unfulfilled_title = "IMPERIALIST_NOT_BULWARK"
		desc = "IMPERIALIST_BULWARK_DESC"

		unfulfilled_effect = -25
		fulfilled_effect = 0.001

		potential = {
			exists = owner
			owner = {
				has_overlord_dlc = yes
				is_subject = yes
				is_specialist_subject_type = { TYPE = bulwark }
			}
		}

		trigger = {
			owner = {
				OR = {
					is_subject = no
					is_specialist_subject_type = { TYPE = bulwark }
				}
			}
		}
	}

	demand = {
		title = "IMPERIALIST_SLAYER"
		unfulfilled_title = "IMPRERIALIST_NOT_SLAYER"
		desc = "IMPERIALIST_SLAYER_DESC"

		fulfilled_effect = 10
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				host_has_dlc = "Leviathans Story Pack"
				OR = {
					has_country_flag = killed_guardian
					any_country = {
						is_guardian_country = yes
						has_communications = prev
					}
				}
			}
		}

		trigger = {
			owner = {
				has_country_flag = killed_guardian
			}
		}
	}

	demand = {
		title = "IMPERIALIST_MILITARY_APPLICATIONS"
		unfulfilled_title = "IMPERIALIST_NO_MILITARY_APPLICATIONS"
		desc = "IMPERIALIST_MILITARY_APPLICATIONS_DESC"

		fulfilled_effect = 5
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				host_has_dlc = "Ancient Relics Story Pack"
				has_technology = tech_arcane_deciphering
				OR = {
					has_modifier = artifact_find_military_application_army
					has_modifier = artifact_find_military_application_shield_damage
					has_modifier = artifact_find_military_application_armor_damage
				}
			}
		}

		trigger = {
			owner = {
				OR = {
					has_modifier = artifact_find_military_application_army
					has_modifier = artifact_find_military_application_shield_damage
					has_modifier = artifact_find_military_application_armor_damage
				}
			}
		}
	}

	demand = {
		title = "IMPERIALIST_PEACEFUL_APPLICATIONS"
		unfulfilled_title = "IMPERIALIST_NO_PEACEFUL_APPLICATIONS"
		desc = "IMPERIALIST_PEACEFUL_APPLICATIONS_DESC"

		unfulfilled_effect = -5
		fulfilled_effect = 0.001

		potential = {
			exists = owner
			owner = {
				host_has_dlc = "Ancient Relics Story Pack"
				has_technology = tech_arcane_deciphering
				OR = {
					has_modifier = artifact_find_peaceful_application_happy_bios
					has_modifier = artifact_find_peaceful_application_consumer_goods
					has_modifier = artifact_find_peaceful_application_amenities
					has_modifier = artifact_find_peaceful_application_leader_improvement
				}
			}
		}

		trigger = {
			owner = {
				NOR = {
					has_modifier = artifact_find_peaceful_application_happy_bios
					has_modifier = artifact_find_peaceful_application_consumer_goods
					has_modifier = artifact_find_peaceful_application_amenities
					has_modifier = artifact_find_peaceful_application_leader_improvement
				}
			}
		}
	}

	demand = {
		title = "STRONG_DIPLO_STANCE"
		unfulfilled_title = "STRONG_DIPLO_STANCE"
		desc = "STRONG_DIPLO_STANCE_DESC"

		fulfilled_effect = 10
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				is_homicidal = no
				is_country_type = default
				OR = {
					has_policy_flag = diplo_stance_belligerent
					has_policy_flag = diplo_stance_supremacist
				}
			}
		}

		trigger = {
			owner = {
				OR = {
					has_policy_flag = diplo_stance_belligerent
					has_policy_flag = diplo_stance_supremacist
				}
			}
		}
	}

	demand = {
		title = "WEAK_DIPLO_STANCE"
		unfulfilled_title = "WEAK_DIPLO_STANCE"
		desc = "WEAK_DIPLO_STANCE_DESC"

		fulfilled_effect = 0.01
		unfulfilled_effect = -10

		potential = {
			exists = owner
			owner = {
				is_homicidal = no
				is_country_type = default
				has_policy_flag = diplo_stance_cooperative
			}
		}

		trigger = {
			owner = {
				NOT = { has_policy_flag = diplo_stance_cooperative }
			}
		}
	}

	demand = {
		title = "IMPERIALIST_BENEVOLENT_SUBJUGATION_POLICY"
		unfulfilled_title = "IMPERIALIST_NO_BENEVOLENT_SUBJUGATION_POLICY"
		desc = "IMPERIALIST_BENEVOLENT_SUBJUGATION_POLICY_DESC"

		unfulfilled_effect = -5
		fulfilled_effect = 0.001

		potential = {
			exists = owner
			owner = {
				is_subject = no
				has_policy_flag = benevolent_terms
			}
		}

		trigger = {
			owner = {
				NOT = { has_policy_flag = benevolent_terms }
			}
		}
	}

	demand = {
		title = "IMPERIALIST_OPPRESSIVE_SUBJUGATION_POLICY"
		unfulfilled_title = "IMPERIALIST_ADOPT_OPPRESSIVE_SUBJUGATION_POLICY"
		desc = "IMPERIALIST_OPPRESSIVE_SUBJUGATION_POLICY_DESC"

		fulfilled_effect = 5
		unfulfilled_effect = -0.001

		potential = {
			exists = owner
			owner = {
				is_subject = no
				NOT = { has_policy_flag = benevolent_terms }
			}
		}

		trigger = {
			owner = {
				has_policy_flag = oppressive_terms
			}
		}
	}

	on_create = {
		pop_faction_event = { id = factions.1 }
	}

	on_destroy = {
		if = {
			limit = {
				has_modifier = promoted_militarist
			}
			remove_modifier = promoted_militarist
		}
		if = {
			limit = {
				has_modifier = suppressed_militarist
			}
			remove_modifier = suppressed_militarist
		}
	}

	actions = {
		embrace_faction = {
			title = "EMBRACE_FACTION"
			description = "EMBRACE_FACTION_DESC"

			cost = {
				unity = 5000
			}

			potential = {
				exists = owner
				owner = {
					OR = {
						is_subject = no
						NOT = { any_agreement = { agreement_preset = preset_dominion } }
					}
				}
			}

			valid = {
				custom_tooltip = {
					fail_text = EMBRACE_FACTION_COOLDOWN
					parameter:empire = {
						NOT = { has_modifier = embraced_faction_timer }
					}
				}
				support > 0.20
				parameter:empire = {
					NOT = { has_ethic = "ethic_fanatic_militarist" }
				}
			}

			effect = {
				add_modifier = { modifier = embraced_faction days = 3600 }
				parameter:empire = {
					shift_ethic = ethic_militarist
					hidden_effect = {
						add_modifier = { modifier = embraced_faction_timer days = 3600 }
						every_pop_faction = {
							limit = { NOT = { is_same_value = root } }
							add_modifier = { modifier = embraced_another_faction days = 3600 }
						}
					}
				}
				hidden_effect = {
					save_event_target_as = TargetFaction
					parameter:empire = {
						every_relation = {
							limit = {
								is_ai = no
								is_country_type = default
								has_communications = prev
								has_intel_level = {
									who = prev
									category = government
									level >= 1
								}
							}
							country_event = { id = factions.2000 }
						}
					}
				}
			}

			ai_weight = {
				base = 1
				modifier = {
					factor = 0
					support < 0.50
					owner = {
						has_ethic = ethic_militarist
					}
				}
				modifier = {
					factor = 0
					owner = { has_valid_civic = civic_fanatic_purifiers }
				}
				modifier = {
					factor = 0
					NOT = {
						owner = {
							exists = ruler
							ruler = {
								leader_of_faction = imperialist
							}
						}
					}
				}
				modifier = {
					factor = 0
					owner = {
						count_pop_faction = {
							count < 4
						}
					}
				}
			}
		}
		promote_faction = {
			title = "PROMOTE_FACTION"
			description = "PROMOTE_FACTION_DESC"

			potential = {
				exists = owner
				parameter:empire = {
					NOR = {
						has_modifier = suppressed_militarist
						has_modifier = promoted_militarist
					}
				}
			}

			effect = {
				parameter:empire = {
					add_modifier = { modifier = promoted_militarist days = -1 }
				}
			}

			ai_weight = {
				base = 0
			}
		}
		cancel_promote_faction = {
			title = "CANCEL_PROMOTE_FACTION"
			description = "CANCEL_PROMOTE_FACTION_DESC"

			potential = {
				exists = owner
				parameter:empire = { has_modifier = promoted_militarist }
			}

			effect = {
				parameter:empire = {
					remove_modifier = promoted_militarist
				}
			}

			ai_weight = {
				base = 0
			}
		}
		suppress_faction = {
			title = "SUPPRESS_FACTION"
			description = "SUPPRESS_FACTION_DESC"

			potential = {
				exists = owner
				parameter:empire = {
					NOR = {
						has_modifier = suppressed_militarist
						has_modifier = promoted_militarist
					}
				}
			}

			effect = {
				add_modifier = { modifier = suppressed_faction days = -1 }
				parameter:empire = {
					add_modifier = { modifier = suppressed_militarist days = -1 }
				}
			}

			ai_weight = {
				base = 0
			}
		}
		cancel_suppress_faction = {
			title = "CANCEL_SUPPRESS_FACTION"
			description = "CANCEL_SUPPRESS_FACTION_DESC"

			potential = {
				exists = owner
				parameter:empire = { has_modifier = suppressed_militarist }
			}

			effect = {
				remove_modifier = suppressed_faction
				parameter:empire = {
					remove_modifier = suppressed_militarist
				}
			}

			ai_weight = {
				base = 0
			}
		}
	}
}

The AI will only embrace a faction if current ruler is the faction leader. Also, Civic fanatic purifiers.png Fanatic Purifiers will never embrace factions.

Some issues will increase faction approval by +0.001 if fulfilled, or decrease approval by −0.001 if unfulfilled. This is to mark the issue green or red. If an issue currently has no effect, it will be marked yellow, which can be confusing.
Empire EmpireEthicsGovernments • Civics • OriginsMandatesAgendasTraditions • Ascension perksEdictsPoliciesRelicsTechnologiesCustom empires
Pops JobsFactions
Leaders LeadersLeader traits
Species SpeciesSpecies traits
Planets PlanetsPlanetary feature • Orbital depositBuildings • DistrictsPlanetary decisions
Systems SystemsStarbasesMegastructuresBypassesMap
Fleets FleetsShips • Components
Land Warfare ArmiesBombardment stance
Diplomacy Diplomacy • Federations • Galactic communityOpinion modifiersCasus Belli • War goals
Events EventsAnomaliesSpecial projectsArchaeological sites
Gameplay GameplayDefinesResources • EconomyGame start
Dynamic modding Dynamic moddingEffectsConditionsScopesModifiersVariablesAI
Media/localisation Maya exporterGraphicsPortraitsFlagsEvent picturesInterfaceIconsMusicLocalisation
Other Console commandsSave-game editingSteam WorkshopModding tutorial