Open main menu

Building modding

Version

Outliner top.png
This article has been verified for the current PC version (2.7) of the game.

This page is about modding Buildings and Districts.

Contents

OverviewEdit

Buildings require at least two files: a text document containing the building definition in /Stellaris/common/buildings and a language file in /Stellaris/localisation. Additionally, a custom icon for the building can be placed in /Stellaris/gfx/interface/icons/buildings. Districts are similar to buildings, except they are stacked together in the planet view. They are defined at /Stellaris/common/districts. This article will focus on building definitions.

building_sample_monument = { 

}

The above is the start of a building definition called sample_monument. To the left of the equal sign is the building's identifier, which will be used to reference this building in other game files. Everything within the curly-brackets sets the behavior of the building, including its cost, upkeep, and prerequisites. The building's actual name and description are not part of this definition, however, but are instead looked up in the relevant localisation file. The keys for this are determined by the building's id, as seen below. See Localisation modding for more on how text is displayed in game.

 building_sample_monument: "Sample Building"
 building_sample_monument_desc: "Description of sample building."

In order to display the building in the planetary management window, the game will look for an image in /Stellaris/gfx/interface/icons/buildings folder with a file name matching the building's id and will generate an entry in the error log if it is not found. However, it will not use this image unless the icon attribute is actually set within the building definition, and instead use a generic building icon. See Icon modding for more on changing icons used by the game.

Data StructureEdit

Property Buildings Districts
base_buildtime = <int> Determines days it takes to build this Building or District. If Building, this also determines the days it takes for a Building to upgrade into this.
resources An Economy Unit to determine the construction cost, resource upkeep and production of this Building or District.
icon = <building key> Optional. The file name (without extension) of the icon to use from /Stellaris/gfx/interface/icons/buildings. By default, the icon gfx/interface/icons/buildings/(key of building).dds will be used.  
capital = <yes/no> Default no. Whether this Building is considered a Capital Building. If yes, not even a Fortress with add_to_first_building_slot = yes can be added before this Building.
can_build = <yes/no> Default yes. If no, this Building can't be built. Capital buildings and upgraded buildings have "no" for this property.
can_demolish = <yes/no> Default yes. If no, this Building can't be demolished. Capital buildings have "no" for this property.
can_be_disabled = <yes/no> Default yes. If no, this Building can't be manually turned off. Capital buildings have "no" for this property.
can_be_ruined = <yes/no> Default yes. If no, this Building can't be ruined because of the planet having not enough building slots.
add_to_first_building_slot = <yes/no> Default no. If yes, this Building will be moved to the first Building Slot after built. Fortresses use this.
planetary_ftl_inhibitor = <yes/no> Default no. If yes, this Building will become a planetary FTL inhibitor once relevant technology has been researched. Fortresses use this.
branch_office_building = <yes/no> Default no. If yes, this Building is considered a Branch Office Building.
category Determines the building category. It can be used to filter Buildings in construction view. Only one of the following nine can fit here, sorted by their in-game order.
  • pop_assembly, government, resource, manufacturing,
  • research, trade, amenity, unity, army
prerequisites A list of technology keys to determine the technology prerequisites.
show_tech_unlock_if A block of Conditions. If evaluated false, this building is hidden from the tooltips of the technologies listed above.
potential A block of Conditions to determine is this Building buildable on a planet. If evaluated false, it's hidden from the GUI. Similar to Buildings, except if this property is evaluated false, the District is not only hidden from the GUI, but will also be removed from the planet, or be replaced by a District in convert_to.

Check the planet type here by uses_district_set rather than is_planet_class.

show_on_uncolonized   A block of Conditions to determine is this District shown in the GUI while the planet has no owner. For example, a   Hive Mind will see Hive District on an uncolonized planet while a regular Empire will see City District. (Planet scope, use FROM as a potential owner)

Check the planet type here by uses_district_set rather than is_planet_class.

allow A block of Conditions to determine is this Building buildable on a planet. If evaluated false, it's visible from the GUI but is shown disabled. Similar to Buildings, except if this property is evaluated false, the District is not only prevented from building, but will also be removed from the planet, or be replaced by a District in convert_to.
destroy_trigger A block of Conditions. If returns true the Building will be removed from a planet, or be replaced by a Building in convert_to.  
convert_to A list of Buildings that can replace this Building if it would have been removed by fulfilling the destroy_trigger. A list of Districts that can replace this District if it would have been removed by not meeting the potential and allow.
conversion_radio = <float>   If this District will be converted into another type of District, the number of new Districts it can convert into is multiplied by this. For example, if District A can be converted into District B at a conversion_radio = 0.5, once the potential of District A is evaluated false, a planet with 10 District A will lose all of them and gain 5 District B. The number is rounded down.
planet_modifier A block of Modifiers to be applied on the Planet.
triggered_planet_modifier Similar above, except it has a potential property that determines should this block apply. Multiple allowed. (Planet scope)
country_modifier A block of Modifiers to be applied to the Empire.

Buildings and Districts currently do not support "triggered_country_modifier".

triggered_desc This property adds additional tooltips for this Building or District. Vanilla use this to add briefing job destriptions to show the player what does this thing do.
  • trigger
A block of Conditions to show should this block apply. (Planet scope)
  • desc = <localisation key>
A localisation key.
upgrades A list of Buildings that allow this to be upgraded into. Multiple allowed.  
on_built A block of Effects to be executed when the Building is built. (Planet scope) It's unclear if Districts support these features.
on_destroy A block of Effects to be executed when the Building is desroyed or demolished. (Planet scope)

This is currently broken and doesn't work.

on_queued A block of Effects to be executed when the Building is added to the construction queue. Does not apply if added to the construction queue as an upgrade. (Planet scope)
on_unqueued A block of Effects to be executed when the Building is removed from the construction queue. Does not apply if added to the construction queue as an upgrade. (Planet scope)
ai_weight Rules for how likely the AI is to construct this Building or District. Note: As of 2.6, these weights only come into play when the AI has no other economic plans.
ai_resource_production Determines what kind of resources should the AI view this Building or District being able to produce.
is_capped_by_modifier = <yes/no> Default no. If yes, a modifier that increases the max number of this Building will be generated for use. In addition, if this property is yes while the base_cap_amount is unspecified, it will be considered 0. Default yes. If yes, a modifier that increases the max number of this District will be generated for use.
base_cap_amount = <int> The max number of Buildings of this type a planet can have.  
min_for_deposits_on_planet = <int>
max_for_deposits_on_planet = <int>
  Unclear. They seem like to determine the minimal / maximum number of the cap of this District a planet should try to have upon galaxy generation, but this is actually not respected.

Vanilla Buildings and Districts do not usually produce resources themselves. They provide Jobs. See Pop Job modding for details.

Generated ModifiersEdit

The following modifier will be generated for a capped-by-modifier Building / District to be used.

  • <building / district key>_max_add = <int> - Increases the max number of Buildings / Districts of this kind on a planet.

ExamplesEdit

Cost, Upkeep, and ProductionEdit

Buildings usually have a cost and build time for construction, and often have an upkeep that must be paid. The below definition says that "building_sample" is a planet building that requires 100 minerals and 100 energy to build, would take 240 game days to complete, and after that has an upkeep of 2 energy a game month. After its construction it provides 2 minerals and 4 food per month. Other things that can be used include alloys, consumer goods, influence, minor artifacts, research, strategic resources, and unity. Unlike some modifiers, these must be flat values rather than production multipliers.

building_sample = { 
    base_buildtime = 240

    resources = {
        category = planet_buildings
        cost = {
            minerals = 100
            energy = 100
        }
        upkeep = {
            energy = 2
        }
        produces = {
            food = 4
            minerals = 2
        }
    }
}

Resources Production via JobsEdit

Most buildings don't directly provide resources, but instead increase the number of planetary jobs. This can be done unconditionally using the planet_modifier element. However, since jobs often differ by country type (normal, hive minds, machine, etc.), so triggered_planet_modifier should be used instead. The modifier is applied to the planet only if the trigger defined in the potential element returns true. Each triggered_planet_modifier will be checked; a break statement cannot be used to prevent later checks. The below sample adds two farmer jobs depending on whether the owner country is a hive mind or not.

building_sample = { 
    base_buildtime = 240

    resources = {
        category = planet_buildings
        cost = {
            minerals = 100
            energy = 100
        }
        upkeep = {
            energy = 2
        }
    }

    triggered_planet_modifier = {
        potential = {
            exists = owner
            owner = { is_regular_empire = yes }
        }
        modifier = {
            job_farmer_add = 2
        }
    }

    triggered_planet_modifier = {
        potential = {
	    exists = owner
            owner = { is_gestalt = yes }
        }
        modifier = {
            job_agri_drone_add = 2
        }
    }
}

You can also use other modifiers to change the growth speed, ethics attraction and much more. See the Modifiers for more. If you want to apply a country-wide modifier, use country_modifier or triggered_country_modifier instead.

UpgradesEdit

Many buildings can be upgraded to an improved version of itself. To support this you must create one or more additional build definitions. Typically, you would duplicate the first building and simply change the id by 2 or higher number. Once the second building has been created and all necessary improvements made, return to the first building and add an upgrades element. Inside the bracket, you would add the name of the second building which the first building will upgrade to. The build time and resource cost of the second building become the time and cost to upgrade to that building. The below example adds a new building with an improvement to jobs produced and small increase to upkeep. The original building is given an update element and renamed for consistency.

building_sample_1 = { 
    base_buildtime = 240

    resources = {
        category = planet_buildings
        cost = {
            minerals = 100
            energy = 100
        }
        upkeep = {
            energy = 2
        }
    }

    upgrades = {
        building_sample_2
    }

    triggered_planet_modifier = {
        potential = {
            exists = owner
            owner = { is_regular_empire = yes }
        }
        modifier = {
            job_farmer_add = 2
        }
    }

    triggered_planet_modifier = {
        potential = {
	    exists = owner
            owner = { is_gestalt = yes }
        }
        modifier = {
            job_agri_drone_add = 2
        }
    }
}

building_sample_2 = { 
    base_buildtime = 240	

    resources = {
        category = planet_buildings
        cost = {
            minerals = 100
            energy = 100
        }
        upkeep = {
            energy = 3
        }
    }

    triggered_planet_modifier = {
        potential = {
            exists = owner
            owner = { is_regular_empire = yes }
        }
        modifier = {
            job_farmer_add = 3
        }
    }

    triggered_planet_modifier = {
        potential = {
	    exists = owner
            owner = { is_gestalt = yes }
        }
        modifier = {
            job_agri_drone_add = 3
        }
    }
}

Though not used in vanilla Stellaris, a building can have multiple upgrade routes. Clicking the yellow upgrade icon on the building opens the upgrade panel where the defined upgraded buildings are listed.

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