<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.factorio.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raspberrypuppies</id>
	<title>Official Factorio Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.factorio.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raspberrypuppies"/>
	<link rel="alternate" type="text/html" href="https://wiki.factorio.com/Special:Contributions/Raspberrypuppies"/>
	<updated>2026-04-15T05:07:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Prototype/FireFlame&amp;diff=191215</id>
		<title>Prototype/FireFlame</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Prototype/FireFlame&amp;diff=191215"/>
		<updated>2023-04-05T02:49:49Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: Added description of initial_flame_count and uses_alternative_behavior&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Prototype parent|Prototype/Entity}}&lt;br /&gt;
A fire.&lt;br /&gt;
&lt;br /&gt;
{{Prototype TOC|fire}}&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
This prototype inherits all the properties from [[Prototype/Entity]].&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|damage_per_tick|[[Types/DamagePrototype|DamagePrototype]]}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|spread_delay|[[Types/uint32|uint32]]}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|spread_delay_deviation|[[Types/uint32|uint32]]}}&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|render_layer|[[Types/RenderLayer|RenderLayer]]|&amp;quot;object&amp;quot;|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|initial_render_layer|[[Types/RenderLayer|RenderLayer]]|&amp;quot;object&amp;quot;|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|secondary_render_layer|[[Types/RenderLayer|RenderLayer]]|&amp;quot;object&amp;quot;|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|small_tree_fire_pictures|[[Types/AnimationVariations|AnimationVariations]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|pictures|[[Types/AnimationVariations|AnimationVariations]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke_source_pictures|[[Types/AnimationVariations|AnimationVariations]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|secondary_pictures|[[Types/AnimationVariations|AnimationVariations]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|burnt_patch_pictures|[[Types/SpriteVariations|SpriteVariations]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|secondary_picture_fade_out_start|[[Types/uint32|uint32]]|0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|secondary_picture_fade_out_duration|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|spawn_entity|[[Types/string|string]]|optional=true}}&lt;br /&gt;
The name of an entity.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke|[[Types/table|Array]] of [[Types/SmokeSource|SmokeSource]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|maximum_spread_count|[[Types/uint16|uint16]]|200|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|initial_flame_count|[[Types/uint8|uint8]]|0|optional=true}}&lt;br /&gt;
Spawns &amp;lt;code&amp;gt;initial_flame_count&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;secondary_pictures&amp;lt;/code&amp;gt; around the entity when it first spawns. It waits &amp;lt;code&amp;gt;delay_between_initial_flames&amp;lt;/code&amp;gt; between each spawned &amp;lt;code&amp;gt;secondary_pictures&amp;lt;/code&amp;gt;. This can be used to make fires look less repetitive.&lt;br /&gt;
&lt;br /&gt;
Ex: Spitters use this to make several smaller splashes around the main one.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|uses_alternative_behavior|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
If false, then all animations loop. If true, they run once and stay on the final frame. Also changes the behavior of several other fire properties as mentioned in their descriptions.&lt;br /&gt;
&lt;br /&gt;
Ex: Spitters use alternate behavior, flamethrower flames don&#039;t.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|limit_overlapping_particles|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|tree_dying_factor|[[Types/float|float]]|0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|fade_in_duration|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|fade_out_duration|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|initial_lifetime|[[Types/uint32|uint32]]|300|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|damage_multiplier_decrease_per_tick|[[Types/float|float]]|0.0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|damage_multiplier_increase_per_added_fuel|[[Types/float|float]]|0.0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|maximum_damage_multiplier|[[Types/float|float]]|1.0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|lifetime_increase_by|[[Types/uint32|uint32]]|20|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|lifetime_increase_cooldown|[[Types/uint32|uint32]]|10|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|maximum_lifetime|[[Types/uint32|uint32]]|Max uint32|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|add_fuel_cooldown|[[Types/uint32|uint32]]|10|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|delay_between_initial_flames|[[Types/uint32|uint32]]|10|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke_fade_in_duration|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke_fade_out_duration|[[Types/uint32|uint32]]|30|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|on_fuel_added_action|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|on_damage_tick_effect|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|light|[[Types/LightDefinition|LightDefinition]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_alpha_blend_duration|[[Types/uint16|uint16]]|0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|burnt_patch_lifetime|[[Types/uint32|uint32]]|1800|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|burnt_patch_alpha_default|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
Only loaded if &amp;lt;code&amp;gt;uses_alternative_behavior&amp;lt;/code&amp;gt; is true.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_alpha_deviation|[[Types/float|float]]|0|optional=true}}&lt;br /&gt;
Only loaded if &amp;lt;code&amp;gt;uses_alternative_behavior&amp;lt;/code&amp;gt; is true.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|flame_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
Only loaded if &amp;lt;code&amp;gt;uses_alternative_behavior&amp;lt;/code&amp;gt; is false.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|flame_alpha_deviation|[[Types/float|float]]|0|optional=true}}&lt;br /&gt;
Only loaded if &amp;lt;code&amp;gt;uses_alternative_behavior&amp;lt;/code&amp;gt; is false.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|burnt_patch_alpha_variations|[[Types/table|table]]|optional=true}}&lt;br /&gt;
Array of tables with the following mandatory members:&lt;br /&gt;
* tile - [[Types/string|string]] - Name of a tile.&lt;br /&gt;
* alpha - [[Types/float|float]]&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Tutorial:Localisation&amp;diff=190779</id>
		<title>Tutorial:Localisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Tutorial:Localisation&amp;diff=190779"/>
		<updated>2023-02-10T05:05:14Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: Adding [string-mod-setting] to the list of built-in locale categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}Mods should define human readable names for prototypes that they add. They can also define descriptions for items or custom strings for usage in GUIs etc. This is called &#039;&#039;&#039;localisation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
Translations are stored as .cfg files, with the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;welcome-message=Hello world&lt;br /&gt;
[category]&lt;br /&gt;
title=Category related title&lt;br /&gt;
# Comment&lt;br /&gt;
; Another comment&amp;lt;/pre&amp;gt;&lt;br /&gt;
Any whitespace after or before &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; is included in the key or string, so &amp;lt;code&amp;gt;title =Category related title&amp;lt;/code&amp;gt; will give an unknown key error if you are looking for the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; key, since it is the &amp;lt;code&amp;gt;title&amp;amp;nbsp;&amp;lt;/code&amp;gt; key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt; can be one of the existing locale categories, which permits implicit search mechanisms to find translations, but may also be another key, such as &amp;lt;code&amp;gt;[my-mod-messages]&amp;lt;/code&amp;gt;. These are accessible the same as other translations, e.g. &amp;lt;code&amp;gt;{&amp;quot;my-mod-messages.hello&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These files are located within the language code of the language in the locale folder of the mod, so as an English example &amp;lt;code&amp;gt;__mod__/locale/en/any_name_here.cfg&amp;lt;/code&amp;gt;. There can be more than 1 file per language, all of them will be read.&lt;br /&gt;
&lt;br /&gt;
== Localising simple strings ==&lt;br /&gt;
The simplest localisation is of items, entities etc. If we say the item is &amp;lt;code&amp;gt;iron-plate&amp;lt;/code&amp;gt;, the game will then search all loaded locale files for &amp;lt;code&amp;gt;item-name.iron-plate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;item-description.iron-plate&amp;lt;/code&amp;gt;, which in the locale file looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[item-name]&lt;br /&gt;
iron-plate=Iron plate&lt;br /&gt;
[item-description]&lt;br /&gt;
iron-plate=A plate made of iron.&amp;lt;/pre&amp;gt;&lt;br /&gt;
If found in the locale, the label is set to this string. If not found, the game will instead show: &amp;lt;code&amp;gt;Unknown key: &amp;amp;quot;item-name.iron-plate&amp;amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In script, the localised string is formatted as &amp;lt;code&amp;gt;{&amp;amp;quot;category.name&amp;amp;quot;}&amp;lt;/code&amp;gt;, so &amp;lt;code&amp;gt;game.print({&amp;amp;quot;item-name.iron-plate&amp;amp;quot;})&amp;lt;/code&amp;gt; prints &#039;&#039;Iron plate&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[rich text]] features in the localised text if the location where the text is shown supports it, e.g. in the chat, prototype names and prototype tooltips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; can be used for line breaks if the location where the text is shown supports multiline text.&lt;br /&gt;
&lt;br /&gt;
The list of all localization categories used by the base game is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[achievement-description] [achievement-name] [ammo-category-name] [autoplace-control-names] [controls] [damage-type-name] [decorative-name] [entity-description] [entity-name] [equipment-name] [fluid-name] [fuel-category-name] [item-description] [item-group-name] [item-limitation] [item-name] [map-gen-preset-description] [map-gen-preset-name] [mod-description] [mod-name] [modifier-description] [programmable-speaker-instrument] [programmable-speaker-note] [recipe-name] [shortcut] [story] [string-mod-setting] [technology-description] [technology-name] [tile-name] [tips-and-tricks-item-description] [tips-and-tricks-item-name] [virtual-signal-description] [virtual-signal-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Localising with parameters ==&lt;br /&gt;
For more complex strings, localisation parameters can be used. For instance we want to show &#039;&#039;Time left: 10 minutes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So a key with a placeholder is defined, which is replaced by the first parameter after the locale key.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;time-left=Time left: __1__ minutes.&amp;lt;/pre&amp;gt;&lt;br /&gt;
So it is used like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;time-left&amp;quot;, 10})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It also works with multiple parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;time-left&amp;quot;, 10, 45})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;time-left=Time left: __1__ minutes and __2__ seconds.&amp;lt;/pre&amp;gt;&lt;br /&gt;
Which results in &#039;&#039;Time left: 10 minutes and 45 seconds.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Built-in parameters ===&lt;br /&gt;
For some situations, we use localisation to show control schemes. For instance we want to say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;technology-prompt=Use T to open the technology screen&amp;lt;/pre&amp;gt;&lt;br /&gt;
However the player may have rebound the key, but we can’t figure out which key as it would not be deterministic. So instead we use the built-in replacement functionality&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;technology-prompt=Use __CONTROL__open-technology-gui__ to open the technology screen.&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can also use this for items and entities:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;big-iron-plate=Big __ITEM__iron-plate__&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;tiny-gun-turret=Tiny __ENTITY__gun-turret__&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== List of built-in parameters ====&lt;br /&gt;
&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is the name of an internal game control or a prototype name, depending on context. &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; can be 1 or 2, it&#039;s used in parameters that control [[#Localising_alternate_input_names|alternate input names]]. For a list of internal game control names, see [[Prototype/CustomInput#linked_game_control]].&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL__name__&amp;lt;/code&amp;gt; - The combination of modifiers and input, such as &amp;quot;Control + Alt + Left-click&amp;quot;, or &amp;quot;Not set&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_MODIFIER__name__&amp;lt;/code&amp;gt; - The modifiers, such as &amp;quot;ControlShift&amp;quot;, or, &amp;quot;No modifier selected.&amp;quot;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_STYLE_BEGIN__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_STYLE_END__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_LEFT_CLICK__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-1&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-b&amp;lt;/code&amp;gt;[https://crowdin.com/project/factorio/discussions/214]&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_RIGHT_CLICK__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-2&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-x&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_KEY_SHIFT__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.shift&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-leftshoulder&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_KEY_CTRL__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.control&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-rightshoulder&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL_LEFT_CLICK__n__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-1-alt-n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-button-alt-n&amp;lt;/code&amp;gt; (with parameter &amp;lt;code&amp;gt;control-keys.controller-b&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL_RIGHT_CLICK__n__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-2-alt-n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-button-alt-n&amp;lt;/code&amp;gt; (with parameter &amp;lt;code&amp;gt;control-keys.controller-x&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;__REMARK_COLOR_BEGIN__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__REMARK_COLOR_END__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL__n__name__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_MOVE__&amp;lt;/code&amp;gt; - The Movement keys, squished together. Example: &amp;quot;WASD&amp;quot;, from a conventional QWERTY English keyboard.&lt;br /&gt;
* &amp;lt;code&amp;gt;__ENTITY__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Entity]] extension.&lt;br /&gt;
* &amp;lt;code&amp;gt;__ITEM__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Item]] or extension.&lt;br /&gt;
* &amp;lt;code&amp;gt;__TILE__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Tile]].&lt;br /&gt;
* &amp;lt;code&amp;gt;__FLUID__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Fluid]].&lt;br /&gt;
&lt;br /&gt;
=== Plurals ===&lt;br /&gt;
Pluralization can be used in any string that uses a parameter (e.g. __1__) that is numeric, so something like an amount of minutes. It can be used multiple times per string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format-days=__1__ __plural_for_parameter_1_{1=day|rest=days}__&amp;lt;/pre&amp;gt;&lt;br /&gt;
This results in &amp;quot;1 day&amp;quot; and &amp;quot;2 days&amp;quot; / &amp;quot;500 days&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
The number after &amp;lt;code&amp;gt;__plural_for_parameter_&amp;lt;/code&amp;gt; denotes which parameter is used to determine the plural. This is the parameter 1 in the above example. Anything inside the {} is used to make the plural. Each plural form is separated by a |.&lt;br /&gt;
The text in front of the = determines for what the plural form is used. Options for this are:&lt;br /&gt;
* a simple number, e.g. &amp;quot;1&amp;quot;.&lt;br /&gt;
* Multiple numbers, e.g. &amp;quot;2,3,4&amp;quot;.&lt;br /&gt;
* What the number ends with, e.g. &amp;quot;ends in 11&amp;quot; or &amp;quot;ends in 1&amp;quot;&lt;br /&gt;
* Multiple ends with, e.g. &amp;quot;ends in 1,ends in 2,ends in 12&amp;quot;.&lt;br /&gt;
* &amp;quot;rest&amp;quot; to give the default plural.&lt;br /&gt;
&lt;br /&gt;
Plural forms may be empty or contain other keys such as __1__ or spaces. This allows rather large plural forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;__plural_for_parameter_1_{1=__1__ player is|rest=__1__ players are}__ connecting&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system chooses the first fitting plural that it encounters when multiple would fit:&lt;br /&gt;
&amp;lt;pre&amp;gt;__plural_for_parameter_1_{ends in 12=option 1|ends in 2=option 2|rest=option 3}__&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will result in &amp;quot;option 1&amp;quot; for 12 and in &amp;quot;option 2&amp;quot; for 22 and in &amp;quot;option 3&amp;quot; for numbers not ending with 2.&lt;br /&gt;
&lt;br /&gt;
=== Concatenating localised strings ===&lt;br /&gt;
The special locale key: &amp;lt;code&amp;gt;&amp;amp;quot;&amp;amp;quot;&amp;lt;/code&amp;gt; is used to concatenate, as the table format does not support concatenation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;&amp;quot;, {&amp;quot;item-name.iron-plate&amp;quot;}, &amp;quot;: &amp;quot;, 60})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Will result in: &#039;&#039;Iron plate: 60&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Localising alternate input names ===&lt;br /&gt;
&lt;br /&gt;
In the introduction campaign, a special locale system is used for informing players how to do certain actions with their mouse.&lt;br /&gt;
The normal form is to use eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;how-to-build=Use __CONTROL__build__ to place a building&amp;lt;/pre&amp;gt;&lt;br /&gt;
which results in &amp;quot;Use Left mouse button to place a building&amp;quot;. A more natural phrasing would be &amp;quot;Left-click to place a building&amp;quot;, which can be achieved by using the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;how-to-build=__ALT_CONTROL__1__build__ to place a building&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;alt&amp;quot; versions are controlled by a few special locale keys, mouse-button-X-alt-1 and mouse-button-X-alt-2. In English, form 1 produces eg &amp;quot;Left-click&amp;quot;, and form 2 produces eg &amp;quot;Left-clicking&amp;quot;.  Only two alt forms (&amp;quot;1&amp;quot; and &amp;quot;2&amp;quot;) are available at the moment, but if this a problem for some languages, more forms may be added in the future.&lt;br /&gt;
Extra mouse buttons, mouse scroll and keyboard keys are handled through the mouse-button-n-alt-1/2, mouse-wheel-alt-1/2 and keyboard-alt-1/2 keys, which just take the normal name and prepend something like &amp;quot;Press/Pressing&amp;quot;, or &amp;quot;Scroll/Scrolling&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When translating to another language, you can use whatever forms you want here, but the important part is that you are consistent when you use the alt-forms everywhere else. It does not necessarily make sense to just copy the usages of alt forms from the English locale, and for some languages it may be more natural to simply not use this system at all.&lt;br /&gt;
&lt;br /&gt;
== Accessing the localised result in code ==&lt;br /&gt;
While usually unneeded, it is possible to read the resulting localised text in code, for example to search in localised names. See [https://lua-api.factorio.com/latest/LuaPlayer.html#LuaPlayer.request_translation LuaPlayer::request_translation] and  [https://lua-api.factorio.com/latest/events.html#on_string_translated on_string_translated event].&lt;br /&gt;
&lt;br /&gt;
== Default Behavior(s) for finding an Unspecified Localised String ==&lt;br /&gt;
If a localised_string is not defined in the prototype for certain prototype classes, e.g. entity, item, Factorio may have a default search behavior.&lt;br /&gt;
&lt;br /&gt;
Determining an item&#039;s localised name:&lt;br /&gt;
Note: the angle brackets are meant to mean a generic term, they are not part of the actual string. Also, place_result and placed_as_equipment_result are strings, and Factorio fetches the matching prototype to examine.&lt;br /&gt;
&lt;br /&gt;
# if localised_name is provided in the item prototype and it is not empty {}, use the provided value&lt;br /&gt;
# else if there is place_result and it has localised_name that is not an empty table: {}, use the localised_name of place_result&lt;br /&gt;
# else if there is place_result with an empty localised_name, use {&amp;quot;entity-name.&amp;lt;entity prototype name&amp;gt;&amp;quot;}&lt;br /&gt;
# else if there is placed_as_equipment_result and it has a localised_name that is not an empty table: {}, use the localised_name of placed_as_equipment_result&lt;br /&gt;
# else if there is placed_as_equipment_result with empty localised_name, use {&amp;quot;equipment-name.&amp;lt;equipment name&amp;gt;&amp;quot;}&lt;br /&gt;
# else use default {&amp;quot;item-name.&amp;lt;item name&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Reference: [https://forums.factorio.com/viewtopic.php?p=494243#p494243]&lt;br /&gt;
&lt;br /&gt;
Example: The transport-belt item does not have a localised_name, so 1-&amp;gt;2. There is a place result, but not localised_name in the entity prototype. 2-&amp;gt;3. The place result lacks a localised_name. Use the localised string {&amp;quot;entity-name.transport-belt&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Such defaults often include a &amp;quot;leading key&amp;quot; using [&amp;lt;group&amp;gt;-name] or [&amp;lt;group&amp;gt;-description] (such as [recipe-name], [mod-setting-description]). However, each prototype may have a distinct search behavior before using those, based on presence/absence of values in the prototype. [[Prototype/Recipe]] for example may use the first product&#039;s localised_name, or the main_product&#039;s localised_name, or the localised string found in {&amp;quot;recipe-name.&amp;lt;recipe name&amp;gt;&amp;quot;], depending on values provided (and lacking) in the prototype.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Types/LocalisedString|LocalisedString data stage doc]]&lt;br /&gt;
* [https://lua-api.factorio.com/latest/Concepts.html#LocalisedString LocalisedString control stage doc]&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Tutorial:Localisation&amp;diff=190778</id>
		<title>Tutorial:Localisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Tutorial:Localisation&amp;diff=190778"/>
		<updated>2023-02-10T04:01:51Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: Add list of all locale categories used in the base game&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}Mods should define human readable names for prototypes that they add. They can also define descriptions for items or custom strings for usage in GUIs etc. This is called &#039;&#039;&#039;localisation&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
Translations are stored as .cfg files, with the following format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;welcome-message=Hello world&lt;br /&gt;
[category]&lt;br /&gt;
title=Category related title&lt;br /&gt;
# Comment&lt;br /&gt;
; Another comment&amp;lt;/pre&amp;gt;&lt;br /&gt;
Any whitespace after or before &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt; is included in the key or string, so &amp;lt;code&amp;gt;title =Category related title&amp;lt;/code&amp;gt; will give an unknown key error if you are looking for the &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; key, since it is the &amp;lt;code&amp;gt;title&amp;amp;nbsp;&amp;lt;/code&amp;gt; key.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt; can be one of the existing locale categories, which permits implicit search mechanisms to find translations, but may also be another key, such as &amp;lt;code&amp;gt;[my-mod-messages]&amp;lt;/code&amp;gt;. These are accessible the same as other translations, e.g. &amp;lt;code&amp;gt;{&amp;quot;my-mod-messages.hello&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These files are located within the language code of the language in the locale folder of the mod, so as an English example &amp;lt;code&amp;gt;__mod__/locale/en/any_name_here.cfg&amp;lt;/code&amp;gt;. There can be more than 1 file per language, all of them will be read.&lt;br /&gt;
&lt;br /&gt;
== Localising simple strings ==&lt;br /&gt;
The simplest localisation is of items, entities etc. If we say the item is &amp;lt;code&amp;gt;iron-plate&amp;lt;/code&amp;gt;, the game will then search all loaded locale files for &amp;lt;code&amp;gt;item-name.iron-plate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;item-description.iron-plate&amp;lt;/code&amp;gt;, which in the locale file looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[item-name]&lt;br /&gt;
iron-plate=Iron plate&lt;br /&gt;
[item-description]&lt;br /&gt;
iron-plate=A plate made of iron.&amp;lt;/pre&amp;gt;&lt;br /&gt;
If found in the locale, the label is set to this string. If not found, the game will instead show: &amp;lt;code&amp;gt;Unknown key: &amp;amp;quot;item-name.iron-plate&amp;amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In script, the localised string is formatted as &amp;lt;code&amp;gt;{&amp;amp;quot;category.name&amp;amp;quot;}&amp;lt;/code&amp;gt;, so &amp;lt;code&amp;gt;game.print({&amp;amp;quot;item-name.iron-plate&amp;amp;quot;})&amp;lt;/code&amp;gt; prints &#039;&#039;Iron plate&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
It is possible to use [[rich text]] features in the localised text if the location where the text is shown supports it, e.g. in the chat, prototype names and prototype tooltips.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; can be used for line breaks if the location where the text is shown supports multiline text.&lt;br /&gt;
&lt;br /&gt;
The list of all localization categories used by the base game is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[achievement-description] [achievement-name] [ammo-category-name] [autoplace-control-names] [controls] [damage-type-name] [decorative-name] [entity-description] [entity-name] [equipment-name] [fluid-name] [fuel-category-name] [item-description] [item-group-name] [item-limitation] [item-name] [map-gen-preset-description] [map-gen-preset-name] [mod-description] [mod-name] [modifier-description] [programmable-speaker-instrument] [programmable-speaker-note] [recipe-name] [shortcut] [story] [technology-description] [technology-name] [tile-name] [tips-and-tricks-item-description] [tips-and-tricks-item-name] [virtual-signal-description] [virtual-signal-name]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Localising with parameters ==&lt;br /&gt;
For more complex strings, localisation parameters can be used. For instance we want to show &#039;&#039;Time left: 10 minutes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So a key with a placeholder is defined, which is replaced by the first parameter after the locale key.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;time-left=Time left: __1__ minutes.&amp;lt;/pre&amp;gt;&lt;br /&gt;
So it is used like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;time-left&amp;quot;, 10})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It also works with multiple parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;time-left&amp;quot;, 10, 45})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;time-left=Time left: __1__ minutes and __2__ seconds.&amp;lt;/pre&amp;gt;&lt;br /&gt;
Which results in &#039;&#039;Time left: 10 minutes and 45 seconds.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Built-in parameters ===&lt;br /&gt;
For some situations, we use localisation to show control schemes. For instance we want to say:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;technology-prompt=Use T to open the technology screen&amp;lt;/pre&amp;gt;&lt;br /&gt;
However the player may have rebound the key, but we can’t figure out which key as it would not be deterministic. So instead we use the built-in replacement functionality&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;technology-prompt=Use __CONTROL__open-technology-gui__ to open the technology screen.&amp;lt;/pre&amp;gt;&lt;br /&gt;
We can also use this for items and entities:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;big-iron-plate=Big __ITEM__iron-plate__&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;tiny-gun-turret=Tiny __ENTITY__gun-turret__&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== List of built-in parameters ====&lt;br /&gt;
&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; is the name of an internal game control or a prototype name, depending on context. &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; can be 1 or 2, it&#039;s used in parameters that control [[#Localising_alternate_input_names|alternate input names]]. For a list of internal game control names, see [[Prototype/CustomInput#linked_game_control]].&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL__name__&amp;lt;/code&amp;gt; - The combination of modifiers and input, such as &amp;quot;Control + Alt + Left-click&amp;quot;, or &amp;quot;Not set&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_MODIFIER__name__&amp;lt;/code&amp;gt; - The modifiers, such as &amp;quot;ControlShift&amp;quot;, or, &amp;quot;No modifier selected.&amp;quot;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_STYLE_BEGIN__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_STYLE_END__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_LEFT_CLICK__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-1&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-b&amp;lt;/code&amp;gt;[https://crowdin.com/project/factorio/discussions/214]&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_RIGHT_CLICK__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-2&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-x&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_KEY_SHIFT__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.shift&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-leftshoulder&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_KEY_CTRL__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.control&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-rightshoulder&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL_LEFT_CLICK__n__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-1-alt-n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-button-alt-n&amp;lt;/code&amp;gt; (with parameter &amp;lt;code&amp;gt;control-keys.controller-b&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL_RIGHT_CLICK__n__&amp;lt;/code&amp;gt; is replaced with &amp;lt;code&amp;gt;control-keys.mouse-button-2-alt-n&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;control-keys.controller-button-alt-n&amp;lt;/code&amp;gt; (with parameter &amp;lt;code&amp;gt;control-keys.controller-x&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;__REMARK_COLOR_BEGIN__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__REMARK_COLOR_END__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__ALT_CONTROL__n__name__&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;__CONTROL_MOVE__&amp;lt;/code&amp;gt; - The Movement keys, squished together. Example: &amp;quot;WASD&amp;quot;, from a conventional QWERTY English keyboard.&lt;br /&gt;
* &amp;lt;code&amp;gt;__ENTITY__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Entity]] extension.&lt;br /&gt;
* &amp;lt;code&amp;gt;__ITEM__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Item]] or extension.&lt;br /&gt;
* &amp;lt;code&amp;gt;__TILE__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Tile]].&lt;br /&gt;
* &amp;lt;code&amp;gt;__FLUID__name__&amp;lt;/code&amp;gt; - The localised_name of the [[Prototype/Fluid]].&lt;br /&gt;
&lt;br /&gt;
=== Plurals ===&lt;br /&gt;
Pluralization can be used in any string that uses a parameter (e.g. __1__) that is numeric, so something like an amount of minutes. It can be used multiple times per string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;format-days=__1__ __plural_for_parameter_1_{1=day|rest=days}__&amp;lt;/pre&amp;gt;&lt;br /&gt;
This results in &amp;quot;1 day&amp;quot; and &amp;quot;2 days&amp;quot; / &amp;quot;500 days&amp;quot; etc.&lt;br /&gt;
&lt;br /&gt;
The number after &amp;lt;code&amp;gt;__plural_for_parameter_&amp;lt;/code&amp;gt; denotes which parameter is used to determine the plural. This is the parameter 1 in the above example. Anything inside the {} is used to make the plural. Each plural form is separated by a |.&lt;br /&gt;
The text in front of the = determines for what the plural form is used. Options for this are:&lt;br /&gt;
* a simple number, e.g. &amp;quot;1&amp;quot;.&lt;br /&gt;
* Multiple numbers, e.g. &amp;quot;2,3,4&amp;quot;.&lt;br /&gt;
* What the number ends with, e.g. &amp;quot;ends in 11&amp;quot; or &amp;quot;ends in 1&amp;quot;&lt;br /&gt;
* Multiple ends with, e.g. &amp;quot;ends in 1,ends in 2,ends in 12&amp;quot;.&lt;br /&gt;
* &amp;quot;rest&amp;quot; to give the default plural.&lt;br /&gt;
&lt;br /&gt;
Plural forms may be empty or contain other keys such as __1__ or spaces. This allows rather large plural forms:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;__plural_for_parameter_1_{1=__1__ player is|rest=__1__ players are}__ connecting&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system chooses the first fitting plural that it encounters when multiple would fit:&lt;br /&gt;
&amp;lt;pre&amp;gt;__plural_for_parameter_1_{ends in 12=option 1|ends in 2=option 2|rest=option 3}__&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will result in &amp;quot;option 1&amp;quot; for 12 and in &amp;quot;option 2&amp;quot; for 22 and in &amp;quot;option 3&amp;quot; for numbers not ending with 2.&lt;br /&gt;
&lt;br /&gt;
=== Concatenating localised strings ===&lt;br /&gt;
The special locale key: &amp;lt;code&amp;gt;&amp;amp;quot;&amp;amp;quot;&amp;lt;/code&amp;gt; is used to concatenate, as the table format does not support concatenation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;game.print({&amp;quot;&amp;quot;, {&amp;quot;item-name.iron-plate&amp;quot;}, &amp;quot;: &amp;quot;, 60})&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Will result in: &#039;&#039;Iron plate: 60&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Localising alternate input names ===&lt;br /&gt;
&lt;br /&gt;
In the introduction campaign, a special locale system is used for informing players how to do certain actions with their mouse.&lt;br /&gt;
The normal form is to use eg:&lt;br /&gt;
&amp;lt;pre&amp;gt;how-to-build=Use __CONTROL__build__ to place a building&amp;lt;/pre&amp;gt;&lt;br /&gt;
which results in &amp;quot;Use Left mouse button to place a building&amp;quot;. A more natural phrasing would be &amp;quot;Left-click to place a building&amp;quot;, which can be achieved by using the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;how-to-build=__ALT_CONTROL__1__build__ to place a building&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;alt&amp;quot; versions are controlled by a few special locale keys, mouse-button-X-alt-1 and mouse-button-X-alt-2. In English, form 1 produces eg &amp;quot;Left-click&amp;quot;, and form 2 produces eg &amp;quot;Left-clicking&amp;quot;.  Only two alt forms (&amp;quot;1&amp;quot; and &amp;quot;2&amp;quot;) are available at the moment, but if this a problem for some languages, more forms may be added in the future.&lt;br /&gt;
Extra mouse buttons, mouse scroll and keyboard keys are handled through the mouse-button-n-alt-1/2, mouse-wheel-alt-1/2 and keyboard-alt-1/2 keys, which just take the normal name and prepend something like &amp;quot;Press/Pressing&amp;quot;, or &amp;quot;Scroll/Scrolling&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When translating to another language, you can use whatever forms you want here, but the important part is that you are consistent when you use the alt-forms everywhere else. It does not necessarily make sense to just copy the usages of alt forms from the English locale, and for some languages it may be more natural to simply not use this system at all.&lt;br /&gt;
&lt;br /&gt;
== Accessing the localised result in code ==&lt;br /&gt;
While usually unneeded, it is possible to read the resulting localised text in code, for example to search in localised names. See [https://lua-api.factorio.com/latest/LuaPlayer.html#LuaPlayer.request_translation LuaPlayer::request_translation] and  [https://lua-api.factorio.com/latest/events.html#on_string_translated on_string_translated event].&lt;br /&gt;
&lt;br /&gt;
== Default Behavior(s) for finding an Unspecified Localised String ==&lt;br /&gt;
If a localised_string is not defined in the prototype for certain prototype classes, e.g. entity, item, Factorio may have a default search behavior.&lt;br /&gt;
&lt;br /&gt;
Determining an item&#039;s localised name:&lt;br /&gt;
Note: the angle brackets are meant to mean a generic term, they are not part of the actual string. Also, place_result and placed_as_equipment_result are strings, and Factorio fetches the matching prototype to examine.&lt;br /&gt;
&lt;br /&gt;
# if localised_name is provided in the item prototype and it is not empty {}, use the provided value&lt;br /&gt;
# else if there is place_result and it has localised_name that is not an empty table: {}, use the localised_name of place_result&lt;br /&gt;
# else if there is place_result with an empty localised_name, use {&amp;quot;entity-name.&amp;lt;entity prototype name&amp;gt;&amp;quot;}&lt;br /&gt;
# else if there is placed_as_equipment_result and it has a localised_name that is not an empty table: {}, use the localised_name of placed_as_equipment_result&lt;br /&gt;
# else if there is placed_as_equipment_result with empty localised_name, use {&amp;quot;equipment-name.&amp;lt;equipment name&amp;gt;&amp;quot;}&lt;br /&gt;
# else use default {&amp;quot;item-name.&amp;lt;item name&amp;gt;&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Reference: [https://forums.factorio.com/viewtopic.php?p=494243#p494243]&lt;br /&gt;
&lt;br /&gt;
Example: The transport-belt item does not have a localised_name, so 1-&amp;gt;2. There is a place result, but not localised_name in the entity prototype. 2-&amp;gt;3. The place result lacks a localised_name. Use the localised string {&amp;quot;entity-name.transport-belt&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
Such defaults often include a &amp;quot;leading key&amp;quot; using [&amp;lt;group&amp;gt;-name] or [&amp;lt;group&amp;gt;-description] (such as [recipe-name], [mod-setting-description]). However, each prototype may have a distinct search behavior before using those, based on presence/absence of values in the prototype. [[Prototype/Recipe]] for example may use the first product&#039;s localised_name, or the main_product&#039;s localised_name, or the localised string found in {&amp;quot;recipe-name.&amp;lt;recipe name&amp;gt;&amp;quot;], depending on values provided (and lacking) in the prototype.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Types/LocalisedString|LocalisedString data stage doc]]&lt;br /&gt;
* [https://lua-api.factorio.com/latest/Concepts.html#LocalisedString LocalisedString control stage doc]&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/ProjectileAttackParameters&amp;diff=190687</id>
		<title>Types/ProjectileAttackParameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/ProjectileAttackParameters&amp;diff=190687"/>
		<updated>2023-01-25T03:14:59Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: Add projectile_center disclaimer based on further experimentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extends [[Types/BaseAttackParameters]].&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
Inherits all properties from [[Types/BaseAttackParameters]].&lt;br /&gt;
&lt;br /&gt;
=== projectile_center ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/vector]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: {0, 0}&lt;br /&gt;
&lt;br /&gt;
When used with projectile_creation_parameters, this offsets what the turret&#039;s sprite looks at. Setting to {0,1} will cause the turret to aim one tile up from the target but the projectile will still aim for the entity. Can be used to give the illusion of height but can also confuse aim logic when set too high.&lt;br /&gt;
&lt;br /&gt;
When used without projectile_creation_parameters, this sets the turret&#039;s rotation axis.&lt;br /&gt;
&lt;br /&gt;
=== projectile_creation_distance ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
=== shell_particle ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/CircularParticleCreationSpecification]]&lt;br /&gt;
&lt;br /&gt;
Used to show bullet shells/casings being ejected from the gun, e.g. [https://factorio.com/blog/post/fff-345 artillery shell casings]. &lt;br /&gt;
&lt;br /&gt;
=== projectile_creation_parameters ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/CircularProjectileCreationSpecification]]&lt;br /&gt;
&lt;br /&gt;
Used to shoot projectiles from arbitrary points. Used by worms and multi-barreled weapons. Use multiple points with the same angle to cause the turret to shoot from multiple barrels. If not set then the launch positions are calculated using projectile_center and  projectile_creation_distance.&lt;br /&gt;
&lt;br /&gt;
=== projectile_orientation_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Used to shoot from different sides of the turret. Setting to 0.25 shoots from the right side, 0.5 shoots from the back, and 0.75 shoots from the left. The turret will look at the enemy as normal but the bullet will spawn from the offset position. Can be used to create right-handed weapons.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/ProjectileAttackParameters&amp;diff=190638</id>
		<title>Types/ProjectileAttackParameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/ProjectileAttackParameters&amp;diff=190638"/>
		<updated>2023-01-09T04:41:57Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: Add description for projectile_center, projectile_creation_parameters, and projectile_orientation_offset based on experimentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extends [[Types/BaseAttackParameters]].&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
Inherits all properties from [[Types/BaseAttackParameters]].&lt;br /&gt;
&lt;br /&gt;
=== projectile_center ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/vector]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: {0, 0}&lt;br /&gt;
&lt;br /&gt;
Offsets what the turret&#039;s sprite looks at. Setting to {0,1} will cause the turret to aim one tile up from the target but the projectile will still aim for the entity. Can be used to give the illusion of height but can also confuse aim logic when set too high.&lt;br /&gt;
&lt;br /&gt;
=== projectile_creation_distance ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
=== shell_particle ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/CircularParticleCreationSpecification]]&lt;br /&gt;
&lt;br /&gt;
Used to show bullet shells/casings being ejected from the gun, e.g. [https://factorio.com/blog/post/fff-345 artillery shell casings]. &lt;br /&gt;
&lt;br /&gt;
=== projectile_creation_parameters ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/CircularProjectileCreationSpecification]]&lt;br /&gt;
&lt;br /&gt;
[Optional] Used to shoot projectiles from arbitrary points. Used by worms and multi-barreled weapons. Use multiple points with the same angle to cause the turret to shoot from multiple barrels. If not set then the launch positions are calculated using projectile_center and  projectile_creation_distance.&lt;br /&gt;
&lt;br /&gt;
=== projectile_orientation_offset ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Used to shoot from different sides of the turret. Setting to 0.25 shoots from the right side, 0.5 shoots from the back, and 0.75 shoots from the left. The turret will look at the enemy as normal but the bullet will spawn from the offset position. Can be used to create right-handed weapons.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/TurretAttackModifierPrototype&amp;diff=190167</id>
		<title>Types/TurretAttackModifierPrototype</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/TurretAttackModifierPrototype&amp;diff=190167"/>
		<updated>2022-10-15T02:12:29Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* turret_id */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Extends [[Types/ModifierPrototype]].&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
Inherits all properties from [[Types/ModifierPrototype]].&lt;br /&gt;
&lt;br /&gt;
=== turret_id ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
Prototype name of the [[Prototype/Entity|entity]] that is affected. This also works for non-turrets such as tanks, however, the bonus does not appear in the entity&#039;s tooltips.&lt;br /&gt;
&lt;br /&gt;
=== modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/double]]&lt;br /&gt;
&lt;br /&gt;
Modification value. This will be added to the current turret attack modifier upon researching.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/AmmoType&amp;diff=190166</id>
		<title>Types/AmmoType</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/AmmoType&amp;diff=190166"/>
		<updated>2022-10-15T01:53:37Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* range_modifier */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Basics==&lt;br /&gt;
Definition of actual parameters used in attack.&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
&lt;br /&gt;
=== category ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
Name of a [[Prototype/AmmoCategory]]. Defines whether the attack will be affected by upgrades.&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
&lt;br /&gt;
=== action ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/Trigger]]&lt;br /&gt;
&lt;br /&gt;
Describes actions taken upon attack happening.&lt;br /&gt;
&lt;br /&gt;
=== clamp_position ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/bool]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: false&lt;br /&gt;
&lt;br /&gt;
When true, the gun will be able to shoot even when the target is out of range. Only applies when target_type is position. The gun will fire at the maximum range in the direction of the target position. Defaults to false.&lt;br /&gt;
&lt;br /&gt;
=== energy_consumption ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/Energy]]&lt;br /&gt;
&lt;br /&gt;
Energy consumption of a single shot, if applicable.&lt;br /&gt;
&lt;br /&gt;
=== range_modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/double]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
Affects the &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; value of the shooting gun prototype&#039;s [[Types/BaseAttackParameters]] to give a modified maximum range. The &amp;lt;code&amp;gt;min_range&amp;lt;/code&amp;gt; value of the gun is unaffected.&lt;br /&gt;
&lt;br /&gt;
[https://forums.factorio.com/viewtopic.php?f=23&amp;amp;t=103658 This has no effect on artillery turrets and wagons even though the bonus appears in the GUI]&lt;br /&gt;
&lt;br /&gt;
=== cooldown_modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/double]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
=== consumption_modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
=== target_type ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;quot;entity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Either &amp;quot;entity&amp;quot;, &amp;quot;position&amp;quot; or &amp;quot;direction&amp;quot;. If this is &amp;quot;entity&amp;quot;, &amp;lt;code&amp;gt;clamp_position&amp;lt;/code&amp;gt; is forced to be false. &lt;br /&gt;
&amp;quot;entity&amp;quot; fires at an entity, &amp;quot;position&amp;quot; fires directly at a position, &amp;quot;direction&amp;quot; fires in a direction.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Types/BaseAttackParameters&amp;diff=190165</id>
		<title>Types/BaseAttackParameters</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Types/BaseAttackParameters&amp;diff=190165"/>
		<updated>2022-10-15T01:39:15Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* lead_target_for_projectile_speed */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The abstract base of all [[Types/AttackParameters|attack parameters]].&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
* [[Types/ProjectileAttackParameters]]&lt;br /&gt;
* [[Types/BeamAttackParameters]]&lt;br /&gt;
* [[Types/StreamAttackParameters]]&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
=== range ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
Before an entity can attack, the distance (in tiles) between the entity and target must be less than or equal to this.&lt;br /&gt;
&lt;br /&gt;
=== cooldown ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
Number of ticks in which it will be possible to shoot again. If &amp;lt; 1, multiple shots can be performed in one tick.&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
=== min_range ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
The minimum distance (in tiles) between an entity and target. If a unit&#039;s target is less than this, the unit will attempt to move away before attacking. A [[Flamethrower turret]] does not move, but has a minimum range. Less than this, it is unable to target an enemy.&lt;br /&gt;
&lt;br /&gt;
=== turn_range ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
If this is &amp;lt;= 0, it is set to 1. Arc from 0 to 1, so for example 0.25 is 90°. Used by the [[flamethrower turret]] in the base game. Arcs greater than 0.5 but less than 1 will be clamped to 0.5 as targeting in arcs larger than half circle is not implemented.[https://forums.factorio.com/94654]&lt;br /&gt;
&lt;br /&gt;
=== fire_penalty ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Used when searching for the nearest enemy, when this is &amp;gt; 0, enemies that aren&#039;t burning are preferred over burning enemies. Definition of &amp;quot;burning&amp;quot; for this: Entity has sticker attached to it, and the sticker has a [[Prototype/Sticker#spread_fire_entity|spread_fire_entity]] set.&lt;br /&gt;
&lt;br /&gt;
=== rotate_penalty ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
A higher penalty will discourage turrets from targeting units that would take longer to turn to face.&lt;br /&gt;
&lt;br /&gt;
=== health_penalty ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
A higher penalty will discourage turrets from targeting units with higher health. A negative penalty will encourage turrets to target units with higher health.&lt;br /&gt;
&lt;br /&gt;
=== range_mode ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;quot;center-to-center&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Either &amp;quot;center-to-center&amp;quot; or &amp;quot;bounding-box-to-bounding-box&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== min_attack_distance ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If less than &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt;, the entity will choose a random distance between &amp;lt;code&amp;gt;range&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;min_attack_distance&amp;lt;/code&amp;gt; and attack from that distance.&lt;br /&gt;
&lt;br /&gt;
=== damage_modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
=== ammo_consumption_modifier ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
Must be greater than or equal to 0.&lt;br /&gt;
&lt;br /&gt;
=== cooldown_deviation ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Must be between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
=== warmup ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/uint32]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Number of ticks it takes for the weapon to actually shoot after the order for shooting has been made. This also allows to &amp;quot;adjust&amp;quot; the shooting animation to the effect of shooting.&lt;br /&gt;
&lt;br /&gt;
[[Types/CapsuleAction]]s cannot have attack_parameters with non-zero warmup.&lt;br /&gt;
&lt;br /&gt;
=== lead_target_for_projectile_speed ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 0&lt;br /&gt;
&lt;br /&gt;
Base game uses&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;lead_target_for_projectile_speed = 0.2* 0.75 * 1.5, -- this is same as particle horizontal speed of flamethrower fire stream&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Presumably this should be set to the projectile speed to make the unit/turret lead their projectiles.&lt;br /&gt;
&lt;br /&gt;
Setting this to anything but zero causes homing projectiles to aim for the target point instead of the entity.&lt;br /&gt;
&lt;br /&gt;
=== movement_slow_down_cooldown ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/float]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;lt;code&amp;gt;cooldown&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== movement_slow_down_factor ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/double]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: 1&lt;br /&gt;
&lt;br /&gt;
=== ammo_type ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/AmmoType]]&lt;br /&gt;
&lt;br /&gt;
Can be mandatory.&lt;br /&gt;
&lt;br /&gt;
=== activation_type ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;quot;shoot&amp;quot;&lt;br /&gt;
&lt;br /&gt;
One of &amp;quot;shoot&amp;quot;, &amp;quot;throw&amp;quot;, &amp;quot;consume&amp;quot; or &amp;quot;activate&amp;quot;. Used in tooltips to set the tooltip category. It is also used to get the locale keys for activation instructions and speed of the action for the tooltip.&lt;br /&gt;
&lt;br /&gt;
For example, an activation_type of &amp;quot;throw&amp;quot; will result in the tooltip category &amp;quot;thrown&amp;quot; and the tooltip locale keys &amp;quot;gui.instruction-to-throw&amp;quot; and &amp;quot;description.throwing-speed&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== sound ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/LayeredSound]]&lt;br /&gt;
&lt;br /&gt;
Played once at the start of the attack if this is a [[Types/ProjectileAttackParameters]].&lt;br /&gt;
&lt;br /&gt;
=== animation ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/RotatedAnimation]]&lt;br /&gt;
&lt;br /&gt;
=== cyclic_sound ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/CyclicSound]]&lt;br /&gt;
&lt;br /&gt;
Played during the attack.&lt;br /&gt;
&lt;br /&gt;
=== use_shooter_direction ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/bool]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Default&#039;&#039;&#039;: false&lt;br /&gt;
&lt;br /&gt;
=== ammo_categories ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/table]] (array) [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
Names of [[Prototype/AmmoCategory|Prototype/AmmoCategories]].&lt;br /&gt;
&lt;br /&gt;
=== ammo_category ===&lt;br /&gt;
&#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string]]&lt;br /&gt;
&lt;br /&gt;
The name of a [[Prototype/AmmoCategory]]. Mandatory if &amp;lt;code&amp;gt;ammo_type&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ammo_categories&amp;lt;/code&amp;gt; is not given, otherwise ignored.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Tutorial:Mod_structure&amp;diff=190062</id>
		<title>Tutorial:Mod structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Tutorial:Mod_structure&amp;diff=190062"/>
		<updated>2022-09-29T22:55:10Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* Files */ Fixed missing link description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}Mods are expected to have a certain structure in order to be loaded by the game. This page aims to explain that file structure and what each file is used for.&lt;br /&gt;
&lt;br /&gt;
== Mod folder and file structure ==&lt;br /&gt;
&lt;br /&gt;
The mod must either be in a folder, or in a folder inside a zip file. The mod folder (no zip file) must either be named in the pattern of &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt; or just &amp;lt;code&amp;gt;{mod-name}&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;test-mod-thing&amp;lt;/code&amp;gt;. The mod zip must be named in the pattern of &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;test-mod-thing_0.0.1&amp;lt;/code&amp;gt;. When using a zip file for the mod, the folder inside the zip file does not have any naming restrictions; only the zip file itself must be named with the &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt; pattern. The mod name and its version number are defined in the [[#info.json|info.json]] file.&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
Inside the mod folder, the game automatically reads the following files during load:&lt;br /&gt;
* info.json — The only mandatory file. The [[#info.json|info.json]] identifies the mod, defines its version and other general properties.&lt;br /&gt;
* changelog.txt — Version history of the mod, to be shown in the mod browser. The changelog file must follow the strict [https://forums.factorio.com/viewtopic.php?t=67140 formatting requirements].&lt;br /&gt;
* thumbnail.png — Thumbnail to be shown on the mod portal and in the mod browser in-game. Ideally a 144x144px image file.&lt;br /&gt;
* settings.lua — This and the next two files are used to set up mod [[Tutorial:Mod settings|configuration options]].&lt;br /&gt;
* settings-updates.lua&lt;br /&gt;
* settings-final-fixes.lua&lt;br /&gt;
* data.lua — This and the next two files are used to define [[Prototype definitions|prototypes]].&lt;br /&gt;
* data-updates.lua — The load order of the three data*.lua files is explained on [https://lua-api.factorio.com/latest/Data-Lifecycle.html Data-Lifecycle].&lt;br /&gt;
* data-final-fixes.lua&lt;br /&gt;
* control.lua — This file is used for runtime scripting. Runtime scripting is documented on [https://lua-api.factorio.com/latest/index.html lua-api.factorio.com].&lt;br /&gt;
&lt;br /&gt;
=== Subfolders ===&lt;br /&gt;
Furthermore, the following folders inside the mod folder are recognized by the game:&lt;br /&gt;
* locale — Can contain up to one subfolder per language, identified with the language code, for example &amp;lt;code&amp;gt;en&amp;lt;/code&amp;gt; for English. The subfolder then has to contain at least one *.cfg file which defines the [[Tutorial:Localisation|translations]] for that language.&lt;br /&gt;
* scenarios — Custom [[scenario system|scenarios]] can be placed in subfolders of this folder.&lt;br /&gt;
* campaigns — Custom campaigns can be placed in subfolders of this folder.&lt;br /&gt;
* tutorials — Custom [[Prototype/Tutorial|tutorials]] can be placed in subfolders of this folder.&lt;br /&gt;
* migrations — [https://lua-api.factorio.com/latest/Migrations.html Migration files] are placed in this folder. They are a way to handle prototype changes and mod data structure changes between mod versions or game versions.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Here is an example directory structure for a mod titled &amp;lt;code&amp;gt;my-armor-mod&amp;lt;/code&amp;gt; with a version number of &amp;lt;code&amp;gt;0.3.6&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-armor-mod_0.3.6.zip&lt;br /&gt;
|- aFolderName/&lt;br /&gt;
  |- control.lua&lt;br /&gt;
  |- data.lua&lt;br /&gt;
  |- info.json&lt;br /&gt;
  |- thumbnail.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== info.json ==&lt;br /&gt;
&lt;br /&gt;
The info.json file identifies the mod and defines its version. If the game encounters a problem when parsing the file, the error message can be found in the [[log file]]. A minimal info.json file can look like this:&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;test-mod-thing&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;title&amp;quot;: &amp;quot;My best test mod&amp;quot;,&lt;br /&gt;
      &amp;quot;author&amp;quot;: &amp;quot;A very great tester&amp;quot;,&lt;br /&gt;
      &amp;quot;factorio_version&amp;quot;: &amp;quot;1.1&amp;quot;,&lt;br /&gt;
      &amp;quot;dependencies&amp;quot;: [&amp;quot;? optional-mod&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
The info.json file supports the following fields:&lt;br /&gt;
&lt;br /&gt;
=== name ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The internal name of mod. The game accepts anything as a mod name, however the mod portal restricts mod names to only consist of alphanumeric characters, dashes and underscores. Note that the mod folder or mod zip file name has to contain the mod name, where the restrictions of the file system apply.&lt;br /&gt;
&lt;br /&gt;
: The game accepts mod names with a maximum length of 100 characters. The mod portal only accepts mods with names that are longer than 3 characters and shorter than 50 characters.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. Defines the version of the mod in the format &amp;lt;code&amp;gt;&amp;quot;number.number.number&amp;quot;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;&amp;quot;main.major.minor&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;0.6.4&amp;quot;&amp;lt;/code&amp;gt;. Each number can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
=== title === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The display name of the mod, so it is not recommended to use someUgly_pRoGrAmMeR-name here. Can be overwritten with a locale entry in the &amp;lt;code&amp;gt;mod-name&amp;lt;/code&amp;gt; category, using the internal mod name as the key.&lt;br /&gt;
&lt;br /&gt;
: The game will reject a title field that is longer than 100 characters. However, this can be worked around by using the locale entry. The mod portal does not restrict mod title length.&lt;br /&gt;
&lt;br /&gt;
=== author === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The author of the mod. This field does not have restrictions, it can also be a list of authors etc. The mod portal ignores this field, it will simply display the uploader&#039;s name as the author.&lt;br /&gt;
&lt;br /&gt;
=== contact === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. How the mod author can be contacted, for example an email address.&lt;br /&gt;
&lt;br /&gt;
=== homepage === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. Where the mod can be found on the internet. Note that the in-game mod browser shows the mod portal link additionally to this field. Please don&#039;t put &amp;quot;None&amp;quot; here, it makes the field on the mod portal website look ugly. Just leave the field empty if the mod doesn&#039;t have a website/forum thread/discord.&lt;br /&gt;
&lt;br /&gt;
=== description === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. A short description of what your mod does. This is all that people get to see in-game. Can be overwritten with a locale entry in the &amp;lt;code&amp;gt;mod-description&amp;lt;/code&amp;gt; category, using the internal mod name as the key.&lt;br /&gt;
&lt;br /&gt;
=== factorio_version ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;quot;0.12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: Optional field. The major Factorio version that this mod supports. This can only be one version, not multiple. While the field is optional, usually mods are developed for major versions higher than the default 0.12, so the field has to be added anyway.&lt;br /&gt;
: Adding a minor version, e.g. &amp;quot;0.18.&#039;&#039;&#039;27&#039;&#039;&#039;&amp;quot; will make the mod portal reject the mod and the game act weirdly. That means this shouldn&#039;t be done; use only main and major version &amp;lt;code&amp;gt;&amp;quot;main.major&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;1.0&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
: Mods with the factorio_version &amp;quot;0.18&amp;quot; can also be loaded in 1.0 and the mod portal will return them when queried for factorio_version 1.0 mods.&lt;br /&gt;
&lt;br /&gt;
=== dependencies ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: array of [[#Dependency]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Default&#039;&#039;&#039;: [&amp;quot;base&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
: Optional field. Mods that this mod depends on or is incompatible with. If this mod depends on another, the other mod will load first, see [https://lua-api.factorio.com/latest/Data-Lifecycle.html Data-Lifecycle]. An empty array allows get around the default and have no dependencies at all.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
: &amp;lt;pre&amp;gt;&amp;quot;dependencies&amp;quot;: [&amp;quot;mod-a&amp;quot;, &amp;quot;? mod-c &amp;gt; 0.4.3&amp;quot;, &amp;quot;! mod-g&amp;quot;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;h4&amp;gt;&amp;lt;span class=&amp;quot;mw-headline&amp;quot; id=&amp;quot;Dependency&amp;quot;&amp;gt;Dependency&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
:: Each dependency is a string that consists of up to three parts: &amp;lt;code&amp;gt;&amp;quot;&amp;lt;prefix&amp;gt; internal-mod-name &amp;lt;equality-operator version&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;? some-mod-everyone-loves &amp;gt;= 4.2.0&amp;quot;&amp;lt;/code&amp;gt;. The possible prefixes are: &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; for incompatibility, &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; for an optional dependency, &amp;lt;code&amp;gt;(?)&amp;lt;/code&amp;gt; for a hidden optional dependency, &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; for a dependency that does not affect load order, or no prefix for a hard requirement for the other mod. The equality operator (&amp;lt;code&amp;gt;&amp;lt;, &amp;lt;=, =, &amp;gt;= or &amp;gt;&amp;lt;/code&amp;gt;) combined with the version allows to define dependencies that require certain mod versions, but it is not required. Incompatibility does not support versions, if you use incompatibility you are incompatible with the entire mod.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Tutorial:Mod_structure&amp;diff=190061</id>
		<title>Tutorial:Mod structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Tutorial:Mod_structure&amp;diff=190061"/>
		<updated>2022-09-29T22:54:17Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* Files */ Aimed broken link at the only tutorial I know of&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}Mods are expected to have a certain structure in order to be loaded by the game. This page aims to explain that file structure and what each file is used for.&lt;br /&gt;
&lt;br /&gt;
== Mod folder and file structure ==&lt;br /&gt;
&lt;br /&gt;
The mod must either be in a folder, or in a folder inside a zip file. The mod folder (no zip file) must either be named in the pattern of &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt; or just &amp;lt;code&amp;gt;{mod-name}&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;test-mod-thing&amp;lt;/code&amp;gt;. The mod zip must be named in the pattern of &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;test-mod-thing_0.0.1&amp;lt;/code&amp;gt;. When using a zip file for the mod, the folder inside the zip file does not have any naming restrictions; only the zip file itself must be named with the &amp;lt;code&amp;gt;{mod-name}_{version-number}&amp;lt;/code&amp;gt; pattern. The mod name and its version number are defined in the [[#info.json|info.json]] file.&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
Inside the mod folder, the game automatically reads the following files during load:&lt;br /&gt;
* info.json — The only mandatory file. The [[#info.json|info.json]] identifies the mod, defines its version and other general properties.&lt;br /&gt;
* changelog.txt — Version history of the mod, to be shown in the mod browser. The changelog file must follow the strict [https://forums.factorio.com/viewtopic.php?t=67140].&lt;br /&gt;
* thumbnail.png — Thumbnail to be shown on the mod portal and in the mod browser in-game. Ideally a 144x144px image file.&lt;br /&gt;
* settings.lua — This and the next two files are used to set up mod [[Tutorial:Mod settings|configuration options]].&lt;br /&gt;
* settings-updates.lua&lt;br /&gt;
* settings-final-fixes.lua&lt;br /&gt;
* data.lua — This and the next two files are used to define [[Prototype definitions|prototypes]].&lt;br /&gt;
* data-updates.lua — The load order of the three data*.lua files is explained on [https://lua-api.factorio.com/latest/Data-Lifecycle.html Data-Lifecycle].&lt;br /&gt;
* data-final-fixes.lua&lt;br /&gt;
* control.lua — This file is used for runtime scripting. Runtime scripting is documented on [https://lua-api.factorio.com/latest/index.html lua-api.factorio.com].&lt;br /&gt;
&lt;br /&gt;
=== Subfolders ===&lt;br /&gt;
Furthermore, the following folders inside the mod folder are recognized by the game:&lt;br /&gt;
* locale — Can contain up to one subfolder per language, identified with the language code, for example &amp;lt;code&amp;gt;en&amp;lt;/code&amp;gt; for English. The subfolder then has to contain at least one *.cfg file which defines the [[Tutorial:Localisation|translations]] for that language.&lt;br /&gt;
* scenarios — Custom [[scenario system|scenarios]] can be placed in subfolders of this folder.&lt;br /&gt;
* campaigns — Custom campaigns can be placed in subfolders of this folder.&lt;br /&gt;
* tutorials — Custom [[Prototype/Tutorial|tutorials]] can be placed in subfolders of this folder.&lt;br /&gt;
* migrations — [https://lua-api.factorio.com/latest/Migrations.html Migration files] are placed in this folder. They are a way to handle prototype changes and mod data structure changes between mod versions or game versions.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
Here is an example directory structure for a mod titled &amp;lt;code&amp;gt;my-armor-mod&amp;lt;/code&amp;gt; with a version number of &amp;lt;code&amp;gt;0.3.6&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
my-armor-mod_0.3.6.zip&lt;br /&gt;
|- aFolderName/&lt;br /&gt;
  |- control.lua&lt;br /&gt;
  |- data.lua&lt;br /&gt;
  |- info.json&lt;br /&gt;
  |- thumbnail.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== info.json ==&lt;br /&gt;
&lt;br /&gt;
The info.json file identifies the mod and defines its version. If the game encounters a problem when parsing the file, the error message can be found in the [[log file]]. A minimal info.json file can look like this:&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;test-mod-thing&amp;quot;,&lt;br /&gt;
      &amp;quot;version&amp;quot;: &amp;quot;0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;title&amp;quot;: &amp;quot;My best test mod&amp;quot;,&lt;br /&gt;
      &amp;quot;author&amp;quot;: &amp;quot;A very great tester&amp;quot;,&lt;br /&gt;
      &amp;quot;factorio_version&amp;quot;: &amp;quot;1.1&amp;quot;,&lt;br /&gt;
      &amp;quot;dependencies&amp;quot;: [&amp;quot;? optional-mod&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
The info.json file supports the following fields:&lt;br /&gt;
&lt;br /&gt;
=== name ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The internal name of mod. The game accepts anything as a mod name, however the mod portal restricts mod names to only consist of alphanumeric characters, dashes and underscores. Note that the mod folder or mod zip file name has to contain the mod name, where the restrictions of the file system apply.&lt;br /&gt;
&lt;br /&gt;
: The game accepts mod names with a maximum length of 100 characters. The mod portal only accepts mods with names that are longer than 3 characters and shorter than 50 characters.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. Defines the version of the mod in the format &amp;lt;code&amp;gt;&amp;quot;number.number.number&amp;quot;&amp;lt;/code&amp;gt; for &amp;lt;code&amp;gt;&amp;quot;main.major.minor&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;0.6.4&amp;quot;&amp;lt;/code&amp;gt;. Each number can range from 0 to 65535.&lt;br /&gt;
&lt;br /&gt;
=== title === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The display name of the mod, so it is not recommended to use someUgly_pRoGrAmMeR-name here. Can be overwritten with a locale entry in the &amp;lt;code&amp;gt;mod-name&amp;lt;/code&amp;gt; category, using the internal mod name as the key.&lt;br /&gt;
&lt;br /&gt;
: The game will reject a title field that is longer than 100 characters. However, this can be worked around by using the locale entry. The mod portal does not restrict mod title length.&lt;br /&gt;
&lt;br /&gt;
=== author === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Mandatory field. The author of the mod. This field does not have restrictions, it can also be a list of authors etc. The mod portal ignores this field, it will simply display the uploader&#039;s name as the author.&lt;br /&gt;
&lt;br /&gt;
=== contact === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. How the mod author can be contacted, for example an email address.&lt;br /&gt;
&lt;br /&gt;
=== homepage === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. Where the mod can be found on the internet. Note that the in-game mod browser shows the mod portal link additionally to this field. Please don&#039;t put &amp;quot;None&amp;quot; here, it makes the field on the mod portal website look ugly. Just leave the field empty if the mod doesn&#039;t have a website/forum thread/discord.&lt;br /&gt;
&lt;br /&gt;
=== description === &lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: Optional field. A short description of what your mod does. This is all that people get to see in-game. Can be overwritten with a locale entry in the &amp;lt;code&amp;gt;mod-description&amp;lt;/code&amp;gt; category, using the internal mod name as the key.&lt;br /&gt;
&lt;br /&gt;
=== factorio_version ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: [[Types/string|string]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Default&#039;&#039;&#039;: &amp;quot;0.12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
: Optional field. The major Factorio version that this mod supports. This can only be one version, not multiple. While the field is optional, usually mods are developed for major versions higher than the default 0.12, so the field has to be added anyway.&lt;br /&gt;
: Adding a minor version, e.g. &amp;quot;0.18.&#039;&#039;&#039;27&#039;&#039;&#039;&amp;quot; will make the mod portal reject the mod and the game act weirdly. That means this shouldn&#039;t be done; use only main and major version &amp;lt;code&amp;gt;&amp;quot;main.major&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;1.0&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
: Mods with the factorio_version &amp;quot;0.18&amp;quot; can also be loaded in 1.0 and the mod portal will return them when queried for factorio_version 1.0 mods.&lt;br /&gt;
&lt;br /&gt;
=== dependencies ===&lt;br /&gt;
: &#039;&#039;&#039;Type&#039;&#039;&#039;: array of [[#Dependency]]&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;Default&#039;&#039;&#039;: [&amp;quot;base&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
: Optional field. Mods that this mod depends on or is incompatible with. If this mod depends on another, the other mod will load first, see [https://lua-api.factorio.com/latest/Data-Lifecycle.html Data-Lifecycle]. An empty array allows get around the default and have no dependencies at all.&lt;br /&gt;
&lt;br /&gt;
: Example:&lt;br /&gt;
: &amp;lt;pre&amp;gt;&amp;quot;dependencies&amp;quot;: [&amp;quot;mod-a&amp;quot;, &amp;quot;? mod-c &amp;gt; 0.4.3&amp;quot;, &amp;quot;! mod-g&amp;quot;]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:: &amp;lt;h4&amp;gt;&amp;lt;span class=&amp;quot;mw-headline&amp;quot; id=&amp;quot;Dependency&amp;quot;&amp;gt;Dependency&amp;lt;/span&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
:: Each dependency is a string that consists of up to three parts: &amp;lt;code&amp;gt;&amp;quot;&amp;lt;prefix&amp;gt; internal-mod-name &amp;lt;equality-operator version&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;, for example &amp;lt;code&amp;gt;&amp;quot;? some-mod-everyone-loves &amp;gt;= 4.2.0&amp;quot;&amp;lt;/code&amp;gt;. The possible prefixes are: &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; for incompatibility, &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; for an optional dependency, &amp;lt;code&amp;gt;(?)&amp;lt;/code&amp;gt; for a hidden optional dependency, &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt; for a dependency that does not affect load order, or no prefix for a hard requirement for the other mod. The equality operator (&amp;lt;code&amp;gt;&amp;lt;, &amp;lt;=, =, &amp;gt;= or &amp;gt;&amp;lt;/code&amp;gt;) combined with the version allows to define dependencies that require certain mod versions, but it is not required. Incompatibility does not support versions, if you use incompatibility you are incompatible with the entire mod.&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Prototype/FluidStream&amp;diff=190060</id>
		<title>Prototype/FluidStream</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Prototype/FluidStream&amp;diff=190060"/>
		<updated>2022-09-29T22:47:31Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* Optional properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Prototype parent|Prototype/Entity}}&lt;br /&gt;
Used for example for the handheld flamethrower.&lt;br /&gt;
&lt;br /&gt;
{{Prototype TOC|stream}}&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
This prototype inherits all the properties from [[Prototype/Entity]].&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_spawn_interval|[[Types/uint16|uint16]]}}&lt;br /&gt;
The stream will spawn one particle every particle_spawn_interval ticks until the particle_spawn_timeout is reached. The first particle will trigger an initial_action upon landing. Each particle triggers an action upon landing. Particles spawned within a single particle_spawn_timeout interval will be connected by a stretched spine_animation.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_horizontal_speed|[[Types/double|double]]}}&lt;br /&gt;
Must be larger than 0. particle_horizontal_speed has to be greater than particle_horizontal_speed_deviation.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_horizontal_speed_deviation|[[Types/double|double]]}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_vertical_acceleration|[[Types/double|double]]}}&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|initial_action|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
Action that is triggered when the first particle lands&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|action|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
Action that is triggered every time a particle lands&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|special_neutral_target_damage|[[Types/DamagePrototype|DamagePrototype]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|width|[[Types/float|float]]|0.5|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_buffer_size|[[Types/uint32|uint32]]|20|optional=true}}&lt;br /&gt;
Number of spawned child particles of the stream. Must be greater than 0 and less than 256.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_spawn_timeout|[[Types/uint16|uint16]]|4 * &amp;lt;code&amp;gt;particle_spawn_interval&amp;lt;/code&amp;gt;|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_start_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_end_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_start_scale|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_alpha_per_part|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_scale_per_part|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_fade_out_threshold|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
Value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_loop_exit_threshold|[[Types/float|float]]|0|optional=true}}&lt;br /&gt;
Value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_loop_frame_count|[[Types/uint16|uint16]]|1|optional=true}}&lt;br /&gt;
Will be set to 1 by the game if less than 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_fade_out_duration|[[Types/uint16|uint16]]|max uint16 (65553)|optional=true}}&lt;br /&gt;
Will be set to 1 by the game if less than 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|spine_animation|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|shadow|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke_sources|[[Types/table|table]] of [[Types/SmokeSource|SmokeSource]]|optional=true}}&lt;br /&gt;
Smoke spawning is controlled by progress_to_create_smoke&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|progress_to_create_smoke|[[Types/float|float]]|0.5|optional=true}}&lt;br /&gt;
The point in the particles projectile arc to start spawning smoke. 0.5 (the default) starts spawning smoke at the halfway point between the source and target.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|stream_light|[[Types/LightDefinition|LightDefinition]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|ground_light|[[Types/LightDefinition|LightDefinition]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|target_position_deviation|[[Types/double|double]]|0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|oriented_particle|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|shadow_scale_enabled|[[Types/bool|bool]]|false|optional=true}}&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
	<entry>
		<id>https://wiki.factorio.com/index.php?title=Prototype/FluidStream&amp;diff=190059</id>
		<title>Prototype/FluidStream</title>
		<link rel="alternate" type="text/html" href="https://wiki.factorio.com/index.php?title=Prototype/FluidStream&amp;diff=190059"/>
		<updated>2022-09-29T22:43:48Z</updated>

		<summary type="html">&lt;p&gt;Raspberrypuppies: /* Mandatory properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Prototype parent|Prototype/Entity}}&lt;br /&gt;
Used for example for the handheld flamethrower.&lt;br /&gt;
&lt;br /&gt;
{{Prototype TOC|stream}}&lt;br /&gt;
&lt;br /&gt;
== Mandatory properties ==&lt;br /&gt;
This prototype inherits all the properties from [[Prototype/Entity]].&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_spawn_interval|[[Types/uint16|uint16]]}}&lt;br /&gt;
The stream will spawn one particle every particle_spawn_interval ticks until the particle_spawn_timeout is reached. The first particle will trigger an initial_action upon landing. Each particle triggers an action upon landing. Particles spawned within a single particle_spawn_timeout interval will be connected by a stretched spine_animation.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_horizontal_speed|[[Types/double|double]]}}&lt;br /&gt;
Must be larger than 0. particle_horizontal_speed has to be greater than particle_horizontal_speed_deviation.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_horizontal_speed_deviation|[[Types/double|double]]}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_vertical_acceleration|[[Types/double|double]]}}&lt;br /&gt;
&lt;br /&gt;
== Optional properties ==&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|initial_action|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|action|[[Types/Trigger|Trigger]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|special_neutral_target_damage|[[Types/DamagePrototype|DamagePrototype]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|width|[[Types/float|float]]|0.5|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_buffer_size|[[Types/uint32|uint32]]|20|optional=true}}&lt;br /&gt;
Number of spawned child particles of the stream. Must be greater than 0 and less than 256.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_spawn_timeout|[[Types/uint16|uint16]]|4 * &amp;lt;code&amp;gt;particle_spawn_interval&amp;lt;/code&amp;gt;|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_start_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_end_alpha|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_start_scale|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_alpha_per_part|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_scale_per_part|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_fade_out_threshold|[[Types/float|float]]|1|optional=true}}&lt;br /&gt;
Value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_loop_exit_threshold|[[Types/float|float]]|0|optional=true}}&lt;br /&gt;
Value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_loop_frame_count|[[Types/uint16|uint16]]|1|optional=true}}&lt;br /&gt;
Will be set to 1 by the game if less than 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle_fade_out_duration|[[Types/uint16|uint16]]|max uint16 (65553)|optional=true}}&lt;br /&gt;
Will be set to 1 by the game if less than 1.&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|spine_animation|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|particle|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|shadow|[[Types/Animation|Animation]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|smoke_sources|[[Types/table|table]] of [[Types/SmokeSource|SmokeSource]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|progress_to_create_smoke|[[Types/float|float]]|0.5|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|stream_light|[[Types/LightDefinition|LightDefinition]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|ground_light|[[Types/LightDefinition|LightDefinition]]|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|target_position_deviation|[[Types/double|double]]|0|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|oriented_particle|[[Types/bool|bool]]|false|optional=true}}&lt;br /&gt;
&lt;br /&gt;
{{Prototype property|shadow_scale_enabled|[[Types/bool|bool]]|false|optional=true}}&lt;/div&gt;</summary>
		<author><name>Raspberrypuppies</name></author>
	</entry>
</feed>