Each colony stores its selected terraforming gas (FCT_Population.TerraformingGasID), its add or remove setting (FCT_Population.TerraformStatus), its target pressure (FCT_Population.MaxAtm) and a calculated Earth-equivalent annual terraforming capacity in atm. The system body holds the shared state. That state is its atmospheric gases (FCT_AtmosphericGas), total pressure (AtmosPress), surface temperature (SurfaceTemp), hydrosphere type and extent (HydroID and HydroExt) and climate. Several populations on one body can therefore work on the same atmosphere one after another. TerraformStatus holds 0 for removal and 1 for addition. Value 0 is the gas-removal direction, not a paused state. A selected gas of None, or no selected gas at all, stops substantive work.

The strategic updates of each construction cycle first decay radiation and dust and update orbital positions, then condense and evaporate water vapour, then refresh each colony’s environment, workforce and efficiency. Population production then refreshes the terraforming modifiers and capacity, and runs the terraforming step only when annual capacity is above 0. That step comes after mining, industrial production and ground training, and before mass-driver exports and the group of steps that needs a positive population (refining, research and MSP production). Terraforming therefore does not need a positive resident population in that cycle. Orbital ships can supply capacity to an empty colony site.

A year of elapsed time is 31,536,000 seconds. Gas work is a continuous pressure change per elapsed year. It does not work in whole completed units, queue items or build points. The terraforming step and the capacity calculation debit no minerals, wealth, fuel or maintenance stocks. Installations and modules need their own construction, and ships keep their normal operational costs, but those belong to separate processes described in production.

At the start of the terraforming step, a population of a non-player race first lets the NPR colony AI pick its terraforming target. The player rules below describe the step once its current gas and direction are set. After the atmospheric work, when the colony belongs to an NPR, holds a population of 0 and the body’s worst-case colony cost is at least 0 and below 1.5, the NPR AI can seed a terraforming colony on that body. These NPR operations do not impose a gas-selection policy on players.

Installation terraforming capacity is the sum of installation amount x DIM_PlanetaryInstallation.TerraformValue over the installations, truncated to a whole number before the rate calculation. The game database as shipped has one positive definition, the Terraforming Installation (ID 6, TerraformValue 1, Workers 0.125 million, Cost 300 and RequiredTechID 27434). The definitions load from DIM_PlanetaryInstallation when a game is loaded. They are data values, not fixed rates.

The terraforming output modifier I is:

  • I = governor Terraforming bonus x sector governor quarter Terraforming bonus x efficiency x radiation production modifier x stability x political status ProductionMod. The governor and sector governor bonuses and the political status modifier are described on their own pages.

Installation capacity in Earth-equivalent atm per year is then race terraforming rate x whole-number weighted installation capacity x I, with the rate from FCT_Race.TerraformingRate. This formula leaves out the race economic production modifier (FCT_Race.EconomicProdModifier) and the species production rate (FCT_Species.ProductionRateModifier). Do not substitute the general industrial multiplier. A missing governor or sector governor contributes 1, and so does a commander without the Terraforming bonus. The sector quarter bonus is 1 + (bonus value - 1) / 4. Governor and sector bonuses and distinct output factors compare this modifier with the other output families.

Efficiency is 1 unless manufacturing worker demand exceeds the available manufacturing population. It is then available / demand, at least 0. Worker demand counts Workers x amount for every installation, plus the workers of the colony’s shipyards. The radiation production modifier is max(0, 1 - RadiationLevel / 10000), where RadiationLevel comes from body contamination. Stability is 1 - UnrestPoints / 100, after unrest is clamped to 0 to 99. These values are refreshed before the production cycle, as workforce and efficiency describes.

The race terraforming rate starts at 0.00025 Earth-equivalent atm per year per installation or module. A completed Terraforming Rate technology (technology type 57) sets it to that technology’s FCT_TechSystem.AdditionalInfo, as research completion describes. The value 0.00025 is only the starting value of a new race record. A loaded or researched race need not keep it.

For each ship, the base output is undamaged modules x race terraforming rate, counting the ship’s terraforming modules. The capacity calculation then multiplies it by the ship commander’s Terraforming bonus, and by current crew / class crew when the ship is understaffed. Damaged modules do not contribute. The module design’s FCT_ShipDesignComponents.ComponentValue is not the rate used here. A fleet’s capacity is the sum over its ships, and the colony then applies that fleet’s naval admin command Terraforming multiplier. No resident workforce, radiation, stability, political, species production or economic production multiplier applies to this orbital term.

The colony collects output from fleets of its own race whose coordinates are within one unit of the colony. It assigns an unassigned qualifying fleet to itself, then counts output only from fleets assigned to it (FCT_Fleet.AssignedPopulationID). The selection does not also check that the fleet is in the colony’s system or require an orbit body. When several colonies share a location, the existing assignments and the processing order decide which colony receives the output. The fleet’s parent naval admin command supplies the admin multiplier for the fleet’s system and the Terraforming bonus.

The admin Terraforming multiplier is 1 + (commander Terraforming bonus - 1) x Industrial weight, where the weight is the command type’s Industrial value in DIM_NavalAdminCommandType. As shipped that weight is 0.25 for Industrial, 0.1 for Logistics, 0.05 for General and 0 for Naval, Survey, Patrol and Training. The multiplier applies only when the system in question is within command range, a commander exists and that commander is effective. Parent command bonuses multiply in only when those conditions hold, and each parent is asked about the system of the child command’s population or ship. A command that is ineffective or out of range returns 1 and does not ask its parent.

Arrival can set the fleet’s assigned population and orbit body from a move order (FCT_Fleet.AssignedPopulationID and FCT_Fleet.OrbitBodyID). Starting a movement order that has not yet arrived clears the assignment and the orbit body, and clearing the assigned population removes the link. The orbital module count the colony displays uses a related count that also leaves out fleets with a civilian function (FCT_Fleet.CivilianFunction other than none). The output calculation does not leave them out. The displayed count and the set of fleets that produce output are therefore not identical.

The annual capacity formula has no ground-unit terraforming contribution. It consists only of installation output and assigned orbital output. The ground construction ratings used for industrial and ruin work are not added here.

Earth-equivalent annual terraform capacity = (installation output + orbital output) x Terraforming Speed / 100, with Terraforming Speed (100 = Normal) read from FCT_Game.TerraformingSpeed.

Both terms use this game option from the Game Information window. The pressure change of one terraforming step is:

  • pressure change = annual capacity x elapsed years x 511,187,128 / (4 x 3.1416 x body radius²) atm, with the body radius in km.

Smaller bodies receive more pressure change from the same Earth-equivalent capacity, inversely with the square of the radius. The step needs a body gravity of at least 0.1 g. Gravity below 0.1 ends the step, and exactly 0.1 passes. The step has no maximum body diameter or maximum gravity test. Habitability imposes separate limits. The pressure change is not rounded or clamped to the target before it is applied. Capacity keeps its full precision into the atmosphere work.

Gas selection addition removal and targets

Section titled “Gas selection addition removal and targets”

The terraforming controls sit on the Environment tab of the Economics window. The gas list shows every loaded gas, sorted by name. Selecting a gas sets the colony’s terraforming gas. Checking Add Gas to Atmosphere sets the addition direction (TerraformStatus 1). Unchecking it sets the removal direction (TerraformStatus 0) and writes the currently selected gas again. These controls do not check gas-specific research, available materials, species compatibility or projected habitability. A valid number in the Maximum Atm box sets the target. A negative entry becomes 0, and text that is not a number leaves the previous target.

The Maximum Atm target applies to the selected gas’s own pressure (GasAtm), not to total pressure. A positive value activates the target stops. A value of 0 disables them. Both addition and removal apply the entire calculated change even when less would reach the target.

Selected gas on the body and direction Change and stop behaviour
Absent, add Creates the gas entry at the pressure change, with stored percentage 0 and FrozenOut false. This case does not check the target.
Present, add Adds the pressure change. When the resulting gas pressure is above the target and the target is above 0, it logs a Terraforming Report event (DIM_EventType row 77) reading “Addition of (gas name) to the atmosphere of (colony name) has reached the required level”, clears the selected gas and resets the target to 0. Exact equality continues.
Absent, remove Clears the selected gas and the target. Water Vapour on a body with HydroExt other than 0 keeps its selection and target.
Present, remove, result above 0 Subtracts the pressure change. When the result is at or below the target and the target is above 0, it logs a Gas Removed event (type 76) reading “Removal of (gas name) from the atmosphere of (colony name) has reached the required level”, clears the selection and resets the target to 0.
Present, remove, result 0 or below Normally removes the entry, logs a Gas Removed event reading “All traces of (gas name) have been removed from the atmosphere of (colony name)” and clears the selection. This case does not reset the target. Water Vapour on a body with HydroExt other than 0 instead sets the entry pressure to 0 and keeps the selection.

Addition can therefore overshoot the target and never rolls back to it. A newly introduced gas can exceed the target without stopping on its first step. A gas already above target still receives another whole addition before its stop check. Removal can undershoot a positive target, and it normally deletes a fully exhausted gas. Water vapour removal can stay selected while evaporation brings gas back from the hydrosphere. A target stop clears the selected gas but neither the direction nor the capacity. On the next step the empty selection becomes None, and the step does nothing.

The terraforming step evaluates whether the atmosphere is breathable for the colony’s species before and after the gas work, and nothing uses the answer. Breathability therefore does not stop player gas work by itself. The terraforming step checks only for a gas of None and the minimum gravity. It does not check gas giant, fixed body or species maximum gravity eligibility.

FCT_AtmosphericGas.GasAtm is the stored pressure contribution of one gas. AtmosGasAmount is a separate stored percentage. FrozenOut marks a gas that certain atmospheric calculations leave out. The total pressure recalculation sums GasAtm over every gas, frozen ones included, and raises a negative total to 0. The later freeze and pressure update uses only unfrozen gases and a different fallback, described below.

The atmosphere list refresh, used by windows such as the Environment tab of the Economics window and the System Generation and Display window, computes AtmosGasAmount = GasAtm / sum of all GasAtm x 100 for each gas. Frozen gases count in that denominator and show with (F) after their name. The refresh also sorts the gases by pressure, highest first, and recalculates surface temperature. Terraforming, water vapour creation and direct gas setting give a new gas a stored percentage of 0 and do not compute the percentage themselves. A gas’s pressure and its displayed or used percentage can therefore disagree until the next refresh.

The breathability check requires the pressure of the species’ breathing gas (FCT_Species.BreatheID) to lie inclusively between the species minimum and maximum, and its stored percentage to be at most 30. The minimum is FCT_Species.Oxygen - OxyDev and the maximum is Oxygen + OxyDev. The check does not test FrozenOut, toxic gases or total pressure. Those are separate colony cost checks. The bounds come from the oxygen columns even when the breathing gas is another gas.

The dangerous gas rating is the greatest Dangerous rating among unfrozen gases, other than the species’ breathing gas, whose stored percentage AtmosGasAmount is strictly above DangerousLevel / 10000. Unit quirk. The cutoff reads like a partial pressure, but the comparison uses the percentage column, not GasAtm. Equality does not qualify. Dangerous ratings are maxima, not summed penalties.

The loaded gas catalogue (DIM_Gases) supplies boiling point, greenhouse flags, danger rating and danger level. The game database as shipped gives these entries and percentage cutoffs.

GasID Gas Freeze cutoff K (BoilingPoint) Climate flag Dangerous DangerousLevel Percentage comparison cutoff
1 Hydrogen 20 None 2 500 0.05
2 Helium 4 None 0 0 none
3 Methane 109 Greenhouse 2 500 0.05
4 Ammonia 240 None 2 50 0.005
5 Water Vapour 245 None 0 0 none
6 Neon 27 None 0 0 none
7 Nitrogen 77 None 0 0 none
8 Carbon Monoxide 82 None 2 50 0.005
9 Nitrogen Oxide 121 None 2 5 0.0005
10 Oxygen 90 None 2 500 0.05, left out when it is the breathing gas
11 Hydrogen Sulphide 212 None 2 20 0.002
12 Argon 87 None 0 0 none
13 Carbon Dioxide 195 Greenhouse 2 5000 0.5
14 Nitrogen Dioxide 262 Greenhouse 2 5 0.0005
15 Sulphur Dioxide 263 Greenhouse 2 5 0.0005
16 Chlorine 239 None 3 1 0.0001
17 Fluorine 85 None 3 1 0.0001
18 Bromine 332 None 3 1 0.0001
19 Iodine 457 None 2 1 0.0001
20 Aestusium 1 Greenhouse 0 0 none
22 Frigusium 1 Anti-greenhouse 0 0 none

The table states the shipped percentage-column comparison, not a real-world toxicity limit. None (GasID 0) is an additional selectable entry that means no gas. Gas definitions are data, read from DIM_Gases when a game is loaded. Water Vapour as shipped has neither greenhouse flag.

For ordinary bodies, the surface temperature update sums the GasAtm of unfrozen gases flagged GHGas into G and of unfrozen gases flagged AntiGHGas into A. Total pressure also supplies a greenhouse contribution, even from unflagged gases.

Both climate factors cap at 3, and this update applies no lower clamp to either factor. Albedo acts directly as a temperature multiplier, as it does in initial climate generation. Gas giants and superjovians instead take SurfaceTemp = BaseTemp and skip the rest. Celsius values on screen subtract 273.

The freeze and pressure update marks a gas FrozenOut when SurfaceTemp is below its BoilingPoint. Equality leaves it unfrozen. The update then sums the unfrozen GasAtm. If that sum is exactly 0, it sets AtmosPress to previous pressure / 20 rather than to 0. A negative pressure becomes 0. If the pressure changed, the update runs the surface temperature update once. A body with no gases ends this update at once, and its pressure is not cleared. This is one ordered pass, not an iteration that solves the freeze and temperature feedback to equilibrium.

After the gas change, the terraforming step runs, in order, the total pressure recalculation, the breathability check whose result is unused, the hydrosphere transition, the freeze and pressure update, the dominant terrain refresh, the body colony cost recalculation with orbital extremes and then the colony infrastructure metrics. The hydrosphere transition starts with a surface temperature update, which can therefore use the frozen-out markings from before the freeze update. Freezing and the temperature changes that come with it happen later in the step.

Orbital extreme temperatures use the equilibrium temperature 255 / sqrt(distance / sqrt(star luminosity)) K, at least 4 K, with the distance in AU. They use the same capped greenhouse and anti-greenhouse factors and albedo. Without gases both factors are 1. A gas counts toward either factor only when equilibrium temperature x SurfaceTemp / BaseTemp is at or above its boiling point, rather than by its current FrozenOut flag. When HydroExt is above 0 and the predicted temperature puts the hydrosphere in another phase at that distance, the calculation uses an albedo raised by 0.0015 x HydroExt when the hydrosphere leaves an ice sheet and lowered by the same amount when it becomes one, leaves the body’s own Albedo unchanged, and computes the temperature again, at least 1 K. The orbital surface temperature states the same rule. Current and worst-case habitability are consequently separate values.

The terrain climate refresh reacts to oxygen, total gas pressure, hydrosphere and temperature and seasonal limits. It is a consequence of terraforming, not another source of pressure capacity. The refresh forces Barren terrain on gas giants and superjovians, and uses gravity below 0.1, total pressure of exactly 0 or total pressure above 10 for its base terrain rule.

The terraforming hydrosphere transition sets the hydrosphere type from the surface temperature with the phase constraints switched off.

Temperature Phase
Above 369 K Vapour
Above 245 K and at most 369 K Liquid
At most 245 K Ice Sheet

When other actions ask for the phase constraints, zero atmospheric pressure, pressure below 0.006 atm at a temperature above 245 K, or a temperature above 369 K instead set the hydrosphere to None. The terraforming transition switches those constraints off, so its None result cannot occur.

A change from Ice Sheet to Liquid raises Albedo by 0.0015 x HydroExt and runs water evaporation for that body alone with 0 elapsed years. Liquid to Ice Sheet lowers Albedo by the same amount. Ice Sheet to Vapour likewise restores the ice albedo reduction, and Vapour to Ice Sheet subtracts it. Vapour to Liquid can run the same immediate liquid evaporation. Each of these changes then recalculates the temperature. The ice to liquid and liquid to ice changes can log an Ice Sheet Melted event (type 81) or an Ice Sheet Frozen event (type 316). The transition itself does not convert the whole hydrosphere to vapour at once.

Condensation handles water vapour on bodies with SurfaceTemp at most 369 K. The humidity threshold is 0, except on a body with a Liquid hydrosphere, where it is AtmosPress x HydroExt / 100 x 0.01. When vapour exceeds the threshold, the body condenses min(0.1 x elapsed years, vapour pressure - threshold). That amount leaves the vapour and the total pressure, and condensed atm x 40 is added to HydroExt. A vapour entry left at 0 or below is removed. Total pressure does not fall below 0. Condensation does not cap HydroExt at 100.

The general evaporation pass selects bodies with HydroExt above 0 and a Liquid or Vapour hydrosphere. A single body named by a hydrosphere transition is added directly when its HydroExt is above 0. For a Liquid hydrosphere the wanted vapour is the same humidity threshold, and any positive difference from the current vapour evaporates without an elapsed-time rate cap. For any other phase the wanted vapour is HydroExt / 40, and evaporation is capped at elapsed years x 4 / 40, which is 0.1 atm per year. Evaporation raises or creates the vapour entry, subtracts evaporation x 40 from HydroExt, sums all gas pressures into the total and keeps the total at 0 or above. Evaporation applies no upper or lower limit to HydroExt. This is why liquid evaporation for one body with 0 elapsed years can still change vapour and hydrosphere.

The game also has steps that convert a body’s whole hydrosphere to water vapour, or condense excess vapour back into hydrosphere, at once. The terraforming step does not run them directly, and they do not replace the rate-limited strategic rules above. System lifecycle places these water rules among the other ongoing changes of a system.

A species stores its breathing gas (FCT_Species.BreatheID), an inclusive breathable pressure interval (Oxygen plus or minus OxyDev), temperature bounds (Temperature plus or minus TempDev), a maximum atmospheric pressure (PressMax) and a gravity interval (Gravity plus or minus GravDev). TempDev is also the temperature deviation that divides the temperature penalty. Terraforming can change gases, temperature and hydrosphere. It does not change gravity, the body’s FixedBody status or the species tolerances. Those are separate limits on whether a terraformed result is habitable, and species engineering is the way to change the tolerances.

The colony cost calculation returns -1, not habitable, for gas giants, superjovians, fixed bodies and gravity strictly above the species maximum. When gravity does not exceed the species maximum, the raw cost is the maximum of the applicable penalties, not their sum.

Component Raw penalty
Dangerous gases The highest dangerous gas rating, a whole number
Too cold or too hot distance beyond the nearest species temperature bound / TempDev, divided by 5 for a tidally locked body that is not a moon
Pressure above species maximum max(2, AtmosPress / PressMax)
Breathing failure, only when the cost rounded to 4 places is below 2 Raised to 2 when the breathing gas pressure is outside the inclusive interval or its stored percentage is above 30
HydroExt below 20 max(current cost, (20 - HydroExt) / 10)
Gravity below species minimum Raised to 1 when the raw cost so far is below 1

Finally current colony cost = rounded raw cost x ColonizationSkill, where the raw cost is rounded to 4 decimal places (an exact half goes to the even neighbour) and the skill is the race FCT_Race.ColonizationSkill. A value exactly at the species minimum or maximum temperature, the maximum pressure or a gravity bound avoids the matching strict outside-range penalty. HydroExt 20 removes the water-shortage penalty. The breathing gate uses the cost rounded to 4 places, below 2.

With orbital extremes considered, a habitable body that is eccentric (Eccentricity above 0) or a moon compares its periapsis and apoapsis costs, and a moon uses its parent body’s orbital extremes. The worst-case colony cost is the larger of the current cost and the higher extreme cost. The cost at an orbital distance applies the same temperature, pressure, toxicity, breathing, hydrosphere and low-gravity maxima and the same final rounding and ColonizationSkill. Otherwise worst-case and current cost match. The terraforming step calculates with orbital extremes, and the colony environment update calculates without them, as shared bodies and environment feedback describes.

Body colony cost affects later colony infrastructure and workforce. Required infrastructure is whole-number(surface population in millions x 100 x colony cost x gravity multiplier / species PopulationDensityModifier). The per-million requirements round up. Gravity below the species minimum doubles the infrastructure multiplier, 2 instead of 1. The life support share of the workforce starts at min(1, 0.05 x (current colony cost + 1)). That leaves fewer manufacturing workers and can reduce later installation output. Environment, infrastructure and capacity gives the full infrastructure table.

Refresh boundary. The terraforming step recalculates the body’s current and worst-case colony cost but does not copy them into the colony’s own current and maximum colony cost before its infrastructure recalculation. The colony environment update copies them at the next environment refresh, after it recalculates the cost without orbital extremes. The direct gas pressure edit makes its own immediate copy. Not every colony workforce and infrastructure figure reflects the new body climate at once.

The normal controls change the gas, the add or remove direction and the target. They do not enforce a total pressure cap, an oxygen safety stop or a species habitat target. The Spacemaster SM: Set Atm button on the same tab is a separate control. It does nothing when the selected gas is missing or None. It reads the Maximum Atm box, raises a negative value to 0 and at once sets that gas’s pressure on the body. That edit creates, updates or removes the gas entry, with a value of 0 removing it, and recalculates climate and colony state without using terraforming capacity or time.

The colony summaries fill the gas selection, the Add Gas to Atmosphere box and the Maximum Atm text from the current state. The Orbital Terraforming Modules line on the Summary tab of the Economics window can differ from actual output, because it leaves out fleets with a civilian function. The atmosphere list refresh rewrites stored percentages and surface temperature as described above. It is more than a display.

FCT_Population saves TerraformStatus, TerraformingGasID and MaxAtm. Loading reconnects the selected gas only when its ID exists among the loaded gases, and restores the direction and the target pressure. Capacity is recalculated rather than saved as a construction progress queue. A colony with no selected gas saves TerraformingGasID 0, None.

The atmosphere save deletes and rewrites this game’s FCT_AtmosphericGas rows, but includes only gases whose AtmosGasAmount is above 0. It saves AtmosGasAmount, GasAtm and FrozenOut, and loading restores those exact values. Persistence anomaly. A newly created gas with positive pressure whose percentage is still 0 is left out by that filter. The percentage refresh described above is what makes it eligible in the paths described here. A stale positive percentage can likewise keep a gas with zero pressure. The save filter tests the stored percentage, not the pressure. System persistence covers the body columns saved alongside.

  1. With race rate 0.00025, installation capacity 100, every installation modifier 1, no orbital modules and Terraforming Speed 100, capacity is 0.025 Earth-equivalent atm per year. A body of half the radius gets four times the pressure change of a full-radius body. A +20% governor and a +20% sector governor multiply the installation term by 1.2 x 1.05 = 1.26. The ship term instead uses its ship and admin bonuses and its crew ratio.
  2. An existing selected gas at 0.09 atm, with target 0.1 and a calculated change of 0.02, reaches 0.11 in add mode and stops. It is not clamped to 0.1. Starting from an absent gas with target 0.01 and change 0.02 creates 0.02 but skips the stop until a later step finds the gas present. Exact equality in add mode continues.
  3. An existing gas at 0.12 atm, with removal target 0.1 and change 0.03, falls to 0.09 and stops. With target 0, removal continues until the gas is gone rather than stopping at a positive threshold. Water vapour with remaining hydrosphere is the zero-pressure exception.
  4. With BaseTemp 255 K, Albedo 1, AtmosPress 1 atm, 0.2 atm of greenhouse gas and no dust or anti-greenhouse gas, the greenhouse factor is 1.3 and SurfaceTemp is 331.5 K. Adding 0.1 atm of greenhouse gas raises the total pressure contribution by 0.01 and the greenhouse sum by 0.1. That gives a greenhouse factor of 1.41 and 359.55 K before later freeze and hydrosphere changes. The factor’s excess over 1 is the pressure term plus the greenhouse sum, 0.1 + 0.2 = 0.3 before the addition and 0.11 + 0.3 = 0.41 after it. These sums do not model a full iteration to equilibrium.
  5. On a liquid-water body at 1 atm with HydroExt 50, the humidity threshold is 0.005 atm. Vapour of 0.025 atm and 0.1 elapsed years condense the smaller of 0.01 and 0.02, which is 0.01 atm. HydroExt rises by 0.4 percentage points, and vapour and pressure fall by 0.01. The later evaporation phase can then move vapour toward its updated humidity target.
  6. A body with acceptable gravity, temperature, pressure and breathing but HydroExt 10 has a raw colony cost of 1 from water shortage. A missing usable breathing gas raises the raw cost to at least 2. Terraforming does not add those penalties together.

Related community documentation and developer posts. These may describe a different game version.