Building modding

Version

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

This article is for the PC version of Stellaris only.

This page is about modding Buildings and Districts.

## Overview

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 Structure

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

## Generated Modifiers

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.

## Examples

#### Cost, Upkeep, and Production

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
        }
    }
}

```

#### Conditional Upkeep and Production

Production and upkeep brackets also allow for a triggered condition block that will unlock them when the planet has met a specific condition. Each triggered production or upkeep will replace the current production or upkeep values for each resource declared. If there is a production or upkeep value previously established (like a base upkeep), these values will not be altered unless the upkeep/production resource is declared in the triggered block. It should be noted that good practice is to establish a base upkeep first with no triggers.

```
building_sample = {
    base_buildtime = 240

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

        upkeep = {
            trigger = {
                num_districts = {
                    type = district_farming
                    value >= 2
                }
            }
            # The new total building upkeep must be updated with each trigger. This overwrites the energy upkeep
            energy = 4
            # This is not part of base upkeep, and will be tacked on
            minerals = 1
        }

        produces = {
            food = 4
            minerals = 2
        }

        produces = {
            trigger = {
                num_districts = {
                    type = district_farming
                    value >= 2
                }
            }
            food = 8
        }
    }
}

```

#### Resources Production via Jobs

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.

#### Upgrades

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. Also you might want to hide the upgraded building appearing as seperate building in the building list by setting can\_build = no. 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

    can_build = no

    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. Note as well that upgradable buildings should not have the base\_cap\_amount set. This should only be set on the first upgrable building, and will be carried over.

**Modding**