Factorio.com|Forums|Wiki|Mod Portal|API Docs

# Factorio Prototype Docs Version 2.0.77

# TechnologyPrototype - Prototype Docs

## TechnologyPrototype 'technology' Example code

A technology.

Inherits from Prototype « PrototypeBase

## Properties

- default
- sorted

icons optional | :: array[IconData] | Can't be an empty array.
Can't be an empty array.
icon optional | :: FileName | Path to the icon file. [...]
Path to the icon file. [...]
icon_size optional | :: SpriteSizeType | The size of the square icon, in pixels. [...]
The size of the square icon, in pixels. [...]
upgrade optional | :: boolean | When set to true, and the technology contains several levels, only the relevant one is displayed in the technology screen.
When set to true, and the technology contains several levels, only the relevant one is displayed in the technology screen.
enabled optional | :: boolean | This can be `false` to disable the technology at the start of the game, or `true` to leave it enabled. [...]
This can be `false` to disable the technology at the start of the game, or `true` to leave it enabled. [...]
essential optional | :: boolean | Whether the technology should be shown in the technology tree GUI when "Show only essential technologies" is enabled.
Whether the technology should be shown in the technology tree GUI when "Show only essential technologies" is enabled.
visible_when_disabled optional | :: boolean | Controls whether the technology is shown in the tech GUI when it is not `enabled`. [...]
Controls whether the technology is shown in the tech GUI when it is not `enabled`. [...]
ignore_tech_cost_multiplier optional | :: boolean | Controls whether the technology cost ignores the tech cost multiplier set in the DifficultySettings. [...]
Controls whether the technology cost ignores the tech cost multiplier set in the DifficultySettings. [...]
allows_productivity optional | :: boolean |
research_trigger optional | :: TechnologyTrigger | Mandatory if `unit` is not defined.
Mandatory if `unit` is not defined.
unit optional | :: TechnologyUnit | Determines the cost in items and time of the technology. [...]
Determines the cost in items and time of the technology. [...]
max_level optional | :: uint32 or `"infinite"` | `"infinite"` for infinite technologies, otherwise `uint32`. [...]
`"infinite"` for infinite technologies, otherwise `uint32`. [...]
prerequisites optional | :: array[TechnologyID] | List of technologies needed to be researched before this one can be researched.
List of technologies needed to be researched before this one can be researched.
show_levels_info optional | :: boolean | Can be used to enable or disable showing levels info in technology slot.
Can be used to enable or disable showing levels info in technology slot.
effects optional | :: array[Modifier] | List of effects of the technology (applied when the technology is researched).
List of effects of the technology (applied when the technology is researched).

Inherited from Prototype

factoriopedia_alternative optional | :: string | The ID type corresponding to the prototype that inherits from this. [...]
The ID type corresponding to the prototype that inherits from this. [...]
custom_tooltip_fields optional | :: array[CustomTooltipField] | Allows to add extra description items to the tooltip and Factoriopedia.
Allows to add extra description items to the tooltip and Factoriopedia.

Inherited from PrototypeBase

type | :: string | Specifies the kind of prototype this is. [...]
Specifies the kind of prototype this is. [...]
name[overridden] | :: string | If this name ends with `-<number>`, that number is ignored for localization purposes. [...]
If this name ends with `-<number>`, that number is ignored for localization purposes. [...]
order optional | :: Order | Used to order prototypes in inventory, recipes and GUIs. [...]
Used to order prototypes in inventory, recipes and GUIs. [...]
localised_name optional | :: LocalisedString | Overwrites the name set in the locale file. [...]
Overwrites the name set in the locale file. [...]
localised_description optional | :: LocalisedString | Overwrites the description set in the locale file. [...]
Overwrites the description set in the locale file. [...]
factoriopedia_description optional | :: LocalisedString | Provides additional description used in factoriopedia.
Provides additional description used in factoriopedia.
subgroup optional | :: ItemSubGroupID | The name of an ItemSubGroup.
The name of an ItemSubGroup.
hidden[overridden] optional | :: boolean | Hides the technology from the tech screen.
Hides the technology from the tech screen.
hidden_in_factoriopedia optional | :: boolean |
parameter optional | :: boolean | Whether the prototype is a special type which can be used to parametrize blueprints and doesn't have other function.
Whether the prototype is a special type which can be used to parametrize blueprints and doesn't have other function.
factoriopedia_simulation optional | :: SimulationDefinition | The simulation shown when looking at this prototype in the Factoriopedia GUI.
The simulation shown when looking at this prototype in the Factoriopedia GUI.

allows_productivity optional | :: boolean |
effects optional | :: array[Modifier] | List of effects of the technology (applied when the technology is researched).
List of effects of the technology (applied when the technology is researched).
enabled optional | :: boolean | This can be `false` to disable the technology at the start of the game, or `true` to leave it enabled. [...]
This can be `false` to disable the technology at the start of the game, or `true` to leave it enabled. [...]
essential optional | :: boolean | Whether the technology should be shown in the technology tree GUI when "Show only essential technologies" is enabled.
Whether the technology should be shown in the technology tree GUI when "Show only essential technologies" is enabled.
icon optional | :: FileName | Path to the icon file. [...]
Path to the icon file. [...]
icon_size optional | :: SpriteSizeType | The size of the square icon, in pixels. [...]
The size of the square icon, in pixels. [...]
icons optional | :: array[IconData] | Can't be an empty array.
Can't be an empty array.
ignore_tech_cost_multiplier optional | :: boolean | Controls whether the technology cost ignores the tech cost multiplier set in the DifficultySettings. [...]
Controls whether the technology cost ignores the tech cost multiplier set in the DifficultySettings. [...]
max_level optional | :: uint32 or `"infinite"` | `"infinite"` for infinite technologies, otherwise `uint32`. [...]
`"infinite"` for infinite technologies, otherwise `uint32`. [...]
prerequisites optional | :: array[TechnologyID] | List of technologies needed to be researched before this one can be researched.
List of technologies needed to be researched before this one can be researched.
research_trigger optional | :: TechnologyTrigger | Mandatory if `unit` is not defined.
Mandatory if `unit` is not defined.
show_levels_info optional | :: boolean | Can be used to enable or disable showing levels info in technology slot.
Can be used to enable or disable showing levels info in technology slot.
unit optional | :: TechnologyUnit | Determines the cost in items and time of the technology. [...]
Determines the cost in items and time of the technology. [...]
upgrade optional | :: boolean | When set to true, and the technology contains several levels, only the relevant one is displayed in the technology screen.
When set to true, and the technology contains several levels, only the relevant one is displayed in the technology screen.
visible_when_disabled optional | :: boolean | Controls whether the technology is shown in the tech GUI when it is not `enabled`. [...]
Controls whether the technology is shown in the tech GUI when it is not `enabled`. [...]

Inherited from Prototype

custom_tooltip_fields optional | :: array[CustomTooltipField] | Allows to add extra description items to the tooltip and Factoriopedia.
Allows to add extra description items to the tooltip and Factoriopedia.
factoriopedia_alternative optional | :: string | The ID type corresponding to the prototype that inherits from this. [...]
The ID type corresponding to the prototype that inherits from this. [...]

Inherited from PrototypeBase

name[overridden] | :: string | If this name ends with `-<number>`, that number is ignored for localization purposes. [...]
If this name ends with `-<number>`, that number is ignored for localization purposes. [...]
type | :: string | Specifies the kind of prototype this is. [...]
Specifies the kind of prototype this is. [...]
factoriopedia_description optional | :: LocalisedString | Provides additional description used in factoriopedia.
Provides additional description used in factoriopedia.
factoriopedia_simulation optional | :: SimulationDefinition | The simulation shown when looking at this prototype in the Factoriopedia GUI.
The simulation shown when looking at this prototype in the Factoriopedia GUI.
hidden[overridden] optional | :: boolean | Hides the technology from the tech screen.
Hides the technology from the tech screen.
hidden_in_factoriopedia optional | :: boolean |
localised_description optional | :: LocalisedString | Overwrites the description set in the locale file. [...]
Overwrites the description set in the locale file. [...]
localised_name optional | :: LocalisedString | Overwrites the name set in the locale file. [...]
Overwrites the name set in the locale file. [...]
order optional | :: Order | Used to order prototypes in inventory, recipes and GUIs. [...]
Used to order prototypes in inventory, recipes and GUIs. [...]
parameter optional | :: boolean | Whether the prototype is a special type which can be used to parametrize blueprints and doesn't have other function.
Whether the prototype is a special type which can be used to parametrize blueprints and doesn't have other function.
subgroup optional | :: ItemSubGroupID | The name of an ItemSubGroup.
The name of an ItemSubGroup.

## Properties

### icons :: array[IconData] optional

Can't be an empty array.

### icon :: FileName optional

Path to the icon file.

Only loaded, and mandatory if `icons` is not defined.

### icon_size :: SpriteSizeType optional

Default: `64`

The size of the square icon, in pixels. E.g. `32` for a 32px by 32px icon. Must be larger than `0`.

The base game uses 256px icons for technologies.

Only loaded if `icons` is not defined.

### upgrade :: boolean optional

Default: `false`

When set to true, and the technology contains several levels, only the relevant one is displayed in the technology screen.

#### Example

    {
      type = "technology",
      name = "physical-projectile-damage-2",
      [...]
      upgrade = true
    }

### enabled :: boolean optional

Default: `true`

This can be `false` to disable the technology at the start of the game, or `true` to leave it enabled.

Changes to this property do not affect existing save files, as the enabled state is saved in the save file and not reloaded from the prototype.

### essential :: boolean optional

Default: `false`

Whether the technology should be shown in the technology tree GUI when "Show only essential technologies" is enabled.

### visible_when_disabled :: boolean optional

Default: `false`

Controls whether the technology is shown in the tech GUI when it is not `enabled`.

Changes to this property do not affect existing save files, as the visible_when_disabled state is saved in the save file and not reloaded from the prototype.

### ignore_tech_cost_multiplier :: boolean optional

Default: `false`

Controls whether the technology cost ignores the tech cost multiplier set in the DifficultySettings. E.g. `4` for the default expensive difficulty.

### allows_productivity :: boolean optional

Default: `true`

### research_trigger :: TechnologyTrigger optional

Mandatory if `unit` is not defined.

### unit :: TechnologyUnit optional

Determines the cost in items and time of the technology.

Mandatory if `research_trigger` is not defined.

### max_level :: uint32 or `"infinite"` optional

`"infinite"` for infinite technologies, otherwise `uint32`.

Defaults to the same level as the technology, which is `0` for non-upgrades, and the level of the upgrade for upgrades.

### prerequisites :: array[TechnologyID] optional

List of technologies needed to be researched before this one can be researched.

#### Example

    prerequisites = {"explosives", "military-2"}

### show_levels_info :: boolean optional

Can be used to enable or disable showing levels info in technology slot.

### effects :: array[Modifier] optional

List of effects of the technology (applied when the technology is researched).

#### Example

    {
      {
        type  = "unlock-recipe",
        recipe = "land-mine"
      }
    }

## Overridden Properties

### name :: string

If this name ends with `-<number>`, that number is ignored for localization purposes. E.g. if the name is `technology-3`, the game looks for the `technology-name.technology` localization. The technology tree will also show the number on the technology icon.

### hidden :: boolean optional

Default: `false`

Hides the technology from the tech screen.

## Example

    {
      type = "technology",
      name = "steel-processing",
      icon_size = 256,
      icon = "__base__/graphics/technology/steel-processing.png",
      effects =
      {
        {
          type = "unlock-recipe",
          recipe = "steel-plate"
        },
        {
          type = "unlock-recipe",
          recipe = "steel-chest"
        }
      },
      unit =
      {
        count = 50,
        ingredients = {{"automation-science-pack", 1}},
        time = 5
      },
      order = "c-a"
    }