Factorio Prototype DocsVersion 1.1.107

EntityPrototype - abstract Example code

Abstract base of all entities in the game. Entity is nearly everything that can be on the map (except tiles).

For in game script access to entity, take a look at LuaEntity.

Inherits from PrototypeBase
Children

Properties

icons optional :: array[IconData]

This will be used in the electric network statistics, editor building selection, and the bonus gui. [...]

This will be used in the electric network statistics, editor building selection, and the bonus gui. [...]

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. [...]

icon_mipmaps optional :: IconMipMapType

Icons of reduced size will be used at decreased scale.

Icons of reduced size will be used at decreased scale.

collision_box optional :: BoundingBox

Specification of the entity collision boundaries. [...]

Specification of the entity collision boundaries. [...]

collision_mask optional :: CollisionMask

Two entities can collide only if they share a layer from the collision mask.

Two entities can collide only if they share a layer from the collision mask.

map_generator_bounding_box optional :: BoundingBox

Used instead of the collision box during map generation. [...]

Used instead of the collision box during map generation. [...]

selection_box optional :: BoundingBox

Specification of the entity selection area. [...]

Specification of the entity selection area. [...]

drawing_box optional :: BoundingBox

Specification of space needed to see the whole entity in GUIs. [...]

Specification of space needed to see the whole entity in GUIs. [...]

sticker_box optional :: BoundingBox

Used to set the area of the entity that can have stickers on it, currently only used for units to specify the area where the green slow down stickers can appear.

Used to set the area of the entity that can have stickers on it, currently only used for units to specify the area where the green slow down stickers can appear.

hit_visualization_box optional :: BoundingBox

Where beams should hit the entity. [...]

Where beams should hit the entity. [...]

trigger_target_mask optional :: TriggerTargetMask
flags optional :: EntityPrototypeFlags
minable optional :: MinableProperties

The item given to the player when they mine the entity and other properties relevant to mining this entity.

The item given to the player when they mine the entity and other properties relevant to mining this entity.

subgroup optional :: ItemSubGroupID

The name of the subgroup this entity should be sorted into in the map editor building selection.

The name of the subgroup this entity should be sorted into in the map editor building selection.

allow_copy_paste optional :: bool
selectable_in_game optional :: bool
selection_priority optional :: uint8

The entity with the higher number is selectable before the entity with the lower number. [...]

The entity with the higher number is selectable before the entity with the lower number. [...]

build_grid_size optional :: uint8

Supported values are 1 (for 1x1 grid) and 2 (for 2x2 grid, like rails). [...]

Supported values are 1 (for 1x1 grid) and 2 (for 2x2 grid, like rails). [...]

remove_decoratives optional :: "automatic" or "true" or "false"

Whether this entity should remove decoratives that collide with it when this entity is built. [...]

Whether this entity should remove decoratives that collide with it when this entity is built. [...]

emissions_per_second optional :: double

Amount of emissions created (positive number) or cleaned (negative number) every second by the entity. [...]

Amount of emissions created (positive number) or cleaned (negative number) every second by the entity. [...]

shooting_cursor_size optional :: float

The cursor size used when shooting at this entity.

The cursor size used when shooting at this entity.

created_smoke optional :: CreateTrivialSmokeEffectItem

The smoke that is shown when the entity is placed.

The smoke that is shown when the entity is placed.

working_sound optional :: WorkingSound

Will also work on entities that don't actually do work.

Will also work on entities that don't actually do work.

created_effect optional :: Trigger

The effect/trigger that happens when the entity is placed.

The effect/trigger that happens when the entity is placed.

build_sound optional :: Sound
mined_sound optional :: Sound
mining_sound optional :: Sound
rotated_sound optional :: Sound
vehicle_impact_sound optional :: Sound

When playing this sound, the volume is scaled by the speed of the vehicle when colliding with this entity.

When playing this sound, the volume is scaled by the speed of the vehicle when colliding with this entity.

open_sound optional :: Sound
close_sound optional :: Sound
radius_visualisation_specification optional :: RadiusVisualisationSpecification
build_base_evolution_requirement optional :: double
alert_icon_shift optional :: Vector
alert_icon_scale optional :: float
fast_replaceable_group optional :: string

This allows you to replace an entity that's already placed, with a different one in your inventory. [...]

This allows you to replace an entity that's already placed, with a different one in your inventory. [...]

next_upgrade optional :: EntityID

Name of the entity that will be automatically selected as the upgrade of this entity when using the upgrade planner without configuration. [...]

Name of the entity that will be automatically selected as the upgrade of this entity when using the upgrade planner without configuration. [...]

protected_from_tile_building optional :: bool

When this is true, this entity prototype should be included during tile collision checks with tiles that have TilePrototype::check_collision_with_entities set to true.

When this is true, this entity prototype should be included during tile collision checks with tiles that have TilePrototype::check_collision_with_entities set to true.

placeable_by optional :: ItemToPlace or array[ItemToPlace]

Item that when placed creates this entity. [...]

Item that when placed creates this entity. [...]

remains_when_mined optional :: EntityID or array[EntityID]

The entity that remains when this one is mined, deconstructed or fast-replaced. [...]

The entity that remains when this one is mined, deconstructed or fast-replaced. [...]

additional_pastable_entities optional :: array[EntityID]

Names of the entity prototypes this entity prototype can be pasted on to in addition to the standard supported types. [...]

Names of the entity prototypes this entity prototype can be pasted on to in addition to the standard supported types. [...]

tile_width optional :: uint32

Used to determine how the center of the entity should be positioned when building (unless the off-grid flag is specified). [...]

Used to determine how the center of the entity should be positioned when building (unless the off-grid flag is specified). [...]

tile_height optional :: uint32
autoplace optional :: AutoplaceSpecification

Used to specify the rules for placing this entity during map generation.

Used to specify the rules for placing this entity during map generation.

map_color optional :: Color
friendly_map_color optional :: Color
enemy_map_color optional :: Color
water_reflection optional :: WaterReflectionDefinition

May also be defined inside graphics_set instead of directly in the entity prototype. [...]

May also be defined inside graphics_set instead of directly in the entity prototype. [...]

Inherited from PrototypeBase
type :: string

Specifies the kind of prototype this is. [...]

Specifies the kind of prototype this is. [...]

name :: string

Unique textual identification of the prototype. [...]

Unique textual identification of the prototype. [...]

order[overridden] 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. [...]

Properties

icons :: array[IconData] optional

This will be used in the electric network statistics, editor building selection, and the bonus gui. Can't be an empty array.

Either this or icon is mandatory for entities that have at least one of these flags active: "placeable-neutral", "placeable-player", "placeable-enemy".

icon :: FileName optional

Path to the icon file.

Either this or icons is mandatory for entities that have at least one of these flags active: "placeable-neutral", "placeable-player", "placeable-enemy".

Only loaded if icons is not defined.

Example

icon = "__base__/graphics/icons/wooden-chest.png"

icon_size :: SpriteSizeType optional

The size of the square icon, in pixels. E.g. 32 for a 32px by 32px icon.

Only loaded if icons is not defined, or if icon_size is not specified for all instances of icons.

Example

icon_size = 64

icon_mipmaps :: IconMipMapType optional

Default: 0

Icons of reduced size will be used at decreased scale.

collision_box :: BoundingBox optional

Default: Empty = {{0, 0}, {0, 0}}

Specification of the entity collision boundaries. Empty collision box means no collision and is used for smoke, projectiles, particles, explosions etc.

The {0,0} coordinate in the collision box will match the entity position. It should be near the center of the collision box, to keep correct entity drawing order. The bounding box must include the {0,0} coordinate.

Note, that for buildings, it is customary to leave 0.1 wide border between the edge of the tile and the edge of the building, this lets the player move between the building and electric poles/inserters etc.

Example

collision_box = {{-0.4, -0.4}, {0.4, 0.4}}

collision_mask :: CollisionMask optional

Default: {"item-layer", "object-layer", "player-layer", "water-tile"}

Two entities can collide only if they share a layer from the collision mask.

Some entity types have their own default that differs from the above default. They are listed here:

map_generator_bounding_box :: BoundingBox optional

Default: The value of collision_box.

Used instead of the collision box during map generation. Allows space entities differently during map generation, for example if the box is bigger, the entities will be placed farther apart.

selection_box :: BoundingBox optional

Default: Empty = {{0, 0}, {0, 0}}

Specification of the entity selection area. When empty the entity will have no selection area (and thus is not selectable).

The selection box is usually a little bit bigger than the collision box. For tileable entities (like buildings) it should match the tile size of the building.

Example

selection_box = {{-0.5, -0.5}, {0.5, 0.5}}

drawing_box :: BoundingBox optional

Default: The value of selection_box.

Specification of space needed to see the whole entity in GUIs. This is used to calculate the correct zoom and positioning in the entity info gui, for example in the entity tooltip.

Example

drawing_box = {{-0.5, -0.5}, {0.5, 0.5}}

sticker_box :: BoundingBox optional

Default: The value of collision_box.

Used to set the area of the entity that can have stickers on it, currently only used for units to specify the area where the green slow down stickers can appear.

Example

sticker_box = {{-0.5, -0.5}, {0.5, 0.5}}

hit_visualization_box :: BoundingBox optional

Default: Empty = {{0, 0}, {0, 0}}

Where beams should hit the entity. Useful if the bounding box only covers part of the entity (e.g. feet of the character) and beams only hitting there would look weird.

trigger_target_mask :: TriggerTargetMask optional

flags :: EntityPrototypeFlags optional

minable :: MinableProperties optional

Default: not minable

The item given to the player when they mine the entity and other properties relevant to mining this entity.

Example

minable = {mining_time = 0.2, result = "boiler"}

subgroup :: ItemSubGroupID optional

The name of the subgroup this entity should be sorted into in the map editor building selection.

allow_copy_paste :: bool optional

Default: true

selectable_in_game :: bool optional

Default: true

selection_priority :: uint8 optional

Default: 50

The entity with the higher number is selectable before the entity with the lower number. When two entities have the same selection priority, the one with the highest collision mask (as determined by the order on that page) is selected.

build_grid_size :: uint8 optional

Default: 1

Supported values are 1 (for 1x1 grid) and 2 (for 2x2 grid, like rails).

Internally forced to be 2 for RailPrototype, RailRemnantsPrototype and TrainStopPrototype.

remove_decoratives :: "automatic" or "true" or "false" optional

Default: "automatic"

Whether this entity should remove decoratives that collide with it when this entity is built. When set to "automatic", if the entity type is considered a building (e.g. an assembling machine or a wall) it will remove decoratives.

emissions_per_second :: double optional

Default: 0

Amount of emissions created (positive number) or cleaned (negative number) every second by the entity. This is passive, and it is independent concept of the emissions of machines, these are created actively depending on the power consumption. Currently used just for trees.

Example

emissions_per_second = -0.001 -- cleaning effect of big tree

shooting_cursor_size :: float optional

The cursor size used when shooting at this entity.

created_smoke :: CreateTrivialSmokeEffectItem optional

Default: The "smoke-building"-smoke

The smoke that is shown when the entity is placed.

working_sound :: WorkingSound optional

Will also work on entities that don't actually do work.

created_effect :: Trigger optional

The effect/trigger that happens when the entity is placed.

build_sound :: Sound optional

mined_sound :: Sound optional

mining_sound :: Sound optional

rotated_sound :: Sound optional

vehicle_impact_sound :: Sound optional

When playing this sound, the volume is scaled by the speed of the vehicle when colliding with this entity.

open_sound :: Sound optional

close_sound :: Sound optional

radius_visualisation_specification :: RadiusVisualisationSpecification optional

build_base_evolution_requirement :: double optional

Default: 0

alert_icon_shift :: Vector optional

alert_icon_scale :: float optional

fast_replaceable_group :: string optional

Default: ""

This allows you to replace an entity that's already placed, with a different one in your inventory. For example, replacing a burner inserter with a fast inserter. The replacement entity can be a different rotation to the replaced entity and you can replace an entity with the same type.

This is simply a string, so any string can be used here. The entity that should be replaced simply has to use the same string here.

The ones the game uses are:
  • "constant-combinator"
  • "container"
  • "furnace"
  • "transport-belt"
  • "electric-pole"
  • "steam-engine"
  • "inserter"
  • "long-handed-inserter"
  • "pipe"
  • "assembling-machine"
  • "wall"
  • "loader"
  • "rail-signal"
  • "linked-belts"
  • "mining-drill"
  • "pumpjack"

next_upgrade :: EntityID optional

Name of the entity that will be automatically selected as the upgrade of this entity when using the upgrade planner without configuration.

This entity may not have "not-upgradable" flag set and must be minable. This entity mining result must not contain item product with "hidden" flag set. Mining results with no item products are allowed. This entity may not be a RollingStockPrototype.

The upgrade target entity needs to have the same bounding box, collision mask, and fast replaceable group as this entity. The upgrade target entity must have least 1 item that builds it that isn't hidden.

Example

next_upgrade = "fast-inserter"

protected_from_tile_building :: bool optional

Default: true

When this is true, this entity prototype should be included during tile collision checks with tiles that have TilePrototype::check_collision_with_entities set to true.

placeable_by :: ItemToPlace or array[ItemToPlace] optional

Item that when placed creates this entity. Determines which item is picked when "Q" (smart pipette) is used on this entity. Determines which item and item amount is needed in a blueprint of this entity and to revive a ghost of this entity.

The item count specified here can't be larger than the stack size of that item.

Example

placeable_by = {item = "rail", count = 4}

remains_when_mined :: EntityID or array[EntityID] optional

The entity that remains when this one is mined, deconstructed or fast-replaced. The entity wont actually be spawned if it would collide with the entity that is in the process of being mined.

additional_pastable_entities :: array[EntityID] optional

Names of the entity prototypes this entity prototype can be pasted on to in addition to the standard supported types.

This is used to allow copying between types that aren't compatible on the C++ code side, by allowing mods to receive the on_entity_settings_pasted event for the given entity and do the setting pasting via script.

Example

additional_pastable_entities = {"steel-chest", "iron-chest"}

tile_width :: uint32 optional

Default: calculated by the collision box width rounded up.

Used to determine how the center of the entity should be positioned when building (unless the off-grid flag is specified).

When the tile width is odd, the center will be in the center of the tile, when it is even, the center is on the tile transition.

tile_height :: uint32 optional

Default: calculated by the collision box height rounded up.

autoplace :: AutoplaceSpecification optional

Default: nil (entity is not autoplacable)

Used to specify the rules for placing this entity during map generation.

map_color :: Color optional

friendly_map_color :: Color optional

enemy_map_color :: Color optional

water_reflection :: WaterReflectionDefinition optional

May also be defined inside graphics_set instead of directly in the entity prototype. This is useful for entities that use a graphics_set property to define their graphics, because then all graphics can be defined in one place.

Currently only renders for EntityWithHealthPrototype.

Overridden Properties

order :: Order optional

Used to order prototypes in inventory, recipes and GUIs. May not exceed a length of 200 characters.

The order string is taken from the items in placeable_by if they exist, or from an item that has its place_result set to this entity.

Example

{
  type = "container",
  name = "wooden-chest",
  icon = "__base__/graphics/icons/wooden-chest.png",
  flags = { "placeable-neutral", "player-creation" },
  minable = { mining_time = 1, result = "wooden-chest" },
  max_health = 100,
  corpse = "small-remnants",
  collision_box = { {-0.35, -0.35}, {0.35, 0.35} },
  fast_replaceable_group = "container",
  selection_box = { {-0.5, -0.5}, {0.5, 0.5} },
  inventory_size = 16,
  open_sound = { filename = "__base__/sound/wooden-chest-open.ogg" },
  close_sound = { filename = "__base__/sound/wooden-chest-close.ogg" },
  vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 },
  picture =
  {
    filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",
    priority = "extra-high",
    width = 46,
    height = 33,
    shift = {0.25, 0.015625}
  }
}

Prototypes

Types