Policies modding

Version

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

This article is for the PC version of Stellaris only.

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

Policies are defined at "common/policies/xxx.txt".

## Data Structure

* **potential** - A block of Conditions to determine is an empire able to see this policy. If an empire can't see a policy, it won't have any of its options active. (Country scope)
* **allow** - A block of Conditions to determine is an empire able to change this policy. Vanilla use this to prevent switching diplomatic stance and war philosophy during a war. (Country scope)
* **option** - An instance that adds an option to this policy. Multiple allowed. A policy should have at least one valid option for each empire.
	+ **name** - A localisation key that determines the name and description of this option.
	+ **icon** - A reference to a GFX entry that determines the icon of this option. Only diplomatic stance has this. Other policy options will never have their icons displayed.
	+ **potential** & **valid** - Blocks of Conditions to determine is an empire able to see / choose this option. If either is rendered false while the empire have this option active, the empire will be forced out of it and switched to a valid choice of highest `ai_weight`, even for players. (Country scope)
	+ **policy\_flags = { flag\_xxx flag\_yyy }** - A list of strings to be checked by the condition `has_policy_flag`. A policy option without any policy flags can't be checked by Conditions.
	+ **modifier** - A block of Modifiers that applies to the empire with this option active.
	+ **on\_enabled** & **on\_disabled** - Blocks of Effects to be executed to the empire when this option is selected / switched out. (Country scope)
	+ **AI\_weight** - The AI will always choose a option of highest weight for each policy. The player will also have each policy fall into an option of highest `ai_weight` by default.

## Vanilla Example

This is the Diplomatic Stance policy.

```
diplomatic_stance = {
	potential = {
		OR = {
			is_country_type = default
			is_country_type = fallen_empire
			is_country_type = awakened_fallen_empire
			is_country_type = primitive
			is_country_type = awakened_marauders
		}
	}

	option = {
		name = "diplo_stance_belligerent"
		icon = "GFX_diplomatic_stance_belligerent"

		potential = {
			OR = {
				is_country_type = default
				is_country_type = awakened_fallen_empire
			}

			is_homicidal = no # They have their own variants of this
			NOT = { has_valid_civic = civic_inwards_perfection }
		}

		policy_flags = {
			diplo_stance_belligerent
		}

		modifier = {
			country_war_exhaustion_mult = -0.1
			country_naval_cap_mult = 0.1
			country_claim_influence_cost_mult = -0.1
		}

		ai_weight = {
			weight = 10

			modifier = {
				factor = 0
				NOT = { has_country_flag = has_encountered_other_empire }
			}

			...
		}
	}

	option = {
		name = "diplo_stance_cooperative"
		icon = "GFX_diplomatic_stance_cooperative"

		potential = {
			OR = {
				is_country_type = default
				is_country_type = awakened_fallen_empire
			}
			is_unfriendly = no # Not homicidal or barbaric despoilers
			NOT = { has_valid_civic = civic_inwards_perfection }
		}

		policy_flags = {
			diplo_stance_cooperative
		}

		modifier = {
			diplo_weight_mult = 0.25
			envoy_improve_relations_mult = 0.5
			country_border_friction_mult = -0.5
		}

		ai_weight = {
			weight = 10

			modifier = {
				factor = 0
				NOT = { has_country_flag = has_encountered_other_empire }
			}

			...
		}
	}

	...

}

```

## Relevant Dynamic Modding Statements

Conditions:

* `has_policy_flag = <policy flag key>` - Checks if the empire has any active policy option with this policy flag.
* `last_changed_policy = <policy key>` - Checks if the last policy the empire has changed was the specified policy. Used for on\_action events.

Effects:

```
# changes an empire's policy
set_policy = {
	policy = <policy key>
	option = <policy option name>
	cooldown = <yes/no> # determines should this effect set a 10-year cooldown of policy change
}

```

**Modding**