Factorio.com|Forums|Wiki|Mod Portal|API Docs Prototype|Runtime|Auxiliary

# Factorio Prototype Docs Version 2.0.7

## TechnologyPrototype 'technology' changed 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 | :: bool | 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 | :: bool |
essential new optional | :: bool | 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 | :: bool | 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 | :: bool | 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 new optional | :: bool |
research_trigger new 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.
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. [...]

Inherited from PrototypeBase

type | :: string | Specifies the kind of prototype this is. [...]
Specifies the kind of prototype this is. [...]
name[overridden] | :: string | Unique textual identification of the prototype. [...]
Unique textual identification of the prototype. [...]
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 new optional | :: LocalisedString | Provides additional description used in factoriopedia.
Provides additional description used in factoriopedia.
subgroup new optional | :: ItemSubGroupID | The name of an ItemSubGroup.
The name of an ItemSubGroup.
hidden new optional | :: bool |
hidden_in_factoriopedia new optional | :: bool |
parameter new optional | :: bool | 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 new 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 new optional | :: bool |
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 | :: bool |
essential new optional | :: bool | 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 | :: bool | 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 new 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. [...]
upgrade optional | :: bool | 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 | :: bool | 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

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 | Unique textual identification of the prototype. [...]
Unique textual identification of the prototype. [...]
type | :: string | Specifies the kind of prototype this is. [...]
Specifies the kind of prototype this is. [...]
factoriopedia_description new optional | :: LocalisedString | Provides additional description used in factoriopedia.
Provides additional description used in factoriopedia.
factoriopedia_simulation new 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 new optional | :: bool |
hidden_in_factoriopedia new optional | :: bool |
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 new optional | :: bool | 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 new 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.

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 :: bool 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 :: bool optional

Default: `true`

### essential :: bool optional new

Default: `false`

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

### visible_when_disabled :: bool optional

Default: `false`

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

### ignore_tech_cost_multiplier :: bool 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 :: bool optional new

Default: `true`

### research_trigger :: TechnologyTrigger optional new

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

### 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.

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