Planet Generation modding

From Stellaris Wiki
Jump to navigation Jump to search


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

This article is for the PC version of Stellaris only.

This page is about modding Deposits and Planet Modifiers.


Deposits are objects on Planets that can have its own resource production and upkeep and Modifiers to the planet.

There are two types of Deposits, one being the planetary features for the colonizable planets that can be inspected by the player, and another being the orbital deposits for the uncolonizable planets that usually can't be inspected by the player.

There are two types of planetary features, one being normally pure-benifitial and unremovable and another being normally pure-harmful and can be removed by spending resources, called blockers. Some blockers spawn with an additional planetary feature behind it, but the seemingly "blocked" planetary feature isn't actually added to the planet before the blocker to be cleared. Although vanilla unused, a blocker can also block a blocker behind it.

They are defined at "common/deposits/xxx.txt".

Data Structure[edit]

Property Planetary Features Planetary Blockers Orbital Deposits
is_for_colonizeable = <yes/no> For obvious reason this have to be is_for_colonizeable = yes. For obvious reason this have to be is_for_colonizeable = no or be left undefined.
station No.png Determines the type of orbital station required to mine this deposit. One of the following is allowed.
  • shipclass_mining_station
  • shipclass_research_station
icon = <deposit key> This deposit will use the icon of another deposit instead.

The default icon path is gfx/interface/icons/deposits/<deposit key>.dds.

Since orbital deposits can't be normally inspected, this property will normally not be useful.
use_for_min_max_adjustments = <yes/no> If yes, this deposit is used to refresh the maximum districts on planet view. Vanilla have this toggled yes for each deposit that increases maximum number of a certain type of district. No.png
category = <deposit category> For obvious reason the deposit category must NOT specify blocker = yes.

Vanilla use one of the following.

  • deposit_cat_food
  • deposit_cat_energy
  • deposit_cat_minerals
  • deposit_cat_rare
For obvious reason the deposit category must specify blocker = yes.

Vanilla use one of the folliwing.

  • deposit_cat_blockers
  • deposit_cat_rare_blocker
Blocks of Modifiers to be applied to the Planet. Modifiers that add maximum number of buildings / disctricts of a certain type go here. If this deposit is blocked behind a blocker, none of these effects apply. Modifiers that affect Trade value.png Trade Value go here. The Trade Value can be collected without building any stations on the Planet. Other Modifiers don't apply.
country_modifier A block of Modifiers to be applied to the Empire that owns this Planet. No.png
blocked_modifier Vanilla unused but mentioned it in the comments. Presumably Modifiers to be applied to the Planet for as long as this deposit remains blocked behind a blocker.
constant_modifier Vanilla unused but mentioned it in the comments. Presumably Modifiers to be applied to the Planet regardless of this deposit being blocked behind a blocker or not.
should_swap_deposit_on_terraforming = <yes/no>
terraforming_swap_types = { _key_of_deposit_ ...}
all_terraforming_swap_types = <yes/no>
use_weights_for_terraforming_swap_types = <yes/no>
Some vanilla planetary features will swap into another of exactly same effect after terraforming. This is implemented through these properties.

If this deposit should swap on terraforming and it no longer mets its potential after a terraforming, it will swap to a random one from the list that meets its potential.

If "all terraforming swap types" is allowed, then ALL non-blocker deposits that meet their potential on this planet can be chosen.

If "use weights for terraforming swap types", the swap is furtherly weighted by their drop_weight.

blocker_swap_types = { _key_of_deposit_ ... }
all_blocker_swap_types = <yes/no>
use_weights_for_blocker_swap_types = <yes/no>
No.png When this blocker is placed on a Planet, if it has any blocker swap type, a random deposit that meets its potential on this planet is chosen to be visibly "blocked" behind this blocker. Before this blocker to be cleared, the deposit isn't actually added to the planet and none of its effects will apply.

if "all blocker swap types" is allowed, then ALL non-blocker deposits that meet their potential on this planet can be chosen.

If "use weights for blocker swap types", the swap is furtherly weighted by their drop_weight.

resources An Economy Unit of this deposit to determine its resource production, upkeep and blocker removal cost.
Vanilla use planet_deposits for the economy category, although it's quite rare for a normal deposit to directly produce resources itself. Vanilla use deposit_blockers for the economy category. Vanilla use orbital_mining_deposits and orbital_research_deposits for the economy category.
can_be_cleared No.png A block of Conditions to check can this blocker be cleared. (Planet scope) No.png
on_cleared A block of Effects to be executed after this blocker is cleared. (Planet scope)
time = <int> Days it takes to clear this blocker.
prerequisites = { <tech key> ...} A list of Technologies to be researched before this blocker can be cleared.
potential A block of Conditions to check can this deposit be spawned on a Planet. This block is neglected if the deposit is added via script. (Planet scope)
drop_weight Determines how likely this deposit is spawned on a Planet. If drop weight is multiplied by 0 this deposit can't be spawned on this Planet. (Planet scope)

Deposit Categories[edit]

Planetary features are grouped by Deposit Categories defined at "common/deposit_categories/xxx.txt". They are so simple that they have only two properties. This is used to diverse planetary features to make the planet have relatively less "extreme" maximum district distribution.
deposit_cat_food = { }
deposit_cat_energy = {}
deposit_cat_minerals = {}
deposit_cat_blockers = { 
	blocker = yes # Counts as blockers
deposit_cat_rare = { 
	important = yes	# Shows up as rare deposits in planetview
deposit_cat_rare_blocker = { 
	blocker = yes # Counts as blockers
	important = yes	# Shows up as rare deposits in planetview

The Null Orbital Deposit[edit]

There is a null orbital deposit present. It generates no resources and doesn't support any kind of orbital stations, functioanlly play as a placeholder for the uncolonizable planets devoid of deposits. An uncolonizable planet that doesn't meet the potential of the null deposit will always have an orbital deposit.
d_null_deposit = {
	is_null = yes
	potential = {
		is_primary_star = no
		NOR = {			
			is_planet_class = pc_ringworld_habitable_damaged
			is_planet_class = pc_ringworld_tech_damaged
	drop_weight = {
		weight = 100


Planetary Feature: Hot Springs (+1 Max Generator Districts)
d_hot_springs = {
	is_for_colonizeable = yes
	use_for_min_max_adjustments = yes

	category = deposit_cat_energy
	use_weights_for_terraforming_swap_types = yes
	should_swap_deposit_on_terraforming = yes
	terraforming_swap_types = {
		d_buzzing_plains # gaia
	planet_modifier = { 
		district_generator_max = 1
	potential = {
		OR = {
			is_cold = yes
			is_wet = yes
			is_planet_class = pc_nuked
	drop_weight = {
		weight = @high	
		modifier = {
			factor = @planet_type_bonus
			is_dry = yes
Blocker: Dangerous Wildlife
d_dangerous_wildlife_blocker = {
	time = 270

	is_for_colonizeable = yes
	category = deposit_cat_blockers

	resources = {
		category = deposit_blockers
		cost = {
			energy = 500

	potential = {
		planet_size >= 10

	planet_modifier = {
		planet_max_districts_add = -2

	on_cleared = {
		hidden_effect = {
			if = {
				limit = {
					exists = owner
					owner = {
						has_civic = civic_hive_devouring_swarm
				owner = { add_resource = { food = 200 } }

	drop_weight = {
		weight = @blocker_low
		modifier = {
			factor = 0.5
			planet_size < 15
		modifier = {
			factor = 0
			num_free_districts = {
				type = district_city
				value < 2

	prerequisites = { "tech_dangerous_wildlife" }
Orbital Deposit: 1 Society Research
d_society_1 = {
	resources = {
		category = orbital_research_deposits
		produces = {
			society_research = 1
	station = shipclass_research_station 
	is_for_colonizeable = no
	potential = {
		is_planet_class = pc_toxic
	drop_weight = {
		weight = 0	

Planet Modifiers[edit]

Planet Modifiers are additional modifiers given to planets upon planet generation. They are linked to Static Modifiers but not equivalant to them. They are defined at "common/planet_modifiers/xxx.txt".

Data Structure[edit]

Property Description
modifier = <static modifier> Relative Static Modifier to be added to the planet.
  • modifier
    • add = <int>
    • factor = <float>
    • Conditions (Planet Scope)
Modifies the weights of this Planet Modifier to spawn.

The Null Planet Modifier[edit]

Similarly, there is a null planet modifier present that has no linked Static Modifier just serve as a placeholder.
pm_null = {
	is_null = yes
	spawn_chance = {
		value = 275
		modifier = {
			factor = 3
			num_modifiers > 2
		modifier = {
			factor = 3
			num_modifiers > 1
		modifier = {
			factor = 3
			num_modifiers > 0

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 • Economy
Dynamic modding Dynamic moddingEffectsConditionsScopesModifiersVariablesAI
Media/localisation Maya exporterGraphicsPortraitsFlagsEvent picturesInterfaceIconsMusicLocalisation
Other Console commandsSave-game editingSteam Workshop